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

Annotation of /YodaProfiler/src/GLTables.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.24 - (hide annotations) (download)
Mon Mar 19 16:14:18 2007 UTC (17 years, 8 months ago) by pam-fi
Branch: MAIN
Changes since 1.23: +2 -1 lines
no validation check during tracker calibration query

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 pam-fi 1.24 // myquery << " AND VALIDATION=1 ORDER BY FROM_TIME DESC LIMIT 1;"; // RIVEDERE LA VALIDAZIONE!!!
1174     myquery << " ORDER BY FROM_TIME DESC LIMIT 1;";
1175 mocchiut 1.1 // myquery << " ORDER BY FROM_TIME DESC LIMIT 1;";
1176 mocchiut 1.22 if ( !this->GetGLTABLES()->IsConnected(dbc) ) return -57;
1177     this->GetGLTABLES()->AddQ();
1178 mocchiut 1.1 pResult = dbc->Query(myquery.str().c_str());
1179     if(!pResult->GetRowCount())return (-53);
1180     for( r=0; r < 1000; r++){
1181     Row = pResult->Next();
1182     if( Row == NULL ) break;
1183     for( t = 0; t < pResult->GetFieldCount(); t++){
1184 mocchiut 1.2 stringstream row;
1185     row.str("");
1186     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
1187 pam-fi 1.9 if (t==0) ID = (UInt_t)atoll(Row->GetField(t));
1188     if (t==1) ID_ROOT_L0 = (UInt_t)atoll(Row->GetField(t));
1189 mocchiut 1.2 if (t==2) EV_ROOT_CALIBTRK1 = (UInt_t)atoll(row.str().c_str());
1190     if (t==3) EV_ROOT_CALIBTRK2 = (UInt_t)atoll(row.str().c_str());
1191 pam-fi 1.9 if (t==4) FROM_TIME = (UInt_t)atoll(Row->GetField(t));
1192     if (t==5) TO_TIME = (UInt_t)atoll(Row->GetField(t));
1193 mocchiut 1.1 //
1194 pam-fi 1.9 if (t==6) OBT1 = (UInt_t)atoll(Row->GetField(t));
1195     if (t==7) OBT2 = (UInt_t)atoll(Row->GetField(t));
1196     if (t==8) PKT1 = (UInt_t)atoll(Row->GetField(t));
1197     if (t==9) PKT2 = (UInt_t)atoll(Row->GetField(t));
1198     if (t==10) BOOT_NUMBER = (UInt_t)atoll(Row->GetField(t));
1199     if (t==11) VALIDATION = (UInt_t)atoll(Row->GetField(t));
1200     };
1201 mocchiut 1.1 };
1202 pam-fi 1.9 delete pResult;
1203 mocchiut 1.1 //
1204 pam-fi 1.9 // if ( TO_TIME < time ) return(51);
1205 mocchiut 1.8 //
1206 mocchiut 1.1 if ( (!OBT1 && !PKT1 ) || (!OBT2 && !PKT2) ) return(52); // ONE CALIBRATION PACKET IS MISSING!
1207     //
1208     return 0;
1209     };
1210    
1211     // ****************************************************
1212     /**
1213     * Function to query the GL_CALO_CALIB table of the DB.
1214     *
1215     * \param run starting time
1216     * \return struct of type GL_CALO_CALIB_data, which stores the query result
1217     */
1218 mocchiut 1.7 Int_t GL_CALO_CALIB::Query_GL_CALO_CALIB(UInt_t time, UInt_t &uptime, UInt_t section, TSQLServer *dbc){
1219 mocchiut 1.1 // MySQL variables
1220     TSQLResult *pResult;
1221     TSQLRow *Row;
1222     int t;
1223     stringstream myquery;
1224 mocchiut 1.7 uptime = 0;
1225 mocchiut 1.1 //
1226     // select the correct calibration
1227     //
1228     myquery.str("");
1229     myquery << "select ID_ROOT_L0, FROM_TIME, TO_TIME, EV_ROOT,VALIDATION from GL_CALO_CALIB where SECTION=" << section;
1230     myquery << " and FROM_TIME <= " << time;
1231     myquery << " and TO_TIME > " << time;
1232 mocchiut 1.7 myquery << " ;";
1233     //myquery << " and VALIDATION=1;";
1234 mocchiut 1.1 //
1235 mocchiut 1.22 if ( !this->GetGLTABLES()->IsConnected(dbc) ) return -57;
1236     this->GetGLTABLES()->AddQ();
1237 mocchiut 1.1 pResult = dbc->Query(myquery.str().c_str());
1238 mocchiut 1.7 // printf(" mysquery is %s\n",myquery.str().c_str());
1239     //
1240     if( !pResult->GetRowCount() ) return(-54);
1241     Row = pResult->Next();
1242     if( Row == NULL ) return (-54);
1243     //
1244     uptime = (UInt_t)atoll(Row->GetField(2));
1245 mocchiut 1.1 //
1246     // if it is corrupted validation is 0 and we have no results from the query...
1247     //
1248 mocchiut 1.7 if( atoi(Row->GetField(4)) == 0 ){ // if validation = 0
1249 mocchiut 1.1 //
1250     // in this case take relax the conditions and take the valid calibration that preceed the correct one
1251     //
1252     myquery.str("");
1253     myquery << "select ID_ROOT_L0, FROM_TIME, TO_TIME, EV_ROOT,VALIDATION from GL_CALO_CALIB where SECTION=" << section;
1254     myquery << " and FROM_TIME <= " << time;
1255     myquery << " and VALIDATION=1 ORDER BY FROM_TIME DESC LIMIT 1;";
1256 mocchiut 1.22 if ( !this->GetGLTABLES()->IsConnected(dbc) ) return -57;
1257     this->GetGLTABLES()->AddQ();
1258 mocchiut 1.1 pResult = dbc->Query(myquery.str().c_str());
1259 mocchiut 1.7 // printf(" mysquery is %s\n",myquery.str().c_str());
1260 mocchiut 1.1 //
1261     // if no results yet quit with error
1262     //
1263     if( !pResult->GetRowCount() ) return (-54);
1264 mocchiut 1.7 //
1265     Row = pResult->Next();
1266     //
1267 mocchiut 1.1 };
1268     //
1269     // store infos and exit
1270     //
1271     if( Row == NULL ) return (-54);
1272     for( t = 0; t < pResult->GetFieldCount(); t++){
1273     if (t==0) ID_ROOT_L0 = (UInt_t)atoll(Row->GetField(t));
1274     if (t==1) FROM_TIME = (UInt_t)atoll(Row->GetField(t));
1275     if (t==2) TO_TIME = (UInt_t)atoll(Row->GetField(t));
1276     if (t==3) EV_ROOT = (UInt_t)atoll(Row->GetField(t));
1277     };
1278     pResult->Delete();
1279     return 0;
1280     };
1281     // ****************************************************
1282     /**
1283     * Function to query the GL_S4_CALIB table of the DB.
1284     *
1285     * \param run starting time
1286     * \return struct of type GL_S4_CALIB_data, which stores the query result
1287     */
1288     Int_t GL_S4_CALIB::Query_GL_S4_CALIB(UInt_t time, TSQLServer *dbc){
1289     // MySQL variables
1290     TSQLResult *pResult;
1291     TSQLRow *Row;
1292     int t;
1293     int r;
1294     stringstream myquery;
1295     // ----------------
1296     myquery.str("");
1297     myquery << "select * from GL_S4_CALIB where FROM_TIME <= "<< time;
1298 mocchiut 1.5 myquery << " ORDER BY FROM_TIME DESC LIMIT 1;";
1299 mocchiut 1.1 // myquery << " ORDER BY FROM_TIME DESC LIMIT 1;";
1300 mocchiut 1.22 if ( !this->GetGLTABLES()->IsConnected(dbc) ) return -57;
1301     this->GetGLTABLES()->AddQ();
1302 mocchiut 1.1 pResult = dbc->Query(myquery.str().c_str());
1303     if(!pResult->GetRowCount())return (-55);//throw -55;
1304     for( r=0; r < 1000; r++){
1305     Row = pResult->Next();
1306     if( Row == NULL ) break;
1307     for( t = 0; t < pResult->GetFieldCount(); t++){
1308     if (t==0) ID = (UInt_t)atoll(Row->GetField(t));
1309     if (t==1) ID_ROOT_L0 = (UInt_t)atoll(Row->GetField(t));
1310     if (t==2) EV_ROOT = (UInt_t)atoll(Row->GetField(t));
1311     if (t==3) FROM_TIME = (UInt_t)atoll(Row->GetField(t));
1312     if (t==4) TO_TIME = (UInt_t)atoll(Row->GetField(t));
1313     if (t==5) PARAM_FIT0 = atof(Row->GetField(t));
1314     if (t==6) PARAM_FIT1 = atof(Row->GetField(t));
1315     };
1316     };
1317     delete pResult;
1318     //
1319     if(TO_TIME < time)return(51);
1320     //
1321     return 0;
1322     };
1323     // ****************************************************
1324     /**
1325     * Function to query the GL_PARAM table of the DB.
1326     *
1327     * \param run starting time
1328     * \param parameter description (DESCR)
1329     * \return struct of type GL_ROOT_data, which stores the query result
1330     */
1331     Int_t GL_PARAM::Query_GL_PARAM(UInt_t time, UInt_t type, TSQLServer *dbc){
1332     // Bool_t debug = 1;
1333     // MySQL variables
1334     TSQLResult *pResult;
1335     TSQLRow *Row;
1336     int t;
1337     int r;
1338     stringstream myquery;
1339     // ----------------
1340     myquery.str("");
1341     myquery << " select ";
1342     myquery << " ID, PATH, NAME, DESCR, TYPE, FROM_TIME,TO_TIME ";
1343     myquery << " from GL_PARAM ";
1344     myquery << " where TYPE = '"<<type<<"' ";
1345     myquery << " and FROM_TIME <= " << time;
1346     myquery << " ORDER BY TO_TIME DESC LIMIT 1;";
1347     //
1348 mocchiut 1.22 if ( !this->GetGLTABLES()->IsConnected(dbc) ) return -57;
1349     this->GetGLTABLES()->AddQ();
1350 mocchiut 1.1 pResult = dbc->Query(myquery.str().c_str());
1351     if(!pResult->GetRowCount())return (-52);
1352     for( r=0; r < 1000; r++){
1353     Row = pResult->Next();
1354     if( Row == NULL ) break;
1355     for( t = 0; t < pResult->GetFieldCount(); t++){
1356     if (t==0) ID = (UInt_t)atoll(Row->GetField(t));
1357     if (t==1) PATH = Row->GetField(t);// put in fpath the path to that file
1358     if (t==2) NAME = Row->GetField(t);
1359     if (t==3) DESCR = Row->GetField(t);
1360     if (t==4) FROM_TIME = (UInt_t)atoll(Row->GetField(t));
1361     if (t==5) TO_TIME = (UInt_t)atoll(Row->GetField(t));
1362     if (t==6) TYPE = (UInt_t)atoll(Row->GetField(t));
1363     };
1364     };
1365     delete pResult;
1366     //
1367     if(TO_TIME==0) TO_TIME = numeric_limits<UInt_t>::max();
1368     //
1369     if(TO_TIME < time) return(51);
1370     //
1371     return 0;
1372     };
1373    
1374    
1375     /**
1376     * Fills a struct cGLRun with values from a GLRun object (to put data into a F77 common).
1377     */
1378    
1379     void GL_RUN::GetLevel2Struct(cGLRun *l2) const{
1380     l2->id = ID;
1381     l2->id_reg_run = ID_ROOT_L0;
1382     l2->id_reg_run_l2 = ID_ROOT_L2;
1383     l2->runheader_time = RUNHEADER_TIME;
1384     l2->runtrailer_time = RUNTRAILER_TIME;
1385     l2->ev_from = EV_FROM;
1386     l2->trk_calib_used = TRK_CALIB_USED;
1387     l2->eff_wrk_schedule = EFF_WRK_SCHEDULE;
1388     l2->prh_var_trg_mode_a = PRH_VAR_TRG_MODE_A;
1389     l2->prh_var_trg_mode_b = PRH_VAR_TRG_MODE_B;
1390     l2->acq_build_info = ACQ_BUILD_INFO;
1391     l2->acq_var_info = ACQ_VAR_INFO;
1392     };
1393    
1394     GL_TIMESYNC::GL_TIMESYNC(UInt_t id, TString type, TSQLServer *dbc){
1395     // MySQL variables
1396     TFile *file = 0;
1397     UInt_t idraw = 0;
1398     //
1399     TSQLResult *pResult;
1400     TSQLRow *Row;
1401     stringstream myquery;
1402 mocchiut 1.14 stringstream rname;
1403 mocchiut 1.23 // pcksList packetsNames;
1404     // pcksList::iterator Iter;
1405     // getPacketsNames(packetsNames);
1406 mocchiut 1.14 rname.str("");
1407 mocchiut 1.1 // ----------------
1408     myquery.str("");
1409     myquery << "select ";
1410     myquery << "PATH";
1411     myquery << ",NAME,ID_RAW";
1412     myquery << " from GL_ROOT where ";
1413     myquery << type.Data();
1414     myquery << "=" << id << ";";
1415     //
1416 mocchiut 1.22 if ( !this->GetGLTABLES()->IsConnected(dbc) ) return;
1417     this->GetGLTABLES()->AddQ();
1418 mocchiut 1.1 pResult = dbc->Query(myquery.str().c_str());
1419     if( pResult->GetRowCount() ){
1420     Row = pResult->Next();
1421     if( Row ){
1422     stringstream fname;
1423     fname.str("");
1424     fname << Row->GetField(0) << "/" << Row->GetField(1);
1425 mocchiut 1.14 rname << Row->GetField(1);
1426 mocchiut 1.1 file = new TFile(fname.str().c_str(),"READ");
1427     idraw = (UInt_t)atoll(Row->GetField(2));
1428     };
1429     };
1430     //
1431     if ( file && file->IsOpen() ){
1432     TTree *T=(TTree*)file->Get("Physics");
1433     pamela::EventHeader *eh = 0;
1434     pamela::PscuHeader *ph = 0;
1435     T->SetBranchAddress("Header", &eh);
1436     //
1437     T->GetEntry(0);
1438     ph = eh->GetPscuHeader();
1439     pktfirst = ph->GetCounter();
1440     obtfirst = ph->GetOrbitalTime();
1441 mocchiut 1.23 //
1442     // code = eh->GetCounter();
1443     // UInt_t en = 0;
1444     // for(Iter = packetsNames.begin(); Iter != packetsNames.end(); Iter++){
1445     // en = code->Get(GetPacketType(*Iter));
1446     // if ( !strcmp("CalibCalPed",*Iter) || !strcmp("CalibTrk1",*Iter) || !strcmp("CalibTrk2",*Iter) || !strcmp("CalibS4",*Iter) ){
1447     // //
1448     // TTree *TC = 0;
1449     // TC = (TTree*)file->Get("CalibCalPed");
1450     // if ( !TC || TC->IsZombie() ) return;
1451     // EventHeader *ehc = 0;
1452     // PscuHeader *phc = 0;
1453     // TC->SetBranchAddress("Header", &ehc);
1454     // TC->GetEntry(0);
1455     // phc = ehc->GetPscuHeader();
1456     // pktfirst = phc->GetCounter();
1457     // obtfirst = phc->GetOrbitalTime();
1458     // //
1459     // };
1460     // };
1461     //
1462 mocchiut 1.1 };
1463     //
1464     // look for Resurs offset
1465     //
1466 mocchiut 1.17 T0 = 0;
1467 mocchiut 1.1 //
1468 mocchiut 1.14 //
1469     stringstream oss;
1470     oss.str("");
1471 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='"
1472 mocchiut 1.14 << rname.str().c_str() << "';";
1473 mocchiut 1.22 if ( !this->GetGLTABLES()->IsConnected(dbc) ) return;
1474     this->GetGLTABLES()->AddQ();
1475 mocchiut 1.14 pResult = dbc->Query(oss.str().c_str());
1476     Row = pResult->Next();
1477     //
1478     TString name=rname.str().c_str();
1479     UInt_t dworbit = 0;
1480     Int_t nlength = name.Length();
1481     if ( nlength < 5 ) return;
1482     TString dwo = 0;
1483     for (Int_t i = 0; i<5; i++){
1484     dwo.Append(name[i],1);
1485     };
1486     if ( dwo.IsDigit() ){
1487     dworbit = (UInt_t)dwo.Atoi();
1488     } else {
1489     dwo="";
1490     for (Int_t i = 8; i<13; i++){
1491     dwo.Append(name[i],1);
1492     };
1493 mocchiut 1.23 if ( dwo.IsDigit() ){
1494     dworbit = (UInt_t)dwo.Atoi();
1495     } else {
1496     dworbit = 1;
1497     };
1498 mocchiut 1.14 };
1499     //
1500 mocchiut 1.23 //
1501 mocchiut 1.14 if ( !Row ){
1502     oss.str("");
1503 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< "
1504 mocchiut 1.14 << dworbit << " order by FROM_ORBIT desc limit 1;";
1505 mocchiut 1.22 if ( !this->GetGLTABLES()->IsConnected(dbc) ) return;
1506     this->GetGLTABLES()->AddQ();
1507 mocchiut 1.14 pResult = dbc->Query(oss.str().c_str());
1508 mocchiut 1.1 Row = pResult->Next();
1509 mocchiut 1.14 if ( !Row ){
1510     printf(" ERROR FROM GLTables! cannot determine Resurs offset \n");
1511     return;
1512 mocchiut 1.1 };
1513     };
1514     //
1515 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);
1516 mocchiut 1.17 T0 = (UInt_t)tu.GetSec();
1517 mocchiut 1.1 //
1518     // look for the correct timesync entry
1519     //
1520     myquery.str("");
1521 mocchiut 1.17 myquery << " SELECT OBT0,TIMESYNC,TYPE FROM GL_TIMESYNC "
1522 mocchiut 1.1 << " WHERE ID_RAW = " << idraw
1523     << ";";
1524 mocchiut 1.22 if ( !this->GetGLTABLES()->IsConnected(dbc) ) return;
1525     this->GetGLTABLES()->AddQ();
1526 mocchiut 1.1 pResult = dbc->Query(myquery.str().c_str());
1527     if ( pResult ){
1528     Row = pResult->Next();
1529     if ( (Row != NULL) && ((UInt_t)atoll(Row->GetField(0)) > 0 ) ){
1530 mocchiut 1.17 OBT0 = (UInt_t)atoll(Row->GetField(0));
1531     TIMESYNC = (UInt_t)atoll(Row->GetField(1));
1532     TYPE = (UInt_t)atoll(Row->GetField(2));
1533     toffset = (UInt_t)atoll(Row->GetField(1)) - (UInt_t)(this->DBobt((UInt_t)atoll(Row->GetField(0)))/1000) + T0;
1534 mocchiut 1.1 };
1535     };
1536 mocchiut 1.3 //
1537     file->Close();
1538 mocchiut 1.1 delete pResult;
1539     };
1540    
1541     /**
1542     *
1543     * Returns the DB absolute time needed to associate calibrations to data
1544     *
1545     */
1546     UInt_t GL_TIMESYNC::DBabsTime(UInt_t OBT){
1547     //
1548     return(((UInt_t)(this->DBobt(OBT)/1000)+toffset));
1549     //
1550     };
1551    
1552 mocchiut 1.17 /**
1553     *
1554     * Returns the Resurs time given the OBT needed to process inclination and orbital infos
1555     *
1556     */
1557     UInt_t GL_TIMESYNC::ResursTime(UInt_t OBT){
1558     //
1559 mocchiut 1.19 return(((UInt_t)((Int_t)(this->DBobt(OBT)-this->DBobt(OBT0))/1000)+TIMESYNC));
1560 mocchiut 1.17 //
1561     };
1562    
1563 mocchiut 1.1
1564 mocchiut 1.20 /**
1565     * Return the correct packet number if we went back to zero
1566     */
1567     Long64_t GL_TIMESYNC::DBpkt(UInt_t pkt_num){
1568 mocchiut 1.1 //
1569 mocchiut 1.20 if ( pkt_num < (pktfirst/2) && pktfirst > (16777214/2) ){
1570     return((Long64_t)pkt_num+16777215LL);
1571     };
1572 mocchiut 1.1 //
1573 mocchiut 1.20 if ( pkt_num > pktfirst*2 && pkt_num > (16777214/2) ){
1574     return((Long64_t)pkt_num-16777215LL);
1575 mocchiut 1.1 };
1576     //
1577 mocchiut 1.20 return((Long64_t)pkt_num);
1578 mocchiut 1.1 //
1579     };
1580    
1581 mocchiut 1.20 /**
1582     * Return the correct On Board Time if we went back to zero
1583     */
1584     Long64_t GL_TIMESYNC::DBobt(UInt_t obt){
1585 mocchiut 1.1 //
1586 mocchiut 1.20 if ( obt < (obtfirst/2) && obtfirst > (numeric_limits<UInt_t>::max()/2) ) return((Long64_t)(obt+numeric_limits<UInt_t>::max()));
1587 mocchiut 1.1 //
1588 mocchiut 1.20 if ( obt > (obtfirst*2) && obt > (numeric_limits<UInt_t>::max()/2) ){
1589     return((Long64_t)obt-(Long64_t)numeric_limits<UInt_t>::max());
1590 mocchiut 1.1 };
1591     //
1592 mocchiut 1.20 return((Long64_t)obt);
1593 mocchiut 1.1 };
1594 mocchiut 1.5
1595 mocchiut 1.20
1596    
1597     // ULong64_t GL_TIMESYNC::DBobt(UInt_t obt){
1598     // //
1599     // if ( obt < (obtfirst/2) && obtfirst > (numeric_limits<UInt_t>::max()/2) ) return((ULong64_t)(obt+numeric_limits<UInt_t>::max()));
1600     // //
1601     // if ( obt > (obtfirst*2) && obt > (numeric_limits<UInt_t>::max()/2) ){
1602     // if ( (obt-numeric_limits<UInt_t>::max()) < 0 ){
1603     // return((ULong64_t)(numeric_limits<UInt_t>::max()-obt));
1604     // } else {
1605     // return((ULong64_t)(obt-numeric_limits<UInt_t>::max()));
1606     // };
1607     // };
1608     // //
1609     // return((ULong64_t)obt);
1610     // //
1611     // };
1612    
1613     // UInt_t GL_TIMESYNC::DBpkt(UInt_t pkt_num){
1614     // //
1615     // if ( pkt_num < (pktfirst/2) && pktfirst > (16777214/2) ) return((pkt_num+16777215));
1616     // //
1617     // if ( pkt_num > pktfirst*2 && pkt_num > (16777214/2) ){
1618     // if ( (pkt_num-16777215) < 0 ){
1619     // return((16777215-pkt_num));
1620     // } else {
1621     // return((pkt_num-16777215));
1622     // };
1623     // };
1624     // //
1625     // return(pkt_num);
1626     // //
1627     // };
1628    
1629 mocchiut 1.5 /*
1630     *
1631     * Convert the time in the DB from UInt_t to a string
1632     *
1633     * @param dbt time in the DB
1634     * @param tzone Time Zone, can be UTC,GMT,CET,CEST,MSD default is MSK
1635     *
1636     */
1637 mocchiut 1.10 TString GL_TIMESYNC::ConvertTime(TString &tzone, UInt_t dbt){
1638 mocchiut 1.5 //
1639 mocchiut 1.16 Int_t offset = 0;
1640 mocchiut 1.5 TString rtime;
1641 mocchiut 1.10 Bool_t found = false;
1642 mocchiut 1.5 //
1643 mocchiut 1.11 if ( !strcmp(tzone.Data(),"MSK") || !strcmp(tzone.Data(),"MWT") ){
1644 mocchiut 1.5 //
1645 mocchiut 1.16 offset = 60*60*3; // UTC (Coordinated Universal Time) + 3hs = Moscow Winter Time
1646 mocchiut 1.10 found = true;
1647 mocchiut 1.5 //
1648     };
1649     //
1650     if ( !strcmp(tzone.Data(),"CET") ){
1651     //
1652 mocchiut 1.16 offset = 60*60*1; // CET (Central European Time) = UTC + 1 hs
1653 mocchiut 1.10 found = true;
1654 mocchiut 1.5 //
1655     };
1656     //
1657     if ( !strcmp(tzone.Data(),"CEST") ){
1658     //
1659 mocchiut 1.16 offset = 60*60*2; // CEST (Central European Summer Time) = UTC + 2 h
1660 mocchiut 1.10 found = true;
1661 mocchiut 1.5 //
1662     };
1663     //
1664 mocchiut 1.11 if ( !strcmp(tzone.Data(),"MSD") || !strcmp(tzone.Data(),"MST")){
1665 mocchiut 1.5 //
1666 mocchiut 1.16 offset = 60*60*4; // MSD (Moscow Summer Time) = UTC + 4 h
1667 mocchiut 1.10 found = true;
1668 mocchiut 1.5 //
1669     };
1670     //
1671 mocchiut 1.11 if ( !found && strcmp(tzone.Data(),"UTC") && strcmp(tzone.Data(),"GMT") && strcmp(tzone.Data(),"") ){
1672     printf("\n Unknown time zone %s using UTC \n",tzone.Data());
1673     tzone = "UTC";
1674 mocchiut 1.10 };
1675     //
1676 mocchiut 1.16 dbt += offset;
1677     //
1678     TTimeStamp *time = new TTimeStamp((time_t)dbt,0);
1679     //
1680     rtime = time->AsString("s");
1681     //
1682     delete time;
1683 mocchiut 1.5 //
1684     return(rtime);
1685     }
1686 mocchiut 1.6
1687     /*
1688     *
1689 mocchiut 1.16 * Convert the time from TZONE to UTC
1690 mocchiut 1.6 *
1691     * @param dbt time in the DB
1692     * @param tzone Time Zone, can be UTC,GMT,CET,CEST,MSD default is MSK
1693     *
1694     */
1695 mocchiut 1.10 TString GL_TIMESYNC::UnConvertTime(TString &tzone, UInt_t dbt){
1696 mocchiut 1.6 //
1697 mocchiut 1.16 Int_t offset = 0;
1698 mocchiut 1.6 TString rtime;
1699     //
1700 mocchiut 1.10 Bool_t found = false;
1701     //
1702 mocchiut 1.11 if ( !strcmp(tzone.Data(),"MSK") || !strcmp(tzone.Data(),"MWT") ){
1703 mocchiut 1.6 //
1704 mocchiut 1.16 offset = -60*60*3; // UTC (Coordinated Universal Time) = Moscow Winter Time - 3hs
1705 mocchiut 1.10 found = true;
1706 mocchiut 1.6 //
1707     };
1708     //
1709     if ( !strcmp(tzone.Data(),"CET") ){
1710     //
1711 mocchiut 1.16 offset = -60*60*1; // CET (Central European Time) - 1 hs = UTC
1712 mocchiut 1.10 found = true;
1713 mocchiut 1.6 //
1714     };
1715     //
1716     if ( !strcmp(tzone.Data(),"CEST") ){
1717     //
1718 mocchiut 1.16 offset = -60*60*2; // CEST (Central European Summer Time) - 2 h = UTC
1719 mocchiut 1.10 found = true;
1720 mocchiut 1.6 //
1721     };
1722     //
1723 mocchiut 1.10 if ( !strcmp(tzone.Data(),"MSD") || !strcmp(tzone.Data(),"MST") ){
1724 mocchiut 1.6 //
1725 mocchiut 1.16 offset = -60*60*4; // MSD (Moscow Summer Time) - 4 h = UTC
1726 mocchiut 1.10 found = true;
1727     //
1728     };
1729     //
1730 mocchiut 1.11 if ( !found && strcmp(tzone.Data(),"UTC") && strcmp(tzone.Data(),"GMT") && strcmp(tzone.Data(),"") ){
1731 mocchiut 1.6 //
1732 mocchiut 1.16 offset = 0;
1733 mocchiut 1.11 printf("\n Unknown time zone %s using UTC \n",tzone.Data());
1734     tzone = "UTC";
1735 mocchiut 1.6 };
1736     //
1737 mocchiut 1.16 dbt += offset;
1738     TTimeStamp *time = new TTimeStamp((time_t)dbt,0);
1739     //
1740     rtime = time->AsString("s");
1741 mocchiut 1.6 //
1742     return(rtime);
1743     }
1744 mocchiut 1.12
1745    
1746 mocchiut 1.21 //
1747     // Build a query and call DoQuery.
1748     //
1749     // date it's an SQL datetime date and dbc is the connection to be
1750     // used. It will query for the tle with the nearest but previous date
1751     // and the immediatly next one.
1752     //
1753     Int_t GL_TLE::Query(TString date, TSQLServer *dbc){
1754 mocchiut 1.12 stringstream myquery;
1755     myquery.str("");
1756    
1757 mocchiut 1.21 myquery << "(SELECT ID, TLE1, TLE2, TLE3, UNIX_TIMESTAMP(FROM_TIME) FROM GL_TLE "
1758     << "WHERE FROM_TIME <= '" << date.Data()
1759     << "' ORDER BY FROM_TIME DESC LIMIT 1) "
1760     << "UNION "
1761     << "(SELECT ID, TLE1, TLE2, TLE3, UNIX_TIMESTAMP(FROM_TIME) FROM GL_TLE "
1762     << "WHERE FROM_TIME > '" << date.Data()
1763     << "' ORDER BY FROM_TIME ASC LIMIT 1)";
1764 mocchiut 1.12
1765 mocchiut 1.21 return DoQuery(myquery.str().c_str(), dbc);
1766 mocchiut 1.12 }
1767    
1768    
1769 mocchiut 1.21 //
1770     // Build a query and call DoQuery.
1771     //
1772     // time is the UTC date in unix time (UTC) and dbc is the connection
1773     // to be used. It will query for the tle with the nearest but
1774     // previous date and the immediatly next one.
1775     //
1776     // Returns the value returned by DoQuery().
1777     //
1778     Int_t GL_TLE::Query(UInt_t time, TSQLServer *dbc){
1779 mocchiut 1.12 stringstream myquery;
1780     myquery.str("");
1781    
1782 mocchiut 1.21 myquery << "(SELECT ID, TLE1, TLE2, TLE3, UNIX_TIMESTAMP(FROM_TIME) FROM GL_TLE "
1783     << "WHERE FROM_TIME <= FROM_UNIXTIME('" << time
1784     << "') ORDER BY FROM_TIME DESC LIMIT 1) "
1785     << "UNION "
1786     << "(SELECT ID, TLE1, TLE2, TLE3, UNIX_TIMESTAMP(FROM_TIME) FROM GL_TLE "
1787     << "WHERE FROM_TIME > FROM_UNIXTIME('" << time
1788     << "') ORDER BY FROM_TIME ASC LIMIT 1)";
1789 mocchiut 1.12
1790 mocchiut 1.21 return DoQuery(myquery.str().c_str(), dbc);
1791 mocchiut 1.12 }
1792    
1793    
1794 mocchiut 1.21 //
1795     // Do the query myquery on the connectio dbc. Initialize tle,
1796     // tleFromTime and tleToTime.
1797     //
1798     // We should have two rows (unless the table is old). From the last
1799     // one we only take tleToTime.
1800     //
1801     // Returns 0 for success, 1 for failure.
1802     //
1803     Int_t GL_TLE::DoQuery(TString myquery, TSQLServer *dbc){
1804 mocchiut 1.12 TSQLResult *result;
1805     TSQLRow *row;
1806    
1807 mocchiut 1.21 // Set the right time_zone (otherwise horrible things will occur! :)
1808     dbc->Query("SET time_zone = '+0:00'");
1809    
1810     // Do the query
1811 mocchiut 1.22 if ( !this->GetGLTABLES()->IsConnected(dbc) ) return -57;
1812     this->GetGLTABLES()->AddQ();
1813 mocchiut 1.12 result = dbc->Query(myquery.Data());
1814 mocchiut 1.21 if(! result->GetRowCount() ) {
1815     cerr << "GL_TLE: query failed: " << myquery.Data() << endl;
1816     return 1;
1817     }
1818    
1819     // Get results
1820     row = result->Next(); // first tle row
1821     tle = GiveTle(row);
1822    
1823     tleFromTime = strtol(row->GetField(4), NULL, 10);
1824    
1825     row = result->Next(); // second tle row
1826     if(row)
1827     tleToTime = strtol(row->GetField(4), NULL, 10);
1828     else {
1829     cerr << "GL_TLE: Warning: using last avaible TLE. Please update GL_TLE table!\n";
1830     tleToTime = UINT_MAX;
1831     }
1832    
1833     delete row;
1834     delete result;
1835 mocchiut 1.12
1836 mocchiut 1.21 return 0;
1837     }
1838 mocchiut 1.12
1839    
1840 mocchiut 1.21 //
1841     // Build a cTle object from the GL_TLE row.
1842     //
1843     cTle* GL_TLE::GiveTle(TSQLRow *row) {
1844     cTle *thistle = NULL;
1845     string tle1, tle2, tle3;
1846    
1847     // Build cTle object
1848     tle1 = row->GetField(1);
1849     tle2 = row->GetField(2);
1850     tle3 = row->GetField(3);
1851    
1852     thistle = new cTle(tle1, tle2, tle3);
1853 mocchiut 1.12
1854 mocchiut 1.21 return thistle;
1855 mocchiut 1.12 }

  ViewVC Help
Powered by ViewVC 1.1.23