/[PAMELA software]/YodaProfiler/src/GLTables.cpp
ViewVC logotype

Annotation of /YodaProfiler/src/GLTables.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.22 - (hide annotations) (download)
Wed Jan 31 16:15:02 2007 UTC (17 years, 10 months ago) by mocchiut
Branch: MAIN
CVS Tags: v3r00
Changes since 1.21: +145 -0 lines
V3R00 - add DB reconnection capability

1 mocchiut 1.1 /**
2     * \file GLTables.cpp
3     * \author Elena Vannuccini
4     *
5     * The file contains implementation of the methods to query the DB.
6     */
7     //
8     #include <sstream>
9 mocchiut 1.12 #include <iostream>
10 mocchiut 1.1 //
11     #include <TFile.h>
12     #include <TTree.h>
13 mocchiut 1.16 #include <TTimeStamp.h>
14 mocchiut 1.1 #include <EventHeader.h>
15     #include <PscuHeader.h>
16     //
17     #include <GLTables.h>
18 mocchiut 1.13 #include <sgp4.h>
19 mocchiut 1.1 //
20 mocchiut 1.22 ClassImp(GL_TABLES);
21 mocchiut 1.1 ClassImp(GL_TRK_CALIB);
22     ClassImp(GL_RUN);
23     ClassImp(GL_ROOT);
24     ClassImp(GL_PARAM);
25     ClassImp(GL_S4_CALIB);
26     ClassImp(GL_CALO_CALIB);
27     ClassImp(GL_TIMESYNC);
28 mocchiut 1.12 ClassImp(GL_TLE);
29 mocchiut 1.1 //
30     using namespace std;
31    
32 mocchiut 1.22 GL_TABLES::GL_TABLES(){
33     };
34    
35     GL_TABLES::GL_TABLES(TString host, TString user, TString psw){
36     fHost = new TString(host.Data());
37     fUser = new TString(user.Data());
38     fPsw = new TString(psw.Data());
39     fSet = true;
40     fNquery = 0;
41     };
42    
43    
44     void GL_TABLES::Set(TString host, TString user, TString psw){
45     fHost = new TString(host.Data());
46     fUser = new TString(user.Data());
47     fPsw = new TString(psw.Data());
48     fSet = true;
49     fNquery = 0;
50     };
51    
52     Bool_t GL_TABLES::IsConnected(TSQLServer *dbc){
53     //
54     //
55     //
56     if ( !fSet ){
57     return true;
58     };
59     //
60     //
61     //
62     // printf(" host is %s \n",fHost->Data());
63     //
64     stringstream myquery;
65     myquery.str("");
66     myquery << "show databases;";
67     dbc->Query(myquery.str().c_str());
68     fNquery++;
69     //
70     if ( dbc->GetErrorCode() != 2013 && dbc->GetErrorCode() != 2006 ){
71     // is connected
72     return true;
73     } else {
74     //
75     printf(" WARNING: Lost connection to DB! try to recover... \n");
76     //
77     TString host = fHost->Data();
78     TString user = fUser->Data();
79     TString psw = fPsw->Data();
80     delete dbc;
81     dbc = TSQLServer::Connect(host.Data(),user.Data(),psw.Data());
82     //
83     myquery.str("");
84     myquery << "show databases;";
85     dbc->Query(myquery.str().c_str());
86     fNquery++;
87     //
88     if ( dbc->GetErrorCode() != 2013 && dbc->GetErrorCode() != 2006 ){
89     //
90     printf(" ...connection recovered, I can continue! \n");
91     //
92     myquery.str("");
93     myquery << "SET time_zone='+0:00'";
94     dbc->Query(myquery.str().c_str());
95     fNquery++;
96     myquery.str("");
97     myquery << "SET wait_timeout=173000;";
98     dbc->Query(myquery.str().c_str());
99     fNquery++;
100     return true;
101     };
102     };
103     //
104     printf(" GLTABLES: connection is gone away, query will fail\n");
105     //
106     return false;
107     //
108     };
109    
110     void GL_TABLES::ResetCounters(){
111     fNquery = 0;
112     };
113    
114     void GL_TABLES::AddQ(){
115     if ( fSet ) fNquery++;
116     };
117    
118     UInt_t GL_TABLES::GetNqueries(){
119     UInt_t rn = 0;
120     rn += (UInt_t&)fNquery;
121     return(rn);
122     };
123    
124 mocchiut 1.1 GL_RUN::GL_RUN() {
125     ID = 0;
126     ID_RUN_FRAG = 0;
127     ID_ROOT_L0 = 0;
128     ID_ROOT_L2 = 0;
129     RUNHEADER_TIME = 0;
130     RUNTRAILER_TIME = 0;
131     EV_FROM = 0;
132     EV_TO = 0;
133     TRK_CALIB_USED = 0;
134     EFF_WRK_SCHEDULE = 0;
135     PRH_VAR_TRG_MODE_A = 0;
136     PRH_VAR_TRG_MODE_B = 0;
137     ACQ_BUILD_INFO = 0;
138     ACQ_VAR_INFO = 0;
139     RUNHEADER_OBT = 0;
140     RUNTRAILER_OBT = 0;
141     RUNHEADER_PKT = 0;
142     RUNTRAILER_PKT = 0;
143     NEVENTS = 0;
144     LAST_TIMESYNC = 0;
145     OBT_TIMESYNC = 0;
146     COMPILATIONTIMESTAMP = 0;
147     FAV_WRK_SCHEDULE = 0;
148     RM_ACQ_AFTER_CALIB = 0;
149     RM_ACQ_SETTING_MODE = 0;
150     PKT_COUNTER = 0;
151     PKT_READY_COUNTER = 0;
152     TRK_CALIB_USED = 0;
153     CAL_DSP_MASK = 0;
154     BOOT_NUMBER = 0;
155     VALIDATION = 0;
156     }
157    
158 pam-fi 1.9
159 mocchiut 1.1 void GL_RUN::Clear() {
160     ID = 0;
161     ID_RUN_FRAG = 0;
162     ID_ROOT_L0 = 0;
163     ID_ROOT_L2 = 0;
164     RUNHEADER_TIME = 0;
165     RUNTRAILER_TIME = 0;
166     EV_FROM = 0;
167     EV_TO = 0;
168     TRK_CALIB_USED = 0;
169     EFF_WRK_SCHEDULE = 0;
170     PRH_VAR_TRG_MODE_A = 0;
171     PRH_VAR_TRG_MODE_B = 0;
172     ACQ_BUILD_INFO = 0;
173     ACQ_VAR_INFO = 0;
174     RUNHEADER_OBT = 0;
175     RUNTRAILER_OBT = 0;
176     RUNHEADER_PKT = 0;
177     RUNTRAILER_PKT = 0;
178     NEVENTS = 0;
179     LAST_TIMESYNC = 0;
180     OBT_TIMESYNC = 0;
181     COMPILATIONTIMESTAMP = 0;
182     FAV_WRK_SCHEDULE = 0;
183     RM_ACQ_AFTER_CALIB = 0;
184     RM_ACQ_SETTING_MODE = 0;
185     PKT_COUNTER = 0;
186     PKT_READY_COUNTER = 0;
187     TRK_CALIB_USED = 0;
188     CAL_DSP_MASK = 0;
189     BOOT_NUMBER = 0;
190     VALIDATION = 0;
191     }
192    
193     GL_ROOT::GL_ROOT(){
194     ID = 0;
195     ID_RAW = 0;
196     ID_TIMESYNC = 0;
197     PATH = "";
198     NAME = "";
199     }
200    
201     GL_PARAM::GL_PARAM(){
202     ID = 0;
203     PATH = "";
204     NAME = "";
205     DESCR = "";
206     FROM_TIME = 0;
207     TO_TIME = 0;
208     TYPE = 0;
209     }
210    
211    
212     GL_TRK_CALIB::GL_TRK_CALIB(){
213     ID = 0;
214     ID_ROOT_L0 = 0;
215     EV_ROOT_CALIBTRK1 = 0;
216     EV_ROOT_CALIBTRK2 = 0;
217     FROM_TIME = 0;
218     TO_TIME = 0;
219     OBT1 = 0;
220     OBT2 = 0;
221     PKT1 = 0;
222     PKT2 = 0;
223 pam-fi 1.9 BOOT_NUMBER = 0;
224     VALIDATION = 0;
225 mocchiut 1.1 }
226    
227     GL_CALO_CALIB::GL_CALO_CALIB(){
228     ID = 0;
229     ID_ROOT_L0 = 0;
230     EV_ROOT = 0;
231     FROM_TIME = 0;
232     TO_TIME = 0;
233     SECTION = 0;
234     }
235    
236     GL_S4_CALIB::GL_S4_CALIB(){
237     ID = 0;
238     ID_ROOT_L0 = 0;
239     EV_ROOT = 0;
240     FROM_TIME = 0;
241     TO_TIME = 0;
242     PARAM_FIT0 = 0.;
243     PARAM_FIT1 = 0.;
244     }
245    
246     GL_TIMESYNC::GL_TIMESYNC(){
247     obtfirst = 0;
248     pktfirst = 0;
249     toffset = 0;
250 mocchiut 1.17 // ID = 0;
251     // ID_RAW = 0;
252 mocchiut 1.1 OBT0 = 0;
253     TIMESYNC = 0;
254     TYPE = 0;
255 mocchiut 1.12 }
256    
257     // ****************************************************
258 mocchiut 1.1
259     void GL_RUN::SetEV_FROM(UInt_t evfrom){
260     EV_FROM = evfrom;
261     };
262    
263     void GL_RUN::SetEV_TO(UInt_t evto){
264     EV_TO = evto;
265     };
266    
267     void GL_RUN::SetNEVENTS(UInt_t nev){
268     NEVENTS = nev;
269     };
270    
271     void GL_RUN::SetBOOTNUMBER(UInt_t boot){
272     BOOT_NUMBER = boot;
273     };
274    
275     void GL_RUN::SetRUNHEADER_TIME(UInt_t absth){
276     RUNHEADER_TIME = absth;
277     };
278    
279     void GL_RUN::SetRUNTRAILER_TIME(UInt_t abstt){
280     RUNTRAILER_TIME = abstt;
281     };
282    
283     void GL_RUN::SetRUNHEADER_PKT(UInt_t absth){
284     RUNHEADER_PKT = absth;
285     };
286    
287     void GL_RUN::SetRUNTRAILER_PKT(UInt_t abstt){
288     RUNTRAILER_PKT = abstt;
289     };
290    
291     void GL_RUN::SetRUNHEADER_OBT(UInt_t absth){
292     RUNHEADER_OBT = absth;
293     };
294    
295     void GL_RUN::SetRUNTRAILER_OBT(UInt_t abstt){
296     RUNTRAILER_OBT = abstt;
297     };
298    
299     void GL_RUN::SetID_ROOT_L2(UInt_t idl2){
300     ID_ROOT_L2 = idl2;
301     };
302    
303     void GL_RUN::SetID_ROOT_L0(UInt_t idroot){
304     ID_ROOT_L0 = idroot;
305     };
306    
307     void GL_RUN::SetID_RUN_FRAG(UInt_t idfrag){
308     ID_RUN_FRAG = idfrag;
309     };
310    
311     void GL_RUN::SetVALIDATION(UInt_t valid){
312     VALIDATION = valid;
313     };
314    
315     void GL_RUN::SetLAST_TIMESYNC(UInt_t ts){
316     LAST_TIMESYNC = ts;
317     };
318    
319     void GL_RUN::SetOBT_TIMESYNC(UInt_t ts){
320     OBT_TIMESYNC = ts;
321     };
322    
323     void GL_RUN:: SetPKT_COUNTER(UInt_t value){
324     PKT_COUNTER = value;
325     };
326    
327     void GL_RUN:: SetPKT_READY_COUNTER(UInt_t value){
328     PKT_READY_COUNTER = value;
329     };
330    
331     void GL_RUN:: SetCOMPILATIONTIMESTAMP(UInt_t value){
332     COMPILATIONTIMESTAMP = value;
333     };
334    
335     void GL_RUN:: SetFAV_WRK_SCHEDULE(UInt_t value){
336     FAV_WRK_SCHEDULE = value;
337     };
338    
339     void GL_RUN:: SetEFF_WRK_SCHEDULE(UInt_t value){
340     EFF_WRK_SCHEDULE = value;
341     };
342    
343     void GL_RUN:: SetPRH_VAR_TRG_MODE_A(UInt_t value){
344     PRH_VAR_TRG_MODE_A = value;
345     };
346    
347     void GL_RUN:: SetPRH_VAR_TRG_MODE_B(UInt_t value){
348     PRH_VAR_TRG_MODE_B = value;
349     };
350    
351     void GL_RUN:: SetACQ_BUILD_INFO(UInt_t value){
352     ACQ_BUILD_INFO = value;
353     };
354    
355     void GL_RUN:: SetACQ_VAR_INFO(UInt_t value){
356     ACQ_VAR_INFO = value;
357     };
358    
359     void GL_RUN:: SetRM_ACQ_AFTER_CALIB(UInt_t value){
360     RM_ACQ_AFTER_CALIB = value;
361     };
362    
363     void GL_RUN:: SetRM_ACQ_SETTING_MODE(UInt_t value){
364     RM_ACQ_SETTING_MODE = value;
365     };
366    
367     void GL_RUN:: SetTRK_CALIB_USED(UInt_t value){
368     TRK_CALIB_USED = value;
369     };
370    
371     void GL_RUN:: SetCAL_DSP_MASK(UInt_t value){
372     CAL_DSP_MASK = value;
373     };
374    
375     void GL_RUN:: SetID(UInt_t value){
376     ID = value;
377     };
378    
379     void GL_RUN::Set_GL_RUNT(RunTrailerEvent *runt, PscuHeader *pht){
380     PKT_COUNTER = runt->PKT_COUNTER;
381     PKT_READY_COUNTER = runt->PKT_ReadyCounter;
382     RUNTRAILER_OBT = pht->GetOrbitalTime();
383     RUNTRAILER_PKT = pht->GetCounter();
384     };
385    
386     void GL_RUN::Set_GL_RUNH(RunHeaderEvent *runh, PscuHeader *phh){
387     TRK_CALIB_USED = runh->TRK_CALIB_USED;
388     PRH_VAR_TRG_MODE_A = runh->PRH_VAR_TRIGGER_MODE_A;
389     PRH_VAR_TRG_MODE_B = runh->PRH_VAR_TRIGGER_MODE_B;
390     ACQ_BUILD_INFO = runh->ACQ_BUILD_INFO;
391     ACQ_VAR_INFO = runh->ACQ_VAR_INFO;
392     RUNHEADER_OBT = phh->GetOrbitalTime();
393     RUNHEADER_PKT = phh->GetCounter();
394     LAST_TIMESYNC = runh->LAST_TIME_SYNC_INFO;
395     OBT_TIMESYNC = runh->OBT_TIME_SYNC;
396     COMPILATIONTIMESTAMP = runh->COMPILATIONTIMESTAMP;
397     FAV_WRK_SCHEDULE = runh->FAVOURITE_WORKING_SCHEDULE;
398     EFF_WRK_SCHEDULE = runh->EFFECTIVE_WORKING_SCHEDULE;
399     RM_ACQ_AFTER_CALIB = runh->RM_ACQ_AFTER_CALIB;
400     RM_ACQ_SETTING_MODE = runh->RM_ACQ_SETTING_MODE;
401     TRK_CALIB_USED = runh->TRK_CALIB_USED;
402     CAL_DSP_MASK = runh->CAL_DSP_MASK;
403     };
404    
405     void GL_RUN::Set_GL_RUNT0(){
406     PKT_COUNTER = 0;
407     PKT_READY_COUNTER = 0;
408     RUNTRAILER_OBT = 0;
409     RUNTRAILER_PKT = 0;
410     };
411    
412     void GL_RUN::Set_GL_RUNH0(){
413     TRK_CALIB_USED = 0;
414     PRH_VAR_TRG_MODE_A = 0;
415     PRH_VAR_TRG_MODE_B = 0;
416     ACQ_BUILD_INFO = 0;
417     ACQ_VAR_INFO = 0;
418     RUNHEADER_OBT = 0;
419     RUNHEADER_PKT = 0;
420     LAST_TIMESYNC = 0;
421     OBT_TIMESYNC = 0;
422     COMPILATIONTIMESTAMP = 0;
423     FAV_WRK_SCHEDULE = 0;
424     EFF_WRK_SCHEDULE = 0;
425     RM_ACQ_AFTER_CALIB = 0;
426     RM_ACQ_SETTING_MODE = 0;
427     TRK_CALIB_USED = 0;
428     CAL_DSP_MASK = 0;
429     };
430    
431 pam-fi 1.9 void GL_RUN::Set_GL_RUN(TSQLRow *Row){
432     for( Int_t t = 0; t < 30; t++){
433     if (t== 0) ID = (UInt_t)atoll(Row->GetField(t));
434     if (t== 1) ID_RUN_FRAG = (UInt_t)atoll(Row->GetField(t));
435     if (t== 2) ID_ROOT_L0 = (UInt_t)atoll(Row->GetField(t));
436     if (t== 3) ID_ROOT_L2 = (UInt_t)atoll(Row->GetField(t));
437     if (t== 4) RUNHEADER_TIME = (UInt_t)atoll(Row->GetField(t));
438     if (t== 5) RUNTRAILER_TIME = (UInt_t)atoll(Row->GetField(t));
439     if (t== 6) RUNHEADER_OBT = (UInt_t)atoll(Row->GetField(t));
440     if (t== 7) RUNTRAILER_OBT = (UInt_t)atoll(Row->GetField(t));
441     if (t== 8) RUNHEADER_PKT = (UInt_t)atoll(Row->GetField(t));
442     if (t== 9) RUNTRAILER_PKT = (UInt_t)atoll(Row->GetField(t));
443     if (t==10) BOOT_NUMBER = (UInt_t)atoll(Row->GetField(t));
444     if (t==11) EV_FROM = (UInt_t)atoll(Row->GetField(t));
445     if (t==12) EV_TO = (UInt_t)atoll(Row->GetField(t));
446     if (t==13) NEVENTS = (UInt_t)atoll(Row->GetField(t));
447     if (t==14) PKT_COUNTER = (UInt_t)atoll(Row->GetField(t));
448     if (t==15) PKT_READY_COUNTER = (UInt_t)atoll(Row->GetField(t));
449     if (t==16) COMPILATIONTIMESTAMP = (UInt_t)atoll(Row->GetField(t));
450     if (t==17) FAV_WRK_SCHEDULE = (UInt_t)atoll(Row->GetField(t));
451     if (t==18) EFF_WRK_SCHEDULE = (UInt_t)atoll(Row->GetField(t));
452     if (t==19) PRH_VAR_TRG_MODE_A= (UInt_t)atoll(Row->GetField(t));
453     if (t==20) PRH_VAR_TRG_MODE_B= (UInt_t)atoll(Row->GetField(t));
454     if (t==21) ACQ_BUILD_INFO = (UInt_t)atoll(Row->GetField(t));
455     if (t==22) ACQ_VAR_INFO = (UInt_t)atoll(Row->GetField(t));
456     if (t==23) RM_ACQ_AFTER_CALIB= (UInt_t)atoll(Row->GetField(t));
457     if (t==24) RM_ACQ_SETTING_MODE = (UInt_t)atoll(Row->GetField(t));
458     if (t==25) TRK_CALIB_USED = (UInt_t)atoll(Row->GetField(t));
459     if (t==26) CAL_DSP_MASK = (UInt_t)atoll(Row->GetField(t));
460     if (t==27) LAST_TIMESYNC = (UInt_t)atoll(Row->GetField(t));
461     if (t==28) OBT_TIMESYNC = (UInt_t)atoll(Row->GetField(t));
462     if (t==29) VALIDATION = (UInt_t)atoll(Row->GetField(t));
463     };
464    
465     }
466    
467 mocchiut 1.14 /**
468 mocchiut 1.15 * This method delete the run from the "FromTable" table and store it in the GL_RUN_TRASH table
469     * If IDRUN is 0 "this->ID" run is used.
470 mocchiut 1.14 *
471     **/
472     Int_t GL_RUN::DeleteRun(TSQLServer *dbc,UInt_t IDRUN,TString FromTable){
473     // MySQL variables
474     TSQLResult *pResult;
475     TSQLRow *Row;
476     stringstream myquery;
477     //
478     if ( !IDRUN ) IDRUN = ID;
479     if ( !IDRUN ) return 1;
480     // ----------------
481     myquery.str("");
482     myquery << " INSERT INTO GL_RUN_TRASH (";
483     myquery << "ID";
484     myquery << ",ID_RUN_FRAG";
485     myquery << ",ID_ROOT_L0";
486     myquery << ",ID_ROOT_L2";
487     myquery << ",RUNHEADER_TIME";
488     myquery << ",RUNTRAILER_TIME";
489     myquery << ",RUNHEADER_OBT";
490     myquery << ",RUNTRAILER_OBT";
491     myquery << ",RUNHEADER_PKT";
492     myquery << ",RUNTRAILER_PKT";
493     myquery << ",BOOT_NUMBER";
494     myquery << ",EV_FROM";
495     myquery << ",EV_TO";
496     myquery << ",NEVENTS";
497     myquery << ",PKT_COUNTER";
498     myquery << ",PKT_READY_COUNTER";
499     myquery << ",COMPILATIONTIMESTAMP";
500     myquery << ",FAV_WRK_SCHEDULE";
501     myquery << ",EFF_WRK_SCHEDULE";
502     myquery << ",PRH_VAR_TRG_MODE_A";
503     myquery << ",PRH_VAR_TRG_MODE_B";
504     myquery << ",ACQ_BUILD_INFO";
505     myquery << ",ACQ_VAR_INFO";
506     myquery << ",RM_ACQ_AFTER_CALIB";
507     myquery << ",RM_ACQ_SETTING_MODE";
508     myquery << ",TRK_CALIB_USED";
509     myquery << ",CAL_DSP_MASK";
510     myquery << ",LAST_TIMESYNC";
511     myquery << ",OBT_TIMESYNC";
512     myquery << ",VALIDATION";
513     myquery << ",INSERT_TIME";
514     myquery << ") SELECT * FROM ";
515     myquery << FromTable.Data();
516     myquery << " WHERE ID=";
517     myquery << (UInt_t)IDRUN << ";";
518     //
519     // printf("1myquery is %s \n",myquery.str().c_str());
520     //
521 mocchiut 1.22 if ( !this->GetGLTABLES()->IsConnected(dbc) ) return -57;
522     this->GetGLTABLES()->AddQ();
523 mocchiut 1.14 dbc->Query(myquery.str().c_str());
524     //
525 mocchiut 1.15 // retrieve this ID_TRASH
526     //
527     myquery.str("");
528     myquery << " SELECT ID_TRASH,ID_ROOT_L0,ID_ROOT_L2 FROM GL_RUN_TRASH ORDER BY ID_TRASH DESC LIMIT 1";
529 mocchiut 1.22 if ( !this->GetGLTABLES()->IsConnected(dbc) ) return -57;
530     this->GetGLTABLES()->AddQ();
531 mocchiut 1.15 pResult = dbc->Query(myquery.str().c_str());
532     //
533     UInt_t idtrash = 0;
534     UInt_t idl0 = 0;
535     UInt_t idl2 = 0;
536     //
537     Row = pResult->Next();
538     if( Row != NULL ){
539     idtrash = (UInt_t)atoll(Row->GetField(0));
540     idl0 = (UInt_t)atoll(Row->GetField(1));
541     idl2 = (UInt_t)atoll(Row->GetField(2));
542     };
543     //
544 mocchiut 1.14 TString fileL0 = "";
545     TString fileL2 = "";
546     myquery.str("");
547     myquery << " SELECT NAME FROM GL_ROOT WHERE ID=";
548 mocchiut 1.15 myquery << idl0 << ";";
549 mocchiut 1.14 //
550     // printf("2myquery is %s \n",myquery.str().c_str());
551     //
552 mocchiut 1.22 if ( !this->GetGLTABLES()->IsConnected(dbc) ) return -57;
553     this->GetGLTABLES()->AddQ();
554 mocchiut 1.14 pResult = dbc->Query(myquery.str().c_str());
555     //
556     Row = pResult->Next();
557     if( Row != NULL ){
558     fileL0 = (TString)Row->GetField(0);
559     };
560     //
561     //
562     //
563     myquery.str("");
564     myquery << " SELECT NAME FROM GL_ROOT WHERE ID=";
565 mocchiut 1.15 myquery << idl2 << ";";
566 mocchiut 1.14 //
567     // printf("3myquery is %s \n",myquery.str().c_str());
568     //
569 mocchiut 1.22 if ( !this->GetGLTABLES()->IsConnected(dbc) ) return -57;
570     this->GetGLTABLES()->AddQ();
571 mocchiut 1.14 pResult = dbc->Query(myquery.str().c_str());
572     //
573     Row = pResult->Next();
574     if( Row != NULL ){
575     fileL2 = (TString)Row->GetField(0);
576     };
577     //
578     //
579     //
580     myquery.str("");
581     myquery << " UPDATE GL_RUN_TRASH SET FILENAMEL0='";
582 mocchiut 1.15 myquery << fileL0.Data() << "' where ID_TRASH=";
583     myquery << idtrash << ";";
584 mocchiut 1.14 //
585     // printf("4myquery is %s \n",myquery.str().c_str());
586     //
587 mocchiut 1.22 if ( !this->GetGLTABLES()->IsConnected(dbc) ) return -57;
588     this->GetGLTABLES()->AddQ();
589 mocchiut 1.14 dbc->Query(myquery.str().c_str());
590     //
591     myquery.str("");
592     myquery << " UPDATE GL_RUN_TRASH SET FILENAMEL2='";
593 mocchiut 1.15 myquery << fileL2.Data() << "' where ID_TRASH=";
594     myquery << idtrash << ";";
595 mocchiut 1.14 //
596     // printf("4myquery is %s \n",myquery.str().c_str());
597     //
598 mocchiut 1.22 if ( !this->GetGLTABLES()->IsConnected(dbc) ) return -57;
599     this->GetGLTABLES()->AddQ();
600 mocchiut 1.14 dbc->Query(myquery.str().c_str());
601     //
602     myquery.str("");
603     myquery << " UPDATE GL_RUN_TRASH SET BELONGED_TO='";
604 mocchiut 1.15 myquery << FromTable.Data() << "' where ID_TRASH=";
605     myquery << idtrash << ";";
606 mocchiut 1.14 //
607     // printf("4myquery is %s \n",myquery.str().c_str());
608     //
609     //
610 mocchiut 1.22 if ( !this->GetGLTABLES()->IsConnected(dbc) ) return -57;
611     this->GetGLTABLES()->AddQ();
612 mocchiut 1.14 dbc->Query(myquery.str().c_str());
613     //
614     myquery.str("");
615     myquery << " DELETE FROM ";
616     myquery << FromTable.Data() << " where ID=";
617     myquery << IDRUN << ";";
618     //
619     // printf("5myquery is %s \n",myquery.str().c_str());
620     //
621     //
622 mocchiut 1.22 if ( !this->GetGLTABLES()->IsConnected(dbc) ) return -57;
623     this->GetGLTABLES()->AddQ();
624 mocchiut 1.14 dbc->Query(myquery.str().c_str());
625     //
626     return 0;
627     };
628    
629    
630    
631     /**
632 mocchiut 1.15 * This method restore a run from the GL_RUN_TRASH table.
633     * If ID is 0 "this->ID" is used; if "ToTable" is empty BELONG_TO field of GL_RUN_TRASH is used.
634 mocchiut 1.14 *
635     **/
636 mocchiut 1.15 Int_t GL_RUN::RestoreRun(TSQLServer *dbc,UInt_t IDRUN,TString ToTable){
637 mocchiut 1.14 // insert into GL_RUN_FRAGMENTS select * FROM GL_RUN where ID=11;
638     //insert into GL_RUN_TRASH VALUES (ID , ID_RUN_FRAG , ID_ROOT_L0 , ID_ROOT_L2 , RUNHEADER_TIME , RUNTRAILER_TIME , RUNHEADER_OBT , RUNTRAILER_OBT , RUNHEADER_PKT , RUNTRAILER_PKT , BOOT_NUMBER , EV_FROM , EV_TO , NEVENTS , PKT_COUNTER , PKT_READY_COUNTER , COMPILATIONTIMESTAMP , FAV_WRK_SCHEDULE , EFF_WRK_SCHEDULE , PRH_VAR_TRG_MODE_A , PRH_VAR_TRG_MODE_B , ACQ_BUILD_INFO , ACQ_VAR_INFO , RM_ACQ_AFTER_CALIB , RM_ACQ_SETTING_MODE, TRK_CALIB_USED,CAL_DSP_MASK, LAST_TIMESYNC, OBT_TIMESYNC, VALIDATION, INSERT_TIME) select * FROM GL_RUN where ID=11;
639 mocchiut 1.15 // MySQL variables
640     TSQLResult *pResult;
641     TSQLRow *Row;
642     stringstream myquery;
643     //
644     if ( !IDRUN ) IDRUN = ID;
645     if ( !IDRUN ) return 1;
646     //
647     if ( !strcmp(ToTable.Data(),"") ){
648     //
649     myquery.str("");
650     myquery << " SELECT BELONGED_TO FROM GL_RUN_TRASH WHERE ID=";
651     myquery << (UInt_t)IDRUN << ";";
652     //
653     printf(" qui? myquery is %s \n",myquery.str().c_str());
654     //
655 mocchiut 1.22 if ( !this->GetGLTABLES()->IsConnected(dbc) ) return -57;
656     this->GetGLTABLES()->AddQ();
657 mocchiut 1.15 pResult = dbc->Query(myquery.str().c_str());
658     //
659     Row = pResult->Next();
660     if( Row != NULL ){
661     ToTable = (TString)Row->GetField(0);
662     } else {
663     return 1;
664     };
665     };
666     // ----------------
667     myquery.str("");
668     myquery << " INSERT INTO ";
669     myquery << ToTable.Data();
670     myquery << " (";
671     myquery << "ID";
672     myquery << ",ID_RUN_FRAG";
673     myquery << ",ID_ROOT_L0";
674     myquery << ",ID_ROOT_L2";
675     myquery << ",RUNHEADER_TIME";
676     myquery << ",RUNTRAILER_TIME";
677     myquery << ",RUNHEADER_OBT";
678     myquery << ",RUNTRAILER_OBT";
679     myquery << ",RUNHEADER_PKT";
680     myquery << ",RUNTRAILER_PKT";
681     myquery << ",BOOT_NUMBER";
682     myquery << ",EV_FROM";
683     myquery << ",EV_TO";
684     myquery << ",NEVENTS";
685     myquery << ",PKT_COUNTER";
686     myquery << ",PKT_READY_COUNTER";
687     myquery << ",COMPILATIONTIMESTAMP";
688     myquery << ",FAV_WRK_SCHEDULE";
689     myquery << ",EFF_WRK_SCHEDULE";
690     myquery << ",PRH_VAR_TRG_MODE_A";
691     myquery << ",PRH_VAR_TRG_MODE_B";
692     myquery << ",ACQ_BUILD_INFO";
693     myquery << ",ACQ_VAR_INFO";
694     myquery << ",RM_ACQ_AFTER_CALIB";
695     myquery << ",RM_ACQ_SETTING_MODE";
696     myquery << ",TRK_CALIB_USED";
697     myquery << ",CAL_DSP_MASK";
698     myquery << ",LAST_TIMESYNC";
699     myquery << ",OBT_TIMESYNC";
700     myquery << ",VALIDATION";
701     myquery << ",INSERT_TIME";
702     myquery << ") SELECT ";
703     myquery << "ID";
704     myquery << ",ID_RUN_FRAG";
705     myquery << ",ID_ROOT_L0";
706     myquery << ",ID_ROOT_L2";
707     myquery << ",RUNHEADER_TIME";
708     myquery << ",RUNTRAILER_TIME";
709     myquery << ",RUNHEADER_OBT";
710     myquery << ",RUNTRAILER_OBT";
711     myquery << ",RUNHEADER_PKT";
712     myquery << ",RUNTRAILER_PKT";
713     myquery << ",BOOT_NUMBER";
714     myquery << ",EV_FROM";
715     myquery << ",EV_TO";
716     myquery << ",NEVENTS";
717     myquery << ",PKT_COUNTER";
718     myquery << ",PKT_READY_COUNTER";
719     myquery << ",COMPILATIONTIMESTAMP";
720     myquery << ",FAV_WRK_SCHEDULE";
721     myquery << ",EFF_WRK_SCHEDULE";
722     myquery << ",PRH_VAR_TRG_MODE_A";
723     myquery << ",PRH_VAR_TRG_MODE_B";
724     myquery << ",ACQ_BUILD_INFO";
725     myquery << ",ACQ_VAR_INFO";
726     myquery << ",RM_ACQ_AFTER_CALIB";
727     myquery << ",RM_ACQ_SETTING_MODE";
728     myquery << ",TRK_CALIB_USED";
729     myquery << ",CAL_DSP_MASK";
730     myquery << ",LAST_TIMESYNC";
731     myquery << ",OBT_TIMESYNC";
732     myquery << ",VALIDATION";
733     myquery << ",INSERT_TIME";
734     myquery << " FROM GL_RUN_TRASH ";
735     myquery << " WHERE BELONGED_TO='GL_RUN_FRAGMENTS' AND ID=";
736     myquery << (UInt_t)IDRUN << ";";
737     //
738     // printf("5myquery is %s \n",myquery.str().c_str());
739     //
740 mocchiut 1.22 if ( !this->GetGLTABLES()->IsConnected(dbc) ) return -57;
741     this->GetGLTABLES()->AddQ();
742 mocchiut 1.15 dbc->Query(myquery.str().c_str());
743     //
744     //
745     myquery.str("");
746     myquery << " DELETE FROM GL_RUN_TRASH where BELONGED_TO='GL_RUN_FRAGMENTS' AND ID=";
747     myquery << IDRUN << ";";
748     //
749 mocchiut 1.22 if ( !this->GetGLTABLES()->IsConnected(dbc) ) return -57;
750     this->GetGLTABLES()->AddQ();
751 mocchiut 1.15 dbc->Query(myquery.str().c_str());
752     //
753 mocchiut 1.14 return 0;
754     };
755 mocchiut 1.1
756     /**
757     * Function to fill the GL_RUN table of the DB.
758     *
759     * \param
760     *
761     */
762     Int_t GL_RUN::Fill_GL_RUN(TSQLServer *dbc){
763     // MySQL variables
764     stringstream myquery;
765     // ----------------
766     myquery.str("");
767     myquery << " INSERT INTO GL_RUN (";
768     myquery << "ID";
769     myquery << ",ID_RUN_FRAG";
770     myquery << ",ID_ROOT_L0";
771     myquery << ",ID_ROOT_L2";
772     myquery << ",RUNHEADER_TIME";
773     myquery << ",RUNTRAILER_TIME";
774     myquery << ",RUNHEADER_OBT";
775     myquery << ",RUNTRAILER_OBT";
776     myquery << ",RUNHEADER_PKT";
777     myquery << ",RUNTRAILER_PKT";
778     myquery << ",EV_FROM";
779     myquery << ",EV_TO";
780     myquery << ",NEVENTS";
781     myquery << ",LAST_TIMESYNC";
782     myquery << ",OBT_TIMESYNC";
783     myquery << ",COMPILATIONTIMESTAMP";
784     myquery << ",FAV_WRK_SCHEDULE";
785     myquery << ",EFF_WRK_SCHEDULE";
786     myquery << ",PRH_VAR_TRG_MODE_A";
787     myquery << ",PRH_VAR_TRG_MODE_B";
788     myquery << ",ACQ_BUILD_INFO";
789     myquery << ",ACQ_VAR_INFO";
790     myquery << ",RM_ACQ_AFTER_CALIB";
791     myquery << ",RM_ACQ_SETTING_MODE";
792     myquery << ",PKT_COUNTER";
793     myquery << ",PKT_READY_COUNTER";
794     myquery << ",TRK_CALIB_USED";
795     myquery << ",CAL_DSP_MASK";
796     myquery << ",BOOT_NUMBER";
797     myquery << ",VALIDATION";
798     myquery << ") VALUES ('";
799    
800     myquery << (UInt_t)ID << "','";
801     myquery << (UInt_t)ID_RUN_FRAG << "','";
802     myquery << (UInt_t)ID_ROOT_L0 << "','";
803     myquery << (UInt_t)ID_ROOT_L2 << "','";
804     myquery << (UInt_t)RUNHEADER_TIME << "','";
805     myquery << (UInt_t)RUNTRAILER_TIME << "','";
806     myquery << (UInt_t)RUNHEADER_OBT << "','";
807     myquery << (UInt_t)RUNTRAILER_OBT << "','";
808     myquery << (UInt_t)RUNHEADER_PKT << "','";
809     myquery << (UInt_t)RUNTRAILER_PKT << "','";
810     myquery << (UInt_t)EV_FROM << "','";
811     myquery << (UInt_t)EV_TO << "','";
812     myquery << (UInt_t)NEVENTS << "','";
813     myquery << (UInt_t)LAST_TIMESYNC << "','";
814     myquery << (UInt_t)OBT_TIMESYNC << "','";
815     myquery << (UInt_t)COMPILATIONTIMESTAMP << "','";
816     myquery << (UInt_t)FAV_WRK_SCHEDULE << "','";
817     myquery << (UInt_t)EFF_WRK_SCHEDULE << "','";
818     myquery << (UInt_t)PRH_VAR_TRG_MODE_A << "','";
819     myquery << (UInt_t)PRH_VAR_TRG_MODE_B << "','";
820     myquery << (UInt_t)ACQ_BUILD_INFO << "','";
821     myquery << (UInt_t)ACQ_VAR_INFO << "','";
822     myquery << (UInt_t)RM_ACQ_AFTER_CALIB << "','";
823     myquery << (UInt_t)RM_ACQ_SETTING_MODE << "','";
824     myquery << (UInt_t)PKT_COUNTER << "','";
825     myquery << (UInt_t)PKT_READY_COUNTER << "','";
826     myquery << (UInt_t)TRK_CALIB_USED << "','";
827     myquery << (UInt_t)CAL_DSP_MASK << "','";
828     myquery << (UInt_t)BOOT_NUMBER << "','";
829     myquery << (UInt_t)VALIDATION << "');";
830     //
831 mocchiut 1.2 // printf("myquery is %s \n",myquery.str().c_str());
832 mocchiut 1.1 //
833 mocchiut 1.22 if ( !this->GetGLTABLES()->IsConnected(dbc) ) return -57;
834     this->GetGLTABLES()->AddQ();
835 mocchiut 1.1 dbc->Query(myquery.str().c_str());
836     //
837     return 0;
838    
839     };// ****************************************************
840    
841     /**
842     * Function to fill the GL_RUN table of the DB.
843     *
844     * \param
845     *
846     */
847     Int_t GL_RUN::Fill_GL_RUN_FRAGMENTS(TSQLServer *dbc){
848     // MySQL variables
849     stringstream myquery;
850     // ----------------
851     myquery.str("");
852     myquery << " INSERT INTO GL_RUN_FRAGMENTS (";
853     myquery << "ID";
854     myquery << ",ID_ROOT_L0";
855     myquery << ",RUNHEADER_TIME";
856     myquery << ",RUNTRAILER_TIME";
857     myquery << ",RUNHEADER_OBT";
858     myquery << ",RUNTRAILER_OBT";
859     myquery << ",RUNHEADER_PKT";
860     myquery << ",RUNTRAILER_PKT";
861     myquery << ",EV_FROM";
862     myquery << ",EV_TO";
863     myquery << ",NEVENTS";
864     myquery << ",LAST_TIMESYNC";
865     myquery << ",OBT_TIMESYNC";
866     myquery << ",COMPILATIONTIMESTAMP";
867     myquery << ",FAV_WRK_SCHEDULE";
868     myquery << ",EFF_WRK_SCHEDULE";
869     myquery << ",PRH_VAR_TRG_MODE_A";
870     myquery << ",PRH_VAR_TRG_MODE_B";
871     myquery << ",ACQ_BUILD_INFO";
872     myquery << ",ACQ_VAR_INFO";
873     myquery << ",RM_ACQ_AFTER_CALIB";
874     myquery << ",RM_ACQ_SETTING_MODE";
875     myquery << ",PKT_COUNTER";
876     myquery << ",PKT_READY_COUNTER";
877     myquery << ",TRK_CALIB_USED";
878     myquery << ",CAL_DSP_MASK";
879     myquery << ",BOOT_NUMBER";
880     myquery << ") VALUES ('";
881     myquery << (UInt_t)ID << "','";
882     myquery << (UInt_t)ID_ROOT_L0 << "','";
883     myquery << (UInt_t)RUNHEADER_TIME << "','";
884     myquery << (UInt_t)RUNTRAILER_TIME << "','";
885     myquery << (UInt_t)RUNHEADER_OBT << "','";
886     myquery << (UInt_t)RUNTRAILER_OBT << "','";
887     myquery << (UInt_t)RUNHEADER_PKT << "','";
888     myquery << (UInt_t)RUNTRAILER_PKT << "','";
889     myquery << (UInt_t)EV_FROM << "','";
890     myquery << (UInt_t)EV_TO << "','";
891     myquery << (UInt_t)NEVENTS << "','";
892     myquery << (UInt_t)LAST_TIMESYNC << "','";
893     myquery << (UInt_t)OBT_TIMESYNC << "','";
894     myquery << (UInt_t)COMPILATIONTIMESTAMP << "','";
895     myquery << (UInt_t)FAV_WRK_SCHEDULE << "','";
896     myquery << (UInt_t)EFF_WRK_SCHEDULE << "','";
897     myquery << (UInt_t)PRH_VAR_TRG_MODE_A << "','";
898     myquery << (UInt_t)PRH_VAR_TRG_MODE_B << "','";
899     myquery << (UInt_t)ACQ_BUILD_INFO << "','";
900     myquery << (UInt_t)ACQ_VAR_INFO << "','";
901     myquery << (UInt_t)RM_ACQ_AFTER_CALIB << "','";
902     myquery << (UInt_t)RM_ACQ_SETTING_MODE << "','";
903     myquery << (UInt_t)PKT_COUNTER << "','";
904     myquery << (UInt_t)PKT_READY_COUNTER << "','";
905     myquery << (UInt_t)TRK_CALIB_USED << "','";
906     myquery << (UInt_t)CAL_DSP_MASK << "','";
907     myquery << (UInt_t)BOOT_NUMBER << "');";
908     //
909     // printf("myquery is %s \n",myquery.str().c_str());
910     //
911 mocchiut 1.22 if ( !this->GetGLTABLES()->IsConnected(dbc) ) return -57;
912     this->GetGLTABLES()->AddQ();
913 mocchiut 1.1 dbc->Query(myquery.str().c_str());
914     //
915     return 0;
916    
917     };// ****************************************************
918    
919    
920     /**
921     * Function to query the GL_RUN table of the DB.
922     *
923     * \param RUN id
924     * \return struct of type GL_RUN _data, which stores the query result
925     *
926     */
927     Int_t GL_RUN::Query_GL_RUN(UInt_t run, TSQLServer *dbc){
928     // MySQL variables
929     TSQLResult *pResult;
930     TSQLRow *Row;
931     int t;
932     int r;
933     stringstream myquery;
934     // ----------------
935     myquery.str("");
936     myquery << " select ";
937     myquery << "ID";
938     myquery << ",ID_RUN_FRAG";
939     myquery << ",ID_ROOT_L0";
940     myquery << ",ID_ROOT_L2";
941     myquery << ",RUNHEADER_TIME";
942     myquery << ",RUNTRAILER_TIME";
943     myquery << ",RUNHEADER_OBT";
944     myquery << ",RUNTRAILER_OBT";
945     myquery << ",RUNHEADER_PKT";
946     myquery << ",RUNTRAILER_PKT";
947     myquery << ",EV_FROM";
948     myquery << ",EV_TO";
949     myquery << ",NEVENTS";
950     myquery << ",LAST_TIMESYNC";
951     myquery << ",OBT_TIMESYNC";
952     myquery << ",COMPILATIONTIMESTAMP";
953     myquery << ",FAV_WRK_SCHEDULE";
954     myquery << ",EFF_WRK_SCHEDULE";
955     myquery << ",PRH_VAR_TRG_MODE_A";
956     myquery << ",PRH_VAR_TRG_MODE_B";
957     myquery << ",ACQ_BUILD_INFO";
958     myquery << ",ACQ_VAR_INFO";
959     myquery << ",RM_ACQ_AFTER_CALIB";
960     myquery << ",RM_ACQ_SETTING_MODE";
961     myquery << ",PKT_COUNTER";
962     myquery << ",PKT_READY_COUNTER";
963     myquery << ",TRK_CALIB_USED";
964     myquery << ",CAL_DSP_MASK";
965     myquery << ",BOOT_NUMBER";
966     myquery << ",VALIDATION";
967     myquery << " from GL_RUN where ID=" << run << ";";
968     //
969 mocchiut 1.4 // printf(" myquery is %s \n",myquery.str().c_str());
970 mocchiut 1.22 if ( !this->IsConnected(dbc) ) return -57;
971     this->AddQ();
972 mocchiut 1.1 pResult = dbc->Query(myquery.str().c_str());
973 mocchiut 1.4 //
974     // printf(" getrowcount %i \n",pResult->GetRowCount());
975     //
976     if( !pResult->GetRowCount() ) return(-50);
977     //
978 mocchiut 1.1 for( r=0; r < 1000; r++){
979     Row = pResult->Next();
980     if( Row == NULL ) break;
981 pam-fi 1.9 // Set_GL_RUN(Row);
982 mocchiut 1.1 for( t = 0; t < pResult->GetFieldCount(); t++){
983 mocchiut 1.16 if (t== 0) ID = (UInt_t)atoll(Row->GetField(t));
984     if (t== 1) ID_RUN_FRAG = (UInt_t)atoll(Row->GetField(t));
985     if (t== 2) ID_ROOT_L0 = (UInt_t)atoll(Row->GetField(t));
986     if (t== 3) ID_ROOT_L2 = (UInt_t)atoll(Row->GetField(t));
987     if (t== 4) RUNHEADER_TIME = (UInt_t)atoll(Row->GetField(t));
988     if (t== 5) RUNTRAILER_TIME = (UInt_t)atoll(Row->GetField(t));
989     if (t== 6) RUNHEADER_OBT = (UInt_t)atoll(Row->GetField(t));
990     if (t== 7) RUNTRAILER_OBT = (UInt_t)atoll(Row->GetField(t));
991     if (t== 8) RUNHEADER_PKT = (UInt_t)atoll(Row->GetField(t));
992     if (t== 9) RUNTRAILER_PKT = (UInt_t)atoll(Row->GetField(t));
993     if (t==10) EV_FROM = (UInt_t)atoll(Row->GetField(t));
994     if (t==11) EV_TO = (UInt_t)atoll(Row->GetField(t));
995     if (t==12) NEVENTS = (UInt_t)atoll(Row->GetField(t));
996     if (t==13) LAST_TIMESYNC = (UInt_t)atoll(Row->GetField(t));
997     if (t==14) OBT_TIMESYNC = (UInt_t)atoll(Row->GetField(t));
998     if (t==15) COMPILATIONTIMESTAMP = (UInt_t)atoll(Row->GetField(t));
999     if (t==16) FAV_WRK_SCHEDULE = (UInt_t)atoll(Row->GetField(t));
1000     if (t==17) EFF_WRK_SCHEDULE = (UInt_t)atoll(Row->GetField(t));
1001     if (t==18) PRH_VAR_TRG_MODE_A= (UInt_t)atoll(Row->GetField(t));
1002     if (t==19) PRH_VAR_TRG_MODE_B= (UInt_t)atoll(Row->GetField(t));
1003     if (t==20) ACQ_BUILD_INFO = (UInt_t)atoll(Row->GetField(t));
1004     if (t==21) ACQ_VAR_INFO = (UInt_t)atoll(Row->GetField(t));
1005     if (t==22) RM_ACQ_AFTER_CALIB= (UInt_t)atoll(Row->GetField(t));
1006     if (t==23) RM_ACQ_SETTING_MODE = (UInt_t)atoll(Row->GetField(t));
1007     if (t==24) PKT_COUNTER = (UInt_t)atoll(Row->GetField(t));
1008     if (t==25) PKT_READY_COUNTER = (UInt_t)atoll(Row->GetField(t));
1009     if (t==26) TRK_CALIB_USED = (UInt_t)atoll(Row->GetField(t));
1010     if (t==27) CAL_DSP_MASK = (UInt_t)atoll(Row->GetField(t));
1011     if (t==28) BOOT_NUMBER = (UInt_t)atoll(Row->GetField(t));
1012     if (t==29) VALIDATION = (UInt_t)atoll(Row->GetField(t));
1013 mocchiut 1.1 };
1014     };
1015 mocchiut 1.4 // delete pResult;
1016     return(0);
1017 mocchiut 1.1 };
1018    
1019     /**
1020     * Function to query the GL_RUN table of the DB.
1021     *
1022     * \param where = condition string
1023     * \return struct of type GL_RUN _data, which stores the query result
1024     *
1025     */
1026     Int_t GL_RUN::Query_GL_RUN_FRAGMENTS(TString where, TSQLServer *dbc){
1027     // MySQL variables
1028     TSQLResult *pResult;
1029     TSQLRow *Row;
1030     int t;
1031     int r;
1032     stringstream myquery;
1033     // ----------------
1034     myquery.str("");
1035     myquery << " select ";
1036     myquery << "ID";
1037 mocchiut 1.2 myquery << ",ID_RUN_FRAG";
1038 mocchiut 1.1 myquery << ",ID_ROOT_L0";
1039 mocchiut 1.2 myquery << ",ID_ROOT_L2";
1040 mocchiut 1.1 myquery << ",RUNHEADER_TIME";
1041     myquery << ",RUNTRAILER_TIME";
1042     myquery << ",RUNHEADER_OBT";
1043     myquery << ",RUNTRAILER_OBT";
1044     myquery << ",RUNHEADER_PKT";
1045     myquery << ",RUNTRAILER_PKT";
1046     myquery << ",EV_FROM";
1047     myquery << ",EV_TO";
1048     myquery << ",NEVENTS";
1049     myquery << ",LAST_TIMESYNC";
1050     myquery << ",OBT_TIMESYNC";
1051     myquery << ",COMPILATIONTIMESTAMP";
1052     myquery << ",FAV_WRK_SCHEDULE";
1053     myquery << ",EFF_WRK_SCHEDULE";
1054     myquery << ",PRH_VAR_TRG_MODE_A";
1055     myquery << ",PRH_VAR_TRG_MODE_B";
1056     myquery << ",ACQ_BUILD_INFO";
1057     myquery << ",ACQ_VAR_INFO";
1058     myquery << ",RM_ACQ_AFTER_CALIB";
1059     myquery << ",RM_ACQ_SETTING_MODE";
1060     myquery << ",PKT_COUNTER";
1061     myquery << ",PKT_READY_COUNTER";
1062     myquery << ",TRK_CALIB_USED";
1063     myquery << ",CAL_DSP_MASK";
1064     myquery << ",BOOT_NUMBER";
1065 mocchiut 1.2 myquery << ",VALIDATION";
1066 mocchiut 1.1 myquery << " from GL_RUN_FRAGMENTS where " << where.Data() << ";";
1067     //
1068 mocchiut 1.2 // printf(" query is %s \n",myquery.str().c_str());
1069     //
1070 mocchiut 1.22 if ( !this->GetGLTABLES()->IsConnected(dbc) ) return -57;
1071     this->GetGLTABLES()->AddQ();
1072 mocchiut 1.1 pResult = dbc->Query(myquery.str().c_str());
1073     if(!pResult->GetRowCount())return(-50);
1074     for( r=0; r < 1000; r++){
1075 mocchiut 1.2 Row = pResult->Next();
1076     if( Row == NULL ) break;
1077     for( t = 0; t < pResult->GetFieldCount(); t++){
1078     if (t== 0) ID = (UInt_t)atoll(Row->GetField(t));
1079     if (t== 1) ID_RUN_FRAG = (UInt_t)atoll(Row->GetField(t));
1080     if (t== 2) ID_ROOT_L0 = (UInt_t)atoll(Row->GetField(t));
1081     if (t== 3) ID_ROOT_L2 = (UInt_t)atoll(Row->GetField(t));
1082     if (t== 4) RUNHEADER_TIME = (UInt_t)atoll(Row->GetField(t));
1083     if (t== 5) RUNTRAILER_TIME = (UInt_t)atoll(Row->GetField(t));
1084     if (t== 6) RUNHEADER_OBT = (UInt_t)atoll(Row->GetField(t));
1085     if (t== 7) RUNTRAILER_OBT = (UInt_t)atoll(Row->GetField(t));
1086     if (t== 8) RUNHEADER_PKT = (UInt_t)atoll(Row->GetField(t));
1087     if (t== 9) RUNTRAILER_PKT = (UInt_t)atoll(Row->GetField(t));
1088     if (t==10) EV_FROM = (UInt_t)atoll(Row->GetField(t));
1089     if (t==11) EV_TO = (UInt_t)atoll(Row->GetField(t));
1090     if (t==12) NEVENTS = (UInt_t)atoll(Row->GetField(t));
1091     if (t==13) LAST_TIMESYNC = (UInt_t)atoll(Row->GetField(t));
1092     if (t==14) OBT_TIMESYNC = (UInt_t)atoll(Row->GetField(t));
1093     if (t==15) COMPILATIONTIMESTAMP = (UInt_t)atoll(Row->GetField(t));
1094     if (t==16) FAV_WRK_SCHEDULE = (UInt_t)atoll(Row->GetField(t));
1095     if (t==17) EFF_WRK_SCHEDULE = (UInt_t)atoll(Row->GetField(t));
1096     if (t==18) PRH_VAR_TRG_MODE_A= (UInt_t)atoll(Row->GetField(t));
1097     if (t==19) PRH_VAR_TRG_MODE_B= (UInt_t)atoll(Row->GetField(t));
1098     if (t==20) ACQ_BUILD_INFO = (UInt_t)atoll(Row->GetField(t));
1099     if (t==21) ACQ_VAR_INFO = (UInt_t)atoll(Row->GetField(t));
1100     if (t==22) RM_ACQ_AFTER_CALIB= (UInt_t)atoll(Row->GetField(t));
1101     if (t==23) RM_ACQ_SETTING_MODE = (UInt_t)atoll(Row->GetField(t));
1102     if (t==24) PKT_COUNTER = (UInt_t)atoll(Row->GetField(t));
1103     if (t==25) PKT_READY_COUNTER = (UInt_t)atoll(Row->GetField(t));
1104     if (t==26) TRK_CALIB_USED = (UInt_t)atoll(Row->GetField(t));
1105     if (t==27) CAL_DSP_MASK = (UInt_t)atoll(Row->GetField(t));
1106     if (t==28) BOOT_NUMBER = (UInt_t)atoll(Row->GetField(t));
1107     if (t==29) VALIDATION = (UInt_t)atoll(Row->GetField(t));
1108     };
1109 mocchiut 1.1 };
1110 mocchiut 1.2 // delete pResult;
1111     return(0);
1112     };// ****************************************************
1113 mocchiut 1.1
1114     /**
1115     * Function to query the GL_ROOT table of the DB.
1116     *
1117     * \param entry ID
1118     * \return struct of type GL_ROOT_data, which stores the query result
1119     */
1120     Int_t GL_ROOT::Query_GL_ROOT(UInt_t id, TSQLServer *dbc){
1121     // MySQL variables
1122     TSQLResult *pResult;
1123     TSQLRow *Row;
1124     int t;
1125     int r;
1126     stringstream myquery;
1127     // ----------------
1128     myquery.str("");
1129     myquery << "select ";
1130     myquery << " ID";
1131     myquery << ",ID_RAW";
1132     myquery << ",ID_TIMESYNC";
1133     myquery << ",PATH";
1134     myquery << ",NAME";
1135     myquery << " from GL_ROOT where ID=" << id << ";";
1136     //
1137 mocchiut 1.22 if ( !this->GetGLTABLES()->IsConnected(dbc) ) return -57;
1138     this->GetGLTABLES()->AddQ();
1139 mocchiut 1.1 pResult = dbc->Query(myquery.str().c_str());
1140     if(!pResult->GetRowCount())return (-51);
1141     for( r=0; r < 1000; r++){
1142     Row = pResult->Next();
1143     if( Row == NULL ) break;
1144     for( t = 0; t < pResult->GetFieldCount(); t++){
1145     if(t==0) ID = (UInt_t)atoll(Row->GetField(t));
1146     if(t==1) ID_RAW = (UInt_t)atoll(Row->GetField(t));
1147     if(t==2) ID_TIMESYNC = (UInt_t)atoll(Row->GetField(t));
1148     if(t==3) PATH = Row->GetField(t);
1149     if(t==4) NAME = Row->GetField(t);
1150     };
1151     };
1152     delete pResult;
1153     return 0;
1154     };
1155     // ****************************************************
1156     /**
1157     * Function to query the GL_TRK_CALIB table of the DB.
1158     *
1159     * \param run starting time
1160 pam-fi 1.9 * \param dbc DB server
1161 mocchiut 1.1 * \return struct of type GL_TRK_CALIB_data, which stores the query result
1162     */
1163     Int_t GL_TRK_CALIB::Query_GL_TRK_CALIB(UInt_t time, TSQLServer *dbc){
1164     // MySQL variables
1165     TSQLResult *pResult;
1166     TSQLRow *Row;
1167     int t;
1168     int r;
1169     stringstream myquery;
1170     // ----------------
1171     myquery.str("");
1172 pam-fi 1.9 myquery << "select ID,ID_ROOT_L0,EV_ROOT_CALIBTRK1,EV_ROOT_CALIBTRK2,FROM_TIME,TO_TIME,OBT1,OBT2,PKT1,PKT2,BOOT_NUMBER,VALIDATION from GL_TRK_CALIB where FROM_TIME <= "<< time;
1173 mocchiut 1.1 myquery << " AND VALIDATION=1 ORDER BY FROM_TIME DESC LIMIT 1;";
1174     // myquery << " ORDER BY FROM_TIME DESC LIMIT 1;";
1175 mocchiut 1.22 if ( !this->GetGLTABLES()->IsConnected(dbc) ) return -57;
1176     this->GetGLTABLES()->AddQ();
1177 mocchiut 1.1 pResult = dbc->Query(myquery.str().c_str());
1178     if(!pResult->GetRowCount())return (-53);
1179     for( r=0; r < 1000; r++){
1180     Row = pResult->Next();
1181     if( Row == NULL ) break;
1182     for( t = 0; t < pResult->GetFieldCount(); t++){
1183 mocchiut 1.2 stringstream row;
1184     row.str("");
1185     row << "0" << Row->GetField(t); // add leading 0 since we have two fields that could be "null" and we want to avoid crashes due to atoll
1186 pam-fi 1.9 if (t==0) ID = (UInt_t)atoll(Row->GetField(t));
1187     if (t==1) ID_ROOT_L0 = (UInt_t)atoll(Row->GetField(t));
1188 mocchiut 1.2 if (t==2) EV_ROOT_CALIBTRK1 = (UInt_t)atoll(row.str().c_str());
1189     if (t==3) EV_ROOT_CALIBTRK2 = (UInt_t)atoll(row.str().c_str());
1190 pam-fi 1.9 if (t==4) FROM_TIME = (UInt_t)atoll(Row->GetField(t));
1191     if (t==5) TO_TIME = (UInt_t)atoll(Row->GetField(t));
1192 mocchiut 1.1 //
1193 pam-fi 1.9 if (t==6) OBT1 = (UInt_t)atoll(Row->GetField(t));
1194     if (t==7) OBT2 = (UInt_t)atoll(Row->GetField(t));
1195     if (t==8) PKT1 = (UInt_t)atoll(Row->GetField(t));
1196     if (t==9) PKT2 = (UInt_t)atoll(Row->GetField(t));
1197     if (t==10) BOOT_NUMBER = (UInt_t)atoll(Row->GetField(t));
1198     if (t==11) VALIDATION = (UInt_t)atoll(Row->GetField(t));
1199     };
1200 mocchiut 1.1 };
1201 pam-fi 1.9 delete pResult;
1202 mocchiut 1.1 //
1203 pam-fi 1.9 // if ( TO_TIME < time ) return(51);
1204 mocchiut 1.8 //
1205 mocchiut 1.1 if ( (!OBT1 && !PKT1 ) || (!OBT2 && !PKT2) ) return(52); // ONE CALIBRATION PACKET IS MISSING!
1206     //
1207     return 0;
1208     };
1209    
1210     // ****************************************************
1211     /**
1212     * Function to query the GL_CALO_CALIB table of the DB.
1213     *
1214     * \param run starting time
1215     * \return struct of type GL_CALO_CALIB_data, which stores the query result
1216     */
1217 mocchiut 1.7 Int_t GL_CALO_CALIB::Query_GL_CALO_CALIB(UInt_t time, UInt_t &uptime, UInt_t section, TSQLServer *dbc){
1218 mocchiut 1.1 // MySQL variables
1219     TSQLResult *pResult;
1220     TSQLRow *Row;
1221     int t;
1222     stringstream myquery;
1223 mocchiut 1.7 uptime = 0;
1224 mocchiut 1.1 //
1225     // select the correct calibration
1226     //
1227     myquery.str("");
1228     myquery << "select ID_ROOT_L0, FROM_TIME, TO_TIME, EV_ROOT,VALIDATION from GL_CALO_CALIB where SECTION=" << section;
1229     myquery << " and FROM_TIME <= " << time;
1230     myquery << " and TO_TIME > " << time;
1231 mocchiut 1.7 myquery << " ;";
1232     //myquery << " and VALIDATION=1;";
1233 mocchiut 1.1 //
1234 mocchiut 1.22 if ( !this->GetGLTABLES()->IsConnected(dbc) ) return -57;
1235     this->GetGLTABLES()->AddQ();
1236 mocchiut 1.1 pResult = dbc->Query(myquery.str().c_str());
1237 mocchiut 1.7 // printf(" mysquery is %s\n",myquery.str().c_str());
1238     //
1239     if( !pResult->GetRowCount() ) return(-54);
1240     Row = pResult->Next();
1241     if( Row == NULL ) return (-54);
1242     //
1243     uptime = (UInt_t)atoll(Row->GetField(2));
1244 mocchiut 1.1 //
1245     // if it is corrupted validation is 0 and we have no results from the query...
1246     //
1247 mocchiut 1.7 if( atoi(Row->GetField(4)) == 0 ){ // if validation = 0
1248 mocchiut 1.1 //
1249     // in this case take relax the conditions and take the valid calibration that preceed the correct one
1250     //
1251     myquery.str("");
1252     myquery << "select ID_ROOT_L0, FROM_TIME, TO_TIME, EV_ROOT,VALIDATION from GL_CALO_CALIB where SECTION=" << section;
1253     myquery << " and FROM_TIME <= " << time;
1254     myquery << " and VALIDATION=1 ORDER BY FROM_TIME DESC LIMIT 1;";
1255 mocchiut 1.22 if ( !this->GetGLTABLES()->IsConnected(dbc) ) return -57;
1256     this->GetGLTABLES()->AddQ();
1257 mocchiut 1.1 pResult = dbc->Query(myquery.str().c_str());
1258 mocchiut 1.7 // printf(" mysquery is %s\n",myquery.str().c_str());
1259 mocchiut 1.1 //
1260     // if no results yet quit with error
1261     //
1262     if( !pResult->GetRowCount() ) return (-54);
1263 mocchiut 1.7 //
1264     Row = pResult->Next();
1265     //
1266 mocchiut 1.1 };
1267     //
1268     // store infos and exit
1269     //
1270     if( Row == NULL ) return (-54);
1271     for( t = 0; t < pResult->GetFieldCount(); t++){
1272     if (t==0) ID_ROOT_L0 = (UInt_t)atoll(Row->GetField(t));
1273     if (t==1) FROM_TIME = (UInt_t)atoll(Row->GetField(t));
1274     if (t==2) TO_TIME = (UInt_t)atoll(Row->GetField(t));
1275     if (t==3) EV_ROOT = (UInt_t)atoll(Row->GetField(t));
1276     };
1277     pResult->Delete();
1278     return 0;
1279     };
1280     // ****************************************************
1281     /**
1282     * Function to query the GL_S4_CALIB table of the DB.
1283     *
1284     * \param run starting time
1285     * \return struct of type GL_S4_CALIB_data, which stores the query result
1286     */
1287     Int_t GL_S4_CALIB::Query_GL_S4_CALIB(UInt_t time, TSQLServer *dbc){
1288     // MySQL variables
1289     TSQLResult *pResult;
1290     TSQLRow *Row;
1291     int t;
1292     int r;
1293     stringstream myquery;
1294     // ----------------
1295     myquery.str("");
1296     myquery << "select * from GL_S4_CALIB where FROM_TIME <= "<< time;
1297 mocchiut 1.5 myquery << " ORDER BY FROM_TIME DESC LIMIT 1;";
1298 mocchiut 1.1 // myquery << " ORDER BY FROM_TIME DESC LIMIT 1;";
1299 mocchiut 1.22 if ( !this->GetGLTABLES()->IsConnected(dbc) ) return -57;
1300     this->GetGLTABLES()->AddQ();
1301 mocchiut 1.1 pResult = dbc->Query(myquery.str().c_str());
1302     if(!pResult->GetRowCount())return (-55);//throw -55;
1303     for( r=0; r < 1000; r++){
1304     Row = pResult->Next();
1305     if( Row == NULL ) break;
1306     for( t = 0; t < pResult->GetFieldCount(); t++){
1307     if (t==0) ID = (UInt_t)atoll(Row->GetField(t));
1308     if (t==1) ID_ROOT_L0 = (UInt_t)atoll(Row->GetField(t));
1309     if (t==2) EV_ROOT = (UInt_t)atoll(Row->GetField(t));
1310     if (t==3) FROM_TIME = (UInt_t)atoll(Row->GetField(t));
1311     if (t==4) TO_TIME = (UInt_t)atoll(Row->GetField(t));
1312     if (t==5) PARAM_FIT0 = atof(Row->GetField(t));
1313     if (t==6) PARAM_FIT1 = atof(Row->GetField(t));
1314     };
1315     };
1316     delete pResult;
1317     //
1318     if(TO_TIME < time)return(51);
1319     //
1320     return 0;
1321     };
1322     // ****************************************************
1323     /**
1324     * Function to query the GL_PARAM table of the DB.
1325     *
1326     * \param run starting time
1327     * \param parameter description (DESCR)
1328     * \return struct of type GL_ROOT_data, which stores the query result
1329     */
1330     Int_t GL_PARAM::Query_GL_PARAM(UInt_t time, UInt_t type, TSQLServer *dbc){
1331     // Bool_t debug = 1;
1332     // MySQL variables
1333     TSQLResult *pResult;
1334     TSQLRow *Row;
1335     int t;
1336     int r;
1337     stringstream myquery;
1338     // ----------------
1339     myquery.str("");
1340     myquery << " select ";
1341     myquery << " ID, PATH, NAME, DESCR, TYPE, FROM_TIME,TO_TIME ";
1342     myquery << " from GL_PARAM ";
1343     myquery << " where TYPE = '"<<type<<"' ";
1344     myquery << " and FROM_TIME <= " << time;
1345     myquery << " ORDER BY TO_TIME DESC LIMIT 1;";
1346     //
1347 mocchiut 1.22 if ( !this->GetGLTABLES()->IsConnected(dbc) ) return -57;
1348     this->GetGLTABLES()->AddQ();
1349 mocchiut 1.1 pResult = dbc->Query(myquery.str().c_str());
1350     if(!pResult->GetRowCount())return (-52);
1351     for( r=0; r < 1000; r++){
1352     Row = pResult->Next();
1353     if( Row == NULL ) break;
1354     for( t = 0; t < pResult->GetFieldCount(); t++){
1355     if (t==0) ID = (UInt_t)atoll(Row->GetField(t));
1356     if (t==1) PATH = Row->GetField(t);// put in fpath the path to that file
1357     if (t==2) NAME = Row->GetField(t);
1358     if (t==3) DESCR = Row->GetField(t);
1359     if (t==4) FROM_TIME = (UInt_t)atoll(Row->GetField(t));
1360     if (t==5) TO_TIME = (UInt_t)atoll(Row->GetField(t));
1361     if (t==6) TYPE = (UInt_t)atoll(Row->GetField(t));
1362     };
1363     };
1364     delete pResult;
1365     //
1366     if(TO_TIME==0) TO_TIME = numeric_limits<UInt_t>::max();
1367     //
1368     if(TO_TIME < time) return(51);
1369     //
1370     return 0;
1371     };
1372    
1373    
1374     /**
1375     * Fills a struct cGLRun with values from a GLRun object (to put data into a F77 common).
1376     */
1377    
1378     void GL_RUN::GetLevel2Struct(cGLRun *l2) const{
1379     l2->id = ID;
1380     l2->id_reg_run = ID_ROOT_L0;
1381     l2->id_reg_run_l2 = ID_ROOT_L2;
1382     l2->runheader_time = RUNHEADER_TIME;
1383     l2->runtrailer_time = RUNTRAILER_TIME;
1384     l2->ev_from = EV_FROM;
1385     l2->trk_calib_used = TRK_CALIB_USED;
1386     l2->eff_wrk_schedule = EFF_WRK_SCHEDULE;
1387     l2->prh_var_trg_mode_a = PRH_VAR_TRG_MODE_A;
1388     l2->prh_var_trg_mode_b = PRH_VAR_TRG_MODE_B;
1389     l2->acq_build_info = ACQ_BUILD_INFO;
1390     l2->acq_var_info = ACQ_VAR_INFO;
1391     };
1392    
1393     GL_TIMESYNC::GL_TIMESYNC(UInt_t id, TString type, TSQLServer *dbc){
1394     // MySQL variables
1395     TFile *file = 0;
1396     UInt_t idraw = 0;
1397     //
1398     TSQLResult *pResult;
1399     TSQLRow *Row;
1400     stringstream myquery;
1401 mocchiut 1.14 stringstream rname;
1402     rname.str("");
1403 mocchiut 1.1 // ----------------
1404     myquery.str("");
1405     myquery << "select ";
1406     myquery << "PATH";
1407     myquery << ",NAME,ID_RAW";
1408     myquery << " from GL_ROOT where ";
1409     myquery << type.Data();
1410     myquery << "=" << id << ";";
1411     //
1412 mocchiut 1.22 if ( !this->GetGLTABLES()->IsConnected(dbc) ) return;
1413     this->GetGLTABLES()->AddQ();
1414 mocchiut 1.1 pResult = dbc->Query(myquery.str().c_str());
1415     if( pResult->GetRowCount() ){
1416     Row = pResult->Next();
1417     if( Row ){
1418     stringstream fname;
1419     fname.str("");
1420     fname << Row->GetField(0) << "/" << Row->GetField(1);
1421 mocchiut 1.14 rname << Row->GetField(1);
1422 mocchiut 1.1 file = new TFile(fname.str().c_str(),"READ");
1423     idraw = (UInt_t)atoll(Row->GetField(2));
1424     };
1425     };
1426     //
1427     if ( file && file->IsOpen() ){
1428     TTree *T=(TTree*)file->Get("Physics");
1429     pamela::EventHeader *eh = 0;
1430     pamela::PscuHeader *ph = 0;
1431     T->SetBranchAddress("Header", &eh);
1432     //
1433     T->GetEntry(0);
1434     ph = eh->GetPscuHeader();
1435     pktfirst = ph->GetCounter();
1436     obtfirst = ph->GetOrbitalTime();
1437     };
1438     //
1439     // look for Resurs offset
1440     //
1441 mocchiut 1.17 T0 = 0;
1442 mocchiut 1.1 //
1443 mocchiut 1.14 //
1444     stringstream oss;
1445     oss.str("");
1446 mocchiut 1.18 oss << "SELECT YEAR(OFFSET_DATE),MONTH(OFFSET_DATE),DAY(OFFSET_DATE),HOUR(OFFSET_DATE),MINUTE(OFFSET_DATE),SECOND(OFFSET_DATE) FROM GL_RESURS_OFFSET WHERE SPECIAL_FILE='"
1447 mocchiut 1.14 << rname.str().c_str() << "';";
1448 mocchiut 1.22 if ( !this->GetGLTABLES()->IsConnected(dbc) ) return;
1449     this->GetGLTABLES()->AddQ();
1450 mocchiut 1.14 pResult = dbc->Query(oss.str().c_str());
1451     Row = pResult->Next();
1452     //
1453     TString name=rname.str().c_str();
1454     UInt_t dworbit = 0;
1455     Int_t nlength = name.Length();
1456     if ( nlength < 5 ) return;
1457     TString dwo = 0;
1458     for (Int_t i = 0; i<5; i++){
1459     dwo.Append(name[i],1);
1460     };
1461     if ( dwo.IsDigit() ){
1462     dworbit = (UInt_t)dwo.Atoi();
1463     } else {
1464     dwo="";
1465     for (Int_t i = 8; i<13; i++){
1466     dwo.Append(name[i],1);
1467     };
1468     if ( dwo.IsDigit() ) dworbit = (UInt_t)dwo.Atoi();
1469     };
1470     //
1471     if ( !Row ){
1472     oss.str("");
1473 mocchiut 1.18 oss << "SELECT YEAR(OFFSET_DATE),MONTH(OFFSET_DATE),DAY(OFFSET_DATE),HOUR(OFFSET_DATE),MINUTE(OFFSET_DATE),SECOND(OFFSET_DATE) FROM GL_RESURS_OFFSET WHERE FROM_ORBIT< "
1474 mocchiut 1.14 << dworbit << " order by FROM_ORBIT desc limit 1;";
1475 mocchiut 1.22 if ( !this->GetGLTABLES()->IsConnected(dbc) ) return;
1476     this->GetGLTABLES()->AddQ();
1477 mocchiut 1.14 pResult = dbc->Query(oss.str().c_str());
1478 mocchiut 1.1 Row = pResult->Next();
1479 mocchiut 1.14 if ( !Row ){
1480     printf(" ERROR FROM GLTables! cannot determine Resurs offset \n");
1481     return;
1482 mocchiut 1.1 };
1483     };
1484     //
1485 mocchiut 1.18 TTimeStamp tu = TTimeStamp((UInt_t)atoi(Row->GetField(0)),(UInt_t)atoi(Row->GetField(1)),(UInt_t)atoi(Row->GetField(2)),(UInt_t)atoi(Row->GetField(3)),(UInt_t)atoi(Row->GetField(4)),(UInt_t)atoi(Row->GetField(5)),0,true,0);
1486 mocchiut 1.17 T0 = (UInt_t)tu.GetSec();
1487 mocchiut 1.1 //
1488     // look for the correct timesync entry
1489     //
1490     myquery.str("");
1491 mocchiut 1.17 myquery << " SELECT OBT0,TIMESYNC,TYPE FROM GL_TIMESYNC "
1492 mocchiut 1.1 << " WHERE ID_RAW = " << idraw
1493     << ";";
1494 mocchiut 1.22 if ( !this->GetGLTABLES()->IsConnected(dbc) ) return;
1495     this->GetGLTABLES()->AddQ();
1496 mocchiut 1.1 pResult = dbc->Query(myquery.str().c_str());
1497     if ( pResult ){
1498     Row = pResult->Next();
1499     if ( (Row != NULL) && ((UInt_t)atoll(Row->GetField(0)) > 0 ) ){
1500 mocchiut 1.17 OBT0 = (UInt_t)atoll(Row->GetField(0));
1501     TIMESYNC = (UInt_t)atoll(Row->GetField(1));
1502     TYPE = (UInt_t)atoll(Row->GetField(2));
1503     toffset = (UInt_t)atoll(Row->GetField(1)) - (UInt_t)(this->DBobt((UInt_t)atoll(Row->GetField(0)))/1000) + T0;
1504 mocchiut 1.1 };
1505     };
1506 mocchiut 1.3 //
1507     file->Close();
1508 mocchiut 1.1 delete pResult;
1509     };
1510    
1511     /**
1512     *
1513     * Returns the DB absolute time needed to associate calibrations to data
1514     *
1515     */
1516     UInt_t GL_TIMESYNC::DBabsTime(UInt_t OBT){
1517     //
1518     return(((UInt_t)(this->DBobt(OBT)/1000)+toffset));
1519     //
1520     };
1521    
1522 mocchiut 1.17 /**
1523     *
1524     * Returns the Resurs time given the OBT needed to process inclination and orbital infos
1525     *
1526     */
1527     UInt_t GL_TIMESYNC::ResursTime(UInt_t OBT){
1528     //
1529 mocchiut 1.19 return(((UInt_t)((Int_t)(this->DBobt(OBT)-this->DBobt(OBT0))/1000)+TIMESYNC));
1530 mocchiut 1.17 //
1531     };
1532    
1533 mocchiut 1.1
1534 mocchiut 1.20 /**
1535     * Return the correct packet number if we went back to zero
1536     */
1537     Long64_t GL_TIMESYNC::DBpkt(UInt_t pkt_num){
1538 mocchiut 1.1 //
1539 mocchiut 1.20 if ( pkt_num < (pktfirst/2) && pktfirst > (16777214/2) ){
1540     return((Long64_t)pkt_num+16777215LL);
1541     };
1542 mocchiut 1.1 //
1543 mocchiut 1.20 if ( pkt_num > pktfirst*2 && pkt_num > (16777214/2) ){
1544     return((Long64_t)pkt_num-16777215LL);
1545 mocchiut 1.1 };
1546     //
1547 mocchiut 1.20 return((Long64_t)pkt_num);
1548 mocchiut 1.1 //
1549     };
1550    
1551 mocchiut 1.20 /**
1552     * Return the correct On Board Time if we went back to zero
1553     */
1554     Long64_t GL_TIMESYNC::DBobt(UInt_t obt){
1555 mocchiut 1.1 //
1556 mocchiut 1.20 if ( obt < (obtfirst/2) && obtfirst > (numeric_limits<UInt_t>::max()/2) ) return((Long64_t)(obt+numeric_limits<UInt_t>::max()));
1557 mocchiut 1.1 //
1558 mocchiut 1.20 if ( obt > (obtfirst*2) && obt > (numeric_limits<UInt_t>::max()/2) ){
1559     return((Long64_t)obt-(Long64_t)numeric_limits<UInt_t>::max());
1560 mocchiut 1.1 };
1561     //
1562 mocchiut 1.20 return((Long64_t)obt);
1563 mocchiut 1.1 };
1564 mocchiut 1.5
1565 mocchiut 1.20
1566    
1567     // ULong64_t GL_TIMESYNC::DBobt(UInt_t obt){
1568     // //
1569     // if ( obt < (obtfirst/2) && obtfirst > (numeric_limits<UInt_t>::max()/2) ) return((ULong64_t)(obt+numeric_limits<UInt_t>::max()));
1570     // //
1571     // if ( obt > (obtfirst*2) && obt > (numeric_limits<UInt_t>::max()/2) ){
1572     // if ( (obt-numeric_limits<UInt_t>::max()) < 0 ){
1573     // return((ULong64_t)(numeric_limits<UInt_t>::max()-obt));
1574     // } else {
1575     // return((ULong64_t)(obt-numeric_limits<UInt_t>::max()));
1576     // };
1577     // };
1578     // //
1579     // return((ULong64_t)obt);
1580     // //
1581     // };
1582    
1583     // UInt_t GL_TIMESYNC::DBpkt(UInt_t pkt_num){
1584     // //
1585     // if ( pkt_num < (pktfirst/2) && pktfirst > (16777214/2) ) return((pkt_num+16777215));
1586     // //
1587     // if ( pkt_num > pktfirst*2 && pkt_num > (16777214/2) ){
1588     // if ( (pkt_num-16777215) < 0 ){
1589     // return((16777215-pkt_num));
1590     // } else {
1591     // return((pkt_num-16777215));
1592     // };
1593     // };
1594     // //
1595     // return(pkt_num);
1596     // //
1597     // };
1598    
1599 mocchiut 1.5 /*
1600     *
1601     * Convert the time in the DB from UInt_t to a string
1602     *
1603     * @param dbt time in the DB
1604     * @param tzone Time Zone, can be UTC,GMT,CET,CEST,MSD default is MSK
1605     *
1606     */
1607 mocchiut 1.10 TString GL_TIMESYNC::ConvertTime(TString &tzone, UInt_t dbt){
1608 mocchiut 1.5 //
1609 mocchiut 1.16 Int_t offset = 0;
1610 mocchiut 1.5 TString rtime;
1611 mocchiut 1.10 Bool_t found = false;
1612 mocchiut 1.5 //
1613 mocchiut 1.11 if ( !strcmp(tzone.Data(),"MSK") || !strcmp(tzone.Data(),"MWT") ){
1614 mocchiut 1.5 //
1615 mocchiut 1.16 offset = 60*60*3; // UTC (Coordinated Universal Time) + 3hs = Moscow Winter Time
1616 mocchiut 1.10 found = true;
1617 mocchiut 1.5 //
1618     };
1619     //
1620     if ( !strcmp(tzone.Data(),"CET") ){
1621     //
1622 mocchiut 1.16 offset = 60*60*1; // CET (Central European Time) = UTC + 1 hs
1623 mocchiut 1.10 found = true;
1624 mocchiut 1.5 //
1625     };
1626     //
1627     if ( !strcmp(tzone.Data(),"CEST") ){
1628     //
1629 mocchiut 1.16 offset = 60*60*2; // CEST (Central European Summer Time) = UTC + 2 h
1630 mocchiut 1.10 found = true;
1631 mocchiut 1.5 //
1632     };
1633     //
1634 mocchiut 1.11 if ( !strcmp(tzone.Data(),"MSD") || !strcmp(tzone.Data(),"MST")){
1635 mocchiut 1.5 //
1636 mocchiut 1.16 offset = 60*60*4; // MSD (Moscow Summer Time) = UTC + 4 h
1637 mocchiut 1.10 found = true;
1638 mocchiut 1.5 //
1639     };
1640     //
1641 mocchiut 1.11 if ( !found && strcmp(tzone.Data(),"UTC") && strcmp(tzone.Data(),"GMT") && strcmp(tzone.Data(),"") ){
1642     printf("\n Unknown time zone %s using UTC \n",tzone.Data());
1643     tzone = "UTC";
1644 mocchiut 1.10 };
1645     //
1646 mocchiut 1.16 dbt += offset;
1647     //
1648     TTimeStamp *time = new TTimeStamp((time_t)dbt,0);
1649     //
1650     rtime = time->AsString("s");
1651     //
1652     delete time;
1653 mocchiut 1.5 //
1654     return(rtime);
1655     }
1656 mocchiut 1.6
1657     /*
1658     *
1659 mocchiut 1.16 * Convert the time from TZONE to UTC
1660 mocchiut 1.6 *
1661     * @param dbt time in the DB
1662     * @param tzone Time Zone, can be UTC,GMT,CET,CEST,MSD default is MSK
1663     *
1664     */
1665 mocchiut 1.10 TString GL_TIMESYNC::UnConvertTime(TString &tzone, UInt_t dbt){
1666 mocchiut 1.6 //
1667 mocchiut 1.16 Int_t offset = 0;
1668 mocchiut 1.6 TString rtime;
1669     //
1670 mocchiut 1.10 Bool_t found = false;
1671     //
1672 mocchiut 1.11 if ( !strcmp(tzone.Data(),"MSK") || !strcmp(tzone.Data(),"MWT") ){
1673 mocchiut 1.6 //
1674 mocchiut 1.16 offset = -60*60*3; // UTC (Coordinated Universal Time) = Moscow Winter Time - 3hs
1675 mocchiut 1.10 found = true;
1676 mocchiut 1.6 //
1677     };
1678     //
1679     if ( !strcmp(tzone.Data(),"CET") ){
1680     //
1681 mocchiut 1.16 offset = -60*60*1; // CET (Central European Time) - 1 hs = UTC
1682 mocchiut 1.10 found = true;
1683 mocchiut 1.6 //
1684     };
1685     //
1686     if ( !strcmp(tzone.Data(),"CEST") ){
1687     //
1688 mocchiut 1.16 offset = -60*60*2; // CEST (Central European Summer Time) - 2 h = UTC
1689 mocchiut 1.10 found = true;
1690 mocchiut 1.6 //
1691     };
1692     //
1693 mocchiut 1.10 if ( !strcmp(tzone.Data(),"MSD") || !strcmp(tzone.Data(),"MST") ){
1694 mocchiut 1.6 //
1695 mocchiut 1.16 offset = -60*60*4; // MSD (Moscow Summer Time) - 4 h = UTC
1696 mocchiut 1.10 found = true;
1697     //
1698     };
1699     //
1700 mocchiut 1.11 if ( !found && strcmp(tzone.Data(),"UTC") && strcmp(tzone.Data(),"GMT") && strcmp(tzone.Data(),"") ){
1701 mocchiut 1.6 //
1702 mocchiut 1.16 offset = 0;
1703 mocchiut 1.11 printf("\n Unknown time zone %s using UTC \n",tzone.Data());
1704     tzone = "UTC";
1705 mocchiut 1.6 };
1706     //
1707 mocchiut 1.16 dbt += offset;
1708     TTimeStamp *time = new TTimeStamp((time_t)dbt,0);
1709     //
1710     rtime = time->AsString("s");
1711 mocchiut 1.6 //
1712     return(rtime);
1713     }
1714 mocchiut 1.12
1715    
1716 mocchiut 1.21 //
1717     // Build a query and call DoQuery.
1718     //
1719     // date it's an SQL datetime date and dbc is the connection to be
1720     // used. It will query for the tle with the nearest but previous date
1721     // and the immediatly next one.
1722     //
1723     Int_t GL_TLE::Query(TString date, TSQLServer *dbc){
1724 mocchiut 1.12 stringstream myquery;
1725     myquery.str("");
1726    
1727 mocchiut 1.21 myquery << "(SELECT ID, TLE1, TLE2, TLE3, UNIX_TIMESTAMP(FROM_TIME) FROM GL_TLE "
1728     << "WHERE FROM_TIME <= '" << date.Data()
1729     << "' ORDER BY FROM_TIME DESC LIMIT 1) "
1730     << "UNION "
1731     << "(SELECT ID, TLE1, TLE2, TLE3, UNIX_TIMESTAMP(FROM_TIME) FROM GL_TLE "
1732     << "WHERE FROM_TIME > '" << date.Data()
1733     << "' ORDER BY FROM_TIME ASC LIMIT 1)";
1734 mocchiut 1.12
1735 mocchiut 1.21 return DoQuery(myquery.str().c_str(), dbc);
1736 mocchiut 1.12 }
1737    
1738    
1739 mocchiut 1.21 //
1740     // Build a query and call DoQuery.
1741     //
1742     // time is the UTC date in unix time (UTC) and dbc is the connection
1743     // to be used. It will query for the tle with the nearest but
1744     // previous date and the immediatly next one.
1745     //
1746     // Returns the value returned by DoQuery().
1747     //
1748     Int_t GL_TLE::Query(UInt_t time, TSQLServer *dbc){
1749 mocchiut 1.12 stringstream myquery;
1750     myquery.str("");
1751    
1752 mocchiut 1.21 myquery << "(SELECT ID, TLE1, TLE2, TLE3, UNIX_TIMESTAMP(FROM_TIME) FROM GL_TLE "
1753     << "WHERE FROM_TIME <= FROM_UNIXTIME('" << time
1754     << "') ORDER BY FROM_TIME DESC LIMIT 1) "
1755     << "UNION "
1756     << "(SELECT ID, TLE1, TLE2, TLE3, UNIX_TIMESTAMP(FROM_TIME) FROM GL_TLE "
1757     << "WHERE FROM_TIME > FROM_UNIXTIME('" << time
1758     << "') ORDER BY FROM_TIME ASC LIMIT 1)";
1759 mocchiut 1.12
1760 mocchiut 1.21 return DoQuery(myquery.str().c_str(), dbc);
1761 mocchiut 1.12 }
1762    
1763    
1764 mocchiut 1.21 //
1765     // Do the query myquery on the connectio dbc. Initialize tle,
1766     // tleFromTime and tleToTime.
1767     //
1768     // We should have two rows (unless the table is old). From the last
1769     // one we only take tleToTime.
1770     //
1771     // Returns 0 for success, 1 for failure.
1772     //
1773     Int_t GL_TLE::DoQuery(TString myquery, TSQLServer *dbc){
1774 mocchiut 1.12 TSQLResult *result;
1775     TSQLRow *row;
1776    
1777 mocchiut 1.21 // Set the right time_zone (otherwise horrible things will occur! :)
1778     dbc->Query("SET time_zone = '+0:00'");
1779    
1780     // Do the query
1781 mocchiut 1.22 if ( !this->GetGLTABLES()->IsConnected(dbc) ) return -57;
1782     this->GetGLTABLES()->AddQ();
1783 mocchiut 1.12 result = dbc->Query(myquery.Data());
1784 mocchiut 1.21 if(! result->GetRowCount() ) {
1785     cerr << "GL_TLE: query failed: " << myquery.Data() << endl;
1786     return 1;
1787     }
1788    
1789     // Get results
1790     row = result->Next(); // first tle row
1791     tle = GiveTle(row);
1792    
1793     tleFromTime = strtol(row->GetField(4), NULL, 10);
1794    
1795     row = result->Next(); // second tle row
1796     if(row)
1797     tleToTime = strtol(row->GetField(4), NULL, 10);
1798     else {
1799     cerr << "GL_TLE: Warning: using last avaible TLE. Please update GL_TLE table!\n";
1800     tleToTime = UINT_MAX;
1801     }
1802    
1803     delete row;
1804     delete result;
1805 mocchiut 1.12
1806 mocchiut 1.21 return 0;
1807     }
1808 mocchiut 1.12
1809    
1810 mocchiut 1.21 //
1811     // Build a cTle object from the GL_TLE row.
1812     //
1813     cTle* GL_TLE::GiveTle(TSQLRow *row) {
1814     cTle *thistle = NULL;
1815     string tle1, tle2, tle3;
1816    
1817     // Build cTle object
1818     tle1 = row->GetField(1);
1819     tle2 = row->GetField(2);
1820     tle3 = row->GetField(3);
1821    
1822     thistle = new cTle(tle1, tle2, tle3);
1823 mocchiut 1.12
1824 mocchiut 1.21 return thistle;
1825 mocchiut 1.12 }

  ViewVC Help
Powered by ViewVC 1.1.23