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

Diff of /chewbacca/PamOffLineSW/PacketUser.h

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

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

Legend:
Removed from v.1.1.1.1  
changed lines
  Added in v.1.7

  ViewVC Help
Powered by ViewVC 1.1.23