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

Diff of /YodaProfiler/src/PamelaDBOperations.cpp

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

revision 1.5 by pam-fi, Fri Sep 8 14:42:48 2006 UTC revision 1.15 by mocchiut, Tue Oct 24 14:24:23 2006 UTC
# Line 31  Line 31 
31  #include <varDump/VarDumpRecord.h>  #include <varDump/VarDumpRecord.h>
32  #include <physics/S4/S4Event.h>  #include <physics/S4/S4Event.h>
33  //  //
34    #include <sgp4.h>
35    
36  #include <PamelaDBOperations.h>  #include <PamelaDBOperations.h>
37  //  //
38  using namespace std;  using namespace std;
39  using namespace pamela;  using namespace pamela;
40    
41    // Some function to work with cTle stuff.
42    bool compTLE(cTle* tle1, cTle *tle2);
43    float getTleJulian(cTle *);
44    string getTleDatetime(cTle*);
45    
46  /**  /**
47   * Constructor.   * Constructor.
48   * @param host         hostname for the SQL connection.   * @param host         hostname for the SQL connection.
# Line 47  using namespace pamela; Line 54  using namespace pamela;
54   * @param obt0         file obt0.   * @param obt0         file obt0.
55   * @param tsync        file timesync.   * @param tsync        file timesync.
56   * @param debug        debug flag.   * @param debug        debug flag.
57     * @param tlefilename  ascii file with TLE 3 line elements.
58   */   */
59  PamelaDBOperations::PamelaDBOperations(TString host, TString user, TString password, TString filerawname, TString filerootname, UInt_t boot, UInt_t tsync, UInt_t obt0, Bool_t debug){  PamelaDBOperations::PamelaDBOperations(TString host, TString user, TString password, TString filerawname, TString filerootname, UInt_t boot, UInt_t tsync, UInt_t obt0, Bool_t debug, TString tlefilename){
60    //    //
61    //    //
62    SetConnection(host,user,password);    SetConnection(host,user,password);
# Line 62  PamelaDBOperations::PamelaDBOperations(T Line 70  PamelaDBOperations::PamelaDBOperations(T
70    SetTsync(tsync);    SetTsync(tsync);
71    SetObt0(obt0);    SetObt0(obt0);
72    //    //
73      SetTLEPath(tlefilename);
74    //    //
   SetRootName(filerootname);  
   SetRawName(filerawname);  
75    //    //
76    this->OpenFile();    INSERT_RAW =!filerawname.IsNull();
77      if(INSERT_RAW)SetRawName(filerawname);
78      //
79      INSERT_ROOT = !filerootname.IsNull();
80      if( INSERT_ROOT ){
81        this->SetRootName(filerootname);
82        this->SetOrbitNo();
83        file = TFile::Open(this->GetRootName().Data());
84      };
85    //    //
86    this->SetID_RAW(0);    this->SetID_RAW(0);
87    this->SetID_ROOT(0);    this->SetID_ROOT(0);
88    
89      VALIDATE = false;
90      
91    //    //
92  };  };
93    
# Line 78  PamelaDBOperations::PamelaDBOperations(T Line 96  PamelaDBOperations::PamelaDBOperations(T
96   */   */
97  void PamelaDBOperations::Close(){  void PamelaDBOperations::Close(){
98    if( conn && conn->IsConnected() ) conn->Close();    if( conn && conn->IsConnected() ) conn->Close();
99      delete clean_time;
100    delete glrun;    delete glrun;
101    delete this;    delete this;
102  };  };
# Line 86  void PamelaDBOperations::Close(){ Line 105  void PamelaDBOperations::Close(){
105  // SETTERS  // SETTERS
106  //  //
107    
108    //
109    // must be out of the constructor in order to FORCE the validation of the latest runs in case you run the validation together with the latest file
110    //
111    void PamelaDBOperations::CheckValidate(Long64_t olderthan){
112      clean_time = new TDatime();
113      if(olderthan >= 0){
114        VALIDATE = true;
115        UInt_t timelim = 0;
116        timelim =  (UInt_t)clean_time->Convert() - olderthan;
117        clean_time->Set(timelim,false);
118      };
119    };
120    
121  /**  /**
122   * Open the DB connection   * Open the DB connection
123   * @param host         hostname for the SQL connection.   * @param host         hostname for the SQL connection.
# Line 93  void PamelaDBOperations::Close(){ Line 125  void PamelaDBOperations::Close(){
125   * @param password     password for the SQL connection.   * @param password     password for the SQL connection.
126   */   */
127  void PamelaDBOperations::SetConnection(TString host, TString user, TString password){  void PamelaDBOperations::SetConnection(TString host, TString user, TString password){
128      if ( IsDebug() ) printf(" Connecting using host = %s user = %s password = %s \n",host.Data(),user.Data(),password.Data());
129    conn = TSQLServer::Connect(host.Data(),user.Data(),password.Data());    conn = TSQLServer::Connect(host.Data(),user.Data(),password.Data());
130  };  };
131    
# Line 161  void PamelaDBOperations::SetRootName(TSt Line 194  void PamelaDBOperations::SetRootName(TSt
194  };  };
195    
196  /**  /**
197     * Store the downlink orbit number from filename.
198     */
199    void PamelaDBOperations::SetOrbitNo(){
200      dworbit = 0;
201      TString name = this->GetRootFile();
202      Int_t nlength = name.Length();
203      if ( nlength < 5 ) return;
204      TString dwo = 0;
205      for (Int_t i = 0; i<5; i++){
206        dwo.Append(name[i],1);
207      };
208      if ( dwo.IsDigit() ){
209        dworbit = (UInt_t)dwo.Atoi();
210      } else {
211        dwo="";
212        for (Int_t i = 8; i<13; i++){
213          dwo.Append(name[i],1);
214        };    
215        if ( dwo.IsDigit() ) dworbit = (UInt_t)dwo.Atoi();
216      };
217      if ( IsDebug() ) printf(" Downlink orbit is %i (dwo = %s) \n",dworbit,dwo.Data());
218      return;
219    };
220    
221    
222    
223    /**
224   * Store the NOBOOT flag.   * Store the NOBOOT flag.
225   * @param noboot    true/false.   * @param noboot    true/false.
226   */   */
# Line 169  void PamelaDBOperations::SetNOBOOT(Bool_ Line 229  void PamelaDBOperations::SetNOBOOT(Bool_
229  };  };
230    
231  /**  /**
232     * Store path to the TLE file.
233     */
234    void PamelaDBOperations::SetTLEPath(TString str){
235      tlefilename = str;
236    };
237    
238    /**
239   * Store the olderthan variable   * Store the olderthan variable
240   * @param olderthan   * @param olderthan
241   */   */
242  void PamelaDBOperations::SetOlderThan(Long64_t oldthan){  // void PamelaDBOperations::SetOlderThan(Long64_t oldthan){
243    olderthan = oldthan;  //   olderthan = oldthan;
244  };  // };
245    
246  /**  /**
247   * Retrieve the ID_RAW, if exists, returns NULL if does not exist.   * Retrieve the ID_RAW, if exists, returns NULL if does not exist.
# Line 225  Int_t PamelaDBOperations::SetUpperLimits Line 292  Int_t PamelaDBOperations::SetUpperLimits
292    UInt_t jump = 50000; // was 5000    UInt_t jump = 50000; // was 5000
293    EventCounter *code=0;    EventCounter *code=0;
294    //    //
295      UInt_t deltapkt = 5000;
296      ULong64_t deltaobt = 50000;
297      //
298    //   pcksList packetsNames;    //   pcksList packetsNames;
299    //   pcksList::iterator Iter;    //   pcksList::iterator Iter;
300    //   getPacketsNames(packetsNames);    //   getPacketsNames(packetsNames);
# Line 271  Int_t PamelaDBOperations::SetUpperLimits Line 341  Int_t PamelaDBOperations::SetUpperLimits
341    //    //
342    if ( nevent < 2 ) return(4);    if ( nevent < 2 ) return(4);
343    //    //
344    if ( PKT(pktlast) < PKT(pktfirst) && OBT(obtlast) < OBT(obtfirst) ){    if ( (PKT(pktlast) < PKT(pktfirst) && OBT(obtlast) < OBT(obtfirst)) || (labs(PKT(pktlast)-PKT(pktfirst))<deltapkt && labs(OBT(obtlast)-OBT(obtfirst))<deltaobt) ){
345        //
346      // go back      // go back
347      zomp = nevent - 2;      zomp = nevent - 2;
348      //      //
# Line 320  Int_t PamelaDBOperations::SetUpperLimits Line 391  Int_t PamelaDBOperations::SetUpperLimits
391    // check if last runtrailer is within limits, if not extend limits (one should check for all packets but we need only runtrailer)    // check if last runtrailer is within limits, if not extend limits (one should check for all packets but we need only runtrailer)
392    //    //
393    PacketType *pctp=0;    PacketType *pctp=0;
   T->GetEntry(upperentry);  
   code = eh->GetCounter();  
   Int_t lasttrail = code->Get(pctp->RunTrailer);  
   Int_t lasthead = code->Get(pctp->RunHeader);  
394    TTree *rh=(TTree*)file->Get("RunHeader");    TTree *rh=(TTree*)file->Get("RunHeader");
395    if ( !rh || rh->IsZombie() ) throw -17;    if ( !rh || rh->IsZombie() ) throw -17;
396    TTree *rt=(TTree*)file->Get("RunTrailer");    TTree *rt=(TTree*)file->Get("RunTrailer");
# Line 346  Int_t PamelaDBOperations::SetUpperLimits Line 413  Int_t PamelaDBOperations::SetUpperLimits
413    UInt_t pkth = 0;    UInt_t pkth = 0;
414    ULong64_t obth = 0;    ULong64_t obth = 0;
415    //    //
416      T->GetEntry(upperentry);
417      code = eh->GetCounter();
418      Int_t lasttrail = code->Get(pctp->RunTrailer);
419      Int_t lasthead = code->Get(pctp->RunHeader);
420    if ( lasttrail < rtev ){    if ( lasttrail < rtev ){
421      rt->GetEntry(lasttrail);      rt->GetEntry(lasttrail);
422      pht = eht->GetPscuHeader();      pht = eht->GetPscuHeader();
# Line 356  Int_t PamelaDBOperations::SetUpperLimits Line 427  Int_t PamelaDBOperations::SetUpperLimits
427    if ( lasthead < rhev ){    if ( lasthead < rhev ){
428      rh->GetEntry(lasthead);      rh->GetEntry(lasthead);
429      phh = ehh->GetPscuHeader();      phh = ehh->GetPscuHeader();
430      pkth = PKT(pht->GetCounter());      pkth = PKT(phh->GetCounter());
431      obth = OBT(pht->GetOrbitalTime());      obth = OBT(phh->GetOrbitalTime());
432    };    };
433    //    //
434    if ( IsDebug() ) printf(" rhev before %i ph %i upperp %i oh %llu uppero %llu \n",rhev,pkth,upperpkt,obth,upperobt);    if ( IsDebug() ) printf(" rhev before %i ph %i upperp %i oh %llu uppero %llu \n",rhev,pkth,upperpkt,obth,upperobt);
# Line 401  Int_t PamelaDBOperations::SetUpperLimits Line 472  Int_t PamelaDBOperations::SetUpperLimits
472      pkth = PKT(phh->GetCounter());      pkth = PKT(phh->GetCounter());
473      obth = OBT(phh->GetOrbitalTime());      obth = OBT(phh->GetOrbitalTime());
474      //      //
475    //    if ( IsDebug() ) printf(" k %i rhev before %i ph %u upperp %u oh %u uppero %u \n",k,rhev,pkth,spkth,obth,sobth);
476        //
477      if ( pkth < spkth && obth < sobth ){      if ( pkth < spkth && obth < sobth ){
       if ( IsDebug() ) printf(" rhev before %i ph %i upperp %i oh %llu uppero %llu \n",rhev,pkth,upperpkt,obth,upperobt);  
478        if ( IsDebug() ) printf(" RH PROBLEMS determining the event repetition at the end of the file lasthead %i  \n",rhev);        if ( IsDebug() ) printf(" RH PROBLEMS determining the event repetition at the end of the file lasthead %i  \n",rhev);
479        //        //
480        rhev--;        rhev = k-1;
481        rh->GetEntry(rhev);        rh->GetEntry(rhev);
482        pkth = spkth;        pkth = spkth;
483        obth = sobth;        obth = sobth;
       if ( IsDebug() ) printf(" lasthead %i pt %i p1 %i ot %u o1 %u \n",rhev,pkth,spkth,obth,sobth);  
484        //        //
485        UInt_t evbefh = 0;        UInt_t evbefh = 0;
486        code = ehh->GetCounter();        code = ehh->GetCounter();
# Line 419  Int_t PamelaDBOperations::SetUpperLimits Line 490  Int_t PamelaDBOperations::SetUpperLimits
490          ph = eh->GetPscuHeader();          ph = eh->GetPscuHeader();
491          t_pktlast = PKT(ph->GetCounter());          t_pktlast = PKT(ph->GetCounter());
492          t_obtlast = OBT(ph->GetOrbitalTime());          t_obtlast = OBT(ph->GetOrbitalTime());
493          if ( t_pktlast < spkth && t_obtlast < sobth ){ // jump          if ( t_pktlast <= spkth && t_obtlast <= sobth ){ // jump
494            upperpkt = pkth;            upperpkt = pkth;
495            upperobt = obth;            upperobt = obth;
496            upperentry = evbefh-1;            upperentry = evbefh-1;
# Line 439  Int_t PamelaDBOperations::SetUpperLimits Line 510  Int_t PamelaDBOperations::SetUpperLimits
510          };              };    
511        };        };
512        if ( IsDebug() ) printf(" rhev after %i ph %i upperp %i oh %llu uppero %llu \n",rhev,pkth,upperpkt,obth,upperobt);        if ( IsDebug() ) printf(" rhev after %i ph %i upperp %i oh %llu uppero %llu \n",rhev,pkth,upperpkt,obth,upperobt);
513          goto kikko0;
514      };      };
515    };    };
516     kikko0:
517    //    //
518    //    //
519    //    //
# Line 458  Int_t PamelaDBOperations::SetUpperLimits Line 531  Int_t PamelaDBOperations::SetUpperLimits
531      pktt = PKT(pht->GetCounter());      pktt = PKT(pht->GetCounter());
532      obtt = OBT(pht->GetOrbitalTime());      obtt = OBT(pht->GetOrbitalTime());
533      //      //
534    //    if ( IsDebug() ) printf(" k %i rtev beforev %i  pt %i upperp %i ot %llu uppero %llu \n",k,rtev,pktt,spktt,obtt,sobtt);
535        //
536      if ( pktt < spktt && obtt < sobtt ){      if ( pktt < spktt && obtt < sobtt ){
       if ( IsDebug() ) printf(" rtev beforev %i  pt %i upperp %i ot %llu uppero %llu \n",rtev,pktt,upperpkt,obtt,upperobt);  
537        if ( IsDebug() ) printf(" RT PROBLEMS determining the event repetition at the end of the file lasttrail %i \n",rtev);        if ( IsDebug() ) printf(" RT PROBLEMS determining the event repetition at the end of the file lasttrail %i \n",rtev);
538        //        //
539        rtev--;        rtev = k-1;
540        rt->GetEntry(rtev);        rt->GetEntry(rtev);
541        pktt = spktt;        pktt = spktt;
542        obtt = sobtt;        obtt = sobtt;
# Line 476  Int_t PamelaDBOperations::SetUpperLimits Line 550  Int_t PamelaDBOperations::SetUpperLimits
550          ph = eh->GetPscuHeader();          ph = eh->GetPscuHeader();
551          t_pktlast = PKT(ph->GetCounter());          t_pktlast = PKT(ph->GetCounter());
552          t_obtlast = OBT(ph->GetOrbitalTime());          t_obtlast = OBT(ph->GetOrbitalTime());
553          if ( t_pktlast < spktt && t_obtlast < sobtt ){ // jump          if ( t_pktlast <= spktt && t_obtlast <= sobtt ){ // jump
554            upperpkt = pktt;            upperpkt = pktt;
555            upperobt = obtt;            upperobt = obtt;
556            upperentry = evbeft-1;            upperentry = evbeft-1;
# Line 496  Int_t PamelaDBOperations::SetUpperLimits Line 570  Int_t PamelaDBOperations::SetUpperLimits
570          };          };
571        };        };
572        if ( IsDebug() ) printf(" rtev after %i  pt %i upperp %i ot %llu uppero %llu \n",rtev,pktt,upperpkt,obtt,upperobt);        if ( IsDebug() ) printf(" rtev after %i  pt %i upperp %i ot %llu uppero %llu \n",rtev,pktt,upperpkt,obtt,upperobt);
573        break;        goto kikko;
574          //      break;
575        //        //
576      };      };
577      //        //  
578    };    };
579    //    //
580    // kikko:   kikko:
581      //
582      T->GetEntry(upperentry);
583      code = eh->GetCounter();
584      lasttrail = code->Get(pctp->RunTrailer);
585      lasthead = code->Get(pctp->RunHeader);
586      if ( lasttrail < rtev ){
587        rt->GetEntry(lasttrail);
588        pht = eht->GetPscuHeader();
589        pktt = PKT(pht->GetCounter());
590        obtt = OBT(pht->GetOrbitalTime());
591      };
592      //
593      if ( lasthead < rhev ){
594        rh->GetEntry(lasthead);
595        phh = ehh->GetPscuHeader();
596        pkth = PKT(phh->GetCounter());
597        obth = OBT(phh->GetOrbitalTime());
598      };
599      //
600      if ( IsDebug() ) printf(" rhev before %i ph %i upperp %i oh %llu uppero %llu \n",rhev,pkth,upperpkt,obth,upperobt);
601      if ( pkth > upperpkt && obth > upperobt ){
602        if ( IsDebug() ) printf(" Upper limits extended to include last header: ph %i upperp %i oh %llu uppero %llu \n",pkth,upperpkt,obth,upperobt);
603        upperpkt = pkth;
604        upperobt = obth;
605        rhev = lasthead+1;
606      } else {
607        rhev = lasthead;
608      };
609      if ( IsDebug() ) printf(" rhev after %i ph %i upperp %i oh %llu uppero %llu \n",rhev,pkth,upperpkt,obth,upperobt);
610      //
611      if ( IsDebug() ) printf(" rtev beforev %i  pt %i upperp %i ot %llu uppero %llu \n",rtev,pktt,upperpkt,obtt,upperobt);
612      if ( pktt > upperpkt && obtt > upperobt ){
613        if ( IsDebug() ) printf(" Upper limits extended to include last trailer: pt %i upperp %i ot %llu uppero %llu \n",pktt,upperpkt,obtt,upperobt);
614        upperpkt = pktt;
615        upperobt = obtt;
616        rtev = lasttrail+1;
617      } else {
618        rtev = lasttrail;
619      };
620      if ( IsDebug() ) printf(" rtev after %i  pt %i upperp %i ot %llu uppero %llu \n",rtev,pktt,upperpkt,obtt,upperobt);
621    //    //
622    if ( IsDebug() ) printf(" Upper limits are: OBT %llu pkt_num %i upper entry %i \n",upperobt,upperpkt,upperentry);    if ( IsDebug() ) printf(" Upper limits are: OBT %llu pkt_num %i upper entry %i \n",upperobt,upperpkt,upperentry);
623    //    //
624    return(0);    return(0);
625  }  }
626    
627    /**
628     *
629     * Trick to have unique RUN ID numbers even when runs are deleted and mysql deamon restarted.
630     * Entries in the _RUNID_GEN table are never deleted.
631     *
632     **/
633    UInt_t PamelaDBOperations::AssignRunID(){
634      //
635      TSQLResult *result = 0;
636      TSQLRow *row = 0;
637      UInt_t runid = 0;
638      //
639      stringstream   oss;
640      //  
641      oss.str("");
642      oss << "INSERT INTO _RUNID_GEN VALUES (NULL);";
643      result = conn->Query(oss.str().c_str());
644      if ( !result ) throw -10;
645      oss.str("");
646      oss << "SELECT ID FROM _RUNID_GEN ORDER BY ID DESC LIMIT 1;";
647      result = conn->Query(oss.str().c_str());
648      if ( !result ) throw -10;
649      //
650      row = result->Next();
651      //
652      if ( !row ) throw -28;
653      //
654      runid = (UInt_t)atoll(row->GetField(0));
655      //
656      return(runid);
657    };
658    
659  //  //
660  // GETTERS  // GETTERS
661  //  //
# Line 584  const PacketType* PamelaDBOperations::Ge Line 731  const PacketType* PamelaDBOperations::Ge
731  // PRIVATE FUNCTIONS  // PRIVATE FUNCTIONS
732  //  //
733    
734  /**  // /**
735   * Open the ROOT filename for reading  // * Open the ROOT filename for reading
736   */  // */
737  void PamelaDBOperations::OpenFile(){  // void PamelaDBOperations::OpenFile(){
738    file = TFile::Open(this->GetRootName().Data());  //   file = TFile::Open(this->GetRootName().Data());
739    //   //
740    
741    void PamelaDBOperations::CheckFile(){  
742      if ( !file ) throw -12;
743  };  };
744    
745    
746  /**  /**
747   * Check if LEVEL0 file and DB connection have really be opened   * Check if LEVEL0 file and DB connection have really be opened
748   */   */
749  void PamelaDBOperations::CheckFile(){    void PamelaDBOperations::CheckConnection(){  
   //  
   if ( !file ) throw -12;  
750    //    //
751    // check connection    // check connection
752    //    //
753    if( !conn ) throw -1;        if( !conn ) throw -1;
754    bool connect = conn->IsConnected();    bool connect = conn->IsConnected();
755    if( !connect ) throw -1;        if( !connect ) throw -1;
756      if ( !dworbit ) throw -27;
757  };  };
758    
759  /**  /**
# Line 783  Int_t PamelaDBOperations::insertPamelaGL Line 933  Int_t PamelaDBOperations::insertPamelaGL
933    if ( this->GetID_RAW() == 0 )  throw -11;    if ( this->GetID_RAW() == 0 )  throw -11;
934    //    //
935    oss.str("");    oss.str("");
936    oss << "SELECT OFFSET_DATE FROM GL_RESURS_OFFSET WHERE FROM_ID_RAW<= "    oss << "SELECT OFFSET_DATE FROM GL_RESURS_OFFSET WHERE SPECIAL_FILE='"
937        << id << " AND TO_ID_RAW >= "        << this->GetRawFile().Data() << "';";
       << id << ";";  
938    if ( IsDebug() ) printf(" %s \n",oss.str().c_str());    if ( IsDebug() ) printf(" %s \n",oss.str().c_str());
939    result = conn->Query(oss.str().c_str());    result = conn->Query(oss.str().c_str());
940    if ( !result ) throw -10;    if ( !result ) throw -10;
941    row = result->Next();    row = result->Next();
942    if ( !row ) throw -10;    //
943      if ( !row ){
944        oss.str("");
945        oss << "SELECT OFFSET_DATE FROM GL_RESURS_OFFSET WHERE FROM_ORBIT< "
946            << dworbit << " order by FROM_ORBIT desc limit 1;";
947        if ( IsDebug() ) printf(" %s \n",oss.str().c_str());
948        result = conn->Query(oss.str().c_str());
949        if ( !result ) throw -10;
950        row = result->Next();
951        if ( !row ) throw -10;
952      };
953    //    //
954    t0 = (UInt_t)TDatime(row->GetField(0)).Convert();    t0 = (UInt_t)TDatime(row->GetField(0)).Convert();
955    /*    /*
# Line 864  Int_t PamelaDBOperations::insertPamelaGL Line 1023  Int_t PamelaDBOperations::insertPamelaGL
1023          //          //
1024          TYPE = 55;//224;          TYPE = 55;//224;
1025          //          //
1026            if ( IsDebug() ) printf("mcmd tsync %i tsync %u obt %u \n",i,TSYNC,OBT);
1027            //
1028          if ( TSYNC && OBT ){          if ( TSYNC && OBT ){
1029            existsts = true;            existsts = true;
1030            goto eout;            goto eout;
# Line 886  Int_t PamelaDBOperations::insertPamelaGL Line 1047  Int_t PamelaDBOperations::insertPamelaGL
1047      //      //
1048      rt->SetBranchAddress("RunTrailer", &runt);      rt->SetBranchAddress("RunTrailer", &runt);
1049      //      //
1050      if ( rhev > 0 ){      Int_t nrhev = rh->GetEntries();
1051        rh->GetEntry(0);      Int_t nrtev = rt->GetEntries();
1052        //      if ( IsDebug() ) printf(" ou nevent %i rhev %i rtev %i \n",nevent,nrhev,nrtev);
1053        TSYNC = runh->LAST_TIME_SYNC_INFO;      //
1054        OBT = runh->OBT_TIME_SYNC * 1000;      if ( nrhev > 0 ){
1055        //        for (Int_t i=0; i<nrhev; i++){
1056        TYPE = 20;          //
1057        //          rh->GetEntry(i);
1058        if ( TSYNC && OBT ){          //
1059          existsts = true;          TSYNC = runh->LAST_TIME_SYNC_INFO;
1060          goto eout;          OBT = runh->OBT_TIME_SYNC * 1000;
1061            //
1062            TYPE = 20;
1063            //
1064            if ( IsDebug() ) printf("runheader %i tsync %u obt %u \n",i,TSYNC,OBT);
1065            //
1066            if ( TSYNC && OBT ){
1067              existsts = true;
1068              goto eout;
1069            };
1070        };        };
1071        //        //
1072      };      };
1073      if ( rtev > 0 ){      if ( nrtev > 0 ){
1074        //        //
1075        if ( IsDebug() ) printf(" No runheader \n");        if ( IsDebug() ) printf(" No runheader \n");
1076        signal = 6;        signal = 6;
1077        //        //
1078        rt->GetEntry(0);        for (Int_t i=0; i<nrtev; i++){
1079        //          //
1080        TSYNC = runt->LAST_TYME_SYNC_INFO;          rt->GetEntry(i);
1081        OBT = runt->OBT_TYME_SYNC * 1000;          //
1082        //          TSYNC = runt->LAST_TYME_SYNC_INFO;
1083        TYPE = 21;          OBT = runt->OBT_TYME_SYNC * 1000;
1084        //          //
1085        if ( TSYNC && OBT ){          TYPE = 21;
1086          existsts = true;          //
1087          goto eout;          if ( IsDebug() ) printf("runtrailer %i tsync %u obt %u \n",i,TSYNC,OBT);
1088            //
1089            if ( TSYNC && OBT ){
1090              existsts = true;
1091              goto eout;
1092            };
1093        };        };
1094        //        //
1095      } else {      } else {
# Line 1381  Bool_t PamelaDBOperations::IsRunAlreadyI Line 1556  Bool_t PamelaDBOperations::IsRunAlreadyI
1556      if ( glrun->GetNEVENTS() > (UInt_t)atoll(row->GetField(1)) ){      if ( glrun->GetNEVENTS() > (UInt_t)atoll(row->GetField(1)) ){
1557        //        //
1558        if ( IsDebug() ) printf(" The new run has more events than the old one \n");        if ( IsDebug() ) printf(" The new run has more events than the old one \n");
1559        oss.str("");        glrun->DeleteRun(conn,(UInt_t)atoll(row->GetField(0)),"GL_RUN");
1560        oss << "DELETE FROM GL_RUN WHERE ID=" << row->GetField(0) <<";";  //       oss.str("");
1561        if ( IsDebug() ) printf(" delete the run entry: query is \n %s \n",oss.str().c_str());        //       oss << "DELETE FROM GL_RUN WHERE ID=" << row->GetField(0) <<";";
1562        conn->Query(oss.str().c_str());  //       if ( IsDebug() ) printf(" delete the run entry: query is \n %s \n",oss.str().c_str());      
1563    //       conn->Query(oss.str().c_str());
1564        if ( signal ) signal = false;        if ( signal ) signal = false;
1565        goto gonext;              goto gonext;      
1566        //        //
# Line 1398  Bool_t PamelaDBOperations::IsRunAlreadyI Line 1574  Bool_t PamelaDBOperations::IsRunAlreadyI
1574        //        //
1575        if ( IsDebug() ) printf(" The new run has the same number of events and the runheader the old one miss the runheader \n");        if ( IsDebug() ) printf(" The new run has the same number of events and the runheader the old one miss the runheader \n");
1576        //        //
1577        oss.str("");        glrun->DeleteRun(conn,(UInt_t)atoll(row->GetField(0)),"GL_RUN");
1578        oss << "DELETE FROM GL_RUN WHERE ID=" << row->GetField(0) <<";";  //       oss.str("");
1579        if ( IsDebug() ) printf(" delete the run entry: query is \n %s \n",oss.str().c_str());        //       oss << "DELETE FROM GL_RUN WHERE ID=" << row->GetField(0) <<";";
1580        conn->Query(oss.str().c_str());  //       if ( IsDebug() ) printf(" delete the run entry: query is \n %s \n",oss.str().c_str());      
1581    //       conn->Query(oss.str().c_str());
1582        //        //
1583        if ( signal ) signal = false;        if ( signal ) signal = false;
1584        goto gonext;        goto gonext;
# Line 1415  Bool_t PamelaDBOperations::IsRunAlreadyI Line 1592  Bool_t PamelaDBOperations::IsRunAlreadyI
1592        //        //
1593        if ( IsDebug() ) printf(" The new run has the same number of events, the runheader and the runtrailer the old one miss the runtrailer \n");        if ( IsDebug() ) printf(" The new run has the same number of events, the runheader and the runtrailer the old one miss the runtrailer \n");
1594        //        //
1595        oss.str("");        glrun->DeleteRun(conn,(UInt_t)atoll(row->GetField(0)),"GL_RUN");
1596        oss << "DELETE FROM GL_RUN WHERE ID=" << row->GetField(0) <<";";  //       oss.str("");
1597        if ( IsDebug() ) printf(" delete the run entry: query is \n %s \n",oss.str().c_str());        //       oss << "DELETE FROM GL_RUN WHERE ID=" << row->GetField(0) <<";";
1598        conn->Query(oss.str().c_str());  //       if ( IsDebug() ) printf(" delete the run entry: query is \n %s \n",oss.str().c_str());      
1599    //       conn->Query(oss.str().c_str());
1600        if ( signal ) signal = false;        if ( signal ) signal = false;
1601        //        //
1602      };      };
# Line 1454  void PamelaDBOperations::HandleRun(){   Line 1632  void PamelaDBOperations::HandleRun(){  
1632      //      //
1633      this->FillClass();      this->FillClass();
1634      //      //
1635      if ( !IsRunAlreadyInserted() ) glrun->Fill_GL_RUN(conn);      if ( !IsRunAlreadyInserted() ){
1636          glrun->SetID(this->AssignRunID());
1637          glrun->SetID_RUN_FRAG(0);
1638          glrun->Fill_GL_RUN(conn);
1639        };
1640    } else {    } else {
1641      //      //
1642      if ( IsDebug() ) printf(" oh no! the distance between runheader and runtrailer seems wrong: check %llu pktt %llu \n",chkpkt,pktt);      if ( IsDebug() ) printf(" oh no! the distance between runheader and runtrailer seems wrong: check %llu pktt %llu \n",chkpkt,pktt);
# Line 1626  void PamelaDBOperations::HandleRunFragme Line 1808  void PamelaDBOperations::HandleRunFragme
1808        };        };
1809        if ( IsDebug() ) printf(" Check overlapping events done: %i %i %llu %llu firstev is %i\n",apkt,bpkt,aobt,bobt,firstev);        if ( IsDebug() ) printf(" Check overlapping events done: %i %i %llu %llu firstev is %i\n",apkt,bpkt,aobt,bobt,firstev);
1810        //        //
       glrun1->SetID(0);  
1811        glrun1->SetPKT_COUNTER(glrun->GetPKT_COUNTER());        glrun1->SetPKT_COUNTER(glrun->GetPKT_COUNTER());
1812        glrun1->SetPKT_READY_COUNTER(glrun->GetPKT_READY_COUNTER());        glrun1->SetPKT_READY_COUNTER(glrun->GetPKT_READY_COUNTER());
1813        glrun1->SetRUNTRAILER_TIME(glrun->GetRUNTRAILER_TIME());        glrun1->SetRUNTRAILER_TIME(glrun->GetRUNTRAILER_TIME());
# Line 1654  void PamelaDBOperations::HandleRunFragme Line 1835  void PamelaDBOperations::HandleRunFragme
1835        //        //
1836        if ( !IsRunAlreadyInserted() ){        if ( !IsRunAlreadyInserted() ){
1837          //          //
1838            glrun->SetID(this->AssignRunID());
1839            glrun->SetID_RUN_FRAG(glrun1->GetID());
1840          glrun->Fill_GL_RUN(conn);          glrun->Fill_GL_RUN(conn);
1841          //          //
1842          // get id number          // get id number
1843          //          //
1844          oss.str("");  //      oss.str("");
1845          oss << " SELECT ID FROM GL_RUN WHERE BOOT_NUMBER="<<this->GetBOOTnumber()<<" AND "  //      oss << " SELECT ID FROM GL_RUN WHERE BOOT_NUMBER="<<this->GetBOOTnumber()<<" AND "
1846              << " RUNHEADER_OBT="<<glrun->GetRUNHEADER_OBT()<<" AND "  //          << " RUNHEADER_OBT="<<glrun->GetRUNHEADER_OBT()<<" AND "
1847              << " RUNTRAILER_OBT="<<glrun->GetRUNTRAILER_OBT()<<";";  //          << " RUNTRAILER_OBT="<<glrun->GetRUNTRAILER_OBT()<<";";
1848          //  //      //
1849          if ( IsDebug() ) printf(" search for idrun0 , query is : \n%s\n",oss.str().c_str());  //      if ( IsDebug() ) printf(" search for idrun0 , query is : \n%s\n",oss.str().c_str());
1850          //  //      //
1851          result =  conn->Query(oss.str().c_str());  //      result =  conn->Query(oss.str().c_str());
1852          if ( !result ) throw -4;  //      if ( !result ) throw -4;
1853          row = result->Next();  //      row = result->Next();
1854          //  //      //
1855          UInt_t idrun0 = 0;  //      UInt_t idrun0 = 0;
1856          if ( !row ){  //      if ( !row ){
1857            throw -10;  //        throw -10;
1858          } else {  //      } else {
1859            idrun0 = (UInt_t)atoll(row->GetField(0));  //        idrun0 = (UInt_t)atoll(row->GetField(0));
1860          };  //      };
         //  
         glrun1->SetID_RUN_FRAG(idrun0);  
1861          //          //
1862            //      glrun1->SetID_RUN_FRAG(idrun0);
1863            glrun1->SetID_RUN_FRAG(glrun->GetID());
1864          glrun1->Fill_GL_RUN(conn);          glrun1->Fill_GL_RUN(conn);
1865          //          //
1866          oss.str("");  //      oss.str("");
1867          oss << " SELECT ID FROM GL_RUN WHERE ID_RUN_FRAG="<<idrun0<<" ;";  //      oss << " SELECT ID FROM GL_RUN WHERE ID_RUN_FRAG="<<idrun0<<" ;";
1868          //  //      //
1869          if ( IsDebug() ) printf(" search for idrun1 , query is : \n%s\n",oss.str().c_str());  //      if ( IsDebug() ) printf(" search for idrun1 , query is : \n%s\n",oss.str().c_str());
1870          //  //      //
1871          result =  conn->Query(oss.str().c_str());  //      result =  conn->Query(oss.str().c_str());
1872          if ( !result ) throw -4;  //      if ( !result ) throw -4;
1873          row = result->Next();  //      row = result->Next();
1874          //  //      //
1875          UInt_t idrun1 = 0;  //      UInt_t idrun1 = 0;
1876          if ( !row ){  //      if ( !row ){
1877            throw -10;  //        throw -10;
1878          } else {  //      } else {
1879            idrun1 = (UInt_t)atoll(row->GetField(0));  //        idrun1 = (UInt_t)atoll(row->GetField(0));
1880          };  //      };
1881          //  //      //
1882          oss.str("");  //      oss.str("");
1883          oss << " UPDATE GL_RUN SET ID_RUN_FRAG="<<idrun1<<" WHERE ID="<<idrun0<<" ;";  //      oss << " UPDATE GL_RUN SET ID_RUN_FRAG="<<idrun1<<" WHERE ID="<<idrun0<<" ;";
1884          //  //      //
1885          result =  conn->Query(oss.str().c_str());  //      result =  conn->Query(oss.str().c_str());
1886          if ( !result ) throw -4;  //      if ( !result ) throw -4;
1887          //          //
1888        };        };
1889        //        //
# Line 1708  void PamelaDBOperations::HandleRunFragme Line 1891  void PamelaDBOperations::HandleRunFragme
1891        //        //
1892        // delete old entry in fragment table        // delete old entry in fragment table
1893        //        //
1894        oss.str("");        glrun->DeleteRun(conn,idfrag,"GL_RUN_FRAGMENTS");
1895        //  //       oss.str("");
1896        oss << " DELETE FROM GL_RUN_FRAGMENTS WHERE ID = " << idfrag << ";";  //       //
1897        //  //       oss << " DELETE FROM GL_RUN_FRAGMENTS WHERE ID = " << idfrag << ";";
1898        if ( IsDebug() ) printf(" Delete from frag table the old run :\n query is \n %s \n",oss.str().c_str());  //       //
1899        result =  conn->Query(oss.str().c_str());  //       if ( IsDebug() ) printf(" Delete from frag table the old run :\n query is \n %s \n",oss.str().c_str());
1900        if ( !result ) throw -4;  //       result =  conn->Query(oss.str().c_str());
1901    //       if ( !result ) throw -4;
1902        //        //
1903        return;        return;
1904        //        //
# Line 1850  void PamelaDBOperations::HandleRunFragme Line 2034  void PamelaDBOperations::HandleRunFragme
2034        glrun->SetRUNTRAILER_OBT(glrun1->GetRUNTRAILER_OBT());        glrun->SetRUNTRAILER_OBT(glrun1->GetRUNTRAILER_OBT());
2035        glrun->SetRUNTRAILER_PKT(glrun1->GetRUNTRAILER_PKT());        glrun->SetRUNTRAILER_PKT(glrun1->GetRUNTRAILER_PKT());
2036        //        //
       glrun1->SetID(0);  
2037        glrun1->SetRUNHEADER_TIME(glrun->GetRUNHEADER_TIME());        glrun1->SetRUNHEADER_TIME(glrun->GetRUNHEADER_TIME());
2038        glrun1->SetRUNHEADER_OBT(glrun->GetRUNHEADER_OBT());        glrun1->SetRUNHEADER_OBT(glrun->GetRUNHEADER_OBT());
2039        glrun1->SetRUNHEADER_PKT(glrun->GetRUNHEADER_PKT());        glrun1->SetRUNHEADER_PKT(glrun->GetRUNHEADER_PKT());
# Line 1870  void PamelaDBOperations::HandleRunFragme Line 2053  void PamelaDBOperations::HandleRunFragme
2053        //        //
2054        if ( !IsRunAlreadyInserted() ){        if ( !IsRunAlreadyInserted() ){
2055          //          //
2056            glrun->SetID(this->AssignRunID());
2057            //
2058            glrun->SetID_RUN_FRAG(glrun1->GetID());
2059          glrun->Fill_GL_RUN(conn);          glrun->Fill_GL_RUN(conn);
2060          //          //
2061          // get id number          // get id number
2062          //          //
2063          oss.str("");  //      oss.str("");
2064          oss << " SELECT ID FROM GL_RUN WHERE BOOT_NUMBER="<<this->GetBOOTnumber()<<" AND "  //      oss << " SELECT ID FROM GL_RUN WHERE BOOT_NUMBER="<<this->GetBOOTnumber()<<" AND "
2065              << " RUNHEADER_OBT="<<glrun->GetRUNHEADER_OBT()<<" AND "  //          << " RUNHEADER_OBT="<<glrun->GetRUNHEADER_OBT()<<" AND "
2066              << " RUNTRAILER_OBT="<<glrun->GetRUNTRAILER_OBT()<<";";  //          << " RUNTRAILER_OBT="<<glrun->GetRUNTRAILER_OBT()<<";";
2067          //  //      //
2068          if ( IsDebug() ) printf(" search for idrun0 , query is : \n%s\n",oss.str().c_str());  //      if ( IsDebug() ) printf(" search for idrun0 , query is : \n%s\n",oss.str().c_str());
2069          //  //      //
2070          result =  conn->Query(oss.str().c_str());  //      result =  conn->Query(oss.str().c_str());
2071          if ( !result ) throw -4;  //      if ( !result ) throw -4;
2072          row = result->Next();  //      row = result->Next();
2073          //  //      //
2074          UInt_t idrun0 = 0;  //      UInt_t idrun0 = 0;
2075          if ( !row ){  //      if ( !row ){
2076            throw -10;  //        throw -10;
2077          } else {  //      } else {
2078            idrun0 = (UInt_t)atoll(row->GetField(0));  //        idrun0 = (UInt_t)atoll(row->GetField(0));
2079          };  //      };
2080          //  //      //
2081          glrun1->SetID_RUN_FRAG(idrun0);  //      glrun1->SetID_RUN_FRAG(idrun0);
2082          //  //
2083            glrun1->SetID_RUN_FRAG(glrun->GetID());
2084          glrun1->Fill_GL_RUN(conn);          glrun1->Fill_GL_RUN(conn);
2085          //          //
2086          oss.str("");  //      oss.str("");
2087          oss << " SELECT ID FROM GL_RUN WHERE ID_RUN_FRAG="<<idrun0<<" ;";  //      oss << " SELECT ID FROM GL_RUN WHERE ID_RUN_FRAG="<<idrun0<<" ;";
2088          //  //      //
2089          if ( IsDebug() ) printf(" search for idrun1 , query is : \n%s\n",oss.str().c_str());  //      if ( IsDebug() ) printf(" search for idrun1 , query is : \n%s\n",oss.str().c_str());
2090          //  //      //
2091          result =  conn->Query(oss.str().c_str());  //      result =  conn->Query(oss.str().c_str());
2092          if ( !result ) throw -4;  //      if ( !result ) throw -4;
2093          row = result->Next();  //      row = result->Next();
2094          //  //      //
2095          UInt_t idrun1 = 0;  //      UInt_t idrun1 = 0;
2096          if ( !row ){  //      if ( !row ){
2097            throw -10;  //        throw -10;
2098          } else {  //      } else {
2099            idrun1 = (UInt_t)atoll(row->GetField(0));  //        idrun1 = (UInt_t)atoll(row->GetField(0));
2100          };  //      };
2101          //  //      //
2102          oss.str("");  //      oss.str("");
2103          oss << " UPDATE GL_RUN SET ID_RUN_FRAG="<<idrun1<<" WHERE ID="<<idrun0<<" ;";  //      oss << " UPDATE GL_RUN SET ID_RUN_FRAG="<<idrun1<<" WHERE ID="<<idrun0<<" ;";
2104          //  //      //
2105          result =  conn->Query(oss.str().c_str());  //      result =  conn->Query(oss.str().c_str());
2106          if ( !result ) throw -4;  //      if ( !result ) throw -4;
2107          //          //
2108        };        };
2109        //        //
# Line 1924  void PamelaDBOperations::HandleRunFragme Line 2111  void PamelaDBOperations::HandleRunFragme
2111        //        //
2112        // delete old entry in fragment table        // delete old entry in fragment table
2113        //        //
2114        oss.str("");        glrun->DeleteRun(conn,idfrag,"GL_RUN_FRAGMENTS");
2115        //  //       oss.str("");
2116        oss << " DELETE FROM GL_RUN_FRAGMENTS WHERE ID = " << idfrag << ";";  //       //
2117        //  //       oss << " DELETE FROM GL_RUN_FRAGMENTS WHERE ID = " << idfrag << ";";
2118        if ( IsDebug() ) printf(" Delete from frag table the old run :\n query is \n %s \n",oss.str().c_str());  //       //
2119        result =  conn->Query(oss.str().c_str());  //       if ( IsDebug() ) printf(" Delete from frag table the old run :\n query is \n %s \n",oss.str().c_str());
2120        if ( !result ) throw -4;  //       result =  conn->Query(oss.str().c_str());
2121    //       if ( !result ) throw -4;
2122        //        //
2123        //        //
2124        return;        return;
# Line 2000  void PamelaDBOperations::HandleRunFragme Line 2188  void PamelaDBOperations::HandleRunFragme
2188          if ( IsDebug() ) printf(" The run is new \n");          if ( IsDebug() ) printf(" The run is new \n");
2189          if ( IsDebug() ) printf(" -> fill the GL_RUNFRAGMENTS table \n");          if ( IsDebug() ) printf(" -> fill the GL_RUNFRAGMENTS table \n");
2190          //          //
2191            glrun->SetID(this->AssignRunID());
2192            glrun->SetID_RUN_FRAG(0);
2193          glrun->Fill_GL_RUN_FRAGMENTS(conn);          glrun->Fill_GL_RUN_FRAGMENTS(conn);
2194          //          //
2195        } else {        } else {
# Line 2032  void PamelaDBOperations::HandleMissingHo Line 2222  void PamelaDBOperations::HandleMissingHo
2222      //      //
2223      this->FillClass(mishead,mistrail,firstev,lastev);      this->FillClass(mishead,mistrail,firstev,lastev);
2224      //      //
2225      if ( !IsRunAlreadyInserted() ) glrun->Fill_GL_RUN(conn);          if ( !IsRunAlreadyInserted() ){
2226          glrun->SetID(this->AssignRunID());
2227          glrun->SetID_RUN_FRAG(0);
2228          glrun->Fill_GL_RUN(conn);    
2229        };
2230      //      //
2231    };    };
2232    //    //
# Line 2199  Bool_t PamelaDBOperations::IsRunConsiste Line 2393  Bool_t PamelaDBOperations::IsRunConsiste
2393            //                  //      
2394            this->SetCommonGLRUN(firstTime,lastTime);            this->SetCommonGLRUN(firstTime,lastTime);
2395            //            //
2396            if ( !IsRunAlreadyInserted() ) glrun->Fill_GL_RUN(conn);                  if ( !IsRunAlreadyInserted() ){
2397                glrun->SetID(this->AssignRunID());
2398                glrun->SetID_RUN_FRAG(0);
2399                glrun->Fill_GL_RUN(conn);      
2400              };
2401            //            //
2402            firstevno = lastentry + 1;            firstevno = lastentry + 1;
2403            //            //
# Line 2275  void PamelaDBOperations::HandleSuspiciou Line 2473  void PamelaDBOperations::HandleSuspiciou
2473      if ( IsDebug() ) printf(" Checking but no events in the run! \n");      if ( IsDebug() ) printf(" Checking but no events in the run! \n");
2474      //      //
2475      this->FillClass();      this->FillClass();
2476      if ( !IsRunAlreadyInserted() ) glrun->Fill_GL_RUN(conn);          if ( !IsRunAlreadyInserted() ){
2477          glrun->SetID(this->AssignRunID());
2478          glrun->SetID_RUN_FRAG(0);
2479          glrun->Fill_GL_RUN(conn);    
2480        };
2481      //      //
2482    } else {    } else {
2483      //      //
# Line 2303  void PamelaDBOperations::HandleSuspiciou Line 2505  void PamelaDBOperations::HandleSuspiciou
2505        if ( IsDebug() ) printf(" No packets but physics inside the run, I will consider it as good\n");        if ( IsDebug() ) printf(" No packets but physics inside the run, I will consider it as good\n");
2506        //        //
2507        this->FillClass();        this->FillClass();
2508        if ( !IsRunAlreadyInserted() ) glrun->Fill_GL_RUN(conn);                if ( !IsRunAlreadyInserted() ){
2509            glrun->SetID(this->AssignRunID());
2510            glrun->SetID_RUN_FRAG(0);
2511            glrun->Fill_GL_RUN(conn);        
2512          };
2513        //        //
2514      } else {      } else {
2515        //        //
# Line 2401  void PamelaDBOperations::HandleSuspiciou Line 2607  void PamelaDBOperations::HandleSuspiciou
2607            //                  //      
2608            this->SetCommonGLRUN(firstTime,lastTime);            this->SetCommonGLRUN(firstTime,lastTime);
2609            //            //
2610            if ( !IsRunAlreadyInserted() ) glrun->Fill_GL_RUN(conn);                  if ( !IsRunAlreadyInserted() ){
2611                glrun->SetID(this->AssignRunID());
2612                glrun->SetID_RUN_FRAG(0);
2613                glrun->Fill_GL_RUN(conn);      
2614              };
2615            //            //
2616            if ( i == lastev && checkfirst < check ){ // if the last event gives a wrong check...            if ( i == lastev && checkfirst < check ){ // if the last event gives a wrong check...
2617              //              //
# Line 2436  void PamelaDBOperations::HandleSuspiciou Line 2646  void PamelaDBOperations::HandleSuspiciou
2646              //                  //    
2647              this->SetCommonGLRUN(firstTime,lastTime);              this->SetCommonGLRUN(firstTime,lastTime);
2648              //              //
2649              if ( !IsRunAlreadyInserted() ) glrun->Fill_GL_RUN(conn);                    if ( !IsRunAlreadyInserted() ){
2650                  glrun->SetID(this->AssignRunID());
2651                  glrun->SetID_RUN_FRAG(0);
2652                  glrun->Fill_GL_RUN(conn);      
2653                };
2654            };            };
2655            //            //
2656            firstevno = lastentry + 1;            firstevno = lastentry + 1;
# Line 3124  Int_t PamelaDBOperations::CleanGL_RUN_FR Line 3338  Int_t PamelaDBOperations::CleanGL_RUN_FR
3338    TSQLRow    *row2   = 0;    TSQLRow    *row2   = 0;
3339    //    //
3340    UInt_t moved = 0;    UInt_t moved = 0;
3341    UInt_t timelim = 0;  //  UInt_t timelim = 0;
3342    TDatime *time = new TDatime();  //  TDatime *time = new TDatime();
3343    //    //
3344    stringstream oss;    stringstream oss;
3345    oss.str("");    oss.str("");
3346    //    //
3347    //    //
   //  
   if ( olderthan < 0 ){  
     if ( IsDebug() ) printf(" Do not clean GL_RUN_FRAGMENTS table \n");  
     return(1);  
   };  
   //  
   // timelim = now - olderthan  
   //  
   time->Set();  
   timelim =  (UInt_t)time->Convert() - olderthan;  
   time->Set(timelim,false);  
   //  
3348    // check if there are entries older than "olderthan" seconds from now    // check if there are entries older than "olderthan" seconds from now
3349    //    //
3350    oss.str("");    oss.str("");
3351    oss << " SELECT ID FROM GL_RUN_FRAGMENTS WHERE"    oss << " SELECT ID FROM GL_RUN_FRAGMENTS WHERE"
3352        << " INSERT_TIME <= '" << time->AsSQLString() << "';";        << " INSERT_TIME <= '" << clean_time->AsSQLString() << "';";
3353    //    //
3354    if ( IsDebug() ) printf(" Select from GL_RUN_FRAGMENTS runs older than %s : query is \n %s \n",time->AsSQLString(),oss.str().c_str());    if ( IsDebug() ) printf(" Select from GL_RUN_FRAGMENTS runs older than %s : query is \n %s \n",clean_time->AsSQLString(),oss.str().c_str());
3355    result = conn->Query(oss.str().c_str());    result = conn->Query(oss.str().c_str());
3356    //    //
3357    if ( result ){    if ( result ){
3358      //      //
3359      row = result->Next();      row = result->Next();
3360      //      //
3361      if ( row ){      while ( row ){
3362        //        //
3363        oss.str("");        oss.str("");
3364        oss << " ID= "<< row->GetField(0);        oss << " ID= "<< row->GetField(0);
# Line 3191  Int_t PamelaDBOperations::CleanGL_RUN_FR Line 3393  Int_t PamelaDBOperations::CleanGL_RUN_FR
3393          if ( IsDebug() ) printf(" The run is new \n");          if ( IsDebug() ) printf(" The run is new \n");
3394          if ( IsDebug() ) printf(" -> fill the DB \n");                if ( IsDebug() ) printf(" -> fill the DB \n");      
3395          //          //
3396          glrun->SetID(0);          //      glrun->SetID(this->AssignRunID()); we use the old run number!
3397            glrun->SetID_RUN_FRAG(glrun->GetID());
3398          glrun->Fill_GL_RUN(conn);            glrun->Fill_GL_RUN(conn);  
3399          //          //
3400          oss.str("");  //      oss.str("");
3401          oss << " SELECT ID FROM GL_RUN WHERE "  //      oss << " SELECT ID FROM GL_RUN WHERE "
3402              << " BOOT_NUMBER=" << glrun->GetBOOT_NUMBER() << " AND "  //          << " BOOT_NUMBER=" << glrun->GetBOOT_NUMBER() << " AND "
3403              << " RUNHEADER_PKT=" << (UInt_t)glrun->GetRUNHEADER_PKT() << " AND "  //          << " RUNHEADER_PKT=" << (UInt_t)glrun->GetRUNHEADER_PKT() << " AND "
3404              << " RUNTRAILER_PKT=" << (UInt_t)glrun->GetRUNTRAILER_PKT() << " AND "  //          << " RUNTRAILER_PKT=" << (UInt_t)glrun->GetRUNTRAILER_PKT() << " AND "
3405              << " RUNHEADER_OBT=" << (UInt_t)glrun->GetRUNHEADER_OBT() << " AND "  //          << " RUNHEADER_OBT=" << (UInt_t)glrun->GetRUNHEADER_OBT() << " AND "
3406              << " RUNTRAILER_OBT=" << (UInt_t)glrun->GetRUNTRAILER_OBT() << "; ";  //          << " RUNTRAILER_OBT=" << (UInt_t)glrun->GetRUNTRAILER_OBT() << "; ";
3407          //  //      //
3408          if ( IsDebug() ) printf(" Look for the ID of the inserted run: query is \n %s \n",oss.str().c_str());  //      if ( IsDebug() ) printf(" Look for the ID of the inserted run: query is \n %s \n",oss.str().c_str());
3409          result2 = conn->Query(oss.str().c_str());  //      result2 = conn->Query(oss.str().c_str());
3410          //  //      //
3411          if ( !result2 ) throw -4;  //      if ( !result2 ) throw -4;
3412          //  //      //
3413          row2 = result2->Next();  //      row2 = result2->Next();
3414          //  //      //
3415          if ( !row2 ) throw -25;  //      if ( !row2 ) throw -25;
3416          //  //      //
3417          oss.str("");  //      oss.str("");
3418          oss << " UPDATE GL_RUN SET ID_RUN_FRAG = " << row2->GetField(0) << " WHERE ID = " << row2->GetField(0);  //      oss << " UPDATE GL_RUN SET ID_RUN_FRAG = " << row2->GetField(0) << " WHERE ID = " << row2->GetField(0);
3419          if ( IsDebug() ) printf(" Update the ID_RUN_FRAG of the inserted run: query is \n %s \n",oss.str().c_str());  //      if ( IsDebug() ) printf(" Update the ID_RUN_FRAG of the inserted run: query is \n %s \n",oss.str().c_str());
3420          result2 = conn->Query(oss.str().c_str());  //      result2 = conn->Query(oss.str().c_str());
3421          //  //      //
3422          if ( !result2 ) throw -4;  //      if ( !result2 ) throw -4;
3423          //          //
3424          moved++;          moved++;
3425          //          //
# Line 3226  Int_t PamelaDBOperations::CleanGL_RUN_FR Line 3429  Int_t PamelaDBOperations::CleanGL_RUN_FR
3429        if ( IsDebug() ) printf(" Delete run %s from the GL_RUN_FRAGMENTS table \n",row->GetField(0));              if ( IsDebug() ) printf(" Delete run %s from the GL_RUN_FRAGMENTS table \n",row->GetField(0));      
3430        //        //
3431        //        //
3432        oss.str("");        glrun->DeleteRun(conn,(UInt_t)atoll(row->GetField(0)),"GL_RUN_FRAGMENTS");
3433        oss << " DELETE from GL_RUN_FRAGMENTS where ID = " << row->GetField(0);  //      oss.str("");
3434        if ( IsDebug() ) printf(" Clean the GL_RUN_FRAGMENTS table: query is \n %s \n",oss.str().c_str());  //       oss << " DELETE from GL_RUN_FRAGMENTS where ID = " << row->GetField(0);
3435        result2 = conn->Query(oss.str().c_str());  //       if ( IsDebug() ) printf(" Clean the GL_RUN_FRAGMENTS table: query is \n %s \n",oss.str().c_str());
3436        //  //       result2 = conn->Query(oss.str().c_str());
3437        if ( !result2 ) throw -4;  //      //
3438        //  //      if ( !result2 ) throw -4;
3439    //      //
3440          row = result->Next();
3441      };      };
3442    };    };
3443    if ( IsDebug() ) printf(" Moved %u runs\n",moved);    if ( IsDebug() ) printf(" Moved %u runs\n",moved);
# Line 3247  Int_t PamelaDBOperations::ValidateRuns() Line 3452  Int_t PamelaDBOperations::ValidateRuns()
3452    TSQLResult *result = 0;    TSQLResult *result = 0;
3453    TSQLRow    *row    = 0;    TSQLRow    *row    = 0;
3454    //    //
   UInt_t timelim = 0;  
   TDatime *time = new TDatime();  
   //  
3455    stringstream oss;    stringstream oss;
3456    oss.str("");    oss.str("");
3457    //    //
   //  
   //  
   if ( olderthan < 0 ){  
     if ( IsDebug() ) printf(" Do not validate runs \n");  
     return(1);  
   };  
   //  
   // timelim = now - olderthan  
   //  
   time->Set();  
   timelim =  (UInt_t)time->Convert() - olderthan;  
   time->Set(timelim,false);  
   
   printf("Validate runs older than %s \n",time->AsSQLString());  
   
3458    // =======================================================    // =======================================================
3459    // validate runs by checking missing calibrations    // validate runs by checking missing calibrations
3460    // =======================================================    // =======================================================
# Line 3277  Int_t PamelaDBOperations::ValidateRuns() Line 3464  Int_t PamelaDBOperations::ValidateRuns()
3464    // 1) get the OBT of the last run inserted after clean-time limit    // 1) get the OBT of the last run inserted after clean-time limit
3465    // --------------------------------------------------------------    // --------------------------------------------------------------
3466    oss.str("");    oss.str("");
3467    oss << " SELECT * FROM GL_RUN  WHERE INSERT_TIME <= '" << time->AsSQLString()    oss << " SELECT * FROM GL_RUN  WHERE INSERT_TIME <= '" << clean_time->AsSQLString()
3468        << "' ORDER BY INSERT_TIME DESC LIMIT 1;";            << "' ORDER BY RUNHEADER_TIME DESC LIMIT 1;";
3469    printf(" Get start validation-time: query is \n %s \n",oss.str().c_str());    if ( IsDebug() ) printf(" Get start validation-time: query is \n %s \n",oss.str().c_str());
3470    result = conn->Query(oss.str().c_str());    result = conn->Query(oss.str().c_str());
3471    if ( !result ) throw -4;    if ( !result ) throw -4;
3472    if ( !result->GetRowCount() ) {    if ( !result->GetRowCount() ) {
# Line 3288  Int_t PamelaDBOperations::ValidateRuns() Line 3475  Int_t PamelaDBOperations::ValidateRuns()
3475    }else{    }else{
3476          row = result->Next();          row = result->Next();
3477          t_start = (UInt_t)atoll(row->GetField(4));          t_start = (UInt_t)atoll(row->GetField(4));
         printf("t_start %i\n",t_start);  
3478    };      };  
3479    // --------------------------------------------------------------    // --------------------------------------------------------------
3480    // 2) get the OBT of the last validated run    // 2) get the OBT of the last validated run
# Line 3296  Int_t PamelaDBOperations::ValidateRuns() Line 3482  Int_t PamelaDBOperations::ValidateRuns()
3482    oss.str("");    oss.str("");
3483    oss << " SELECT * FROM GL_RUN  WHERE VALIDATION=1 AND RUNHEADER_TIME<="<< t_start    oss << " SELECT * FROM GL_RUN  WHERE VALIDATION=1 AND RUNHEADER_TIME<="<< t_start
3484        <<" ORDER BY RUNHEADER_TIME DESC LIMIT 1;";        <<" ORDER BY RUNHEADER_TIME DESC LIMIT 1;";
3485    printf(" Get stop validation-time: query is \n %s \n",oss.str().c_str());    if ( IsDebug() ) printf(" Get stop validation-time: query is \n %s \n",oss.str().c_str());
3486    result = conn->Query(oss.str().c_str());    result = conn->Query(oss.str().c_str());
3487    if ( !result ) throw -4;    if ( !result ) throw -4;
3488    if ( result->GetRowCount() ){    if ( result->GetRowCount() ){
3489            row = result->Next();            row = result->Next();
3490            t_stop = (UInt_t)atoll(row->GetField(4));            t_stop = (UInt_t)atoll(row->GetField(4));
3491    };    };
3492    printf("t_stop %i\n",t_stop);    if ( IsDebug() ) printf("Validation interval: from time %i - to time %i \n\n",t_stop,t_start);
3493    // --------------------------------------------------------------    // --------------------------------------------------------------
3494    // now retrieves runs to be validated    // now retrieves runs to be validated
3495    // --------------------------------------------------------------    // --------------------------------------------------------------
# Line 3312  Int_t PamelaDBOperations::ValidateRuns() Line 3498  Int_t PamelaDBOperations::ValidateRuns()
3498    oss << " AND RUNHEADER_TIME >="<< t_stop;    oss << " AND RUNHEADER_TIME >="<< t_stop;
3499    oss << " ORDER BY RUNHEADER_TIME DESC;";    oss << " ORDER BY RUNHEADER_TIME DESC;";
3500  //  if ( IsDebug() )  //  if ( IsDebug() )
3501    printf(" Check runs for validation: query is \n %s \n",oss.str().c_str());    if ( IsDebug() )printf(" Check runs for validation: query is \n %s \n",oss.str().c_str());
3502    result = conn->Query(oss.str().c_str());    result = conn->Query(oss.str().c_str());
3503    if ( !result ) throw -4;    if ( !result ) throw -4;
3504    if ( !result->GetRowCount() ) printf(" No runs to validate \n");    if ( !result->GetRowCount() ) printf(" No runs to validate \n");
3505    printf("------------------------------------------------------------------------------- \n");  //  printf("------------------------------------------------------------------------------- \n");
3506        
3507    Int_t nrow = 0;    Int_t nrow = 0;
3508    GL_RUN* this_run = new GL_RUN();    GL_RUN* this_run = new GL_RUN();
3509    GL_RUN* next_run = new GL_RUN();    GL_RUN* next_run = new GL_RUN();
3510    Int_t   nseq_max = 100;    Int_t   nseq_max = 1000;
3511  //  UInt_t* sequence = new UInt_t[100];  //  UInt_t* sequence = new UInt_t[100];
3512    vector<UInt_t> sequence(nseq_max);    vector<UInt_t> sequence(nseq_max);
3513    Int_t   nseq = 0;    Int_t   nseq = 0;
# Line 3344  Int_t PamelaDBOperations::ValidateRuns() Line 3530  Int_t PamelaDBOperations::ValidateRuns()
3530            //get run info            //get run info
3531            //------------            //------------
3532            this_run->Set_GL_RUN(row);            this_run->Set_GL_RUN(row);
3533                                
           printf(" RUN ID %i --- TRK_CALIB_USED %i --- RM_ACQ_AFTER_CALIB %i --- TIME %i %i \n",this_run->ID,this_run->TRK_CALIB_USED,this_run->RM_ACQ_AFTER_CALIB,this_run->RUNHEADER_TIME, this_run->RUNTRAILER_TIME);  
             
3534            Bool_t this_BAD = false;            Bool_t this_BAD = false;
3535            if(this_run->GetTRK_CALIB_USED() == 1 || this_run->GetTRK_CALIB_USED() == 2) this_ONLINE = true;            if(this_run->GetTRK_CALIB_USED() == 1 || this_run->GetTRK_CALIB_USED() == 2) this_ONLINE = true;
3536            else if (this_run->GetTRK_CALIB_USED() == 104)                          this_ONLINE = false;            else if (this_run->GetTRK_CALIB_USED() == 104)                          this_ONLINE = false;
3537            else{            else{
3538                    printf("Missing or corrupted header!! \n");  //                printf("Missing or corrupted header!! \n");
3539                    this_ONLINE = false;                    this_ONLINE = false;
3540                    this_BAD = true;                    this_BAD = true;
3541            };            };
# Line 3375  Int_t PamelaDBOperations::ValidateRuns() Line 3559  Int_t PamelaDBOperations::ValidateRuns()
3559                                                        
3560                            if( interval >= 60 )CHECK = true;                     //more than 60 s => there might be a calibration                            if( interval >= 60 )CHECK = true;                     //more than 60 s => there might be a calibration
3561                                                        
 /*                        if( CHECK && !next_run->GetRM_ACQ_AFTER_CALIB() )  
                                   printf(" ValidateRuns ***WARNING*** : DT = %i but RM_ACQ_AFTER_CALIB = %i \n",(t2-t1),next_run->GetRM_ACQ_AFTER_CALIB());*/  
                                                     
                             
3562                            if( !CHECK && this_run->VALIDATION ){                            if( !CHECK && this_run->VALIDATION ){
3563                                    for (Int_t irun = 0; irun < nseq; irun++)assignVALIDATION(sequence[irun],true);                                    for (Int_t irun = 0; irun < nseq; irun++)assignVALIDATION(sequence[irun],true);
3564                                    nseq=0;                                    nseq=0;
# Line 3387  Int_t PamelaDBOperations::ValidateRuns() Line 3567  Int_t PamelaDBOperations::ValidateRuns()
3567                    }else if( !this_ONLINE && next_ONLINE) {              // this: DEFAULT + next:ON-LINE                    }else if( !this_ONLINE && next_ONLINE) {              // this: DEFAULT + next:ON-LINE
3568                                                        
3569                            CHECK = true;                            CHECK = true;
 //                        if( interval < 60 ) printf(" ValidateRuns ***WARNING*** : kkkkkk DT = %i \n",interval);  
3570    
3571                    }else if( !next_ONLINE ){                                             // this:ANY + next:DEFAULT                    }else if( !next_ONLINE ){                                             // this:ANY + next:DEFAULT
3572                                                        
# Line 3401  Int_t PamelaDBOperations::ValidateRuns() Line 3580  Int_t PamelaDBOperations::ValidateRuns()
3580            //----------------------------            //----------------------------
3581            if( CHECK ){            if( CHECK ){
3582                    // check if calibration exists                    // check if calibration exists
3583                    printf("DT %i ===> CHECK Missing calibration\n",interval);                    if ( IsDebug() )printf("DT %i ===> CHECK Missing calibration\n",interval);
3584                    Bool_t MISSING = MissingTRK_CALIB(t1,t2);                    Bool_t MISSING = MissingTRK_CALIB(t1,t2);
3585                    for (Int_t irun = 0; irun < nseq; irun++)assignVALIDATION(sequence[irun],!MISSING);                    for (Int_t irun = 0; irun < nseq; irun++)assignVALIDATION(sequence[irun],!MISSING);
3586                    nseq=0;                    nseq=0;
3587            } else printf("DT %i\n",interval);            };
3588            //--------------            //--------------
3589            //store run info            //store run info
3590            //--------------            //--------------
# Line 3418  Int_t PamelaDBOperations::ValidateRuns() Line 3597  Int_t PamelaDBOperations::ValidateRuns()
3597                    }else printf("ValidateRuns ***WARNING*** : run sequence exceed assumed size (%i) \n",nseq_max);                    }else printf("ValidateRuns ***WARNING*** : run sequence exceed assumed size (%i) \n",nseq_max);
3598            };            };
3599                        
3600              if ( IsDebug() ) printf("%i Run %i \n",nrow,this_run->ID);
3601            nrow++;            nrow++;
3602                        
3603    };    };
# Line 3446  Bool_t PamelaDBOperations::MissingTRK_CA Line 3626  Bool_t PamelaDBOperations::MissingTRK_CA
3626          // which should be equal to the time between ascending-nodes.          // which should be equal to the time between ascending-nodes.
3627          //==============================================================          //==============================================================
3628          if ( t2 - trkcalib->FROM_TIME > 5700) {          if ( t2 - trkcalib->FROM_TIME > 5700) {
3629                  printf("Long time to previous calib %i :-( \n",t2 - trkcalib->FROM_TIME);                  if ( IsDebug() )printf("Long time between calib and run start %i :-( ==> there might be a missing calib \n",t2 - trkcalib->FROM_TIME);
3630          //==============================================================          //==============================================================
3631          // there might be a missing calibration, due to:          // there might be a missing calibration, due to:
3632          // - MM full          // - MM full
# Line 3467  Bool_t PamelaDBOperations::MissingTRK_CA Line 3647  Bool_t PamelaDBOperations::MissingTRK_CA
3647          // it is enough to say that there are no missing calibrations          // it is enough to say that there are no missing calibrations
3648          //==============================================================          //==============================================================
3649          // the long time interval bewteen runs might be due to download          // the long time interval bewteen runs might be due to download
3650          printf("Short time to previous calib %i :-) \n",t2 - trkcalib->FROM_TIME);          if ( IsDebug() )printf("Short time between calib and run start %i :-) ==> OK! \n",t2 - trkcalib->FROM_TIME);
3651          return(false);          return(false);
3652                    
3653  };  };
# Line 3480  Int_t PamelaDBOperations::assignVALIDATI Line 3660  Int_t PamelaDBOperations::assignVALIDATI
3660          TSQLResult *result = 0;          TSQLResult *result = 0;
3661          stringstream oss;          stringstream oss;
3662          oss.str("");          oss.str("");
3663          oss << " UPDATE GL_RUN SET VALIDATION="<< (UInt_t)validation <<" WHERE ID= " << idrun << "';";          oss << " UPDATE GL_RUN SET VALIDATION="<< (UInt_t)validation <<" WHERE ID= " << idrun << ";";
3664          //          //
3665  //      if ( IsDebug() )  //      if ( IsDebug() )
3666          printf(" Set VALIDATION = %i for run %i \n",validation,idrun);  //      printf(" Set VALIDATION = %i for run %i \n",validation,idrun);
3667  //      printf(" Set VALIDATION = %i for run %i : query is \n %s \n",validation,idrun,oss.str().c_str());          if ( IsDebug() )printf(" Query: %s \n",oss.str().c_str());
3668  //      result = conn->Query(oss.str().c_str());          result = conn->Query(oss.str().c_str());
3669  //      if ( !result ) throw -4;          if ( !result ) throw -4;
3670          return(0);          return(0);
3671  }  }
3672    
3673    
3674    
3675    // Insert TLEs from file tlefilename in the table GL_TLE in the db
3676    // opened by conn, sorting them by date from older to newer, if each
3677    // TLE has not been alread inserted.
3678    Int_t PamelaDBOperations::populateTLE()//(TSQLServer *conn, char *tleFile)
3679    {
3680      fstream tlefile(tlefilename, ios::in);
3681    
3682      if ( !tlefile ) throw -7;
3683    
3684      vector<cTle*> ctles;
3685      vector<cTle*>::iterator iter;
3686      int present = 0;
3687    
3688      // Get three lines from tlefile, create a cTle object and put it
3689      // into ctles
3690      while(1) {
3691        cTle *tlef;
3692        string str1, str2, str3;
3693    
3694        getline(tlefile, str1);
3695        if(tlefile.eof()) break;
3696    
3697        getline(tlefile, str2);
3698        if(tlefile.eof()) break;
3699    
3700        getline(tlefile, str3);
3701        if(tlefile.eof()) break;
3702    
3703        // We now have three good lines for a cTle.
3704        tlef = new cTle(str1, str2, str3);
3705        ctles.push_back(tlef);
3706      }
3707    
3708      tlefile.close();
3709    
3710      // Sort by date
3711      sort(ctles.begin(), ctles.end(), compTLE);
3712    
3713      // Now we insert each TLE into the db
3714      for(iter = ctles.begin(); iter != ctles.end(); iter++) {
3715        cTle *tle = *iter;
3716    
3717        // Do nothing if it's already present in the db.  Just increase
3718        // the counter present.
3719        if (! isTlePresent(tle))
3720          {
3721            int status = insertTle(tle);
3722    
3723            // Insert query failed.  Return 1.
3724            if(status == EXIT_FAILURE) {
3725              
3726              if( IsDebug() ) {
3727                cerr << "Error: inserting TLE:" << endl
3728                     << tle->getName() << endl
3729                     << tle->getLine1() << endl
3730                     << tle->getLine2() << endl;
3731              }
3732    
3733              throw -4;
3734              return 1;
3735            }
3736    
3737          }
3738        else
3739          present++;
3740    
3741      }
3742    
3743      int inserted = ctles.size() - present;  // Number of inserted TLE.
3744      if ( IsDebug() )
3745        cout << "\nProcessed TLEs ranging from " << getTleDatetime(ctles[0]) << " to " << getTleDatetime(ctles[ctles.size()-1]) << "." << endl
3746             << inserted << " newly inserted TLEs out of " << ctles.size() << " processed." << endl;
3747    
3748      ctles.clear();
3749    
3750    
3751      // Return 2 if no new TLE has been inserted.  0 otherwise.
3752      if(! inserted ) return 2;
3753      return 0;
3754    }
3755    
3756    
3757    // Insert tle in the table GL_TLE using the connection conn.
3758    int PamelaDBOperations::insertTle(cTle *tle)
3759    {
3760      stringstream oss;
3761      TSQLResult *result = 0;
3762    
3763      oss.str("");
3764      oss << " INSERT INTO GL_TLE (TLE1, TLE2, TLE3, FROM_TIME)"
3765          << " VALUES ( '"
3766          << tle->getName() << "', '"
3767          << tle->getLine1() << "', '"
3768          << tle->getLine2() << "', '"
3769          << getTleDatetime(tle) << "')";
3770    
3771      //  cout << oss.str().c_str() << endl;
3772      result = conn->Query(oss.str().c_str());
3773      if (result == NULL)
3774        return EXIT_FAILURE;
3775    
3776      return EXIT_SUCCESS;
3777    }
3778    
3779    
3780    // Return whether tle is already in the db connected by conn.
3781    bool PamelaDBOperations::isTlePresent(cTle *tle)
3782    {
3783      stringstream oss;
3784      TSQLResult *result = 0;
3785    
3786      oss.str("");
3787      oss << "SELECT * FROM GL_TLE WHERE FROM_TIME = '"
3788          << getTleDatetime(tle) << "'";
3789    
3790      result = conn->Query(oss.str().c_str());
3791      if (result == NULL) throw -4;
3792    
3793      if (result->GetRowCount())
3794        return true;
3795      else
3796        return false;
3797    }
3798    
3799    
3800    // Return whether the first TLE is dated early than the second
3801    bool compTLE (cTle *tle1, cTle *tle2)
3802    {
3803      return getTleJulian(tle1) < getTleJulian(tle2);
3804    }
3805    
3806    
3807    // Return the date of the tle using the format (year-2000)*1e3 +
3808    // julian day.  e.g. 6365 is the 31th Dec 2006.
3809    // It does *not* return a cJulian date.
3810    float getTleJulian(cTle *tle) {
3811      return tle->getField(cTle::FLD_EPOCHYEAR)*1e3 + tle->getField(cTle::FLD_EPOCHDAY);
3812    }
3813    
3814    
3815    // Return a string like YYYY-MM-DD hh:mm:ss, usable for mysql datetime
3816    // format.
3817    string getTleDatetime(cTle *tle)
3818    {
3819      int year, mon, day, hh, mm, ss;
3820      double dom; // day of month (is double!)
3821      stringstream date; // date in datetime format
3822    
3823      // create a cJulian from the date in tle
3824      cJulian jdate = cJulian( 2000 + (int) tle->getField(cTle::FLD_EPOCHYEAR), tle->getField(cTle::FLD_EPOCHDAY));
3825    
3826      // get year, month, day of month
3827      jdate.getComponent(&year, &mon, &dom);
3828    
3829      // build a datetime YYYY-MM-DD hh:mm:ss
3830      date.str("");
3831      day = (int) floor(dom);
3832      hh = (int) floor( (dom - day) * 24);
3833      mm = (int) floor( ((dom - day) * 24 - hh) * 60);
3834      ss = (int) floor( ((((dom - day) * 24 - hh) * 60 - mm) * 60));
3835      //  ms = (int) floor( (((((dom - day) * 24 - hh) * 60 - mm) * 60) - ss) * 1000);
3836    
3837      date << year << "-" << mon << "-" << day << " " << hh << ":" << mm << ":" << ss;
3838    
3839      return date.str();
3840    }

Legend:
Removed from v.1.5  
changed lines
  Added in v.1.15

  ViewVC Help
Powered by ViewVC 1.1.23