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

Contents of /chewbacca/PamOffLineSW/PacketUser.h

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.6 - (show annotations) (download)
Thu Dec 24 10:31:13 2009 UTC (14 years, 11 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 //============================================================================
2 // $Id: PacketUser.h,v 1.5 2009/08/05 18:48:42 pam-fi Exp $
3 // 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 #include "TSystem.h" // EMI
14 #include "TArrayI.h" // EMI
15
16 #include <vector>
17
18 using namespace pamela;
19 using namespace pamela::techmodel;
20
21 namespace PamOffLineSW {
22
23
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 class PacketUser {
78
79 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
91 private:
92
93 // store dbinfo when file is bad but num. packet more than 1000
94 // vector <dbinfo*> m_dbinfos;
95
96 //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 //
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 //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
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 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 bool saveROOT_DB(const char* table_name, const char* folder_name, const char* file_name, unsigned long int pkt_number_in,
205 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 int num_PKT_Saved, const char* nome_input, bool _time_is_estimated);
209
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
257 };
258
259 }
260
261 #endif /*PACKETUSER_H_*/

  ViewVC Help
Powered by ViewVC 1.1.23