// // Ray Culbertson and Hartmut Stadie // 6/4/01 - change branch names - make them unique // 7/4/01 - add tev store number #include "cstdlib" #include #include #include #include #include "Alignment/CotBeam.hh" #include "Alignment/SvxBeam.hh" #include "TROOT.h" #include "TFile.h" #include "TTree.h" #include "CalibDB/RunListDefs.hh" #include "CalibDB/UsedSetKey.hh" #include "CalibDB/UsedSetDefs.hh" #include "CalibDB/ValidSetKey.hh" #include "CalibDB/ValidSetDefs.hh" #include "RunConfigDB/BEAM_CONDITIONS.Defs.hh" #include "DBManager/ConControl.hh" #include "DBManager/IoEntry.hh" using std::string; using std::ostringstream; struct cotBeamEntry { float cotBeamX, cotBeamY, cotSlopeX, cotSlopeY; int cotTableVersion,cotTableStatus; float cotBeamXSigma, cotBeamYSigma, cotSlopeXSigma, cotSlopeYSigma; float cotWidthX, cotWidthY, cotWidthXY, cotBeamZ, cotWidthZ; float cotBeamXRate, cotBeamYRate, cotSlopeXRate, cotSlopeYRate; float cotWidthXRate, cotWidthYRate, cotWidthXYRate; float cotBeamZRate, cotWidthZRate; float cotMinimZFit, cotWidthZFit, cotBstarZFit, cotZzeroZFit; float cotMinimZFitRate, cotWidthZFitRate, cotBstarZFitRate, cotZzeroZFitRate; float cotFitCov00, cotFitCov01, cotFitCov02, cotFitCov03, cotFitCov11; float cotFitCov12, cotFitCov13, cotFitCov22, cotFitCov23, cotFitCov33; float cotStatistics0, cotStatistics1; int cotFlag0, cotFlag1; float cotSpare0, cotSpare1, cotSpare2, cotSpare3; }; struct svxBeamEntry { float svxBeamX, svxBeamY, svxSlopeX, svxSlopeY; int svxTableVersion,svxTableStatus; float svxBeamXSigma, svxBeamYSigma, svxSlopeXSigma, svxSlopeYSigma; float svxWidthX, svxWidthY, svxWidthXY; float svxBeamZ, svxWidthZ; float svxBeamXRate, svxBeamYRate, svxSlopeXRate, svxSlopeYRate; float svxWidthXRate, svxWidthYRate, svxWidthXYRate; float svxBeamZRate, svxWidthZRate; float svxMinimZFit, svxWidthZFit, svxBstarZFit, svxZzeroZFit; float svxMinimZFitRate, svxWidthZFitRate, svxBstarZFitRate, svxZzeroZFitRate; float svxEmittXFit, svxBstarXFit, svxZzeroXFit; float svxEmittYFit, svxBstarYFit, svxZzeroYFit; float svxEmittXRate, svxBstarXRate, svxZzeroXRate; float svxEmittYRate, svxBstarYRate, svxZzeroYRate; float svxFitCov00, svxFitCov01, svxFitCov02, svxFitCov03, svxFitCov11; float svxFitCov12, svxFitCov13, svxFitCov22, svxFitCov23, svxFitCov33; float svxStatistics0, svxStatistics1; int Flag0, Flag1; float svxSpare0, svxSpare1, svxSpare2, svxSpare3; int nTime; int chanTime[100],statTime[100]; float x0Time[100],y0Time[100],xsTime[100],ysTime[100]; }; //turn table status into a number -implemented below int statusNumber(const string status); // get storeNumber for specified run -implemented below int storeNumber(int run); int main(int argc, char* argv[]) { TROOT root("MyRoot","ROOT for BeamNTupler"); TFile *file = NULL; TTree *tree = NULL; bool qavail = false; bool qsvx = true; bool qcot = true; bool qprint = true; bool qfull = false; bool qbrief = false; bool qloadused = false; bool qntuple = false; char outfile[100]; bool writecid = false; char cidtextfile[100]; std::ofstream cidfile; char dbid[50] = "ofotl_prd_read"; char status[50] = "NONE"; int alg = -1; int version = -1; int source = -1; int history = -1; int minrun = -1; int maxrun = -1; int store = -1; int apt = 1; while(apt1000000) { std::cout << "Bad run number '" << argv[apt] << "'" << std::endl; std::cout << "Try " << argv[0] << " -help " << std::endl; return 1; } if(minrun==-1) { minrun = i; maxrun = i; } else { maxrun = i; } } // end multiple ifs apt++; } // end while loop if((minrun==-1) || (store != -1)){ // no range specified at all // could also find good range from db... minrun=100000; maxrun=200000; } if(store != -1) { std::cout << "Reading from "<size()]; for(RunList::iterator iter=row->begin(); iter!=row->end(); iter++) { goodrunc[ngoodc++] = iter->run(); } rlk.setTable("SvxBeamPosition"); if(runIom.get(rlk,row)!=Result::success) { std::cerr << "Failure of runIom.get() to retrieve db contents" << std::endl; } goodruns = new int[row->size()]; for(RunList::iterator iter=row->begin(); iter!=row->end(); iter++) { goodruns[ngoods++] = iter->run(); } // if asked for the list of available runs, then print those and quit if(qavail) { for(int i=0; iminrun && goodrunc[i]minrun && goodruns[i]Branch("Run",&runEntry,"run/I:store/I"); if(qcot) { tree->Branch("cEntry0",&cEntry.cotBeamX, "cotBeamX:cotBeamY:cotSlopeX:cotSlopeY"); if(!qbrief) { tree->Branch("cEntry1",&cEntry.cotTableVersion, "cotTableVersion/I:cotTableStatus"); tree->Branch("cEntry2",&cEntry.cotBeamXSigma, "cotBeamXSigma:cotBeamYSigma:cotSlopeXSigma:cotSlopeYSigma"); tree->Branch("cEntry3",&cEntry.cotWidthX, "cotWidthX:cotWidthY:cotWidthXY:cotBeamZ:cotWidthZ"); } if(qfull) { tree->Branch("cEntry4",&cEntry.cotBeamXRate, "cotBeamXRate:cotBeamYRate:cotSlopeXRate:cotSlopeYRate"); tree->Branch("cEntry5",&cEntry.cotWidthXRate, "cotWidthXRate:cotWidthYRate:cotWidthXYRate"); tree->Branch("cEntry6",&cEntry.cotBeamZRate, "cotBeamZRate:cotWidthZRate"); } if(!qbrief) { tree->Branch("cEntry7",&cEntry.cotMinimZFit, "cotMinimZFit:cotWidthZFit:cotBstarZFit:cotZzeroZFit"); } if(qfull) { tree->Branch("cEntry8",&cEntry.cotMinimZFitRate, "cotMinimZFitRate:cotWidthZFitRate:cotBstarZFitRate:cotZzeroZFitRate"); tree->Branch("cEntry9",&cEntry.cotFitCov00, "cotFitCov00:cotFitCov01:cotFitCov02:cotFitCov03:cotFitCov11"); tree->Branch("cEntrya",&cEntry.cotFitCov12, "cotFitCov12:cotFitCov13:cotFitCov22:cotFitCov23:cotFitCov33"); } if(!qbrief) { tree->Branch("cEntryb",&cEntry.cotStatistics0, "cotStatistics0:cotStatistics1"); tree->Branch("cEntryc",&cEntry.cotFlag0, "cotFlag0/I:cotFlag1"); } if(qfull) { tree->Branch("cEntryd",&cEntry.cotSpare0, "cotSpare0/F:cotSpare1:cotSpare2:cotSpare3"); } } // end if cot if(qsvx) { tree->Branch("sEntry0",&sEntry.svxBeamX, "svxBeamX:svxBeamY:svxSlopeX:svxSlopeY"); if(!qbrief) { tree->Branch("sEntry1",&sEntry.svxTableVersion, "svxTableVersion/I:svxTableStatus"); tree->Branch("sEntry2",&sEntry.svxWidthX, "svxWidthX:svxWidthY:svxWidthXY"); tree->Branch("sEntry3",&sEntry.svxBeamZ, "svxBeamZ:svxWidthZ"); } if(qfull) { tree->Branch("sEntry4",&sEntry.svxBeamXRate, "svxBeamXRate:svxBeamYRate:svxSlopeXRate:svxSlopeYRate"); tree->Branch("sEntry5",&sEntry.svxWidthXRate, "svxWidthXRate:svxWidthYRate:svxWidthXYRate"); tree->Branch("sEntry6",&sEntry.svxBeamZRate, "svxBeamZRate:svxWidthZRate"); } if(!qbrief) { tree->Branch("sEntry7",&sEntry.svxMinimZFit, "svxMinimZFit:svxWidthZFit:svxBstarZFit:svxZzeroZFit"); } if(qfull) { tree->Branch("sEntry8",&sEntry.svxMinimZFitRate, "svxMinimZFitRate:svxWidthZFitRate:svxBstarZFitRate:svxZzeroZFitRate"); } if(!qbrief) { tree->Branch("sEntry9",&sEntry.svxEmittXFit, "svxEmittXFit:svxBstarXFit:svxZzeroXFit"); tree->Branch("sEntrya",&sEntry.svxEmittYFit, "svxEmittYFit:svxBstarYFit:svxZzeroYFit"); } if(qfull) { tree->Branch("sEntryb",&sEntry.svxEmittXRate, "svxEmittXRate:svxBstarXRate:svxZzeroXRate"); tree->Branch("sEntryc",&sEntry.svxEmittYRate, "svxEmittYRate:svxBstarYRate:svxZzeroYRate"); tree->Branch("sEntryd",&sEntry.svxFitCov00, "svxFitCov00:svxFitCov01:svxFitCov02:svxFitCov03:svxFitCov11"); tree->Branch("sEntrye",&sEntry.svxFitCov12, "svxFitCov12:svxFitCov13:svxFitCov22:svxFitCov23:svxFitCov33"); } if(!qbrief) { tree->Branch("sEntryf",&sEntry.svxStatistics0, "svxStatistics0:svxStatistics1"); tree->Branch("sEntryg",&sEntry.Flag0, "Flag0/I:Flag1"); } if(qfull) { tree->Branch("sEntryh",&sEntry.svxSpare0, "svxSpare0:svxSpare1:svxSpare2:svxSpare3"); } if(!qbrief) { tree->Branch("sEntryi",&sEntry.nTime,"nTime/I"); tree->Branch("sEntryi0",sEntry.chanTime,"chanTime[nTime]/I"); tree->Branch("sEntryi1",sEntry.statTime,"statTime[nTime]/I"); tree->Branch("sEntryi2",sEntry.x0Time,"x0Time[nTime]/F"); tree->Branch("sEntryi3",sEntry.y0Time,"y0Time[nTime]/F"); tree->Branch("sEntryi4",sEntry.xsTime,"xsTime[nTime]/F"); tree->Branch("sEntryi5",sEntry.ysTime,"ysTime[nTime]/F"); } } // if svx } // end if ntuple init if(writecid) { // open text file cidfile.open(cidtextfile, std::ios::out | std::ios::trunc); } bool svxOK,cotOK; runEntry[0] = -1; runEntry[1] = -1; for(int run = minrun ; run <= maxrun ; ++run) { //get the used set static UsedSet_mgr used_mgr(dbid,"UsedSet"); static ValidSet_mgr valid_mgr(dbid,"ValidSet"); UsedSet_var used_set; if(qloadused) { std::cout << "UsedSet entries for run " << run << ":" << std::endl; if(qcot) { UsedSetKey used_set_key(ProcessTag("PAD_PHYSICS_COTBEAM"),RunVersion(run)); if(used_mgr.isValid() && (used_mgr.get(used_set_key,used_set) == Result::success)) { //std::cout << "used_set set : process " << used_set->at(0).process() << std::endl; //std::cout << " : jobset " << used_set->at(0).jobset() << std::endl; //get the valid set ValidSetKey valid_set_key(used_set->at(0).jobset()); ValidSet_var valid_set; if(valid_mgr.isValid() && (valid_mgr.get(valid_set_key,valid_set) == Result::success)) { //create if(cotbeam.loadCid(valid_set->at(0).cids_[0]) == 0) { CotBeamPosition cBeamPos(cotbeam.getRecord()); if(qbrief && qprint) { std::ios::fmtflags iflsave = std::cout.setf(std::ios::showpoint|std::ios::fixed); int ipre = std::cout.precision(5); std::cout << "Cot" << std::setw(8) << run << std::setprecision(4) << " x(cm) " << std::setw(8) << cBeamPos.BeamX() << " y(cm) " << std::setw(8) << cBeamPos.BeamY() << std::setprecision(4) << " x'(mr) " << std::setw(8) << 1000.0*cBeamPos.SlopeX() << " y'(mr) " << std::setw(8) << 1000.0*cBeamPos.SlopeY() << std::endl; std::cout.flags(iflsave); std::cout.precision(ipre); } } } } } if(qsvx) { UsedSetKey used_set_key(ProcessTag("PAD_PHYSICS_SVXBEAM"),RunVersion(run)); if(used_mgr.isValid() && (used_mgr.get(used_set_key,used_set) == Result::success)) { //std::cout << "used_set set : process " << used_set->at(0).process() << std::endl; //std::cout << " : jobset " << used_set->at(0).jobset() << std::endl; //get the valid set ValidSetKey valid_set_key(used_set->at(0).jobset()); ValidSet_var valid_set; if(valid_mgr.isValid() && (valid_mgr.get(valid_set_key,valid_set) == Result::success)) { //create if(svxbeam.loadCid(valid_set->at(0).cids_[0]) == 0) { SvxBeamPosition sBeamPos(svxbeam.getRecord()); if(qbrief && qprint) { std::ios::fmtflags iflsave = std::cout.setf(std::ios::showpoint|std::ios::fixed); int ipre = std::cout.precision(5); std::cout << "Svx" << std::setw(8) << run << std::setprecision(4) << " x(cm) " << std::setw(8) << sBeamPos.BeamX() << " y(cm) " << std::setw(8) << sBeamPos.BeamY() << std::setprecision(4) << " x'(mr) " << std::setw(8) << 1000.0*sBeamPos.SlopeX() << " y'(mr) " << std::setw(8) << 1000.0*sBeamPos.SlopeY() << std::endl; std::cout.flags(iflsave); std::cout.precision(ipre); } } } } } std::cout << "latest entries for run " << run << ":" << std::endl; } bool trySvx=false; bool tryCot=false; for(int i=0; i1) { sEntry.chanTime[sEntry.nTime] = sb.ChannelID(); sEntry.statTime[sEntry.nTime] = sb.Statistics0(); sEntry.x0Time[sEntry.nTime] = sb.BeamX(); sEntry.y0Time[sEntry.nTime] = sb.BeamY(); sEntry.xsTime[sEntry.nTime] = sb.SlopeX(); sEntry.ysTime[sEntry.nTime] = sb.SlopeY(); sEntry.nTime++; } } } else { sEntry.svxBeamX = 0; sEntry.svxBeamY = 0; sEntry.svxSlopeX = 0; sEntry.svxSlopeY = 0; sEntry.svxTableVersion = 0; sEntry.svxTableStatus = 0; sEntry.svxBeamXSigma = 0; sEntry.svxBeamYSigma = 0; sEntry.svxSlopeXSigma = 0; sEntry.svxSlopeYSigma = 0; sEntry.svxWidthX = 0; sEntry.svxWidthY = 0; sEntry.svxWidthXY = 0; sEntry.svxBeamZ = 0; sEntry.svxWidthZ = 0; sEntry.svxBeamXRate = 0; sEntry.svxBeamYRate = 0; sEntry.svxSlopeXRate = 0; sEntry.svxSlopeYRate = 0; sEntry.svxWidthXRate = 0; sEntry.svxWidthYRate = 0; sEntry.svxWidthXYRate = 0; sEntry.svxBeamZRate = 0; sEntry.svxWidthZRate = 0; sEntry.svxMinimZFit = 0; sEntry.svxWidthZFit = 0; sEntry.svxBstarZFit = 0; sEntry.svxZzeroZFit = 0; sEntry.svxMinimZFitRate = 0; sEntry.svxWidthZFitRate = 0; sEntry.svxBstarZFitRate = 0; sEntry.svxZzeroZFitRate = 0; sEntry.svxEmittXFit = 0; sEntry.svxBstarXFit = 0; sEntry.svxZzeroXFit = 0; sEntry.svxEmittYFit = 0; sEntry.svxBstarYFit = 0; sEntry.svxZzeroYFit = 0; sEntry.svxEmittXRate = 0; sEntry.svxBstarXRate = 0; sEntry.svxZzeroXRate = 0; sEntry.svxEmittYRate = 0; sEntry.svxBstarYRate = 0; sEntry.svxZzeroYRate = 0; sEntry.svxFitCov00 = 0; sEntry.svxFitCov01 = 0; sEntry.svxFitCov02 = 0; sEntry.svxFitCov03 = 0; sEntry.svxFitCov11 = 0; sEntry.svxFitCov12 = 0; sEntry.svxFitCov13 = 0; sEntry.svxFitCov22 = 0; sEntry.svxFitCov23 = 0; sEntry.svxFitCov33 = 0; sEntry.svxStatistics0 = 0; sEntry.svxStatistics1 = 0; sEntry.Flag0 = 0; sEntry.Flag1 = 0; sEntry.svxSpare0 = 0; sEntry.svxSpare1 = 0; sEntry.svxSpare2 = 0; sEntry.svxSpare3 = 0; } if(qntuple && ( cotOK || svxOK) ) tree->Fill(); } else if((store != -1) && (runEntry[1] > store)) { // stop when we passed the store run = maxrun + 1; } } if(qntuple) { file->Write(); file->Close(); } return 0; } int statusNumber(const string status) { int i=0; if(status=="COMPLETE") i=13; if(status=="GOOD") i=12; if(status=="RAW") i=11; if(status=="FILTERED") i=10; if(status=="TIGHT") i=9; if(status=="RELAXED") i=8; if(status=="BAD") i=7; if(status=="TEST") i=6; if(status=="DERIVED") i=5; if(status=="UNDEFINED") i=4; if(status=="ORPHANED") i=3; if(status=="COMPLETE_DPS") i=2; if(status=="DOWNLOADED") i=1; return i; } //following the example in RunConfigDB/Test/BeamConditions.cc int storeNumber(int run) { static bool initialized = false; static PackageManager m; if( ! initialized) { ConControl::instance()->addIoEntry(new IoEntry("offline","OTL","cdf_reader/reader@cdfofprd")); m.setDefaultID("offline"); initialized = true; } // Define the manager & container/iterator for returned values. static BEAM_CONDITIONS_mgr dmgr1("BEAM_CONDITIONS"); static BEAM_CONDITIONSContainer_ptr rvals1; static BEAM_CONDITIONSContainer::iterator it1; int store = -1; // Set the key -- just simple run selection + cardname selection ostringstream srt; //srt << run << ends; srt << run; string sql_string = "WHERE RC_RUNNUMBER = " ; sql_string += srt.str(); ROKey dbk(sql_string); // Do the fetch from the DB and print out returned rows. Result rc = dmgr1.get(dbk,rvals1); if (rc == Result::success) { //std::cout << "Rows got:" << std::endl; it1 = rvals1->begin(); if(it1 != rvals1->end()) store = it1->tevStore(); } else std::cout << "could not read RunConfigDB(error = "<< rc << ")" << std::endl; return store; }