#include "/usr/users/eluiggi/CMS/sharedBin/include/config.h" #include "ElecTauAnalysis.h" #include #include #include #include using namespace std; bool fileIsRootFile(string theFile){ return theFile.find(".root") != std::string::npos; } int main(int argc, char **argv){ Config theConfig(argv[1], argv); // read cfg parameters here ... string inRootFileName = theConfig.pString("InputRootFile"); string source = theConfig.pString("Source"); double signalXSection = theConfig.pDouble("SignalXSection"); //signal xsection from cfg; all others are hard coded double theLumi = theConfig.pDouble("Lumi"); int nEvents = theConfig.pInt("NEvents"); string logName = theConfig.pString("EffLogFile"); string rootOutName = theConfig.pString("RootOutFile"); string puRootFile = theConfig.pString("PURootFile"); double minElecPtCut = theConfig.pDouble("MinElecPtCut"); double maxElecEtaCut = theConfig.pDouble("MaxElecEtaCut"); double maxElecDxyCut = theConfig.pDouble("MaxElecDxy"); double maxElecDzCut = theConfig.pDouble("MaxElecDz"); int maxElecMissingHitsCut = theConfig.pInt("MaxElecMissingHits"); double elecIsoDr = theConfig.pDouble("ElecIsoDR"); double maxElecPFRelIsoCut = theConfig.pDouble("MaxElecPFRelIso"); double maxElecDEtaInEBCut = theConfig.pDouble("MaxElecDEtaInBarrel"); double maxElecDPhiInEBCut = theConfig.pDouble("MaxElecDPhiInBarrel"); double maxElecSigmaIEtaIEtaEBCut = theConfig.pDouble("MaxElecSigmaIEtaIEtaBarrel"); double maxElecHadFracEBCut = theConfig.pDouble("MaxElecHadFracBarrel"); double maxOneOverEMinusOneOverPEBCut = theConfig.pDouble("MaxEOverPBarrel"); double maxElecDEtaInBBCut = theConfig.pDouble("MaxElecDEtaInEndCap"); double maxElecDPhiInBBCut = theConfig.pDouble("MaxElecDPhiInEndCap"); double maxElecSigmaIEtaIEtaBBCut = theConfig.pDouble("MaxElecSigmaIEtaIEtaEndCap"); double maxElecHadFracBBCut = theConfig.pDouble("MaxElecHadFracEndCap"); double maxOneOverEMinusOneOverPBBCut = theConfig.pDouble("MaxEOverPEndCap"); double minElecHadTauDrCut = theConfig.pDouble("MinElecHadTauDR"); double minHadTauPtCut = theConfig.pDouble("MinHadTauPt"); bool useAltLVTauPt = theConfig.pBool("UseAltLVTauPt"); double maxHadTauEtaCut = theConfig.pDouble("MaxHadTauEta"); string hadTauMuonDiscType = theConfig.pString("HadTauMuonDiscType"); string hadTauElecDiscType = theConfig.pString("HadTauElecDiscType"); string hadTauNProngs = theConfig.pString("HadTauNProngs"); string hadTauIsoDiscType = theConfig.pString("HadTauIsoDiscType"); double minZWidth = theConfig.pDouble("MinZEEVetoWidth"); double minZPtAsymm = theConfig.pDouble("MinZEEVetoPtAsymm"); string diTauCharge = theConfig.pString("ElecTauChargeType"); double elecTauCosDPhi = theConfig.pDouble("ElecTauCosDPhi"); double minMEt = theConfig.pDouble("MinMET"); double pzetaSlope = theConfig.pDouble("PZetaSlope"); double pzetaCut = theConfig.pDouble("MinPZeta"); string btagType = theConfig.pString("BtagType"); unsigned int nBtagJets = (unsigned int)theConfig.pInt("NBJets"); bool doZEECR = (unsigned int)theConfig.pBool("DoZEECR"); unsigned int doWJetsCR = (unsigned int)theConfig.pInt("DoWJetsCR"); double elecMETMinMass = theConfig.pDouble("MinElecMETMass"); double elecMETMaxMass = theConfig.pDouble("MaxElecMETMass"); double minElecTauMass = theConfig.pDouble("MinElecTauMass"); double maxElecTauMass = theConfig.pDouble("MaxElecTauMass"); bool doVBFJets = theConfig.pBool("DoVBFJets"); double vbfJet1Pt = theConfig.pDouble("MinPtVBFJet1"); double vbfJet2Pt = theConfig.pDouble("MinPtVBFJet2"); double dijetDEta = theConfig.pDouble("MinDiJetDEta"); double minJetMassCut = theConfig.pDouble("MinDiJetMass"); double maxJetMassCut = theConfig.pDouble("MaxDiJetMass"); /* string inRootFileName = "/nfs/data35/cms/eluiggi/cms/CMSSW_5_3_11_patch6/src/HighMassAnalysis/Analysis/test/elecTauAnalysis.root"; string source = "Signal"; double signalXSection = 0.129; //signal xsection from cfg; all others are hard coded double theLumi = 4936.3; int nEvents = -1; string logName = "logFiles/TestNew.log"; string rootOutName = "tmpRootDir/TestNew.root"; string puRootFile = "/nfs/data35/cms/eluiggi/cms/CMSSW_5_3_7/src/HighMassAnalysis/Analysis/test/truePileUpHistoRuns190456-208686.root"; double minElecPtCut = 15.; double maxElecEtaCut = 2.1; double maxElecDxyCut = 0.02; double maxElecDzCut = 0.1; int maxElecMissingHitsCut = 1; double elecIsoDr = 0.3; double maxElecPFRelIsoCut = 0.15; double maxElecDEtaInEBCut = 0.004; double maxElecDPhiInEBCut = 0.06; double maxElecSigmaIEtaIEtaEBCut = 0.01; double maxElecHadFracEBCut = 0.12; double maxOneOverEMinusOneOverPEBCut = 0.05; double maxElecDEtaInBBCut = 0.007; double maxElecDPhiInBBCut = 0.06; double maxElecSigmaIEtaIEtaBBCut = 0.03; double maxElecHadFracBBCut = 0.10; double maxOneOverEMinusOneOverPBBCut = 0.05; double minElecHadTauDrCut = 0.5; bool useAltLVTauPt = true; double minHadTauPtCut = 20.; double maxHadTauEtaCut = 2.1; double maxHadTauVtxDeltaZCut = 0.2; string hadTauNProngs = "none"; string hadTauMuonDiscType = "none"; string hadTauElecDiscType = "MVA5Medium"; string hadTauIsoDiscType = "MVAMediumWLt"; double minZWidth = 5.; double minZPtAsymm = 0.2; string diTauCharge = "TauCharge"; double elecTauCosDPhi = -0.05; double minMEt = 20.; double pzetaSlope = 0.875; double pzetaCut = -7; string btagType = "CSVM"; unsigned int nBtagJets = 1; bool doZEECR = false; bool doWJetsCR = false; double elecMETCosDPhi = 2.; double elecMETMinMass = 0; double elecMETMaxMass = 10000; double minElecTauMass = 0.; double maxElecTauMass = 10000; bool doVBFJets = false; unsigned int nVBFJets = 2; double vbfJet1Pt = 50.; double vbfJet2Pt = 50.; double dijetDEta = 4.2; double minJetMassCut = 500.; */ // instatiate the class TChain* theTree; //check if input file is directory or file; if dir use a chain struct stat sb; if (stat(inRootFileName.c_str(), &sb) == 0 && S_ISDIR(sb.st_mode)){ theTree = new TChain("theTree", "ChainedTrees"); string theFiles = inRootFileName+"/*.root/analyzeHiMassTau/HMTTree"; theTree->Add(theFiles.c_str()); }else if(inRootFileName.find(".txt") != std::string::npos){ ifstream theFile(inRootFileName.c_str()); theTree = new TChain("theTree", "ChainedTrees"); while(theFile.is_open() && !theFile.eof()){ string theLine; getline(theFile,theLine); if(fileIsRootFile(theLine)){ string theFiles = theLine+"/analyzeHiMassTau/HMTTree"; theTree->Add(theFiles.c_str()); } } }else if(fileIsRootFile(inRootFileName)){ TFile* theFile = new TFile(inRootFileName.c_str()); theTree = (TChain*)theFile->Get("analyzeHiMassTau/HMTTree"); }else{ cout << "Did not find a valid file or directory\n"; return (-1); } ElecTauAnalysis ElecTauAnalysis(theTree); ElecTauAnalysis.SetSource(source); ElecTauAnalysis.SetSignalXSection(signalXSection); ElecTauAnalysis.SetLumi(theLumi); ElecTauAnalysis.SetNEvents(nEvents); ElecTauAnalysis.SetOutputLogFileName(logName); ElecTauAnalysis.SetOutputRootFileName(rootOutName); ElecTauAnalysis.SetPileupRootFile(puRootFile); ElecTauAnalysis.SetElecAccCuts(minElecPtCut, maxElecEtaCut); ElecTauAnalysis.SetElecIdGlobalCuts(maxElecDzCut, maxElecDxyCut, maxElecMissingHitsCut, elecIsoDr, maxElecPFRelIsoCut); ElecTauAnalysis.SetElecIdBarrelCuts(maxElecDPhiInEBCut, maxElecDEtaInEBCut, maxElecSigmaIEtaIEtaEBCut, maxElecHadFracEBCut, maxOneOverEMinusOneOverPEBCut); ElecTauAnalysis.SetElecIdEndCapCuts(maxElecDPhiInBBCut, maxElecDEtaInBBCut, maxElecSigmaIEtaIEtaBBCut, maxElecHadFracBBCut, maxOneOverEMinusOneOverPBBCut); ElecTauAnalysis.SetHadTauAccCuts(minElecHadTauDrCut, minHadTauPtCut, maxHadTauEtaCut, useAltLVTauPt); ElecTauAnalysis.SetHadTauIdCuts(hadTauMuonDiscType, hadTauElecDiscType, hadTauIsoDiscType, hadTauNProngs); ElecTauAnalysis.SetTopologyCuts(diTauCharge, minMEt, btagType, nBtagJets, elecTauCosDPhi, pzetaSlope, pzetaCut, minElecTauMass, maxElecTauMass); ElecTauAnalysis.SetWJetsVeto(doWJetsCR, elecMETMinMass, elecMETMaxMass); ElecTauAnalysis.SetZEEVeto(minZWidth,minZPtAsymm, doZEECR); ElecTauAnalysis.SetVBFJetsCuts(doVBFJets, vbfJet1Pt, vbfJet2Pt, dijetDEta, minJetMassCut, maxJetMassCut); //ElecTauAnalysis.SetZVeto(vetoZEE, maxZMassDiff, maxZPtAsym); ElecTauAnalysis.Loop(); };