--- YodaProfiler/src/R2-D2.cpp 2006/11/20 09:11:59 1.4 +++ YodaProfiler/src/R2-D2.cpp 2008/03/03 14:10:36 1.13 @@ -28,30 +28,33 @@ // void r2d2usage(){ printf("\nUsage:\n"); - printf("\n R2-D2 [-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 run ID_RUN: ID number of the run \n"); - printf("\n -filename file 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 -tzone timezone the time zone: UTC,GMT,MSK,MSD,CET,CEST are accepted \n"); - printf("\n -convert dbtime convert the dbtime given in seconds (from the DB) to a string\n"); - printf("\n -runat date returns run number which contains the given date,\n"); - printf("\n for date use the SQL format \"yyyy-mm-dd hh:mm:ss\" \n"); - printf("\n -runatDB time returns run number which contains the given DB time\n"); - printf("\n -tsfile file yoda filename for the time sync (to be used with -obt)\n"); - printf("\n -obt OBT OBT in ms returns a date (to be used with -tsfile)\n"); - printf("\n -getRTime OBT OBT in ms returns Resurs time (to be used with -tsfile)\n"); - printf("\n -dumpTLEfor date save into file tle.txt the TLE for the given date,\n"); - printf("\n for date use the SQL format \"yyyy-mm-dd hh:mm:ss\" \n"); + printf("\n R2-D2 [ options ]\n"); + printf("\n Options are:\n\n"); + printf(" --version print informations about compilation and exit\n"); + printf(" -h | --help print this help and exit \n"); + printf(" -v | --verbose be verbose [default]\n"); + printf(" -n | --neat used with '-filename' returns only the run ID number\n"); + printf(" -idRun run ID_RUN: ID number of the run \n"); + printf(" -filename file output yoda filename \n"); + printf(" -l2filename file output amidala filename \n"); + printf(" -host name of the DB host [default = $PAM_DBHOST or mysql://localhost/pamelaprod]\n"); + printf(" -user username for the DB connection [default = $PAM_DBUSER or \"anonymous\"] \n"); + printf(" -psw password for the DB connection [default = $PAM_DBPSW or \"\"]\n"); + printf(" -splitat file shows relationship between files around the given file\n"); + printf(" -tzone timezone the time zone: UTC,GMT,MSK,MSD,CET,CEST are accepted \n"); + printf(" -convert dbtime convert the dbtime given in seconds (from the DB) to a string\n"); + printf(" -runat date returns run number which contains the given date,\n"); + printf(" for date use the SQL format \"yyyy-mm-dd hh:mm:ss\" \n"); + printf(" -runatDB time returns run number which contains the given DB time\n"); + printf(" -tsfile file yoda filename for the time sync (to be used with -obt)\n"); + printf(" -obt OBT OBT in ms returns a date (to be used with -tsfile)\n"); + printf(" -getRTime OBT OBT in ms returns Resurs time (to be used with -tsfile)\n"); + printf(" -dumpTLEfor date save into file tle.txt the TLE for the given date,\n"); + printf(" for date use the SQL format \"yyyy-mm-dd hh:mm:ss\" \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"); + printf(" R2-D2 -idRun 1085 \n"); + printf(" R2-D2 -filename DW_050208_00900.root \n"); + printf(" R2-D2 -idRun 1085 -filename DW_050208_00900.root \n\n"); }; // // Here the main @@ -66,6 +69,8 @@ UInt_t run = 0ULL; // TString filename = ""; + TString l2filename = ""; + TString splitat = ""; // TSQLServer *dbc = 0; TString host = "mysql://localhost/pamelaprod"; @@ -95,6 +100,7 @@ Bool_t ruti2 = false; Bool_t convobt = false; Bool_t convobtts = false; + Bool_t neat = false; // UInt_t runtime2 = 0; UInt_t obt = 0; @@ -103,6 +109,8 @@ // TSQLResult *pResult; TSQLRow *Row; + TSQLResult *pResult2 = 0; + TSQLRow *Row2; int t; int r; stringstream myquery; @@ -120,6 +128,9 @@ r2d2usage(); exit(0); }; + if ( !strcmp(inps[i],"-n") || !strcmp(inps[i],"--neat") ){ + neat = true; + }; if ( !strcmp(inps[i],"-idRun") ) { if ( numinp-1 < i+1 ) { r2d2usage(); @@ -134,6 +145,20 @@ }; filename = (TString)inps[i+1]; }; + if ( !strcmp(inps[i],"-splitat") ) { + if ( numinp-1 < i+1 ){ + r2d2usage(); + exit(-3); + }; + splitat = (TString)inps[i+1]; + }; + if ( !strcmp(inps[i],"-l2filename") ) { + if ( numinp-1 < i+1 ){ + r2d2usage(); + exit(-3); + }; + l2filename = (TString)inps[i+1]; + }; if ( !strcmp(inps[i],"-host") ) { if ( numinp-1 < i+1 ){ r2d2usage(); @@ -259,6 +284,8 @@ GL_ROOT *glroot = new GL_ROOT(); GL_RUN *glrun = new GL_RUN(); GL_TIMESYNC *dbtime = new GL_TIMESYNC(); + UInt_t nr = 0; + UInt_t rlist[500]; // // At which date correspond the DB time "dbti"? // @@ -469,6 +496,7 @@ exit(-4); }; printf("\n Run %u belongs to file %s \n",run,(glroot->PATH+glroot->NAME).Data()); + //filename = glroot->NAME; found = true; }; // @@ -517,20 +545,21 @@ }; delete pResult; if ( !ID && !ID_RAW ){ - printf("\n No file with name %s in the DB!\n",filename.Data()); + if ( !neat ) 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 << " ID,RUNHEADER_TIME,RUNTRAILER_TIME,NEVENTS "; 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( Row == NULL ) break; found = true; - if ( !r ) printf("\n File %s contains the following runs: \n\n",filename.Data()); - TString UTC="UTC"; - 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()); + if ( !r && !neat ) printf("\n File %s contains the following runs: \n\n",filename.Data()); + TString UTC=tzone.Data(); + if ( !neat ) printf(" => ID = %u --> the run started at %s %s ended at %s %s NEV = %u \n\n",(UInt_t)atoll(Row->GetField(0)),dbtime->ConvertTime(UTC,(UInt_t)atoll(Row->GetField(1))).Data(),tzone.Data(),dbtime->ConvertTime(UTC,(UInt_t)atoll(Row->GetField(2))).Data(),tzone.Data(),(UInt_t)atoll(Row->GetField(3))); + if ( neat ) printf("%u\n",(UInt_t)atoll(Row->GetField(0))); }; delete pResult; myquery.str(""); @@ -541,13 +570,13 @@ for( r=0; r < 1000; r++){ Row = pResult->Next(); if( Row == NULL ) break; - if ( !r ) printf("\n File %s contains the following DELETED runs: \n\n",filename.Data()); - TString UTC="UTC"; - 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()); + if ( !r && !neat ) printf("\n File %s contains the following DELETED runs: \n\n",filename.Data()); + TString UTC=tzone.Data(); + if ( !neat ) printf(" => ID = %i --> the run started at %s %s ended at %s %s \n\n",(UInt_t)atoll(Row->GetField(0)),dbtime->ConvertTime(UTC,(UInt_t)atoll(Row->GetField(1))).Data(),tzone.Data(),dbtime->ConvertTime(UTC,(UInt_t)atoll(Row->GetField(2))).Data(),tzone.Data()); }; // if ( !found ){ - printf("\n No run associated to the file %s \n",filename.Data()); + if ( !neat ) printf("\n No run associated to the file %s \n",filename.Data()); }; myquery.str(""); myquery << "select "; @@ -563,15 +592,353 @@ }; }; delete pResult; - printf("\n File %s belongs to raw data file %s/%s \n",filename.Data(),rawpath,rawname); + if ( !neat ) printf("\n File %s belongs to raw data file %s/%s \n",filename.Data(),rawpath,rawname); + }; + }; + // + // Which runs are contained in the file "l2filename"? + // + if ( strcmp(l2filename.Data(),"") ){ + // ---------------- + Bool_t found = false; + 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=\"" << l2filename.Data() << "\" order by INSERT_TIME desc limit 1;"; + 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 ){ + printf("\n No file with name %s in the DB!\n",l2filename.Data()); + } else { + nr = 0; + rlist[0] = 0; + myquery.str(""); + myquery << "select "; + myquery << " ID,ID_ROOT_L0 "; + myquery << " from GL_RUN where ID_ROOT_L2=" << ID << ";"; + pResult = dbc->Query(myquery.str().c_str()); + for( r=0; r < pResult->GetRowCount(); r++){ + Row = pResult->Next(); + if( Row == NULL ) break; + found = true; + if ( !r ) printf("\n File %s contains the following runs: \n\n",l2filename.Data()); + printf(" %u ",(UInt_t)atoll(Row->GetField(0))); + if ( r < (pResult->GetRowCount()-1) ){ + printf("-"); + } else { + printf("\n\n"); + }; + if ( (UInt_t)atoll(Row->GetField(1)) != rlist[nr] ){ + nr++; + rlist[nr] = (UInt_t)atoll(Row->GetField(1)); + }; + }; + delete pResult; + // + printf("\n File %s contains runs from L0 files: \n\n",l2filename.Data()); + for (UInt_t l=1; lQuery(myquery.str().c_str()); + for( r=0; r < pResult->GetRowCount(); 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); + }; + printf(" %s/%s \n",rawpath,rawname); + }; + delete pResult; + }; + }; + }; + // + // + // Show relationship between files around file "splitat" + // + if ( strcmp(splitat.Data(),"") ){ + // ---------------- + Int_t ID = 0; + Int_t IDR = 0; + TString PATH; + TString NAME; + UInt_t atime1 = 0; + UInt_t atime2 = 0; + // + myquery.str(""); + myquery << " select ID,PATH,NAME from GL_ROOT where NAME>=\"" << splitat.Data() << "\" order by NAME asc limit 20;"; + // printf(" myquery is %s \n",myquery.str().c_str()); + pResult = dbc->Query(myquery.str().c_str()); + GL_TIMESYNC *dbtime; + GL_S4_CALIB *glS4calib; + GL_ROOT *glroot; + for( r=0; r < 1000; r++){ + Row = pResult->Next(); + if( Row == NULL ) break; + Int_t s=0; + Int_t t=0; + Int_t c=0; + TString *s4files[500]; + TString *tfiles[500]; + TString *cfiles[2000]; + ID = atoi(Row->GetField(0)); + PATH = Row->GetField(1); + NAME = Row->GetField(2); + printf("\n FILE: %s/%s \n",PATH.Data(),NAME.Data()); + myquery.str(""); + myquery << " select ID,RUNHEADER_OBT,RUNTRAILER_OBT from GL_RUN where ID_ROOT_L0=" << ID << ";"; + pResult2 = dbc->Query(myquery.str().c_str()); + for( Int_t run=0; run < pResult2->GetRowCount(); run++){ + Row2 = pResult2->Next(); + if( Row2 == NULL ) break; + IDR = atoi(Row2->GetField(0)); + // + // here we make queries to DB looking for needed files and print results + // + dbtime = new GL_TIMESYNC(ID,"ID",dbc); + // + atime1 = dbtime->DBabsTime(atoi(Row2->GetField(1))); + atime2 = dbtime->DBabsTime(atoi(Row2->GetField(2))); + // + // S4 + // + glS4calib = new GL_S4_CALIB(); + glS4calib->Query_GL_S4_CALIB(atime1, dbc); + glroot = new GL_ROOT(); + glroot->Query_GL_ROOT(glS4calib->ID_ROOT_L0,dbc); + // + if ( s > 0 ){ + Bool_t found = false; + for (Int_t g=0; gNAME.Data(),s4files[g]->Data()) ){ + found = true; + }; + }; + if ( !found && strcmp(glroot->NAME.Data(),NAME.Data()) ){ + s4files[s] = new TString(glroot->NAME.Data()); + s++; + }; + } else { + if ( strcmp(glroot->NAME.Data(),NAME.Data()) ){ + s4files[s] = new TString(glroot->NAME.Data()); + s++; + }; + }; + // + delete glS4calib; + delete dbtime; + delete glroot; + // + // TRACKER + // + GL_TRK_CALIB q2; + q2.Query_GL_TRK_CALIB(atime1,dbc); + GL_ROOT q3; + q3.Query_GL_ROOT(q2.ID_ROOT_L0,dbc); + // + if ( t > 0 ){ + Bool_t found = false; + for (Int_t gt=0; gtData()) ){ + found = true; + }; + }; + if ( !found && strcmp(q3.NAME.Data(),NAME.Data()) ){ + tfiles[t] = new TString(q3.NAME.Data()); + t++; + }; + } else { + if ( strcmp(q3.NAME.Data(),NAME.Data()) ){ + tfiles[t] = new TString(q3.NAME.Data()); + t++; + }; + }; + // + // CALO + // + GL_CALO_CALIB *glcalo = new GL_CALO_CALIB(); + GL_CALOPULSE_CALIB *glp = new GL_CALOPULSE_CALIB(); + GL_ROOT *glroot = new GL_ROOT(); + // + for (Int_t sc=0; sc<4; sc++){ + // + UInt_t pampli = 0; + glcalo->Query_GL_CALO_CALIB(atime1,pampli,sc,dbc); + glroot->Query_GL_ROOT(glcalo->ID_ROOT_L0,dbc); + if ( c > 0 ){ + Bool_t found = false; + for (Int_t gt=0; gtNAME.Data(),cfiles[gt]->Data()) ){ + found = true; + }; + }; + if ( !found && strcmp(glroot->NAME.Data(),NAME.Data()) ){ + cfiles[c] = new TString(glroot->NAME.Data()); + c++; + }; + } else { + if ( strcmp(glroot->NAME.Data(),NAME.Data()) ){ + cfiles[c] = new TString(glroot->NAME.Data()); + c++; + }; + }; + // + pampli = 0; + glcalo->Query_GL_CALO_CALIB(atime2,pampli,sc,dbc); + glroot->Query_GL_ROOT(glcalo->ID_ROOT_L0,dbc); + if ( c > 0 ){ + Bool_t found = false; + for (Int_t gt=0; gtNAME.Data(),cfiles[gt]->Data()) ){ + found = true; + }; + }; + if ( !found && strcmp(glroot->NAME.Data(),NAME.Data()) ){ + cfiles[c] = new TString(glroot->NAME.Data()); + c++; + }; + } else { + if ( strcmp(glroot->NAME.Data(),NAME.Data()) ){ + cfiles[c] = new TString(glroot->NAME.Data()); + c++; + }; + }; + // + pampli = 2; + glp->Query_GL_CALOPULSE_CALIB(atime1,sc,pampli,dbc); + glroot->Query_GL_ROOT(glp->ID_ROOT_L0,dbc); + if ( c > 0 ){ + Bool_t found = false; + for (Int_t gt=0; gtNAME.Data(),cfiles[gt]->Data()) ){ + found = true; + }; + }; + if ( !found && strcmp(glroot->NAME.Data(),NAME.Data()) ){ + cfiles[c] = new TString(glroot->NAME.Data()); + c++; + }; + } else { + if ( strcmp(glroot->NAME.Data(),NAME.Data()) ){ + cfiles[c] = new TString(glroot->NAME.Data()); + c++; + }; + }; + // + pampli = 0; + glp->Query_GL_CALOPULSE_CALIB(atime1,sc,pampli,dbc); + glroot->Query_GL_ROOT(glp->ID_ROOT_L0,dbc); + if ( c > 0 ){ + Bool_t found = false; + for (Int_t gt=0; gtNAME.Data(),cfiles[gt]->Data()) ){ + found = true; + }; + }; + if ( !found && strcmp(glroot->NAME.Data(),NAME.Data()) ){ + cfiles[c] = new TString(glroot->NAME.Data()); + c++; + }; + } else { + if ( strcmp(glroot->NAME.Data(),NAME.Data()) ){ + cfiles[c] = new TString(glroot->NAME.Data()); + c++; + }; + }; + // + pampli = 2; + glp->Query_GL_CALOPULSE_CALIB(atime2,sc,pampli,dbc); + glroot->Query_GL_ROOT(glp->ID_ROOT_L0,dbc); + if ( c > 0 ){ + Bool_t found = false; + for (Int_t gt=0; gtNAME.Data(),cfiles[gt]->Data()) ){ + found = true; + }; + }; + if ( !found && strcmp(glroot->NAME.Data(),NAME.Data()) ){ + cfiles[c] = new TString(glroot->NAME.Data()); + c++; + }; + } else { + if ( strcmp(glroot->NAME.Data(),NAME.Data()) ){ + cfiles[c] = new TString(glroot->NAME.Data()); + c++; + }; + }; + // + pampli = 0; + glp->Query_GL_CALOPULSE_CALIB(atime2,sc,pampli,dbc); + glroot->Query_GL_ROOT(glp->ID_ROOT_L0,dbc); + if ( c > 0 ){ + Bool_t found = false; + for (Int_t gt=0; gtNAME.Data(),cfiles[gt]->Data()) ){ + found = true; + }; + }; + if ( !found && strcmp(glroot->NAME.Data(),NAME.Data()) ){ + cfiles[c] = new TString(glroot->NAME.Data()); + c++; + }; + } else { + if ( strcmp(glroot->NAME.Data(),NAME.Data()) ){ + cfiles[c] = new TString(glroot->NAME.Data()); + c++; + }; + }; + // + }; + }; + printf(" S4 requires:"); + for (Int_t f=0;fData()); + delete s4files[f]; + }; + printf("\n"); + printf(" Tracker requires:"); + for (Int_t f=0;fData()); + delete tfiles[f]; + }; + printf("\n"); + printf(" Calorimeter requires:"); + for (Int_t f=0;fData()); + delete cfiles[f]; + }; + printf("\n\n#################################################\n"); + // }; + delete pResult; + if ( pResult2 ) delete pResult2; }; // // Close the DB connection // if ( dbc ) dbc->Close(); // - printf("\n"); + if ( !neat ) printf("\n"); // exit(0); }