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

Annotation of /chewbacca/PamOffLineSW/PacketUser.h

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.7 - (hide annotations) (download)
Thu Feb 11 09:02:09 2010 UTC (14 years, 9 months ago) by mocchiut
Branch: MAIN
CVS Tags: v10RED, v9r00, v9r01, HEAD
Changes since 1.6: +5 -2 lines
File MIME type: text/plain
9R bugs fixed

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

  ViewVC Help
Powered by ViewVC 1.1.23