// // C/C++ headers // #include #include // // ROOT headers // #include #include #include #include // // Detector's package headers // #include // using namespace std; // // // #include // // Usage subroutine // void r2d2usage(){ printf("\nUsage:\n"); printf("\n DarthVader [-h | --help] [--version] [-idRun ID_RUN] [-filename filename]\n"); printf("\n [-host host] [-user username] [-psw password] \n"); printf("\n --version print informations about compilation and exit\n"); printf("\n -h | --help print this help and exit \n"); printf("\n -v | --verbose be verbose [default: print nothing on STDOUT]\n"); printf("\n -idRun ID_RUN: ID number of the run \n"); printf("\n -filename output yoda filename \n"); printf("\n -host name for the host [default = $PAM_DBHOST or mysql://localhost/pamelaprod]\n"); printf("\n -user username for the DB [default = $PAM_DBUSER or \"anonymous\"] \n"); printf("\n -psw password for the DB [default = $PAM_DBPSW or \"\"]\n"); printf("\n -convert [ -tzone timezone -dbtime dbtime ] \n"); printf("\n convert the dbtime given in seconds (from the DB) to a string for\n"); printf("\n the given time zone (UTC,GMT,MSK,MSD,CET,CEST are accepted) \n"); printf("\n -runat [ -tzone timezone -time \"yyyy-mm-dd hh:mm:ss\" ] \n"); printf("\n returns run number which contains the given date in the given time zone \n"); printf("\nExamples: \n"); printf("\n R2-D2 -idRun 1085 \n"); printf("\n R2-D2 -filename DW_050208_00900.root \n"); printf("\n R2-D2 -idRun 1085 -filename DW_050208_00900.root \n"); }; // // Here the main // int main(int numinp, char *inps[]){ // // Variables booking // TString message; Int_t error = 0; // UInt_t run = 0ULL; // TString filename = ""; // TSQLServer *dbc = 0; TString host = "mysql://localhost/pamelaprod"; TString user = "anonymous"; TString psw = ""; // const char *pamdbhost=gSystem->Getenv("PAM_DBHOST"); const char *pamdbuser=gSystem->Getenv("PAM_DBUSER"); const char *pamdbpsw=gSystem->Getenv("PAM_DBPSW"); if ( strcmp(pamdbhost,"") ) host = pamdbhost; if ( strcmp(pamdbuser,"") ) user = pamdbuser; if ( strcmp(pamdbpsw,"") ) psw = pamdbpsw; // // printf(" host %s user %s psw %s \n",host.Data(),user.Data(),psw.Data()); // TString tzone = "MSK"; TString tzone2 = "MSK"; TString runtime = "1970-01-01 00:00:00"; UInt_t dbti = 0; Bool_t convert = false; Bool_t ruti = false; // TSQLResult *pResult; TSQLRow *Row; int t; int r; stringstream myquery; // // Checking input parameters // Int_t i = 0; if ( numinp > 1 ){ while ( i < numinp ){ if ( !strcmp(inps[i],"--version") ){ DarthVaderInfo(true); exit(0); }; if ( !strcmp(inps[i],"-h") || !strcmp(inps[i],"--help") ){ r2d2usage(); exit(0); }; if ( !strcmp(inps[i],"-idRun") ) { if ( numinp-1 < i+1 ) { r2d2usage(); exit(-3); }; run = (UInt_t)atoll(inps[i+1]); }; if ( !strcmp(inps[i],"-filename") ) { if ( numinp-1 < i+1 ){ r2d2usage(); exit(-3); }; filename = (TString)inps[i+1]; }; if ( !strcmp(inps[i],"-host") ) { if ( numinp-1 < i+1 ){ r2d2usage(); exit(-3); }; host = (TString)inps[i+1]; }; if ( !strcmp(inps[i],"-user") ) { if ( numinp-1 < i+1 ){ r2d2usage(); exit(-3); }; user = (TString)inps[i+1]; }; if ( !strcmp(inps[i],"-psw") ) { if ( numinp-1 < i+1 ){ r2d2usage(); exit(-3); }; psw = (TString)inps[i+1]; }; // if ( !strcmp(inps[i],"-convert") ) { convert = true; if ( numinp >= i+2 && !strcmp(inps[i+1],"[") ){ if ( numinp < i+2 ){ r2d2usage(); throw -3; }; i += 2; while ( strcmp(inps[i],"]") ){ if ( !strcmp(inps[i],"-tzone") ) { if ( numinp-1 < i+1 ){ r2d2usage(); exit(-3); }; tzone = (TString)inps[i+1]; }; if ( !strcmp(inps[i],"-dbtime") ) { if ( numinp-1 < i+1 ){ r2d2usage(); exit(-3); }; dbti = (UInt_t)atoll(inps[i+1]); }; i++; if ( i > numinp-1 ){ r2d2usage(); throw -3; }; }; }; }; // if ( !strcmp(inps[i],"-runat") ) { ruti = true; if ( numinp >= i+2 && !strcmp(inps[i+1],"[") ){ if ( numinp < i+2 ){ r2d2usage(); throw -3; }; i += 2; while ( strcmp(inps[i],"]") ){ if ( !strcmp(inps[i],"-tzone") ) { if ( numinp-1 < i+1 ){ r2d2usage(); exit(-3); }; tzone2 = (TString)inps[i+1]; }; if ( !strcmp(inps[i],"-time") ) { if ( numinp-1 < i+1 ){ r2d2usage(); exit(-3); }; runtime = (TString)inps[i+1]; }; i++; if ( i > numinp-1 ){ r2d2usage(); throw -3; }; }; }; }; // i++; }; // } else { // // no input parameters exit with error, we need at least the run id. // r2d2usage(); exit(-2); }; // // Connect to the DB // dbc = TSQLServer::Connect(host.Data(),user.Data(),psw.Data()); if( !dbc ) throw -2; // bool connect = dbc->IsConnected(); // if( !connect ){ printf(" Error, not connected to DB\n"); exit(-1); }; // GL_ROOT *glroot = new GL_ROOT(); GL_RUN *glrun = new GL_RUN(); GL_TIMESYNC *dbtime = new GL_TIMESYNC(); // // At which date correspond the DB time "dbti"? // if ( convert ){ printf("\n DB time %u is %s %s \n",dbti,dbtime->ConvertTime(tzone.Data(),dbti).Data(),tzone.Data()); }; // // Which run contains the date "runtime"? // if ( ruti ){ // TDatime *time = new TDatime(runtime.Data()); UInt_t dbti = time->Convert(); // TString thetime = dbtime->UnConvertTime(tzone2.Data(),dbti); // TDatime *time2 = new TDatime(thetime.Data()); UInt_t mytime = time2->Convert(); // myquery.str(""); myquery << "select "; myquery << " ID "; myquery << " from GL_RUN where RUNHEADER_TIME<=" << mytime << " AND " << " RUNTRAILER_TIME>=" << mytime << " ;"; // printf("myquery is %s \n",myquery.str().c_str()); pResult = dbc->Query(myquery.str().c_str()); for( r=0; r < 1000; r++){ Row = pResult->Next(); if ( !r && !Row ){ printf("\n No run contains date %s %s (DB time %u )\n",runtime.Data(),tzone2.Data(),mytime); }; if( Row == NULL ) break; printf("\n Date %s %s (DB time %u ) is contained in run %u \n",runtime.Data(),tzone2.Data(),mytime,(UInt_t)atoll(Row->GetField(0))); }; }; // // To which file the run "run" belongs? // if ( run != 0 ){ glrun->Clear(); error = glrun->Query_GL_RUN(run,dbc); glroot->Clear(); error = glroot->Query_GL_ROOT(glrun->ID_ROOT_L0,dbc); if ( error ){ printf(" Error querying the DB! \n"); exit(-4); }; if ( !glrun->ID ){ printf("\n No run with ID=%u in the DB!\n",run); } else { printf("\n Run %u belongs to file %s \n",run,(glroot->PATH+glroot->NAME).Data()); }; }; // // Which runs are contained in the file "filename"? // if ( strcmp(filename.Data(),"") ){ // ---------------- Int_t ID = 0; Int_t ID_RAW = 0; // const char *rawpath = ""; const char *rawname = ""; // myquery.str(""); myquery << "select "; myquery << " ID"; myquery << ",ID_RAW"; myquery << ",PATH"; myquery << ",NAME"; myquery << " from GL_ROOT where NAME=\"" << filename.Data() << "\";"; pResult = dbc->Query(myquery.str().c_str()); for( r=0; r < 1000; r++){ Row = pResult->Next(); if( Row == NULL ) break; for( t = 0; t < pResult->GetFieldCount(); t++){ if(t==0) ID = atoi(Row->GetField(t)); if(t==1) ID_RAW = atoi(Row->GetField(t)); }; }; delete pResult; if ( !ID && !ID_RAW ){ printf("\n No file with name %s in the DB!\n",filename.Data()); } else { myquery.str(""); myquery << "select "; myquery << " ID,RUNHEADER_TIME,RUNTRAILER_TIME "; myquery << " from GL_RUN where ID_ROOT_L0=" << ID << ";"; pResult = dbc->Query(myquery.str().c_str()); for( r=0; r < 1000; r++){ Row = pResult->Next(); if ( !r && !Row ){ printf("\n No run associated to the file %s \n",filename.Data()); }; if( Row == NULL ) break; if ( !r ) printf("\n File %s contains the following runs: \n\n",filename.Data()); printf(" => ID = %i _-_-_ the run started at %s UTC ended at %s UTC \n\n",(UInt_t)atoll(Row->GetField(0)),dbtime->ConvertTime("UTC",(UInt_t)atoll(Row->GetField(1))).Data(),dbtime->ConvertTime("UTC",(UInt_t)atoll(Row->GetField(2))).Data()); }; delete pResult; myquery.str(""); myquery << "select "; myquery << " PATH,NAME"; myquery << " from GL_RAW where ID=" << ID_RAW << ";"; pResult = dbc->Query(myquery.str().c_str()); for( r=0; r < 1000; r++){ Row = pResult->Next(); if( Row == NULL ) break; for( t = 0; t < pResult->GetFieldCount(); t++){ if(t==0) rawpath = Row->GetField(t); if(t==1) rawname = Row->GetField(t); }; }; delete pResult; printf("\n File %s belongs to raw data file %s/%s \n",filename.Data(),rawpath,rawname); }; }; // // Close the DB connection // if ( dbc ) dbc->Close(); // printf("\n"); // exit(0); }