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

Contents of /chewbacca/PamOffLineSW/PacketUser.h

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.7 - (show 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 //============================================================================
2 // $Id: PacketUser.h,v 1.6 2009/12/24 10:31:13 mocchiut 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 #include "ReaderAlgorithms.h"
12 #include "../event/mcmd/McmdEvent.h"
13 #include "../event/mcmd/McmdRecord.h"
14
15 #include "TROOT.h" //ROOT version > 5.14
16 #include "TSystem.h" // EMI
17 #include "TArrayI.h" // EMI
18
19 #include <vector>
20
21 using namespace pamela;
22 using namespace pamela::techmodel;
23
24 namespace PamOffLineSW {
25
26
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 class PacketUser {
81
82 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
94 private:
95
96 // store dbinfo when file is bad but num. packet more than 1000
97 // vector <dbinfo*> m_dbinfos;
98
99 //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 //
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 //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
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 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 unsigned int select_maxIDN_DB(const char* table_name, const char* file_name);
205
206 //function that saves informations in our DB
207 bool saveROOT_DB(const char* table_name, const char* folder_name, const char* file_name, unsigned long int pkt_number_in,
208 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 int num_PKT_Saved, const char* nome_input, bool _time_is_estimated);
212
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
260 };
261
262 }
263
264 #endif /*PACKETUSER_H_*/

  ViewVC Help
Powered by ViewVC 1.1.23