xaod muoncontainer #include #include #include #include #include "xAODEventInfo/EventInfo.h" #include "GoodRunsLists/GoodRunsListSelectionTool.h" #include "xAODMuon/MuonContainer.h" #include "xAODMuon/MuonAuxContainer.h" #include "xAODEgamma/ElectronContainer.h" #include "xAODEgamma/ElectronAuxContainer.h" #include "MuonMomentumCorrections/MuonCalibrationAndSmearingTool.h" xaod muoncontainer How to dowload it? xaod muoncontainer #include "xAODRootAccess/TStore.h" #include "xAODCore/ShallowCopy.h" #include "TH1F.h" #include "TH2F.h" #include "TF1.h" #include #include #include #include #include xaod muoncontainer PasteShr xaod muoncontainer #include "MuonEfficiencyCorrections/MuonEfficiencyScaleFactors.h" #include "PATInterfaces/SystematicVariation.h" #include "PATInterfaces/SystematicsUtil.h" #include "xAODJet/JetContainer.h" #include "JetSelectorTools/JetCleaningTool.h" #include "JetResolution/JERTool.h" #include "JetResolution/JERSmearingTool.h" #include "JetCalibTools/JetCalibrationTool.h" #include "JetUncertainties/JetUncertaintiesTool.h" #include "PileupReweighting/PileupReweightingTool.h" xaod muoncontainer How to get it for free? xaod muoncontainer #include "MuonSelectorTools/MuonSelectionTool.h" #include "xAODMissingET/MissingETContainer.h" #include "xAODTruth/TruthEventContainer.h" #include "TrigConfxAOD/xAODConfigTool.h" #include "TrigDecisionTool/TrigDecisionTool.h" #include "xAODRootAccess/tools/Message.h" #include "xAODCutFlow/CutBookkeeper.h" #include "xAODCutFlow/CutBookkeeperContainer.h" #include "IsolationSelection/IsolationSelectionTool.h" #include "MuonEfficiencyCorrections/MuonTriggerScaleFactors.h" xaod muoncontainer How to get it? xaod muoncontainer #include "ElectronEfficiencyCorrection/AsgElectronEfficiencyCorrectionTool.h" #include "ElectronPhotonSelectorTools/AsgElectronLikelihoodTool.h" #include #include "JetMomentTools/JetVertexTaggerTool.h" ClassImp(ZxAODAnalysis) /// Helper macro for checking xAOD::TReturnCode/StatusCode return values #define EL_CHECK( CONTEXT, EXP ) \ do { \ xaod muoncontainer How to use it? xaod muoncontainer if( ! EXP.isSuccess() ) { \ Error( CONTEXT, \ XAOD_MESSAGE( "Failed to execute: %s" ), \ #EXP ); \ return EL::StatusCode::FAILURE; \ } \ } while( false ) #define EL_CPCHECK( CONTEXT, EXP ) \ xaod muoncontainer How to use it? xaod muoncontainer do { \ if( EXP != CP::CorrectionCode::Ok ) { \ Warning( CONTEXT, \ XAOD_MESSAGE( "Failed to execute: %s" ), \ #EXP ); \ } \ } while( false ) ZxAODAnalysis :: ZxAODAnalysis () {} xaod muoncontainer PasteShr xaod muoncontainer EL::StatusCode ZxAODAnalysis :: setupJob (EL::Job& job) { job.useXAOD (); xAOD::Init( "ZxAODAnalysis" ).ignore(); std::cout<<"Setup Job.."<Branch("wgh", &vwgh, "vwgh/D" ); Ztree[i]->Branch("sumi", &vsumi, "vsumi/D" ); Ztree[i]->Branch("sumf", &vsumf, "vsumf/D" ); Ztree[i]->Branch("sumw", &vsumw, "vsumw/D" ); Ztree[i]->Branch("passtr", &vpassTrig, "vpassTrig/I"); xaod muoncontainer PasteShr xaod muoncontainer Ztree[i]->Branch("tlep_E", &vtlep_E); Ztree[i]->Branch("tlep_px", &vtlep_px); Ztree[i]->Branch("tlep_py", &vtlep_py); Ztree[i]->Branch("tlep_pz", &vtlep_pz); Ztree[i]->Branch("tjet_E", &vtjet_E ); Ztree[i]->Branch("tjet_px", &vtjet_px ); Ztree[i]->Branch("tjet_py", &vtjet_py ); Ztree[i]->Branch("tjet_pz", &vtjet_pz ); xaod muoncontainer How to get it for free? xaod muoncontainer Ztree[i]->Branch("lep_E", &vlep_E[i] ); Ztree[i]->Branch("lep_px", &vlep_px[i] ); Ztree[i]->Branch("lep_py", &vlep_py[i] ); Ztree[i]->Branch("lep_pz", &vlep_pz[i] ); Ztree[i]->Branch("lep_ch", &vlep_ch[i] ); Ztree[i]->Branch("lep_wg", &vlep_wg[i] ); Ztree[i]->Branch("jet_E", &vjet_E[i] ); Ztree[i]->Branch("jet_px", &vjet_px[i] ); Ztree[i]->Branch("jet_py", &vjet_py[i] ); Ztree[i]->Branch("jet_pz", &vjet_pz[i] ); xaod muoncontainer How to dowload it? xaod muoncontainer Ztree[i]->Branch("jet_jvt", &vjet_jvt[i] ); Ztree[i]->Branch("met_px", &vmet_px[i] ); Ztree[i]->Branch("met_py", &vmet_py[i] ); Ztree[i]->Branch("wgtr", &vwgtr[i] ); } std::cout<<"...trees and branches initialized"<Sumw2(); vhLepEta[i]->Sumw2(); vhLepPt3j[i]->Sumw2(); vhLepEta3j[i]->Sumw2(); vhLepPt4j[i]->Sumw2(); vhLepEta4j[i]->Sumw2(); vhLepPhi[i]->Sumw2(); vhLepd0[i]->Sumw2(); vhZmass[i]->Sumw2(); vhZmass1j[i]->Sumw2(); xaod muoncontainer How to get it for free? xaod muoncontainer vhZmass2j[i]->Sumw2(); vhZmass3j[i]->Sumw2(); vhZmass4j[i]->Sumw2(); vhZpt[i]->Sumw2(); vhJetPt[i]->Sumw2(); vhJetEta[i]->Sumw2(); vhJet1Pt[i]->Sumw2(); vhJet1Eta[i]->Sumw2(); vhJet3Pt[i]->Sumw2(); vhJet3Eta[i]->Sumw2(); xaod muoncontainer How to use it? xaod muoncontainer vhJet4Pt[i]->Sumw2(); vhJet4Eta[i]->Sumw2(); vhJet1LPt[i]->Sumw2(); vhJet1LEta[i]->Sumw2(); vhJetN[i]->Sumw2(); vhJetNb[i]->Sumw2(); vhJetNc[i]->Sumw2(); vhJetNd[i]->Sumw2(); vhJetNex[i]->Sumw2(); vh2JetNex[i]->Sumw2(); xaod muoncontainer How to get it? xaod muoncontainer vhJetJvt[i]->Sumw2(); vhJetJvtb[i]->Sumw2(); vhJvfCorr[i]->Sumw2(); vhJetRpt[i]->Sumw2(); vhAvmu[i]->Sumw2(); vhMet[i]->Sumw2(); vhTransmass[i]->Sumw2(); wk()->addOutput(vhLepPt[i]); wk()->addOutput(vhLepEta[i]); wk()->addOutput(vhLepPt3j[i]); xaod muoncontainer How to use it? xaod muoncontainer wk()->addOutput(vhLepEta3j[i]); wk()->addOutput(vhLepPt4j[i]); wk()->addOutput(vhLepEta4j[i]); wk()->addOutput(vhLepd0[i]); wk()->addOutput(vhLepPhi[i]); wk()->addOutput(vhZmass[i]); wk()->addOutput(vhZmass1j[i]); wk()->addOutput(vhZmass2j[i]); wk()->addOutput(vhZmass3j[i]); wk()->addOutput(vhZmass4j[i]); xaod muoncontainer How to dowload it? xaod muoncontainer wk()->addOutput(vhZpt[i]); wk()->addOutput(vhJetPt[i]); wk()->addOutput(vhJetEta[i]); wk()->addOutput(vhJet1Pt[i]); wk()->addOutput(vhJet1Eta[i]); wk()->addOutput(vhJet3Pt[i]); wk()->addOutput(vhJet3Eta[i]); wk()->addOutput(vhJet4Pt[i]); wk()->addOutput(vhJet4Eta[i]); wk()->addOutput(vhJet1LPt[i]); xaod muoncontainer How to get it? xaod muoncontainer wk()->addOutput(vhJet1LEta[i]); wk()->addOutput(vhJetN[i]); wk()->addOutput(vhJetNb[i]); wk()->addOutput(vhJetNc[i]); wk()->addOutput(vhJetNd[i]); wk()->addOutput(vhJetNex[i]); wk()->addOutput(vh2JetNex[i]); wk()->addOutput(vhJetJvt[i]); wk()->addOutput(vhJetJvtb[i]); wk()->addOutput(vhJetRpt[i]); xaod muoncontainer How to dowload it? xaod muoncontainer wk()->addOutput(vhJvfCorr[i]); wk()->addOutput(vhAvmu[i]); wk()->addOutput(vhMet[i]); wk()->addOutput(vhTransmass[i]); wk()->addOutput(Ztree[i]); } havmu->Sumw2(); hZmassT->Sumw2(); xaod muoncontainer PasteShr xaod muoncontainer hJetPtT->Sumw2(); hJetEtaT->Sumw2(); hJet1PtT->Sumw2(); hJet1EtaT->Sumw2(); hJetNT->Sumw2(); hJetNTex->Sumw2(); hZmassTB->Sumw2(); hJetPtTB->Sumw2(); hJetEtaTB->Sumw2(); hJet1PtTB->Sumw2(); xaod muoncontainer How to use it? xaod muoncontainer hJet1EtaTB->Sumw2(); hJetNTB->Sumw2(); hJetNTBex->Sumw2(); heventweights->Sumw2(); hPassCut->Sumw2(); wk()->addOutput(havmu); wk()->addOutput(hZmassT); wk()->addOutput(hJetPtT); xaod muoncontainer How to dowload it? xaod muoncontainer wk()->addOutput(hJetEtaT); wk()->addOutput(hJet1PtT); wk()->addOutput(hJet1EtaT); wk()->addOutput(hJetNT); wk()->addOutput(hJetNTex); wk()->addOutput(hZmassTB); wk()->addOutput(hJetPtTB); wk()->addOutput(hJetEtaTB); wk()->addOutput(hJet1PtTB); wk()->addOutput(hJet1EtaTB); xaod muoncontainer How to dowload it? xaod muoncontainer wk()->addOutput(hJetNTB); wk()->addOutput(hJetNTBex); wk()->addOutput(heventweights); wk()->addOutput(hPassCut); std::cout<<"...histograms and trees prepared"<xaodEvent(); // get the MetaData tree once a new file is opened, with xaod muoncontainer How to get it? xaod muoncontainer TTree *MetaData = dynamic_cast(wk()->inputFile()->Get("MetaData")); if (!MetaData) { Error("fileExecute()", "MetaData not found! Exiting."); return EL::StatusCode::FAILURE; } MetaData->LoadTree(0); //bool m_isDerivation = !MetaData->GetBranch("StreamAOD"); if(m_derivationtype){ xaod muoncontainer How to get it? xaod muoncontainer // corruption checks /* const xAOD::CutBookkeeperContainer* incompleteCBC = nullptr; if(!m_event->retrieveMetaInput(incompleteCBC, "IncompleteCutBookkeepers").isSuccess()){ Error("initializeEvent()","Failed to retrieve IncompleteCutBookkeepers from MetaData! "); return EL::StatusCode::FAILURE; } if ( incompleteCBC->size() != 0 ) { xaod muoncontainer How to dowload it? xaod muoncontainer Error("initializeEvent()","Found incomplete Bookkeepers! Check file for corruption."); return EL::StatusCode::FAILURE; } */ // Now, let's find the actual information const xAOD::CutBookkeeperContainer* completeCBC = 0; if(!m_event->retrieveMetaInput(completeCBC, "CutBookkeepers").isSuccess()){ Error("initializeEvent()","Failed to retrieve CutBookkeepers from MetaData!"); xaod muoncontainer How to get it for free? xaod muoncontainer return EL::StatusCode::FAILURE; } std::string derivationName; switch (m_derivationtype) { case 1 : derivationName = "STDM3Kernel"; break; case 2 : derivationName = "STDM4Kernel"; xaod muoncontainer How to use it? xaod muoncontainer break; case 3 : derivationName = "STDM5Kernel"; break; case 4 : derivationName = "HIGG4D1Kernel"; break; case 5 : derivationName = "HIGG4D2Kernel"; break; xaod muoncontainer How to get it for free? xaod muoncontainer case 6 : derivationName = "HIGG4D3Kernel"; break; case 7 : derivationName = "HIGG4D4Kernel"; break; case 8 : derivationName = "JETM1Kernel"; break; } xaod muoncontainer How to use it? xaod muoncontainer // Find the original first processing step/cycle int minCycle = 10000; for ( auto cbk : *completeCBC ) { if (!cbk->name().empty() && minCycle > cbk->cycle() ){ minCycle = cbk->cycle(); } } std::cout<<"MinCycle:" <name()<<", Cycle: "<cycle()<cycle() && cbk->name() == "AllExecutedEvents" ){ allEventsCBK = cbk; } xaod muoncontainer How to dowload it? xaod muoncontainer std::cout<< "here1" << std::endl; if (cbk->name() == derivationName){ std::cout<< "here2" << std::endl; DxAODEventsCBK = cbk; std::cout<<"der ok" <nAcceptedEvents(); xaod muoncontainer PasteShr xaod muoncontainer double sumOfWeights = allEventsCBK->sumOfEventWeights(); double sumOfWeightsSquared = allEventsCBK->sumOfEventWeightsSquared(); uint64_t nEventsDxAOD = DxAODEventsCBK->nAcceptedEvents(); double sumOfWeightsDxAOD = DxAODEventsCBK->sumOfEventWeights(); double sumOfWeightsSquaredDxAOD = DxAODEventsCBK->sumOfEventWeightsSquared(); std::cout<<"Events Processed: "<initialize() ); ToolHandle< TrigConf::ITrigConfigTool > handle( m_confTool ); xaod muoncontainer PasteShr xaod muoncontainer m_tdt = new Trig::TrigDecisionTool( "TrigDecisionTool" ); EL_CHECK( "initialize", m_tdt->setProperty( "ConfigTool", handle ) ); EL_CHECK( "initialize", m_tdt->setProperty( "TrigDecisionKey", "xTrigDecision" ) ); EL_CHECK( "initialize", m_tdt->initialize() ); //m_event = wk()->xaodEvent(); Info("initialize()", "Number of events = %lli", m_event->getEntries() ); // print long long int xaod muoncontainer How to use it? xaod muoncontainer // count number of events m_eventCounter = 0; m_numCleanEvents = 0; m_numWeightedEvents = 0.; m_numTruthCand = 0.; m_numTruthCandBorn = 0.; m_numTruthCandJets = 0.; m_numZcand1 = 0.; m_numZcand2 = 0.; xaod muoncontainer PasteShr xaod muoncontainer m_numZjets =0.; for(int i=1;i<20;i++){ m_numCutFlow[i] = 0.; } // GRL m_grl = new GoodRunsListSelectionTool("GoodRunsListSelectionTool"); std::vector vecStringGRL; vecStringGRL.push_back("/etapfs02/atlashpc/asydoren/Base2.3.21/ZAnalysis/data15_13TeV.periodAllYear_DetStatus-v63-pro18-01_DQDefects-00-01-02_PHYS_StandardGRL_All_Good.xml"); EL_CHECK("initialize", m_grl->setProperty( "GoodRunsListVec", vecStringGRL)); xaod muoncontainer How to use it? xaod muoncontainer EL_CHECK("initialize", m_grl->setProperty("PassThrough", false)); EL_CHECK("initialize", m_grl->initialize()); if(m_pureweighting){ m_PileupReweighting0 = new CP::PileupReweightingTool("PileupReweighting0"); // create config file vectors std::vector confFiles; std::vector lcalcFiles; confFiles.push_back("/etapfs02/atlashpc/asydoren/Base2.3.21/ZAnalysis/pileUP.mc15_13TeV.361100.PowhegPythia8EvtGen_AZNLOCTEQ6L1_Wplusenu.root"); lcalcFiles.push_back("/etapfs02/atlashpc/asydoren/Base2.3.21/ZAnalysis/ilumicalc_histograms_None_267638-271744.root"); xaod muoncontainer How to get it for free? xaod muoncontainer EL_CHECK("initialize", m_PileupReweighting0->setProperty( "ConfigFiles", confFiles)); EL_CHECK("initialize", m_PileupReweighting0->setProperty("DataScaleFactor",0.862)); EL_CHECK("initialize", m_PileupReweighting0->setProperty("LumiCalcFiles", lcalcFiles)); EL_CHECK("initialize", m_PileupReweighting0->setProperty("UnrepresentedDataAction",2)); EL_CHECK("initialize", m_PileupReweighting0->setProperty("DefaultChannel",361100)); EL_CHECK("initialize", m_PileupReweighting0->initialize()); m_PileupReweighting1 = new CP::PileupReweightingTool("PileupReweighting1"); EL_CHECK("initialize", m_PileupReweighting1->setProperty( "ConfigFiles", confFiles)); EL_CHECK("initialize", m_PileupReweighting1->setProperty("DataScaleFactor",1.0)); xaod muoncontainer How to get it? xaod muoncontainer EL_CHECK("initialize", m_PileupReweighting1->setProperty("LumiCalcFiles", lcalcFiles)); EL_CHECK("initialize", m_PileupReweighting1->setProperty("UnrepresentedDataAction",2)); EL_CHECK("initialize", m_PileupReweighting1->setProperty("DefaultChannel",361100)); EL_CHECK("initialize", m_PileupReweighting1->initialize()); m_PileupReweighting2 = new CP::PileupReweightingTool("PileupReweighting2"); EL_CHECK("initialize", m_PileupReweighting2->setProperty( "ConfigFiles", confFiles)); EL_CHECK("initialize", m_PileupReweighting2->setProperty("DataScaleFactor",0.813)); EL_CHECK("initialize", m_PileupReweighting2->setProperty("LumiCalcFiles", lcalcFiles)); EL_CHECK("initialize", m_PileupReweighting2->setProperty("UnrepresentedDataAction",2)); xaod muoncontainer How to get it? xaod muoncontainer EL_CHECK("initialize", m_PileupReweighting2->setProperty("DefaultChannel",361100)); EL_CHECK("initialize", m_PileupReweighting2->initialize()); } //Muon Selection Tool m_muonSelection = new CP::MuonSelectionTool("muonSelection"); //m_muonSelection->msg().setLevel( MSG::ERROR); EL_CHECK("initialize",m_muonSelection->setProperty( "MaxEta", 2.4 )); EL_CHECK("initialize",m_muonSelection->setProperty( "MuQuality", 1)); EL_CHECK("initialize",m_muonSelection->initialize()); xaod muoncontainer How to get it for free? xaod muoncontainer // Muon Efficiency m_effi_id = new CP::MuonEfficiencyScaleFactors("muonEffiId"); EL_CHECK("initialize", m_effi_id->setProperty("WorkingPoint","Medium")); EL_CHECK("initialize", m_effi_id->setProperty("CalibrationRelease","Data15AC_150806")); EL_CHECK("initialize", m_effi_id->initialize()); m_effi_iso = new CP::MuonEfficiencyScaleFactors("muonEffiIso"); EL_CHECK("initialize", m_effi_iso->setProperty("WorkingPoint","GradientIso")); xaod muoncontainer PasteShr xaod muoncontainer EL_CHECK("initialize", m_effi_iso->initialize()); ////ADDED BY ME----begin // Muon Efficiency m_effi_corr = new CP::MuonEfficiencyScaleFactors("muonEffiCorr"); EL_CHECK("initialize", m_effi_corr->setProperty("WorkingPoint","Medium")); EL_CHECK("initialize", m_effi_corr->setProperty("CalibrationRelease","PreRec_150620")); xaod muoncontainer PasteShr xaod muoncontainer EL_CHECK("initialize", m_effi_corr->initialize()); // dat aperiod? ////ADDED BY ME ----end // Trig Muon Efficiency: m_muTrigEff = new CP::MuonTriggerScaleFactors("muonTrigEff"); // EL_CHECK("initialize", m_muTrigEff->setProperty("runNumber",267638)); EL_CPCHECK("initialize", m_muTrigEff->setRunNumber(267638)); EL_CHECK("initialize", m_muTrigEff->setProperty("MuonQuality", "Medium")); xaod muoncontainer How to get it? xaod muoncontainer //m_muTrigEff->setSelectionTool(m_muonSelection); EL_CHECK("initialize", m_muTrigEff->initialize()); // initialize the muon calibration and smearing tool m_muonCalibrationAndSmearingTool = new CP::MuonCalibrationAndSmearingTool( "muonCorrectionTool" ); m_muonCalibrationAndSmearingTool->msg().setLevel( MSG::WARNING); EL_CHECK("initialize", m_muonCalibrationAndSmearingTool->setProperty("Year","Data15")); EL_CHECK("initialize", m_muonCalibrationAndSmearingTool->setProperty("Algo","muons")); EL_CHECK("initialize", m_muonCalibrationAndSmearingTool->setProperty("SmearingType","q_pT")); EL_CHECK("initialize", m_muonCalibrationAndSmearingTool->setProperty("Release","PreRecs")); xaod muoncontainer How to get it? xaod muoncontainer EL_CHECK("initialize", m_muonCalibrationAndSmearingTool->initialize()); m_isoSel = new CP::IsolationSelectionTool("isolationSelection" ); EL_CHECK("initialize", m_isoSel->setProperty("MuonWP","Gradient")); EL_CHECK("initialize", m_isoSel->setProperty("ElectronWP","Gradient")); EL_CHECK("initialize", m_isoSel->initialize() ); xaod muoncontainer How to dowload it? xaod muoncontainer // initialize and configure the jet cleaning tool m_jetCleaning = new JetCleaningTool("jetCleaning"); m_jetCleaning->msg().setLevel( MSG::ERROR); EL_CHECK("initialize", m_jetCleaning->setProperty("CutLevel", "LooseBad")); // also "TightBad" //test //EL_CHECK("initialize", m_jetCleaning->setProperty("CutLevel", "TightBad")); // also "TightBad" EL_CHECK("initialize", m_jetCleaning->setProperty("DoUgly", false)); EL_CHECK("initialize", m_jetCleaning->initialize()); // initialize JER xaod muoncontainer How to get it for free? xaod muoncontainer m_JERTool = new JERTool("JERTool"); EL_CHECK("initialize", m_JERTool->setProperty("PlotFileName", "JetResolution/Prerec2015_xCalib_2012JER_ReducedTo9NP_Plots_v2.root") ); EL_CHECK("initialize", m_JERTool->setProperty("CollectionName", "AntiKt4EMTopoJets") ); m_jetSmearingTool = new JERSmearingTool("jetSmearingTool"); ToolHandle jerHandle(m_JERTool->name()); EL_CHECK("initialize", m_jetSmearingTool->setProperty("JERTool", jerHandle) ); EL_CHECK("initialize", m_jetSmearingTool->setProperty("ApplyNominalSmearing", false) ); EL_CHECK("initialize", m_jetSmearingTool->setProperty("isMC", true) ); // EL_CHECK("initialize", m_jetSmearingTool->setProperty("SystematicMode", "Full") ); EL_CHECK("initialize", m_jetSmearingTool->setProperty("SystematicMode", "Simple") ); xaod muoncontainer How to dowload it? xaod muoncontainer EL_CHECK("initialize", m_JERTool->initialize()); EL_CHECK("initialize", m_jetSmearingTool->initialize()); // initialize Jet Calibration const std::string name = "JetCalibrationTool"; //current thread, for logging const std::string namedata = "JetCalibrationToolData"; //current thread, for logging TString jetAlgo = "AntiKt4EMTopo" ; //setting for 13TeV MC TString config = "JES_MC15Prerecommendation_April2015.config"; TString calibSeq = "JetArea_Residual_Origin_EtaJES_GSC"; xaod muoncontainer How to use it? xaod muoncontainer TString calibSeqdata = "JetArea_Residual_Origin_EtaJES_GSC_Insitu"; m_jetCalibration = new JetCalibrationTool(name, jetAlgo, config, calibSeq, false); m_jetCalibration_data = new JetCalibrationTool(namedata, jetAlgo, config, calibSeqdata, true); EL_CHECK("initialize", m_jetCalibration->initializeTool(name)); m_jesUncertainty = new JetUncertaintiesTool("JESUncProvider"); EL_CHECK("initialize", m_jesUncertainty->setProperty("JetDefinition","AntiKt4EMTopo")); EL_CHECK("initialize", m_jesUncertainty->setProperty("MCType","MC15")); EL_CHECK("initialize", m_jesUncertainty->setProperty("ConfigFile","JES_2015/Prerec/PrerecJES2015_19NP_50ns.config")); //EL_CHECK("initialize", m_jesUncertainty->setProperty("ConfigFile","JES_2015/Prerec/PrerecJES2015_3NP_Scenario1_50ns.config")); xaod muoncontainer How to use it? xaod muoncontainer EL_CHECK("initialize", m_jesUncertainty->initialize()); pjvtag = new JetVertexTaggerTool("jvtag"); hjvtagup = ToolHandle("jvtag"); EL_CHECK("initialize", pjvtag->setProperty("JVTFileName","JetMomentTools/JVTlikelihood_20140805.root")); EL_CHECK("initialize", pjvtag->initialize()); //Electrons std::string confDir = "ElectronPhotonSelectorTools/offline/mc15_20150408/"; xaod muoncontainer PasteShr xaod muoncontainer m_elLHTool = new AsgElectronLikelihoodTool ("m_elLHTool"); EL_CHECK("initialize",m_elLHTool->setProperty("primaryVertexContainer","PrimaryVertices")); EL_CHECK("initialize",m_elLHTool->setProperty("ConfigFile",confDir+"ElectronLikelihoodMediumOfflineConfig2015.conf")); EL_CHECK("initialize",m_elLHTool->initialize()); m_elCalib = new CP::EgammaCalibrationAndSmearingTool("m_elCalib"); EL_CHECK("initialize",m_elCalib->setProperty("ESModel", "es2015PRE")); EL_CHECK("initialize",m_elCalib->setProperty("decorrelationModel", "1NP_v1")); // see below for options EL_CHECK("initialize",m_elCalib->initialize()); xaod muoncontainer How to get it? xaod muoncontainer m_elRecoCorr = new AsgElectronEfficiencyCorrectionTool("ElectronEffCorrToolReco"); m_elLLHCorr = new AsgElectronEfficiencyCorrectionTool("ElectronEffCorrToolLLH"); m_elIsoCorr = new AsgElectronEfficiencyCorrectionTool("ElectronEffCorrToolIso"); m_elTrigCorr = new AsgElectronEfficiencyCorrectionTool("ElectronEffCorrToolTrig"); std::vector inputFile1{"ElectronEfficiencyCorrection/efficiencySF.offline.RecoTrk.2015.13TeV.rel20p0.v01.root"}; // std::vector inputFile2{"ElectronEfficiencyCorrection/efficiencySF.offline.MediumLH.2015.13TeV.rel20p0.v01.root"}; std::vector inputFile3{"ElectronEfficiencyCorrection/efficiencySF.Isolation.Gradient.MediumLH.2015.13TeV.rel20p0.v02.root"}; xaod muoncontainer How to use it? xaod muoncontainer //std::vector inputFile4{"ElectronEfficiencyCorrection/efficiencySF.AnyElectronTrigger.MediumLH.2015.13TeV.rel20p0.v01.root"}; std::vector inputFile4{"/etapfs02/atlashpc/asydoren/Base2.3.21/ZAnalysis/efficiencySF.e24vhi_medium1_e60_medium1.MediumLLH.2015.13TeV.rel20p0.v02.root"}; std::vector inputFile2{"/etapfs02/atlashpc/asydoren/Base2.3.21/ZAnalysis/efficiencySF.offline.MediumLH.2015.13TeV.rel20p0.v02.root"}; EL_CHECK("initialize",m_elRecoCorr->setProperty("CorrectionFileNameList",inputFile1)); EL_CHECK("initialize",m_elRecoCorr->setProperty("ForceDataType",1)); EL_CHECK("initialize",m_elRecoCorr->initialize()); EL_CHECK("initialize",m_elLLHCorr->setProperty("CorrectionFileNameList",inputFile2)); EL_CHECK("initialize",m_elLLHCorr->setProperty("ForceDataType",1)); xaod muoncontainer How to dowload it? xaod muoncontainer EL_CHECK("initialize",m_elLLHCorr->initialize()); EL_CHECK("initialize",m_elIsoCorr->setProperty("CorrectionFileNameList",inputFile3)); EL_CHECK("initialize",m_elIsoCorr->setProperty("ForceDataType",1)); EL_CHECK("initialize",m_elIsoCorr->initialize()); EL_CHECK("initialize",m_elTrigCorr->setProperty("CorrectionFileNameList",inputFile4)); EL_CHECK("initialize",m_elTrigCorr->setProperty("ForceDataType",1)); xaod muoncontainer How to get it for free? xaod muoncontainer EL_CHECK("initialize",m_elTrigCorr->initialize()); const CP::SystematicRegistry& registry = CP::SystematicRegistry::getInstance(); const CP::SystematicSet& recommendedSystematics = registry.recommendedSystematics(); // get list of recommended systematics // using PAT method to derive +- 1sigma systematics sysList = CP::make_systematics_vector(recommendedSystematics); xaod muoncontainer How to get it? xaod muoncontainer std::cout<<"Systematic variations: "<setProperty("primaryVertexContainer","PrimaryVertices")); EL_CHECK("initialize",m_elLooseLHTool->setProperty("ConfigFile",confDir+"ElectronLikelihoodLooseOfflineConfig2015.conf")); EL_CHECK("initialize",m_elLooseLHTool->initialize()); xaod muoncontainer How to dowload it? xaod muoncontainer EL_CHECK("initialize", m_jetCalibration_data->initializeTool(namedata)); return EL::StatusCode::SUCCESS; } EL::StatusCode ZxAODAnalysis :: execute () xaod muoncontainer PasteShr xaod muoncontainer { //////////////////////////// // Analysis configuration // //////////////////////////// // to become configurable via flag //bool oldFormat = 0; //1 is p2377 or newer bool selFakes = 0;//data multi-jet background selection bool selMCFakes = 0;//MC multi-jet background selection xaod muoncontainer How to get it for free? xaod muoncontainer bool selZee = 0;//Electron or muon channel bool doJVT = 0;// switch JetVertexTagger cut on/off bool doTruthMatch = 0;//use only reco jets that match to truth jets double m_jptmax = -1.;// Upper cut og JetPT double m_jymax = 2.5;//upper cut on the jet rapidity if(!doJVT){ m_jptmax = 50.; m_jymax = 2.4; } double m_fptmax = 5000000.;// Upper cot on lepton pt , only relevant for multi-jet selection xaod muoncontainer How to get it? xaod muoncontainer /////////////////////////// bool selZmm = (!selZee); // jinematic cuts on mass, leptons and jets double m_mmin = 66.; double m_mmax = 116.; double m_muptmin = 25.; double m_elptmin = 25.; double m_muetamax = 2.4; double m_eletamax = 2.47; double m_jptmin = 30.; xaod muoncontainer How to dowload it? xaod muoncontainer // double m_jymax = 2.5; // selection of triggers, default: single-electron and single-muon triggers int m_trig = (selZee) ? 3 : 1; if(selFakes) m_trig = (selZee) ? 4 : 2; if( (m_eventCounter % 1000) ==0 ) Info("execute()", "Event number = %i", m_eventCounter ); m_eventCounter++; /////////////// //// TDT ////// xaod muoncontainer How to use it? xaod muoncontainer /////////////// bool passTrigger1 =0; bool passTrigger2 =0; bool passTrigger3 =0; bool passTrigger4 =0; bool passTrigger5 =0; bool passTrigger = 0; xaod muoncontainer PasteShr xaod muoncontainer const Trig::ChainGroup* m_2mu10 = m_tdt->getChainGroup("HLT_2mu10"); const Trig::ChainGroup* m_2mu14 = m_tdt->getChainGroup("HLT_2mu14"); const Trig::ChainGroup* m_mu20_iloose_L1MU15 = m_tdt->getChainGroup("HLT_mu20_iloose_L1MU15"); const Trig::ChainGroup* m_mu50 = m_tdt->getChainGroup("HLT_mu50"); const Trig::ChainGroup* m_e24_lhmedium_iloose_L1EM20VH = m_tdt->getChainGroup("HLT_e24_lhmedium_iloose_L1EM20VH"); const Trig::ChainGroup* m_e60_lhmedium = m_tdt->getChainGroup("HLT_e60_lhmedium"); const Trig::ChainGroup* m_mu14 = m_tdt->getChainGroup("HLT_mu14"); const Trig::ChainGroup* m_2e12_loose_L12EM10VH = m_tdt->getChainGroup("HLT_2e12_loose_L12EM10VH"); const Trig::ChainGroup* m_2e17_loose = m_tdt->getChainGroup("HLT_2e17_loose"); xaod muoncontainer How to get it for free? xaod muoncontainer bool pass_2mu10 = m_2mu10->isPassed(); bool pass_2mu14 = m_2mu14->isPassed(); bool pass_mu20_iloose_L1MU15 = m_mu20_iloose_L1MU15->isPassed(); bool pass_mu50 = m_mu50->isPassed(); bool pass_e24_lhmedium_iloose_L1EM20VH = m_e24_lhmedium_iloose_L1EM20VH->isPassed(); bool pass_e60_lhmedium = m_e60_lhmedium->isPassed(); bool pass_mu14 = m_mu14->isPassed(); bool pass_2e12_loose_L12EM10VH = m_2e12_loose_L12EM10VH->isPassed(); xaod muoncontainer How to dowload it? xaod muoncontainer bool pass_2e17_loose = m_2e17_loose->isPassed(); if (m_eventCounter < 1){ if(selZmm){ Info( "execute","Tr1: %d, Tr2: %d, Tr3: %d",pass_mu14, pass_mu20_iloose_L1MU15, pass_2mu14); }else{ Info( "execute","Tr1: %d, Tr2: %d, Tr3: %d",pass_e24_lhmedium_iloose_L1EM20VH, pass_2e12_loose_L12EM10VH,pass_2e17_loose); } } xaod muoncontainer PasteShr xaod muoncontainer passTrigger1 = (pass_mu20_iloose_L1MU15 || pass_mu50); passTrigger2 = (pass_2mu10 || pass_2mu14); passTrigger3 = (pass_e24_lhmedium_iloose_L1EM20VH || pass_e60_lhmedium); passTrigger4 = (pass_2e12_loose_L12EM10VH || pass_2e17_loose); passTrigger5 = (pass_mu14); switch (m_trig) { case 0 : passTrigger = 1; xaod muoncontainer How to use it? xaod muoncontainer break; case 1 : passTrigger = passTrigger1; break; case 2 : passTrigger = passTrigger2; break; case 3 : passTrigger = passTrigger3; break; xaod muoncontainer How to dowload it? xaod muoncontainer case 4 : passTrigger = passTrigger4; break; case 5 : passTrigger = passTrigger5; break; } if(selMCFakes) passTrigger = 1; xaod muoncontainer How to get it? xaod muoncontainer //---------------------------- // Event information //--------------------------- const xAOD::EventInfo* eventInfo = 0; EL_CHECK("execute",m_event->retrieve( eventInfo, "EventInfo")); xaod muoncontainer How to get it? xaod muoncontainer // check if the event is data or MC bool isMC = false; if(eventInfo->eventType( xAOD::EventInfo::IS_SIMULATION ) ){ isMC = true; // can do something with this later } // average mu /bc avmu = float(eventInfo->averageInteractionsPerCrossing()); // avmu1 = avmu; avmu2 = avmu; //if(m_numCleanEvents<20) std::cout<<"Avmu1: "<getLumiBlockMu( *eventInfo )); //avmu = avmu1 *0.862; } //if(m_numCleanEvents<20) std::cout<<"Avmu2: "< weights = eventInfo->mcEventWeights(); if( weights.size() > 0 ) {wtgen = weights[0]; } if(m_pureweighting){ pileupwgh0 = m_PileupReweighting0->getCombinedWeight( *eventInfo ); pileupwgh1 = m_PileupReweighting1->getCombinedWeight( *eventInfo ); pileupwgh2 = m_PileupReweighting2->getCombinedWeight( *eventInfo ); //pileupwgh = eventInfo->auxdata< double >( "PileupWeight" ); xaod muoncontainer How to use it? xaod muoncontainer } wtcf = wtgen; wt00 = wtgen*pileupwgh0; wt01 = wtgen*pileupwgh1; wt02 = wtgen*pileupwgh2; wt03 = wtgen; } xaod muoncontainer How to use it? xaod muoncontainer //if data check if event passes GRL if(!isMC){ // it's data! if(!m_grl->passRunLB(*eventInfo)){ //std::cout<< "Rejected by GRL"<errorState(xAOD::EventInfo::LAr)==xAOD::EventInfo::Error ) || (eventInfo->errorState(xAOD::EventInfo::Tile)==xAOD::EventInfo::Error ) || (eventInfo->isEventFlagBitSet(xAOD::EventInfo::Core, 18) ) ) { return EL::StatusCode::SUCCESS; // go to the next event } // end if event flags check } // end if the event is data xaod muoncontainer How to dowload it? xaod muoncontainer m_numCleanEvents++; m_numWeightedEvents+=wt00; m_numCutFlow[0] += wtcf; double zero=0; hPassCut->Fill(zero, wtcf); vwgh = wt00; xaod muoncontainer PasteShr xaod muoncontainer heventweights->Fill(zero); heventweights->Fill(1, wtcf); vtlep_E.clear(); vtlep_px.clear(); vtlep_py.clear(); vtlep_pz.clear(); vtjet_E.clear(); vtjet_px.clear(); vtjet_py.clear(); xaod muoncontainer How to dowload it? xaod muoncontainer vtjet_pz.clear(); for(int i=0;i<70;i++){ vlep_E[i].clear(); vlep_px[i].clear(); vlep_py[i].clear(); vlep_pz[i].clear(); vlep_ch[i].clear(); vlep_wg[i].clear(); xaod muoncontainer How to get it for free? xaod muoncontainer vjet_E[i].clear(); vjet_px[i].clear(); vjet_py[i].clear(); vjet_pz[i].clear(); vjet_jvt[i].clear(); vmet_px[i].clear(); vmet_py[i].clear(); vwgtr[i].clear(); } xaod muoncontainer PasteShr xaod muoncontainer // My old Particle structure, to be replaced by View container Particle part; for(int i=0;i<70;i++){ vecMu[i].clear(); vecEl[i].clear(); vecLep[i].clear(); vecJet[i].clear(); vecJetL[i].clear(); xaod muoncontainer How to get it? xaod muoncontainer vecJetP[i].clear(); } vTMu.clear(); vTEl.clear(); vTLep.clear(); vTJet.clear(); vTJetL.clear(); vTBMu.clear(); vTBEl.clear(); vTBLep.clear(); xaod muoncontainer How to dowload it? xaod muoncontainer vTBJet.clear(); // get muon container of interest const xAOD::MuonContainer* muons = 0; EL_CHECK("execute", m_event->retrieve( muons, "Muons" )); // get jet container of interest const xAOD::JetContainer* jets = 0; EL_CHECK("execute", m_event->retrieve( jets, "AntiKt4EMTopoJets" )); xaod muoncontainer How to get it for free? xaod muoncontainer // get electron container of interest const xAOD::ElectronContainer* electrons = 0; if ( !m_event->retrieve( electrons, "Electrons" ).isSuccess() ){ // retrieve arguments: container type, container key Error("execute()", "Failed to retrieve Electron container. Exiting." ); return EL::StatusCode::FAILURE; } xaod muoncontainer How to get it for free? xaod muoncontainer // get Met container const xAOD::MissingETContainer* metcont = 0; if(!m_event->retrieve(metcont, "MET_Reference_AntiKt4EMTopo").isSuccess()){ Error("execute()", "Failed to retrieve the MET_RefFinal container. Exiting."); return EL::StatusCode::FAILURE; } const xAOD::MissingET* mmet = 0; mmet = (*metcont)["FinalTrk"];// Trk or Clus xaod muoncontainer How to get it for free? xaod muoncontainer const xAOD::VertexContainer* vertices = NULL; EL_CHECK("execute", m_event->retrieve(vertices,"PrimaryVertices")); int NPV = 0; int NPUV = 0; xAOD::VertexContainer::const_iterator itr; for (itr = vertices->begin(); itr != vertices->end(); ++itr){ if ( (*itr)->vertexType() == xAOD::VxType::PriVtx) NPV++; xaod muoncontainer How to get it for free? xaod muoncontainer if ( (*itr)->vertexType() == xAOD::VxType::PileUp) NPUV++; } if(m_eventCounter<21) Info("execute()", "# good vertices = %d ", NPV); if(m_eventCounter<21) Info("execute()", "# PU vertices = %d ", NPUV); if(m_eventCounter<21) Info("execute()", "# Trigger = %d ", passTrigger); const xAOD::TruthParticleContainer* truthparticles = 0; xaod muoncontainer How to get it? xaod muoncontainer //Write W-truth information to ntuple // if(isMC){ // EL_CHECK("execute()",m_event->retrieve( truthparticles, "TruthParticles" )); // //status 62 -> final state W // // for(const auto& truth_itr : *truthparticles){ // if(truth_itr->isW() && truth_itr->status()==62){ // truthW_E = truth_itr->e(); // truthW_px = truth_itr->px(); // truthW_py = truth_itr->py(); xaod muoncontainer PasteShr xaod muoncontainer // truthW_pz = truth_itr->pz(); // truthW_ch = truth_itr->charge(); // } // } // } /////////////////////// // Truth selection xaod muoncontainer How to dowload it? xaod muoncontainer /////////////////////// int etcount1 =0,etcount2=0,etcount3=0; int mtcount1 =0,mtcount2=0,mtcount3=0; bool isTruthCand =0; bool isTruthCandBorn =0; bool isEW = 0; xaod muoncontainer How to get it for free? xaod muoncontainer if(isMC){ // get truth muon container if(m_derivationtype>0 && m_derivationtype<4){ const xAOD::TruthParticleContainer* tmuons = 0; EL_CHECK("execute", m_event->retrieve( tmuons, "TruthMuons" )); const xAOD::TruthParticleContainer* telecs = 0; xaod muoncontainer How to get it? xaod muoncontainer EL_CHECK("execute", m_event->retrieve( telecs, "TruthElectrons" )); xAOD::TruthParticleContainer::const_iterator tmuons_itr = tmuons->begin(); xAOD::TruthParticleContainer::const_iterator tmuons_end = tmuons->end(); part.CHA = 0; part.SF1 = 1.; part.SF2 = 1.; part.EFF = 1.; part.ID = 1.; xaod muoncontainer PasteShr xaod muoncontainer part.ID2 = 1.; part.ID3 = 1.; for (; tmuons_itr != tmuons_end; ++tmuons_itr){ // //switch for ptag 237ff: classifierParticleXX // uint mu_type = 0, mu_orig = 0; // if(oldFormat){ // mu_type = (*tmuons_itr)->auxdata("particleType"); // mu_orig = (*tmuons_itr)->auxdata("particleOrigin"); xaod muoncontainer How to get it? xaod muoncontainer // }else{ // mu_type = (*tmuons_itr)->auxdata("classifierParticleType"); // mu_orig = (*tmuons_itr)->auxdata("classifierParticleOrigin"); // } // //uint mu_orig = (*tmuons_itr)->auxdata("classifierParticleOrigin"); uint mu_type; if ( (*tmuons_itr)->isAvailable("particleType") ){ // Info("execute()", "# mu type ", ""); mu_type = (*tmuons_itr)->auxdata("particleType"); xaod muoncontainer How to use it? xaod muoncontainer } else if((*tmuons_itr)->isAvailable("classifierParticleType")){ // Info("execute()", "# mu class type ", ""); mu_type = (*tmuons_itr)->auxdata("classifierParticleType"); } else{ std::cerr<<"Could not obtain MCTruthClassifier result decoration." << std::endl; std::exit(1); } xaod muoncontainer How to get it? xaod muoncontainer uint mu_orig; if ( (*tmuons_itr)->isAvailable("particleOrigin")){ mu_orig = (*tmuons_itr)->auxdata("particleOrigin"); } else if((*tmuons_itr)->isAvailable("classifierParticleOrigin")){ mu_orig = (*tmuons_itr)->auxdata("classifierParticleOrigin"); } else{ std::cerr<<"Could not obtain MCTruthClassifier result decoration." << std::endl; std::exit(1); xaod muoncontainer How to dowload it? xaod muoncontainer } float mu_pt = (*tmuons_itr)->auxdata("pt_dressed"); float mu_e = (*tmuons_itr)->auxdata("e_dressed"); float mu_eta = (*tmuons_itr)->auxdata("eta_dressed"); float mu_phi = (*tmuons_itr)->auxdata("phi_dressed"); if(mu_type==6 && mu_orig==13){ mtcount1++; xaod muoncontainer PasteShr xaod muoncontainer tlvec.SetPtEtaPhiE(mu_pt * 0.001, mu_eta, mu_phi, mu_e* 0.001); part.TLV= tlvec; if(part.TLV.Pt()>m_muptmin)mtcount2++; if(part.TLV.Pt()>m_muptmin && fabs(part.TLV.Eta())<2.5){ mtcount3++; vTMu.push_back(part); if(selZmm) vTLep.push_back(part); } } } xaod muoncontainer PasteShr xaod muoncontainer xAOD::TruthParticleContainer::const_iterator telecs_itr = telecs->begin(); xAOD::TruthParticleContainer::const_iterator telecs_end = telecs->end(); part.CHA = 0; part.SF1 = 1.; part.SF2 = 1.; part.EFF = 1.; part.ID = 1.; part.ID2 = 1.; xaod muoncontainer How to get it for free? xaod muoncontainer part.ID3 = 1.; for (; telecs_itr != telecs_end; ++telecs_itr){ // uint el_type = 0, el_orig = 0; // if(oldFormat){ // el_type = (*telecs_itr)->auxdata("particleType"); // el_orig = (*telecs_itr)->auxdata("particleOrigin"); // }else{ // el_type = (*telecs_itr)->auxdata("classifierParticleType"); xaod muoncontainer How to get it for free? xaod muoncontainer // el_orig = (*telecs_itr)->auxdata("classifierParticleOrigin"); // } uint el_type=0; if ( (*telecs_itr)->isAvailable("particleType")){ //Info("execute()", "# el type ", ""); el_type = (*telecs_itr)->auxdata("particleType"); } else if((*telecs_itr)->isAvailable("classifierParticleType")){ xaod muoncontainer How to use it? xaod muoncontainer // Info("execute()", "# el class type ", ""); el_type = (*telecs_itr)->auxdata("classifierParticleType"); } else{ std::cerr<<"Could not obtain MCTruthClassifier result decoration." << std::endl; std::exit(1); } uint el_orig=0; if ( (*telecs_itr)->isAvailable("particleOrigin")){ xaod muoncontainer How to get it for free? xaod muoncontainer el_orig = (*telecs_itr)->auxdata("particleOrigin"); } else if((*telecs_itr)->isAvailable("classifierParticleOrigin")){ el_orig = (*telecs_itr)->auxdata("classifierParticleOrigin"); } else{ std::cerr<<"Could not obtain MCTruthClassifier result decoration." << std::endl; std::exit(1); } xaod muoncontainer How to get it? xaod muoncontainer float el_pt = (*telecs_itr)->auxdata("pt_dressed"); float el_e = (*telecs_itr)->auxdata("e_dressed"); float el_eta = (*telecs_itr)->auxdata("eta_dressed"); float el_phi = (*telecs_itr)->auxdata("phi_dressed"); if(el_type==2 && el_orig==13){ etcount1++; tlvec.SetPtEtaPhiE(el_pt * 0.001, el_eta, el_phi, el_e* 0.001); part.TLV= tlvec; xaod muoncontainer How to use it? xaod muoncontainer if(part.TLV.Pt()>m_elptmin) etcount2++; if(part.TLV.Pt()>m_elptmin && fabs(part.TLV.Eta())<2.5){ etcount3++; vTEl.push_back(part); if(selZee) vTLep.push_back(part); } } } }// only for STDM derivations xaod muoncontainer How to get it? xaod muoncontainer if(m_derivationtype>0 && m_derivationtype<4){ // get truth jet container const xAOD::JetContainer* tjets = 0; EL_CHECK("execute", m_event->retrieve( tjets, "AntiKt4TruthWZJets" )); xAOD::JetContainer::const_iterator tjets_itr = tjets->begin(); xAOD::JetContainer::const_iterator tjets_end = tjets->end(); for (; tjets_itr != tjets_end; ++tjets_itr){ xaod muoncontainer How to dowload it? xaod muoncontainer tlvec.SetPtEtaPhiE((*tjets_itr)->pt() * 0.001,(*tjets_itr)->eta(), (*tjets_itr)->phi(), (*tjets_itr)->e()* 0.001); bool hasLepmatch=false; double mindr=10; for (uint j=0; jm_jptmin && fabs(tlvec.Rapidity())20. && fabs(tlvec.Rapidity())<4.4 && !hasLepmatch){ xaod muoncontainer How to get it for free? xaod muoncontainer part.TLV= tlvec; vTJetL.push_back(part); } } sort(vTMu.begin(),vTMu.end(),ZxAODAnalysis::ComparePt); sort(vTEl.begin(),vTEl.end(),ZxAODAnalysis::ComparePt); sort(vTLep.begin(),vTLep.end(),ZxAODAnalysis::ComparePt); xaod muoncontainer PasteShr xaod muoncontainer sort(vTJet.begin(),vTJet.end(),ZxAODAnalysis::ComparePt); sort(vTJetL.begin(),vTJetL.end(),ZxAODAnalysis::ComparePt); }// only for specific derivations if((selZee && etcount1 >1) || (selZmm && mtcount1 > 1)) { m_numCutFlow[15] += wtcf; hPassCut->Fill(15, wtcf); } if((selZee && etcount2 >1) || (selZmm && mtcount2 > 1)) { xaod muoncontainer How to dowload it? xaod muoncontainer m_numCutFlow[16] += wtcf; hPassCut->Fill(16, wtcf); } if((selZee && etcount3 >1) || (selZmm && mtcount3 > 1)) { m_numCutFlow[17] += wtcf; hPassCut->Fill(17, wtcf); } xaod muoncontainer How to use it? xaod muoncontainer double TZmass = 0; if(vTLep.size()==2){ m_numCutFlow[18] += wtcf; hPassCut->Fill(18, wtcf); TZmass = ZxAODAnalysis::MassM(vTLep[0].TLV,vTLep[1].TLV); isTruthCand = (m_mmin Fill(19, wtcf); m_numTruthCand+=wt00; hZmassT->Fill(TZmass,wt00); for(uint k=0;kFill(vTJet[k].TLV.Pt(),wt00); hJetEtaT->Fill(vTJet[k].TLV.Rapidity(),wt00); } if(vTJet.size()){ hJet1PtT->Fill(vTJet[0].TLV.Pt(),wt00); xaod muoncontainer How to dowload it? xaod muoncontainer hJet1EtaT->Fill(vTJet[0].TLV.Rapidity(),wt00); m_numTruthCandJets+=wt00; } for(uint k=0;kFill(float(k),wt00); } hJetNTex->Fill(float(vTJet.size()),wt00); } xaod muoncontainer PasteShr xaod muoncontainer const xAOD::TruthEventContainer* truthE = 0; EL_CHECK("execute",m_event->retrieve(truthE, "TruthEvents")); // loop over truth events xAOD::TruthEventContainer::const_iterator truthE_itr = truthE->begin(); xAOD::TruthEventContainer::const_iterator truthE_end = truthE->end(); int nTE = 0; for (; truthE_itr != truthE_end; ++truthE_itr){ xaod muoncontainer How to dowload it? xaod muoncontainer int nPart = (*truthE_itr)->nTruthParticles(); for(int iPart = 0;iParttruthParticle(iPart); int barcode = 0, status = 0, pdgId = 0; float ene = 0.; if(particle) barcode = particle->barcode(); if(particle) status = particle->status(); if(particle) pdgId = particle->pdgId(); xaod muoncontainer How to get it? xaod muoncontainer if(particle) ene = particle->e()/1000.; // Test truth cntent for a few events if(m_eventCounter<1 && particle){ std::cout<<"TruthPart: Evt: "<decayVtx(); const xAOD::TruthParticle* child = 0; std::vector>::const_iterator pchild = zvtx->outgoingParticleLinks().begin(); std::vector>::const_iterator pchildend = zvtx->outgoingParticleLinks().end(); for(; pchild != pchildend; ++pchild){ child = **pchild; xaod muoncontainer How to dowload it? xaod muoncontainer int pid = child->pdgId(); int stat = child->status(); if(stat==3 || particle->nChildren()==2){ tlvec.SetPtEtaPhiE(child->pt() * 0.001,child->eta(), child->phi(),child->e()* 0.001); part.TLV= tlvec; if(fabs(pid)==11 && part.TLV.Pt()> m_elptmin && fabs(part.TLV.Eta())< 2.5){ vTBEl.push_back(part); if(selZee) vTBLep.push_back(part); }else if (fabs(pid)==13 && part.TLV.Pt()> m_muptmin && fabs(part.TLV.Eta())< 2.5){ vTBMu.push_back(part); xaod muoncontainer How to get it? xaod muoncontainer if(selZmm) vTBLep.push_back(part); } } } }// end Born lepton loop } nTE++; } xaod muoncontainer How to dowload it? xaod muoncontainer const xAOD::JetContainer* tbjets = 0; EL_CHECK("execute", m_event->retrieve( tbjets, "AntiKt4TruthWZJets" )); xAOD::JetContainer::const_iterator tbjets_itr = tbjets->begin(); xAOD::JetContainer::const_iterator tbjets_end = tbjets->end(); for (; tbjets_itr != tbjets_end; ++tbjets_itr){ tlvec.SetPtEtaPhiE((*tbjets_itr)->pt() * 0.001,(*tbjets_itr)->eta(), (*tbjets_itr)->phi(), (*tbjets_itr)->e()* 0.001); xaod muoncontainer How to get it for free? xaod muoncontainer bool hasLepmatch=false; double mindr=10; for (uint j=0; jm_jptmin && fabs(tlvec.Rapidity())Fill(TBZmass,wt00); for(uint k=0;kFill(vTBJet[k].TLV.Pt(),wt00); hJetEtaTB->Fill(vTBJet[k].TLV.Rapidity(),wt00); xaod muoncontainer How to get it? xaod muoncontainer } if(vTBJet.size()){ hJet1PtTB->Fill(vTBJet[0].TLV.Pt(),wt00); hJet1EtaTB->Fill(vTBJet[0].TLV.Rapidity(),wt00); } for(uint k=0;kFill(float(k),wt00); } xaod muoncontainer How to get it for free? xaod muoncontainer hJetNTBex->Fill(float(vTBJet.size()),wt00); } Double_t trigsf[70], trigmusf[70],trigelsf[70]; for (int i =0;i<70;i++){ trigsf[i]=1.; trigmusf[i]=1.; trigelsf[i]=1.; xaod muoncontainer How to get it? xaod muoncontainer } if(!NPV) return EL::StatusCode::SUCCESS; //CutFlow //CutFlow if(NPV){ m_numCutFlow[1] += wtcf; hPassCut->Fill(1, wtcf); } xaod muoncontainer How to use it? xaod muoncontainer if(NPV && passTrigger){ m_numCutFlow[2] += wtcf; hPassCut->Fill(2, wtcf); } int ecount1=0, ecount2=0,ecount3=0,ecount4=0,ecount5=0; int mucount1=0, mucount2=0,mucount3=0,mucount4=0,mucount5=0; xaod muoncontainer How to get it for free? xaod muoncontainer ////////////////////////// // Big systematics Loop // ////////////////////////// std::vector::const_iterator sysListItr; int sysi = 0;//for my particle vector xaod muoncontainer How to get it for free? xaod muoncontainer for (sysListItr = sysList.begin(); sysListItr != sysList.end(); ++sysListItr){ // sort into weight and 4-vector systematics std::string sname = (*sysListItr).name(); std::string seff("EFF"); /* bool ismuonsys = 0; std::string smuo("MUON"); xaod muoncontainer How to get it for free? xaod muoncontainer ismuonsys = (sname.find(smuo) != std::string::npos); bool iselsys = 0; std::string sele("EL"); std::string seg("EG"); iselnsys = ((sname.find(sele) != std::string::npos) ||(sname.find(seg) != std::string::npos)); */ int sysel = 12; int sysmu = 50; xaod muoncontainer PasteShr xaod muoncontainer bool mprintout = selZmm && m_eventCounter<25 && (sysi >=sysmu ); if(mprintout){ if(sysi==0) std::cout << "Event: " <20 && m_eventCounter<25; if(jprintout && !(eprintout || mprintout)){ if(sysi==0) std::cout << "Event: " <20 && m_eventCounter<25; // if(jprintout && !(eprintout || mprintout)){ // if(sysi==0) std::cout << "Event: " <applySystematicVariation( *sysListItr ) != CP::SystematicCode::Ok ) { Error("execute()", "Cannot configure electron calibration tool for systematic" ); continue; } if( m_elRecoCorr->applySystematicVariation( *sysListItr ) != CP::SystematicCode::Ok ) { Error("execute()", "Cannot configure electron efficiency tool for systematic" ); continue; } xaod muoncontainer How to get it for free? xaod muoncontainer if( m_elLLHCorr->applySystematicVariation( *sysListItr ) != CP::SystematicCode::Ok ) { Error("execute()", "Cannot configure electron efficiency tool for systematic" ); continue; } if( m_elIsoCorr->applySystematicVariation( *sysListItr ) != CP::SystematicCode::Ok ) { Error("execute()", "Cannot configure electron efficiency tool for systematic" ); continue; xaod muoncontainer How to get it for free? xaod muoncontainer } if( m_elTrigCorr->applySystematicVariation( *sysListItr ) != CP::SystematicCode::Ok ) { Error("execute()", "Cannot configure electron efficiency tool for systematic" ); continue; } // if(sysi==sysmu){ // if( m_elLLHCorr->applySystematicVariation( sysList[5] ) != CP::SystematicCode::Ok ) { // Error("execute()", "Cannot configure electron efficiency tool for systematic" ); xaod muoncontainer PasteShr xaod muoncontainer // continue; // } if( m_muonCalibrationAndSmearingTool->applySystematicVariation( *sysListItr ) != CP::SystematicCode::Ok ) { Error("execute()", "Cannot configure muon calibration tool for systematic" ); continue; } if( m_effi_id->applySystematicVariation( *sysListItr ) != CP::SystematicCode::Ok ) { xaod muoncontainer PasteShr xaod muoncontainer Error("execute()", "Cannot configure muon efficiency tool for systematic" ); continue; } if( m_effi_iso->applySystematicVariation( *sysListItr ) != CP::SystematicCode::Ok ) { Error("execute()", "Cannot configure muon efficiency tool for systematic" ); continue; } if( m_muTrigEff->applySystematicVariation( *sysListItr ) != CP::SystematicCode::Ok ) { xaod muoncontainer How to get it? xaod muoncontainer Error("execute()", "Cannot configure trig muon efficiency tool for systematic" ); continue; } if( m_jetSmearingTool->applySystematicVariation( *sysListItr ) != CP::SystematicCode::Ok ) { Error("execute()", "Cannot configure JER smearing tool for systematic" ); continue; } xaod muoncontainer How to dowload it? xaod muoncontainer if( m_jesUncertainty->applySystematicVariation( *sysListItr ) != CP::SystematicCode::Ok ) { Error("execute()", "Cannot configure JES uncertainty tool for systematic" ); continue; } /////////////// // Electrons // /////////////// xaod muoncontainer How to use it? xaod muoncontainer part.CHA = 0; part.SF1 = 1.; part.SF2 = 1.; part.EFF = 1.; part.ID = 1.; part.ID2 = 1.; part.ID3 = 1.; xaod muoncontainer How to get it for free? xaod muoncontainer // create a shallow copy of the electrons container std::pair< xAOD::ElectronContainer*, xAOD::ShallowAuxContainer* > elecs_shallowCopy = xAOD::shallowCopyContainer( *electrons ); // iterate over our shallow copy xAOD::ElectronContainer::iterator elecSC_itr = (elecs_shallowCopy.first)->begin(); xAOD::ElectronContainer::iterator elecSC_end = (elecs_shallowCopy.first)->end(); for( ; elecSC_itr !=elecSC_end; ++elecSC_itr ) { xaod muoncontainer How to dowload it? xaod muoncontainer if ((*elecSC_itr)->pt()<10000.) continue; if(eprintout) Info("execute()", " uncorrected electron pt = %.3f GeV", ((*elecSC_itr)->pt() * 0.001)); EL_CPCHECK("execute", m_elCalib->applyCorrection(**elecSC_itr)); if(eprintout) Info("execute()", " corrected electron pt = %.3f GeV", ((*elecSC_itr)->pt() * 0.001)); bool isCrack = (fabs((*elecSC_itr)->eta())>1.37 && fabs((*elecSC_itr)->eta())<1.52); xaod muoncontainer How to get it for free? xaod muoncontainer bool isAccepted = m_elLHTool->accept(**elecSC_itr); bool isLoose = m_elLooseLHTool->accept(**elecSC_itr); if(eprintout && isAccepted) Info("execute()","elec passes LLH"); bool isIso = m_isoSel->accept(**elecSC_itr); if(eprintout && isIso) Info("execute()","elec passes Isolation"); bool isSelectedElec = (isAccepted && isIso && !isCrack && (*elecSC_itr)->pt()>m_elptmin*1000. && fabs((*elecSC_itr)->eta())pt()>m_elptmin*1000. && fabs((*elecSC_itr)->eta())pt()>m_elptmin*1000. && fabs((*elecSC_itr)->eta())pt()pt()>25000.){ ecount1 ++; if(fabs((*elecSC_itr)->eta())<2.47){ ecount2 ++; if(!isCrack){ ecount3++; if((isAccepted && !selFakes )|| (isLoose && selFakes)){ ecount4++; if(isSelectedElec){ ecount5++; xaod muoncontainer How to get it? xaod muoncontainer } } } } } } if(!isSelectedElec)continue; xaod muoncontainer How to get it for free? xaod muoncontainer double elrecosf = 1.0; if(isMC) EL_CPCHECK("execute", m_elRecoCorr->getEfficiencyScaleFactor(**elecSC_itr,elrecosf)); if(eprintout)Info("execute()", " elec reco sf = %.4f ", elrecosf); double elllhsf = 1.0; if(isMC) EL_CPCHECK("execute", m_elLLHCorr->getEfficiencyScaleFactor(**elecSC_itr,elllhsf)); if(eprintout)Info("execute()", " elec llh sf = %.4f ", elllhsf); double elisosf = 1.0; if(isMC) EL_CPCHECK("execute", m_elIsoCorr->getEfficiencyScaleFactor(**elecSC_itr,elisosf)); xaod muoncontainer PasteShr xaod muoncontainer if(eprintout)Info("execute()", " elec iso sf = %.4f ", elisosf); double eltrigsf = 1.0; if(isMC) EL_CPCHECK("execute", m_elTrigCorr->getEfficiencyScaleFactor(**elecSC_itr,eltrigsf)); if(eprintout)Info("execute()", " elec trig sf = %.4f ", eltrigsf); tlvec.SetPtEtaPhiE((*elecSC_itr)->pt() * 0.001,(*elecSC_itr)->eta(),(*elecSC_itr)->phi() ,(*elecSC_itr)->e()* 0.001); part.CHA = (*elecSC_itr)->charge(); xaod muoncontainer How to use it? xaod muoncontainer part.TLV = tlvec; part.SF1 = elrecosf*elllhsf*elisosf; part.SF2 = eltrigsf;//needs efficiency to work vecEl[sysi].push_back(part); if(selZee) vecLep[sysi].push_back(part); }// shallow copy loop xaod muoncontainer How to dowload it? xaod muoncontainer delete elecs_shallowCopy.first; delete elecs_shallowCopy.second; ///////////// // Muons //// ///////////// xaod muoncontainer PasteShr xaod muoncontainer part.CHA = 0; part.SF1 = 1.; part.SF2 = 1.; part.EFF = 1.; part.ID = 1.; part.ID2 = 1.; part.ID3 = 1.; // Deep copy for TrigEfficiency xAOD::MuonContainer* goodMuons = new xAOD::MuonContainer(); xaod muoncontainer How to get it? xaod muoncontainer xAOD::MuonAuxContainer* goodMuonsAux = new xAOD::MuonAuxContainer(); goodMuons->setStore( goodMuonsAux ); //< Connect the two // create a shallow copy of the muons container std::pair< xAOD::MuonContainer*, xAOD::ShallowAuxContainer* > muons_shallowCopy = xAOD::shallowCopyContainer( *muons ); // iterate over our shallow copy xAOD::MuonContainer::iterator muonSC_itr = (muons_shallowCopy.first)->begin(); xAOD::MuonContainer::iterator muonSC_end = (muons_shallowCopy.first)->end(); xaod muoncontainer How to get it? xaod muoncontainer //std::cout<<"Muons"<pt()<10000.) continue; if(mprintout) Info("execute()", " uncorrected muon pt = %.3f GeV, eta = %.3f", ((*muonSC_itr)->pt() * 0.001),(*muonSC_itr)->eta()); EL_CPCHECK("execute", m_muonCalibrationAndSmearingTool->applyCorrection(**muonSC_itr)); if(mprintout) Info("execute()", " corrected muon pt = %.3f GeV, eta = %.3f", ((*muonSC_itr)->pt() * 0.001),(*muonSC_itr)->eta()); tlvec.SetPtEtaPhiE((*muonSC_itr)->pt() * 0.001,(*muonSC_itr)->eta(),(*muonSC_itr)->phi() ,(*muonSC_itr)->e()* 0.001); xaod muoncontainer How to get it? xaod muoncontainer float mud0 = (*muonSC_itr)->primaryTrackParticle()->d0(); bool isAccepted = m_muonSelection->accept(**muonSC_itr); if(mprintout && isAccepted) Info("execute()","passes Accept"); bool isIso = m_isoSel->accept(**muonSC_itr); if(mprintout && isIso) Info("execute()","passes Isolation"); bool isSelectedMuon = (isAccepted && isIso && (*muonSC_itr)->pt()>m_muptmin*1000. && fabs((*muonSC_itr)->eta()) 0.05 && (*muonSC_itr)->pt()>m_muptmin*1000. && fabs((*muonSC_itr)->eta())pt()>m_muptmin*1000. && fabs((*muonSC_itr)->eta())getQuality(**muonSC_itr); if(sysi==0){ if((*muonSC_itr)->pt()>25000.){ mucount1 ++; if(fabs((*muonSC_itr)->eta())<2.47){ mucount2 ++; if(m_quality <= xAOD::Muon::Medium ){ mucount3++; if(isAccepted){ mucount4++; xaod muoncontainer PasteShr xaod muoncontainer if(isSelectedMuon){ mucount5++; } } } } } } if(!isSelectedMuon) continue; xaod muoncontainer How to get it? xaod muoncontainer float muonidsf = 1.0; float muonisosf = 1.0; if(isMC) EL_CPCHECK("execute", m_effi_id->getEfficiencyScaleFactor(**muonSC_itr,muonidsf)); if(mprintout)Info("execute()", " muon id sf = %.4f ", muonidsf); if(isMC) EL_CPCHECK("execute", m_effi_iso->getEfficiencyScaleFactor(**muonSC_itr,muonisosf)); if(mprintout)Info("execute()", " muon iso sf = %.4f ", muonisosf); xaod muoncontainer How to get it for free? xaod muoncontainer if(!isSelectedMuon) continue; float muonsf = 1.0; if(isMC) EL_CPCHECK("execute", m_effi_corr->getEfficiencyScaleFactor(**muonSC_itr,muonsf)); if(mprintout)Info("execute()", " muon sf = %.4f ", muonsf); // needed for trigmuonefficiency xAOD::Muon* gmuon = new xAOD::Muon(); gmuon->makePrivateStore( **muonSC_itr ); xaod muoncontainer How to get it? xaod muoncontainer goodMuons->push_back( gmuon ); part.CHA = (*muonSC_itr)->charge(); part.TLV = tlvec; part.SF1 = muonidsf*muonisosf; part.ID = mud0; part.ID2 = 1.; part.ID3 = 1.; xaod muoncontainer How to dowload it? xaod muoncontainer vecMu[sysi].push_back(part); if(selZmm) vecLep[sysi].push_back(part); } // end for loop over shallow copied muons delete muons_shallowCopy.first; delete muons_shallowCopy.second; std::string simuon_trig = "HLT_mu20_iloose_L1MU15_OR_HLT_mu50"; xaod muoncontainer How to get it for free? xaod muoncontainer if(isMC && selZmm) EL_CPCHECK("execute", m_muTrigEff->getTriggerScaleFactor(*goodMuons,trigmusf[sysi],simuon_trig)); if(mprintout) Info("execute()", " mu trig sf = %.4f ", trigmusf[sysi]); delete goodMuons; delete goodMuonsAux; for(int i=0;i<70;i++) if(selZee) { trigsf[i] = trigelsf[i]; }else if(selZmm){ xaod muoncontainer PasteShr xaod muoncontainer trigsf[i] = trigmusf[i]; } //////////// //// Jets /// //////////// part.CHA = 0; part.SF1 = 1.; xaod muoncontainer How to get it? xaod muoncontainer part.SF2 = 1.; part.EFF = 1.; part.ID = 1.; part.ID2 = 1.; part.ID3 = 1.; // create a shallow copy of the jets container std::pair< xAOD::JetContainer*, xAOD::ShallowAuxContainer* > jets_shallowCopy = xAOD::shallowCopyContainer( *jets ); xaod muoncontainer How to dowload it? xaod muoncontainer // iterate over our shallow copy xAOD::JetContainer::iterator jetSC_itr = (jets_shallowCopy.first)->begin(); xAOD::JetContainer::iterator jetSC_end = (jets_shallowCopy.first)->end(); for( ; jetSC_itr != jetSC_end; ++jetSC_itr ) { // save time and do not bother with soft stuff.. tlvec.SetPtEtaPhiE((*jetSC_itr)->pt() * 0.001,(*jetSC_itr)->eta(),(*jetSC_itr)->phi() ,(*jetSC_itr)->e()* 0.001); if (tlvec.Pt() <15. || fabs(tlvec.Eta()) >4.5 )continue; xaod muoncontainer How to get it for free? xaod muoncontainer if( !m_jetCleaning->accept( **jetSC_itr )) continue; //only keep good clean jets if(jprintout) Info("execute()", " before jet calibration: jet pt = %.2f GeV, eta = %.2f ", ((*jetSC_itr)->pt() * 0.001),(*jetSC_itr)->eta()); if(isMC){ EL_CHECK("execute", m_jetCalibration->applyCalibration(**jetSC_itr)); }else{ EL_CHECK("execute", m_jetCalibration_data->applyCalibration(**jetSC_itr)); } xaod muoncontainer How to dowload it? xaod muoncontainer if(jprintout) Info("execute()", " after jet calibration: jet pt = %.2f GeV", ((*jetSC_itr)->pt() * 0.001)); if(isMC){ EL_CPCHECK("execute", m_jesUncertainty->applyCorrection(**jetSC_itr)); if(jprintout) Info("execute()", " after jes unc: jet pt = %.2f GeV", ((*jetSC_itr)->pt() * 0.001)); EL_CPCHECK("execute", m_jetSmearingTool->applyCorrection(**jetSC_itr)); if(jprintout) Info("execute()", " after jet smearing: jet pt = %.2f GeV", ((*jetSC_itr)->pt() * 0.001)); } xaod muoncontainer How to use it? xaod muoncontainer float jetvt = 0; float newjvt = 0; jetvt = (*jetSC_itr)->auxdata( "Jvt" ); float jvtrpt = (*jetSC_itr)->auxdata( "JvtRpt" ); float jvfcorr = (*jetSC_itr)->auxdata( "JvtJvfcorr" ); newjvt = hjvtagup->updateJvt(**jetSC_itr); if(jprintout) Info("execute()", " xAOD jet vertex tagger: %.2f", jetvt); if(jprintout) Info("execute()", " new jet vertex tagger: %.2f", newjvt); bool isPUjet = 0; if(doJVT && newjvt<0.64 && fabs((*jetSC_itr)->eta())<2.4 && (*jetSC_itr)->pt()<50000. ) isPUjet = 1; xaod muoncontainer How to use it? xaod muoncontainer tlvec.SetPtEtaPhiE((*jetSC_itr)->pt() * 0.001,(*jetSC_itr)->eta(),(*jetSC_itr)->phi() ,(*jetSC_itr)->e()* 0.001); if(!(tlvec.Pt()>20. && fabs(tlvec.Rapidity())<4.4))continue; //loose jets float jvteff = 1.; if(isMC && tlvec.Pt() < 50.){ if (sysi==44 ) jvteff = 0.98; if (sysi==45 ) jvteff = 1.02; } xaod muoncontainer How to use it? xaod muoncontainer if(jprintout) Info("execute()", " jvt eff: = %.2f GeV", jvteff); bool hasLepmatch=false; double mindr=10; for (uint j=0; jpt() * 0.001)); bool hasTruthmatch=false; for (uint j=0; jpt() * 0.001)); part.TLV= tlvec; xaod muoncontainer How to get it for free? xaod muoncontainer part.ID = newjvt; part.ID2 = jvtrpt; part.ID3 = jvfcorr; part.SF1 = jvteff; if(!isPUjet) vecJetL[sysi].push_back(part); // loose jets if(tlvec.Pt()>m_jptmin && (m_jptmax<0 ||tlvec.Pt()< m_jptmax) && fabs(tlvec.Rapidity())1) || (selZmm && mucount1 > 1))) { m_numCutFlow[3] += wtcf; hPassCut->Fill(3, wtcf); } if(passTrigger && ((selZee && ecount2 >1) || (selZmm && mucount2 > 1))) { m_numCutFlow[4] += wtcf; hPassCut->Fill(4, wtcf); xaod muoncontainer How to get it? xaod muoncontainer } if(passTrigger && ((selZee && ecount3 >1) || (selZmm && mucount3 > 1))) { m_numCutFlow[5] += wtcf; hPassCut->Fill(5, wtcf); } if(passTrigger && ((selZee && ecount4 >1) || (selZmm && mucount4 > 1))) { m_numCutFlow[6] += wtcf; hPassCut->Fill(6, wtcf); } if(passTrigger && ((selZee && ecount5 >1) || (selZmm && mucount5 > 1))) { xaod muoncontainer How to get it for free? xaod muoncontainer m_numCutFlow[7] += wtcf; hPassCut->Fill(7, wtcf); } // ntup variables vsumi = m_initialSumOfWeights; vsumf = m_finalSumOfWeights; xaod muoncontainer How to get it for free? xaod muoncontainer vsumw = m_numWeightedEvents; vpassTrig = passTrigger; for(int j=0;j<70;j++){ sort(vecMu[j].begin(),vecMu[j].end(),ZxAODAnalysis::ComparePt); sort(vecEl[j].begin(),vecEl[j].end(),ZxAODAnalysis::ComparePt); sort(vecLep[j].begin(),vecLep[j].end(),ZxAODAnalysis::ComparePt); sort(vecJet[j].begin(),vecJet[j].end(),ZxAODAnalysis::ComparePt); sort(vecJetL[j].begin(),vecJetL[j].end(),ZxAODAnalysis::ComparePt); xaod muoncontainer How to dowload it? xaod muoncontainer sort(vecJetP[j].begin(),vecJetP[j].end(),ZxAODAnalysis::ComparePt); } for(uint k=0;kmpx()/1000.); vmet_py[j].push_back(mmet->mpy()/1000.); xaod muoncontainer How to get it? xaod muoncontainer vwgtr[j].push_back(trigsf[j]); } /////////////////////////////////// // Final event selection Z->mumu // // Fill histograms // /////////////////////////////////// float Zmass = 0.,Zpt = 0.; xaod muoncontainer PasteShr xaod muoncontainer Particle Zpart; if(false){ for (int j=0;j<70;j++){ if(j==0 && passTrigger && vecLep[j].size()>1){ m_numCutFlow[8]+=wtcf; hPassCut->Fill(8, wtcf); } xaod muoncontainer How to get it for free? xaod muoncontainer if(vecLep[j].size()==2){ Zpart.TLV = vecLep[j][0].TLV+vecLep[j][1].TLV; Zmass = ZxAODAnalysis::MassM(vecLep[j][0].TLV,vecLep[j][1].TLV); Zpt = ZxAODAnalysis::PtM(vecLep[j][0].TLV,vecLep[j][1].TLV); double ChaProd = vecLep[j][0].CHA*vecLep[j][1].CHA; bool isZcand = (m_mmin 0.); xaod muoncontainer How to dowload it? xaod muoncontainer if(j==0 && passTrigger){ m_numCutFlow[9]+=wtcf; hPassCut->Fill(9, wtcf); } if ((isTruthCand ||isZcand) && j==0) Ztree[j]->Fill(); // if(selZee){ // double mceff1 = 0.92; // double mceff2 = 0.92; xaod muoncontainer PasteShr xaod muoncontainer // if(fabs(vecLep[j][0].TLV.Eta()) > 1.5){ // if(vecLep[j][0].TLV.Pt()<30){ // mceff1 =0.8; // }else{ // mceff1 =0.9; // } // }else{ // if(vecLep[j][0].TLV.Pt()<30){ // mceff1 =0.9; // }else if(vecLep[j][0].TLV.Pt()<40){ xaod muoncontainer How to dowload it? xaod muoncontainer // mceff1 =0.95; // }else{ // mceff1 =0.97; // } // } // if(fabs(vecLep[j][1].TLV.Eta()) > 1.5){ // if(vecLep[j][1].TLV.Pt()<30){ // mceff2 =0.8; // }else{ // mceff2 =0.9; xaod muoncontainer How to get it? xaod muoncontainer // } // }else{ // if(vecLep[j][1].TLV.Pt()<30){ // mceff2 =0.9; // }else if(vecLep[j][1].TLV.Pt()<40){ // mceff2 =0.95; // }else{ // mceff2 =0.97; // } // } xaod muoncontainer How to get it? xaod muoncontainer // // double elSF1 = vecLep[j][0].SF2; // double elSF2 = vecLep[j][1].SF2; // double effdata = 1.-(1.-elSF1*mceff1)*(1.-elSF2*mceff2); // double effmc = 1.-(1.-mceff1)*(1.-mceff2); // trigsf[j] = effdata/effmc; // } if (m_numZcand1<10.) std::cout<<"Trigger SF: "<Fill(Zmass, wt); if(j==0) { m_numCutFlow[10]+=wtcf; hPassCut->Fill(10, wtcf); } // if(vecJet[j].size()){ // double jeff = vecJetL[j][0].SF1; // vhZmass1j[j]->Fill(Zmass, wt*jeff); // if(vecJet[j].size()>1){ xaod muoncontainer How to use it? xaod muoncontainer // jeff *= vecJet[j][1].SF1; // vhZmass2j[j]->Fill(Zmass,wt*jeff); // if(vecJet[j].size()>2){ // jeff *= vecJet[j][2].SF1; // vhZmass3j[j]->Fill(Zmass, wt*jeff); // if(vecJet[j].size()>3){ // jeff *= vecJet[j][3].SF1; // vhZmass4j[j]->Fill(Zmass, wt); // } // } xaod muoncontainer How to get it for free? xaod muoncontainer // } // } } if(isZcand){ if(j==0) m_numZcand1+=wt; if(passTrigger){ vhAvmu[j]->Fill(avmu,wt); xaod muoncontainer How to get it for free? xaod muoncontainer if(j==0){ m_numCutFlow[11]+=wtcf; hPassCut->Fill(11, wtcf); havmu->Fill(avmu,wt); m_numZcand2+=wt; heventweights->Fill(2); heventweights->Fill(3, wtcf); heventweights->Fill(4, wt); xaod muoncontainer How to get it? xaod muoncontainer } vhLepPt[j]->Fill(vecLep[j][0].TLV.Pt(), wt); vhLepPt[j]->Fill(vecLep[j][1].TLV.Pt(), wt); vhLepPhi[j]->Fill(vecLep[j][0].TLV.Phi(), wt); vhLepPhi[j]->Fill(vecLep[j][1].TLV.Phi(), wt); vhLepEta[j]->Fill(vecLep[j][0].TLV.Eta(), wt); vhLepEta[j]->Fill(vecLep[j][1].TLV.Eta(), wt); // if(vecJet[j].size()>2){ // float jeff = vecJet[j][0].SF1*vecJet[j][1].SF1*vecJet[j][2].SF1; // vhLepPt3j[j]->Fill(vecLep[j][0].TLV.Pt(), wt*jeff); xaod muoncontainer How to get it? xaod muoncontainer // vhLepPt3j[j]->Fill(vecLep[j][1].TLV.Pt(), wt*jeff); // vhLepEta3j[j]->Fill(vecLep[j][0].TLV.Eta(), wt*jeff); // vhLepEta3j[j]->Fill(vecLep[j][1].TLV.Eta(), wt*jeff); // } // if(vecJet[j].size()>3){ // float jeff = vecJet[j][0].SF1*vecJet[j][1].SF1*vecJet[j][2].SF1*vecJet[j][3].SF1; // vhLepPt4j[j]->Fill(vecLep[j][0].TLV.Pt(), wt*jeff); // vhLepPt4j[j]->Fill(vecLep[j][1].TLV.Pt(), wt*jeff); // vhLepEta4j[j]->Fill(vecLep[j][0].TLV.Eta(), wt*jeff); // vhLepEta4j[j]->Fill(vecLep[j][1].TLV.Eta(), wt*jeff); xaod muoncontainer How to dowload it? xaod muoncontainer // } vhLepd0[j]->Fill(vecLep[j][0].ID, wt); vhLepd0[j]->Fill(vecLep[j][1].ID, wt); vhZpt[j]->Fill(Zpt, wt); // for(uint k=0;kFill(vecJet[j][k].TLV.Pt(),wt*jeff); // vhJetEta[j]->Fill(vecJet[j][k].TLV.Rapidity(), wt*jeff); // } // printout high-multiplicity events xaod muoncontainer How to get it? xaod muoncontainer // if(j==0 && !isMC && vecJet[j].size()>2){ // std::cout<<"Z+jets event, mass: "< run/evt/LB: "<runNumber()<<", "<eventNumber()<<", "<lumiBlock()<0) jeff = jeff * vecJet[j][k-1].SF1; // vhJetN[j]->Fill(float(k),wt*jeff); // if(NPUV<10.){ // vhJetNb[j]->Fill(float(k),wt*jeff); // }else if(NPUV<14.){ // vhJetNc[j]->Fill(float(k),wt*jeff); // }else{ // vhJetNd[j]->Fill(float(k),wt*jeff); xaod muoncontainer PasteShr xaod muoncontainer // } // } // // // // vhJetNex[j]->Fill(float(vecJet[j].size()),wt*jeff); // if(isTruthCand){ // vh2JetNex[j]->Fill(float(vTJet.size()),float(vecJet[j].size()), wt*jeff); // } xaod muoncontainer How to dowload it? xaod muoncontainer // if(vecJet[j].size()){ // jeff = vecJet[j][0].SF1; // if(j==0 && passTrigger) m_numZjets+=wt; // vhJet1Pt[j]->Fill(vecJet[j][0].TLV.Pt(), wt*jeff); // vhJet1Eta[j]->Fill(vecJet[j][0].TLV.Rapidity(), wt*jeff); // vhJetJvt[j]->Fill(vecJetP[j][0].ID, wt*jeff); // vhJetRpt[j]->Fill(vecJetP[j][0].ID2, wt*jeff); // vhJvfCorr[j]->Fill(vecJetP[j][0].ID3, wt*jeff); xaod muoncontainer How to use it? xaod muoncontainer // if(DeltaPhi(Zpart.TLV,vecJetP[j][0].TLV) > 2.6 && Zpart.TLV.Pt()>30.){ // vhJetJvtb[j]->Fill(vecJetP[j][0].ID, wt*jeff); // } // } // // // if(vecJetL[j].size()){ // jeff = vecJetL[j][0].SF1; // vhJet1LPt[j]->Fill(vecJetL[j][0].TLV.Pt(), wt*jeff); // vhJet1LEta[j]->Fill(vecJetL[j][0].TLV.Rapidity(), wt*jeff); xaod muoncontainer How to get it for free? xaod muoncontainer // } // if(vecJet[j].size()>2){ // jeff = vecJet[j][0].SF1*vecJet[j][1].SF1*vecJet[j][2].SF1; // vhJet3Pt[j]->Fill(vecJet[j][2].TLV.Pt(), wt*jeff); // vhJet3Eta[j]->Fill(vecJet[j][2].TLV.Rapidity(), wt*jeff); // } // if(vecJet[j].size()>3){ // jeff = vecJet[j][0].SF1*vecJet[j][1].SF1*vecJet[j][2].SF1*vecJet[j][3].SF1; // vhJet4Pt[j]->Fill(vecJet[j][3].TLV.Pt(), wt*jeff); // vhJet4Eta[j]->Fill(vecJet[j][3].TLV.Rapidity(), wt*jeff); xaod muoncontainer How to get it? xaod muoncontainer // } } //pass trigger } //Zcand }// two muons }//Loop over syst variations } xaod muoncontainer How to dowload it? xaod muoncontainer ///////////////////////////////// // Final event selection W->ln// // Fill histograms // ///////////////////////////////// //select here for W+ or W- double Wselectioncharge = -1.; xaod muoncontainer How to get it for free? xaod muoncontainer if(true){ float transmass=0. ; float etmisscut = 25. ; float metpt=sqrt(mmet->mpx()*mmet->mpx()+mmet->mpy()*mmet->mpy()); float metphi=acos(mmet->mpx()/metpt); for (int j=0;j<70;j++){ xaod muoncontainer How to use it? xaod muoncontainer if(j==0 && passTrigger && vecLep[j].size()==1) { m_numCutFlow[8]+=wtcf; hPassCut->Fill(8, wtcf); } if(vecLep[j].size()==1 && (vecLep[j][0].CHA * Wselectioncharge > 0) ){ transmass = sqrt(2*vecLep[j][0].TLV.Pt()*metpt/1000.*( 1-cos( vecLep[j][0].TLV.Phi()-metphi ) ) ); xaod muoncontainer How to use it? xaod muoncontainer // Zmass = ZxAODAnalysis::MassM(vecLep[j][0].TLV,vecLep[j][1].TLV); // Zpt = ZxAODAnalysis::PtM(vecLep[j][0].TLV,vecLep[j][1].TLV); // double ChaProd = vecLep[j][0].CHA*vecLep[j][1].CHA; // bool isZcand = (m_mmin 0.); bool isWcand = (50. < transmass && transmass < 120. && metpt/1000. > etmisscut); if(j==0 && passTrigger) { m_numCutFlow[9]+=wtcf; hPassCut->Fill(9, wtcf); xaod muoncontainer How to dowload it? xaod muoncontainer } // save space for the moment: only nominal tree if((isWcand) && j==0) Ztree[j]->Fill(); wt = wt00*vecLep[j][0].SF1 * vecLep[j][1].SF1 * trigsf[j]; if(j==13) wt = wt01*vecLep[j][0].SF1 * vecLep[j][1].SF1 * trigsf[j]; if(j==14) wt = wt02*vecLep[j][0].SF1 * vecLep[j][1].SF1 * trigsf[j]; if(passTrigger && isWcand){ vhTransmass[j]->Fill(transmass, wt); xaod muoncontainer PasteShr xaod muoncontainer if(j==0) { m_numCutFlow[10]+=wtcf; hPassCut->Fill(10, wtcf); } } if(isWcand){ if(j==0) m_numWcand1+=wt; xaod muoncontainer How to get it? xaod muoncontainer if(passTrigger){ if(j==0){ m_numCutFlow[11]+=wtcf; hPassCut->Fill(11, wtcf); havmu->Fill(avmu,wt); m_numWcand2+=wt; } // vhLepPt[j]->Fill(vecLep[j][0].TLV.Pt(), wt); // vhLepPhi[j]->Fill(vecLep[j][0].TLV.Phi(), wt); xaod muoncontainer How to get it for free? xaod muoncontainer // vhLepEta[j]->Fill(vecLep[j][0].TLV.Eta(), wt); // // for(uint k=0;kFill(vecJet[j][k].TLV.Pt(),wt); // vhJetEta[j]->Fill(vecJet[j][k].TLV.Rapidity(), wt); // } // // for(uint k=0;kFill(float(k),wt); // } xaod muoncontainer How to dowload it? xaod muoncontainer // // if(vecJetP[j].size()){ // if (fabs(vecJetP[j][0].TLV.Eta())<2.4) vhJetJvt[j]->Fill(vecJetP[j][0].ID, wt); // } // // if(vecJet[j].size()){ // vhJet1Pt[j]->Fill(vecJet[j][0].TLV.Pt(), wt); // vhJet1Eta[j]->Fill(vecJet[j][0].TLV.Rapidity(), wt); // } // xaod muoncontainer How to get it? xaod muoncontainer // if(vecJetL[j].size()){ // vhJet1LPt[j]->Fill(vecJetL[j][0].TLV.Pt(), wt); // vhJet1LEta[j]->Fill(vecJetL[j][0].TLV.Rapidity(), wt); // } } //pass trigger } //Wcand }// one muon }//Loop over syst variations } xaod muoncontainer PasteShr xaod muoncontainer return EL::StatusCode::SUCCESS; } EL::StatusCode ZxAODAnalysis :: postExecute () { // Here you do everything that needs to be done after the main event // processing. This is typically very rare, particularly in user xaod muoncontainer How to dowload it? xaod muoncontainer // code. It is mainly used in implementing the NTupleSvc. return EL::StatusCode::SUCCESS; } EL::StatusCode ZxAODAnalysis :: finalize () { // This method is the mirror image of initialize(), meaning it gets // called after the last event has been processed on the worker node xaod muoncontainer How to get it? xaod muoncontainer // and allows you to finish up any objects you created in // initialize() before they are written to disk. This is actually // fairly rare, since this happens separately for each worker node. // Most of the time you want to do your post-processing on the // submission node after all your histogram outputs have been // merged. This is different from histFinalize() in that it only // gets called on worker nodes that processed input events. // Use for writing new config files after switching configuration off //m_PileupReweighting->WriteToFile(); xaod muoncontainer How to get it? xaod muoncontainer Info("finalize()", "**** From meta data: ****"); Info("finalize()", "Initial Number of events = %.0f", m_initialEvents); Info("finalize()", "Final Number of events = %.0f", m_finalEvents); Info("finalize()", "Initial sum of weights = %.10f", m_initialSumOfWeights); Info("finalize()", "Final sum of weights = %.10f", m_finalSumOfWeights); std::cout<=2): %.10f, %.10f", m_numCutFlow[15], m_numCutFlow[15]/m_numCutFlow[15]); Info("finalize()", "Cut14 (truth pT): %.10f, %.10f", m_numCutFlow[16], m_numCutFlow[16]/m_numCutFlow[15]); Info("finalize()", "Cut15 (truth eta): %.10f, %.10f", m_numCutFlow[17], m_numCutFlow[17]/m_numCutFlow[16]); Info("finalize()", "Cut16 (truth ==2): %.10f, %.10f", m_numCutFlow[18], m_numCutFlow[18]/m_numCutFlow[17]); Info("finalize()", "Cut16 (truth Zmass): %.10f, %.10f", m_numCutFlow[19], m_numCutFlow[19]/m_numCutFlow[18]); // GRL if( m_grl ) { delete m_grl; xaod muoncontainer How to get it? xaod muoncontainer m_grl = 0; } // Muon Calibration if(m_muonCalibrationAndSmearingTool){ delete m_muonCalibrationAndSmearingTool; m_muonCalibrationAndSmearingTool = 0; } xaod muoncontainer PasteShr xaod muoncontainer // jet cleaning if( m_jetCleaning ) { delete m_jetCleaning; m_jetCleaning = 0; } // TDT if( m_confTool ) { xaod muoncontainer How to get it? xaod muoncontainer delete m_confTool; m_confTool = 0; } if( m_tdt ) { delete m_tdt; m_tdt = 0; } Info("finalize()", "All cleaned up"); xaod muoncontainer How to get it for free? xaod muoncontainer return EL::StatusCode::SUCCESS; } EL::StatusCode ZxAODAnalysis :: histFinalize () { Info("histfinalize()", " The End"); xaod muoncontainer How to get it? xaod muoncontainer // This method is the mirror image of histInitialize(), meaning it // gets called after the last event has been processed on the worker // node and allows you to finish up any objects you created in // histInitialize() before they are written to disk. This is // actually fairly rare, since this happens separately for each // worker node. Most of the time you want to do your // post-processing on the submission node after all your histogram // outputs have been merged. This is different from finalize() in // that it gets called on all worker nodes regardless of whether // they processed input events. xaod muoncontainer PasteShr xaod muoncontainer return EL::StatusCode::SUCCESS; } xaod muoncontainer