| 31 | 
 #include <varDump/VarDumpRecord.h> | 
 #include <varDump/VarDumpRecord.h> | 
| 32 | 
 #include <physics/S4/S4Event.h> | 
 #include <physics/S4/S4Event.h> | 
| 33 | 
 // | 
 // | 
| 34 | 
  | 
 #include <cTle.h> | 
| 35 | 
  | 
 #include <cEci.h> | 
| 36 | 
  | 
 #include <cJulian.h> | 
| 37 | 
  | 
  | 
| 38 | 
 #include <PamelaDBOperations.h> | 
 #include <PamelaDBOperations.h> | 
| 39 | 
 // | 
 // | 
| 40 | 
 using namespace std; | 
 using namespace std; | 
| 41 | 
 using namespace pamela; | 
 using namespace pamela; | 
| 42 | 
  | 
  | 
| 43 | 
  | 
 // Some function to work with cTle stuff. | 
| 44 | 
  | 
 bool compTLE(cTle* tle1, cTle *tle2); | 
| 45 | 
  | 
 float getTleJulian(cTle *); | 
| 46 | 
  | 
 string getTleDatetime(cTle*); | 
| 47 | 
  | 
  | 
| 48 | 
 /** | 
 /** | 
| 49 | 
  * Constructor. | 
  * Constructor. | 
| 50 | 
  * @param host         hostname for the SQL connection. | 
  * @param host         hostname for the SQL connection. | 
| 56 | 
  * @param obt0         file obt0. | 
  * @param obt0         file obt0. | 
| 57 | 
  * @param tsync        file timesync. | 
  * @param tsync        file timesync. | 
| 58 | 
  * @param debug        debug flag. | 
  * @param debug        debug flag. | 
| 59 | 
  | 
  * @param tlefilename  ascii file with TLE 3 line elements. | 
| 60 | 
  */ | 
  */ | 
| 61 | 
 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){ | 
| 62 | 
   // | 
   // | 
| 63 | 
   // | 
   // | 
| 64 | 
   SetConnection(host,user,password); | 
   SetConnection(host,user,password); | 
| 72 | 
   SetTsync(tsync); | 
   SetTsync(tsync); | 
| 73 | 
   SetObt0(obt0); | 
   SetObt0(obt0); | 
| 74 | 
   // | 
   // | 
| 75 | 
  | 
   SetTLEPath(tlefilename); | 
| 76 | 
  | 
   // | 
| 77 | 
   // | 
   // | 
| 78 | 
   INSERT_RAW =!filerawname.IsNull(); | 
   INSERT_RAW =!filerawname.IsNull(); | 
| 79 | 
   if(INSERT_RAW)SetRawName(filerawname); | 
   if(INSERT_RAW)SetRawName(filerawname); | 
| 80 | 
   // | 
   // | 
| 81 | 
   INSERT_ROOT = !filerootname.IsNull(); | 
   INSERT_ROOT = !filerootname.IsNull(); | 
| 82 | 
   if( INSERT_ROOT ){ | 
   if( INSERT_ROOT ){ | 
| 83 | 
  | 
     this->SetRootName(filerootname); | 
| 84 | 
  | 
     this->SetOrbitNo(); | 
| 85 | 
     file = TFile::Open(this->GetRootName().Data()); | 
     file = TFile::Open(this->GetRootName().Data()); | 
 | 
     //    if ( !file ) INSERT_ROOT = false; | 
  | 
| 86 | 
   }; | 
   }; | 
 | 
   //  this->OpenFile(); | 
  | 
| 87 | 
   // | 
   // | 
| 88 | 
   this->SetID_RAW(0); | 
   this->SetID_RAW(0); | 
| 89 | 
   this->SetID_ROOT(0); | 
   this->SetID_ROOT(0); | 
| 127 | 
  * @param password     password for the SQL connection. | 
  * @param password     password for the SQL connection. | 
| 128 | 
  */ | 
  */ | 
| 129 | 
 void PamelaDBOperations::SetConnection(TString host, TString user, TString password){ | 
 void PamelaDBOperations::SetConnection(TString host, TString user, TString password){ | 
| 130 | 
  | 
   if ( IsDebug() ) printf(" Connecting using host = %s user = %s password = %s \n",host.Data(),user.Data(),password.Data()); | 
| 131 | 
   conn = TSQLServer::Connect(host.Data(),user.Data(),password.Data()); | 
   conn = TSQLServer::Connect(host.Data(),user.Data(),password.Data()); | 
| 132 | 
 }; | 
 }; | 
| 133 | 
  | 
  | 
| 196 | 
 }; | 
 }; | 
| 197 | 
  | 
  | 
| 198 | 
 /** | 
 /** | 
| 199 | 
  | 
  * Store the downlink orbit number from filename. | 
| 200 | 
  | 
  */ | 
| 201 | 
  | 
 void PamelaDBOperations::SetOrbitNo(){ | 
| 202 | 
  | 
   dworbit = 0; | 
| 203 | 
  | 
   TString name = this->GetRootFile(); | 
| 204 | 
  | 
   Int_t nlength = name.Length(); | 
| 205 | 
  | 
   if ( nlength < 5 ) return; | 
| 206 | 
  | 
   TString dwo = 0; | 
| 207 | 
  | 
   for (Int_t i = 0; i<5; i++){ | 
| 208 | 
  | 
     dwo.Append(name[i],1); | 
| 209 | 
  | 
   }; | 
| 210 | 
  | 
   if ( dwo.IsDigit() ){ | 
| 211 | 
  | 
     dworbit = (UInt_t)dwo.Atoi(); | 
| 212 | 
  | 
   } else { | 
| 213 | 
  | 
     dwo=""; | 
| 214 | 
  | 
     for (Int_t i = 8; i<13; i++){ | 
| 215 | 
  | 
       dwo.Append(name[i],1); | 
| 216 | 
  | 
     };      | 
| 217 | 
  | 
     if ( dwo.IsDigit() ) dworbit = (UInt_t)dwo.Atoi(); | 
| 218 | 
  | 
   }; | 
| 219 | 
  | 
   if ( IsDebug() ) printf(" Downlink orbit is %i (dwo = %s) \n",dworbit,dwo.Data()); | 
| 220 | 
  | 
   return; | 
| 221 | 
  | 
 }; | 
| 222 | 
  | 
  | 
| 223 | 
  | 
  | 
| 224 | 
  | 
  | 
| 225 | 
  | 
 /** | 
| 226 | 
  * Store the NOBOOT flag. | 
  * Store the NOBOOT flag. | 
| 227 | 
  * @param noboot    true/false. | 
  * @param noboot    true/false. | 
| 228 | 
  */ | 
  */ | 
| 231 | 
 }; | 
 }; | 
| 232 | 
  | 
  | 
| 233 | 
 /** | 
 /** | 
| 234 | 
  | 
  * Store path to the TLE file. | 
| 235 | 
  | 
  */ | 
| 236 | 
  | 
 void PamelaDBOperations::SetTLEPath(TString str){ | 
| 237 | 
  | 
   tlefilename = str; | 
| 238 | 
  | 
 }; | 
| 239 | 
  | 
  | 
| 240 | 
  | 
 /** | 
| 241 | 
  * Store the olderthan variable | 
  * Store the olderthan variable | 
| 242 | 
  * @param olderthan | 
  * @param olderthan | 
| 243 | 
  */ | 
  */ | 
| 294 | 
   UInt_t jump = 50000; // was 5000 | 
   UInt_t jump = 50000; // was 5000 | 
| 295 | 
   EventCounter *code=0; | 
   EventCounter *code=0; | 
| 296 | 
   // | 
   // | 
| 297 | 
  | 
   UInt_t deltapkt = 5000; | 
| 298 | 
  | 
   ULong64_t deltaobt = 50000; | 
| 299 | 
  | 
   // | 
| 300 | 
   //   pcksList packetsNames; | 
   //   pcksList packetsNames; | 
| 301 | 
   //   pcksList::iterator Iter; | 
   //   pcksList::iterator Iter; | 
| 302 | 
   //   getPacketsNames(packetsNames); | 
   //   getPacketsNames(packetsNames); | 
| 343 | 
   // | 
   // | 
| 344 | 
   if ( nevent < 2 ) return(4); | 
   if ( nevent < 2 ) return(4); | 
| 345 | 
   // | 
   // | 
| 346 | 
   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) ){ | 
| 347 | 
  | 
     // | 
| 348 | 
     // go back | 
     // go back | 
| 349 | 
     zomp = nevent - 2; | 
     zomp = nevent - 2; | 
| 350 | 
     // | 
     // | 
| 626 | 
   return(0); | 
   return(0); | 
| 627 | 
 } | 
 } | 
| 628 | 
  | 
  | 
| 629 | 
  | 
 /** | 
| 630 | 
  | 
  * | 
| 631 | 
  | 
  * Trick to have unique RUN ID numbers even when runs are deleted and mysql deamon restarted. | 
| 632 | 
  | 
  * Entries in the _RUNID_GEN table are never deleted. | 
| 633 | 
  | 
  * | 
| 634 | 
  | 
  **/ | 
| 635 | 
  | 
 UInt_t PamelaDBOperations::AssignRunID(){ | 
| 636 | 
  | 
   // | 
| 637 | 
  | 
   TSQLResult *result = 0; | 
| 638 | 
  | 
   TSQLRow *row = 0; | 
| 639 | 
  | 
   UInt_t runid = 0; | 
| 640 | 
  | 
   // | 
| 641 | 
  | 
   stringstream   oss; | 
| 642 | 
  | 
   //   | 
| 643 | 
  | 
   oss.str(""); | 
| 644 | 
  | 
   oss << "INSERT INTO _RUNID_GEN VALUES (NULL);"; | 
| 645 | 
  | 
   result = conn->Query(oss.str().c_str()); | 
| 646 | 
  | 
   if ( !result ) throw -10; | 
| 647 | 
  | 
   oss.str(""); | 
| 648 | 
  | 
   oss << "SELECT ID FROM _RUNID_GEN ORDER BY ID DESC LIMIT 1;"; | 
| 649 | 
  | 
   result = conn->Query(oss.str().c_str()); | 
| 650 | 
  | 
   if ( !result ) throw -10; | 
| 651 | 
  | 
   // | 
| 652 | 
  | 
   row = result->Next(); | 
| 653 | 
  | 
   // | 
| 654 | 
  | 
   if ( !row ) throw -28; | 
| 655 | 
  | 
   // | 
| 656 | 
  | 
   runid = (UInt_t)atoll(row->GetField(0)); | 
| 657 | 
  | 
   // | 
| 658 | 
  | 
   return(runid); | 
| 659 | 
  | 
 }; | 
| 660 | 
  | 
  | 
| 661 | 
 // | 
 // | 
| 662 | 
 // GETTERS | 
 // GETTERS | 
| 663 | 
 // | 
 // | 
| 755 | 
   if( !conn ) throw -1; | 
   if( !conn ) throw -1; | 
| 756 | 
   bool connect = conn->IsConnected(); | 
   bool connect = conn->IsConnected(); | 
| 757 | 
   if( !connect ) throw -1; | 
   if( !connect ) throw -1; | 
| 758 | 
  | 
   if ( !dworbit ) throw -27; | 
| 759 | 
 }; | 
 }; | 
| 760 | 
  | 
  | 
| 761 | 
 /** | 
 /** | 
| 935 | 
   if ( this->GetID_RAW() == 0 )  throw -11; | 
   if ( this->GetID_RAW() == 0 )  throw -11; | 
| 936 | 
   // | 
   // | 
| 937 | 
   oss.str(""); | 
   oss.str(""); | 
| 938 | 
   oss << "SELECT OFFSET_DATE FROM GL_RESURS_OFFSET WHERE FROM_ID_RAW<= "  | 
   oss << "SELECT OFFSET_DATE FROM GL_RESURS_OFFSET WHERE SPECIAL_FILE='"  | 
| 939 | 
       << id << " AND TO_ID_RAW >= "  | 
       << this->GetRawFile().Data() << "';"; | 
 | 
       << id << ";"; | 
  | 
| 940 | 
   if ( IsDebug() ) printf(" %s \n",oss.str().c_str()); | 
   if ( IsDebug() ) printf(" %s \n",oss.str().c_str()); | 
| 941 | 
   result = conn->Query(oss.str().c_str()); | 
   result = conn->Query(oss.str().c_str()); | 
| 942 | 
   if ( !result ) throw -10; | 
   if ( !result ) throw -10; | 
| 943 | 
   row = result->Next(); | 
   row = result->Next(); | 
| 944 | 
   if ( !row ) throw -10; | 
   // | 
| 945 | 
  | 
   if ( !row ){ | 
| 946 | 
  | 
     oss.str(""); | 
| 947 | 
  | 
     oss << "SELECT OFFSET_DATE FROM GL_RESURS_OFFSET WHERE FROM_ORBIT< "  | 
| 948 | 
  | 
         << dworbit << " order by FROM_ORBIT desc limit 1;"; | 
| 949 | 
  | 
     if ( IsDebug() ) printf(" %s \n",oss.str().c_str()); | 
| 950 | 
  | 
     result = conn->Query(oss.str().c_str()); | 
| 951 | 
  | 
     if ( !result ) throw -10; | 
| 952 | 
  | 
     row = result->Next(); | 
| 953 | 
  | 
     if ( !row ) throw -10; | 
| 954 | 
  | 
   }; | 
| 955 | 
   // | 
   // | 
| 956 | 
   t0 = (UInt_t)TDatime(row->GetField(0)).Convert(); | 
   t0 = (UInt_t)TDatime(row->GetField(0)).Convert(); | 
| 957 | 
   /* | 
   /* | 
| 1025 | 
         // | 
         // | 
| 1026 | 
         TYPE = 55;//224; | 
         TYPE = 55;//224; | 
| 1027 | 
         // | 
         // | 
| 1028 | 
  | 
         if ( IsDebug() ) printf("mcmd tsync %i tsync %u obt %u \n",i,TSYNC,OBT); | 
| 1029 | 
  | 
         // | 
| 1030 | 
         if ( TSYNC && OBT ){ | 
         if ( TSYNC && OBT ){ | 
| 1031 | 
           existsts = true; | 
           existsts = true; | 
| 1032 | 
           goto eout; | 
           goto eout; | 
| 1049 | 
     // | 
     // | 
| 1050 | 
     rt->SetBranchAddress("RunTrailer", &runt); | 
     rt->SetBranchAddress("RunTrailer", &runt); | 
| 1051 | 
     // | 
     // | 
| 1052 | 
     if ( rhev > 0 ){ | 
     Int_t nrhev = rh->GetEntries(); | 
| 1053 | 
       rh->GetEntry(0); | 
     Int_t nrtev = rt->GetEntries(); | 
| 1054 | 
       // | 
     if ( IsDebug() ) printf(" ou nevent %i rhev %i rtev %i \n",nevent,nrhev,nrtev); | 
| 1055 | 
       TSYNC = runh->LAST_TIME_SYNC_INFO; | 
     // | 
| 1056 | 
       OBT = runh->OBT_TIME_SYNC * 1000; | 
     if ( nrhev > 0 ){ | 
| 1057 | 
       // | 
       for (Int_t i=0; i<nrhev; i++){ | 
| 1058 | 
       TYPE = 20; | 
         // | 
| 1059 | 
       // | 
         rh->GetEntry(i); | 
| 1060 | 
       if ( TSYNC && OBT ){ | 
         // | 
| 1061 | 
         existsts = true; | 
         TSYNC = runh->LAST_TIME_SYNC_INFO; | 
| 1062 | 
         goto eout; | 
         OBT = runh->OBT_TIME_SYNC * 1000; | 
| 1063 | 
  | 
         // | 
| 1064 | 
  | 
         TYPE = 20; | 
| 1065 | 
  | 
         // | 
| 1066 | 
  | 
         if ( IsDebug() ) printf("runheader %i tsync %u obt %u \n",i,TSYNC,OBT); | 
| 1067 | 
  | 
         // | 
| 1068 | 
  | 
         if ( TSYNC && OBT ){ | 
| 1069 | 
  | 
           existsts = true; | 
| 1070 | 
  | 
           goto eout; | 
| 1071 | 
  | 
         }; | 
| 1072 | 
       }; | 
       }; | 
| 1073 | 
       // | 
       // | 
| 1074 | 
     }; | 
     }; | 
| 1075 | 
     if ( rtev > 0 ){ | 
     if ( nrtev > 0 ){ | 
| 1076 | 
       // | 
       // | 
| 1077 | 
       if ( IsDebug() ) printf(" No runheader \n"); | 
       if ( IsDebug() ) printf(" No runheader \n"); | 
| 1078 | 
       signal = 6; | 
       signal = 6; | 
| 1079 | 
       // | 
       // | 
| 1080 | 
       rt->GetEntry(0); | 
       for (Int_t i=0; i<nrtev; i++){ | 
| 1081 | 
       // | 
         // | 
| 1082 | 
       TSYNC = runt->LAST_TYME_SYNC_INFO; | 
         rt->GetEntry(i); | 
| 1083 | 
       OBT = runt->OBT_TYME_SYNC * 1000; | 
         // | 
| 1084 | 
       // | 
         TSYNC = runt->LAST_TYME_SYNC_INFO; | 
| 1085 | 
       TYPE = 21; | 
         OBT = runt->OBT_TYME_SYNC * 1000; | 
| 1086 | 
       // | 
         // | 
| 1087 | 
       if ( TSYNC && OBT ){ | 
         TYPE = 21; | 
| 1088 | 
         existsts = true; | 
         // | 
| 1089 | 
         goto eout; | 
         if ( IsDebug() ) printf("runtrailer %i tsync %u obt %u \n",i,TSYNC,OBT); | 
| 1090 | 
  | 
         // | 
| 1091 | 
  | 
         if ( TSYNC && OBT ){ | 
| 1092 | 
  | 
           existsts = true; | 
| 1093 | 
  | 
           goto eout; | 
| 1094 | 
  | 
         }; | 
| 1095 | 
       }; | 
       }; | 
| 1096 | 
       // | 
       // | 
| 1097 | 
     } else { | 
     } else { | 
| 1631 | 
     // | 
     // | 
| 1632 | 
     this->FillClass(); | 
     this->FillClass(); | 
| 1633 | 
     // | 
     // | 
| 1634 | 
     if ( !IsRunAlreadyInserted() ) glrun->Fill_GL_RUN(conn); | 
     if ( !IsRunAlreadyInserted() ){ | 
| 1635 | 
  | 
       glrun->SetID(this->AssignRunID()); | 
| 1636 | 
  | 
       glrun->SetID_RUN_FRAG(0); | 
| 1637 | 
  | 
       glrun->Fill_GL_RUN(conn); | 
| 1638 | 
  | 
     }; | 
| 1639 | 
   } else { | 
   } else { | 
| 1640 | 
     //  | 
     //  | 
| 1641 | 
     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);  | 
| 1807 | 
       }; | 
       }; | 
| 1808 | 
       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); | 
| 1809 | 
       // | 
       // | 
 | 
       glrun1->SetID(0); | 
  | 
| 1810 | 
       glrun1->SetPKT_COUNTER(glrun->GetPKT_COUNTER()); | 
       glrun1->SetPKT_COUNTER(glrun->GetPKT_COUNTER()); | 
| 1811 | 
       glrun1->SetPKT_READY_COUNTER(glrun->GetPKT_READY_COUNTER()); | 
       glrun1->SetPKT_READY_COUNTER(glrun->GetPKT_READY_COUNTER()); | 
| 1812 | 
       glrun1->SetRUNTRAILER_TIME(glrun->GetRUNTRAILER_TIME()); | 
       glrun1->SetRUNTRAILER_TIME(glrun->GetRUNTRAILER_TIME()); | 
| 1834 | 
       // | 
       // | 
| 1835 | 
       if ( !IsRunAlreadyInserted() ){ | 
       if ( !IsRunAlreadyInserted() ){ | 
| 1836 | 
         // | 
         // | 
| 1837 | 
  | 
         glrun->SetID(this->AssignRunID()); | 
| 1838 | 
  | 
         glrun->SetID_RUN_FRAG(glrun1->GetID()); | 
| 1839 | 
         glrun->Fill_GL_RUN(conn); | 
         glrun->Fill_GL_RUN(conn); | 
| 1840 | 
         // | 
         // | 
| 1841 | 
         // get id number | 
         // get id number | 
| 1842 | 
         // | 
         // | 
| 1843 | 
         oss.str(""); | 
 //      oss.str(""); | 
| 1844 | 
         oss << " SELECT ID FROM GL_RUN WHERE BOOT_NUMBER="<<this->GetBOOTnumber()<<" AND " | 
 //      oss << " SELECT ID FROM GL_RUN WHERE BOOT_NUMBER="<<this->GetBOOTnumber()<<" AND " | 
| 1845 | 
             << " RUNHEADER_OBT="<<glrun->GetRUNHEADER_OBT()<<" AND " | 
 //          << " RUNHEADER_OBT="<<glrun->GetRUNHEADER_OBT()<<" AND " | 
| 1846 | 
             << " RUNTRAILER_OBT="<<glrun->GetRUNTRAILER_OBT()<<";"; | 
 //          << " RUNTRAILER_OBT="<<glrun->GetRUNTRAILER_OBT()<<";"; | 
| 1847 | 
         // | 
 //      // | 
| 1848 | 
         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()); | 
| 1849 | 
         // | 
 //      // | 
| 1850 | 
         result =  conn->Query(oss.str().c_str()); | 
 //      result =  conn->Query(oss.str().c_str()); | 
| 1851 | 
         if ( !result ) throw -4; | 
 //      if ( !result ) throw -4; | 
| 1852 | 
         row = result->Next(); | 
 //      row = result->Next(); | 
| 1853 | 
         // | 
 //      // | 
| 1854 | 
         UInt_t idrun0 = 0; | 
 //      UInt_t idrun0 = 0; | 
| 1855 | 
         if ( !row ){ | 
 //      if ( !row ){ | 
| 1856 | 
           throw -10; | 
 //        throw -10; | 
| 1857 | 
         } else { | 
 //      } else { | 
| 1858 | 
           idrun0 = (UInt_t)atoll(row->GetField(0)); | 
 //        idrun0 = (UInt_t)atoll(row->GetField(0)); | 
| 1859 | 
         }; | 
 //      }; | 
 | 
         // | 
  | 
 | 
         glrun1->SetID_RUN_FRAG(idrun0); | 
  | 
| 1860 | 
         // | 
         // | 
| 1861 | 
  | 
         //      glrun1->SetID_RUN_FRAG(idrun0); | 
| 1862 | 
  | 
         glrun1->SetID_RUN_FRAG(glrun->GetID()); | 
| 1863 | 
         glrun1->Fill_GL_RUN(conn); | 
         glrun1->Fill_GL_RUN(conn); | 
| 1864 | 
         // | 
         // | 
| 1865 | 
         oss.str(""); | 
 //      oss.str(""); | 
| 1866 | 
         oss << " SELECT ID FROM GL_RUN WHERE ID_RUN_FRAG="<<idrun0<<" ;"; | 
 //      oss << " SELECT ID FROM GL_RUN WHERE ID_RUN_FRAG="<<idrun0<<" ;"; | 
| 1867 | 
         // | 
 //      // | 
| 1868 | 
         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()); | 
| 1869 | 
         // | 
 //      // | 
| 1870 | 
         result =  conn->Query(oss.str().c_str()); | 
 //      result =  conn->Query(oss.str().c_str()); | 
| 1871 | 
         if ( !result ) throw -4; | 
 //      if ( !result ) throw -4; | 
| 1872 | 
         row = result->Next(); | 
 //      row = result->Next(); | 
| 1873 | 
         // | 
 //      // | 
| 1874 | 
         UInt_t idrun1 = 0; | 
 //      UInt_t idrun1 = 0; | 
| 1875 | 
         if ( !row ){ | 
 //      if ( !row ){ | 
| 1876 | 
           throw -10; | 
 //        throw -10; | 
| 1877 | 
         } else { | 
 //      } else { | 
| 1878 | 
           idrun1 = (UInt_t)atoll(row->GetField(0)); | 
 //        idrun1 = (UInt_t)atoll(row->GetField(0)); | 
| 1879 | 
         }; | 
 //      }; | 
| 1880 | 
         // | 
 //      // | 
| 1881 | 
         oss.str(""); | 
 //      oss.str(""); | 
| 1882 | 
         oss << " UPDATE GL_RUN SET ID_RUN_FRAG="<<idrun1<<" WHERE ID="<<idrun0<<" ;"; | 
 //      oss << " UPDATE GL_RUN SET ID_RUN_FRAG="<<idrun1<<" WHERE ID="<<idrun0<<" ;"; | 
| 1883 | 
         // | 
 //      // | 
| 1884 | 
         result =  conn->Query(oss.str().c_str()); | 
 //      result =  conn->Query(oss.str().c_str()); | 
| 1885 | 
         if ( !result ) throw -4; | 
 //      if ( !result ) throw -4; | 
| 1886 | 
         // | 
         // | 
| 1887 | 
       }; | 
       }; | 
| 1888 | 
       // | 
       // | 
| 2032 | 
       glrun->SetRUNTRAILER_OBT(glrun1->GetRUNTRAILER_OBT()); | 
       glrun->SetRUNTRAILER_OBT(glrun1->GetRUNTRAILER_OBT()); | 
| 2033 | 
       glrun->SetRUNTRAILER_PKT(glrun1->GetRUNTRAILER_PKT()); | 
       glrun->SetRUNTRAILER_PKT(glrun1->GetRUNTRAILER_PKT()); | 
| 2034 | 
       // | 
       // | 
 | 
       glrun1->SetID(0); | 
  | 
| 2035 | 
       glrun1->SetRUNHEADER_TIME(glrun->GetRUNHEADER_TIME()); | 
       glrun1->SetRUNHEADER_TIME(glrun->GetRUNHEADER_TIME()); | 
| 2036 | 
       glrun1->SetRUNHEADER_OBT(glrun->GetRUNHEADER_OBT()); | 
       glrun1->SetRUNHEADER_OBT(glrun->GetRUNHEADER_OBT()); | 
| 2037 | 
       glrun1->SetRUNHEADER_PKT(glrun->GetRUNHEADER_PKT()); | 
       glrun1->SetRUNHEADER_PKT(glrun->GetRUNHEADER_PKT()); | 
| 2051 | 
       // | 
       // | 
| 2052 | 
       if ( !IsRunAlreadyInserted() ){ | 
       if ( !IsRunAlreadyInserted() ){ | 
| 2053 | 
         // | 
         // | 
| 2054 | 
  | 
         glrun->SetID(this->AssignRunID()); | 
| 2055 | 
  | 
         // | 
| 2056 | 
  | 
         glrun->SetID_RUN_FRAG(glrun1->GetID()); | 
| 2057 | 
         glrun->Fill_GL_RUN(conn); | 
         glrun->Fill_GL_RUN(conn); | 
| 2058 | 
         // | 
         // | 
| 2059 | 
         // get id number | 
         // get id number | 
| 2060 | 
         // | 
         // | 
| 2061 | 
         oss.str(""); | 
 //      oss.str(""); | 
| 2062 | 
         oss << " SELECT ID FROM GL_RUN WHERE BOOT_NUMBER="<<this->GetBOOTnumber()<<" AND " | 
 //      oss << " SELECT ID FROM GL_RUN WHERE BOOT_NUMBER="<<this->GetBOOTnumber()<<" AND " | 
| 2063 | 
             << " RUNHEADER_OBT="<<glrun->GetRUNHEADER_OBT()<<" AND " | 
 //          << " RUNHEADER_OBT="<<glrun->GetRUNHEADER_OBT()<<" AND " | 
| 2064 | 
             << " RUNTRAILER_OBT="<<glrun->GetRUNTRAILER_OBT()<<";"; | 
 //          << " RUNTRAILER_OBT="<<glrun->GetRUNTRAILER_OBT()<<";"; | 
| 2065 | 
         // | 
 //      // | 
| 2066 | 
         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()); | 
| 2067 | 
         // | 
 //      // | 
| 2068 | 
         result =  conn->Query(oss.str().c_str()); | 
 //      result =  conn->Query(oss.str().c_str()); | 
| 2069 | 
         if ( !result ) throw -4; | 
 //      if ( !result ) throw -4; | 
| 2070 | 
         row = result->Next(); | 
 //      row = result->Next(); | 
| 2071 | 
         // | 
 //      // | 
| 2072 | 
         UInt_t idrun0 = 0; | 
 //      UInt_t idrun0 = 0; | 
| 2073 | 
         if ( !row ){ | 
 //      if ( !row ){ | 
| 2074 | 
           throw -10; | 
 //        throw -10; | 
| 2075 | 
         } else { | 
 //      } else { | 
| 2076 | 
           idrun0 = (UInt_t)atoll(row->GetField(0)); | 
 //        idrun0 = (UInt_t)atoll(row->GetField(0)); | 
| 2077 | 
         }; | 
 //      }; | 
| 2078 | 
         // | 
 //      // | 
| 2079 | 
         glrun1->SetID_RUN_FRAG(idrun0); | 
 //      glrun1->SetID_RUN_FRAG(idrun0); | 
| 2080 | 
         // | 
 // | 
| 2081 | 
  | 
         glrun1->SetID_RUN_FRAG(glrun->GetID()); | 
| 2082 | 
         glrun1->Fill_GL_RUN(conn); | 
         glrun1->Fill_GL_RUN(conn); | 
| 2083 | 
         // | 
         // | 
| 2084 | 
         oss.str(""); | 
 //      oss.str(""); | 
| 2085 | 
         oss << " SELECT ID FROM GL_RUN WHERE ID_RUN_FRAG="<<idrun0<<" ;"; | 
 //      oss << " SELECT ID FROM GL_RUN WHERE ID_RUN_FRAG="<<idrun0<<" ;"; | 
| 2086 | 
         // | 
 //      // | 
| 2087 | 
         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()); | 
| 2088 | 
         // | 
 //      // | 
| 2089 | 
         result =  conn->Query(oss.str().c_str()); | 
 //      result =  conn->Query(oss.str().c_str()); | 
| 2090 | 
         if ( !result ) throw -4; | 
 //      if ( !result ) throw -4; | 
| 2091 | 
         row = result->Next(); | 
 //      row = result->Next(); | 
| 2092 | 
         // | 
 //      // | 
| 2093 | 
         UInt_t idrun1 = 0; | 
 //      UInt_t idrun1 = 0; | 
| 2094 | 
         if ( !row ){ | 
 //      if ( !row ){ | 
| 2095 | 
           throw -10; | 
 //        throw -10; | 
| 2096 | 
         } else { | 
 //      } else { | 
| 2097 | 
           idrun1 = (UInt_t)atoll(row->GetField(0)); | 
 //        idrun1 = (UInt_t)atoll(row->GetField(0)); | 
| 2098 | 
         }; | 
 //      }; | 
| 2099 | 
         // | 
 //      // | 
| 2100 | 
         oss.str(""); | 
 //      oss.str(""); | 
| 2101 | 
         oss << " UPDATE GL_RUN SET ID_RUN_FRAG="<<idrun1<<" WHERE ID="<<idrun0<<" ;"; | 
 //      oss << " UPDATE GL_RUN SET ID_RUN_FRAG="<<idrun1<<" WHERE ID="<<idrun0<<" ;"; | 
| 2102 | 
         // | 
 //      // | 
| 2103 | 
         result =  conn->Query(oss.str().c_str()); | 
 //      result =  conn->Query(oss.str().c_str()); | 
| 2104 | 
         if ( !result ) throw -4; | 
 //      if ( !result ) throw -4; | 
| 2105 | 
         // | 
         // | 
| 2106 | 
       }; | 
       }; | 
| 2107 | 
       // | 
       // | 
| 2185 | 
         if ( IsDebug() ) printf(" The run is new \n"); | 
         if ( IsDebug() ) printf(" The run is new \n"); | 
| 2186 | 
         if ( IsDebug() ) printf(" -> fill the GL_RUNFRAGMENTS table \n"); | 
         if ( IsDebug() ) printf(" -> fill the GL_RUNFRAGMENTS table \n"); | 
| 2187 | 
         // | 
         // | 
| 2188 | 
  | 
         glrun->SetID(this->AssignRunID()); | 
| 2189 | 
  | 
         glrun->SetID_RUN_FRAG(0); | 
| 2190 | 
         glrun->Fill_GL_RUN_FRAGMENTS(conn); | 
         glrun->Fill_GL_RUN_FRAGMENTS(conn); | 
| 2191 | 
         // | 
         // | 
| 2192 | 
       } else { | 
       } else { | 
| 2219 | 
     // | 
     // | 
| 2220 | 
     this->FillClass(mishead,mistrail,firstev,lastev); | 
     this->FillClass(mishead,mistrail,firstev,lastev); | 
| 2221 | 
     // | 
     // | 
| 2222 | 
     if ( !IsRunAlreadyInserted() ) glrun->Fill_GL_RUN(conn);     | 
     if ( !IsRunAlreadyInserted() ){ | 
| 2223 | 
  | 
       glrun->SetID(this->AssignRunID()); | 
| 2224 | 
  | 
       glrun->SetID_RUN_FRAG(0); | 
| 2225 | 
  | 
       glrun->Fill_GL_RUN(conn);     | 
| 2226 | 
  | 
     }; | 
| 2227 | 
     // | 
     // | 
| 2228 | 
   }; | 
   }; | 
| 2229 | 
   // | 
   // | 
| 2390 | 
           //       | 
           //       | 
| 2391 | 
           this->SetCommonGLRUN(firstTime,lastTime); | 
           this->SetCommonGLRUN(firstTime,lastTime); | 
| 2392 | 
           // | 
           // | 
| 2393 | 
           if ( !IsRunAlreadyInserted() ) glrun->Fill_GL_RUN(conn);       | 
           if ( !IsRunAlreadyInserted() ){ | 
| 2394 | 
  | 
             glrun->SetID(this->AssignRunID()); | 
| 2395 | 
  | 
             glrun->SetID_RUN_FRAG(0); | 
| 2396 | 
  | 
             glrun->Fill_GL_RUN(conn);       | 
| 2397 | 
  | 
           }; | 
| 2398 | 
           // | 
           // | 
| 2399 | 
           firstevno = lastentry + 1; | 
           firstevno = lastentry + 1; | 
| 2400 | 
           // | 
           // | 
| 2470 | 
     if ( IsDebug() ) printf(" Checking but no events in the run! \n"); | 
     if ( IsDebug() ) printf(" Checking but no events in the run! \n"); | 
| 2471 | 
     // | 
     // | 
| 2472 | 
     this->FillClass(); | 
     this->FillClass(); | 
| 2473 | 
     if ( !IsRunAlreadyInserted() ) glrun->Fill_GL_RUN(conn);     | 
     if ( !IsRunAlreadyInserted() ){ | 
| 2474 | 
  | 
       glrun->SetID(this->AssignRunID()); | 
| 2475 | 
  | 
       glrun->SetID_RUN_FRAG(0); | 
| 2476 | 
  | 
       glrun->Fill_GL_RUN(conn);     | 
| 2477 | 
  | 
     }; | 
| 2478 | 
     // | 
     // | 
| 2479 | 
   } else { | 
   } else { | 
| 2480 | 
     // | 
     // | 
| 2502 | 
       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"); | 
| 2503 | 
       // | 
       // | 
| 2504 | 
       this->FillClass(); | 
       this->FillClass(); | 
| 2505 | 
       if ( !IsRunAlreadyInserted() ) glrun->Fill_GL_RUN(conn);          | 
       if ( !IsRunAlreadyInserted() ){ | 
| 2506 | 
  | 
         glrun->SetID(this->AssignRunID()); | 
| 2507 | 
  | 
         glrun->SetID_RUN_FRAG(0); | 
| 2508 | 
  | 
         glrun->Fill_GL_RUN(conn);          | 
| 2509 | 
  | 
       }; | 
| 2510 | 
       // | 
       // | 
| 2511 | 
     } else { | 
     } else { | 
| 2512 | 
       // | 
       // | 
| 2604 | 
           //       | 
           //       | 
| 2605 | 
           this->SetCommonGLRUN(firstTime,lastTime); | 
           this->SetCommonGLRUN(firstTime,lastTime); | 
| 2606 | 
           // | 
           // | 
| 2607 | 
           if ( !IsRunAlreadyInserted() ) glrun->Fill_GL_RUN(conn);       | 
           if ( !IsRunAlreadyInserted() ){ | 
| 2608 | 
  | 
             glrun->SetID(this->AssignRunID()); | 
| 2609 | 
  | 
             glrun->SetID_RUN_FRAG(0); | 
| 2610 | 
  | 
             glrun->Fill_GL_RUN(conn);       | 
| 2611 | 
  | 
           }; | 
| 2612 | 
           // | 
           // | 
| 2613 | 
           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... | 
| 2614 | 
             // | 
             // | 
| 2643 | 
             //     | 
             //     | 
| 2644 | 
             this->SetCommonGLRUN(firstTime,lastTime); | 
             this->SetCommonGLRUN(firstTime,lastTime); | 
| 2645 | 
             // | 
             // | 
| 2646 | 
             if ( !IsRunAlreadyInserted() ) glrun->Fill_GL_RUN(conn);       | 
             if ( !IsRunAlreadyInserted() ){ | 
| 2647 | 
  | 
               glrun->SetID(this->AssignRunID()); | 
| 2648 | 
  | 
               glrun->SetID_RUN_FRAG(0); | 
| 2649 | 
  | 
               glrun->Fill_GL_RUN(conn);       | 
| 2650 | 
  | 
             }; | 
| 2651 | 
           }; | 
           }; | 
| 2652 | 
           // | 
           // | 
| 2653 | 
           firstevno = lastentry + 1; | 
           firstevno = lastentry + 1; | 
| 3355 | 
     // | 
     // | 
| 3356 | 
     row = result->Next(); | 
     row = result->Next(); | 
| 3357 | 
     // | 
     // | 
| 3358 | 
     if ( row ){ | 
     while ( row ){ | 
| 3359 | 
       // | 
       // | 
| 3360 | 
       oss.str(""); | 
       oss.str(""); | 
| 3361 | 
       oss << " ID= "<< row->GetField(0); | 
       oss << " ID= "<< row->GetField(0); | 
| 3390 | 
         if ( IsDebug() ) printf(" The run is new \n"); | 
         if ( IsDebug() ) printf(" The run is new \n"); | 
| 3391 | 
         if ( IsDebug() ) printf(" -> fill the DB \n");       | 
         if ( IsDebug() ) printf(" -> fill the DB \n");       | 
| 3392 | 
         // | 
         // | 
| 3393 | 
         glrun->SetID(0); | 
         //      glrun->SetID(this->AssignRunID()); we use the old run number! | 
| 3394 | 
  | 
         glrun->SetID_RUN_FRAG(glrun->GetID()); | 
| 3395 | 
         glrun->Fill_GL_RUN(conn);    | 
         glrun->Fill_GL_RUN(conn);    | 
| 3396 | 
         // | 
         // | 
| 3397 | 
         oss.str(""); | 
 //      oss.str(""); | 
| 3398 | 
         oss << " SELECT ID FROM GL_RUN WHERE " | 
 //      oss << " SELECT ID FROM GL_RUN WHERE " | 
| 3399 | 
             << " BOOT_NUMBER=" << glrun->GetBOOT_NUMBER() << " AND " | 
 //          << " BOOT_NUMBER=" << glrun->GetBOOT_NUMBER() << " AND " | 
| 3400 | 
             << " RUNHEADER_PKT=" << (UInt_t)glrun->GetRUNHEADER_PKT() << " AND " | 
 //          << " RUNHEADER_PKT=" << (UInt_t)glrun->GetRUNHEADER_PKT() << " AND " | 
| 3401 | 
             << " RUNTRAILER_PKT=" << (UInt_t)glrun->GetRUNTRAILER_PKT() << " AND " | 
 //          << " RUNTRAILER_PKT=" << (UInt_t)glrun->GetRUNTRAILER_PKT() << " AND " | 
| 3402 | 
             << " RUNHEADER_OBT=" << (UInt_t)glrun->GetRUNHEADER_OBT() << " AND " | 
 //          << " RUNHEADER_OBT=" << (UInt_t)glrun->GetRUNHEADER_OBT() << " AND " | 
| 3403 | 
             << " RUNTRAILER_OBT=" << (UInt_t)glrun->GetRUNTRAILER_OBT() << "; "; | 
 //          << " RUNTRAILER_OBT=" << (UInt_t)glrun->GetRUNTRAILER_OBT() << "; "; | 
| 3404 | 
         // | 
 //      // | 
| 3405 | 
         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()); | 
| 3406 | 
         result2 = conn->Query(oss.str().c_str()); | 
 //      result2 = conn->Query(oss.str().c_str()); | 
| 3407 | 
         // | 
 //      // | 
| 3408 | 
         if ( !result2 ) throw -4; | 
 //      if ( !result2 ) throw -4; | 
| 3409 | 
         // | 
 //      // | 
| 3410 | 
         row2 = result2->Next(); | 
 //      row2 = result2->Next(); | 
| 3411 | 
         // | 
 //      // | 
| 3412 | 
         if ( !row2 ) throw -25; | 
 //      if ( !row2 ) throw -25; | 
| 3413 | 
         // | 
 //      // | 
| 3414 | 
         oss.str(""); | 
 //      oss.str(""); | 
| 3415 | 
         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); | 
| 3416 | 
         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()); | 
| 3417 | 
         result2 = conn->Query(oss.str().c_str()); | 
 //      result2 = conn->Query(oss.str().c_str()); | 
| 3418 | 
         // | 
 //      // | 
| 3419 | 
         if ( !result2 ) throw -4; | 
 //      if ( !result2 ) throw -4; | 
| 3420 | 
         // | 
         // | 
| 3421 | 
         moved++; | 
         moved++; | 
| 3422 | 
         // | 
         // | 
| 3433 | 
       // | 
       // | 
| 3434 | 
       if ( !result2 ) throw -4; | 
       if ( !result2 ) throw -4; | 
| 3435 | 
       // | 
       // | 
| 3436 | 
  | 
       row = result->Next(); | 
| 3437 | 
     }; | 
     }; | 
| 3438 | 
   }; | 
   }; | 
| 3439 | 
   if ( IsDebug() ) printf(" Moved %u runs\n",moved); | 
   if ( IsDebug() ) printf(" Moved %u runs\n",moved); | 
| 3668 | 
  | 
  | 
| 3669 | 
  | 
  | 
| 3670 | 
  | 
  | 
| 3671 | 
  | 
 // Insert TLEs from file tlefilename in the table GL_TLE in the db | 
| 3672 | 
  | 
 // opened by conn, sorting them by date from older to newer, if each | 
| 3673 | 
  | 
 // TLE has not been alread inserted. | 
| 3674 | 
  | 
 Int_t PamelaDBOperations::populateTLE()//(TSQLServer *conn, char *tleFile) | 
| 3675 | 
  | 
 { | 
| 3676 | 
  | 
   fstream tlefile(tlefilename, ios::in); | 
| 3677 | 
  | 
  | 
| 3678 | 
  | 
   if ( !tlefile ) throw -7; | 
| 3679 | 
  | 
  | 
| 3680 | 
  | 
   vector<cTle*> ctles; | 
| 3681 | 
  | 
   vector<cTle*>::iterator iter; | 
| 3682 | 
  | 
   int present = 0; | 
| 3683 | 
  | 
  | 
| 3684 | 
  | 
   // Get three lines from tlefile, create a cTle object and put it | 
| 3685 | 
  | 
   // into ctles | 
| 3686 | 
  | 
   while(1) { | 
| 3687 | 
  | 
     cTle *tlef; | 
| 3688 | 
  | 
     string str1, str2, str3; | 
| 3689 | 
  | 
  | 
| 3690 | 
  | 
     getline(tlefile, str1); | 
| 3691 | 
  | 
     if(tlefile.eof()) break;  | 
| 3692 | 
  | 
  | 
| 3693 | 
  | 
     getline(tlefile, str2); | 
| 3694 | 
  | 
     if(tlefile.eof()) break; | 
| 3695 | 
  | 
  | 
| 3696 | 
  | 
     getline(tlefile, str3); | 
| 3697 | 
  | 
     if(tlefile.eof()) break; | 
| 3698 | 
  | 
  | 
| 3699 | 
  | 
     // We now have three good lines for a cTle. | 
| 3700 | 
  | 
     tlef = new cTle(str1, str2, str3); | 
| 3701 | 
  | 
     ctles.push_back(tlef); | 
| 3702 | 
  | 
   } | 
| 3703 | 
  | 
  | 
| 3704 | 
  | 
   tlefile.close(); | 
| 3705 | 
  | 
  | 
| 3706 | 
  | 
   // Sort by date | 
| 3707 | 
  | 
   sort(ctles.begin(), ctles.end(), compTLE); | 
| 3708 | 
  | 
  | 
| 3709 | 
  | 
   // Now we insert each TLE into the db | 
| 3710 | 
  | 
   for(iter = ctles.begin(); iter != ctles.end(); iter++) { | 
| 3711 | 
  | 
     cTle *tle = *iter; | 
| 3712 | 
  | 
  | 
| 3713 | 
  | 
     // Do nothing if it's already present in the db.  Just increase | 
| 3714 | 
  | 
     // the counter present. | 
| 3715 | 
  | 
     if (! isTlePresent(tle)) | 
| 3716 | 
  | 
       { | 
| 3717 | 
  | 
         int status = insertTle(tle); | 
| 3718 | 
  | 
  | 
| 3719 | 
  | 
         // Insert query failed.  Return 1. | 
| 3720 | 
  | 
         if(status == EXIT_FAILURE) { | 
| 3721 | 
  | 
            | 
| 3722 | 
  | 
           if( IsDebug() ) { | 
| 3723 | 
  | 
             cerr << "Error: inserting TLE:" << endl | 
| 3724 | 
  | 
                  << tle->getName() << endl | 
| 3725 | 
  | 
                  << tle->getLine1() << endl | 
| 3726 | 
  | 
                  << tle->getLine2() << endl; | 
| 3727 | 
  | 
           } | 
| 3728 | 
  | 
  | 
| 3729 | 
  | 
           throw -4; | 
| 3730 | 
  | 
           return 1; | 
| 3731 | 
  | 
         } | 
| 3732 | 
  | 
  | 
| 3733 | 
  | 
       } | 
| 3734 | 
  | 
     else | 
| 3735 | 
  | 
       present++; | 
| 3736 | 
  | 
  | 
| 3737 | 
  | 
   } | 
| 3738 | 
  | 
  | 
| 3739 | 
  | 
   int inserted = ctles.size() - present;  // Number of inserted TLE. | 
| 3740 | 
  | 
   if ( IsDebug() ) | 
| 3741 | 
  | 
     cout << "\nProcessed TLEs ranging from " << getTleDatetime(ctles[0]) << " to " << getTleDatetime(ctles[ctles.size()-1]) << "." << endl | 
| 3742 | 
  | 
          << inserted << " newly inserted TLEs out of " << ctles.size() << " processed." << endl; | 
| 3743 | 
  | 
  | 
| 3744 | 
  | 
   ctles.clear(); | 
| 3745 | 
  | 
  | 
| 3746 | 
  | 
  | 
| 3747 | 
  | 
   // Return 2 if no new TLE has been inserted.  0 otherwise. | 
| 3748 | 
  | 
   if(! inserted ) return 2; | 
| 3749 | 
  | 
   return 0; | 
| 3750 | 
  | 
 } | 
| 3751 | 
  | 
  | 
| 3752 | 
  | 
  | 
| 3753 | 
  | 
 // Insert tle in the table GL_TLE using the connection conn. | 
| 3754 | 
  | 
 int PamelaDBOperations::insertTle(cTle *tle) | 
| 3755 | 
  | 
 { | 
| 3756 | 
  | 
   stringstream oss; | 
| 3757 | 
  | 
   TSQLResult *result = 0; | 
| 3758 | 
  | 
  | 
| 3759 | 
  | 
   oss.str(""); | 
| 3760 | 
  | 
   oss << " INSERT INTO GL_TLE (TLE1, TLE2, TLE3, FROM_TIME)" | 
| 3761 | 
  | 
       << " VALUES ( '"  | 
| 3762 | 
  | 
       << tle->getName() << "', '"  | 
| 3763 | 
  | 
       << tle->getLine1() << "', '" | 
| 3764 | 
  | 
       << tle->getLine2() << "', '" | 
| 3765 | 
  | 
       << getTleDatetime(tle) << "')"; | 
| 3766 | 
  | 
  | 
| 3767 | 
  | 
   //  cout << oss.str().c_str() << endl; | 
| 3768 | 
  | 
   result = conn->Query(oss.str().c_str()); | 
| 3769 | 
  | 
   if (result == NULL) | 
| 3770 | 
  | 
     return EXIT_FAILURE; | 
| 3771 | 
  | 
  | 
| 3772 | 
  | 
   return EXIT_SUCCESS; | 
| 3773 | 
  | 
 } | 
| 3774 | 
  | 
  | 
| 3775 | 
  | 
  | 
| 3776 | 
  | 
 // Return whether tle is already in the db connected by conn. | 
| 3777 | 
  | 
 bool PamelaDBOperations::isTlePresent(cTle *tle) | 
| 3778 | 
  | 
 { | 
| 3779 | 
  | 
   stringstream oss; | 
| 3780 | 
  | 
   TSQLResult *result = 0; | 
| 3781 | 
  | 
  | 
| 3782 | 
  | 
   oss.str(""); | 
| 3783 | 
  | 
   oss << "SELECT * FROM GL_TLE WHERE FROM_TIME = '" | 
| 3784 | 
  | 
       << getTleDatetime(tle) << "'"; | 
| 3785 | 
  | 
  | 
| 3786 | 
  | 
   result = conn->Query(oss.str().c_str()); | 
| 3787 | 
  | 
   if (result == NULL) throw -4; | 
| 3788 | 
  | 
  | 
| 3789 | 
  | 
   if (result->GetRowCount()) | 
| 3790 | 
  | 
     return true; | 
| 3791 | 
  | 
   else  | 
| 3792 | 
  | 
     return false; | 
| 3793 | 
  | 
 } | 
| 3794 | 
  | 
  | 
| 3795 | 
  | 
  | 
| 3796 | 
  | 
 // Return whether the first TLE is dated early than the second | 
| 3797 | 
  | 
 bool compTLE (cTle *tle1, cTle *tle2) | 
| 3798 | 
  | 
 { | 
| 3799 | 
  | 
   return getTleJulian(tle1) < getTleJulian(tle2); | 
| 3800 | 
  | 
 } | 
| 3801 | 
  | 
  | 
| 3802 | 
  | 
  | 
| 3803 | 
  | 
 // Return the date of the tle using the format (year-2000)*1e3 + | 
| 3804 | 
  | 
 // julian day.  e.g. 6365 is the 31th Dec 2006. | 
| 3805 | 
  | 
 // It does *not* return a cJulian date. | 
| 3806 | 
  | 
 float getTleJulian(cTle *tle) { | 
| 3807 | 
  | 
   return tle->getField(cTle::FLD_EPOCHYEAR)*1e3 + tle->getField(cTle::FLD_EPOCHDAY); | 
| 3808 | 
  | 
 } | 
| 3809 | 
  | 
  | 
| 3810 | 
  | 
  | 
| 3811 | 
  | 
 // Return a string like YYYY-MM-DD hh:mm:ss, usable for mysql datetime | 
| 3812 | 
  | 
 // format. | 
| 3813 | 
  | 
 string getTleDatetime(cTle *tle) | 
| 3814 | 
  | 
 { | 
| 3815 | 
  | 
   int year, mon, day, hh, mm, ss; | 
| 3816 | 
  | 
   double dom; // day of month (is double!) | 
| 3817 | 
  | 
   stringstream date; // date in datetime format | 
| 3818 | 
  | 
  | 
| 3819 | 
  | 
   // create a cJulian from the date in tle | 
| 3820 | 
  | 
   cJulian jdate = cJulian( 2000 + (int) tle->getField(cTle::FLD_EPOCHYEAR), tle->getField(cTle::FLD_EPOCHDAY));  | 
| 3821 | 
  | 
  | 
| 3822 | 
  | 
   // get year, month, day of month | 
| 3823 | 
  | 
   jdate.getComponent(&year, &mon, &dom); | 
| 3824 | 
  | 
  | 
| 3825 | 
  | 
   // build a datetime YYYY-MM-DD hh:mm:ss | 
| 3826 | 
  | 
   date.str(""); | 
| 3827 | 
  | 
   day = (int) floor(dom); | 
| 3828 | 
  | 
   hh = (int) floor( (dom - day) * 24); | 
| 3829 | 
  | 
   mm = (int) floor( ((dom - day) * 24 - hh) * 60); | 
| 3830 | 
  | 
   ss = (int) floor( ((((dom - day) * 24 - hh) * 60 - mm) * 60)); | 
| 3831 | 
  | 
   //  ms = (int) floor( (((((dom - day) * 24 - hh) * 60 - mm) * 60) - ss) * 1000); | 
| 3832 | 
  | 
  | 
| 3833 | 
  | 
   date << year << "-" << mon << "-" << day << " " << hh << ":" << mm << ":" << ss; | 
| 3834 | 
  | 
  | 
| 3835 | 
  | 
   return date.str(); | 
| 3836 | 
  | 
 } |