/////////////////////////////////////////////////////////////////////////////// // Feb 2002 P.Murat: split source and include files /////////////////////////////////////////////////////////////////////////////// #include "TSystem.h" #include "stdlib.h" #include "Stntuple/base/TUsedSet.hh" #include "Stntuple/base/TTriggerConditions.hh" #include "Stntuple/base/TBeamConditions.hh" #include "Stntuple/base/TCdf2RunSections.hh" #include "Stntuple/base/TCdf2Files.hh" #include "Stntuple/base/TCdf2Filesets.hh" #include "Stntuple/base/TSetRunMaps.hh" #include "Stntuple/base/TCalibRunLists.hh" #include "Stntuple/base/TOffscl.hh" #include "TCdfOracle.hh" #include "TOracleSession.hh" #include "Stntuple/obj/TStnRunSummary.hh" #include "Stntuple/obj/TStnTrigger.hh" #include "Stntuple/obj/TStnTriggerTable.hh" #include "Stntuple/data/TStnBeamPos.hh" #include "Stntuple/data/TStnBeamPosBlock.hh" //_____________________________________________________________________________ void TCdfOracle::GetMyronMode(Int_t RunNumber) { char query[1000]; int myron_mode, l1early; sprintf(query,"select myronmode, l1early from runsets where name like 'RUN_%i'", RunNumber); TSQLResult* res; Query(query,res); TOracleRow* row = (TOracleRow *) res->Next(); // int myron_mode, l1early; myron_mode = *(int*) row->GetFieldData(0); l1early = *(int*) row->GetFieldData(1); printf("myron_mode = %i, l1early = %i\n", myron_mode, l1early); delete row; delete res; } //_____________________________________________________________________________ Int_t TCdfOracle::GetCid(const char* Table, Int_t Jobset) { TSQLResult* res; TOracleRow* row; TString query; int cid(-1); query = "select srm.cid, crl.calib_table "; query += "from set_run_maps srm, calibrunlists crl "; query += Form("where srm.jobset=%i ",Jobset); query += Form("and crl.cid=srm.cid and crl.calib_table='%s'",Table); Query(query.Data(),res); // expect one row in return row = (TOracleRow*) res->Next(); if (row) { cid = *((int*) row->GetFieldData(0)); } return cid; } //_____________________________________________________________________________ Int_t TCdfOracle::GetBeamPositions(Int_t Cid, const char* CotSvx, int iRun, TStnBeamPosBlock* Block) { TString s = CotSvx; s.ToUpper(); if (! Block) { // This is an error and we have to tell people printf(" TCdfOracle::GetBeamPositions"); printf(" ERROR you are handing a null pointer. %p\n",Block); return -1; } if (Cid<1) // Perfectly possible there is no CID for this run,table return -1; // but avoid database access with no result //---------------------------------------------------------------------------- // Assume someone gives us a valid pointer to a beamposition block // and we are filling it from the database. //---------------------------------------------------------------------------- TSQLResult* res; TOracleRow* row; double beamx,beamy,beamz,slopex,slopey,widthx,widthy,widthxy; double emittxfit,bstarxfit,zzeroxfit; double emittyfit,bstaryfit,zzeroyfit; double fitcov00,fitcov01,fitcov02,fitcov03,fitcov11,fitcov12,fitcov13; double fitcov22,fitcov23,fitcov33; int flag1; int rc = 0; int iSvx = 0; //---------------------------------------------------------------------------- // Setting up the query //---------------------------------------------------------------------------- TString query; TString querySvx = "select beamx,beamy,beamz,slopex,slopey,widthx,widthy,widthxy,emittxfit,bstarxfit,zzeroxfit,emittyfit,bstaryfit,zzeroyfit,fitcov00,fitcov01,fitcov02,fitcov03,fitcov11,fitcov12,fitcov13,fitcov22,fitcov23,fitcov33,flag1 "; TString queryCot = "select beamx,beamy,beamz,slopex,slopey,widthx,widthy,widthxy,fitcov00,fitcov01,fitcov02,fitcov03,fitcov11,fitcov12,fitcov13,fitcov22,fitcov23,fitcov33,flag1 "; if (s == "COT") { iSvx = 0; query = queryCot + Form("from cotbeamposition "); } else { iSvx = 1; query = querySvx + Form("from svxbeamposition "); } query += Form("where cid=%i",Cid); //---------------------------------------------------------------------------- // Making the query //---------------------------------------------------------------------------- //printf(" Database query:\n %s\n",query.Data()); Query(query.Data(),res); // expect several rows in return //---------------------------------------------------------------------------- // Evaluate result of query //---------------------------------------------------------------------------- int i = 0; row = (TOracleRow*) res->Next(); if (row == 0) rc = -1; while (row) { int iField = 0; beamx = *((float*) row->GetFieldData(iField++)); beamy = *((float*) row->GetFieldData(iField++)); beamz = *((float*) row->GetFieldData(iField++)); slopex = *((float*) row->GetFieldData(iField++)); slopey = *((float*) row->GetFieldData(iField++)); widthx = *((float*) row->GetFieldData(iField++)); widthy = *((float*) row->GetFieldData(iField++)); widthxy = *((float*) row->GetFieldData(iField++)); if (iSvx != 0) { emittxfit = *((float*) row->GetFieldData(iField++)); bstarxfit = *((float*) row->GetFieldData(iField++)); zzeroxfit = *((float*) row->GetFieldData(iField++)); emittyfit = *((float*) row->GetFieldData(iField++)); bstaryfit = *((float*) row->GetFieldData(iField++)); zzeroyfit = *((float*) row->GetFieldData(iField++)); } else { emittxfit = bstarxfit = zzeroxfit = emittyfit = bstaryfit = zzeroyfit = 0; } fitcov00 = *((float*) row->GetFieldData(iField++)); fitcov01 = *((float*) row->GetFieldData(iField++)); fitcov02 = *((float*) row->GetFieldData(iField++)); fitcov03 = *((float*) row->GetFieldData(iField++)); fitcov11 = *((float*) row->GetFieldData(iField++)); fitcov12 = *((float*) row->GetFieldData(iField++)); fitcov13 = *((float*) row->GetFieldData(iField++)); fitcov22 = *((float*) row->GetFieldData(iField++)); fitcov23 = *((float*) row->GetFieldData(iField++)); fitcov33 = *((float*) row->GetFieldData(iField++)); flag1 = *((int*) row->GetFieldData(iField++)); TStnBeamPos *beam = Block->NewBeamPos(); beam->Init(iRun,iSvx,-1,beamx,beamy,beamz,slopex,slopey,fitcov00,fitcov01, fitcov02,fitcov03,fitcov11,fitcov12,fitcov13,fitcov22,fitcov23, fitcov33,emittxfit,emittyfit,bstarxfit,bstaryfit, zzeroxfit,zzeroyfit,widthx,widthy,widthxy); row = (TOracleRow*) res->Next(); } //Block->Print(); delete res; return rc; } //_____________________________________________________________________________ Int_t TCdfOracle::GetBeamPosition(Int_t Cid, const char* CotSvx, TStnBeamPos* Beam) { //----------------------------------------------------------------------------- // everything starts from retrieving the list of good runs // this returns a list of TStnRunSummary objects //----------------------------------------------------------------------------- TSQLResult* res; TOracleRow* row; TString s = CotSvx; s.ToUpper(); double beamx,beamy,beamz,slopex,slopey,widthx,widthy,widthxy; double emittxfit,bstarxfit,zzeroxfit; double emittyfit,bstaryfit,zzeroyfit; double fitcov00,fitcov01,fitcov02,fitcov03,fitcov11,fitcov12,fitcov13; double fitcov22,fitcov23,fitcov33; int flag1; int rc(0); TString query; query = "select beamx,beamy,beamz,slopex,slopey,widthx,widthy,widthxy,emittxfit,bstarxfit,zzeroxfit,emittyfit,bstaryfit,zzeroyfit,fitcov00,fitcov01,fitcov02,fitcov03,fitcov11,fitcov12,fitcov13,fitcov22,fitcov23,fitcov33,flag1"; // "select beamx, beamy, beamz, slopex, slopey, widthx, widthy, widthz, flag1 "; if (s == "COT") query += Form("from cotbeamposition "); else if (s == "SVX") query += Form("from svxbeamposition "); query += Form("where cid=%i",Cid); Query(query.Data(),res); // expect one row in return row = (TOracleRow*) res->Next(); if (row == 0) { rc = -1; } else { beamx = *((float*) row->GetFieldData( 0)); beamy = *((float*) row->GetFieldData( 1)); beamz = *((float*) row->GetFieldData( 2)); slopex = *((float*) row->GetFieldData( 3)); slopey = *((float*) row->GetFieldData( 4)); widthx = *((float*) row->GetFieldData( 5)); widthy = *((float*) row->GetFieldData( 6)); widthxy = *((float*) row->GetFieldData( 7)); emittxfit = *((float*) row->GetFieldData( 8)); bstarxfit = *((float*) row->GetFieldData( 9)); zzeroxfit = *((float*) row->GetFieldData(10)); emittyfit = *((float*) row->GetFieldData(11)); bstaryfit = *((float*) row->GetFieldData(12)); zzeroyfit = *((float*) row->GetFieldData(13)); fitcov00 = *((float*) row->GetFieldData(14)); fitcov01 = *((float*) row->GetFieldData(15)); fitcov02 = *((float*) row->GetFieldData(16)); fitcov03 = *((float*) row->GetFieldData(17)); fitcov11 = *((float*) row->GetFieldData(18)); fitcov12 = *((float*) row->GetFieldData(19)); fitcov13 = *((float*) row->GetFieldData(20)); fitcov22 = *((float*) row->GetFieldData(21)); fitcov23 = *((float*) row->GetFieldData(22)); fitcov33 = *((float*) row->GetFieldData(23)); flag1 = *((int*) row->GetFieldData(24)); Beam->Init(-1,flag1,-1,beamx,beamy,beamz,slopex,slopey,fitcov00,fitcov01, fitcov02,fitcov03,fitcov11,fitcov12,fitcov13,fitcov22,fitcov23, fitcov33,emittxfit,emittyfit,bstarxfit,bstaryfit, zzeroxfit,zzeroyfit,widthx,widthy,widthxy); } delete res; return rc; } //_____________________________________________________________________________ Int_t TCdfOracle::GetBeamConditions(TObjArray*& List, int RunMin, int RunMax) { // //----------------------------------------------------------------------------- // everything starts from retrieving the list of good runs // this returns a list of TStnRunSummary objects //----------------------------------------------------------------------------- TSQLResult* res; QueryBeamConditions(res,RunMin,RunMax); TBeamConditions* bc; TOracleRow* row; List->Delete(); while ((row = (TOracleRow*) res->Next())) { bc = new TBeamConditions(); bc->fRunNumber = *((int* ) row->GetFieldData(0)); bc->fCreateTime = Strip( row->GetFieldData(1)); bc->fOutsideTemperature = *((float*) row->GetFieldData(2)); bc->fAccumulatorStack = *((float*) row->GetFieldData(3)); bc->fTevStore = *((int* ) row->GetFieldData(4)); bc->fTevEnergy = *((float*) row->GetFieldData(5)); bc->fTevCurrent = *((float*) row->GetFieldData(6)); bc->fB0LowBetaCurrent = *((float*) row->GetFieldData(7)); bc->fB0Luminosity = *((float*) row->GetFieldData(8)); bc->fB0LiveLuminosity = *((float*) row->GetFieldData(9)); bc->fB0IntegratedLumi = *((float*) row->GetFieldData(10)); bc->fB0IntegratedLiveLumi = *((float*) row->GetFieldData(11)); bc->fB0ProtonLosses = *((float*) row->GetFieldData(12)); bc->fB0AntiProtonLosses = *((float*) row->GetFieldData(13)); bc->fSvrad0 = *((float*) row->GetFieldData(14)); bc->fSvrad1 = *((float*) row->GetFieldData(15)); bc->fSvrad2 = *((float*) row->GetFieldData(16)); bc->fSvrad3 = *((float*) row->GetFieldData(17)); bc->fTevProtons = *((float*) row->GetFieldData(18)); bc->fTevAntiProtons = *((float*) row->GetFieldData(19)); bc->fFrontendTime = *((int* ) row->GetFieldData(20)); List->Add((TObject*)bc); } return 0; } //_____________________________________________________________________________ Int_t TCdfOracle::GetCalibRunLists(Int_t Cid, TCalibRunLists* Crl) { TString query; TSQLResult* res; TOracleRow* row; Int_t rc = -1; query = Form("select * from calibrunlists where cid=%i",Cid); Query(query.Data(),res); // expect one row in return row = (TOracleRow*) res->Next(); if (row == 0) return -1; Crl->fCID = Cid; Crl->fCALIB_TABLE = Strip(row->GetFieldData(1)); Crl->fDATA_STATUS = Strip(row->GetFieldData(2)); Crl->fCALIB_RUN = *((int*) row->GetFieldData(3)); Crl->fCALIB_VERSION = *((int*) row->GetFieldData(4)); Crl->fCREATE_DATE = *((int*) row->GetFieldData(5)); Crl->fCREATE_USER = Strip(row->GetFieldData(6)); Crl->fTSID = *((int*) row->GetFieldData(7)); Crl->fUPDATE_DATE = *((int*) row->GetFieldData(8)); Crl->fUPDATE_USER = Strip(row->GetFieldData(9)); Crl->fCREATE_HOST = Strip(row->GetFieldData(10)); Crl->fUPDATE_HOST = Strip(row->GetFieldData(11)); Crl->fDAQ_STATUS = Strip(row->GetFieldData(12)); Crl->fALGORITHM = Strip(row->GetFieldData(13)); Crl->fPERIOD = *((int*) row->GetFieldData(14)); delete res; if (fForceDisconnect) Disconnect(); return 0; } //_____________________________________________________________________________ Int_t TCdfOracle::GetFile(const char* Filename, const char* Book, TCdf2Files* File) { TString query; TSQLResult* res; TOracleRow* row; Int_t rc = -1; if (gSystem->Getenv("USE_SAM_METADATA") == 0) { query = "select FILE_NAME, CREATION_TIME, FILE_SIZE, EVENT_COUNT"; query += ", LOW_EVENT, LOW_RUN, HIGH_EVENT, HIGH_RUN, LUM_SUM_ONLINE"; query += ", LUM_SUM_OFFLINE, CREATE_USER, CREATE_DATE, UPDATE_USER"; query += ", UPDATE_DATE, FILESET_NAME, STATUS, DS_NAME_ID"; query += Form(" from %s.cdf2_files where file_name=\'%s\'", Book,Filename); } else { } Query(query.Data(),res); while ((row = (TOracleRow*) res->Next())) { TStnRunSummary* r = new TStnRunSummary(); File->fFILE_NAME = Strip(row->GetFieldData(0)); File->fCREATION_TIME = *((int*) row->GetFieldData(1)); File->fFILE_SIZE = *((float*) row->GetFieldData(2)); File->fEVENT_COUNT = *((int*) row->GetFieldData(3)); File->fLOW_EVENT = *((int*) row->GetFieldData(4)); File->fLOW_RUN = *((int*) row->GetFieldData(5)); File->fHIGH_EVENT = *((int*) row->GetFieldData(6)); File->fHIGH_RUN = *((int*) row->GetFieldData(7)); File->fLUM_SUM_ONLINE = *((float*) row->GetFieldData(8)); File->fLUM_SUM_OFFLINE = *((float*) row->GetFieldData(9)); File->fCREATE_USER = Strip(row->GetFieldData(10)); File->fCREATE_DATE = *((int*) row->GetFieldData(11)); File->fUPDATE_USER = Strip(row->GetFieldData(12)); File->fUPDATE_DATE = *((int*) row->GetFieldData(13)); File->fFILESET_NAME = Strip(row->GetFieldData(14)); File->fSTATUS = *((int*) row->GetFieldData(15)); File->fDS_NAME_ID = Strip(row->GetFieldData(16)); rc = 0; } delete res; return rc; } //_____________________________________________________________________________ Int_t TCdfOracle::GetFileset(const char* Book , const char* FilesetName, TCdf2Filesets* Fileset ) { // 'Fileset' has to be created by the caller TString query; TSQLResult* res; TOracleRow* row; Int_t rc = -1; query = Form("select * from %s.cdf2_filesets ",Book); query += Form("where fileset_name=\'%s\'",FilesetName); Query(query.Data(),res); // should be only one row while ((row = (TOracleRow*) res->Next())) { Fileset->fFILESET_NAME = Strip(row->GetFieldData(0)); Fileset->fCREATE_TIME = *((int*) row->GetFieldData(1)); Fileset->fDS_NAME_ID = Strip(row->GetFieldData(2)); Fileset->fTAPE_LABEL = Strip(row->GetFieldData(3)); Fileset->fFILE_COUNT = *((int*) row->GetFieldData(4)); Fileset->fTAPE_PARTITION = *((int*) row->GetFieldData(5)); rc = 0; } delete res; return rc; } //_____________________________________________________________________________ Int_t TCdfOracle::GetListOfFilesets(const char* Dataset, Int_t Run1, Int_t Run2, TObjArray* List) { // get list fo filesets for given Dataset and given range of runs // >= Run1 and <= Run2 TString query; TSQLResult* res; TOracleRow* row; List->Delete(); Int_t rc = -1; char book[100], dsname[100]; ParseDatasetName(Dataset,dsname,book); query = "select unique fs.fileset_name, fs.create_time, fs.ds_name_id, "; query += "fs.tape_label, fs.file_count, fs.tape_partition "; query += Form("from %s.cdf2_filesets fs, ",book); query += Form("%s.cdf2_files fl ",book); query += Form("where fs.ds_name_id=\'%s\' and ",dsname); query += Form("fl.fileset_name=fs.fileset_name and "); query += Form("fl.low_run >= %i ",Run1); if (Run2 != -1) { query += Form("and fl.high_run <= %i",Run2); } Query(query.Data(),res); // get all the filesets for a given range of runs while ((row = (TOracleRow*) res->Next())) { TCdf2Filesets* fs = new TCdf2Filesets(); fs->fFILESET_NAME = Strip(row->GetFieldData(0)); fs->fCREATE_TIME = *((int*) row->GetFieldData(1)); fs->fDS_NAME_ID = Strip(row->GetFieldData(2)); fs->fTAPE_LABEL = Strip(row->GetFieldData(3)); fs->fFILE_COUNT = *((int*) row->GetFieldData(4)); fs->fTAPE_PARTITION = *((int*) row->GetFieldData(5)); List->Add(fs); rc = 0; } delete res; return rc; } //_____________________________________________________________________________ Int_t TCdfOracle::GetFile(const char* Book, const char* Dataset, Int_t RunNumber, Int_t EventNumber, TCdf2Files* File) { // print file corresponding to a given run/event in a given dataset TString query, book; TSQLResult* res; TCdf2RunSections rs; Int_t rc = -1; book = Book; if (book == "") book = "filecatalog"; if (gSystem->Getenv("USE_SAM_METADATA") == 0) { GetRunSection(RunNumber,EventNumber,&rs); query = "select df.file_name, df.fileset_name"; query += ", drr.section_number_low, drr.run_number_low"; query += ", drr.section_number_high, drr.run_number_high"; query += Form(" from %s.cdf2_files df",book.Data()); query += Form(", %s.cdf2_runsection_ranges drr ",book.Data()); query += Form(" where df.ds_name_id=\'%s\'",Dataset); query += Form(" and df.low_run<=%i and df.high_run>=%i",RunNumber, RunNumber); query += " and df.file_name=drr.file_name "; query += Form(" and drr.run_number_low<=%i ",RunNumber); query += Form(" and drr.run_number_high>=%i ",RunNumber); // printf("%s\n",query.Data()); Query(query.Data(),res); TOracleRow* row; TString fn; TString fs; Int_t rs_low, rn_low, rs_high, rn_high; while ((row = (TOracleRow*) res->Next())) { TStnRunSummary* r = new TStnRunSummary(); fn = Strip(row->GetFieldData(0)); fs = Strip(row->GetFieldData(1)); rs_low = *((int*) row->GetFieldData(2)); rn_low = *((int*) row->GetFieldData(3)); rs_high = *((int*) row->GetFieldData(4)); rn_high = *((int*) row->GetFieldData(5)); if ((rs.fSECTION_NUMBER >= rs_low ) && (rs.fSECTION_NUMBER <= rs_high) ) { rc = GetFile(fn,book,File); break; } } delete res; } else { //----------------------------------------------------------------------------- // SAM lingo //----------------------------------------------------------------------------- // query = "select /*+ rule; */ smdf.file_name, 'missing', "; // query += " smdf.file_size_in_bytes," ; // query += " smdf.event_count,"; // query += " smdf.first_event_number, "; // /* low run */ // query += " ( select min(smr.run_number) from data_files_runs smdfr, runs smr "; // query += " where smdf.file_id = smdfr.file_id and smdfr.run_id = smr.run_id) firstrun, "; // /* high event */ // query += " smdf.last_event_number,"; // /* high run */ // query += "( select max(smr.run_number) from data_files_runs smdfr, runs smr "; // query += " where smdf.file_id = smdfr.file_id and smdfr.run_id = smr.run_id) lastrun"; // /* */ // query += " from data_files smdf"; // query += " where smdf.file_id in ( select file_id from data_files df "; // query += " join data_files_param_values dfpv using(file_id) "; // query += " join param_values pv using(param_value_id) "; // query += " join param_types pt using(param_type_id) "; // query += " join param_categories pc using(param_category_id)" ; // query += " where pc.param_category = 'cdf' and "; // query += Form(" pt.param_type = '%s' and ",Dataset); // query += Form(" pv.param_value = '%s')",Dataset); // query += Form(" and firstrun < %i ",RunNumber,RunNumber); // query += Form( // /* */ // query += " order by smdf.file_name" ; } if (fForceDisconnect) Disconnect(); return rc; } //_____________________________________________________________________________ Int_t TCdfOracle::GetFile(const char* Dataset, Int_t RunNumber, Int_t EventNumber, TCdf2Files* File) { // print file corresponding to a given run/event in a given dataset char book[100], dsname[100]; ParseDatasetName(Dataset,dsname,book); return GetFile(book,dsname,RunNumber,EventNumber,File); } //------------------ Int_t TCdfOracle::GetFileLuminosity(const char* Filename, Float_t& LumAverageOnline, Float_t& LumIntegralOnline, Float_t& LumAverageOffline, Float_t& LumIntegralOffline) { // get list of run sections for a given file TSQLResult* res; TString query; query = "select run_number_low, section_number_low, "; query += "run_number_high, section_number_high "; query += Form("from cdf2_runsection_ranges where file_name='%s'",Filename); Query(query.Data(),res); TOracleRow* row = (TOracleRow*) res->Next(); if (row == 0) return -1; int rn, rs, lorun, losec, hirun, hisec; lorun = (*((int*) row->GetFieldData( 0))); losec = (*((int*) row->GetFieldData( 1))); hirun = (*((int*) row->GetFieldData( 2))); hisec = (*((int*) row->GetFieldData( 3))); delete res; // now query the DB and get the runsections query = "select sum(lum_average_online)/sum(1), sum(lum_integral_online), "; query += "sum(lum_average_offline)/sum(1), sum(lum_integral_offline) "; query += "from cdf2_runsections "; if (lorun < hirun) { query += Form("where (run_number = %i and section_number >= %i) ",lorun,losec); query += Form("or (run_number > %i and run_number < %i) ",lorun,hirun); query += Form("or (run_number = %i and section_number <= %i)",hirun,hisec); } else { query += Form("where run_number = %i and section_number >= %i ",lorun,losec); query += Form("and section_number <= %i",hisec); } Query(query.Data(),res); LumAverageOnline = 0; LumIntegralOnline = 0; LumAverageOffline = 0; LumIntegralOffline = 0; row = (TOracleRow*) res->Next(); if (row) { LumAverageOnline += (*((float*) row->GetFieldData( 0))); LumIntegralOnline += (*((float*) row->GetFieldData( 1))); LumAverageOffline += (*((float*) row->GetFieldData( 2))); LumIntegralOffline += (*((float*) row->GetFieldData( 3))); } return 0; } //_____________________________________________________________________________ Int_t TCdfOracle::GetRunSummary(Int_t RunNumber, TStnRunSummary* Rs) { // TSQLResult* res; //----------------------------------------------------------------------------- // the query is quite specialised, so one has to be extremely careful, // we know that only one row is retrieved //----------------------------------------------------------------------------- float b0initlumi, b0termlumi, lumi_tev , lumi_tape, livetime; TString slumi_tev; TString slumi_tape; TString day; TString time; TString slivetime; TString trigger_table_name; int iw; unsigned long myron_mode, l1_early; int l1accepts, l2accepts, l3accepts; unsigned long chk_status, beam_status, goodrun_status, offline_status; unsigned long clc_status, cal_status, smx_status, ces_status, pes_status, cot_status, svx_status, isl_status, l00_status, cmu_status, cmp_status, cmx_status, imu_status, tof_status, l1t_status, l2t_status, l3t_status, svt_status, mpl_status, bsc_status; unsigned long clc_offline, cal_offline, smx_offline, ces_offline, pes_offline, cot_offline, svx_offline, isl_offline, l00_offline, cmu_offline, cmp_offline, cmx_offline, imu_offline, tof_offline, l1t_offline, l2t_offline, l3t_offline, svt_offline, mpl_offline, bsc_offline; TString query; query = "SELECT RS.MYRONMODE, RS.L1EARLY, "; query += "TO_CHAR((rc.B0INTEGRATEDLUMI_TERMINATE-rc.B0INTEGRATEDLUMI_ACTIVATE),'999990.999'), "; query += "TO_CHAR((rc.B0INTEGRATEDLIVELUMI_TERMINATE-rc.B0INTEGRATEDLIVELUMI_ACTIVATE),'999990.999'), "; query += "TO_CHAR(RC.CREATETIME,'YYYY.MM.DD'), TO_CHAR(RC.ACTIVATETIME,'HH24:MI:SS'), "; query += "rundb.clock_to_time(LIVETIME), "; query += "RS.PHYSICSTABLENAME||' ['||RS.PHYSICSTABLETAG||','"; query += "||RS.L3TAGSET||']',"; query += "rst.CHECKED_STATUS, "; query += "'['||to_char(rc.l1accepts)||']', rc.l2accepts, rc.csl_eventsunique, "; query += "RC.BEAM_STATUS, RST.GOODRUN_STATUS, RST.OFFLINE_STATUS, "; query += "RST.CLC_STATUS, RST.CAL_STATUS, RST.SMX_STATUS, "; query += "RST.COT_STATUS, RST.SVX_STATUS, RST.ISL_STATUS, RST.L00_STATUS, "; query += "RST.CMU_STATUS, RST.CMP_STATUS, RST.CMX_STATUS, RST.IMU_STATUS, "; query += "RST.TOF_STATUS, "; query += "RST.L1T_STATUS, RST.L2T_STATUS, RST.L3T_STATUS, RST.SVT_STATUS, "; query += "RST.MNP_STATUS, RST.BSC_STATUS, "; query += "RST.CSMX_STATUS, RST.PSMX_STATUS, "; query += "rc.b0luminosity_activate, rc.b0luminosity_terminate "; query += "FROM runconfigurations rc, runsets rs, run_status rst "; // query += Form("WHERE RC.RUNNUMBER = %i ",RunNumber); query += "AND RC.RS_NAME=RS.NAME "; query += "AND RST.RUNNUMBER=RC.RUNNUMBER "; Query(query.Data(),res); TOracleRow* row = (TOracleRow*) res->Next(); if (row == 0) return -1; myron_mode = (*((int*) row->GetFieldData( 0))); l1_early = (*((int*) row->GetFieldData( 1))); slumi_tev = Strip(row->GetFieldData( 2)); slumi_tape = Strip(row->GetFieldData( 3)); day = Strip(row->GetFieldData( 4)); time = Strip(row->GetFieldData( 5)); slivetime = Strip(row->GetFieldData( 6)); trigger_table_name = Strip(row->GetFieldData( 7)); chk_status = (*((int*) row->GetFieldData( 8))); sscanf(row->GetFieldData( 9),"[%i]",&l1accepts); l2accepts = (*((int*) row->GetFieldData(10))); l3accepts = (*((int*) row->GetFieldData(11))); beam_status = (*((int*) row->GetFieldData(12))); goodrun_status = (*((int*) row->GetFieldData(13))); offline_status = (*((int*) row->GetFieldData(14))); clc_status = (*((int*) row->GetFieldData(15))); cal_status = (*((int*) row->GetFieldData(16))); smx_status = (*((int*) row->GetFieldData(17))); cot_status = (*((int*) row->GetFieldData(18))); svx_status = (*((int*) row->GetFieldData(19))); isl_status = (*((int*) row->GetFieldData(20))); l00_status = (*((int*) row->GetFieldData(21))); cmu_status = (*((int*) row->GetFieldData(22))); cmp_status = (*((int*) row->GetFieldData(23))); cmx_status = (*((int*) row->GetFieldData(24))); imu_status = (*((int*) row->GetFieldData(25))); tof_status = (*((int*) row->GetFieldData(26))); l1t_status = (*((int*) row->GetFieldData(27))); l2t_status = (*((int*) row->GetFieldData(28))); l3t_status = (*((int*) row->GetFieldData(29))); svt_status = (*((int*) row->GetFieldData(30))); mpl_status = (*((int*) row->GetFieldData(31))); bsc_status = (*((int*) row->GetFieldData(32))); ces_status = (*((int*) row->GetFieldData(33))); pes_status = (*((int*) row->GetFieldData(34))); b0initlumi = (*((float*) row->GetFieldData(35))); b0termlumi = (*((float*) row->GetFieldData(36))); delete res; //----------------------------------------------------------------------------- // workaround limitation of OracleRoot: n(columns) <= 40 //----------------------------------------------------------------------------- query = "select "; query += "RST.CLC_OFFLINE, RST.CAL_OFFLINE, "; query += "RST.SMX_OFFLINE, "; query += "RST.COT_OFFLINE, RST.SVX_OFFLINE, RST.ISL_OFFLINE, RST.L00_OFFLINE, "; query += "RST.CMU_OFFLINE, RST.CMP_OFFLINE, RST.CMX_OFFLINE, RST.IMU_OFFLINE, "; query += "RST.TOF_OFFLINE, "; query += "RST.L1T_OFFLINE, RST.L2T_OFFLINE, RST.L3T_OFFLINE, RST.SVT_OFFLINE, "; query += "RST.MNP_OFFLINE, RST.BSC_OFFLINE, "; query += "RST.CSMX_OFFLINE, RST.PSMX_OFFLINE "; query += "FROM RUNCONFIGURATIONS RC,RUN_STATUS RST "; query += Form("WHERE RST.RUNNUMBER = %i ",RunNumber); query += "AND RC.RUNNUMBER=RST.RUNNUMBER "; Query(query.Data(),res); row = (TOracleRow*) res->Next(); if (res == 0) return -1; clc_offline = (*((int*) row->GetFieldData( 0))); cal_offline = (*((int*) row->GetFieldData( 1))); smx_offline = (*((int*) row->GetFieldData( 2))); cot_offline = (*((int*) row->GetFieldData( 3))); svx_offline = (*((int*) row->GetFieldData( 4))); isl_offline = (*((int*) row->GetFieldData( 5))); l00_offline = (*((int*) row->GetFieldData( 6))); cmu_offline = (*((int*) row->GetFieldData( 7))); cmp_offline = (*((int*) row->GetFieldData( 8))); cmx_offline = (*((int*) row->GetFieldData( 9))); imu_offline = (*((int*) row->GetFieldData(10))); tof_offline = (*((int*) row->GetFieldData(11))); l1t_offline = (*((int*) row->GetFieldData(12))); l2t_offline = (*((int*) row->GetFieldData(13))); l3t_offline = (*((int*) row->GetFieldData(14))); svt_offline = (*((int*) row->GetFieldData(15))); mpl_offline = (*((int*) row->GetFieldData(16))); bsc_offline = (*((int*) row->GetFieldData(17))); ces_offline = (*((int*) row->GetFieldData(18))); pes_offline = (*((int*) row->GetFieldData(19))); Rs->SetRunNumber(RunNumber); Rs->SetMyronMode(myron_mode); Rs->SetL1Early (l1_early); Rs->SetTriggerTableName(trigger_table_name.Data()); lumi_tev = atof(slumi_tev.Data()); lumi_tape = atof(slumi_tape.Data()); // int h,m,s,d; sscanf(slivetime.Data(),"%i:%i:%i.%i",&h,&m,&s,&d); livetime = h*3600.+m*60+s+d/10.; Rs->SetLumiTev(lumi_tev); Rs->SetLumiTape(lumi_tape); Rs->SetLivetime(livetime); Rs->SetDate(day.Data()); Rs->SetTime(time.Data()); Rs->SetB0InitLumi(b0initlumi); Rs->SetB0TermLumi(b0termlumi); Rs->SetL1Accepts(l1accepts); Rs->SetL2Accepts(l2accepts); Rs->SetL3Accepts(l3accepts); Rs->SetBeamStatus(beam_status); Rs->SetGoodRunStatus(goodrun_status); //----------------------------------------------------------------------------- // now form bit-packed status word //----------------------------------------------------------------------------- iw = ( ((goodrun_status & 0x1) ) | ((chk_status & 0x1) << 2) | ((beam_status & 0x1) << 3) | ((offline_status & 0x1) << 4) | ((clc_status & 0x1) << 5) | ((cal_status & 0x1) << 6) | ((smx_status & 0x1) << 7) | ((cot_status & 0x1) << 8) | ((svx_status & 0x1) << 9) | ((isl_status & 0x1) << 10) | ((l00_status & 0x1) << 11) | ((cmu_status & 0x1) << 12) | ((cmp_status & 0x1) << 13) | ((cmx_status & 0x1) << 14) | ((imu_status & 0x1) << 15) | ((tof_status & 0x1) << 16) | ((l1t_status & 0x1) << 17) | ((l2t_status & 0x1) << 18) | ((l3t_status & 0x1) << 19) | ((svt_status & 0x1) << 20) | ((mpl_status & 0x1) << 21) | ((bsc_status & 0x1) << 22) | ((ces_status & 0x1) << 23) | ((pes_status & 0x1) << 24) ); Rs->SetStatusWord(iw); //----------------------------------------------------------------------------- // bit-packed offline status word //----------------------------------------------------------------------------- iw = ( ((clc_offline & 0x1) << 5) | ((cal_offline & 0x1) << 6) | ((smx_offline & 0x1) << 7) | ((cot_offline & 0x1) << 8) | ((svx_offline & 0x1) << 9) | ((isl_offline & 0x1) << 10) | ((l00_offline & 0x1) << 11) | ((cmu_offline & 0x1) << 12) | ((cmp_offline & 0x1) << 13) | ((cmx_offline & 0x1) << 14) | ((imu_offline & 0x1) << 15) | ((tof_offline & 0x1) << 16) | ((l1t_offline & 0x1) << 17) | ((l2t_offline & 0x1) << 18) | ((l3t_offline & 0x1) << 19) | ((svt_offline & 0x1) << 20) | ((mpl_offline & 0x1) << 21) | ((bsc_offline & 0x1) << 22) | ((ces_offline & 0x1) << 23) | ((pes_offline & 0x1) << 24) ); Rs->SetOfflineStatusWord(iw); //----------------------------------------------------------------------------- // do offline luminosity //----------------------------------------------------------------------------- query = "select rs.lum_integral_online, rs.lum_integral_offline "; query += Form("from filecatalog.cdf2_runsections rs where rs.run_number = %i", RunNumber); //----------------------------------------------------------------------------- // now loop over the runsections //----------------------------------------------------------------------------- float lumi_online, lumi_offline, lumi_sum_online, lumi_sum_offline; lumi_sum_online = 0.; lumi_sum_offline = 0.; Query(query.Data(),res); while ((row = (TOracleRow*) res->Next())) { lumi_online = *((float*) row->GetFieldData(0)); lumi_offline = *((float*) row->GetFieldData(1)); lumi_sum_online += lumi_online; lumi_sum_offline += lumi_offline; } Rs->SetOnlineLumiRS (lumi_sum_online); Rs->SetOfflineLumiRS(lumi_sum_offline); delete res; if (fForceDisconnect) Disconnect(); return 0; } //_____________________________________________________________________________ Int_t TCdfOracle::GetListOfSetRunMaps(int Jobset, TObjArray* List) { //----------------------------------------------------------------------------- // // //----------------------------------------------------------------------------- TSQLResult* res; QueryListOfSetRunMaps(Jobset,res); TSetRunMaps* x; TOracleRow* row; List->Delete(); while ((row = (TOracleRow*) res->Next())) { x = new TSetRunMaps(); x->fPROCESS_NAME = Strip(row->GetFieldData ( 0)); x->fCID = *((int*) row->GetFieldData( 1)); x->fJOBSET = *((int*) row->GetFieldData( 2)); x->fCREATE_DATE = *((int*) row->GetFieldData( 3)); x->fCREATE_USER = Strip(row->GetFieldData ( 4)); x->fTSID = *((int*) row->GetFieldData( 5)); x->fUPDATE_DATE = *((int*) row->GetFieldData( 6)); x->fUPDATE_USER = Strip(row->GetFieldData ( 7)); x->fCREATE_HOST = Strip(row->GetFieldData ( 8)); x->fUPDATE_HOST = Strip(row->GetFieldData ( 9)); x->fFINISHED = *((int*) row->GetFieldData(10)); List->Add((TObject*)x); } delete res; if (fForceDisconnect) Disconnect(); return 0; } //_____________________________________________________________________________ Int_t TCdfOracle::GetTrigger(const char* Name, Int_t Level, Int_t RunNumber, TStnTrigger* Trigger) { // query returns more than we need here TSQLResult* res; int bit; QueryTrigger(Name,Level,RunNumber,res,bit); Trigger->SetName(Name); TOracleRow* row; while ((row = (TOracleRow*) res->Next())) { if (Level != 3) { Trigger->SetBit (*((int*) row->GetFieldData(4))); Trigger->SetTag (*((int*) row->GetFieldData(6))); Trigger->SetId (*((int*) row->GetFieldData(5))); } else { Trigger->SetBit (bit); Trigger->SetTag (*((int*) row->GetFieldData(6))); Trigger->SetId (*((int*) row->GetFieldData(5))); } Trigger->SetLevel(Level); } return 0; } //_____________________________________________________________________________ Int_t TCdfOracle::GetOffscl(Int_t RunNumber, const char* ProcessName, const char* PassName, const char* Component, TOffscl* Offscl) { // query returns more than we need here TUsedSet* used_set; TObjArray list_of_used_sets; TObjArray list; int old_force = fForceDisconnect; GetListOfUsedSets(ProcessName,PassName,&list_of_used_sets,RunNumber,RunNumber); int n = list_of_used_sets.GetEntriesFast(); used_set = (TUsedSet*) list_of_used_sets.At(n-1); //----------------------------------------------------------------------------- // do something sensible, expect only one result //----------------------------------------------------------------------------- TSQLResult* res; TString query; TOracleRow* row; query = "select srm.cid from set_run_maps srm, calibrunlists crl "; query += Form("where srm.jobset=%i and ",used_set->fJOBSET); query += "srm.cid=crl.cid and crl.calib_table=\'OFFSCL\'"; Query(query.Data(),res); row = (TOracleRow*) res->Next(); int cid = (*((int* ) row->GetFieldData(0))); query = Form("select * from OFFSCL where cid=%i and compname=\'%s\'", cid, Component); Query(query.Data(),res); row = (TOracleRow*) res->Next(); Offscl->fCID = (*((int* ) row->GetFieldData(0))); Offscl->fCOMPONENT = (*((int* ) row->GetFieldData(1))); Offscl->fCALIB = (*((float*) row->GetFieldData(2))); Offscl->fCOMPNAME = Strip(row->GetFieldData(3)); delete res; fForceDisconnect = old_force; if (fForceDisconnect) Disconnect(); return 0; } //_____________________________________________________________________________ Int_t TCdfOracle::GetTriggerTable(Int_t RunNumber, TStnTriggerTable* Table) { Warning("GetTriggerTable","not implemented yet"); return -1; } //_____________________________________________________________________________ Int_t TCdfOracle::GetTriggerTableName(Int_t RunNumber, TString& Name) { TSQLResult* res; TOracleRow* row; int run_number; QueryTriggerTableName(RunNumber,res); row = (TOracleRow*) res->Next(); run_number = *((int*) row->GetFieldData(0)); Name = Strip(row->GetFieldData(1)); delete res; return 0; } //_____________________________________________________________________________ void TCdfOracle::GetTriggerConditions(const char* TriggerName, Int_t Level, TObjArray*& List, int RunMin, int RunMax) { // name includes level anyway TSQLResult* res; TOracleRow* row; TObjArray* list_of_good_runs; List->Delete(); list_of_good_runs = new TObjArray(100); //----------------------------------------------------------------------------- // everything starts from retrieving the list of good runs // this returns a list of TStnRunSummary objects //----------------------------------------------------------------------------- GetListOfGoodRuns(list_of_good_runs,RunMin,RunMax); //----------------------------------------------------------------------------- // for different runs the same trigger may correspond to different bits //----------------------------------------------------------------------------- int nruns = list_of_good_runs->GetEntriesFast(); TStnTrigger* trigger = new TStnTrigger(); for (int i=0; iAt(i); //----------------------------------------------------------------------------- // find list of triggers, matching given pattern - hope there will be just one // trigger name includes its level, so there should not be any confusion //----------------------------------------------------------------------------- GetTrigger(TriggerName,Level,rs->RunNumber(),trigger); QueryTriggerConditions(trigger->Bit(), Level, res, rs->RunNumber(), rs->RunNumber()); while ((row = (TOracleRow*) res->Next())) { TTriggerConditions* tc = new TTriggerConditions(); if (Level == 1) { tc->fRunNumber = *((int*) row->GetFieldData(0)); tc->fBit = *((int*) row->GetFieldData(1)); tc->fCreateTime = Strip(row->GetFieldData(2)); tc->fFrontendTime = *((int*) row->GetFieldData(3)); tc->fUnprescaled = *((int*) row->GetFieldData(4)); tc->fPrescaled = *((int*) row->GetFieldData(5)); tc->fLive = *((int*) row->GetFieldData(6)); } else if (Level == 2) { tc->fRunNumber = *((int*) row->GetFieldData(0)); tc->fBit = *((int*) row->GetFieldData(1)); tc->fCreateTime = Strip(row->GetFieldData(2)); tc->fFrontendTime = *((int*) row->GetFieldData(3)); tc->fUnprescaled = *((int*) row->GetFieldData(4)); tc->fPrescaled = *((int*) row->GetFieldData(5)); tc->fLive = tc->fPrescaled; } else if (Level == 3) { tc->fRunNumber = *((int*) row->GetFieldData(0)); tc->fBit = *((int*) row->GetFieldData(1)); tc->fCreateTime = Strip(row->GetFieldData(2)); tc->fFrontendTime = *((int*) row->GetFieldData(3)); tc->fPrescaled = *((int*) row->GetFieldData(4)); tc->fUnprescaled = tc->fPrescaled; tc->fLive = tc->fPrescaled; } tc->fName = trigger->Name(); tc->fLevel = Level; // and add new "trigger condition" // to the list List->Add(tc); } } delete trigger; list_of_good_runs->Delete(); delete list_of_good_runs; } //_____________________________________________________________________________ Int_t TCdfOracle::GetListOfFiles(TObjArray* List, const char* Dataset, Int_t Run1, Int_t Run2) { TSQLResult* res; TOracleRow* row; List->Delete(); QueryListOfFiles(Dataset,Run1,Run2,res); int n = 0; while ((row = (TOracleRow*) res->Next())) { n += 1; TCdf2Files* f = new TCdf2Files(); f->fDS_NAME_ID = Strip(row->GetFieldData(0)); f->fFILE_NAME = Strip(row->GetFieldData(1)); f->fCREATION_TIME = *((int*) row->GetFieldData(2)); f->fFILE_SIZE = *((float*) row->GetFieldData(3)); f->fEVENT_COUNT = *((int*) row->GetFieldData(4)); f->fLOW_EVENT = *((int*) row->GetFieldData(5)); f->fLOW_RUN = *((int*) row->GetFieldData(6)); f->fHIGH_EVENT = *((int*) row->GetFieldData(7)); f->fHIGH_RUN = *((int*) row->GetFieldData(8)); f->fLUM_SUM_ONLINE = *((float*) row->GetFieldData(9)); f->fLUM_SUM_OFFLINE = *((float*) row->GetFieldData(10)); f->fCREATE_USER = Strip(row->GetFieldData(11)); f->fCREATE_DATE = *((int*) row->GetFieldData(12)); f->fUPDATE_USER = Strip(row->GetFieldData(13)); f->fUPDATE_DATE = *((int*) row->GetFieldData(14)); f->fFILESET_NAME = Strip(row->GetFieldData(15)); f->fSTATUS = *((int*) row->GetFieldData(16)); List->Add(f); } if (fForceDisconnect) Disconnect(); return 0; } //_____________________________________________________________________________ Int_t TCdfOracle::GetListOfFiles(TObjArray* List, const char* Book, const char* Dataset, const char* Fileset) { // TSQLResult* res; TOracleRow* row; List->Delete(); QueryListOfFiles(Book,Dataset,Fileset,res); int n = 0; while ((row = (TOracleRow*) res->Next())) { n += 1; TCdf2Files* f = new TCdf2Files(); f->fDS_NAME_ID = Strip(row->GetFieldData(0)); f->fFILE_NAME = Strip(row->GetFieldData(1)); f->fCREATION_TIME = *((int*) row->GetFieldData(2)); f->fFILE_SIZE = *((float*) row->GetFieldData(3)); f->fEVENT_COUNT = *((int*) row->GetFieldData(4)); f->fLOW_EVENT = *((int*) row->GetFieldData(5)); f->fLOW_RUN = *((int*) row->GetFieldData(6)); f->fHIGH_EVENT = *((int*) row->GetFieldData(7)); f->fHIGH_RUN = *((int*) row->GetFieldData(8)); f->fLUM_SUM_ONLINE = *((float*) row->GetFieldData(9)); f->fLUM_SUM_OFFLINE = *((float*) row->GetFieldData(10)); f->fCREATE_USER = Strip(row->GetFieldData(11)); f->fCREATE_DATE = *((int*) row->GetFieldData(12)); f->fUPDATE_USER = Strip(row->GetFieldData(13)); f->fUPDATE_DATE = *((int*) row->GetFieldData(14)); f->fFILESET_NAME = Strip(row->GetFieldData(15)); f->fSTATUS = *((int*) row->GetFieldData(16)); List->Add(f); } if (fForceDisconnect) Disconnect(); return 0; } //_____________________________________________________________________________ Int_t TCdfOracle::GetListOfFiles(TObjArray* List, const char* Dataset, const char* Fileset) { // char book[100], dsname[100]; ParseDatasetName(Dataset,dsname,book); return GetListOfFiles(List,book,dsname,Fileset); } //_____________________________________________________________________________ Int_t TCdfOracle::GetListOfOpenSessions(TObjArray* List) { TSQLResult* res; TOracleRow* row; List->Delete(); QueryListOfOpenSessions(res); int n = 0; while ((row = (TOracleRow*) res->Next())) { n += 1; TOracleSession* s = new TOracleSession(); s->fPROGRAM = Strip( row->GetFieldData( 0)); s->fLOGON_TIME = *((int*) row->GetFieldData( 1)); s->fOSUSER = Strip( row->GetFieldData( 2)); s->fMACHINE = Strip( row->GetFieldData( 3)); s->fPROCESS = Strip( row->GetFieldData( 4)); s->fTERMINAL = Strip( row->GetFieldData( 5)); s->fTYPE = Strip( row->GetFieldData( 6)); s->fSID = *((int*) row->GetFieldData( 7)); s->fSERIAL = *((int*) row->GetFieldData( 8)); s->fSCHEMANAME = Strip( row->GetFieldData( 9)); s->fMODULE = Strip( row->GetFieldData(10)); s->fSTATUS = Strip( row->GetFieldData(11)); List->Add(s); } if (fForceDisconnect) Disconnect(); return n; } //_____________________________________________________________________________ void TCdfOracle::GetListOfUsedSets(const char* ProcessName, const char* PassName, TObjArray* List, int RunMin, int RunMax, int All) { TSQLResult* res; TOracleRow* row; List->Delete(); QueryUsedSets(ProcessName,PassName,res,RunMin,RunMax,All); while ((row = (TOracleRow*) res->Next())) { TUsedSet* us = new TUsedSet(); us->fJOBSET = *((int*) row->GetFieldData(0)); us->fPROCESS_NAME = Strip(row->GetFieldData(1)); us->fPROCESS_RUN = *((int*) row->GetFieldData(2)); us->fPROC_CALIB_VERSION = Strip(row->GetFieldData(3)); us->fDBNAME = Strip(row->GetFieldData(4)); us->fCREATE_DATE = *((int*) row->GetFieldData(5)); us->fCREATE_USER = Strip(row->GetFieldData(6)); us->fTSID = *((int*) row->GetFieldData(7)); us->fUPDATE_DATE = *((int*) row->GetFieldData(8)); us->fUPDATE_USER = Strip(row->GetFieldData(9)); us->fPROC_TAG = *((int*) row->GetFieldData(10)); us->fPROCESS_STATUS = Strip(row->GetFieldData(11)); us->fUSID = *((int*) row->GetFieldData(12)); us->fCREATE_HOST = Strip(row->GetFieldData(13)); us->fUPDATE_HOST = Strip(row->GetFieldData(14)); List->Add(us); } } //_____________________________________________________________________________ Int_t TCdfOracle::GetListOfRuns(TObjArray* List, Int_t Run1, Int_t Run2) { // get list of good runs TSQLResult* res; QueryListOfRuns(Run1,Run2,0,res); List->Delete(); TOracleRow* row; while ((row = (TOracleRow*) res->Next())) { TStnRunSummary* r = new TStnRunSummary(); r->SetRunNumber (*((int*) row->GetFieldData(0))); r->SetTriggerTableName(Strip(row->GetFieldData(1))); r->SetTriggerTableTag (*((int*) row->GetFieldData(2))); r->SetL1Accepts (-1); r->SetL2Accepts (*((int*) row->GetFieldData(3))); r->SetL3Accepts (*((int*) row->GetFieldData(4))); r->SetMyronMode (0); r->SetL1Early (0); r->SetLumiTev (atof(row->GetFieldData(5))); r->SetLumiTape (atof(row->GetFieldData(6))); r->SetLivetime (atof(row->GetFieldData(7))); r->SetDate (Strip(row->GetFieldData(8))); r->SetTime (Strip(row->GetFieldData(9))) ; r->SetGoodRunStatus (*((int*) row->GetFieldData(10))); r->SetB0InitLumi (*((float*) row->GetFieldData(11))); r->SetB0TermLumi (*((float*) row->GetFieldData(12))); List->Add((TObject*)r); } delete res; if (fForceDisconnect) Disconnect(); return 0; } //_____________________________________________________________________________ Int_t TCdfOracle::GetListOfRuns(TObjArray* List, const char* Date1, const char* Date2) { // get list of good runs TSQLResult* res; QueryListOfRuns(Date1,Date2,0,res); List->Delete(); TOracleRow* row; while ((row = (TOracleRow*) res->Next())) { TStnRunSummary* r = new TStnRunSummary(); r->SetRunNumber (*((int*) row->GetFieldData(0))); r->SetTriggerTableName(Strip(row->GetFieldData(1))); r->SetTriggerTableTag (*((int*) row->GetFieldData(2))); r->SetL1Accepts (-1); r->SetL2Accepts (*((int*) row->GetFieldData(3))); r->SetL3Accepts (*((int*) row->GetFieldData(4))); r->SetMyronMode (0); r->SetL1Early (0); r->SetLumiTev (atof(row->GetFieldData(5))); r->SetLumiTape (atof(row->GetFieldData(6))); r->SetLivetime (atof(row->GetFieldData(7))); r->SetDate (Strip(row->GetFieldData(8))); r->SetTime (Strip(row->GetFieldData(9))) ; r->SetGoodRunStatus (*((int*) row->GetFieldData(10))); r->SetB0InitLumi (*((float*) row->GetFieldData(11))); r->SetB0TermLumi (*((float*) row->GetFieldData(12))); List->Add((TObject*)r); } delete res; if (fForceDisconnect) Disconnect(); return 0; } //_____________________________________________________________________________ Int_t TCdfOracle::GetListOfGoodRuns(TObjArray* List, Int_t Run1, Int_t Run2) { // get list of good runs TSQLResult* res; QueryListOfRuns(Run1,Run2,1,res); List->Delete(); TOracleRow* row; while ((row = (TOracleRow*) res->Next())) { TStnRunSummary* r = new TStnRunSummary(); r->SetRunNumber (*((int*) row->GetFieldData(0))); r->SetTriggerTableName(Strip(row->GetFieldData(1))); r->SetTriggerTableTag (*((int*) row->GetFieldData(2))); r->SetL1Accepts (-1); r->SetL2Accepts (*((int*) row->GetFieldData(3))); r->SetL3Accepts (*((int*) row->GetFieldData(4))); r->SetMyronMode (0); r->SetL1Early (0); r->SetLumiTev (atof(row->GetFieldData(5))); r->SetLumiTape (atof(row->GetFieldData(6))); r->SetLivetime (atof(row->GetFieldData(7))); r->SetDate (Strip(row->GetFieldData(8))); r->SetTime (Strip(row->GetFieldData(9))) ; r->SetGoodRunStatus (*((int*) row->GetFieldData(10))); r->SetB0InitLumi (*((float*) row->GetFieldData(11))); r->SetB0TermLumi (*((float*) row->GetFieldData(12))); List->Add((TObject*)r); } delete res; if (fForceDisconnect) Disconnect(); return 0; } //_____________________________________________________________________________ Int_t TCdfOracle::GetListOfGoodRuns(TObjArray* List, const char* Date1, const char* Date2) { // get list of good runs TSQLResult* res; QueryListOfRuns(Date1,Date2,1,res); List->Delete(); TOracleRow* row; while ((row = (TOracleRow*) res->Next())) { TStnRunSummary* r = new TStnRunSummary(); r->SetRunNumber (*((int*) row->GetFieldData(0))); r->SetTriggerTableName(Strip(row->GetFieldData(1))); r->SetTriggerTableTag (*((int*) row->GetFieldData(2))); r->SetL1Accepts (-1); r->SetL2Accepts (*((int*) row->GetFieldData(3))); r->SetL3Accepts (*((int*) row->GetFieldData(4))); r->SetMyronMode (0); r->SetL1Early (0); r->SetLumiTev (atof(row->GetFieldData(5))); r->SetLumiTape (atof(row->GetFieldData(6))); r->SetLivetime (0); r->SetDate (Strip(row->GetFieldData(7))); r->SetTime (Strip(row->GetFieldData(8))) ; r->SetGoodRunStatus (*((int*) row->GetFieldData(9))); r->SetB0InitLumi (*((float*) row->GetFieldData(11))); r->SetB0TermLumi (*((float*) row->GetFieldData(12))); List->Add((TObject*)r); } delete res; if (fForceDisconnect) Disconnect(); return 0; } //_____________________________________________________________________________ void TCdfOracle::GetListOfRunSections(int Run1, int Run2, TObjArray* List) { TSQLResult* res; TOracleRow* row; List->Delete(); QueryListOfRunSections(Run1,Run2,res); while ((row = (TOracleRow*) res->Next())) { TCdf2RunSections* rs = new TCdf2RunSections(); rs->fRUN_NUMBER = *((int* ) row->GetFieldData( 0)); rs->fSECTION_NUMBER = *((int* ) row->GetFieldData( 1)); rs->fBIRTH_TIME = *((int* ) row->GetFieldData( 2)); rs->fLOW_EVENT = *((int* ) row->GetFieldData( 3)); rs->fHIGH_EVENT = *((int* ) row->GetFieldData( 4)); rs->fLUM_AVERAGE_ONLINE = *((float*) row->GetFieldData( 5)); rs->fLUM_AVERAGE_OFFLINE = *((float*) row->GetFieldData( 6)); rs->fLUM_INTEGRAL_ONLINE = *((float*) row->GetFieldData( 7)); rs->fLUM_INTEGRAL_OFFLINE = *((float*) row->GetFieldData( 8)); rs->fDATA_QUALITY = *((int* ) row->GetFieldData( 9)); rs->fLUMINOSITY_VERSION = *((int* ) row->GetFieldData(10)); List->Add(rs); } if (fForceDisconnect) Disconnect(); delete res; } //_____________________________________________________________________________ Int_t TCdfOracle::GetRunSection(int RunNumber, Int_t EventNumber, TCdf2RunSections* RunSection) { TSQLResult* res; TOracleRow* row; TCdf2RunSections rs; Int_t rc; rc = -1; QueryListOfRunSections(RunNumber,RunNumber,res); while ((row = (TOracleRow*) res->Next())) { rs.fRUN_NUMBER = *((int* ) row->GetFieldData( 0)); rs.fSECTION_NUMBER = *((int* ) row->GetFieldData( 1)); rs.fBIRTH_TIME = *((int* ) row->GetFieldData( 2)); rs.fLOW_EVENT = *((int* ) row->GetFieldData( 3)); rs.fHIGH_EVENT = *((int* ) row->GetFieldData( 4)); rs.fLUM_AVERAGE_ONLINE = *((float*) row->GetFieldData( 5)); rs.fLUM_AVERAGE_OFFLINE = *((float*) row->GetFieldData( 6)); rs.fLUM_INTEGRAL_ONLINE = *((float*) row->GetFieldData( 7)); rs.fLUM_INTEGRAL_OFFLINE = *((float*) row->GetFieldData( 8)); rs.fDATA_QUALITY = *((int* ) row->GetFieldData( 9)); rs.fLUMINOSITY_VERSION = *((int* ) row->GetFieldData(10)); rs.fLIVETIME = *((int* ) row->GetFieldData(11)); rs.fRUNTIME = *((int* ) row->GetFieldData(12)); if ((rs.fLOW_EVENT <= EventNumber) && (rs.fHIGH_EVENT >= EventNumber)) { //----------------------------------------------------------------------------- // found the run section we were looking for //----------------------------------------------------------------------------- memcpy(RunSection,&rs,sizeof(TCdf2RunSections)); rc = 0; break; } } delete res; return rc; } //_____________________________________________________________________________ Int_t TCdfOracle::GetOnlineLuminosity(Int_t RunNumber, Float_t& LumiTev, Float_t& LumiLive) { // get luminosity for a given run from the database char text[100]; TString query; query = "select "; query += "B0INTEGRATEDLUMI_TERMINATE,B0INTEGRATEDLUMI_ACTIVATE, "; query += "B0INTEGRATEDLIVELUMI_TERMINATE,B0INTEGRATEDLIVELUMI_ACTIVATE "; query += Form("FROM RUNCONFIGURATIONS WHERE RUNNUMBER = %i",RunNumber); if (Verbose()) printf("%s\n",query.Data()); TSQLResult* res; Query(query.Data(),res); LumiTev = -1; LumiLive = -1.; if (! res) return -1; int rc = 0; TOracleRow* row = (TOracleRow*) res->Next(); if (row) { LumiTev =*((float*)row->GetFieldData(0))-*((float*)row->GetFieldData(1)); LumiLive =*((float*)row->GetFieldData(2))-*((float*)row->GetFieldData(3)); } else { rc = -2; } delete res; return rc; if (fForceDisconnect) Disconnect(); }