//----------------------------------------------------------------- // // Fuction to validate the DQ flags in the oaAnalysis files // // Author: // Francesca Di Lodovico (March 2011) - first version // //----------------------------------------------------------------- #include #include #include #include #include #include #include #include #include #include #include "TROOT.h" #include "TFile.h" #include "TChain.h" #include "TClonesArray.h" // To use AnalysisTools utils in ACLiC mode then need to add the relevant header // here and inside the ifdef so it is not seen by CINT. #if !defined(__CINT__) || defined(__MAKECINT__) //Here include the header of your preferred AnalysisTools module #endif using namespace std; extern void runCommandDB(string type, int timeStart, int timeEnd, ofstream* outputDB); extern void analysisDQFlags(char * inputfilename, int SubRun, ofstream *outfile, int max_entries = -1); void runCommandDB(string type, int timeStart, int timeEnd) { FILE *fp; char path[200]; string commandPath = string(getenv("OADATAQUALITYROOT")) + "/macros/validateoaAnalysis.py "; string command; int location; int newlocation; int loc; int lengthstring; bool resultsFlag = false; int * returnData = new int[6]; for (int i = 0 ; i < 6; i++)returnData[i] = -1; string returnString; int count = 0; std::stringstream timeStStart; std::stringstream timeStEnd; timeStStart << timeStart; timeStEnd << timeEnd; command = commandPath + " -p -s " + type + " -b " + timeStStart.str() + " -e " + timeStEnd.str(); //cout<<"Running command: "<SetBatch(1); // See commented code below for loading libraries automatically. //#if !defined(__MAKECINT__) // This should not be seen when using ACLiC. //gROOT->ProcessLine(".x oaAnalysisReadInitFile.C"); //#endif // _________________________________________________________________________ // Prepare to read trees and then read trees. // std::cout << "Adding file(s) matching string: " << inputfilename << std::endl; // // BasicHeader Info // TChain BasicHeader = TChain("HeaderDir/BasicHeader"); //std::cout << "Adding file(s) matching string: " << inputfilename << std::endl; //std::cout << "Added "<< BasicHeader.AddFile(inputfilename) << " file(s)"<< std::endl; BasicHeader.AddFile(inputfilename); Int_t EventID; Int_t RunID; UInt_t EventTime; BasicHeader.SetBranchAddress("EventTime", &EventTime); BasicHeader.SetBranchAddress("EventID", &EventID); BasicHeader.SetBranchAddress("RunID", &RunID); // // BasicDataQuality Info // TChain BasicDataQuality = TChain("HeaderDir/BasicDataQuality"); //std::cout << "Adding file(s) matching string: " << inputfilename << std::endl; //std::cout << "Added "<< BasicDataQuality.AddFile(inputfilename) << " file(s)"<< std::endl; BasicDataQuality.AddFile(inputfilename); Int_t DQEventID; Int_t DQRunID; Int_t COMETOffFlag(-100000),TPCFlag(-100000),TPC1Flag(-100000),TPC2Flag(-100000),TPC3Flag(-100000),FGDFlag(-100000),FGD1Flag(-100000),FGD2Flag(-100000),ECALFlag(-100000),DSECALFlag(-100000),BarECALFlag(-100000),P0DECALFlag(-100000),P0DFlag(-100000),SMRDFlag(-100000),MAGNETFlag(-100000),INGRIDFlag(-100000); BasicDataQuality.SetBranchAddress("EventID", &DQEventID); BasicDataQuality.SetBranchAddress("RunID", &DQRunID); BasicDataQuality.SetBranchAddress("COMETOffFlag", &COMETOffFlag); BasicDataQuality.SetBranchAddress("TPCFlag", &TPCFlag); BasicDataQuality.SetBranchAddress("TPC1Flag", &TPC1Flag); BasicDataQuality.SetBranchAddress("TPC2Flag", &TPC2Flag); BasicDataQuality.SetBranchAddress("TPC3Flag", &TPC3Flag); BasicDataQuality.SetBranchAddress("FGDFlag", &FGDFlag); BasicDataQuality.SetBranchAddress("FGD1Flag", &FGD1Flag); BasicDataQuality.SetBranchAddress("FGD2Flag", &FGD2Flag); BasicDataQuality.SetBranchAddress("ECALFlag", &ECALFlag); BasicDataQuality.SetBranchAddress("DSECALFlag", &DSECALFlag); BasicDataQuality.SetBranchAddress("BarECALFlag", &BarECALFlag); BasicDataQuality.SetBranchAddress("P0DECALFlag", &P0DECALFlag); BasicDataQuality.SetBranchAddress("P0DFlag", &P0DFlag); BasicDataQuality.SetBranchAddress("SMRDFlag", &SMRDFlag); BasicDataQuality.SetBranchAddress("MAGNETFlag", &MAGNETFlag); BasicDataQuality.SetBranchAddress("INGRIDFlag", &INGRIDFlag); // _________________________________________________________________________ // Now loop over the entries in the input tree. Each entry corresponds to an // COMETEvent and it is safe to assume a correspondence between entries on // different trees in the same analysis output file. // However a check is performed anyway. // Loop over all events and extract flag info BasicHeader.GetEntry(0); BasicDataQuality.GetEntry(0); int entries = BasicHeader.GetEntries(); if(max_entries > 0 && max_entries> flagDB[0][0][icount] >> flagDB[0][1][icount] >> flagDB[0][2][icount] >> flagDB[0][3][icount] >> tbegin[0][icount] >> tend[0][icount] ; if(icount == 99) {cout << "More than 100 intervals in a file TPC - stop "<> flagDB[1][0][icount] >> flagDB[1][1][icount] >> flagDB[1][2][icount] >> flagDB[1][3][icount] >> tbegin[1][icount] >> tend[1][icount] ; if(icount == 99) {cout << "More than 100 intervals in a file FGD - stop "<> flagDB[2][0][icount] >> flagDB[2][1][icount] >> flagDB[2][2][icount] >> flagDB[2][3][icount] >> tbegin[2][icount] >> tend[2][icount] ; if(icount == 99) {cout << "More than 100 intervals in a file ECAL - stop "<> flagDB[3][0][icount] >> flagDB[3][1][icount] >> flagDB[3][2][icount] >> flagDB[3][3][icount] >> tbegin[3][icount] >> tend[3][icount] ; if(icount == 99) {cout << "More than 100 intervals in a file P0D - stop "<> flagDB[4][0][icount] >> flagDB[4][1][icount] >> flagDB[4][2][icount] >> flagDB[4][3][icount] >> tbegin[4][icount] >> tend[4][icount] ; if(icount == 99) {cout << "More than 100 intervals in a file SMRD - stop "<> flagDB[5][0][icount] >> flagDB[5][1][icount] >> flagDB[5][2][icount] >> flagDB[5][3][icount] >> tbegin[5][icount] >> tend[5][icount] ; if(icount == 99) {cout << "More than 100 intervals in a file MAGNET - stop "<> flagDB[6][0][icount] >> flagDB[6][1][icount] >> flagDB[6][2][icount] >> flagDB[6][3][icount] >> tbegin[6][icount] >> tend[6][icount] ; if(icount == 99) {cout << "More than 100 intervals in a file INGRID - stop "<= tbegin[j][i] && EventTime < tend[j][i] ) { for(int k=0; k<4; k++){ if ( flagAnalysis[j][0] != flagDB[j][0][i] || flagAnalysis[j][1] != flagDB[j][1][i] || flagAnalysis[j][2] != flagDB[j][2][i] || flagAnalysis[j][3] != flagDB[j][3][i] ) { *outfile<<"Mismatch at: "<