/[PAMELA software]/chewbacca/PamOffLineSW/PacketUser.h
ViewVC logotype

Annotation of /chewbacca/PamOffLineSW/PacketUser.h

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.6 - (hide annotations) (download)
Thu Dec 24 10:31:13 2009 UTC (15 years, 2 months ago) by mocchiut
Branch: MAIN
Changes since 1.5: +83 -4 lines
File MIME type: text/plain
New version, packages recovering tools implemented, new DB, bugs fixed

1 mocchiut 1.1 //============================================================================
2 mocchiut 1.6 // $Id: PacketUser.h,v 1.5 2009/08/05 18:48:42 pam-fi Exp $
3 mocchiut 1.1 // Description :
4     //============================================================================
5     #ifndef PACKETUSER_H_
6     #define PACKETUSER_H_
7     #include "PamInclude.h"
8     #include <TTimeStamp.h>
9     #include "../event/PacketType.h"
10     #include "EventReader.h"
11    
12     #include "TROOT.h" //ROOT version > 5.14
13 mocchiut 1.4 #include "TSystem.h" // EMI
14 mocchiut 1.6 #include "TArrayI.h" // EMI
15    
16     #include <vector>
17    
18 mocchiut 1.1 using namespace pamela;
19     using namespace pamela::techmodel;
20    
21 pam-fi 1.5 namespace PamOffLineSW {
22 mocchiut 1.1
23 mocchiut 1.6
24     /* class dbinfo{ */
25     /* public: */
26     /* dbinfo( */
27     /* char * v_folder_name, */
28     /* char* v_file_name, */
29     /* unsigned long int v_pkt_number_in, */
30     /* unsigned long int v_pkt_number_fin, */
31     /* unsigned long int v_obt_in, */
32     /* unsigned long int v_obt_fin, */
33     /* unsigned long int v_mboot_num, */
34     /* unsigned long int v_time_offset, */
35     /* int v_bad_pkt, */
36     /* int v_bad_pkt_read, */
37     /* int v_bad_pkt_CalRead, */
38     /* int v_num_PKT_Saved, */
39     /* char* v_nome_input, */
40     /* bool v__time_is_estimated */
41     /* ){ */
42     /* folder_name = strdup(v_folder_name); */
43     /* file_name = strdup(v_file_name); */
44     /* pkt_number_in = v_pkt_number_in; */
45     /* pkt_number_fin = v_pkt_number_fin; */
46     /* obt_in = v_obt_in; */
47     /* obt_fin = v_obt_fin; */
48     /* mboot_num = v_mboot_num; */
49     /* time_offset = v_time_offset; */
50     /* bad_pkt = v_bad_pkt; */
51     /* bad_pkt_read = v_bad_pkt_read; */
52     /* bad_pkt_CalRead = v_bad_pkt_CalRead; */
53     /* num_PKT_Saved = v_num_PKT_Saved; */
54     /* nome_input = v_nome_input; */
55     /* _time_is_estimated = v__time_is_estimated; */
56     /* } */
57     /* ~dbinfo(){ */
58     /* free(folder_name); */
59     /* free(file_name); */
60     /* } */
61     /* char* folder_name; */
62     /* char* file_name; */
63     /* unsigned long int pkt_number_in; */
64     /* unsigned long int pkt_number_fin; */
65     /* unsigned long int obt_in; */
66     /* unsigned long int obt_fin; */
67     /* unsigned long int mboot_num; */
68     /* unsigned long int time_offset; */
69     /* int bad_pkt; */
70     /* int bad_pkt_read; */
71     /* int bad_pkt_CalRead; */
72     /* int num_PKT_Saved; */
73     /* char* nome_input; */
74     /* bool _time_is_estimated; */
75     /* }; */
76    
77 pam-fi 1.5 class PacketUser {
78 mocchiut 1.1
79 pam-fi 1.5 public:
80     //destructor
81     virtual ~PacketUser();
82     //the interface called by the external module: saves packets in ROOT files using the YODA part
83     void usePKT(char*& headerPkt, char*& pamPkt, long int length, bool isCons, bool isPKTGood, const PacketType* type,
84     unsigned long int counter, unsigned long int obt);
85    
86     //return the instance of the singleton
87     static PacketUser& getInstance();
88     //to be called at the end of the game
89     void FinishLastGroup();
90 mocchiut 1.1
91     private:
92 mocchiut 1.6
93     // store dbinfo when file is bad but num. packet more than 1000
94     // vector <dbinfo*> m_dbinfos;
95    
96 pam-fi 1.5 //the Event Reader handler
97     pamela::techmodel::EventReader* reader;
98     //the Pamela Run handler, one for ech ROOT file created
99     pamela::PamelaRun* pRun;
100     //Constructor
101     PacketUser();
102     //The istance
103     static PacketUser instance;
104     //How many times I found a discontinuity
105     static int numDiscontinity;
106     //How many packets arrived here,
107     static int numPKT;
108     //How many packetS saved in each ROOT files
109     static int numPKTSaved;
110     //Name of the final ROOT file
111     char rootfilename[80];
112     //pkt counter of the first packet of the group
113     unsigned long int pkt_number_init;
114     //pkt OBT of the first packet of the group
115     unsigned long int obt_init;
116     //pkt counter of the last packet of the group
117     unsigned long int pkt_number_last;
118     //pkt OBT of the last packet of the group
119     unsigned long int obt_last;
120     //the first packet's absolute time
121     unsigned long int real_time_init;
122     //the last packet's absolute time
123     unsigned long int real_time_last;
124     //tymesync and OBT informations
125     unsigned long int obt_time_sync;
126     unsigned long int last_time_sync_info;
127     // (tassa) keep previous value of time_sync
128     unsigned long int obt_time_sync_prevvalue;
129     unsigned long int last_time_sync_info_prevvalue;
130     bool time_is_estimated;
131     //TimeOffset used to obtain absolute time
132     unsigned long int timeOffset;
133     //part of the ROOT filename used to retrieve timeOffset for special files
134     char nnnn_mmm_ppp[80];
135     //boot number
136     unsigned long int boot_number;
137     unsigned long int boot_number_prevvalue;
138     //(tassa)
139     unsigned int id_to_recover[1000];
140     int id_to_recover_index;
141     //number of packets with problems( in general CRC problems) detected in EventReader:
142     int bad_pkt_EventReader;
143     //num ber of Calibration packets with problems( in general CRC problems) detected in EventReader:
144     int bad_pkt_CalibReader;
145     //number of good packets that comes from one or more corrupted cadres
146     int bad_pkt;
147    
148     //marco_new:
149     //the ID of the current ROOT file in table Table_ROOT_Good
150     unsigned int my_id;
151    
152     //number of good Calibration packets in the ROOT files
153     // int good_pkt_Calib;//maybe I will use this in future
154    
155     //the table name in our DB for the ROOT files
156     const char* Table_ROOT_Good;
157     //the table name in our DB where I put the ROOT files that have not Real time associated
158     const char* Table_ROOT_Bad;
159     //table used to retrieve TimeOffset
160     const char* Table_GL_RESURS_OFFSET;
161     //the table name in our DB for MERGING
162     const char* Table_ROOT_Merging;
163    
164 mocchiut 1.6 //
165     Int_t recoverlimit;
166     // list of ID in root_table_bad with more than XXX packets
167     TArrayI *idtorecover;
168     //
169     Int_t arsize;
170     // delete small files in root_table_bad from disk
171     void CleanDisk();
172    
173 pam-fi 1.5 //starts a new root file
174     void StartGroup();
175     //set the value of the counter and obt of the first packet of the group
176     void setInit(unsigned long int counter, unsigned long int obt);
177     //finish the old ROOT file
178     void FinishGroup(char * filename);
179     //set the value of the counter and obt of the last packet of the group
180     void setLast(unsigned long int counter, unsigned long int obt);
181     //retrieve OBT_TIME_SYNC and LAST_TIME_SYNC_INFO from packet
182     void setTimeSync(char* packet, long int pktLenght, const PacketType* type);
183     //retrieve boot number
184     void setBootNumber(char* packet, long int pktLenght, const PacketType* type);
185     //set real_time_init and real_time_last
186     void setReal_Time();
187 mocchiut 1.6
188     void setReal_TimeRECOVERY(
189     unsigned long int & _real_time_init,
190     unsigned long int & _real_time_last,
191     unsigned long int _obt_init,
192     unsigned long int _obt_last
193     );
194    
195     //
196 pam-fi 1.5 void recover_boot_number();
197    
198     //retrieve the timeOffset from table=Table_GL_RESURS_OFFSET
199     unsigned long int retrieveTimeOffset(const char * table);
200    
201     unsigned int select_maxIDN_DB(const char* table_name);
202    
203     //function that saves informations in our DB
204 mocchiut 1.6 bool saveROOT_DB(const char* table_name, const char* folder_name, const char* file_name, unsigned long int pkt_number_in,
205 pam-fi 1.5 unsigned long int pkt_number_fin, unsigned long int obt_in, unsigned long int obt_fin, unsigned long int oT_sync,
206     unsigned long int lT_sync_info, unsigned long int mtime_init, unsigned long int mtime_last,
207     unsigned long int mboot_num, unsigned long int time_offset, int bad_pkt, int bad_pkt_read, int bad_pkt_CalRead,
208 mocchiut 1.6 int num_PKT_Saved, const char* nome_input, bool _time_is_estimated);
209 pam-fi 1.5
210     ///new part merging
211    
212     //tipi di relazioni che il ROOT file puo' avere con un ROOT gia salvatto in DB
213     //0 =AFTER se c'e' una sovrapposizione temporale parziale, inizia dopo l'inizio di quello associato e finisce dopo la sua fine
214     //1 =BEFORE se c'e' una sovrapposizione temporale parziale, ossia finisce prima della fine di quello associato ma inizia prima
215     //2 =SMALLER se c'e' una sovrapposizione temporale parziale: e' contenuto nel ROOT file associato
216     //3 =BIGGER se c'e' una sovrapposizione temporale parziale: contiene il ROOT file associato
217     enum type_Rel_ROOT {
218     AFTER, //se inizia dentro e finisce fuori
219     BEFORE, //inizia prima ma finisce dentro
220     SMALLER, //se inizia e finisce dentro
221     BIGGER
222     //se inizia prima e finisce dopo
223     };
224    
225     bool merge_ROOTfiles();
226    
227     bool saveMergeROOT_DB(const char* table_name, unsigned int root_id, unsigned long int pkt_number_in,
228     unsigned long int pkt_number_fin, unsigned long int obt_in, unsigned long int obt_fin,
229     unsigned long int mtime_init, unsigned long int mtime_last, unsigned long int mboot_num, double percentage);
230    
231     bool updateMergeROOT_DB(const char* table_name, unsigned int root_id, unsigned long int pkt_number_in,
232     unsigned long int pkt_number_fin, unsigned long int obt_in, unsigned long int obt_fin,
233     unsigned long int mtime_init, unsigned long int mtime_last, unsigned long int mboot_num, double bad_perc,
234     unsigned int ID_record, type_Rel_ROOT type_rel);
235    
236     //search in DB if there are ROOT files in the temporal range of interest and with the given relation
237     TSQLResult* Select_merging(const char* table_name, unsigned long int mtime_init, unsigned long int mtime_last,
238     type_Rel_ROOT type_rel);
239    
240     //Lock the tableTobeLocked table or all the tables I know if par=NULL
241     int LockTables(const char* tableTobeLocked);
242     //Unlock all the lockedtables
243     int UnLockTables();
244     //Open DB connection and lock table
245     void OpenDBConnection(const char* tableTobeLocked);
246     //Close DB connection and UNlock tables
247     void CloseDBConnection();
248    
249     /***************************************************************************************/
250     //UNUSED: return the system time in ms
251     unsigned long long Record_Time();
252     //DBG functions that saves pkt
253     void saveALL_PKT(char* headerPkt, char* pamPkt, long int length, bool append);
254     //function used to save in a file the packet
255     void savePKT_file(char* headerPkt, char* pamPkt, long int length, bool append, char* nomefile);
256 mocchiut 1.1
257     };
258    
259     }
260    
261     #endif /*PACKETUSER_H_*/

  ViewVC Help
Powered by ViewVC 1.1.23