// Authors: Andres Florez, Alfredo Gurrola, Eduardo Luiggi, Chi Nhan Nguyen #include "HighMassAnalysis/Analysis/interface/HiMassTauAnalysis.h" #include "FWCore/ServiceRegistry/interface/Service.h" #include "CommonTools/UtilAlgos/interface/TFileService.h" #include "SHarper/HEEPAnalyzer/interface/HEEPEle.h" #include "SHarper/HEEPAnalyzer/interface/HEEPCutCodes.h" #include #include #include using namespace std; using namespace edm; using namespace reco; // constructors and destructor HiMassTauAnalysis::HiMassTauAnalysis(const ParameterSet& iConfig) { _AnalyzeData = iConfig.getParameter("AnalyzeData"); _AnalyzeSignal = iConfig.getParameter("AnalyzeSignal"); //-----Generator level Inputs _GenParticleSource = iConfig.getUntrackedParameter("GenParticleSource"); //-----Inputs to determine which channel to analyze _AnalyzeTauForLeg1 = iConfig.getParameter("AnalyzeTauForLeg1"); _AnalyzeMuonForLeg1 = iConfig.getParameter("AnalyzeMuonForLeg1"); _AnalyzeElectronForLeg1 = iConfig.getParameter("AnalyzeElectronForLeg1"); _AnalyzeTauForLeg2 = iConfig.getParameter("AnalyzeTauForLeg2"); _AnalyzeMuonForLeg2 = iConfig.getParameter("AnalyzeMuonForLeg2"); _AnalyzeElectronForLeg2 = iConfig.getParameter("AnalyzeElectronForLeg2"); //-----Reco Tau Inputs _RecoTauSource = iConfig.getParameter("RecoTauSource"); _RecoTauEtaCut = iConfig.getParameter("RecoTauEtaCut"); _RecoTauPtMinCut = (iConfig.getParameter >("RecoTauPtMinCut")).at(0); _RecoTauPtMaxCut = (iConfig.getParameter >("RecoTauPtMaxCut")).at(0); _DoRecoTauDiscrByLeadTrack = (iConfig.getParameter >("DoRecoTauDiscrByLeadTrack")).at(0); _UseRecoTauDiscrByLeadTrackFlag = iConfig.getParameter("UseRecoTauDiscrByLeadTrackFlag"); _RecoTauDiscrByLeadTrack = iConfig.getUntrackedParameter("RecoTauDiscrByLeadTrack"); _DoRecoTauDiscrByLeadTrackNhits = (iConfig.getParameter >("DoRecoTauDiscrByLeadTrackNhits")).at(0); _RecoTauLeadTrackMinHits = (iConfig.getParameter >("RecoTauLeadTrackMinHits")).at(0); _DoRecoTauDiscrByH3x3OverP = (iConfig.getParameter >("DoRecoTauDiscrByH3x3OverP")).at(0); _RecoTauH3x3OverP = (iConfig.getParameter >("RecoTauH3x3OverP")).at(0); _DoRecoTauDiscrByIsolation = (iConfig.getParameter >("DoRecoTauDiscrByIsolation")).at(0); _UseRecoTauDiscrByIsolationFlag = iConfig.getParameter("UseRecoTauDiscrByIsolationFlag"); _UseRecoTauIsoSumPtInsteadOfNiso = iConfig.getParameter("UseRecoTauIsoSumPtInsteadOfNiso"); _UseRecoTauEllipseForEcalIso = iConfig.getParameter("UseRecoTauEllipseForEcalIso"); _RecoTauEcalIsoRphiForEllipse = iConfig.getParameter("RecoTauEcalIsoRphiForEllipse"); _RecoTauEcalIsoRetaForEllipse = iConfig.getParameter("RecoTauEcalIsoRetaForEllipse"); _UseTrackAndGammaCombinedIso = iConfig.getParameter("UseTrackAndGammaCombinedIso"); _RecoTauIsoSumPtMinCutValue = (iConfig.getParameter >("RecoTauIsoSumPtMinCutValue")).at(0); _RecoTauIsoSumPtMaxCutValue = (iConfig.getParameter >("RecoTauIsoSumPtMaxCutValue")).at(0); _RecoTauNisoMax = (iConfig.getParameter >("RecoTauNisoMax")).at(0); _RecoTauTrackNisoMax = (iConfig.getParameter >("RecoTauTrackNisoMax")).at(0); _RecoTauEcalNisoMax = (iConfig.getParameter >("RecoTauEcalNisoMax")).at(0); _RecoTauTrackIsoSumPtMinCutValue = (iConfig.getParameter >("RecoTauTrackIsoSumPtMinCutValue")).at(0); _RecoTauTrackIsoSumPtMaxCutValue = (iConfig.getParameter >("RecoTauTrackIsoSumPtMaxCutValue")).at(0); _RecoTauEcalIsoSumPtMinCutValue = (iConfig.getParameter >("RecoTauEcalIsoSumPtMinCutValue")).at(0); _RecoTauEcalIsoSumPtMaxCutValue = (iConfig.getParameter >("RecoTauEcalIsoSumPtMaxCutValue")).at(0); _RecoTauDiscrByIsolation = iConfig.getUntrackedParameter("RecoTauDiscrByIsolation"); _RecoTau1ProngRequirement = (iConfig.getParameter >("RecoTau1ProngRequirement")).at(0); _RecoTau2ProngRequirement = (iConfig.getParameter >("RecoTau1ProngRequirement")).at(1); _DoRecoTauDiscrBySignalTracksAndGammasMass = iConfig.getParameter("DoRecoTauDiscrBySignalTracksAndGammasMass"); _RecoTauSignal3ProngAndGammasMassMinCutValue = iConfig.getParameter("RecoTauSignal3ProngAndGammasMassMinCutValue"); _RecoTauSignal3ProngAndGammasMassMaxCutValue = iConfig.getParameter("RecoTauSignal3ProngAndGammasMassMaxCutValue"); _RecoTauSignal1ProngAndGammasMassForPionMinCutValue = iConfig.getParameter("RecoTauSignal1ProngAndGammasMassForPionMinCutValue"); _RecoTauSignal1ProngAndGammasMassForPionMaxCutValue = iConfig.getParameter("RecoTauSignal1ProngAndGammasMassForPionMaxCutValue"); _RecoTauSignal1ProngAndGammasMassForKaonVetoMinCutValue = iConfig.getParameter("RecoTauSignal1ProngAndGammasMassForKaonVetoMinCutValue"); _RecoTauSignal1ProngAndGammasMassForKaonVetoMaxCutValue = iConfig.getParameter("RecoTauSignal1ProngAndGammasMassForKaonVetoMaxCutValue"); _RecoTauLeadTrackThreshold = (iConfig.getParameter >("RecoTauLeadTrackThreshold")).at(0); _RecoTauSigGamThreshold = (iConfig.getParameter >("RecoTauSigGamThreshold")).at(0); _RecoTauIsoDeltaRCone = iConfig.getParameter("RecoTauIsoDeltaRCone"); _RecoTauTrackIsoTrkThreshold = iConfig.getParameter("RecoTauTrackIsoTrkThreshold"); _RecoTauGammaIsoGamThreshold = iConfig.getParameter("RecoTauGammaIsoGamThreshold"); _DoRecoTauDiscrAgainstElectron = iConfig.getParameter("DoRecoTauDiscrAgainstElectron"); _RecoTauDiscrAgainstElectron = iConfig.getUntrackedParameter("RecoTauDiscrAgainstElectron"); _DoRecoTauDiscrByCrackCut = iConfig.getParameter("DoRecoTauDiscrByCrackCut"); _DoRecoTauDiscrAgainstMuon = (iConfig.getParameter >("DoRecoTauDiscrAgainstMuon")).at(0); _RecoTauDiscrAgainstMuon = iConfig.getUntrackedParameter("RecoTauDiscrAgainstMuon"); _SetTANC = iConfig.getParameter("SetTANC"); _RecoTau2EtaCut = iConfig.getParameter("RecoTauEtaCut"); _RecoTau2PtMinCut = (iConfig.getParameter >("RecoTauPtMinCut")).at(1); _RecoTau2PtMaxCut = (iConfig.getParameter >("RecoTauPtMaxCut")).at(1); _RecoTau2H3x3OverP = (iConfig.getParameter >("RecoTauH3x3OverP")).at(1); _RecoTau2LeadTrackMinHits = (iConfig.getParameter >("RecoTauLeadTrackMinHits")).at(1); _RecoTau2TrackNisoMax = (iConfig.getParameter >("RecoTauTrackNisoMax")).at(1); _RecoTau2TrackIsoSumPtMinCutValue = (iConfig.getParameter >("RecoTauTrackIsoSumPtMinCutValue")).at(1); _RecoTau2TrackIsoSumPtMaxCutValue = (iConfig.getParameter >("RecoTauTrackIsoSumPtMaxCutValue")).at(1); _RecoTau2EcalNisoMax = (iConfig.getParameter >("RecoTauEcalNisoMax")).at(1); _RecoTau2EcalIsoSumPtMinCutValue = (iConfig.getParameter >("RecoTauEcalIsoSumPtMinCutValue")).at(1); _RecoTau2EcalIsoSumPtMaxCutValue = (iConfig.getParameter >("RecoTauEcalIsoSumPtMaxCutValue")).at(1); _RecoTau2LeadTrackThreshold = (iConfig.getParameter >("RecoTauLeadTrackThreshold")).at(1); _RecoTau2SigGamThreshold = (iConfig.getParameter >("RecoTauSigGamThreshold")).at(1); _RecoTau2NisoMax = (iConfig.getParameter >("RecoTauNisoMax")).at(1); _RecoTau2IsoSumPtMinCutValue = (iConfig.getParameter >("RecoTauIsoSumPtMinCutValue")).at(1); _RecoTau2IsoSumPtMaxCutValue = (iConfig.getParameter >("RecoTauIsoSumPtMaxCutValue")).at(1); _MatchTau2ToGen = (iConfig.getParameter >("MatchTauToGen")).at(1); _DoRecoTau2DiscrByLeadTrack = (iConfig.getParameter >("DoRecoTauDiscrByLeadTrack")).at(1); _DoRecoTau2DiscrByLeadTrackNhits = (iConfig.getParameter >("DoRecoTauDiscrByLeadTrackNhits")).at(1); _DoRecoTau2DiscrByH3x3OverP = (iConfig.getParameter >("DoRecoTauDiscrByH3x3OverP")).at(1); _DoRecoTau2DiscrByIsolation = (iConfig.getParameter >("DoRecoTauDiscrByIsolation")).at(1); _DoRecoTau2DiscrAgainstMuon = (iConfig.getParameter >("DoRecoTauDiscrAgainstMuon")).at(1); //-----Reco Muon Inputs _RecoMuonSource = iConfig.getParameter("RecoMuonSource"); _RecoMuonEtaCut = iConfig.getParameter("RecoMuonEtaCut"); _RecoMuonPtMinCut = iConfig.getParameter("RecoMuonPtMinCut"); _RecoMuonPtMaxCut = iConfig.getParameter("RecoMuonPtMaxCut"); _DoRecoMuonDiscrByGlobal = iConfig.getParameter("DoRecoMuonDiscrByGlobal"); _DoRecoMuonDiscrByIsolation = iConfig.getParameter("DoRecoMuonDiscrByIsolation"); _RecoMuonTrackIsoSumPtMinCutValue = iConfig.getParameter("RecoMuonTrackIsoSumPtMinCutValue"); _RecoMuonTrackIsoSumPtMaxCutValue = iConfig.getParameter("RecoMuonTrackIsoSumPtMaxCutValue"); _RecoMuonEcalIsoSumPtMinCutValue = iConfig.getParameter("RecoMuonEcalIsoSumPtMinCutValue"); _RecoMuonEcalIsoSumPtMaxCutValue = iConfig.getParameter("RecoMuonEcalIsoSumPtMaxCutValue"); _RecoMuonIsoDeltaRCone = iConfig.getParameter("RecoMuonIsoDeltaRCone"); _RecoMuonTrackIsoTrkThreshold = iConfig.getParameter("RecoMuonTrackIsoTrkThreshold"); _RecoMuonEcalIsoRecHitThreshold = iConfig.getParameter("RecoMuonEcalIsoRecHitThreshold"); _DoRecoMuonDiscrByIp = iConfig.getParameter("DoRecoMuonDiscrByIp"); _RecoMuonIpCut = iConfig.getParameter("RecoMuonIpCut"); _DoRecoMuonDiscrByPionVeto = iConfig.getParameter("DoRecoMuonDiscrByPionVeto"); _RecoMuonCaloCompCoefficient = iConfig.getParameter("RecoMuonCaloCompCoefficient"); _RecoMuonSegmCompCoefficient = iConfig.getParameter("RecoMuonSegmCompCoefficient"); _RecoMuonAntiPionCut = iConfig.getParameter("RecoMuonAntiPionCut"); //-----Reco Electron Inputs _RecoElectronSource = iConfig.getParameter("RecoElectronSource"); _GsfElectronSource = iConfig.getParameter("RecoGsfElectronSource"); _UseHeepInfo = iConfig.getParameter("UseHeepInfo"); _IsoValElecPFDr03VInputTag = iConfig.getParameter< std::vector >("IsoValElecDr03"); _IsoValElecPFDr04VInputTag = iConfig.getParameter< std::vector >("IsoValElecDr04"); _ElecRhoIsoSource = iConfig.getParameter("ElecRhoIsoSource"); _ConversionSource = iConfig.getParameter("ConversionSource"); _RecoElectronEtaCut = iConfig.getParameter("RecoElectronEtaCut"); _RecoElectronPtMinCut = iConfig.getParameter("RecoElectronPtMinCut"); _RecoElectronPtMaxCut = iConfig.getParameter("RecoElectronPtMaxCut"); _DoRecoElectronDiscrByTrackIsolation = iConfig.getParameter("DoRecoElectronDiscrByTrackIsolation"); _RecoElectronTrackIsoSumPtMaxCutValue = iConfig.getParameter("RecoElectronTrackIsoSumPtMaxCutValue"); _RecoElectronTrackIsoSumPtMinCutValue = iConfig.getParameter("RecoElectronTrackIsoSumPtMinCutValue"); _RecoElectronTrackIsoDeltaRCone = iConfig.getParameter("RecoElectronTrackIsoDeltaRCone"); _RecoElectronTrackIsoTrkThreshold = iConfig.getParameter("RecoElectronTrackIsoTrkThreshold"); _DoRecoElectronDiscrByEcalIsolation = iConfig.getParameter("DoRecoElectronDiscrByEcalIsolation"); _RecoElectronEcalIsoSumPtMaxCutValue = iConfig.getParameter("RecoElectronEcalIsoSumPtMaxCutValue"); _RecoElectronEcalIsoSumPtMinCutValue = iConfig.getParameter("RecoElectronEcalIsoSumPtMinCutValue"); _RecoElectronEcalIsoDeltaRCone = iConfig.getParameter("RecoElectronEcalIsoDeltaRCone"); _RecoElectronEcalIsoRecHitThreshold = iConfig.getParameter("RecoElectronEcalIsoRecHitThreshold"); _DoRecoElectronDiscrByIp = iConfig.getParameter("DoRecoElectronDiscrByIp"); _RecoElectronIpCut = iConfig.getParameter("RecoElectronIpCut"); _DoRecoElectronDiscrByEoverP = iConfig.getParameter("DoRecoElectronDiscrByEoverP"); _RecoElectronEoverPMax = iConfig.getParameter("RecoElectronEoverPMax"); _RecoElectronEoverPMin = iConfig.getParameter("RecoElectronEoverPMin"); _DoRecoElectronDiscrByHoverEm = iConfig.getParameter("DoRecoElectronDiscrByHoverEm"); _RecoElectronHoverEmCut = iConfig.getParameter("RecoElectronHoverEmCut"); _DoRecoElectronDiscrBySigmaIEtaIEta = iConfig.getParameter("DoRecoElectronDiscrBySigmaIEtaIEta"); _RecoElectronSigmaIEtaIEta = iConfig.getParameter("RecoElectronSigmaIEtaIEta"); _DoRecoElectronDiscrByDEtaIn = iConfig.getParameter("DoRecoElectronDiscrByDEtaIn"); _RecoElectronEEDEtaIn = iConfig.getParameter("RecoElectronEEDEtaIn"); _RecoElectronEBDEtaIn = iConfig.getParameter("RecoElectronEBDEtaIn"); _DoRecoElectronDiscrByDPhiIn = iConfig.getParameter("DoRecoElectronDiscrByDPhiIn"); _RecoElectronEEDPhiIn = iConfig.getParameter("RecoElectronEEDPhiIn"); _RecoElectronEBDPhiIn = iConfig.getParameter("RecoElectronEBDPhiIn"); _DoRecoElectronDiscrBySCE2by5Over5by5 = iConfig.getParameter("DoRecoElectronDiscrBySCE2by5Over5by5"); _RecoElectronEBscE1by5Over5by5 = iConfig.getParameter("RecoElectronEBscE1by5Over5by5"); _RecoElectronEBscE2by5Over5by5 = iConfig.getParameter("RecoElectronEBscE2by5Over5by5"); _DoRecoElectronDiscrByMissingHits = iConfig.getParameter("DoRecoElectronDiscrByMissingHits"); _RecoElectronMissingHits = iConfig.getParameter("RecoElectronMissingHits"); _DoRecoElectronDiscrByEcalDrivenSeed = iConfig.getParameter("DoRecoElectronDiscrByEcalDrivenSeed"); _DoRecoElectronDiscrByTrackerDrivenSeed = iConfig.getParameter("DoRecoElectronDiscrByTrackerDrivenSeed"); //-----Reco Jet Inputs _RecoJetSource = iConfig.getParameter("RecoJetSource"); _RecoJetEtaMinCut = iConfig.getParameter("RecoJetEtaMinCut"); _RecoJetEtaMaxCut = iConfig.getParameter("RecoJetEtaMaxCut"); _RecoJetPtCut = iConfig.getParameter("RecoJetPtCut"); _UseCorrectedJet = iConfig.getParameter("UseCorrectedJet"); _RemoveJetOverlapWithMuons = iConfig.getParameter("RemoveJetOverlapWithMuons"); _JetMuonMatchingDeltaR = iConfig.getParameter("JetMuonMatchingDeltaR"); _RemoveJetOverlapWithElectrons = iConfig.getParameter("RemoveJetOverlapWithElectrons"); _JetElectronMatchingDeltaR = iConfig.getParameter("JetElectronMatchingDeltaR"); _RemoveJetOverlapWithTaus = iConfig.getParameter("RemoveJetOverlapWithTaus"); _JetTauMatchingDeltaR = iConfig.getParameter("JetTauMatchingDeltaR"); _ApplyJetBTagging = iConfig.getParameter("ApplyJetBTagging"); _JetBTaggingTCHEcut = iConfig.getParameter("JetBTaggingTCHEcut"); _UseVBFJets = iConfig.getParameter("UseVBFJets"); _VBFJetsDeltaEta = iConfig.getParameter("VBFJetsDeltaEta"); //-----Vertex Inputs _RecoVertexSource = iConfig.getParameter("RecoVertexSource"); _RecoVertexMaxZposition = iConfig.getParameter("RecoVertexMaxZposition"); _RecoVertexMinTracks = iConfig.getParameter("RecoVertexMinTracks"); _RecoVertexTrackWeight = iConfig.getParameter("RecoVertexTrackWeight"); //-----Trigger Inputs _RecoTriggerSource = iConfig.getParameter("RecoTriggerSource"); _TriggerRequirements = iConfig.getParameter >("TriggerRequirements"); //-----Topology Inputs //_RecoDiTauSource = iConfig.getParameter("RecoDiTauSource"); _RecoMetSource = iConfig.getParameter("RecoMetSource"); _DoDiscrByMet = iConfig.getParameter("DoDiscrByMet"); _CalculateMetUsingOnlyLeg1AndLeg2 = iConfig.getParameter("CalculateMetUsingOnlyLeg1AndLeg2"); _RecoMetCut = iConfig.getParameter("RecoMetCut"); _DoDiTauDiscrByDeltaR = iConfig.getParameter("DoDiTauDiscrByDeltaR"); _DiTauDeltaRCut = iConfig.getParameter("DiTauDeltaRCut"); _MuTauDeltaRCut = iConfig.getParameter("MuTauDeltaRCut"); _UseTauSeedTrackForDiTauDiscrByOSLS = iConfig.getParameter("UseTauSeedTrackForDiTauDiscrByOSLS"); _DiTauDiscrByOSLSType = iConfig.getParameter("DiTauDiscrByOSLSType"); _DoDiTauDiscrByCosDphi = iConfig.getParameter("DoDiTauDiscrByCosDphi"); _DiTauCosDphiMinCut = iConfig.getParameter("DiTauCosDphiMinCut"); _DiTauCosDphiMaxCut = iConfig.getParameter("DiTauCosDphiMaxCut"); _DoDiscrByMassReco = iConfig.getParameter("DoDiscrByMassReco"); _UseVectorSumOfVisProductsAndMetMassReco = iConfig.getParameter("UseVectorSumOfVisProductsAndMetMassReco"); _UseCollinearApproxMassReco = iConfig.getParameter("UseCollinearApproxMassReco"); _UseCollinearApproxMassReco = false; _MassMinCut = iConfig.getParameter("MassMinCut"); _MassMaxCut = iConfig.getParameter("MassMaxCut"); _DoDiTauDiscrByCDFzeta2D = iConfig.getParameter("DoDiTauDiscrByCDFzeta2D"); _PZetaCutCoefficient = iConfig.getParameter("PZetaCutCoefficient"); _PZetaVisCutCoefficient = iConfig.getParameter("PZetaVisCutCoefficient"); _CDFzeta2DCutValue = iConfig.getParameter("CDFzeta2DCutValue"); _DoDiTauDiscrByDeltaPtDivSumPt = iConfig.getParameter("DoDiTauDiscrByDeltaPtDivSumPt"); _DiTauDeltaPtDivSumPtMinCutValue = iConfig.getParameter("DiTauDeltaPtDivSumPtMinCutValue"); _DiTauDeltaPtDivSumPtMaxCutValue = iConfig.getParameter("DiTauDeltaPtDivSumPtMaxCutValue"); _DoDiTauDiscrByDeltaPt = iConfig.getParameter("DoDiTauDiscrByDeltaPt"); _DiTauDeltaPtMinCutValue = iConfig.getParameter("DiTauDeltaPtMinCutValue"); _DiTauDeltaPtMaxCutValue = iConfig.getParameter("DiTauDeltaPtMaxCutValue"); _DoDiscrByLeg1MetDphi = iConfig.getParameter("DoDiscrByLeg1MetDphi"); _Leg1MetDphiMinCut = iConfig.getParameter("Leg1MetDphiMinCut"); _Leg1MetDphiMaxCut = iConfig.getParameter("Leg1MetDphiMaxCut"); _DoDiscrByLeg2MetDphi = iConfig.getParameter("DoDiscrByLeg2MetDphi"); _Leg2MetDphiMinCut = iConfig.getParameter("Leg2MetDphiMinCut"); _Leg2MetDphiMaxCut = iConfig.getParameter("Leg2MetDphiMaxCut"); _DoTauDiscrByIsZeeCut = iConfig.getParameter("DoTauDiscrByIsZeeCut"); _DoDiscrByLeg1MetMt = iConfig.getParameter("DoDiscrByLeg1MetMt"); _Leg1MetMtMinCut = iConfig.getParameter("Leg1MetMtMinCut"); _Leg1MetMtMaxCut = iConfig.getParameter("Leg1MetMtMaxCut"); _DoDiscrByLeg2MetMt = iConfig.getParameter("DoDiscrByLeg2MetMt"); _Leg2MetMtMinCut = iConfig.getParameter("Leg2MetMtMinCut"); _Leg2MetMtMaxCut = iConfig.getParameter("Leg2MetMtMaxCut"); /* // for PF based iso _MuonPFIsoValSource = iConfig.getParameter >("PFMuonIsoVal"); _MuonPFIsoDepSource = iConfig.getParameter >("PFMuonIsoDep"); */ //-----do matching to gen? _MatchLeptonToGen = iConfig.getParameter("MatchLeptonToGen"); _UseLeptonMotherId = iConfig.getParameter("UseLeptonMotherId"); _UseLeptonGrandMotherId = iConfig.getParameter("UseLeptonGrandMotherId"); _LeptonMotherId = iConfig.getParameter("LeptonMotherId"); _LeptonGrandMotherId = iConfig.getParameter("LeptonGrandMotherId"); _MatchTauToGen = (iConfig.getParameter >("MatchTauToGen")).at(0); _UseTauMotherId = iConfig.getParameter("UseTauMotherId"); _UseTauGrandMotherId = iConfig.getParameter("UseTauGrandMotherId"); _TauMotherId = iConfig.getParameter("TauMotherId"); _TauGrandMotherId = iConfig.getParameter("TauGrandMotherId"); _TauToGenMatchingDeltaR = iConfig.getParameter("TauToGenMatchingDeltaR"); //-----ntuple Inputs _DoProduceNtuple = iConfig.getParameter("DoProduceNtuple"); _NtupleTreeName = (iConfig.getUntrackedParameter("NtupleTreeName")); //-----Fill Histograms? _FillRecoVertexHists = iConfig.getParameter("FillRecoVertexHists"); _FillGenTauHists = iConfig.getParameter("FillGenTauHists"); _FillRecoTauHists = iConfig.getParameter("FillRecoTauHists"); _FillRecoMuonHists = iConfig.getParameter("FillRecoMuonHists"); _FillRecoElectronHists = iConfig.getParameter("FillRecoElectronHists"); _FillRecoMuonHists = false; _FillRecoElectronHists = false; _FillRecoJetHists = iConfig.getParameter("FillRecoJetHists"); _FillTopologyHists = iConfig.getParameter("FillTopologyHists"); //-----Event Sequence inputs _RecoTriggersNmin = iConfig.getParameter("RecoTriggersNmin"); _RecoVertexNmin = iConfig.getParameter("RecoVertexNmin"); _RecoVertexNmax = iConfig.getParameter("RecoVertexNmax"); _RecoLeg1Nmin = (iConfig.getParameter >("RecoNmin")).at(0); _RecoLeg2Nmin = (iConfig.getParameter >("RecoNmin")).at(1); _RecoLeg1Nmax = (iConfig.getParameter >("RecoNmax")).at(0); _RecoLeg2Nmax = (iConfig.getParameter >("RecoNmax")).at(1); _RecoJetNmin = iConfig.getParameter("RecoJetNmin"); _RecoJetNmax = iConfig.getParameter("RecoJetNmax"); _CombinationsNmin = iConfig.getParameter("CombinationsNmin"); _CombinationsNmax = iConfig.getParameter("CombinationsNmax"); _EventSelectionSequence = iConfig.getParameter< vector >("EventSelectionSequence"); //-----Inputs for systematic uncertainties _CalculatePdfSystematicUncertanties = iConfig.getParameter("CalculatePdfSystematicUncertanties"); pdfWeightTags_ = iConfig.getUntrackedParameter >("PdfWeightTags"); _CalculateFSRSystematics = iConfig.getParameter("CalculateFSRSystematics"); _CalculateISRGluonSystematics = iConfig.getParameter("CalculateISRGluonSystematics"); _CalculateISRGammaSystematics = iConfig.getParameter("CalculateISRGammaSystematics"); _SmearTheMuon = iConfig.getParameter("SmearTheMuon"); _MuonPtScaleOffset = iConfig.getParameter("MuonPtScaleOffset"); _MuonPtSigmaOffset = iConfig.getParameter("MuonPtSigmaOffset"); _MuonEtaScaleOffset = iConfig.getParameter("MuonEtaScaleOffset"); _MuonEtaSigmaOffset = iConfig.getParameter("MuonEtaSigmaOffset"); _MuonPhiScaleOffset = iConfig.getParameter("MuonPhiScaleOffset"); _MuonPhiSigmaOffset = iConfig.getParameter("MuonPhiSigmaOffset"); _SmearTheElectron = iConfig.getParameter("SmearTheElectron"); _ElectronPtScaleOffset = iConfig.getParameter("ElectronPtScaleOffset"); _ElectronPtSigmaOffset = iConfig.getParameter("ElectronPtSigmaOffset"); _ElectronEtaScaleOffset = iConfig.getParameter("ElectronEtaScaleOffset"); _ElectronEtaSigmaOffset = iConfig.getParameter("ElectronEtaSigmaOffset"); _ElectronPhiScaleOffset = iConfig.getParameter("ElectronPhiScaleOffset"); _ElectronPhiSigmaOffset = iConfig.getParameter("ElectronPhiSigmaOffset"); _SmearTheTau = iConfig.getParameter("SmearTheTau"); _TauPtScaleOffset = iConfig.getParameter("TauPtScaleOffset"); _TauPtSigmaOffset = iConfig.getParameter("TauPtSigmaOffset"); _TauEtaScaleOffset = iConfig.getParameter("TauEtaScaleOffset"); _TauEtaSigmaOffset = iConfig.getParameter("TauEtaSigmaOffset"); _TauPhiScaleOffset = iConfig.getParameter("TauPhiScaleOffset"); _TauPhiSigmaOffset = iConfig.getParameter("TauPhiSigmaOffset"); _SmearTheJet = iConfig.getParameter("SmearTheJet"); _JetEnergyScaleOffset = iConfig.getParameter("JetEnergyScaleOffset"); _SmearThePt = iConfig.getParameter("SmearThePt"); _SmearTheEta = iConfig.getParameter("SmearTheEta"); _SmearThePhi = iConfig.getParameter("SmearThePhi"); _CalculatePUSystematics = iConfig.getParameter("CalculatePUSystematics"); _PUConstantWeightFactor = iConfig.getParameter("PUConstantWeightFactor"); _PUConstantWeightFactorRMS = iConfig.getParameter("PUConstantWeightFactorRMS"); _PUSlopeWeightParameter = iConfig.getParameter("PUSlopeWeightParameter"); _PUSlopeWeightParameterRMS = iConfig.getParameter("PUSlopeWeightParameterRMS"); _ApplyMuonTriggerScaleFactors = iConfig.getParameter("ApplyMuonTriggerScaleFactors"); _ApplyElectronTriggerScaleFactors = iConfig.getParameter("ApplyElectronTriggerScaleFactors"); _ApplyTauTriggerScaleFactors = iConfig.getParameter("ApplyTauTriggerScaleFactors"); //---- Initialize everything needed to calculate systematics due to initial state gluon radiation if(_CalculateISRGluonSystematics) { // default pt bin edges std::vector defPtEdges; defPtEdges.push_back(0.); defPtEdges.push_back(999999.); bosonPtBinEdges_ = iConfig.getUntrackedParameter > ("BosonPtBinEdges",defPtEdges); unsigned int ninputs_expected = bosonPtBinEdges_.size()-1; // default weights std::vector defWeights; defWeights.push_back(1.); ptWeights_ = iConfig.getUntrackedParameter > ("PtWeights",defWeights); if (ptWeights_.size()==1 && ninputs_expected>1) { for (unsigned int i=1; i defMuonTrigPtEdges; defMuonTrigPtEdges.push_back(0.); defMuonTrigPtEdges.push_back(999999.); MuonTrigPtBinEdges_ = iConfig.getUntrackedParameter > ("MuonTrigPtBinEdges",defMuonTrigPtEdges); unsigned int ninputs_expected = MuonTrigPtBinEdges_.size()-1; // default scale factors std::vector defMuonTrigPtWeights; defMuonTrigPtWeights.push_back(1.); MuonTrigptWeights_ = iConfig.getUntrackedParameter > ("MuonTrigPtWeights",defMuonTrigPtWeights); if (MuonTrigptWeights_.size()==1 && ninputs_expected>1) { for (unsigned int i=1; i defMuonTrigEtaEdges; defMuonTrigEtaEdges.push_back(-999999.); defMuonTrigEtaEdges.push_back(999999.); MuonTrigEtaBinEdges_ = iConfig.getUntrackedParameter > ("MuonTrigEtaBinEdges",defMuonTrigEtaEdges); ninputs_expected = MuonTrigEtaBinEdges_.size()-1; // default scale factors std::vector defMuonTrigEtaWeights; defMuonTrigEtaWeights.push_back(1.); MuonTrigetaWeights_ = iConfig.getUntrackedParameter > ("MuonTrigEtaWeights",defMuonTrigEtaWeights); if (MuonTrigetaWeights_.size()==1 && ninputs_expected>1) { for (unsigned int i=1; i defElectronTrigPtEdges; defElectronTrigPtEdges.push_back(0.); defElectronTrigPtEdges.push_back(999999.); ElectronTrigPtBinEdges_ = iConfig.getUntrackedParameter > ("ElectronTrigPtBinEdges",defElectronTrigPtEdges); unsigned int ninputs_expected = ElectronTrigPtBinEdges_.size()-1; // default scale factors std::vector defElectronTrigPtWeights; defElectronTrigPtWeights.push_back(1.); ElectronTrigptWeights_ = iConfig.getUntrackedParameter > ("ElectronTrigPtWeights",defElectronTrigPtWeights); if (ElectronTrigptWeights_.size()==1 && ninputs_expected>1) { for (unsigned int i=1; i defElectronTrigEtaEdges; defElectronTrigEtaEdges.push_back(-999999.); defElectronTrigEtaEdges.push_back(999999.); ElectronTrigEtaBinEdges_ = iConfig.getUntrackedParameter > ("ElectronTrigEtaBinEdges",defElectronTrigEtaEdges); ninputs_expected = ElectronTrigEtaBinEdges_.size()-1; // default scale factors std::vector defElectronTrigEtaWeights; defElectronTrigEtaWeights.push_back(1.); ElectronTrigetaWeights_ = iConfig.getUntrackedParameter > ("ElectronTrigEtaWeights",defElectronTrigEtaWeights); if (ElectronTrigetaWeights_.size()==1 && ninputs_expected>1) { for (unsigned int i=1; i defTauTrigPtEdges; defTauTrigPtEdges.push_back(0.); defTauTrigPtEdges.push_back(999999.); TauTrigPtBinEdges_ = iConfig.getUntrackedParameter > ("TauTrigPtBinEdges",defTauTrigPtEdges); unsigned int ninputs_expected = TauTrigPtBinEdges_.size()-1; // default scale factors std::vector defTauTrigPtWeights; defTauTrigPtWeights.push_back(1.); TauTrigptWeights_ = iConfig.getUntrackedParameter > ("TauTrigPtWeights",defTauTrigPtWeights); if (TauTrigptWeights_.size()==1 && ninputs_expected>1) { for (unsigned int i=1; i defTauTrigEtaEdges; defTauTrigEtaEdges.push_back(-999999.); defTauTrigEtaEdges.push_back(999999.); TauTrigEtaBinEdges_ = iConfig.getUntrackedParameter > ("TauTrigEtaBinEdges",defTauTrigEtaEdges); ninputs_expected = TauTrigEtaBinEdges_.size()-1; // default scale factors std::vector defTauTrigEtaWeights; defTauTrigEtaWeights.push_back(1.); TauTrigetaWeights_ = iConfig.getUntrackedParameter > ("TauTrigEtaWeights",defTauTrigEtaWeights); if (TauTrigetaWeights_.size()==1 && ninputs_expected>1) { for (unsigned int i=1; i>>>>>>>> s %f t %f u %f, MV %f, weight = %f\n", s, t, u, MV, (*weight)); } } else { isrgamma_weight = 1; } //------Calculate event weight for fsr systematic uncertanties if(_CalculateFSRSystematics) { unsigned int gensize = _genParticles->size(); fsr_weight = 1; for (unsigned int i = 0; ipdgId()); if (bosonId!=23 && bosonId!=24 && bosonId!=32) continue; double bosonMass = boson->mass(); double leptonMass = lepton.mass(); double leptonEnergy = lepton.energy(); double cosLeptonTheta = cos(lepton.theta()); double sinLeptonTheta = sin(lepton.theta()); double leptonPhi = lepton.phi(); int trueKey = i; if (lepton.numberOfDaughters()==0) { continue; } else if (lepton.numberOfDaughters()==1) { int otherleptonKey = lepton.daughterRef(0).key(); const reco::GenParticle& otherlepton = (*_genParticles)[otherleptonKey]; if (otherlepton.pdgId()!=leptonId) continue; if (otherlepton.numberOfDaughters()<=1) continue; trueKey = otherleptonKey; } const reco::GenParticle& trueLepton = (*_genParticles)[trueKey]; unsigned int nDaughters = trueLepton.numberOfDaughters(); for (unsigned int j = 0; jpdgId()!=22) continue; double photonEnergy = photon->energy(); double cosPhotonTheta = cos(photon->theta()); double sinPhotonTheta = sin(photon->theta()); double photonPhi = photon->phi(); double costheta = sinLeptonTheta*sinPhotonTheta*cos(leptonPhi-photonPhi) + cosLeptonTheta*cosPhotonTheta; // Missing O(alpha) terms in soft-collinear approach // Only for W, from hep-ph/0303260 if (bosonId==24) { double betaLepton = sqrt(1-pow(leptonMass/leptonEnergy,2)); double delta = - 8*photonEnergy *(1-betaLepton*costheta) / pow(bosonMass,3) / (1-pow(leptonMass/bosonMass,2)) / (4-pow(leptonMass/bosonMass,2)) * leptonEnergy * (pow(leptonMass,2)/bosonMass+2*photonEnergy); fsr_weight *= (1 + delta); } // Missing NLO QED orders in QED parton shower approach // Change coupling scale from 0 to kT to estimate this effect fsr_weight *= alphaRatio(photonEnergy*sqrt(1-pow(costheta,2))); } } } else { fsr_weight = 1; } trig_weight = 1; // deltas for recalculation of MET (used when studying systematics) deltaForMEx = 0; deltaForMEy = 0; if(_CalculatePUSystematics) { float unirand = (float)(gRandom->Uniform(0,1)); if(unirand<=0.225) { double rndphi = gRandom->Uniform(-TMath::Pi(),TMath::Pi()); double rndmet = fabs(CLHEP::RandGauss::shoot(0, 3.5)); deltaForMEx = deltaForMEx + (1.2 * rndmet * sqrt(1.0) * cos(rndphi)); deltaForMEy = deltaForMEy + (1.2 * rndmet * sqrt(1.0) * sin(rndphi)); } else if(unirand<=0.512) { double rndphi = gRandom->Uniform(-TMath::Pi(),TMath::Pi()); double rndmet = fabs(CLHEP::RandGauss::shoot(0, 3.5)); deltaForMEx = deltaForMEx + (1.2 * rndmet * sqrt(2.0) * cos(rndphi)); deltaForMEy = deltaForMEy + (1.2 * rndmet * sqrt(2.0) * sin(rndphi)); } else if(unirand<=0.780) { double rndphi = gRandom->Uniform(-TMath::Pi(),TMath::Pi()); double rndmet = fabs(CLHEP::RandGauss::shoot(0, 3.5)); deltaForMEx = deltaForMEx + (1.2 * rndmet * sqrt(3.0) * cos(rndphi)); deltaForMEy = deltaForMEy + (1.2 * rndmet * sqrt(3.0) * sin(rndphi)); } else if(unirand<=0.919) { double rndphi = gRandom->Uniform(-TMath::Pi(),TMath::Pi()); double rndmet = fabs(CLHEP::RandGauss::shoot(0, 3.5)); deltaForMEx = deltaForMEx + (1.2 * rndmet * sqrt(4.0) * cos(rndphi)); deltaForMEy = deltaForMEy + (1.2 * rndmet * sqrt(4.0) * sin(rndphi)); } else if(unirand<=0.976) { double rndphi = gRandom->Uniform(-TMath::Pi(),TMath::Pi()); double rndmet = fabs(CLHEP::RandGauss::shoot(0, 3.5)); deltaForMEx = deltaForMEx + (1.2 * rndmet * sqrt(5.0) * cos(rndphi)); deltaForMEy = deltaForMEy + (1.2 * rndmet * sqrt(5.0) * sin(rndphi)); } else if(unirand<=0.986) { double rndphi = gRandom->Uniform(-TMath::Pi(),TMath::Pi()); double rndmet = fabs(CLHEP::RandGauss::shoot(0, 3.5)); deltaForMEx = deltaForMEx + (1.2 * rndmet * sqrt(6.0) * cos(rndphi)); deltaForMEy = deltaForMEy + (1.2 * rndmet * sqrt(6.0) * sin(rndphi)); } else { double rndphi = gRandom->Uniform(-TMath::Pi(),TMath::Pi()); double rndmet = fabs(CLHEP::RandGauss::shoot(0, 3.5)); deltaForMEx = deltaForMEx + (1.2 * rndmet * sqrt(7.0) * cos(rndphi)); deltaForMEy = deltaForMEy + (1.2 * rndmet * sqrt(7.0) * sin(rndphi)); } } //-----Smearing momentum and position for systematic uncertanties and calculation of MET deltas smearedMuonMomentumVector.clear(); smearedMuonPtEtaPhiMVector.clear(); if(((_AnalyzeMuonForLeg1) || (_AnalyzeMuonForLeg2))) { if(_SmearTheMuon) { for(pat::MuonCollection::const_iterator patMuon = _patMuons->begin();patMuon != _patMuons->end();++patMuon) { smearedMuonMomentumVector.push_back(SmearLightLepton(*patMuon).first); smearedMuonPtEtaPhiMVector.push_back(SmearLightLepton(*patMuon).second); deltaForMEx = deltaForMEx + patMuon->px() - SmearLightLepton(*patMuon).first.px(); deltaForMEy = deltaForMEy + patMuon->py() - SmearLightLepton(*patMuon).first.py(); } } else { for(pat::MuonCollection::const_iterator patMuon = _patMuons->begin();patMuon != _patMuons->end();++patMuon) { smearedMuonMomentumVector.push_back(patMuon->p4()); math::PtEtaPhiMLorentzVector thePtEtaPhiMVector(patMuon->pt(), patMuon->eta(), patMuon->phi(), patMuon->mass()); smearedMuonPtEtaPhiMVector.push_back(thePtEtaPhiMVector); } } } smearedElectronMomentumVector.clear(); smearedElectronPtEtaPhiMVector.clear(); if(((_AnalyzeElectronForLeg1) || (_AnalyzeElectronForLeg2))) { if(_SmearTheElectron) { for(pat::ElectronCollection::const_iterator patElectron = _patElectrons->begin();patElectron != _patElectrons->end();++patElectron) { smearedElectronMomentumVector.push_back(SmearLightLepton(*patElectron).first); smearedElectronPtEtaPhiMVector.push_back(SmearLightLepton(*patElectron).second); deltaForMEx = deltaForMEx + patElectron->px() - SmearLightLepton(*patElectron).first.px(); deltaForMEy = deltaForMEy + patElectron->py() - SmearLightLepton(*patElectron).first.py(); } } else { for(pat::ElectronCollection::const_iterator patElectron = _patElectrons->begin();patElectron != _patElectrons->end();++patElectron) { smearedElectronMomentumVector.push_back(patElectron->p4()); if(_UseHeepInfo) { heep::Ele theHeepElec(*patElectron); math::PtEtaPhiMLorentzVector thePtEtaPhiMVector(theHeepElec.et(), theHeepElec.scEta(), patElectron->phi(), patElectron->mass()); smearedElectronPtEtaPhiMVector.push_back(thePtEtaPhiMVector); } else { math::PtEtaPhiMLorentzVector thePtEtaPhiMVector(patElectron->pt(), patElectron->eta(), patElectron->phi(), patElectron->mass()); smearedElectronPtEtaPhiMVector.push_back(thePtEtaPhiMVector); } } } } smearedTauMomentumVector.clear(); smearedTauPtEtaPhiMVector.clear(); if(((_AnalyzeTauForLeg1) || (_AnalyzeTauForLeg2))) { if(_SmearTheTau) { for(pat::TauCollection::const_iterator patTau = _patTaus->begin();patTau != _patTaus->end();++patTau) { smearedTauMomentumVector.push_back(SmearTau(*patTau).first); smearedTauPtEtaPhiMVector.push_back(SmearTau(*patTau).second); deltaForMEx = deltaForMEx + patTau->px() - SmearTau(*patTau).first.px(); deltaForMEy = deltaForMEy + patTau->py() - SmearTau(*patTau).first.py(); } } else { for(pat::TauCollection::const_iterator patTau = _patTaus->begin();patTau != _patTaus->end();++patTau) { smearedTauMomentumVector.push_back(patTau->p4()); math::PtEtaPhiMLorentzVector thePtEtaPhiMVector(patTau->pt(), patTau->eta(), patTau->phi(), patTau->mass()); smearedTauPtEtaPhiMVector.push_back(thePtEtaPhiMVector); } } } smearedJetMomentumVector.clear(); smearedJetPtEtaPhiMVector.clear(); if(_SmearTheJet) { for ( pat::JetCollection::const_iterator patJet = _patJets->begin(); patJet != _patJets->end(); ++patJet ) { smearedJetMomentumVector.push_back(SmearJet(*patJet).first); smearedJetPtEtaPhiMVector.push_back(SmearJet(*patJet).second); deltaForMEx = deltaForMEx + patJet->px() - SmearJet(*patJet).first.px(); deltaForMEy = deltaForMEy + patJet->py() - SmearJet(*patJet).first.py(); } } else { for ( pat::JetCollection::const_iterator patJet = _patJets->begin(); patJet != _patJets->end(); ++patJet ) { if(_UseCorrectedJet) { smearedJetMomentumVector.push_back(patJet->p4()); math::PtEtaPhiMLorentzVector thePtEtaPhiMVector(patJet->pt(), patJet->eta(), patJet->phi(), patJet->mass()); smearedJetPtEtaPhiMVector.push_back(thePtEtaPhiMVector); } else { smearedJetMomentumVector.push_back(patJet->correctedJet("raw","").p4()); math::PtEtaPhiMLorentzVector thePtEtaPhiMVector(patJet->correctedJet("raw","").pt(), patJet->correctedJet("raw","").eta(), patJet->correctedJet("raw","").phi(), patJet->correctedJet("raw","").mass()); smearedJetPtEtaPhiMVector.push_back(thePtEtaPhiMVector); } } } double temppx = (*(_patMETs->begin())).px() + deltaForMEx; double temppy = (*(_patMETs->begin())).py() + deltaForMEy; double temppz = (*(_patMETs->begin())).pz(); double temppt = TMath::Sqrt((temppx*temppx) + (temppy*temppy)); reco::Candidate::LorentzVector theTempMETVector(temppx,temppy,temppz,temppt); theMETVector = theTempMETVector; if(_totalEvents == 1) { bookHistograms(); if (_DoProduceNtuple) { initializeVectors(); setupBranches(); } } //------Number of events analyzed (denominator) for(unsigned int NpdfID = 0; NpdfID < pdfWeightVector.size(); NpdfID++){ _hEvents[NpdfID]->Fill(0.0,isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); } //------Get the event flags (did the event pass the cuts?) getEventFlags(iEvent); eventNum = iEvent.id().event(); lumiBlock = iEvent.id().luminosityBlock(); runNum = iEvent.id().run(); if (!passEventSelectionSequence()) return; // if (isEMuEvent()) return; // std::cout << "Event = " << iEvent.id().event() << std::endl; // std::cout << "Run = " << iEvent.id().run() << std::endl; // std::cout << "Lumi = " << iEvent.luminosityBlock() << std::endl; isrgluon_weight = isrgluon_weight * trig_weight; //------Number of events passing cuts (numerator) _totalEventsPassingCuts++; for(unsigned int NpdfID = 0; NpdfID < pdfWeightVector.size(); NpdfID++){ _hEvents[NpdfID]->Fill(1.0,isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); } //-----Get weights for the calculation of pdf systematic uncertainties for the numerator if(_CalculatePdfSystematicUncertanties) { for (unsigned int i=0; i 1) {std::cerr << "### HiMassTauAnalysis - CONFIGURATION ERROR: Cannot analyze more than 1 object for leg1!!!! " << std::endl;exit(1);} if(nLeg2 > 1) {std::cerr << "### HiMassTauAnalysis - CONFIGURATION ERROR: Cannot analyze more than 1 object for leg2!!!! " << std::endl;exit(1);} if(nLeg1 == 0) {std::cerr << "### HiMassTauAnalysis - CONFIGURATION ERROR: ZERO objects for leg1!!!! " << std::endl;exit(1);} if(nLeg2 == 0) {std::cerr << "### HiMassTauAnalysis - CONFIGURATION ERROR: ZERO objects for leg2!!!! " << std::endl;exit(1);} // ------Does the event pass trigger requirements? int nTriggersSatisfied = 0; if(passRecoTriggerCuts(iEvent)) {nTriggersSatisfied++;} if (nTriggersSatisfied>=_RecoTriggersNmin) _EventFlag[_mapSelectionAlgoID["RecoTriggersNmin"]] = true; // ------Number of Good Vertices int nGoodVertices = 0; for ( reco::VertexCollection::const_iterator primaryVertex = _primaryEventVertexCollection->begin(); primaryVertex != _primaryEventVertexCollection->end(); ++primaryVertex ) { if (!passRecoVertexCuts(*primaryVertex)) continue; nGoodVertices++; } if (nGoodVertices>=_RecoVertexNmin) _EventFlag[_mapSelectionAlgoID["RecoVertexNmin"]] = true; if (nGoodVertices<=_RecoVertexNmax) _EventFlag[_mapSelectionAlgoID["RecoVertexNmax"]] = true; //------Used only if attempting to recalculate MET using only leg1 and leg2 momenta double temppx = 0; double temppy = 0; std::vector usedMuons; std::vector usedElectrons; std::vector usedTaus; usedMuons.clear(); usedElectrons.clear(); usedTaus.clear(); if((_AnalyzeMuonForLeg1) || (_AnalyzeMuonForLeg2)) { int theNumberOfMuons = 0; double maxptfortrigscalefactor = 0; double etafortrigscalefactor = -6; for ( pat::MuonCollection::const_iterator patMuon = _patMuons->begin(); patMuon != _patMuons->end(); ++patMuon ) { usedMuons.push_back(0); theNumberOfMuons++; if (passRecoMuonCuts((*patMuon),theNumberOfMuons-1)) { if(smearedMuonPtEtaPhiMVector.at(theNumberOfMuons-1).pt() > maxptfortrigscalefactor) { maxptfortrigscalefactor = smearedMuonPtEtaPhiMVector.at(theNumberOfMuons-1).pt(); etafortrigscalefactor = smearedMuonPtEtaPhiMVector.at(theNumberOfMuons-1).eta(); } } } if(_ApplyMuonTriggerScaleFactors) { double trig_ptweight = MuonTrigptWeights_[MuonTrigptWeights_.size()-1]; unsigned int nbins = MuonTrigPtBinEdges_.size()-1; if (maxptfortrigscalefactor>MuonTrigPtBinEdges_[0] && maxptfortrigscalefactorMuonTrigPtBinEdges_[jtbin]) continue; trig_ptweight = MuonTrigptWeights_[jtbin-1]; foundCorrectBin = true; } } double trig_etaweight = MuonTrigetaWeights_[MuonTrigetaWeights_.size()-1]; nbins = MuonTrigEtaBinEdges_.size()-1; if (etafortrigscalefactor>MuonTrigEtaBinEdges_[0] && etafortrigscalefactorMuonTrigEtaBinEdges_[jtbin]) continue; trig_etaweight = MuonTrigetaWeights_[jtbin-1]; foundCorrectBin = true; } } trig_weight = trig_weight * trig_ptweight * trig_etaweight; } } if((_AnalyzeElectronForLeg1) || (_AnalyzeElectronForLeg2)) { int theNumberOfElectrons = 0; double maxptfortrigscalefactor = 0; double etafortrigscalefactor = -6; for ( pat::ElectronCollection::const_iterator patElectron = _patElectrons->begin(); patElectron != _patElectrons->end(); ++patElectron ) { usedElectrons.push_back(0); theNumberOfElectrons++; if (passRecoElectronCuts((*patElectron),theNumberOfElectrons-1)) { if(smearedElectronPtEtaPhiMVector.at(theNumberOfElectrons-1).pt() > maxptfortrigscalefactor) { maxptfortrigscalefactor = smearedElectronPtEtaPhiMVector.at(theNumberOfElectrons-1).pt(); etafortrigscalefactor = smearedElectronPtEtaPhiMVector.at(theNumberOfElectrons-1).eta(); } } } if(_ApplyElectronTriggerScaleFactors) { double trig_ptweight = ElectronTrigptWeights_[ElectronTrigptWeights_.size()-1]; unsigned int nbins = ElectronTrigPtBinEdges_.size()-1; if (maxptfortrigscalefactor>ElectronTrigPtBinEdges_[0] && maxptfortrigscalefactorElectronTrigPtBinEdges_[jtbin]) continue; trig_ptweight = ElectronTrigptWeights_[jtbin-1]; foundCorrectBin = true; } } double trig_etaweight = ElectronTrigetaWeights_[ElectronTrigetaWeights_.size()-1]; nbins = ElectronTrigEtaBinEdges_.size()-1; if (etafortrigscalefactor>ElectronTrigEtaBinEdges_[0] && etafortrigscalefactorElectronTrigEtaBinEdges_[jtbin]) continue; trig_etaweight = ElectronTrigetaWeights_[jtbin-1]; foundCorrectBin = true; } } trig_weight = trig_weight * trig_ptweight * trig_etaweight; } } if((_AnalyzeTauForLeg1) || (_AnalyzeTauForLeg2)) { for ( pat::TauCollection::const_iterator patTau = _patTaus->begin(); patTau != _patTaus->end(); ++patTau ) { usedTaus.push_back(0); } } //------Number of Good Candidates for leg1 int nGoodCandidatesLeg1 = 0; if(_AnalyzeMuonForLeg1) { int theNumberOfMuons = 0; for ( pat::MuonCollection::const_iterator patMuon = _patMuons->begin(); patMuon != _patMuons->end(); ++patMuon ) { theNumberOfMuons++; if (!passRecoMuonCuts((*patMuon),theNumberOfMuons-1)) continue; if(_CalculateMetUsingOnlyLeg1AndLeg2) { temppx += -smearedMuonMomentumVector.at(theNumberOfMuons-1).px(); temppy += -smearedMuonMomentumVector.at(theNumberOfMuons-1).py(); usedMuons[theNumberOfMuons-1] = 1; } nGoodCandidatesLeg1++; } } if(_AnalyzeElectronForLeg1) { int theNumberOfElectrons = 0; for ( pat::ElectronCollection::const_iterator patElectron = _patElectrons->begin(); patElectron != _patElectrons->end(); ++patElectron ) { theNumberOfElectrons++; if (!passRecoElectronCuts((*patElectron),theNumberOfElectrons-1)) continue; if(_CalculateMetUsingOnlyLeg1AndLeg2) { temppx += -smearedElectronMomentumVector.at(theNumberOfElectrons-1).px(); temppy += -smearedElectronMomentumVector.at(theNumberOfElectrons-1).py(); usedElectrons[theNumberOfElectrons-1] = 1; } nGoodCandidatesLeg1++; } } if(_AnalyzeTauForLeg1) { int theNumberOfTaus = 0; for ( pat::TauCollection::const_iterator patTau = _patTaus->begin(); patTau != _patTaus->end(); ++patTau ) { theNumberOfTaus++; if ((!passRecoTauCuts((*patTau),theNumberOfTaus-1))) continue; if(_CalculateMetUsingOnlyLeg1AndLeg2) { temppx += -smearedTauMomentumVector.at(theNumberOfTaus-1).px(); temppy += -smearedTauMomentumVector.at(theNumberOfTaus-1).py(); usedTaus[theNumberOfTaus-1] = 1; } nGoodCandidatesLeg1++; } } if (nGoodCandidatesLeg1>=_RecoLeg1Nmin) _EventFlag[_mapSelectionAlgoID["RecoLeg1Nmin"]] = true; if (nGoodCandidatesLeg1<=_RecoLeg1Nmax) _EventFlag[_mapSelectionAlgoID["RecoLeg1Nmax"]] = true; //------Number of Good Candidates for leg2 int nGoodCandidatesLeg2 = 0; if(_AnalyzeMuonForLeg2) { int theNumberOfMuons = 0; for ( pat::MuonCollection::const_iterator patMuon = _patMuons->begin(); patMuon != _patMuons->end(); ++patMuon ) { theNumberOfMuons++; if (!passRecoMuonCuts((*patMuon),theNumberOfMuons-1)) continue; if((_CalculateMetUsingOnlyLeg1AndLeg2) && (usedMuons[theNumberOfMuons-1] == 0)) { temppx += -smearedMuonMomentumVector.at(theNumberOfMuons-1).px(); temppy += -smearedMuonMomentumVector.at(theNumberOfMuons-1).py(); } nGoodCandidatesLeg2++; } } if(_AnalyzeElectronForLeg2) { int theNumberOfElectrons = 0; for ( pat::ElectronCollection::const_iterator patElectron = _patElectrons->begin(); patElectron != _patElectrons->end(); ++patElectron ) { theNumberOfElectrons++; if (!passRecoElectronCuts((*patElectron),theNumberOfElectrons-1)) continue; if((_CalculateMetUsingOnlyLeg1AndLeg2) && (usedElectrons[theNumberOfElectrons-1] == 0)) { temppx += -smearedElectronMomentumVector.at(theNumberOfElectrons-1).px(); temppy += -smearedElectronMomentumVector.at(theNumberOfElectrons-1).py(); } nGoodCandidatesLeg2++; } } if(_AnalyzeTauForLeg2) { int theNumberOfTaus = 0; for ( pat::TauCollection::const_iterator patTau = _patTaus->begin(); patTau != _patTaus->end(); ++patTau ) { theNumberOfTaus++; if ((!passRecoTau2Cuts((*patTau),theNumberOfTaus-1))) continue; if((_CalculateMetUsingOnlyLeg1AndLeg2) && (usedTaus[theNumberOfTaus-1] == 0)) { temppx += -smearedTauMomentumVector.at(theNumberOfTaus-1).px(); temppy += -smearedTauMomentumVector.at(theNumberOfTaus-1).py(); } nGoodCandidatesLeg2++; } } if (nGoodCandidatesLeg2>=_RecoLeg2Nmin) _EventFlag[_mapSelectionAlgoID["RecoLeg2Nmin"]] = true; if (nGoodCandidatesLeg2<=_RecoLeg2Nmax) _EventFlag[_mapSelectionAlgoID["RecoLeg2Nmax"]] = true; if(_CalculateMetUsingOnlyLeg1AndLeg2) { reco::Candidate::LorentzVector theTempMETVector(temppx,temppy,0.0,TMath::Sqrt((temppx*temppx) + (temppy*temppy))); theMETVector = theTempMETVector; } // ------Number of Good Jets int nGoodJets = 0; int theNumberOfJets = 0; for ( pat::JetCollection::const_iterator patJet = _patJets->begin(); patJet != _patJets->end(); ++patJet ) { theNumberOfJets++; if (!passRecoJetCuts((*patJet),theNumberOfJets-1)) continue; nGoodJets++; } if (nGoodJets>=_RecoJetNmin) _EventFlag[_mapSelectionAlgoID["RecoJetNmin"]] = true; if (nGoodJets<=_RecoJetNmax) _EventFlag[_mapSelectionAlgoID["RecoJetNmax"]] = true; // ------Number of Good Combinations (leg1+leg2+met combinations) int nGoodCombinations = 0; if( ((_AnalyzeMuonForLeg1) && (_AnalyzeTauForLeg2)) || ((_AnalyzeMuonForLeg2) && (_AnalyzeTauForLeg1)) ) { int theNumberOfMuons = 0; for ( pat::MuonCollection::const_iterator patMuon = _patMuons->begin();patMuon != _patMuons->end(); ++patMuon ) { theNumberOfMuons++; int theNumberOfTaus = 0; for ( pat::TauCollection::const_iterator patTau = _patTaus->begin();patTau != _patTaus->end(); ++patTau ) { theNumberOfTaus++; if ((passRecoTauCuts((*patTau),theNumberOfTaus-1)) && (passRecoMuonCuts((*patMuon),theNumberOfMuons-1)) && (passTopologyCuts((*patTau),theNumberOfTaus-1,(*patMuon),theNumberOfMuons-1))) { nGoodCombinations++; } } } } if( ((_AnalyzeElectronForLeg1) && (_AnalyzeTauForLeg2)) || ((_AnalyzeElectronForLeg2) && (_AnalyzeTauForLeg1)) ) { int theNumberOfElectrons = 0; for ( pat::ElectronCollection::const_iterator patElectron = _patElectrons->begin();patElectron != _patElectrons->end(); ++patElectron ) { theNumberOfElectrons++; int theNumberOfTaus = 0; for ( pat::TauCollection::const_iterator patTau = _patTaus->begin();patTau != _patTaus->end(); ++patTau ) { theNumberOfTaus++; if ((passRecoTauCuts((*patTau),theNumberOfTaus-1)) && (passRecoElectronCuts((*patElectron),theNumberOfElectrons-1)) && (passTopologyCuts((*patTau),theNumberOfTaus-1,(*patElectron),theNumberOfElectrons-1))) { nGoodCombinations++; } } } } if( ((_AnalyzeMuonForLeg1) && (_AnalyzeElectronForLeg2)) || ((_AnalyzeMuonForLeg2) && (_AnalyzeElectronForLeg1)) ) { int theNumberOfMuons = 0; for ( pat::MuonCollection::const_iterator patMuon = _patMuons->begin();patMuon != _patMuons->end(); ++patMuon ) { theNumberOfMuons++; int theNumberOfElectrons = 0; for ( pat::ElectronCollection::const_iterator patElectron = _patElectrons->begin();patElectron != _patElectrons->end(); ++patElectron ) { theNumberOfElectrons++; if ((passRecoElectronCuts((*patElectron),theNumberOfElectrons-1)) && (passRecoMuonCuts((*patMuon),theNumberOfMuons-1)) && (passTopologyCuts((*patElectron),theNumberOfElectrons-1,(*patMuon),theNumberOfMuons-1))) { nGoodCombinations++; } } } } if( ((_AnalyzeTauForLeg1) && (_AnalyzeTauForLeg2)) ) { int theNumberOfTaus1 = 0; for ( pat::TauCollection::const_iterator patTau1 = _patTaus->begin();patTau1 != _patTaus->end(); ++patTau1 ) { theNumberOfTaus1++; int theNumberOfTaus2 = 0; for ( pat::TauCollection::const_iterator patTau2 = _patTaus->begin();patTau2 != _patTaus->end(); ++patTau2 ) { theNumberOfTaus2++; if( theNumberOfTaus2 <= theNumberOfTaus1 ) continue; // Make sure we don't double-count: only compare pairs in which the tau2 iterator is larger than the tau 1 iterator, else skip combo if( (passRecoTauCuts((*patTau1), theNumberOfTaus1 - 1)) && (passRecoTau2Cuts((*patTau2), theNumberOfTaus2 - 1)) && (passTopologyCuts((*patTau1), theNumberOfTaus1 - 1, (*patTau2), theNumberOfTaus2 - 1)) ){ nGoodCombinations++; } } } } if( ((_AnalyzeMuonForLeg1) && (_AnalyzeMuonForLeg2)) ) { int theNumberOfMuons1 = 0; for ( pat::MuonCollection::const_iterator patMuon1 = _patMuons->begin();patMuon1 != _patMuons->end(); ++patMuon1 ) { theNumberOfMuons1++; int theNumberOfMuons2 = 0; for ( pat::MuonCollection::const_iterator patMuon2 = _patMuons->begin();patMuon2 != _patMuons->end(); ++patMuon2 ) { theNumberOfMuons2++; if ((passRecoMuonCuts((*patMuon1),theNumberOfMuons1 - 1)) && (passRecoMuonCuts((*patMuon2),theNumberOfMuons2 - 1)) && (passTopologyCuts((*patMuon1),theNumberOfMuons1 - 1,(*patMuon2),theNumberOfMuons2 - 1)) && (theNumberOfMuons2 >= theNumberOfMuons1)) { nGoodCombinations++; } } } } if( ((_AnalyzeElectronForLeg1) && (_AnalyzeElectronForLeg2)) ) { int theNumberOfElectrons1 = 0; for ( pat::ElectronCollection::const_iterator patElectron1 = _patElectrons->begin();patElectron1 != _patElectrons->end(); ++patElectron1 ) { theNumberOfElectrons1++; int theNumberOfElectrons2 = 0; for ( pat::ElectronCollection::const_iterator patElectron2 = _patElectrons->begin();patElectron2 != _patElectrons->end(); ++patElectron2 ) { theNumberOfElectrons2++; if ((passRecoElectronCuts((*patElectron1),theNumberOfElectrons1 - 1)) && (passRecoElectronCuts((*patElectron2),theNumberOfElectrons2 - 1)) && (passTopologyCuts((*patElectron1),theNumberOfElectrons1 - 1,(*patElectron2),theNumberOfElectrons2 - 1)) && (theNumberOfElectrons2 >= theNumberOfElectrons1)) { nGoodCombinations++; } } } } if (nGoodCombinations>=_CombinationsNmin) _EventFlag[_mapSelectionAlgoID["CombinationsNmin"]] = true; if (nGoodCombinations<=_CombinationsNmax) _EventFlag[_mapSelectionAlgoID["CombinationsNmax"]] = true; } // --------Count number of events passing the selection criteria bool HiMassTauAnalysis::passEventSelectionSequence() { bool cumulDecision = true; for (unsigned int i=0;i<_EventSelectionSequence.size();i++) { cumulDecision = cumulDecision && _EventFlag[i]; if (_EventFlag[i]) { (_mapSelectionCounter[_EventSelectionSequence[i]])++; } if (cumulDecision) { (_mapSelectionCounterCumul[_EventSelectionSequence[i]])++; } } return cumulDecision; } // -------------Apply Trigger Requirements bool HiMassTauAnalysis::passRecoTriggerCuts(const Event& iEvent) { //set trigger paths to save in ntuple _passedHLTMu5Elec17 = 0; _passedHLTMu11Elec8 = 0; //_passedHLTMu8Elec17 = 0; //_passedHLTMu17Elec8 = 0; _passedHLTMu8Elec17 = 0; _passedHLTMu17Elec8 = 0; _passedHLTIsoMu24 = 0; _passedHLTElec27WP80 = 0; bool passedTrigger = false; const edm::TriggerNames & TheTriggerNames = iEvent.triggerNames(*_triggerResults); for(unsigned int nTrig = 0; nTrig < _triggerResults->size(); ++nTrig) { string trigName = TheTriggerNames.triggerName(nTrig); if(trigName.find("HLT_Mu5_Ele17") != string::npos) _passedHLTMu5Elec17 = (*_triggerResults)[nTrig].accept(); if(trigName.find("HLT_Mu11_Ele8") != string::npos) _passedHLTMu11Elec8 = (*_triggerResults)[nTrig].accept(); if(trigName.find("HLT_Mu8_Ele17_CaloId") != string::npos) _passedHLTMu8Elec17 = (*_triggerResults)[nTrig].accept(); if(trigName.find("HLT_Mu17_Ele8_CaloId") != string::npos) _passedHLTMu17Elec8 = (*_triggerResults)[nTrig].accept(); if(trigName.find("HLT_IsoMu24_v") != string::npos) _passedHLTIsoMu24 = (*_triggerResults)[nTrig].accept(); if(trigName.find("HLT_Ele27_WP80_v") != string::npos) _passedHLTElec27WP80 = (*_triggerResults)[nTrig].accept(); for(std::vector::const_iterator TheTriggerPath = _TriggerRequirements.begin(); TheTriggerPath != _TriggerRequirements.end(); ++TheTriggerPath ) { if(trigName.find(*TheTriggerPath) != string::npos){ //std::cout << " Found Trigger Name = " << trigName << std::endl; passedTrigger = true; } } /* for(std::vector::const_iterator TheTriggerPath = _TriggerRequirements.begin(); TheTriggerPath != _TriggerRequirements.end(); ++TheTriggerPath ) { unsigned int index = TheTriggerNames.triggerIndex(*TheTriggerPath); if(index < TheTriggerNames.size()) {if(_triggerResults->accept(index)) {return true;}} else { std::cout << "### HiMassTauAnalysis - CONFIGURATION ERROR: Specified trigger " << (*TheTriggerPath) << " is not found/defined!!!!" << std::endl; std::cout << "Please use one of the following triggers :" << std::endl; for(edm::TriggerNames::Strings::const_iterator triggerName = TheTriggerNames.triggerNames().begin(); triggerName != TheTriggerNames.triggerNames().end(); ++triggerName ) { unsigned int index = TheTriggerNames.triggerIndex(*triggerName); if(index < TheTriggerNames.size()) { std::string triggerDecision = (_triggerResults->accept(index)) ? "passed" : "failed"; std::cout << " Trigger Name = " << (*triggerName) << " " << triggerDecision << std::endl; } } exit(1); } } */ } return passedTrigger; } // -------------Apply Vertex Cuts bool HiMassTauAnalysis::passRecoVertexCuts(const reco::Vertex& theVertex) { // ----remove fakes if(theVertex.isFake()) {return false;} // ----require vertex to be close to pp interaction point if(fabs(theVertex.z()) >= _RecoVertexMaxZposition) {return false;} // ----require vertex to have a minimum number of "good" tracks used for the fit if(_RecoVertexMinTracks >= 0) { int pvntrk = 0; reco::Vertex::trackRef_iterator pvtrk; for(pvtrk=theVertex.tracks_begin();pvtrk!=theVertex.tracks_end();++pvtrk) { if(theVertex.trackWeight(*pvtrk) > _RecoVertexTrackWeight) {pvntrk++;} } if(pvntrk < _RecoVertexMinTracks) {return false;} } return true; } // -------------Apply Tau Cuts bool HiMassTauAnalysis::passRecoTauCuts(const pat::Tau& patTau,int nobj) { // ----Matching to gen if(_MatchTauToGen) { if(_GenParticleSource.label() != "") { if(!(matchToGen(patTau).first)) {return false;} } else {return false;} } // ----Acceptance cuts if (fabs(smearedTauPtEtaPhiMVector.at(nobj).eta())>_RecoTauEtaCut) {return false;} if (smearedTauPtEtaPhiMVector.at(nobj).pt()<_RecoTauPtMinCut) {return false;} if (smearedTauPtEtaPhiMVector.at(nobj).pt()>_RecoTauPtMaxCut) {return false;} // ----Lead track requirement if (_DoRecoTauDiscrByLeadTrack) { if (_UseRecoTauDiscrByLeadTrackFlag) { if ( (patTau.tauID(_RecoTauDiscrByLeadTrack.data()) < 0.5) ) {return false;} } else { if (patTau.isCaloTau()) { if( (!(patTau.leadTrack().isNonnull())) || (patTau.leadTrack()->pt() < _RecoTauLeadTrackThreshold) ) {return false;} } else { if( (!(patTau.leadPFChargedHadrCand().isNonnull())) || (patTau.leadPFChargedHadrCand()->pt() < _RecoTauLeadTrackThreshold) ) {return false;} } } } // ----"eVeto" - Lead track minimimum hits requirement && H3x3/LTpt if (_DoRecoTauDiscrByLeadTrackNhits) { if (patTau.isCaloTau()) { if( (!(patTau.leadTrack().isNonnull())) || ((int)(patTau.leadTrack()->recHitsSize()) < _RecoTauLeadTrackMinHits) ) {return false;} } else { if( (!(patTau.leadPFChargedHadrCand().isNonnull())) || (!(patTau.leadPFChargedHadrCand()->trackRef().isNonnull())) ) {return false;} if( (int)(patTau.leadPFChargedHadrCand()->trackRef()->recHitsSize()) < _RecoTauLeadTrackMinHits ) {return false;} } } if (_DoRecoTauDiscrByH3x3OverP) { if (patTau.isCaloTau()) { if( (!(patTau.leadTrack().isNonnull())) || ((patTau.hcal3x3OverPLead()) <= _RecoTauH3x3OverP) ) {return false;} } else { if( (!(patTau.leadPFChargedHadrCand().isNonnull())) || (patTau.hcal3x3OverPLead() <= _RecoTauH3x3OverP) ) {return false;} } } // ----Isolation requirement if (_DoRecoTauDiscrByIsolation) { if (_UseRecoTauDiscrByIsolationFlag) {if ( (patTau.tauID(_RecoTauDiscrByIsolation.data()) < 0.5) ) {return false;}} else { if(_UseRecoTauIsoSumPtInsteadOfNiso) { /* if( (CalculateTauTrackIsolation(patTau).second + CalculateTauEcalIsolation(patTau).second) >= _RecoTauIsoSumPtMaxCutValue ) {return false;} if( (CalculateTauTrackIsolation(patTau).second + CalculateTauEcalIsolation(patTau).second) < _RecoTauIsoSumPtMinCutValue ) {return false;} */ if(_UseTrackAndGammaCombinedIso) { if( (CalculateTauTrackIsolation(patTau).second + CalculateTauEcalIsolation(patTau).second) >= _RecoTauIsoSumPtMaxCutValue ) {return false;} if( (CalculateTauTrackIsolation(patTau).second + CalculateTauEcalIsolation(patTau).second) < _RecoTauIsoSumPtMinCutValue ) {return false;} } else { if( (CalculateTauTrackIsolation(patTau).second) >= _RecoTauTrackIsoSumPtMaxCutValue ) {return false;} if( (CalculateTauTrackIsolation(patTau).second) < _RecoTauTrackIsoSumPtMinCutValue ) {return false;} if( (CalculateTauEcalIsolation(patTau).second) >= _RecoTauEcalIsoSumPtMaxCutValue ) {return false;} if( (CalculateTauEcalIsolation(patTau).second) < _RecoTauEcalIsoSumPtMinCutValue ) {return false;} } } else { //if( (CalculateTauTrackIsolation(patTau).first + CalculateTauEcalIsolation(patTau).first) > _RecoTauNisoMax ) {return false;} if(_UseTrackAndGammaCombinedIso) { if( (CalculateTauTrackIsolation(patTau).first + CalculateTauEcalIsolation(patTau).first) > _RecoTauNisoMax ) {return false;} } else { if( (CalculateTauTrackIsolation(patTau).first) > _RecoTauTrackNisoMax ) {return false;} if( (CalculateTauEcalIsolation(patTau).first) > _RecoTauEcalNisoMax ) {return false;} } } } } // Prong requirement if( !passTauProngRequirement(patTau,_RecoTau1ProngRequirement)){ return false;} // ----Signal constituents invariant mass cuts if (_DoRecoTauDiscrBySignalTracksAndGammasMass) { if (patTau.isCaloTau()) { if(patTau.signalTracks().size() == 1) {} if(patTau.signalTracks().size() == 3) {} } else { if(patTau.signalPFChargedHadrCands().size() == 1) { if(( (CalculateTauSignalTracksAndGammasMass(patTau).M() <= _RecoTauSignal1ProngAndGammasMassForPionMaxCutValue) && (CalculateTauSignalTracksAndGammasMass(patTau).M() >= _RecoTauSignal1ProngAndGammasMassForPionMinCutValue) ) || ( (CalculateTauSignalTracksAndGammasMass(patTau).M() <= _RecoTauSignal1ProngAndGammasMassForKaonVetoMaxCutValue) && (CalculateTauSignalTracksAndGammasMass(patTau).M() >= _RecoTauSignal1ProngAndGammasMassForKaonVetoMinCutValue) )) { } else {return false;} } if(patTau.signalPFChargedHadrCands().size() == 3) { if(CalculateTauSignalTracksAndGammasMass(patTau).M() > _RecoTauSignal3ProngAndGammasMassMaxCutValue) {return false;} if(CalculateTauSignalTracksAndGammasMass(patTau).M() < _RecoTauSignal3ProngAndGammasMassMinCutValue) {return false;} } } } // ----Electron and Muon vetos if (_DoRecoTauDiscrAgainstElectron) { if ( (patTau.tauID(_RecoTauDiscrAgainstElectron.data()) < 0.5) ) {return false;} } if (_DoRecoTauDiscrByCrackCut) { if(isInTheCracks(smearedTauPtEtaPhiMVector.at(nobj).eta())) {return false;} } if (_DoRecoTauDiscrAgainstMuon) { if ( (patTau.tauID(_RecoTauDiscrAgainstMuon.data()) < 0.5) ) {return false;} } // if (_DoRecoTauDiscrAgainstMuon) { if ( (patTau.tauID(_RecoTauDiscrAgainstMuon.data()) > 0.5) ) {return false;} } return true; } //--------------ND:------Apply Tau2 Cuts--------- bool HiMassTauAnalysis::passRecoTau2Cuts(const pat::Tau& patTau,int nobj) { // ----Matching to gen if(_MatchTau2ToGen) { if(_GenParticleSource.label() != "") { if(!(matchToGen(patTau).first)) {return false;} } else {return false;} } // ----Acceptance cuts if (fabs(smearedTauPtEtaPhiMVector.at(nobj).eta())>_RecoTau2EtaCut) {return false;} if (smearedTauPtEtaPhiMVector.at(nobj).pt()<_RecoTau2PtMinCut) {return false;} if (smearedTauPtEtaPhiMVector.at(nobj).pt()>_RecoTau2PtMaxCut) {return false;} // ----Lead track requirement if (_DoRecoTau2DiscrByLeadTrack) { if (_UseRecoTauDiscrByLeadTrackFlag) { if ( (patTau.tauID(_RecoTauDiscrByLeadTrack.data()) < 0.5) ) {return false;} } else { if (patTau.isCaloTau()) { if( (!(patTau.leadTrack().isNonnull())) || (patTau.leadTrack()->pt() < _RecoTau2LeadTrackThreshold) ) {return false;} } else { if( (!(patTau.leadPFChargedHadrCand().isNonnull())) || (patTau.leadPFChargedHadrCand()->pt() < _RecoTau2LeadTrackThreshold) ) {return false;} } } } // ----"eVeto" - Lead track minimimum hits requirement && H3x3/LTpt if (_DoRecoTau2DiscrByLeadTrackNhits) { if (patTau.isCaloTau()) { if( (!(patTau.leadTrack().isNonnull())) || ((int)(patTau.leadTrack()->recHitsSize()) < _RecoTau2LeadTrackMinHits) ) {return false;} } else { if( (!(patTau.leadPFChargedHadrCand().isNonnull())) || (!(patTau.leadPFChargedHadrCand()->trackRef().isNonnull())) ) {return false;} if( (int)(patTau.leadPFChargedHadrCand()->trackRef()->recHitsSize()) < _RecoTau2LeadTrackMinHits ) {return false;} } } if (_DoRecoTau2DiscrByH3x3OverP) { if (patTau.isCaloTau()) { if( (!(patTau.leadTrack().isNonnull())) || ((patTau.hcal3x3OverPLead()) <= _RecoTau2H3x3OverP) ) {return false;} } else { if( (!(patTau.leadPFChargedHadrCand().isNonnull())) || (patTau.hcal3x3OverPLead() <= _RecoTau2H3x3OverP) ) {return false;} } } // ----Isolation requirement if (_DoRecoTau2DiscrByIsolation) { if (_UseRecoTauDiscrByIsolationFlag) {if ( (patTau.tauID(_RecoTauDiscrByIsolation.data()) < 0.5) ) {return false;}} else { if(_UseRecoTauIsoSumPtInsteadOfNiso) { if(_UseTrackAndGammaCombinedIso) { if( (CalculateTauTrackIsolation(patTau).second + CalculateTauEcalIsolation(patTau).second) >= _RecoTau2IsoSumPtMaxCutValue ) {return false;} if( (CalculateTauTrackIsolation(patTau).second + CalculateTauEcalIsolation(patTau).second) < _RecoTau2IsoSumPtMinCutValue ) {return false;} } else { if( (CalculateTauTrackIsolation(patTau).second) >= _RecoTau2TrackIsoSumPtMaxCutValue ) {return false;} if( (CalculateTauTrackIsolation(patTau).second) < _RecoTau2TrackIsoSumPtMinCutValue ) {return false;} if( (CalculateTauEcalIsolation(patTau).second) >= _RecoTau2EcalIsoSumPtMaxCutValue ) {return false;} if( (CalculateTauEcalIsolation(patTau).second) < _RecoTau2EcalIsoSumPtMinCutValue ) {return false;} } } else { //if( (CalculateTauTrackIsolation(patTau).first + CalculateTauEcalIsolation(patTau).first) > _RecoTauNisoMax ) {return false;} if(_UseTrackAndGammaCombinedIso) { if( (CalculateTauTrackIsolation(patTau).first + CalculateTauEcalIsolation(patTau).first) > _RecoTau2NisoMax ) {return false;} } else { if( (CalculateTauTrackIsolation(patTau).first) > _RecoTau2TrackNisoMax ) {return false;} if( (CalculateTauEcalIsolation(patTau).first) > _RecoTau2EcalNisoMax ) {return false;} } } } } if( !passTauProngRequirement(patTau,_RecoTau2ProngRequirement)){ return false;} /* // ----Signal constituents invariant mass cuts if (_DoRecoTau2DiscrBySignalTracksAndGammasMass) { if (patTau.isCaloTau()) { if(patTau.signalTracks().size() == 1) {} if(patTau.signalTracks().size() == 3) {} } else { if(patTau.signalPFChargedHadrCands().size() == 1) { if(( (CalculateTauSignalTracksAndGammasMass(patTau).M() <= _RecoTau2Signal1ProngAndGammasMassForPionMaxCutValue) && (CalculateTauSignalTracksAndGammasMass(patTau).M() >= _RecoTau2Signal1ProngAndGammasMassForPionMinCutValue) ) || ( (CalculateTauSignalTracksAndGammasMass(patTau).M() <= _RecoTau2Signal1ProngAndGammasMassForKaonVetoMaxCutValue) && (CalculateTauSignalTracksAndGammasMass(patTau).M() >= _RecoTau2Signal1ProngAndGammasMassForKaonVetoMinCutValue) )) { } else {return false;} } if(patTau.signalPFChargedHadrCands().size() == 3) { if(CalculateTauSignalTracksAndGammasMass(patTau).M() > _RecoTau2Signal3ProngAndGammasMassMaxCutValue) {return false;} if(CalculateTauSignalTracksAndGammasMass(patTau).M() < _RecoTau2Signal3ProngAndGammasMassMinCutValue) {return false;} } } } */ // ----Electron and Muon vetos if (_DoRecoTauDiscrAgainstElectron) { if ( (patTau.tauID(_RecoTauDiscrAgainstElectron.data()) < 0.5) ) {return false;} } if (_DoRecoTauDiscrByCrackCut) { if(isInTheCracks(smearedTauPtEtaPhiMVector.at(nobj).eta())) {return false;} } if (_DoRecoTau2DiscrAgainstMuon) { if ( (patTau.tauID(_RecoTauDiscrAgainstMuon.data()) < 0.5) ) {return false;} } // if (_DoRecoTauDiscrAgainstMuon) { if ( (patTau.tauID(_RecoTauDiscrAgainstMuon.data()) > 0.5) ) {return false;} } return true; } // ---------------Apply Muon Cuts bool HiMassTauAnalysis::passRecoMuonCuts(const pat::Muon& patMuon,int nobj) { // ----Matching to gen if(_MatchLeptonToGen) { if(_GenParticleSource.label() != "") { if(!(matchToGen(patMuon, 13).first)) {return false;} } else {return false;} } // ----Require maching tracks in silicon tracker and muon chamber if (_DoRecoMuonDiscrByGlobal) {if (!patMuon.isGlobalMuon()) {return false;}} // ----Acceptance cuts if (fabs(smearedMuonPtEtaPhiMVector.at(nobj).eta())>_RecoMuonEtaCut) {return false;} if (smearedMuonPtEtaPhiMVector.at(nobj).pt()<_RecoMuonPtMinCut) {return false;} if (smearedMuonPtEtaPhiMVector.at(nobj).pt()>_RecoMuonPtMaxCut) {return false;} /* if (_DoRecoMuonDiscrByTrackIsolation) { if ( (patMuon.trackIsoDeposit()->depositAndCountWithin(_RecoMuonTrackIsoDeltaRCone,reco::IsoDeposit::Vetos(),_RecoMuonTrackIsoTrkThreshold).first >= _RecoMuonTrackIsoSumPtCutValue) ) {return false;} } if (_DoRecoMuonDiscrByEcalIsolation) { if ( (patMuon.ecalIsoDeposit()->depositAndCountWithin(_RecoMuonEcalIsoDeltaRCone,reco::IsoDeposit::Vetos(),_RecoMuonEcalIsoRecHitThreshold).first >= _RecoMuonEcalIsoSumPtCutValue) ) {return false;} } */ // ----Isolation requirement if (_DoRecoMuonDiscrByIsolation) { /* if( (patMuon.trackIsoDeposit()->depositAndCountWithin(_RecoMuonIsoDeltaRCone,reco::IsoDeposit::Vetos(),_RecoMuonTrackIsoTrkThreshold).first + patMuon.ecalIsoDeposit()->depositAndCountWithin(_RecoMuonIsoDeltaRCone,reco::IsoDeposit::Vetos(),_RecoMuonEcalIsoRecHitThreshold).first) >= _RecoMuonIsoSumPtMaxCutValue) {return false;} if( (patMuon.trackIsoDeposit()->depositAndCountWithin(_RecoMuonIsoDeltaRCone,reco::IsoDeposit::Vetos(),_RecoMuonTrackIsoTrkThreshold).first + patMuon.ecalIsoDeposit()->depositAndCountWithin(_RecoMuonIsoDeltaRCone,reco::IsoDeposit::Vetos(),_RecoMuonEcalIsoRecHitThreshold).first) < _RecoMuonIsoSumPtMinCutValue) {return false;} */ /* if( (patMuon.trackIso() + patMuon.ecalIso()) >= _RecoMuonIsoSumPtMaxCutValue) {return false;} if( (patMuon.trackIso() + patMuon.ecalIso()) < _RecoMuonIsoSumPtMinCutValue) {return false;} */ if( (patMuon.trackIsoDeposit()->depositAndCountWithin(_RecoMuonIsoDeltaRCone,reco::IsoDeposit::Vetos(),_RecoMuonTrackIsoTrkThreshold).first) >= _RecoMuonTrackIsoSumPtMaxCutValue) {return false;} if( (patMuon.trackIsoDeposit()->depositAndCountWithin(_RecoMuonIsoDeltaRCone,reco::IsoDeposit::Vetos(),_RecoMuonTrackIsoTrkThreshold).first) < _RecoMuonTrackIsoSumPtMinCutValue) {return false;} if( (patMuon.ecalIsoDeposit()->depositAndCountWithin(_RecoMuonIsoDeltaRCone,reco::IsoDeposit::Vetos(),_RecoMuonEcalIsoRecHitThreshold).first) >= _RecoMuonEcalIsoSumPtMaxCutValue) {return false;} if( (patMuon.ecalIsoDeposit()->depositAndCountWithin(_RecoMuonIsoDeltaRCone,reco::IsoDeposit::Vetos(),_RecoMuonEcalIsoRecHitThreshold).first) < _RecoMuonEcalIsoSumPtMinCutValue) {return false;} } // ----Impact parameter requirement if (_DoRecoMuonDiscrByIp) { const reco::Vertex& thePrimaryEventVertex = (*(_primaryEventVertexCollection)->begin()); if ( patMuon.track().isNonnull() ) {if ( (fabs(patMuon.track()->dxy(thePrimaryEventVertex.position())) >= _RecoMuonIpCut) ) {return false;}} else {return false;} } if (_DoRecoMuonDiscrByPionVeto) { if( ((_RecoMuonCaloCompCoefficient * muon::caloCompatibility(patMuon)) + (_RecoMuonSegmCompCoefficient * muon::segmentCompatibility(patMuon))) <= _RecoMuonAntiPionCut ) {return false;} } if(_RecoTriggersNmin > 0) { bool matchedToTrigger = false; const trigger::TriggerObjectCollection & toc(handleTriggerEvent->getObjects()); for ( size_t ia = 0; ia < handleTriggerEvent->sizeFilters(); ++ ia) { std::string fullname = handleTriggerEvent->filterTag(ia).encode(); std::string name; size_t p = fullname.find_first_of(':'); if ( p != std::string::npos) {name = fullname.substr(0, p);} else {name = fullname;} // std::cout << "name = " << name << std::endl; if ( &toc !=0 ) { const trigger::Keys & k = handleTriggerEvent->filterKeys(ia); for (trigger::Keys::const_iterator ki = k.begin(); ki !=k.end(); ++ki ) { if ( (name == "hltSingleMu9L3Filtered9") || (name == "hltSingleMu11L3Filtered11") || (name == "hltSingleMu15L3Filtered15") ) { if( (reco::deltaR(smearedMuonPtEtaPhiMVector.at(nobj).eta(),smearedMuonPtEtaPhiMVector.at(nobj).phi(),toc[*ki].particle().eta(),toc[*ki].particle().phi()) <= 0.5) && (toc[*ki].particle().pt() > 15.0) ) {matchedToTrigger = true;} } } } } if(!(matchedToTrigger)) {return false;} } return true; } //--------------Apply Electron Cuts bool HiMassTauAnalysis::passRecoElectronCuts(const pat::Electron& patElectron,int nobj) { heep::Ele theHeepElec(patElectron); int cutResult = patElectron.userInt("HEEPId"); const Track* elTrack = (const reco::Track*)(patElectron.gsfTrack().get()); const HitPattern& pInner = elTrack->trackerExpectedHitsInner(); // ----Matching to gen if(_MatchLeptonToGen) { if(_GenParticleSource.label() != "") { if(!(matchToGen(patElectron, 11).first)) {return false;} } else {return false;} } // ----Acceptance cuts if (fabs(smearedElectronPtEtaPhiMVector.at(nobj).eta())>_RecoElectronEtaCut) {return false;} if (smearedElectronPtEtaPhiMVector.at(nobj).pt()<_RecoElectronPtMinCut) {return false;} if (smearedElectronPtEtaPhiMVector.at(nobj).pt()>_RecoElectronPtMaxCut) {return false;} // ----Isolation requirement if (_DoRecoElectronDiscrByTrackIsolation) { // if ( (patElectron.trackIsoDeposit()->depositAndCountWithin(_RecoElectronTrackIsoDeltaRCone,reco::IsoDeposit::Vetos(),_RecoElectronTrackIsoTrkThreshold).first >= _RecoElectronTrackIsoSumPtCutValue) ) {return false;} // if(patElectron.trackIso() > _RecoElectronTrackIsoSumPtCutValue) {return false;} if(patElectron.dr04TkSumPt() > _RecoElectronTrackIsoSumPtMaxCutValue) {return false;} if(patElectron.dr04TkSumPt() < _RecoElectronTrackIsoSumPtMinCutValue) {return false;} } if (_DoRecoElectronDiscrByEcalIsolation) { // if ( (patElectron.ecalIsoDeposit()->depositAndCountWithin(_RecoElectronEcalIsoDeltaRCone,reco::IsoDeposit::Vetos(),_RecoElectronEcalIsoRecHitThreshold).first >= _RecoElectronEcalIsoSumPtCutValue) ) {return false;} // if(patElectron.ecalIso() > _RecoElectronEcalIsoSumPtCutValue) {return false;} if(patElectron.dr04EcalRecHitSumEt() > _RecoElectronEcalIsoSumPtMaxCutValue) {return false;} if(patElectron.dr04EcalRecHitSumEt() < _RecoElectronEcalIsoSumPtMinCutValue) {return false;} } // ----Impact parameter requirement if (_DoRecoElectronDiscrByIp) { const reco::Vertex& thePrimaryEventVertex = (*(_primaryEventVertexCollection)->begin()); // if ( patElectron.gsfTrack().isNonnull() ) {if ( (fabs(patElectron.gsfTrack()->dxy(thePrimaryEventVertex.position())) >= _RecoElectronIpCut) ) {return false;}} if ( patElectron.track().isNonnull() ) {if ( (fabs(patElectron.track()->dxy(thePrimaryEventVertex.position())) >= _RecoElectronIpCut) ) {return false;}} else {return false;} } // ----E over p requirement if (_DoRecoElectronDiscrByEoverP) { if((patElectron.eSuperClusterOverP()>_RecoElectronEoverPMax) || (patElectron.eSuperClusterOverP()<_RecoElectronEoverPMin)) {return false;} } // ----Electromagnetic energy fraction requirement if (_DoRecoElectronDiscrByEcalDrivenSeed) { if(!(patElectron.ecalDrivenSeed())) {return false;} } if (_DoRecoElectronDiscrByTrackerDrivenSeed) { if(!(patElectron.trackerDrivenSeed())) {return false;} } if (_DoRecoElectronDiscrByHoverEm) { if(_UseHeepInfo) { if(!(heep::CutCodes::passCuts(cutResult, "hadem"))) {return false;} } else { if(patElectron.hadronicOverEm() > _RecoElectronHoverEmCut) {return false;} } } if (_DoRecoElectronDiscrBySigmaIEtaIEta) { if(_UseHeepInfo) { if(!(heep::CutCodes::passCuts(cutResult, "sigmaIEtaIEta"))) {return false;} } else { if(patElectron.isEE()) { if(patElectron.scSigmaIEtaIEta() > _RecoElectronSigmaIEtaIEta) {return false;} } } } if (_DoRecoElectronDiscrByDEtaIn) { if(_UseHeepInfo) { if(!(heep::CutCodes::passCuts(cutResult, "dEtaIn"))) {return false;} } else { if(patElectron.isEE()) { if(fabs(patElectron.deltaEtaSuperClusterTrackAtVtx()) > _RecoElectronEEDEtaIn) {return false;} } if(patElectron.isEB()) { if(fabs(patElectron.deltaEtaSuperClusterTrackAtVtx()) > _RecoElectronEBDEtaIn) {return false;} } } } if (_DoRecoElectronDiscrByDPhiIn) { if(_UseHeepInfo) { if(!(heep::CutCodes::passCuts(cutResult, "dPhiIn"))) {return false;} } else { if(patElectron.isEE()) { if(fabs(patElectron.deltaPhiSuperClusterTrackAtVtx()) > _RecoElectronEEDPhiIn) {return false;} } if(patElectron.isEB()) { if(fabs(patElectron.deltaPhiSuperClusterTrackAtVtx()) > _RecoElectronEBDPhiIn) {return false;} } } } if (_DoRecoElectronDiscrBySCE2by5Over5by5) { if(_UseHeepInfo) { if(!(heep::CutCodes::passCuts(cutResult, "e2x5Over5x5"))) {return false;} } else { if(patElectron.isEB()) { if( ((patElectron.scE2x5Max() / patElectron.scE5x5()) > _RecoElectronEBscE2by5Over5by5) || ((patElectron.scE1x5() / patElectron.scE5x5()) > _RecoElectronEBscE1by5Over5by5) ) { } else {return false;} } } } if (_DoRecoElectronDiscrByMissingHits) { if(pInner.numberOfHits() >= _RecoElectronMissingHits) {return false;} } return true; } //--------------Apply Jet Cuts bool HiMassTauAnalysis::passRecoJetCuts(const pat::Jet& patJet,int nobj) { // ----Acceptance cuts if (fabs(smearedJetPtEtaPhiMVector.at(nobj).eta())>_RecoJetEtaMaxCut) {return false;} if (fabs(smearedJetPtEtaPhiMVector.at(nobj).eta())<_RecoJetEtaMinCut) {return false;} if (smearedJetPtEtaPhiMVector.at(nobj).pt()<_RecoJetPtCut) {return false;} // ----anti-overlap requirements if (_RemoveJetOverlapWithMuons) { int theNumberOfMuons = 0; for ( pat::MuonCollection::const_iterator patMuon = _patMuons->begin(); patMuon != _patMuons->end(); ++patMuon ) { theNumberOfMuons++; if( (passRecoMuonCuts((*patMuon),theNumberOfMuons-1)) ) { if(reco::deltaR(smearedJetMomentumVector.at(nobj), smearedMuonMomentumVector.at(theNumberOfMuons-1)) < _JetMuonMatchingDeltaR) {return false;} } } } if (_RemoveJetOverlapWithElectrons) { int theNumberOfElectrons = 0; for ( pat::ElectronCollection::const_iterator patElectron = _patElectrons->begin(); patElectron != _patElectrons->end(); ++patElectron ) { theNumberOfElectrons++; if( (passRecoElectronCuts((*patElectron),theNumberOfElectrons-1)) ) { if(reco::deltaR(smearedJetMomentumVector.at(nobj), smearedElectronMomentumVector.at(theNumberOfElectrons-1)) < _JetElectronMatchingDeltaR) {return false;} } } } if (_RemoveJetOverlapWithTaus) { int theNumberOfTaus = 0; for ( pat::TauCollection::const_iterator patTau = _patTaus->begin(); patTau != _patTaus->end(); ++patTau ) { theNumberOfTaus++; if( (passRecoTauCuts((*patTau),theNumberOfTaus-1)) ) { if(reco::deltaR(smearedJetMomentumVector.at(nobj), smearedTauMomentumVector.at(theNumberOfTaus-1)) < _JetTauMatchingDeltaR) {return false;} } } } if (_ApplyJetBTagging) {if(patJet.bDiscriminator("trackCountingHighEffBJetTags") <= _JetBTaggingTCHEcut) {return false;}} return true; } // ---------------Apply Topology Cuts bool HiMassTauAnalysis::passTopologyCuts(const pat::Tau& patTau, int nobjT, const pat::Muon& patMuon, int nobjM) { // ----Separation cut between lepton and tau jet (remove overlaps) if (_DoDiTauDiscrByDeltaR) { if(reco::deltaR(smearedTauMomentumVector.at(nobjT), smearedMuonMomentumVector.at(nobjM)) < _DiTauDeltaRCut) {return false;} } // ----Opposite sign - Like sign requirement if (_DiTauDiscrByOSLSType == "OS") { if(_UseTauSeedTrackForDiTauDiscrByOSLS) { if (patTau.isCaloTau()) { if((patMuon.charge() * patTau.leadTrack()->charge()) >= 0) {return false;} } else { if((patMuon.charge() * patTau.leadPFChargedHadrCand()->charge()) >= 0) {return false;} } } else { if((patMuon.charge() * patTau.charge()) >= 0) {return false;} } } else if (_DiTauDiscrByOSLSType == "LS") { if(_UseTauSeedTrackForDiTauDiscrByOSLS) { if (patTau.isCaloTau()) { if((patMuon.charge() * patTau.leadTrack()->charge()) <= 0) {return false;} } else { if((patMuon.charge() * patTau.leadPFChargedHadrCand()->charge()) <= 0) {return false;} } } else { if((patMuon.charge() * patTau.charge()) <= 0) {return false;} } } else {} // ----Require both legs to be almost back-to-back in phi if (_DoDiTauDiscrByCosDphi) { if(cos(TMath::Abs(normalizedPhi(smearedTauPtEtaPhiMVector.at(nobjT).phi() - smearedMuonPtEtaPhiMVector.at(nobjM).phi()))) > _DiTauCosDphiMaxCut) {return false;} if(cos(TMath::Abs(normalizedPhi(smearedTauPtEtaPhiMVector.at(nobjT).phi() - smearedMuonPtEtaPhiMVector.at(nobjM).phi()))) < _DiTauCosDphiMinCut) {return false;} } // ----Mass window requirement if (_DoDiscrByMassReco) { if( (CalculateThe4Momentum(patTau,patMuon).second.M() < _MassMinCut) || (CalculateThe4Momentum(patTau,patMuon).second.M() > _MassMaxCut) ) {return false;} } // ----Zeta requirement if (_DoDiTauDiscrByCDFzeta2D) { if( ((_PZetaCutCoefficient * CalculatePZeta(patTau,patMuon, theMETVector)) + (_PZetaVisCutCoefficient * CalculatePZetaVis(patTau,patMuon))) < _CDFzeta2DCutValue ) {return false;} } // ----Missing transverse energy requirement if (_DoDiscrByMet) {if(theMETVector.pt() < _RecoMetCut) {return false;}} if (_DoDiTauDiscrByDeltaPtDivSumPt) { if ( ((smearedTauPtEtaPhiMVector.at(nobjT).pt() - smearedMuonPtEtaPhiMVector.at(nobjM).pt()) / (smearedTauPtEtaPhiMVector.at(nobjT).pt() + smearedMuonPtEtaPhiMVector.at(nobjM).pt())) < _DiTauDeltaPtDivSumPtMinCutValue ) {return false;} if ( ((smearedTauPtEtaPhiMVector.at(nobjT).pt() - smearedMuonPtEtaPhiMVector.at(nobjM).pt()) / (smearedTauPtEtaPhiMVector.at(nobjT).pt() + smearedMuonPtEtaPhiMVector.at(nobjM).pt())) > _DiTauDeltaPtDivSumPtMaxCutValue ) {return false;} } if (_DoDiTauDiscrByDeltaPt) { if ( ((smearedTauPtEtaPhiMVector.at(nobjT).pt() - smearedMuonPtEtaPhiMVector.at(nobjM).pt())) < _DiTauDeltaPtMinCutValue ) {return false;} if ( ((smearedTauPtEtaPhiMVector.at(nobjT).pt() - smearedMuonPtEtaPhiMVector.at(nobjM).pt())) > _DiTauDeltaPtMaxCutValue ) {return false;} } if (_DoDiscrByLeg1MetDphi) { if(_AnalyzeMuonForLeg1) { if(TMath::Abs(normalizedPhi(smearedMuonPtEtaPhiMVector.at(nobjM).phi() - theMETVector.phi())) > _Leg1MetDphiMaxCut) {return false;} if(TMath::Abs(normalizedPhi(smearedMuonPtEtaPhiMVector.at(nobjM).phi() - theMETVector.phi())) < _Leg1MetDphiMinCut) {return false;} } if(_AnalyzeTauForLeg1) { if(TMath::Abs(normalizedPhi(smearedTauPtEtaPhiMVector.at(nobjT).phi() - theMETVector.phi())) > _Leg1MetDphiMaxCut) {return false;} if(TMath::Abs(normalizedPhi(smearedTauPtEtaPhiMVector.at(nobjT).phi() - theMETVector.phi())) < _Leg1MetDphiMinCut) {return false;} } } if (_DoDiscrByLeg2MetDphi) { if(_AnalyzeMuonForLeg2) { if(TMath::Abs(normalizedPhi(smearedMuonPtEtaPhiMVector.at(nobjM).phi() - theMETVector.phi())) > _Leg2MetDphiMaxCut) {return false;} if(TMath::Abs(normalizedPhi(smearedMuonPtEtaPhiMVector.at(nobjM).phi() - theMETVector.phi())) < _Leg2MetDphiMinCut) {return false;} } if(_AnalyzeTauForLeg2) { if(TMath::Abs(normalizedPhi(smearedTauPtEtaPhiMVector.at(nobjT).phi() - theMETVector.phi())) > _Leg2MetDphiMaxCut) {return false;} if(TMath::Abs(normalizedPhi(smearedTauPtEtaPhiMVector.at(nobjT).phi() - theMETVector.phi())) < _Leg2MetDphiMinCut) {return false;} } } if (_DoDiscrByLeg1MetMt) { if(_AnalyzeMuonForLeg1) { if( (CalculateLeptonMetMt(patMuon, theMETVector)<_Leg1MetMtMinCut) || (CalculateLeptonMetMt(patMuon, theMETVector)>_Leg1MetMtMaxCut) ) {return false;} } if(_AnalyzeTauForLeg1) { if( (CalculateLeptonMetMt(patTau, theMETVector)<_Leg1MetMtMinCut) || (CalculateLeptonMetMt(patTau, theMETVector)>_Leg1MetMtMaxCut) ) {return false;} } } if (_DoDiscrByLeg2MetMt) { if(_AnalyzeMuonForLeg2) { if( (CalculateLeptonMetMt(patMuon, theMETVector)<_Leg2MetMtMinCut) || (CalculateLeptonMetMt(patMuon, theMETVector)>_Leg2MetMtMaxCut) ) {return false;} } if(_AnalyzeTauForLeg2) { if( (CalculateLeptonMetMt(patTau, theMETVector)<_Leg2MetMtMinCut) || (CalculateLeptonMetMt(patTau, theMETVector)>_Leg2MetMtMaxCut) ) {return false;} } } return true; } bool HiMassTauAnalysis::passTopologyCuts(const pat::Tau& patTau, int nobjT, const pat::Electron& patElectron, int nobjE) { // ----Separation cut between lepton and tau jet (remove overlaps) if (_DoDiTauDiscrByDeltaR) { if(reco::deltaR(smearedTauMomentumVector.at(nobjT), smearedElectronMomentumVector.at(nobjE)) < _DiTauDeltaRCut) {return false;} } // ---- apply Zee veto cut if (_DoTauDiscrByIsZeeCut) { if((isZee(smearedElectronMomentumVector.at(nobjE)).first)) {return false;} } // ----Opposite sign - Like sign requirement if (_DiTauDiscrByOSLSType == "OS") { if(_UseTauSeedTrackForDiTauDiscrByOSLS) { if (patTau.isCaloTau()) { if((patElectron.charge() * patTau.leadTrack()->charge()) >= 0) {return false;} } else { if((patElectron.charge() * patTau.leadPFChargedHadrCand()->charge()) >= 0) {return false;} } } else { if((patElectron.charge() * patTau.charge()) >= 0) {return false;} } } else if (_DiTauDiscrByOSLSType == "LS") { if(_UseTauSeedTrackForDiTauDiscrByOSLS) { if (patTau.isCaloTau()) { if((patElectron.charge() * patTau.leadTrack()->charge()) <= 0) {return false;} } else { if((patElectron.charge() * patTau.leadPFChargedHadrCand()->charge()) <= 0) {return false;} } } else { if((patElectron.charge() * patTau.charge()) <= 0) {return false;} } } else {} // ----Require both legs to be almost back-to-back in phi if (_DoDiTauDiscrByCosDphi) { if(cos(TMath::Abs(normalizedPhi(smearedTauPtEtaPhiMVector.at(nobjT).phi() - smearedElectronPtEtaPhiMVector.at(nobjE).phi()))) > _DiTauCosDphiMaxCut) {return false;} if(cos(TMath::Abs(normalizedPhi(smearedTauPtEtaPhiMVector.at(nobjT).phi() - smearedElectronPtEtaPhiMVector.at(nobjE).phi()))) < _DiTauCosDphiMinCut) {return false;} } // ----Mass window requirement if (_DoDiscrByMassReco) { if( (CalculateThe4Momentum(patTau,patElectron).second.M() < _MassMinCut) || (CalculateThe4Momentum(patTau,patElectron).second.M() > _MassMaxCut) ) {return false;} } // ----Zeta requirement if (_DoDiTauDiscrByCDFzeta2D) { if( ((_PZetaCutCoefficient * CalculatePZeta(patTau,patElectron, theMETVector)) + (_PZetaVisCutCoefficient * CalculatePZetaVis(patTau,patElectron))) < _CDFzeta2DCutValue ) {return false;} } // ----Missing transverse energy requirement if (_DoDiscrByMet) {if(theMETVector.pt() < _RecoMetCut) {return false;}} if (_DoDiTauDiscrByDeltaPtDivSumPt) { if ( ((smearedTauPtEtaPhiMVector.at(nobjT).pt() - smearedElectronPtEtaPhiMVector.at(nobjE).pt()) / (smearedTauPtEtaPhiMVector.at(nobjT).pt() + smearedElectronPtEtaPhiMVector.at(nobjE).pt())) < _DiTauDeltaPtDivSumPtMinCutValue ) {return false;} if ( ((smearedTauPtEtaPhiMVector.at(nobjT).pt() - smearedElectronPtEtaPhiMVector.at(nobjE).pt()) / (smearedTauPtEtaPhiMVector.at(nobjT).pt() + smearedElectronPtEtaPhiMVector.at(nobjE).pt())) > _DiTauDeltaPtDivSumPtMaxCutValue ) {return false;} } if (_DoDiTauDiscrByDeltaPt) { if ( ((smearedTauPtEtaPhiMVector.at(nobjT).pt() - smearedElectronPtEtaPhiMVector.at(nobjE).pt())) < _DiTauDeltaPtMinCutValue ) {return false;} if ( ((smearedTauPtEtaPhiMVector.at(nobjT).pt() - smearedElectronPtEtaPhiMVector.at(nobjE).pt())) > _DiTauDeltaPtMaxCutValue ) {return false;} } if (_DoDiscrByLeg1MetDphi) { if(_AnalyzeElectronForLeg1) { if(TMath::Abs(normalizedPhi(smearedElectronPtEtaPhiMVector.at(nobjE).phi() - theMETVector.phi())) > _Leg1MetDphiMaxCut) {return false;} if(TMath::Abs(normalizedPhi(smearedElectronPtEtaPhiMVector.at(nobjE).phi() - theMETVector.phi())) < _Leg1MetDphiMinCut) {return false;} } if(_AnalyzeTauForLeg1) { if(TMath::Abs(normalizedPhi(smearedTauPtEtaPhiMVector.at(nobjT).phi() - theMETVector.phi())) > _Leg1MetDphiMaxCut) {return false;} if(TMath::Abs(normalizedPhi(smearedTauPtEtaPhiMVector.at(nobjT).phi() - theMETVector.phi())) < _Leg1MetDphiMinCut) {return false;} } } if (_DoDiscrByLeg2MetDphi) { if(_AnalyzeElectronForLeg2) { if(TMath::Abs(normalizedPhi(smearedElectronPtEtaPhiMVector.at(nobjE).phi() - theMETVector.phi())) > _Leg2MetDphiMaxCut) {return false;} if(TMath::Abs(normalizedPhi(smearedElectronPtEtaPhiMVector.at(nobjE).phi() - theMETVector.phi())) < _Leg2MetDphiMinCut) {return false;} } if(_AnalyzeTauForLeg2) { if(TMath::Abs(normalizedPhi(smearedTauPtEtaPhiMVector.at(nobjT).phi() - theMETVector.phi())) > _Leg2MetDphiMaxCut) {return false;} if(TMath::Abs(normalizedPhi(smearedTauPtEtaPhiMVector.at(nobjT).phi() - theMETVector.phi())) < _Leg2MetDphiMinCut) {return false;} } } if (_DoDiscrByLeg1MetMt) { if(_AnalyzeElectronForLeg1) { if( (CalculateLeptonMetMt(patElectron, theMETVector)<_Leg1MetMtMinCut) || (CalculateLeptonMetMt(patElectron, theMETVector)>_Leg1MetMtMaxCut) ) {return false;} } if(_AnalyzeTauForLeg1) { if( (CalculateLeptonMetMt(patTau, theMETVector)<_Leg1MetMtMinCut) || (CalculateLeptonMetMt(patTau, theMETVector)>_Leg1MetMtMaxCut) ) {return false;} } } if (_DoDiscrByLeg2MetMt) { if(_AnalyzeElectronForLeg2) { if( (CalculateLeptonMetMt(patElectron, theMETVector)<_Leg2MetMtMinCut) || (CalculateLeptonMetMt(patElectron, theMETVector)>_Leg2MetMtMaxCut) ) {return false;} } if(_AnalyzeTauForLeg2) { if( (CalculateLeptonMetMt(patTau, theMETVector)<_Leg2MetMtMinCut) || (CalculateLeptonMetMt(patTau, theMETVector)>_Leg2MetMtMaxCut) ) {return false;} } } return true; } bool HiMassTauAnalysis::passTopologyCuts(const pat::Electron& patElectron, int nobjE, const pat::Muon& patMuon, int nobjM) { // ----Separation cut between lepton and tau jet (remove overlaps) if (_DoDiTauDiscrByDeltaR) { if(reco::deltaR(smearedMuonMomentumVector.at(nobjM), smearedElectronMomentumVector.at(nobjE)) < _DiTauDeltaRCut) {return false;} } // ----Opposite sign - Like sign requirement if (_DiTauDiscrByOSLSType == "OS") { if((patElectron.charge() * patMuon.charge()) >= 0) {return false;} } else if (_DiTauDiscrByOSLSType == "LS") { if((patElectron.charge() * patMuon.charge()) <= 0) {return false;} } else {} // ----Require both legs to be almost back-to-back in phi if (_DoDiTauDiscrByCosDphi) { if(cos(TMath::Abs(normalizedPhi(smearedElectronPtEtaPhiMVector.at(nobjE).phi() - smearedMuonPtEtaPhiMVector.at(nobjM).phi()))) > _DiTauCosDphiMaxCut) {return false;} if(cos(TMath::Abs(normalizedPhi(smearedElectronPtEtaPhiMVector.at(nobjE).phi() - smearedMuonPtEtaPhiMVector.at(nobjM).phi()))) < _DiTauCosDphiMinCut) {return false;} } // ----Mass window requirement if (_DoDiscrByMassReco) { if( (CalculateThe4Momentum(patElectron,patMuon).second.M() < _MassMinCut) || (CalculateThe4Momentum(patElectron,patMuon).second.M() > _MassMaxCut) ) {return false;} } // ----Zeta requirement if (_DoDiTauDiscrByCDFzeta2D) { if( ((_PZetaCutCoefficient * CalculatePZeta(patElectron,patMuon, theMETVector)) + (_PZetaVisCutCoefficient * CalculatePZetaVis(patElectron,patMuon))) < _CDFzeta2DCutValue ) {return false;} } // ----Missing transverse energy requirement if (_DoDiscrByMet) {if(theMETVector.pt() < _RecoMetCut) {return false;}} if (_DoDiTauDiscrByDeltaPtDivSumPt) { if ( ((smearedMuonPtEtaPhiMVector.at(nobjM).pt() - smearedElectronPtEtaPhiMVector.at(nobjE).pt()) / (smearedMuonPtEtaPhiMVector.at(nobjM).pt() + smearedElectronPtEtaPhiMVector.at(nobjE).pt())) < _DiTauDeltaPtDivSumPtMinCutValue ) {return false;} if ( ((smearedMuonPtEtaPhiMVector.at(nobjM).pt() - smearedElectronPtEtaPhiMVector.at(nobjE).pt()) / (smearedMuonPtEtaPhiMVector.at(nobjM).pt() + smearedElectronPtEtaPhiMVector.at(nobjE).pt())) > _DiTauDeltaPtDivSumPtMaxCutValue ) {return false;} } if (_DoDiTauDiscrByDeltaPt) { if ( ((smearedMuonPtEtaPhiMVector.at(nobjM).pt() - smearedElectronPtEtaPhiMVector.at(nobjE).pt())) < _DiTauDeltaPtMinCutValue ) {return false;} if ( ((smearedMuonPtEtaPhiMVector.at(nobjM).pt() - smearedElectronPtEtaPhiMVector.at(nobjE).pt())) > _DiTauDeltaPtMaxCutValue ) {return false;} } if (_DoDiscrByLeg1MetDphi) { if(_AnalyzeElectronForLeg1) { if(TMath::Abs(normalizedPhi(smearedElectronPtEtaPhiMVector.at(nobjE).phi() - theMETVector.phi())) > _Leg1MetDphiMaxCut) {return false;} if(TMath::Abs(normalizedPhi(smearedElectronPtEtaPhiMVector.at(nobjE).phi() - theMETVector.phi())) < _Leg1MetDphiMinCut) {return false;} } if(_AnalyzeMuonForLeg1) { if(TMath::Abs(normalizedPhi(smearedMuonPtEtaPhiMVector.at(nobjM).phi() - theMETVector.phi())) > _Leg1MetDphiMaxCut) {return false;} if(TMath::Abs(normalizedPhi(smearedMuonPtEtaPhiMVector.at(nobjM).phi() - theMETVector.phi())) < _Leg1MetDphiMinCut) {return false;} } } if (_DoDiscrByLeg2MetDphi) { if(_AnalyzeElectronForLeg2) { if(TMath::Abs(normalizedPhi(smearedElectronPtEtaPhiMVector.at(nobjE).phi() - theMETVector.phi())) > _Leg2MetDphiMaxCut) {return false;} if(TMath::Abs(normalizedPhi(smearedElectronPtEtaPhiMVector.at(nobjE).phi() - theMETVector.phi())) < _Leg2MetDphiMinCut) {return false;} } if(_AnalyzeMuonForLeg2) { if(TMath::Abs(normalizedPhi(smearedMuonPtEtaPhiMVector.at(nobjM).phi() - theMETVector.phi())) > _Leg2MetDphiMaxCut) {return false;} if(TMath::Abs(normalizedPhi(smearedMuonPtEtaPhiMVector.at(nobjM).phi() - theMETVector.phi())) < _Leg2MetDphiMinCut) {return false;} } } if (_DoDiscrByLeg1MetMt) { if(_AnalyzeElectronForLeg1) { if( (CalculateLeptonMetMt(patElectron, theMETVector)<_Leg1MetMtMinCut) || (CalculateLeptonMetMt(patElectron, theMETVector)>_Leg1MetMtMaxCut) ) {return false;} } if(_AnalyzeMuonForLeg1) { if( (CalculateLeptonMetMt(patMuon, theMETVector)<_Leg1MetMtMinCut) || (CalculateLeptonMetMt(patMuon, theMETVector)>_Leg1MetMtMaxCut) ) {return false;} } } if (_DoDiscrByLeg2MetMt) { if(_AnalyzeElectronForLeg2) { if( (CalculateLeptonMetMt(patElectron, theMETVector)<_Leg2MetMtMinCut) || (CalculateLeptonMetMt(patElectron, theMETVector)>_Leg2MetMtMaxCut) ) {return false;} } if(_AnalyzeMuonForLeg2) { if( (CalculateLeptonMetMt(patMuon, theMETVector)<_Leg2MetMtMinCut) || (CalculateLeptonMetMt(patMuon, theMETVector)>_Leg2MetMtMaxCut) ) {return false;} } } return true; } bool HiMassTauAnalysis::passTopologyCuts(const pat::Muon& patMuon1, int nobj1, const pat::Muon& patMuon2, int nobj2) { // ----Separation cut between muon legs (remove double counting) if (_DoDiTauDiscrByDeltaR) { if(reco::deltaR(smearedMuonMomentumVector.at(nobj1), smearedMuonMomentumVector.at(nobj2)) < _DiTauDeltaRCut) {return false;} } // ----Opposite sign - Like sign requirement if (_DiTauDiscrByOSLSType == "OS") { if((patMuon1.charge() * patMuon2.charge()) >= 0) {return false;} } else if (_DiTauDiscrByOSLSType == "LS") { if((patMuon1.charge() * patMuon2.charge()) <= 0) {return false;} } else {} // ----Require both legs to be almost back-to-back in phi if (_DoDiTauDiscrByCosDphi) { if(cos(TMath::Abs(normalizedPhi(smearedMuonPtEtaPhiMVector.at(nobj1).phi() - smearedMuonPtEtaPhiMVector.at(nobj2).phi()))) > _DiTauCosDphiMaxCut) {return false;} if(cos(TMath::Abs(normalizedPhi(smearedMuonPtEtaPhiMVector.at(nobj1).phi() - smearedMuonPtEtaPhiMVector.at(nobj2).phi()))) < _DiTauCosDphiMinCut) {return false;} } // ----Mass window requirement if (_DoDiscrByMassReco) { if( (CalculateThe4Momentum(patMuon1,patMuon2).second.M() < _MassMinCut) || (CalculateThe4Momentum(patMuon1,patMuon2).second.M() > _MassMaxCut) ) {return false;} } // ----Zeta requirement if (_DoDiTauDiscrByCDFzeta2D) { if( ((_PZetaCutCoefficient * CalculatePZeta(patMuon1,patMuon2, theMETVector)) + (_PZetaVisCutCoefficient * CalculatePZetaVis(patMuon1,patMuon2))) < _CDFzeta2DCutValue ) {return false;} } // ----Missing transverse energy requirement if (_DoDiscrByMet) {if(theMETVector.pt() < _RecoMetCut) {return false;}} if (_DoDiTauDiscrByDeltaPtDivSumPt) { if ( ((smearedMuonPtEtaPhiMVector.at(nobj1).pt() - smearedMuonPtEtaPhiMVector.at(nobj2).pt()) / (smearedMuonPtEtaPhiMVector.at(nobj1).pt() + smearedMuonPtEtaPhiMVector.at(nobj2).pt())) < _DiTauDeltaPtDivSumPtMinCutValue ) {return false;} if ( ((smearedMuonPtEtaPhiMVector.at(nobj1).pt() - smearedMuonPtEtaPhiMVector.at(nobj2).pt()) / (smearedMuonPtEtaPhiMVector.at(nobj1).pt() + smearedMuonPtEtaPhiMVector.at(nobj2).pt())) > _DiTauDeltaPtDivSumPtMaxCutValue ) {return false;} } if (_DoDiTauDiscrByDeltaPt) { if ( ((smearedMuonPtEtaPhiMVector.at(nobj1).pt() - smearedMuonPtEtaPhiMVector.at(nobj2).pt())) < _DiTauDeltaPtMinCutValue ) {return false;} if ( ((smearedMuonPtEtaPhiMVector.at(nobj1).pt() - smearedMuonPtEtaPhiMVector.at(nobj2).pt())) > _DiTauDeltaPtMaxCutValue ) {return false;} } if (_DoDiscrByLeg1MetDphi) { if(_AnalyzeMuonForLeg1) { if(TMath::Abs(normalizedPhi(smearedMuonPtEtaPhiMVector.at(nobj1).phi() - theMETVector.phi())) > _Leg1MetDphiMaxCut) {return false;} if(TMath::Abs(normalizedPhi(smearedMuonPtEtaPhiMVector.at(nobj1).phi() - theMETVector.phi())) < _Leg1MetDphiMinCut) {return false;} } } if (_DoDiscrByLeg2MetDphi) { if(_AnalyzeMuonForLeg2) { if(TMath::Abs(normalizedPhi(smearedMuonPtEtaPhiMVector.at(nobj2).phi() - theMETVector.phi())) > _Leg2MetDphiMaxCut) {return false;} if(TMath::Abs(normalizedPhi(smearedMuonPtEtaPhiMVector.at(nobj2).phi() - theMETVector.phi())) < _Leg2MetDphiMinCut) {return false;} } } if (_DoDiscrByLeg1MetMt) { if(_AnalyzeMuonForLeg1) { if( (CalculateLeptonMetMt(patMuon1, theMETVector)<_Leg1MetMtMinCut) || (CalculateLeptonMetMt(patMuon1, theMETVector)>_Leg1MetMtMaxCut) ) {return false;} } } if (_DoDiscrByLeg2MetMt) { if(_AnalyzeMuonForLeg2) { if( (CalculateLeptonMetMt(patMuon2, theMETVector)<_Leg2MetMtMinCut) || (CalculateLeptonMetMt(patMuon2, theMETVector)>_Leg2MetMtMaxCut) ) {return false;} } } return true; } bool HiMassTauAnalysis::passTopologyCuts(const pat::Electron& patElectron1, int nobj1, const pat::Electron& patElectron2, int nobj2) { // ----Separation cut between electron legs (remove double counting) if (_DoDiTauDiscrByDeltaR) { if(reco::deltaR(smearedElectronMomentumVector.at(nobj1), smearedElectronMomentumVector.at(nobj2)) < _DiTauDeltaRCut) {return false;} } // ----Opposite sign - Like sign requirement if (_DiTauDiscrByOSLSType == "OS") { if((patElectron1.charge() * patElectron2.charge()) >= 0) {return false;} } else if (_DiTauDiscrByOSLSType == "LS") { if((patElectron1.charge() * patElectron2.charge()) <= 0) {return false;} } else {} // ----Require both legs to be almost back-to-back in phi if (_DoDiTauDiscrByCosDphi) { if(cos(TMath::Abs(normalizedPhi(smearedElectronPtEtaPhiMVector.at(nobj1).phi() - smearedElectronPtEtaPhiMVector.at(nobj2).phi()))) > _DiTauCosDphiMaxCut) {return false;} if(cos(TMath::Abs(normalizedPhi(smearedElectronPtEtaPhiMVector.at(nobj1).phi() - smearedElectronPtEtaPhiMVector.at(nobj2).phi()))) < _DiTauCosDphiMinCut) {return false;} } // ----Mass window requirement if (_DoDiscrByMassReco) { if( (CalculateThe4Momentum(patElectron1,patElectron2).second.M() < _MassMinCut) || (CalculateThe4Momentum(patElectron1,patElectron2).second.M() > _MassMaxCut) ) {return false;} } // ----Zeta requirement if (_DoDiTauDiscrByCDFzeta2D) { if( ((_PZetaCutCoefficient * CalculatePZeta(patElectron1,patElectron2, theMETVector)) + (_PZetaVisCutCoefficient * CalculatePZetaVis(patElectron1,patElectron2))) < _CDFzeta2DCutValue ) {return false;} } // ----Missing transverse energy requirement if (_DoDiscrByMet) {if(theMETVector.pt() < _RecoMetCut) {return false;}} if (_DoDiTauDiscrByDeltaPtDivSumPt) { if ( ((smearedElectronPtEtaPhiMVector.at(nobj1).pt() - smearedElectronPtEtaPhiMVector.at(nobj2).pt()) / (smearedElectronPtEtaPhiMVector.at(nobj1).pt() + smearedElectronPtEtaPhiMVector.at(nobj2).pt())) < _DiTauDeltaPtDivSumPtMinCutValue ) {return false;} if ( ((smearedElectronPtEtaPhiMVector.at(nobj1).pt() - smearedElectronPtEtaPhiMVector.at(nobj2).pt()) / (smearedElectronPtEtaPhiMVector.at(nobj1).pt() + smearedElectronPtEtaPhiMVector.at(nobj2).pt())) > _DiTauDeltaPtDivSumPtMaxCutValue ) {return false;} } if (_DoDiTauDiscrByDeltaPt) { if ( ((smearedElectronPtEtaPhiMVector.at(nobj1).pt() - smearedElectronPtEtaPhiMVector.at(nobj2).pt())) < _DiTauDeltaPtMinCutValue ) {return false;} if ( ((smearedElectronPtEtaPhiMVector.at(nobj1).pt() - smearedElectronPtEtaPhiMVector.at(nobj2).pt())) > _DiTauDeltaPtMaxCutValue ) {return false;} } if (_DoDiscrByLeg1MetDphi) { if(_AnalyzeElectronForLeg1) { if(TMath::Abs(normalizedPhi(smearedElectronPtEtaPhiMVector.at(nobj1).phi() - theMETVector.phi())) > _Leg1MetDphiMaxCut) {return false;} if(TMath::Abs(normalizedPhi(smearedElectronPtEtaPhiMVector.at(nobj1).phi() - theMETVector.phi())) < _Leg1MetDphiMinCut) {return false;} } } if (_DoDiscrByLeg2MetDphi) { if(_AnalyzeElectronForLeg2) { if(TMath::Abs(normalizedPhi(smearedElectronPtEtaPhiMVector.at(nobj2).phi() - theMETVector.phi())) > _Leg2MetDphiMaxCut) {return false;} if(TMath::Abs(normalizedPhi(smearedElectronPtEtaPhiMVector.at(nobj2).phi() - theMETVector.phi())) < _Leg2MetDphiMinCut) {return false;} } } if (_DoDiscrByLeg1MetMt) { if(_AnalyzeElectronForLeg1) { if( (CalculateLeptonMetMt(patElectron1, theMETVector)<_Leg1MetMtMinCut) || (CalculateLeptonMetMt(patElectron1, theMETVector)>_Leg1MetMtMaxCut) ) {return false;} } } if (_DoDiscrByLeg2MetMt) { if(_AnalyzeElectronForLeg2) { if( (CalculateLeptonMetMt(patElectron2, theMETVector)<_Leg2MetMtMinCut) || (CalculateLeptonMetMt(patElectron2, theMETVector)>_Leg2MetMtMaxCut) ) {return false;} } } return true; } bool HiMassTauAnalysis::passTopologyCuts(const pat::Tau& patTau1, int nobj1, const pat::Tau& patTau2, int nobj2) { // ----Separation cut between lepton and tau jet (remove overlaps) if (_DoDiTauDiscrByDeltaR) {if(reco::deltaR(smearedTauMomentumVector.at(nobj1), smearedTauMomentumVector.at(nobj2)) < _DiTauDeltaRCut) {return false;}} // ----Opposite sign - Like sign requirement if (_DiTauDiscrByOSLSType == "OS") { if(_UseTauSeedTrackForDiTauDiscrByOSLS) { if (patTau1.isCaloTau()) { if((patTau1.leadTrack()->charge() * patTau2.leadTrack()->charge()) >= 0) {return false;} } else { if((patTau1.leadPFChargedHadrCand()->charge() * patTau2.leadPFChargedHadrCand()->charge()) >= 0) {return false;} } } else { if((patTau1.charge() * patTau2.charge()) >= 0) {return false;} } } else if (_DiTauDiscrByOSLSType == "LS") { if(_UseTauSeedTrackForDiTauDiscrByOSLS) { if (patTau1.isCaloTau()) { if((patTau1.leadTrack()->charge() * patTau2.leadTrack()->charge()) <= 0) {return false;} } else { if((patTau1.leadPFChargedHadrCand()->charge() * patTau2.leadPFChargedHadrCand()->charge()) <= 0) {return false;} } } else { if((patTau1.charge() * patTau2.charge()) <= 0) {return false;} } } else {} // ----Require both legs to be almost back-to-back in phi if (_DoDiTauDiscrByCosDphi) { if(cos(TMath::Abs(normalizedPhi(smearedTauPtEtaPhiMVector.at(nobj1).phi() - smearedTauPtEtaPhiMVector.at(nobj2).phi()))) > _DiTauCosDphiMaxCut) {return false;} if(cos(TMath::Abs(normalizedPhi(smearedTauPtEtaPhiMVector.at(nobj1).phi() - smearedTauPtEtaPhiMVector.at(nobj2).phi()))) < _DiTauCosDphiMinCut) {return false;} } // ----Mass window requirement if (_DoDiscrByMassReco) { if( (CalculateThe4Momentum(patTau1,patTau2).second.M() < _MassMinCut) || (CalculateThe4Momentum(patTau1,patTau2).second.M() > _MassMaxCut) ) {return false;} } // ----Zeta requirement if (_DoDiTauDiscrByCDFzeta2D) { if( ((_PZetaCutCoefficient * CalculatePZeta(patTau1,patTau2, theMETVector)) + (_PZetaVisCutCoefficient * CalculatePZetaVis(patTau1,patTau2))) < _CDFzeta2DCutValue ) {return false;} } // ----Missing transverse energy requirement if (_DoDiscrByMet) {if(theMETVector.pt() < _RecoMetCut) {return false;}} if (_DoDiTauDiscrByDeltaPtDivSumPt) { if ( ((smearedTauPtEtaPhiMVector.at(nobj1).pt() - smearedTauPtEtaPhiMVector.at(nobj2).pt()) / (smearedTauPtEtaPhiMVector.at(nobj1).pt() + smearedTauPtEtaPhiMVector.at(nobj2).pt())) < _DiTauDeltaPtDivSumPtMinCutValue ) {return false;} if ( ((smearedTauPtEtaPhiMVector.at(nobj1).pt() - smearedTauPtEtaPhiMVector.at(nobj2).pt()) / (smearedTauPtEtaPhiMVector.at(nobj1).pt() + smearedTauPtEtaPhiMVector.at(nobj2).pt())) > _DiTauDeltaPtDivSumPtMaxCutValue ) {return false;} } if (_DoDiTauDiscrByDeltaPt) { if ( ((smearedTauPtEtaPhiMVector.at(nobj1).pt() - smearedTauPtEtaPhiMVector.at(nobj2).pt())) < _DiTauDeltaPtMinCutValue ) {return false;} if ( ((smearedTauPtEtaPhiMVector.at(nobj1).pt() - smearedTauPtEtaPhiMVector.at(nobj2).pt())) > _DiTauDeltaPtMaxCutValue ) {return false;} } if (_DoDiscrByLeg1MetDphi) { if(_AnalyzeTauForLeg1) { if(TMath::Abs(normalizedPhi(smearedTauPtEtaPhiMVector.at(nobj1).phi() - theMETVector.phi())) > _Leg1MetDphiMaxCut) {return false;} if(TMath::Abs(normalizedPhi(smearedTauPtEtaPhiMVector.at(nobj1).phi() - theMETVector.phi())) < _Leg1MetDphiMinCut) {return false;} } } if (_DoDiscrByLeg2MetDphi) { if(_AnalyzeTauForLeg2) { if(TMath::Abs(normalizedPhi(smearedTauPtEtaPhiMVector.at(nobj2).phi() - theMETVector.phi())) > _Leg2MetDphiMaxCut) {return false;} if(TMath::Abs(normalizedPhi(smearedTauPtEtaPhiMVector.at(nobj2).phi() - theMETVector.phi())) < _Leg2MetDphiMinCut) {return false;} } } if (_DoDiscrByLeg1MetMt) { if(_AnalyzeTauForLeg1) { if( (CalculateLeptonMetMt(patTau1, theMETVector)<_Leg1MetMtMinCut) || (CalculateLeptonMetMt(patTau1, theMETVector)>_Leg1MetMtMaxCut) ) {return false;} } } if (_DoDiscrByLeg2MetMt) { if(_AnalyzeTauForLeg2) { if( (CalculateLeptonMetMt(patTau2, theMETVector)<_Leg2MetMtMinCut) || (CalculateLeptonMetMt(patTau2, theMETVector)>_Leg2MetMtMaxCut) ) {return false;} } } return true; } // ---------------Determine whether event is an e-mu event bool HiMassTauAnalysis::isEMuEvent() { bool isEMu = false; for ( pat::MuonCollection::const_iterator patMuon = _patMuons->begin();patMuon != _patMuons->end(); ++patMuon ) { if (!(*patMuon).isGlobalMuon()) {continue;} if (fabs((*patMuon).eta())>2.1) {continue;} if ((*patMuon).pt()<20.0) {continue;} if( ((*patMuon).trackIsoDeposit()->depositAndCountWithin(0.4,reco::IsoDeposit::Vetos(),0.7).first + (*patMuon).ecalIsoDeposit()->depositAndCountWithin(0.4,reco::IsoDeposit::Vetos(),0.3).first) >= 4.0) {continue;} if( ((0.8 * muon::caloCompatibility(*patMuon)) + (1.2 * muon::segmentCompatibility(*patMuon))) <= 1.0 ) {continue;} for ( pat::ElectronCollection::const_iterator patElectron = _patElectrons->begin();patElectron != _patElectrons->end(); ++patElectron ) { heep::Ele theHeepElec(*patElectron); int cutResult = (*patElectron).userInt("HEEPId"); const Track* elTrack = (const reco::Track*)((*patElectron).gsfTrack().get()); const HitPattern& pInner = elTrack->trackerExpectedHitsInner(); if (fabs((*patElectron).eta())>2.1) {continue;} if ((*patElectron).pt()<20.0) {continue;} /* std::cout << "e Iso = " << (*patElectron).dr04TkSumPt() + (*patElectron).dr04EcalRecHitSumEt() << std::endl; std::cout << "e is Ecal Driven = " << (*patElectron).ecalDrivenSeed() << std::endl; std::cout << "e passed hadem = " << heep::CutCodes::passCuts(cutResult, "hadem") << std::endl; std::cout << "e passed sigmaIEtaIEta = " << heep::CutCodes::passCuts(cutResult, "sigmaIEtaIEta") << std::endl; std::cout << "e passed dEtaIn = " << heep::CutCodes::passCuts(cutResult, "dEtaIn") << std::endl; std::cout << "e passed dPhiIn = " << heep::CutCodes::passCuts(cutResult, "dPhiIn") << std::endl; std::cout << "e passed e2x5Over5x5 = " << heep::CutCodes::passCuts(cutResult, "e2x5Over5x5") << std::endl; std::cout << "e hits = " << pInner.numberOfHits() << std::endl; std::cout << "e-mu dR = " << reco::deltaR(patMuon->p4(), patElectron->p4()) << std::endl; std::cout << "e-mu charge = " << patElectron->charge() * patMuon->charge() << std::endl; std::cout << "e-mu cosDphi = " << cos(TMath::Abs(normalizedPhi(patElectron->phi() - patMuon->phi()))) << std::endl; std::cout << "e-met cosDphi = " << cos(TMath::Abs(normalizedPhi(patElectron->phi() - theMETVector.phi()))) << std::endl; std::cout << "mu-met cosDphi = " << cos(TMath::Abs(normalizedPhi(patMuon->phi() - theMETVector.phi()))) << std::endl; std::cout << "zeta = " << ((1.0 * CalculatePZeta((*patElectron),(*patMuon))) + (-1.25 * CalculatePZetaVis((*patElectron),(*patMuon)))) << std::endl; std::cout << "met = " << theMETVector.pt() << std::endl; */ if(((*patElectron).dr04TkSumPt() + (*patElectron).dr04EcalRecHitSumEt()) > 4.0) {continue;} if(!((*patElectron).ecalDrivenSeed())) {continue;} if(!(heep::CutCodes::passCuts(cutResult, "hadem"))) {continue;} if(!(heep::CutCodes::passCuts(cutResult, "sigmaIEtaIEta"))) {continue;} if(!(heep::CutCodes::passCuts(cutResult, "dEtaIn"))) {continue;} if(!(heep::CutCodes::passCuts(cutResult, "dPhiIn"))) {continue;} if(!(heep::CutCodes::passCuts(cutResult, "e2x5Over5x5"))) {continue;} if(pInner.numberOfHits() >= 1) {continue;} if(reco::deltaR(patMuon->p4(), patElectron->p4()) < 0.7) {continue;} if((patElectron->charge() * patMuon->charge()) >= 0) {continue;} if(cos(TMath::Abs(normalizedPhi(patElectron->phi() - patMuon->phi()))) > -0.95) {continue;} if(patElectron->pt() > patMuon->pt()) { if(cos(TMath::Abs(normalizedPhi(patElectron->phi() - theMETVector.phi()))) > -0.6) {continue;} } else { if(cos(TMath::Abs(normalizedPhi(patMuon->phi() - theMETVector.phi()))) > -0.6) {continue;} } if( ((1.0 * CalculatePZeta((*patElectron),(*patMuon), theMETVector)) + (-1.25 * CalculatePZetaVis((*patElectron),(*patMuon)))) < -10.0 ) {continue;} if(theMETVector.pt() < 30.0) {continue;} double sumptofjets = 0; for ( pat::JetCollection::const_iterator patJet = _patJets->begin();patJet != _patJets->end(); ++patJet ) { if((patJet->pt() > 20.0) && (fabs(patJet->eta()) < 2.5) && (reco::deltaR(patMuon->p4(), patJet->p4()) > 0.4) && (reco::deltaR(patElectron->p4(), patJet->p4()) > 0.4) ) {sumptofjets = sumptofjets + patJet->et();} } // std::cout << "sum pt of jets = " << sumptofjets << std::endl; if(sumptofjets > 150.0) {continue;} isEMu = true; } } return isEMu; } // ---------------Fill Ntuple void HiMassTauAnalysis::fillNtuple() { } // ---------------Fill Histograms void HiMassTauAnalysis::fillHistograms() { for(unsigned int NpdfID = 0; NpdfID < pdfWeightVector.size(); NpdfID++){ // ------Vertices if (_FillRecoVertexHists) { int nVertices = 0; for(reco::VertexCollection::const_iterator primaryVertex = _primaryEventVertexCollection->begin();primaryVertex != _primaryEventVertexCollection->end(); ++primaryVertex ) { if (!passRecoVertexCuts(*primaryVertex)) continue; _hVertexZposition[NpdfID]->Fill(primaryVertex->z(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); int pvntrk = 0; reco::Vertex::trackRef_iterator pvtrk; for(pvtrk=primaryVertex->tracks_begin();pvtrk!=primaryVertex->tracks_end();++pvtrk) { if(primaryVertex->trackWeight(*pvtrk) > _RecoVertexTrackWeight) {pvntrk++;} } _hVertexNTracks[NpdfID]->Fill(pvntrk,isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); nVertices++; } _hNVertices[NpdfID]->Fill(nVertices,isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); } // ------Generated Taus if ( (_FillGenTauHists) && (_GenParticleSource.label() != "") ) { reco::Candidate::LorentzVector theGenMotherObject(0,0,0,0); reco::Candidate::LorentzVector theGenGrandMotherObject(0,0,0,0); int nGenTaus = 0; for(GenParticleCollection::const_iterator genParticle = _genParticles->begin();genParticle != _genParticles->end();++genParticle) { if((abs(genParticle->pdgId()) == 15) && (genParticle->status() != 3)) { int neutrinos = 0; MChadtau = genParticle->p4(); if(genParticle->mother(0)->pdgId() == genParticle->pdgId()) { motherCand = genParticle->mother(0)->mother(0); theGenMotherObject = motherCand->p4(); if(motherCand->mother(0)->pdgId() == motherCand->pdgId()) {grandMotherCand = motherCand->mother(0)->mother(0);theGenGrandMotherObject = grandMotherCand->p4();} else {grandMotherCand = motherCand->mother(0);theGenGrandMotherObject = grandMotherCand->p4();} } else { motherCand = genParticle->mother(0); theGenMotherObject = motherCand->p4(); if(motherCand->mother(0)->pdgId() == motherCand->pdgId()) {grandMotherCand = motherCand->mother(0)->mother(0);theGenGrandMotherObject = grandMotherCand->p4();} else {grandMotherCand = motherCand->mother(0);theGenGrandMotherObject = grandMotherCand->p4();} } for(int ii=0; ii<(int)(genParticle->numberOfDaughters()); ii++) { daughterCand = genParticle->daughter(ii); if( (abs(daughterCand->pdgId()) == 12) || (abs(daughterCand->pdgId()) == 14) || (abs(daughterCand->pdgId()) == 16) ) { neutrinos++; MChadtau = MChadtau - daughterCand->p4(); } } if(neutrinos == 1) { if(_UseTauMotherId) { if(abs(motherCand->pdgId()) == _TauMotherId) { if(_UseTauGrandMotherId) { if(abs(grandMotherCand->pdgId()) == _TauGrandMotherId) { _hGenTauEnergy[NpdfID]->Fill(MChadtau.energy(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hGenTauPt[NpdfID]->Fill(MChadtau.pt(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hGenTauEta[NpdfID]->Fill(MChadtau.eta(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hGenTauPhi[NpdfID]->Fill(MChadtau.phi(),isrgluon_weight * isrgamma_weight * fsr_weight); _hGenTauMotherEnergy[NpdfID]->Fill(theGenMotherObject.energy(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hGenTauMotherPt[NpdfID]->Fill(theGenMotherObject.pt(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hGenTauMotherEta[NpdfID]->Fill(theGenMotherObject.eta(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hGenTauMotherPhi[NpdfID]->Fill(theGenMotherObject.phi(),isrgluon_weight * isrgamma_weight * fsr_weight); _hGenTauGrandMotherEnergy[NpdfID]->Fill(theGenGrandMotherObject.energy(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hGenTauGrandMotherPt[NpdfID]->Fill(theGenGrandMotherObject.pt(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hGenTauGrandMotherEta[NpdfID]->Fill(theGenGrandMotherObject.eta(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hGenTauGrandMotherPhi[NpdfID]->Fill(theGenGrandMotherObject.phi(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); nGenTaus++; } } else { _hGenTauEnergy[NpdfID]->Fill(MChadtau.energy(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hGenTauPt[NpdfID]->Fill(MChadtau.pt(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hGenTauEta[NpdfID]->Fill(MChadtau.eta(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hGenTauPhi[NpdfID]->Fill(MChadtau.phi(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hGenTauMotherEnergy[NpdfID]->Fill(theGenMotherObject.energy(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hGenTauMotherPt[NpdfID]->Fill(theGenMotherObject.pt(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hGenTauMotherEta[NpdfID]->Fill(theGenMotherObject.eta(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hGenTauMotherPhi[NpdfID]->Fill(theGenMotherObject.phi(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hGenTauGrandMotherEnergy[NpdfID]->Fill(theGenGrandMotherObject.energy(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hGenTauGrandMotherPt[NpdfID]->Fill(theGenGrandMotherObject.pt(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hGenTauGrandMotherEta[NpdfID]->Fill(theGenGrandMotherObject.eta(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hGenTauGrandMotherPhi[NpdfID]->Fill(theGenGrandMotherObject.phi(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); nGenTaus++; } } } else { _hGenTauEnergy[NpdfID]->Fill(MChadtau.energy(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hGenTauPt[NpdfID]->Fill(MChadtau.pt(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hGenTauEta[NpdfID]->Fill(MChadtau.eta(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hGenTauPhi[NpdfID]->Fill(MChadtau.phi(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hGenTauMotherEnergy[NpdfID]->Fill(theGenMotherObject.energy(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hGenTauMotherPt[NpdfID]->Fill(theGenMotherObject.pt(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hGenTauMotherEta[NpdfID]->Fill(theGenMotherObject.eta(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hGenTauMotherPhi[NpdfID]->Fill(theGenMotherObject.phi(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hGenTauGrandMotherEnergy[NpdfID]->Fill(theGenGrandMotherObject.energy(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hGenTauGrandMotherPt[NpdfID]->Fill(theGenGrandMotherObject.pt(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hGenTauGrandMotherEta[NpdfID]->Fill(theGenGrandMotherObject.eta(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hGenTauGrandMotherPhi[NpdfID]->Fill(theGenGrandMotherObject.phi(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); nGenTaus++; } } } } _hNGenTau[NpdfID]->Fill(nGenTaus,isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); } // ------Reco Tau Histograms if (_FillRecoTauHists) { int nTaus = 0; int theNumberOfTaus = 0; double maximumTauPt = 0.0; double maximumTauSeedPt = -1.0; double minimumTauEta = 9999.9; double minimumTauTrackIso = 9999.9; double minimumTauEcalIso = 9999.9; double minimumTauLeadNhits = 9999.9; double minimumTauH3x3OverP = 9999.9; // pat::TauCollection::const_iterator tau1byLTpT; for ( pat::TauCollection::const_iterator patTau = _patTaus->begin(); patTau != _patTaus->end(); ++patTau ) { theNumberOfTaus++; if (!passRecoTauCuts((*patTau),theNumberOfTaus-1)) continue; _hTauJetEnergy[NpdfID]->Fill(patTau->energy(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hTauJetPt[NpdfID]->Fill(patTau->pt(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hTauJetEta[NpdfID]->Fill(patTau->eta(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hTauJetPhi[NpdfID]->Fill(patTau->phi(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hTauJetNumSignalTracks[NpdfID]->Fill(patTau->signalPFChargedHadrCands().size(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hTauJetNumSignalGammas[NpdfID]->Fill(CalculateNumberSignalTauGammas(*patTau),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hTauJetCharge[NpdfID]->Fill(fabs(patTau->charge()),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hTauJetSignalTracksMass[NpdfID]->Fill(CalculateTauSignalTracksMass(*patTau).M(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hTauJetSignalTracksAndGammasMass[NpdfID]->Fill(CalculateTauSignalTracksAndGammasMass(*patTau).M(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hTauJetSignalTracksChargeFraction[NpdfID]->Fill(CalculateTauSignalTracksMass(*patTau).pt() / patTau->pt(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); if(patTau->signalPFChargedHadrCands().size() == 1) { _hTauJetSignalTracksMass1prong[NpdfID]->Fill(CalculateTauSignalTracksMass(*patTau).M(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hTauJetSignalTracksAndGammasMass1prong[NpdfID]->Fill(CalculateTauSignalTracksAndGammasMass(*patTau).M(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hTauJetSignalTracksAndPiZerosMass1prong[NpdfID]->Fill(CalculateTauSignalTracksAndPiZerosMass(*patTau).first.M(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hTauJetNumSignalPiZeros1prong[NpdfID]->Fill(CalculateTauSignalTracksAndPiZerosMass(*patTau).second,isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); if(CalculateNumberSignalTauGammas(*patTau) == 0) {_hTauJetMass1Prong0Gamma[NpdfID]->Fill(CalculateTauSignalTracksAndGammasMass(*patTau).M(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID));} if(CalculateNumberSignalTauGammas(*patTau) == 1) {_hTauJetMass1Prong1Gamma[NpdfID]->Fill(CalculateTauSignalTracksAndGammasMass(*patTau).M(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID));} if(CalculateNumberSignalTauGammas(*patTau) >= 2) {_hTauJetMass1Prong2orMoreGamma[NpdfID]->Fill(CalculateTauSignalTracksAndGammasMass(*patTau).M(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID));} } if(patTau->signalPFChargedHadrCands().size() == 3) { _hTauJetSignalTracksMass3prong[NpdfID]->Fill(CalculateTauSignalTracksMass(*patTau).M(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hTauJetSignalTracksAndGammasMass3prong[NpdfID]->Fill(CalculateTauSignalTracksAndGammasMass(*patTau).M(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); if(CalculateNumberSignalTauGammas(*patTau) == 0) {_hTauJetMass3Prong0Gamma[NpdfID]->Fill(CalculateTauSignalTracksAndGammasMass(*patTau).M(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID));} if(CalculateNumberSignalTauGammas(*patTau) == 1) {_hTauJetMass3Prong1Gamma[NpdfID]->Fill(CalculateTauSignalTracksAndGammasMass(*patTau).M(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID));} if(CalculateNumberSignalTauGammas(*patTau) >= 2) {_hTauJetMass3Prong2orMoreGamma[NpdfID]->Fill(CalculateTauSignalTracksAndGammasMass(*patTau).M(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID));} } if( (patTau->leadPFChargedHadrCand().isNonnull()) ) { _hTauJetSeedTrackPt[NpdfID]->Fill(patTau->leadPFChargedHadrCand()->pt(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hTauJetSeedTrackIpSignificance[NpdfID]->Fill(patTau->leadPFChargedHadrCandsignedSipt(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); if( (patTau->leadPFChargedHadrCand()->trackRef().isNonnull()) ) { _hTauJetSeedTrackNhits[NpdfID]->Fill(patTau->leadPFChargedHadrCand()->trackRef()->recHitsSize(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hTauJetSeedTrackChi2[NpdfID]->Fill(patTau->leadPFChargedHadrCand()->trackRef()->chi2(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); } _hTauJetH3x3OverP[NpdfID]->Fill(patTau->hcal3x3OverPLead(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); } if (_UseRecoTauDiscrByIsolationFlag) { _hTauJetNumIsoTracks[NpdfID]->Fill(patTau->isolationPFChargedHadrCands().size(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hTauJetNumIsoGammas[NpdfID]->Fill(patTau->isolationPFGammaCands().size(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hTauJetNumIsoCands[NpdfID]->Fill(patTau->isolationPFChargedHadrCands().size() + patTau->isolationPFGammaCands().size(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hTauJetSumPtIsoTracks[NpdfID]->Fill(patTau->isolationPFChargedHadrCandsPtSum(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hTauJetSumPtIsoGammas[NpdfID]->Fill(patTau->isolationPFGammaCandsEtSum(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hTauJetSumPtIso[NpdfID]->Fill(patTau->isolationPFChargedHadrCandsPtSum() + patTau->isolationPFGammaCandsEtSum(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); } else { _hTauJetNumIsoTracks[NpdfID]->Fill(CalculateTauTrackIsolation(*patTau).first,isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hTauJetNumIsoGammas[NpdfID]->Fill(CalculateTauEcalIsolation(*patTau).first,isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hTauJetNumIsoCands[NpdfID]->Fill(CalculateTauTrackIsolation(*patTau).first + CalculateTauEcalIsolation(*patTau).first,isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hTauJetSumPtIsoTracks[NpdfID]->Fill(CalculateTauTrackIsolation(*patTau).second,isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hTauJetSumPtIsoGammas[NpdfID]->Fill(CalculateTauEcalIsolation(*patTau).second,isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hTauJetSumPtIso[NpdfID]->Fill(CalculateTauTrackIsolation(*patTau).second + CalculateTauEcalIsolation(*patTau).second,isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); } if(_GenParticleSource.label() != "") { if(matchToGen(*patTau).first) { _hTauJetGenTauDeltaPhi[NpdfID]->Fill(normalizedPhi(patTau->phi() - matchToGen(*patTau).second.phi()),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hTauJetGenTauDeltaEta[NpdfID]->Fill(patTau->eta() - matchToGen(*patTau).second.eta(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hTauJetGenTauDeltaPt[NpdfID]->Fill((patTau->pt() - matchToGen(*patTau).second.pt()) / matchToGen(*patTau).second.pt(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); } } //--- Best Tau Pt if(patTau->pt() > maximumTauPt){ if(reco::deltaR(maxPtMuonVector, patTau->p4()) > _DiTauDeltaRCut) {maximumTauPt = patTau->pt();} } //--- Best Tau Eta if(fabs(patTau->eta()) < fabs(minimumTauEta)) {minimumTauEta = patTau->eta();} //--- Best Tau Seed Pt, H3x3OverP, and lead track Nhits if( (patTau->leadPFChargedHadrCand().isNonnull()) ) { if(patTau->leadPFChargedHadrCand()->pt() > maximumTauSeedPt) {maximumTauSeedPt = patTau->leadPFChargedHadrCand()->pt();} if(patTau->hcal3x3OverPLead() < minimumTauH3x3OverP) {minimumTauH3x3OverP = patTau->hcal3x3OverPLead();} if( (patTau->leadPFChargedHadrCand()->trackRef().isNonnull()) ) { if(patTau->leadPFChargedHadrCand()->trackRef()->recHitsSize() < minimumTauLeadNhits) {minimumTauLeadNhits = patTau->leadPFChargedHadrCand()->trackRef()->recHitsSize();} } } if (_UseRecoTauDiscrByIsolationFlag) { if(patTau->isolationPFChargedHadrCandsPtSum() < minimumTauTrackIso) {minimumTauTrackIso = patTau->isolationPFChargedHadrCandsPtSum();} if(patTau->isolationPFGammaCandsEtSum() < minimumTauEcalIso) {minimumTauEcalIso = patTau->isolationPFGammaCandsEtSum();} } else { if(CalculateTauTrackIsolation(*patTau).second < minimumTauTrackIso) {minimumTauTrackIso = CalculateTauTrackIsolation(*patTau).second;} if(CalculateTauEcalIsolation(*patTau).second < minimumTauEcalIso) {minimumTauEcalIso = CalculateTauEcalIsolation(*patTau).second;} } nTaus++; } _hBestTauJetPt[NpdfID]->Fill(maximumTauPt,isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hBestTauJetEta[NpdfID]->Fill(minimumTauEta,isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hBestTauJetSeedTrackPt[NpdfID]->Fill(maximumTauSeedPt,isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hBestTauJetSumPtIsoTracks[NpdfID]->Fill(minimumTauTrackIso,isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hBestTauJetSumPtIsoGammas[NpdfID]->Fill(minimumTauEcalIso,isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hBestTauJetH3x3OverP[NpdfID]->Fill(minimumTauH3x3OverP,isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hBestTauJetSeedTrackNhits[NpdfID]->Fill(minimumTauLeadNhits,isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hNTau[NpdfID]->Fill(nTaus,isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); } // ------Reco Muon Histograms if (_FillRecoMuonHists) { int nMuons = 0; int theNumberOfMuons = 0; double maxMuonPt = 0; for ( pat::MuonCollection::const_iterator patMuon = _patMuons->begin(); patMuon != _patMuons->end(); ++patMuon ) { theNumberOfMuons++; if (!passRecoMuonCuts((*patMuon),theNumberOfMuons-1)) continue; if(patMuon->pt() > maxMuonPt){ maxMuonPt = patMuon->pt(); maxPtMuonVector = patMuon->p4(); } _hMuonEnergy[NpdfID]->Fill(patMuon->energy(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hMuonPt[NpdfID]->Fill(patMuon->pt(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hMuonEta[NpdfID]->Fill(patMuon->eta(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hMuonPhi[NpdfID]->Fill(patMuon->phi(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); if(_GenParticleSource.label() != "") { if(matchToGen((*patMuon),13).first) { _hMuonGenMuonDeltaPhi[NpdfID]->Fill(normalizedPhi(patMuon->phi() - matchToGen((*patMuon),13).second.phi()),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hMuonGenMuonDeltaEta[NpdfID]->Fill(patMuon->eta() - matchToGen((*patMuon),13).second.eta(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hMuonGenMuonDeltaPt[NpdfID]->Fill((patMuon->pt() - matchToGen((*patMuon),13).second.pt()) / matchToGen((*patMuon),13).second.pt(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); } } _hMuonTrackIso[NpdfID]->Fill(patMuon->trackIsoDeposit()->depositAndCountWithin(_RecoMuonIsoDeltaRCone,reco::IsoDeposit::Vetos(),_RecoMuonTrackIsoTrkThreshold).first,isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hMuonEcalIso[NpdfID]->Fill(patMuon->ecalIsoDeposit()->depositAndCountWithin(_RecoMuonIsoDeltaRCone,reco::IsoDeposit::Vetos(),_RecoMuonEcalIsoRecHitThreshold).first,isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hMuonIso[NpdfID]->Fill(patMuon->trackIsoDeposit()->depositAndCountWithin(_RecoMuonIsoDeltaRCone,reco::IsoDeposit::Vetos(),_RecoMuonTrackIsoTrkThreshold).first + patMuon->ecalIsoDeposit()->depositAndCountWithin(_RecoMuonIsoDeltaRCone,reco::IsoDeposit::Vetos(),_RecoMuonEcalIsoRecHitThreshold).first,isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hMuonCaloCompatibility[NpdfID]->Fill(muon::caloCompatibility(*patMuon),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hMuonSegmentCompatibility[NpdfID]->Fill(muon::segmentCompatibility(*patMuon),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hMuonCaloCompatibilityVsSegmentCompatibility[NpdfID]->Fill(muon::caloCompatibility(*patMuon),muon::segmentCompatibility(*patMuon),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hMuonAntiPion[NpdfID]->Fill((_RecoMuonCaloCompCoefficient * muon::caloCompatibility(*patMuon)) + (_RecoMuonSegmCompCoefficient * muon::segmentCompatibility(*patMuon)),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); const reco::Vertex& thePrimaryEventVertex = (*(_primaryEventVertexCollection)->begin()); if ( patMuon->track().isNonnull() ) { _hMuonIp[NpdfID]->Fill( patMuon->track()->dxy(thePrimaryEventVertex.position()) ,isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); if(fabs(patMuon->track()->dxyError()) != 0) { _hMuonIpSignificance[NpdfID]->Fill( fabs(patMuon->track()->dxy(thePrimaryEventVertex.position()) / patMuon->track()->dxyError()) ,isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); } else {_hMuonIpSignificance[NpdfID]->Fill(-1,isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID));} } nMuons++; } _hNMuon[NpdfID]->Fill(nMuons,isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); } //-----Fill Reco Electron Histograms if (_FillRecoElectronHists) { int nElectrons = 0; int theNumberOfElectrons = 0; double maxElecEt = 0; for ( pat::ElectronCollection::const_iterator patElectron = _patElectrons->begin();patElectron != _patElectrons->end(); ++patElectron ) { theNumberOfElectrons++; if (!passRecoElectronCuts((*patElectron),theNumberOfElectrons-1)) continue; if(patElectron->pt() > maxElecEt){ maxElecEt = patElectron->pt(); maxEtElectronVector = patElectron->p4(); } _hElectronEnergy[NpdfID]->Fill(patElectron->energy(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hElectronPt[NpdfID]->Fill(patElectron->pt(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hElectronEta[NpdfID]->Fill(patElectron->eta(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hElectronPhi[NpdfID]->Fill(patElectron->phi(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); if(_GenParticleSource.label() != "") { if(matchToGen((*patElectron),11).first) { _hElectronGenElectronDeltaPhi[NpdfID]->Fill(normalizedPhi(patElectron->phi() - matchToGen((*patElectron),11).second.phi()),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hElectronGenElectronDeltaEta[NpdfID]->Fill(patElectron->eta() - matchToGen((*patElectron),11).second.eta(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hElectronGenElectronDeltaPt[NpdfID]->Fill((patElectron->pt() - matchToGen((*patElectron),11).second.pt()) / matchToGen((*patElectron),11).second.pt(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); } } _hElectronTrackIso[NpdfID]->Fill(patElectron->dr04TkSumPt(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hElectronEcalIso[NpdfID]->Fill(patElectron->dr04EcalRecHitSumEt(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); const reco::Vertex& thePrimaryEventVertex = (*(_primaryEventVertexCollection)->begin()); if ( patElectron->track().isNonnull() ) { _hElectronIp[NpdfID]->Fill( patElectron->track()->dxy(thePrimaryEventVertex.position()) ,isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); } //if ( patElectron->gsfTrack().isNonnull() ) { _hElectronIp[NpdfID]->Fill( patElectron->gsfTrack()->dxy(thePrimaryEventVertex.position()) ,isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); } _hElectronEoverP[NpdfID]->Fill(patElectron->eSuperClusterOverP(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); if(_UseHeepInfo) { heep::Ele theHeepElec(*patElectron); _hElectronHoverEm[NpdfID]->Fill(theHeepElec.hOverE(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); if(patElectron->isEE()) { _hElectronEESigmaIEtaIEta[NpdfID]->Fill(theHeepElec.sigmaIEtaIEta(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hElectronEEDEta[NpdfID]->Fill(theHeepElec.dEtaIn(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hElectronEEDPhi[NpdfID]->Fill(theHeepElec.dPhiIn(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); } if(patElectron->isEB()) { _hElectronEBSigmaIEtaIEta[NpdfID]->Fill(theHeepElec.sigmaIEtaIEta(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hElectronEBDEta[NpdfID]->Fill(theHeepElec.dEtaIn(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hElectronEBDPhi[NpdfID]->Fill(theHeepElec.dPhiIn(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hElectronEB2by5Over5by5[NpdfID]->Fill(theHeepElec.scE2x5Max() / theHeepElec.scE5x5(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hElectronEB1by5Over5by5[NpdfID]->Fill(theHeepElec.scE1x5() / theHeepElec.scE5x5(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); } } else { _hElectronHoverEm[NpdfID]->Fill(patElectron->hadronicOverEm(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); if(patElectron->isEE()) { _hElectronEESigmaIEtaIEta[NpdfID]->Fill(patElectron->scSigmaIEtaIEta(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hElectronEEDEta[NpdfID]->Fill(patElectron->deltaEtaSuperClusterTrackAtVtx(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hElectronEEDPhi[NpdfID]->Fill(patElectron->deltaPhiSuperClusterTrackAtVtx(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); } if(patElectron->isEB()) { _hElectronEBSigmaIEtaIEta[NpdfID]->Fill(patElectron->scSigmaIEtaIEta(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hElectronEBDEta[NpdfID]->Fill(patElectron->deltaEtaSuperClusterTrackAtVtx(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hElectronEBDPhi[NpdfID]->Fill(patElectron->deltaPhiSuperClusterTrackAtVtx(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hElectronEB2by5Over5by5[NpdfID]->Fill(patElectron->scE2x5Max() / patElectron->scE5x5(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hElectronEB1by5Over5by5[NpdfID]->Fill(patElectron->scE1x5() / patElectron->scE5x5(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); } } const Track* elTrack = (const reco::Track*)(patElectron->gsfTrack().get()); const HitPattern& pInner = elTrack->trackerExpectedHitsInner(); _hElectronMissingHits[NpdfID]->Fill(pInner.numberOfHits(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hElectronClassification[NpdfID]->Fill(patElectron->classification(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hElectronEcalDriven[NpdfID]->Fill(patElectron->ecalDrivenSeed(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hElectronTrackerDriven[NpdfID]->Fill(patElectron->trackerDrivenSeed(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); nElectrons++; } _hNElectron[NpdfID]->Fill(nElectrons,isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); } // ------Reco Jet Histograms if (_FillRecoJetHists) { int nJets = 0; int theNumberOfJets = 0; for ( pat::JetCollection::const_iterator patJet = _patJets->begin(); patJet != _patJets->end(); ++patJet ) { theNumberOfJets++; if (!passRecoJetCuts((*patJet),theNumberOfJets-1)) continue; _hBJetDiscrByTrackCounting[NpdfID]->Fill(patJet->bDiscriminator("trackCountingHighEffBJetTags"),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hBJetDiscrBySimpleSecondaryV[NpdfID]->Fill(patJet->bDiscriminator("simpleSecondaryVertexBJetTags"),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hBJetDiscrByCombinedSecondaryV[NpdfID]->Fill(patJet->bDiscriminator("combinedSecondaryVertexBJetTags"),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hJetEnergy[NpdfID]->Fill(patJet->energy(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hJetPt[NpdfID]->Fill(patJet->pt(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hJetEta[NpdfID]->Fill(patJet->eta(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hJetPhi[NpdfID]->Fill(patJet->phi(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); nJets++; } _hNJet[NpdfID]->Fill(nJets,isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); } // ------Topology Histograms double maximumLeptonPt = 0.0; double minimumLeptonEta = 9999.9; double maximumdR = 0.0; double minimumLeptonTrackIso = 9999.9; double minimumLeptonEcalIso = 9999.9; double maximumTauPt = 0.0; double maximumTauSeedPt = -1.0; double minimumTauEta = 9999.9; double minimumTauTrackIso = 9999.9; double minimumTauEcalIso = 9999.9; double minimumTauLeadNhits = 9999.9; double minimumTauH3x3OverP = 9999.9; double mimimumCosDphi = 1.0; double minimumOSLS = 9999.9; double maximumZeta = 0.0; double maximumLeptonMetMt = 0.0; if (_FillTopologyHists) { _hMet[NpdfID]->Fill(theMETVector.pt(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); if( ((_AnalyzeMuonForLeg1) && (_AnalyzeTauForLeg2)) || ((_AnalyzeMuonForLeg2) && (_AnalyzeTauForLeg1)) ) { double minimumIp = 999.9; double maximumSegComp = 0.0; double maximumCaloComp = 0.0; double maximumPionVeto = 0.0; int theNumberOfMuons = 0; for ( pat::MuonCollection::const_iterator patMuon = _patMuons->begin();patMuon != _patMuons->end(); ++patMuon ) { theNumberOfMuons++; int theNumberOfTaus = 0; for ( pat::TauCollection::const_iterator patTau = _patTaus->begin();patTau != _patTaus->end(); ++patTau ) { theNumberOfTaus++; if ((passRecoTauCuts((*patTau),theNumberOfTaus-1)) && (passRecoMuonCuts((*patMuon),theNumberOfMuons-1)) && (passTopologyCuts((*patTau),theNumberOfTaus-1,(*patMuon),theNumberOfMuons-1))) { //--- Best Lepton Pt if(patMuon->pt() > maximumLeptonPt) {maximumLeptonPt = patMuon->pt();} //--- Best Lepton Eta if(fabs(patMuon->eta()) < fabs(minimumLeptonEta)) {minimumLeptonEta = patMuon->eta();} //--- Best Lepton Track Iso if(patMuon->trackIsoDeposit()->depositAndCountWithin(_RecoMuonIsoDeltaRCone,reco::IsoDeposit::Vetos(),_RecoMuonTrackIsoTrkThreshold).first < minimumLeptonTrackIso) {minimumLeptonTrackIso = patMuon->trackIsoDeposit()->depositAndCountWithin(_RecoMuonIsoDeltaRCone,reco::IsoDeposit::Vetos(),_RecoMuonTrackIsoTrkThreshold).first;} //--- Best Lepton Ecal Iso if(patMuon->ecalIsoDeposit()->depositAndCountWithin(_RecoMuonIsoDeltaRCone,reco::IsoDeposit::Vetos(),_RecoMuonEcalIsoRecHitThreshold).first < minimumLeptonEcalIso) {minimumLeptonEcalIso = patMuon->ecalIsoDeposit()->depositAndCountWithin(_RecoMuonIsoDeltaRCone,reco::IsoDeposit::Vetos(),_RecoMuonEcalIsoRecHitThreshold).first;} //--- Best Pion Veto if(muon::caloCompatibility(*patMuon) > maximumCaloComp) {maximumCaloComp = muon::caloCompatibility(*patMuon);} if(muon::segmentCompatibility(*patMuon) > maximumSegComp) {maximumSegComp = muon::segmentCompatibility(*patMuon);} if(((_RecoMuonCaloCompCoefficient * muon::caloCompatibility(*patMuon)) + (_RecoMuonSegmCompCoefficient * muon::segmentCompatibility(*patMuon))) > maximumPionVeto) {maximumPionVeto = (_RecoMuonCaloCompCoefficient * muon::caloCompatibility(*patMuon)) + (_RecoMuonSegmCompCoefficient *muon::segmentCompatibility(*patMuon));} //--- Best Lepton Ip const reco::Vertex& thePrimaryEventVertex = (*(_primaryEventVertexCollection)->begin()); if ( patMuon->track().isNonnull() ) { if(fabs(patMuon->track()->dxy(thePrimaryEventVertex.position())) < fabs(minimumIp)) {minimumIp = patMuon->track()->dxy(thePrimaryEventVertex.position());} } //--- Best Tau Pt if(patTau->pt() > maximumTauPt){ if(reco::deltaR(maxPtMuonVector, patTau->p4()) > _DiTauDeltaRCut) {maximumTauPt = patTau->pt();} } //--- Best Tau Eta if(fabs(patTau->eta()) < fabs(minimumTauEta)) {minimumTauEta = patTau->eta();} //--- Best Tau Seed Pt, H3x3OverP, and lead track Nhits if( (patTau->leadPFChargedHadrCand().isNonnull()) ) { if(patTau->leadPFChargedHadrCand()->pt() > maximumTauSeedPt) {maximumTauSeedPt = patTau->leadPFChargedHadrCand()->pt();} if(patTau->hcal3x3OverPLead() < minimumTauH3x3OverP) {minimumTauH3x3OverP = patTau->hcal3x3OverPLead();} if( (patTau->leadPFChargedHadrCand()->trackRef().isNonnull()) ) { if(patTau->leadPFChargedHadrCand()->trackRef()->recHitsSize() < minimumTauLeadNhits) {minimumTauLeadNhits = patTau->leadPFChargedHadrCand()->trackRef()->recHitsSize();} } } if (_UseRecoTauDiscrByIsolationFlag) { if(patTau->isolationPFChargedHadrCandsPtSum() < minimumTauTrackIso) {minimumTauTrackIso = patTau->isolationPFChargedHadrCandsPtSum();} if(patTau->isolationPFGammaCandsEtSum() < minimumTauEcalIso) {minimumTauEcalIso = patTau->isolationPFGammaCandsEtSum();} } else { if(CalculateTauTrackIsolation(*patTau).second < minimumTauTrackIso) {minimumTauTrackIso = CalculateTauTrackIsolation(*patTau).second;} if(CalculateTauEcalIsolation(*patTau).second < minimumTauEcalIso) {minimumTauEcalIso = CalculateTauEcalIsolation(*patTau).second;} } //--- Best Lepton+Tau DeltaR if(reco::deltaR(patTau->p4(), patMuon->p4()) > maximumdR) {maximumdR = reco::deltaR(patTau->p4(), patMuon->p4());} //--- Best Lepton+Tau CosDphi if(cos(TMath::Abs(normalizedPhi(patMuon->phi() - patTau->phi()))) < mimimumCosDphi) {mimimumCosDphi = cos(TMath::Abs(normalizedPhi(patMuon->phi() - patTau->phi())));} _hMuonPtVsTauPt[NpdfID]->Fill(patMuon->pt(),patTau->pt(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hMuonTauDeltaR[NpdfID]->Fill(reco::deltaR(patTau->p4(), patMuon->p4()),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hMuonTauDeltaPtDivSumPt[NpdfID]->Fill((patTau->pt() - patMuon->pt()) / (patTau->pt() + patMuon->pt()),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hMuonTauDeltaPt[NpdfID]->Fill((patTau->pt() - patMuon->pt()),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hMuonTauCosDphi[NpdfID]->Fill(cos(TMath::Abs(normalizedPhi(patMuon->phi() - patTau->phi()))),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hMuonMetDeltaPhi[NpdfID]->Fill(TMath::Abs(normalizedPhi(patMuon->phi() - theMETVector.phi())),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hMuonMetDeltaPhiVsMuonTauCosDphi[NpdfID]->Fill(TMath::Abs(normalizedPhi(patMuon->phi() - theMETVector.phi())), cos(TMath::Abs(normalizedPhi(patMuon->phi() - patTau->phi()))),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hTauMetDeltaPhi[NpdfID]->Fill(TMath::Abs(normalizedPhi(patTau->phi() - theMETVector.phi())),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); if(CalculateThe4Momentum((*patTau),(*patMuon)).first) {_hReconstructableMass[NpdfID]->Fill(CalculateThe4Momentum((*patTau),(*patMuon)).second.M(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID));} else {_hNotReconstructableMass[NpdfID]->Fill(CalculateThe4Momentum((*patTau),(*patMuon)).second.M(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID));} //--- Best Lepton+Met Transverse mass if(CalculateLeptonMetMt((*patMuon), theMETVector) > maximumLeptonMetMt) {maximumLeptonMetMt = CalculateLeptonMetMt((*patMuon), theMETVector);} _hMuonMetMt[NpdfID]->Fill(CalculateLeptonMetMt((*patMuon), theMETVector),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hTauMetMt[NpdfID]->Fill(CalculateLeptonMetMt((*patTau), theMETVector),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); //--- Best Lepton+Tau OSLS if(_UseTauSeedTrackForDiTauDiscrByOSLS) { if( (patTau->leadPFChargedHadrCand().isNonnull()) ) { _hMuonTauOSLS[NpdfID]->Fill(patMuon->charge() * patTau->leadPFChargedHadrCand()->charge(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); if(patMuon->charge() * patTau->leadPFChargedHadrCand()->charge() < minimumOSLS) {minimumOSLS = patMuon->charge() * patTau->leadPFChargedHadrCand()->charge();} } } else { _hMuonTauOSLS[NpdfID]->Fill(patMuon->charge() * patTau->charge(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); if(patMuon->charge() * patTau->charge() < minimumOSLS) {minimumOSLS = patMuon->charge() * patTau->charge();} } _hPZeta[NpdfID]->Fill(CalculatePZeta((*patTau),(*patMuon), theMETVector),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hPZetaVis[NpdfID]->Fill(CalculatePZetaVis((*patTau),(*patMuon)),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hZeta2D[NpdfID]->Fill(CalculatePZetaVis((*patTau),(*patMuon)),CalculatePZeta((*patTau),(*patMuon), theMETVector),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hZeta1D[NpdfID]->Fill((_PZetaCutCoefficient * CalculatePZeta((*patTau),(*patMuon), theMETVector)) + (_PZetaVisCutCoefficient * CalculatePZetaVis((*patTau),(*patMuon))),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); //--- Best Lepton+Tau+Met Zeta if( (_PZetaCutCoefficient * CalculatePZeta((*patTau),(*patMuon), theMETVector)) + (_PZetaVisCutCoefficient * CalculatePZetaVis((*patTau),(*patMuon))) > maximumZeta ) { maximumZeta = (_PZetaCutCoefficient * CalculatePZeta((*patTau),(*patMuon), theMETVector)) + (_PZetaVisCutCoefficient * CalculatePZetaVis((*patTau),(*patMuon))); } } } } _hBestMuonPt[NpdfID]->Fill(maximumLeptonPt,isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hBestMuonEta[NpdfID]->Fill(minimumLeptonEta,isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hBestMuonTrackIso[NpdfID]->Fill(minimumLeptonTrackIso,isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hBestMuonEcalIso[NpdfID]->Fill(minimumLeptonEcalIso,isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hBestMuonTauDeltaR[NpdfID]->Fill(maximumdR,isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hBestMuonCaloCompatibility[NpdfID]->Fill(maximumCaloComp,isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hBestMuonSegmentCompatibility[NpdfID]->Fill(maximumSegComp,isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hBestMuonAntiPion[NpdfID]->Fill(maximumPionVeto,isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hBestMuonIp[NpdfID]->Fill(minimumIp,isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hBestTauJetPt[NpdfID]->Fill(maximumTauPt,isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hBestTauJetEta[NpdfID]->Fill(minimumTauEta,isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hBestTauJetSeedTrackPt[NpdfID]->Fill(maximumTauSeedPt,isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hBestTauJetSumPtIsoTracks[NpdfID]->Fill(minimumTauTrackIso,isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hBestTauJetSumPtIsoGammas[NpdfID]->Fill(minimumTauEcalIso,isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hBestMuonTauCosDphi[NpdfID]->Fill(mimimumCosDphi,isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hBestTauJetH3x3OverP[NpdfID]->Fill(minimumTauH3x3OverP,isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hBestTauJetSeedTrackNhits[NpdfID]->Fill(minimumTauLeadNhits,isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hBestMuonMetMt[NpdfID]->Fill(maximumLeptonMetMt,isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hBestZeta1D[NpdfID]->Fill(maximumZeta,isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hBestMuonTauOSLS[NpdfID]->Fill(minimumOSLS,isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); } if( ((_AnalyzeElectronForLeg1) && (_AnalyzeTauForLeg2)) || ((_AnalyzeElectronForLeg2) && (_AnalyzeTauForLeg1)) ) { double minimumHoverE = 9999.9; double minimumEESigmaIEtaIEta = 9999.9; double minimumEBSigmaIEtaIEta = 9999.9; double minimumEEDEta = 9999.9; double minimumEBDEta = 9999.9; double minimumEEDPhi = 9999.9; double minimumEBDPhi = 9999.9; double maximumEB2x2Over5x5 = 0.0; double maximumEB1x2Over5x5 = 0.0; double minimumMissingHits = 9999.9; int theNumberOfElectrons = 0; for ( pat::ElectronCollection::const_iterator patElectron = _patElectrons->begin();patElectron != _patElectrons->end(); ++patElectron ) { theNumberOfElectrons++; int theNumberOfTaus = 0; for ( pat::TauCollection::const_iterator patTau = _patTaus->begin();patTau != _patTaus->end(); ++patTau ) { theNumberOfTaus++; if ((passRecoTauCuts((*patTau),theNumberOfTaus-1)) && (passRecoElectronCuts((*patElectron),theNumberOfElectrons-1)) && (passTopologyCuts((*patTau),theNumberOfTaus-1,(*patElectron),theNumberOfElectrons-1))) { if(_UseHeepInfo) { heep::Ele theHeepElec(*patElectron); if(theHeepElec.hOverE() < minimumHoverE) {minimumHoverE = theHeepElec.hOverE();} if(patElectron->isEE()) { if(theHeepElec.sigmaIEtaIEta() < minimumEESigmaIEtaIEta) {minimumEESigmaIEtaIEta = theHeepElec.sigmaIEtaIEta();} if(fabs(theHeepElec.dEtaIn()) < fabs(minimumEEDEta)) {minimumEEDEta = theHeepElec.dEtaIn();} if(fabs(theHeepElec.dPhiIn()) < fabs(minimumEEDPhi)) {minimumEEDPhi = theHeepElec.dPhiIn();} } if(patElectron->isEB()) { if(theHeepElec.sigmaIEtaIEta() < minimumEBSigmaIEtaIEta) {minimumEBSigmaIEtaIEta = theHeepElec.sigmaIEtaIEta();} if(fabs(theHeepElec.dEtaIn()) < fabs(minimumEBDEta)) {minimumEBDEta = theHeepElec.dEtaIn();} if(fabs(theHeepElec.dPhiIn()) < fabs(minimumEBDPhi)) {minimumEBDPhi = theHeepElec.dPhiIn();} if((theHeepElec.scE2x5Max() / theHeepElec.scE5x5()) > maximumEB2x2Over5x5) {maximumEB2x2Over5x5 = theHeepElec.scE2x5Max() / theHeepElec.scE5x5();} if((theHeepElec.scE1x5() / theHeepElec.scE5x5()) > maximumEB1x2Over5x5) {maximumEB1x2Over5x5 = theHeepElec.scE1x5() / theHeepElec.scE5x5();} } } else { if(patElectron->hadronicOverEm() < minimumHoverE) {minimumHoverE = patElectron->hadronicOverEm();} if(patElectron->isEE()) { if(patElectron->scSigmaIEtaIEta() < minimumEESigmaIEtaIEta) {minimumEESigmaIEtaIEta = patElectron->scSigmaIEtaIEta();} if(fabs(patElectron->deltaEtaSuperClusterTrackAtVtx()) < fabs(minimumEEDEta)) {minimumEEDEta = patElectron->deltaEtaSuperClusterTrackAtVtx();} if(fabs(patElectron->deltaPhiSuperClusterTrackAtVtx()) < fabs(minimumEEDPhi)) {minimumEEDPhi = patElectron->deltaPhiSuperClusterTrackAtVtx();} } if(patElectron->isEB()) { if(patElectron->scSigmaIEtaIEta() < minimumEBSigmaIEtaIEta) {minimumEBSigmaIEtaIEta = patElectron->scSigmaIEtaIEta();} if(fabs(patElectron->deltaEtaSuperClusterTrackAtVtx()) < fabs(minimumEBDEta)) {minimumEBDEta = patElectron->deltaEtaSuperClusterTrackAtVtx();} if(fabs(patElectron->deltaPhiSuperClusterTrackAtVtx()) < fabs(minimumEBDPhi)) {minimumEBDPhi = patElectron->deltaPhiSuperClusterTrackAtVtx();} if((patElectron->scE2x5Max() / patElectron->scE5x5()) > maximumEB2x2Over5x5) {maximumEB2x2Over5x5 = patElectron->scE2x5Max() / patElectron->scE5x5();} if((patElectron->scE1x5() / patElectron->scE5x5()) > maximumEB1x2Over5x5) {maximumEB1x2Over5x5 = patElectron->scE1x5() / patElectron->scE5x5();} } } const Track* elTrack = (const reco::Track*)(patElectron->gsfTrack().get()); const HitPattern& pInner = elTrack->trackerExpectedHitsInner(); if(pInner.numberOfHits() < minimumMissingHits) {minimumMissingHits = pInner.numberOfHits();} if(patElectron->pt() > maximumLeptonPt) {maximumLeptonPt = patElectron->pt();} if(fabs(patElectron->eta()) < fabs(minimumLeptonEta)) {minimumLeptonEta = patElectron->eta();} if(reco::deltaR(patTau->p4(), patElectron->p4()) > maximumdR) {maximumdR = reco::deltaR(patTau->p4(), patElectron->p4());} if(patElectron->dr04TkSumPt() < minimumLeptonTrackIso) {minimumLeptonTrackIso = patElectron->dr04TkSumPt();} if(patElectron->dr04EcalRecHitSumEt() < minimumLeptonEcalIso) {minimumLeptonEcalIso = patElectron->dr04EcalRecHitSumEt();} if(patTau->pt() > maximumTauPt) { if(reco::deltaR(maxEtElectronVector, patTau->p4())>_DiTauDeltaRCut) {maximumTauPt = patTau->pt();} } if(fabs(patTau->eta()) < fabs(minimumTauEta)) {minimumTauEta = patTau->eta();} if( (patTau->leadPFChargedHadrCand().isNonnull()) ) { if(patTau->leadPFChargedHadrCand()->pt() > maximumTauSeedPt) {maximumTauSeedPt = patTau->leadPFChargedHadrCand()->pt();} if(patTau->hcal3x3OverPLead() < minimumTauH3x3OverP) {minimumTauH3x3OverP = patTau->hcal3x3OverPLead();} if( (patTau->leadPFChargedHadrCand()->trackRef().isNonnull()) ) { if(patTau->leadPFChargedHadrCand()->trackRef()->recHitsSize() < minimumTauLeadNhits) {minimumTauLeadNhits = patTau->leadPFChargedHadrCand()->trackRef()->recHitsSize();} } } if (_UseRecoTauDiscrByIsolationFlag) { if(patTau->isolationPFChargedHadrCandsPtSum() < minimumTauTrackIso) {minimumTauTrackIso = patTau->isolationPFChargedHadrCandsPtSum();} if(patTau->isolationPFGammaCandsEtSum() < minimumTauEcalIso) {minimumTauEcalIso = patTau->isolationPFGammaCandsEtSum();} } else { if(CalculateTauTrackIsolation(*patTau).second < minimumTauTrackIso) {minimumTauTrackIso = CalculateTauTrackIsolation(*patTau).second;} if(CalculateTauEcalIsolation(*patTau).second < minimumTauEcalIso) {minimumTauEcalIso = CalculateTauEcalIsolation(*patTau).second;} } if(cos(TMath::Abs(normalizedPhi(patElectron->phi() - patTau->phi()))) < mimimumCosDphi) {mimimumCosDphi = cos(TMath::Abs(normalizedPhi(patElectron->phi() - patTau->phi())));} _hElectronIsZee[NpdfID]->Fill(isZee(patElectron->p4()).first,isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hElectronPtVsTauPt[NpdfID]->Fill(patElectron->pt(),patTau->pt(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hElectronTauDeltaR[NpdfID]->Fill(reco::deltaR(patTau->p4(), patElectron->p4()),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hElectronTauDeltaPtDivSumPt[NpdfID]->Fill((patTau->pt() - patElectron->pt()) / (patTau->pt() + patElectron->pt()),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hElectronTauDeltaPt[NpdfID]->Fill((patTau->pt() - patElectron->pt()),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hElectronTauCosDphi[NpdfID]->Fill(cos(TMath::Abs(normalizedPhi(patElectron->phi() - patTau->phi()))),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hElectronMetDeltaPhi[NpdfID]->Fill(TMath::Abs(normalizedPhi(patElectron->phi() - theMETVector.phi())),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hElectronMetDeltaPhiVsElectronTauCosDphi[NpdfID]->Fill(TMath::Abs(normalizedPhi(patElectron->phi() - theMETVector.phi())), cos(TMath::Abs(normalizedPhi(patElectron->phi() - patTau->phi()))),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hTauMetDeltaPhi[NpdfID]->Fill(TMath::Abs(normalizedPhi(patTau->phi() - theMETVector.phi())),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); if(CalculateThe4Momentum((*patTau),(*patElectron)).first) {_hReconstructableMass[NpdfID]->Fill(CalculateThe4Momentum((*patTau),(*patElectron)).second.M(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID));} else {_hNotReconstructableMass[NpdfID]->Fill(CalculateThe4Momentum((*patTau),(*patElectron)).second.M(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID));} if(CalculateLeptonMetMt((*patElectron), theMETVector) > maximumLeptonMetMt) {maximumLeptonMetMt = CalculateLeptonMetMt((*patElectron), theMETVector);} _hElectronMetMt[NpdfID]->Fill(CalculateLeptonMetMt((*patElectron), theMETVector),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hTauMetMt[NpdfID]->Fill(CalculateLeptonMetMt((*patTau), theMETVector),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); if(_UseTauSeedTrackForDiTauDiscrByOSLS) { if( (patTau->leadPFChargedHadrCand().isNonnull()) ) { _hElectronTauOSLS[NpdfID]->Fill(patElectron->charge() * patTau->leadPFChargedHadrCand()->charge(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); if((patElectron->charge() * patTau->leadPFChargedHadrCand()->charge()) < minimumOSLS) {minimumOSLS = patElectron->charge() * patTau->leadPFChargedHadrCand()->charge();} } } else { _hElectronTauOSLS[NpdfID]->Fill(patElectron->charge() * patTau->charge(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); if((patElectron->charge() * patTau->charge()) < minimumOSLS) {minimumOSLS = patElectron->charge() * patTau->charge();} } _hPZeta[NpdfID]->Fill(CalculatePZeta((*patTau),(*patElectron), theMETVector),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hPZetaVis[NpdfID]->Fill(CalculatePZetaVis((*patTau),(*patElectron)),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hZeta2D[NpdfID]->Fill(CalculatePZetaVis((*patTau),(*patElectron)),CalculatePZeta((*patTau),(*patElectron), theMETVector),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hZeta1D[NpdfID]->Fill((_PZetaCutCoefficient * CalculatePZeta((*patTau),(*patElectron), theMETVector)) + (_PZetaVisCutCoefficient * CalculatePZetaVis((*patTau),(*patElectron))),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); //--- Best Lepton+Tau+Met Zeta if( (_PZetaCutCoefficient * CalculatePZeta((*patTau),(*patElectron), theMETVector)) + (_PZetaVisCutCoefficient * CalculatePZetaVis((*patTau),(*patElectron))) > maximumZeta ) { maximumZeta = (_PZetaCutCoefficient * CalculatePZeta((*patTau),(*patElectron), theMETVector)) + (_PZetaVisCutCoefficient * CalculatePZetaVis((*patTau),(*patElectron))); } } } } _hBestElectronPt[NpdfID]->Fill(maximumLeptonPt,isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hBestElectronEta[NpdfID]->Fill(minimumLeptonEta,isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hBestElectronTrackIso[NpdfID]->Fill(minimumLeptonTrackIso,isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hBestElectronEcalIso[NpdfID]->Fill(minimumLeptonEcalIso,isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hBestElectronTauDeltaR[NpdfID]->Fill(maximumdR,isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hBestTauJetPt[NpdfID]->Fill(maximumTauPt,isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hBestTauJetEta[NpdfID]->Fill(minimumTauEta,isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hBestTauJetSeedTrackPt[NpdfID]->Fill(maximumTauSeedPt,isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hBestTauJetSumPtIsoTracks[NpdfID]->Fill(minimumTauTrackIso,isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hBestTauJetSumPtIsoGammas[NpdfID]->Fill(minimumTauEcalIso,isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hBestElectronHoverEm[NpdfID]->Fill(minimumHoverE,isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hBestElectronEESigmaIEtaIEta[NpdfID]->Fill(minimumEESigmaIEtaIEta,isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hBestElectronEEDEta[NpdfID]->Fill(minimumEEDEta,isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hBestElectronEEDPhi[NpdfID]->Fill(minimumEEDPhi,isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hBestElectronEBSigmaIEtaIEta[NpdfID]->Fill(minimumEBSigmaIEtaIEta,isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hBestElectronEBDEta[NpdfID]->Fill(minimumEBDEta,isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hBestElectronEBDPhi[NpdfID]->Fill(minimumEBDPhi,isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hBestElectronEB2by5Over5by5[NpdfID]->Fill(maximumEB2x2Over5x5,isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hBestElectronEB1by5Over5by5[NpdfID]->Fill(maximumEB1x2Over5x5,isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hBestElectronMissingHits[NpdfID]->Fill(minimumMissingHits,isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hBestElectronTauCosDphi[NpdfID]->Fill(mimimumCosDphi,isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hBestTauJetH3x3OverP[NpdfID]->Fill(minimumTauH3x3OverP,isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hBestTauJetSeedTrackNhits[NpdfID]->Fill(minimumTauLeadNhits,isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hBestElectronMetMt[NpdfID]->Fill(maximumLeptonMetMt,isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hBestZeta1D[NpdfID]->Fill(maximumZeta,isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hBestElectronTauOSLS[NpdfID]->Fill(minimumOSLS,isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); } if( ((_AnalyzeMuonForLeg1) && (_AnalyzeMuonForLeg2)) ) { int theNumberOfMuons1 = 0; for ( pat::MuonCollection::const_iterator patMuon1 = _patMuons->begin();patMuon1 != _patMuons->end(); ++patMuon1 ) { theNumberOfMuons1++; int theNumberOfMuons2 = 0; for ( pat::MuonCollection::const_iterator patMuon2 = _patMuons->begin();patMuon2 != _patMuons->end(); ++patMuon2 ) { theNumberOfMuons2++; if ((passRecoMuonCuts((*patMuon1),theNumberOfMuons1 - 1)) && (passRecoMuonCuts((*patMuon2),theNumberOfMuons2 - 1)) && (passTopologyCuts((*patMuon1),theNumberOfMuons1 - 1,(*patMuon2),theNumberOfMuons2 - 1)) && (theNumberOfMuons2 >= theNumberOfMuons1)) { _hMuon1PtVsMuon2Pt[NpdfID]->Fill(patMuon1->pt(),patMuon2->pt(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hMuon1Muon2DeltaR[NpdfID]->Fill(reco::deltaR(patMuon1->p4(), patMuon2->p4()),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hMuon1Muon2DeltaPtDivSumPt[NpdfID]->Fill((patMuon1->pt() - patMuon2->pt()) / (patMuon1->pt() + patMuon2->pt()),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hMuon1Muon2DeltaPt[NpdfID]->Fill((patMuon1->pt() - patMuon2->pt()),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hMuon1Muon2CosDphi[NpdfID]->Fill(cos(TMath::Abs(normalizedPhi(patMuon1->phi() - patMuon2->phi()))),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hMuon1MetDeltaPhi[NpdfID]->Fill(TMath::Abs(normalizedPhi(patMuon1->phi() - theMETVector.phi())),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hMuon2MetDeltaPhi[NpdfID]->Fill(TMath::Abs(normalizedPhi(patMuon2->phi() - theMETVector.phi())),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hMuon1MetDeltaPhiVsMuon1Muon2CosDphi[NpdfID]->Fill(TMath::Abs(normalizedPhi(patMuon1->phi() - theMETVector.phi())), cos(TMath::Abs(normalizedPhi(patMuon1->phi() - patMuon2->phi()))),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); if(CalculateThe4Momentum((*patMuon1),(*patMuon2)).first) {_hReconstructableMass[NpdfID]->Fill(CalculateThe4Momentum((*patMuon1),(*patMuon2)).second.M(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID));} else {_hNotReconstructableMass[NpdfID]->Fill(CalculateThe4Momentum((*patMuon1),(*patMuon2)).second.M(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID));} _hMuon1MetMt[NpdfID]->Fill(CalculateLeptonMetMt((*patMuon1), theMETVector),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hMuon2MetMt[NpdfID]->Fill(CalculateLeptonMetMt((*patMuon2), theMETVector),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hMuon1Muon2OSLS[NpdfID]->Fill(patMuon1->charge() * patMuon2->charge(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hPZeta[NpdfID]->Fill(CalculatePZeta((*patMuon1),(*patMuon2), theMETVector),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hPZetaVis[NpdfID]->Fill(CalculatePZetaVis((*patMuon1),(*patMuon2)),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hZeta2D[NpdfID]->Fill(CalculatePZetaVis((*patMuon1),(*patMuon2)),CalculatePZeta((*patMuon1),(*patMuon2), theMETVector),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hZeta1D[NpdfID]->Fill((_PZetaCutCoefficient * CalculatePZeta((*patMuon1),(*patMuon2), theMETVector)) + (_PZetaVisCutCoefficient * CalculatePZetaVis((*patMuon1),(*patMuon2))),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); } } } } if( ((_AnalyzeElectronForLeg1) && (_AnalyzeElectronForLeg2)) ) { int theNumberOfElectrons1 = 0; for ( pat::ElectronCollection::const_iterator patElectron1 = _patElectrons->begin();patElectron1 != _patElectrons->end(); ++patElectron1 ) { theNumberOfElectrons1++; int theNumberOfElectrons2 = 0; for ( pat::ElectronCollection::const_iterator patElectron2 = _patElectrons->begin();patElectron2 != _patElectrons->end(); ++patElectron2 ) { theNumberOfElectrons2++; if ((passRecoElectronCuts((*patElectron1),theNumberOfElectrons1 - 1)) && (passRecoElectronCuts((*patElectron2),theNumberOfElectrons2 - 1)) && (passTopologyCuts((*patElectron1),theNumberOfElectrons1 - 1,(*patElectron2),theNumberOfElectrons2 - 1)) && (theNumberOfElectrons2 >= theNumberOfElectrons1)) { _hElectron1PtVsElectron2Pt[NpdfID]->Fill(patElectron1->pt(),patElectron2->pt(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hElectron1Electron2DeltaR[NpdfID]->Fill(reco::deltaR(patElectron1->p4(), patElectron2->p4()),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hElectron1Electron2DeltaPtDivSumPt[NpdfID]->Fill((patElectron1->pt() - patElectron2->pt()) / (patElectron1->pt() + patElectron2->pt()),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hElectron1Electron2DeltaPt[NpdfID]->Fill((patElectron1->pt() - patElectron2->pt()),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hElectron1Electron2CosDphi[NpdfID]->Fill(cos(TMath::Abs(normalizedPhi(patElectron1->phi() - patElectron2->phi()))),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hElectron1MetDeltaPhi[NpdfID]->Fill(TMath::Abs(normalizedPhi(patElectron1->phi() - theMETVector.phi())),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hElectron2MetDeltaPhi[NpdfID]->Fill(TMath::Abs(normalizedPhi(patElectron2->phi() - theMETVector.phi())),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hElectron1MetDeltaPhiVsElectron1Electron2CosDphi[NpdfID]->Fill(TMath::Abs(normalizedPhi(patElectron1->phi() - theMETVector.phi())), cos(TMath::Abs(normalizedPhi(patElectron1->phi() - patElectron2->phi()))),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); if(CalculateThe4Momentum((*patElectron1),(*patElectron2)).first) {_hReconstructableMass[NpdfID]->Fill(CalculateThe4Momentum((*patElectron1),(*patElectron2)).second.M(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID));} else {_hNotReconstructableMass[NpdfID]->Fill(CalculateThe4Momentum((*patElectron1),(*patElectron2)).second.M(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID));} _hElectron1MetMt[NpdfID]->Fill(CalculateLeptonMetMt((*patElectron1), theMETVector),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hElectron2MetMt[NpdfID]->Fill(CalculateLeptonMetMt((*patElectron2), theMETVector),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hElectron1Electron2OSLS[NpdfID]->Fill(patElectron1->charge() * patElectron2->charge(),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hPZeta[NpdfID]->Fill(CalculatePZeta((*patElectron1),(*patElectron2), theMETVector),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hPZetaVis[NpdfID]->Fill(CalculatePZetaVis((*patElectron1),(*patElectron2)),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hZeta2D[NpdfID]->Fill(CalculatePZetaVis((*patElectron1),(*patElectron2)),CalculatePZeta((*patElectron1),(*patElectron2),theMETVector),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hZeta1D[NpdfID]->Fill((_PZetaCutCoefficient * CalculatePZeta((*patElectron1),(*patElectron2), theMETVector)) + (_PZetaVisCutCoefficient * CalculatePZetaVis((*patElectron1),(*patElectron2))),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); } } } } if( ((_AnalyzeTauForLeg1) && (_AnalyzeTauForLeg2)) ) { double heaviestPairMass=-1; double mimimumCosDphi = 1.0; double minimumOSLS = 9999.9; // double maximumLeptonMetMt = 0.0; double maximumdR = 0.0; // int numberOfPairs = 0; int theNumberOfTaus1 = 0; int theNumberOfTaus1_buffered = 0; int theNumberOfTaus2 = 0; int theNumberOfTaus2_buffered = 0; pat::TauCollection::const_iterator patTau1; pat::TauCollection::const_iterator patTau2; pat::TauCollection::const_iterator patTau1_buffered; pat::TauCollection::const_iterator patTau2_buffered; // These will store the location of the patTau1 and patTau2 within the patTau collection correspoding to the heaviest good pair theNumberOfTaus1_buffered = 0; theNumberOfTaus2_buffered = 0; // Start loop over patTaus so select two (if applicable) that form a good (and heaviest) pair theNumberOfTaus1 = 0; for ( patTau1 = _patTaus->begin(); patTau1 != _patTaus->end(); ++patTau1 ) { theNumberOfTaus1++; theNumberOfTaus2 = 0; for ( patTau2 = _patTaus->begin(); patTau2 != _patTaus->end(); ++patTau2 ) { theNumberOfTaus2++; if( theNumberOfTaus2 <= theNumberOfTaus1 ) continue; // Make sure we don't double-count: only compare pairs in which the tau2 iterator is larger than the tau 1 iterator, else skip combo if ((passRecoTauCuts((*patTau1),theNumberOfTaus1 - 1)) && (passRecoTau2Cuts((*patTau2),theNumberOfTaus2 - 1)) && (passTopologyCuts((*patTau1),theNumberOfTaus1 -1,(*patTau2), theNumberOfTaus2 - 1))) { // Pick the heaviest tau pair, and only one double pairMass = CalculateThe4Momentum((*patTau1),(*patTau2)).second.M(); if ( pairMass > heaviestPairMass ){ heaviestPairMass = pairMass; theNumberOfTaus1_buffered = theNumberOfTaus1; theNumberOfTaus2_buffered = theNumberOfTaus2; patTau1_buffered = patTau1; patTau2_buffered = patTau2; } } // end of cuts if statement // _htau2NTau[NpdfID]->Fill(theNumberOfTaus2, isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); } // end of tau2 loop // _htau1NTau[NpdfID]->Fill(theNumberOfTaus1, isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); } // end of tau1 loop // If no good pairs found, don't try to fill histos if ( heaviestPairMass <= 0 ){ continue; } // Now reassign patTau1,2 and so forth to the ones corresponding to the heaviest pair (selected above) patTau1 = patTau1_buffered; patTau2 = patTau2_buffered; theNumberOfTaus1 = theNumberOfTaus1_buffered; theNumberOfTaus2 = theNumberOfTaus2_buffered; // Fill event and run number histo //_hRunNumVsEventNum[NpdfID]->Fill(eventNum,runNum); // Produces segfault due to lack of mem?? cout << "EVENTRUNNUM: \n" << runNum << " " << lumiBlock << " " << eventNum << endl; // _htau1EMFractionVsFullMass->Fill(CalculateEMFraction((*patTau1),theNumberOfTaus1 - 1),(CalculateThe4Momentum((*patTau1),(*patTau2)).second.M()), GetTauTriggerWeight(*patTau1, *patTau2) * isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); // _htau2EMFractionVsFullMass->Fill(CalculateEMFraction((*patTau2),theNumberOfTaus2 - 1), (CalculateThe4Momentum((*patTau1),(*patTau2)).second.M()), GetTauTriggerWeight(*patTau1, *patTau2) * isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); //--- Best Tau+Tau DeltaR if(reco::deltaR(patTau1->p4(), patTau2->p4()) > maximumdR) {maximumdR = reco::deltaR(patTau1->p4(), patTau2->p4());} //--- Best Tau+Tau CosDphi if(cos(TMath::Abs(normalizedPhi(patTau1->phi() - patTau2->phi()))) < mimimumCosDphi) {mimimumCosDphi = cos(TMath::Abs(normalizedPhi(patTau1->phi() - patTau2->phi())));} //--- Best Lepton+Met Transverse mass // if(CalculateLeptonMetMt((*patTau1),theNumberOfTaus1-1) > maximumLeptonMetMt) {maximumLeptonMetMt = CalculateLeptonMetMt((*patTau1),theNumberOfTaus1-1);} // numberOfPairs++; _hTau1PtVsTau2Pt[NpdfID]->Fill(patTau1->pt(),patTau2->pt(), GetTauTriggerWeight(*patTau1, *patTau2) * isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hTau1Tau2DeltaR[NpdfID]->Fill(reco::deltaR(patTau1->p4(), patTau2->p4()), GetTauTriggerWeight(*patTau1, *patTau2) * isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hTau1Tau2DeltaPtDivSumPt[NpdfID]->Fill((patTau1->pt() - patTau2->pt()) / (patTau1->pt() + patTau2->pt()), GetTauTriggerWeight(*patTau1, *patTau2) * isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hTau1Tau2DeltaPt[NpdfID]->Fill((patTau1->pt() - patTau2->pt()), GetTauTriggerWeight(*patTau1, *patTau2) * isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); //----Best Tau1+Tau2 OSLS if(_UseTauSeedTrackForDiTauDiscrByOSLS) { if( (patTau1->leadPFChargedHadrCand().isNonnull()) && (patTau2->leadPFChargedHadrCand().isNonnull()) ) { _hTau1Tau2OSLS[NpdfID]->Fill(patTau1->leadPFChargedHadrCand()->charge() * patTau2->leadPFChargedHadrCand()->charge(), GetTauTriggerWeight(*patTau1, *patTau2) * isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); if(patTau1->leadPFChargedHadrCand()->charge() * patTau2->leadPFChargedHadrCand()->charge() < minimumOSLS) {minimumOSLS = patTau1->leadPFChargedHadrCand()->charge() * patTau2->leadPFChargedHadrCand()->charge();} } } else {_hTau1Tau2OSLS[NpdfID]->Fill(patTau1->charge() * patTau2->charge(), GetTauTriggerWeight(*patTau1, *patTau2) * isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); if(patTau1->charge() * patTau2->charge() < minimumOSLS) {minimumOSLS = patTau1->charge() * patTau2->charge();} } _hTau1Tau2CosDphi[NpdfID]->Fill(cos(TMath::Abs(normalizedPhi(patTau1->phi() - patTau2->phi()))), GetTauTriggerWeight(*patTau1, *patTau2) * isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hTau1MetDeltaPhi[NpdfID]->Fill(TMath::Abs(normalizedPhi(patTau1->phi() - theMETVector.phi())), GetTauTriggerWeight(*patTau1) * isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hTau2MetDeltaPhi[NpdfID]->Fill(TMath::Abs(normalizedPhi(patTau2->phi() - theMETVector.phi())), GetTauTriggerWeight(*patTau2) * isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hTau1MetDeltaPhiVsTau1Tau2CosDphi[NpdfID]->Fill(TMath::Abs(normalizedPhi(patTau1->phi() - theMETVector.phi())), cos(TMath::Abs(normalizedPhi(patTau1->phi() - patTau2->phi()))), GetTauTriggerWeight(*patTau1, *patTau2) * isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); if(CalculateThe4Momentum((*patTau1),(*patTau2)).first) {_hReconstructableMass[NpdfID]->Fill(CalculateThe4Momentum((*patTau1),(*patTau2)).second.M(), GetTauTriggerWeight(*patTau1, *patTau2) * isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID));} else {_hNotReconstructableMass[NpdfID]->Fill(CalculateThe4Momentum((*patTau1),(*patTau2)).second.M(), GetTauTriggerWeight(*patTau1, *patTau2) * isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID));} _hRecoMassTau1MET[NpdfID]->Fill(CalculateLeptonMetMt((*patTau1), theMETVector), GetTauTriggerWeight(*patTau1) * isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hRecoMassTau2MET[NpdfID]->Fill(CalculateLeptonMetMt((*patTau2), theMETVector), GetTauTriggerWeight(*patTau1, *patTau2) * isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hVisMass[NpdfID]->Fill(GetVisPlusMETMass(*patTau1, *patTau2, theMETVector), GetTauTriggerWeight(*patTau1, *patTau2) * isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hTau1MetMt[NpdfID]->Fill(CalculateLeptonMetMt((*patTau1), theMETVector), GetTauTriggerWeight(*patTau1) * isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hTau2MetMt[NpdfID]->Fill(CalculateLeptonMetMt((*patTau2), theMETVector), GetTauTriggerWeight(*patTau2) * isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hPZeta[NpdfID]->Fill(CalculatePZeta((*patTau1),(*patTau2), theMETVector), GetTauTriggerWeight(*patTau1, *patTau2) * isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hPZetaTemplate[NpdfID]->Fill(CalculatePZeta((*patTau1),(*patTau2), theMETVector),isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hPZetaVis[NpdfID]->Fill(CalculatePZetaVis((*patTau1),(*patTau2)), GetTauTriggerWeight(*patTau1, *patTau2) * isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hZeta2D[NpdfID]->Fill(CalculatePZetaVis((*patTau1),(*patTau2)),CalculatePZeta((*patTau1),(*patTau2), theMETVector), GetTauTriggerWeight(*patTau1, *patTau2) * isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hZeta1D[NpdfID]->Fill((_PZetaCutCoefficient * CalculatePZeta((*patTau1),(*patTau2), theMETVector)) + (_PZetaVisCutCoefficient * CalculatePZetaVis((*patTau1),(*patTau2))), GetTauTriggerWeight(*patTau1, *patTau2) * isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hBestTau1Tau2DeltaR[NpdfID]->Fill(maximumdR, isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hBestTau1Tau2CosDphi[NpdfID]->Fill(mimimumCosDphi, isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _hBestTau1Tau2OSLS[NpdfID]->Fill(minimumOSLS, isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); // cout<<"Number of tau pairs in the event = "<Fill(patTau1->energy(), GetTauTriggerWeight(*patTau1) * isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _htau2TauJetEnergy[NpdfID]->Fill(patTau2->energy(), GetTauTriggerWeight(*patTau2) * isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _htau1TauJetPt[NpdfID]->Fill(patTau1->pt(), GetTauTriggerWeight(*patTau1) * isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _htau2TauJetPt[NpdfID]->Fill(patTau2->pt(), GetTauTriggerWeight(*patTau2) * isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _htau1TauJetEta[NpdfID]->Fill(patTau1->eta(), GetTauTriggerWeight(*patTau1) * isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _htau2TauJetEta[NpdfID]->Fill(patTau2->eta(), GetTauTriggerWeight(*patTau2) * isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _htau1TauJetPhi[NpdfID]->Fill(normalizedPhi(patTau1->phi()), GetTauTriggerWeight(*patTau1) * isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _htau2TauJetPhi[NpdfID]->Fill(normalizedPhi(patTau2->phi()), GetTauTriggerWeight(*patTau2) * isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _htau1TauJetEMFraction[NpdfID]->Fill(patTau1->emFraction(), GetTauTriggerWeight(*patTau1) * isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _htau1TauJetNumSignalTracks[NpdfID]->Fill(patTau1->signalPFChargedHadrCands().size(), GetTauTriggerWeight(*patTau1) * isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _htau1TauJetNumSignalGammas[NpdfID]->Fill(CalculateNumberSignalTauGammas(*patTau1), GetTauTriggerWeight(*patTau1) * isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _htau1TauJetCharge[NpdfID]->Fill(fabs(patTau1->charge()), GetTauTriggerWeight(*patTau1) * isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _htau1TauJetSignalTracksMass[NpdfID]->Fill(CalculateTauSignalTracksMass(*patTau1).M(), GetTauTriggerWeight(*patTau1) * isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _htau1TauJetSignalTracksAndGammasMass[NpdfID]->Fill(CalculateTauSignalTracksAndGammasMass(*patTau1).M(), GetTauTriggerWeight(*patTau1) * isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _htau1TauJetSignalTracksChargeFraction[NpdfID]->Fill(CalculateTauSignalTracksMass(*patTau1).pt() / patTau1->pt(), GetTauTriggerWeight(*patTau1) * isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); if(patTau1->signalPFChargedHadrCands().size() == 1) { _htau1TauJetSignalTracksMass1prong[NpdfID]->Fill(CalculateTauSignalTracksMass(*patTau1).M(), GetTauTriggerWeight(*patTau1) * isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _htau1TauJetSignalTracksAndGammasMass1prong[NpdfID]->Fill(CalculateTauSignalTracksAndGammasMass(*patTau1).M(), GetTauTriggerWeight(*patTau1) * isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _htau1TauJetSignalTracksAndPiZerosMass1prong[NpdfID]->Fill(CalculateTauSignalTracksAndPiZerosMass(*patTau1).first.M(), GetTauTriggerWeight(*patTau1) * isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _htau1TauJetNumSignalPiZeros1prong[NpdfID]->Fill(CalculateTauSignalTracksAndPiZerosMass(*patTau1).second, GetTauTriggerWeight(*patTau1) * isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); if(CalculateNumberSignalTauGammas(*patTau1) == 0) {_htau1TauJetMass1Prong0Gamma[NpdfID]->Fill(CalculateTauSignalTracksAndGammasMass(*patTau1).M(), GetTauTriggerWeight(*patTau1) * isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID));} if(CalculateNumberSignalTauGammas(*patTau1) == 1) {_htau1TauJetMass1Prong1Gamma[NpdfID]->Fill(CalculateTauSignalTracksAndGammasMass(*patTau1).M(), GetTauTriggerWeight(*patTau1) * isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID));} if(CalculateNumberSignalTauGammas(*patTau1) >= 2) {_htau1TauJetMass1Prong2orMoreGamma[NpdfID]->Fill(CalculateTauSignalTracksAndGammasMass(*patTau1).M(), GetTauTriggerWeight(*patTau1) * isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID));} } if(patTau1->signalPFChargedHadrCands().size() == 3) { _htau1TauJetSignalTracksMass3prong[NpdfID]->Fill(CalculateTauSignalTracksMass(*patTau1).M(), GetTauTriggerWeight(*patTau1) * isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _htau1TauJetSignalTracksAndGammasMass3prong[NpdfID]->Fill(CalculateTauSignalTracksAndGammasMass(*patTau1).M(), GetTauTriggerWeight(*patTau1) * isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); if(CalculateNumberSignalTauGammas(*patTau1) == 0) {_htau1TauJetMass3Prong0Gamma[NpdfID]->Fill(CalculateTauSignalTracksAndGammasMass(*patTau1).M(), GetTauTriggerWeight(*patTau1) * isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID));} if(CalculateNumberSignalTauGammas(*patTau1) == 1) {_htau1TauJetMass3Prong1Gamma[NpdfID]->Fill(CalculateTauSignalTracksAndGammasMass(*patTau1).M(), GetTauTriggerWeight(*patTau1) * isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID));} if(CalculateNumberSignalTauGammas(*patTau1) >= 2) {_htau1TauJetMass3Prong2orMoreGamma[NpdfID]->Fill(CalculateTauSignalTracksAndGammasMass(*patTau1).M(), GetTauTriggerWeight(*patTau1) * isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID));} } if( (patTau1->leadPFChargedHadrCand().isNonnull()) ) { _htau1TauJetSeedTrackPt[NpdfID]->Fill(patTau1->leadPFChargedHadrCand()->pt(), GetTauTriggerWeight(*patTau1) * isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _htau1TauJetSeedTrackIpSignificance[NpdfID]->Fill(patTau1->leadPFChargedHadrCandsignedSipt(), GetTauTriggerWeight(*patTau1) * isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); if( (patTau1->leadPFChargedHadrCand()->trackRef().isNonnull()) ) { _htau1TauJetSeedTrackNhits[NpdfID]->Fill(patTau1->leadPFChargedHadrCand()->trackRef()->recHitsSize(), GetTauTriggerWeight(*patTau1) * isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _htau1TauJetSeedTrackChi2[NpdfID]->Fill(patTau1->leadPFChargedHadrCand()->trackRef()->chi2(), GetTauTriggerWeight(*patTau1) * isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); } _htau1TauJetH3x3OverP[NpdfID]->Fill(patTau1->hcal3x3OverPLead(), GetTauTriggerWeight(*patTau1) * isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); } if (_UseRecoTauDiscrByIsolationFlag) { _htau1TauJetNumIsoTracks[NpdfID]->Fill(patTau1->isolationPFChargedHadrCands().size(), GetTauTriggerWeight(*patTau1) * isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _htau1TauJetNumIsoGammas[NpdfID]->Fill(patTau1->isolationPFGammaCands().size(), GetTauTriggerWeight(*patTau1) * isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _htau1TauJetNumIsoCands[NpdfID]->Fill(patTau1->isolationPFChargedHadrCands().size() + patTau1->isolationPFGammaCands().size(), GetTauTriggerWeight(*patTau1) * isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _htau1TauJetSumPtIsoTracks[NpdfID]->Fill(patTau1->isolationPFChargedHadrCandsPtSum(), GetTauTriggerWeight(*patTau1) * isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _htau1TauJetSumPtIsoGammas[NpdfID]->Fill(patTau1->isolationPFGammaCandsEtSum(), GetTauTriggerWeight(*patTau1) * isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _htau1TauJetSumPtIso[NpdfID]->Fill(patTau1->isolationPFChargedHadrCandsPtSum() + patTau1->isolationPFGammaCandsEtSum(), GetTauTriggerWeight(*patTau1) * isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); } else { _htau1TauJetNumIsoTracks[NpdfID]->Fill(CalculateTauTrackIsolation(*patTau1).first, GetTauTriggerWeight(*patTau1) * isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _htau1TauJetNumIsoGammas[NpdfID]->Fill(CalculateTauEcalIsolation(*patTau1).first, GetTauTriggerWeight(*patTau1) * isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _htau1TauJetNumIsoCands[NpdfID]->Fill(CalculateTauTrackIsolation(*patTau1).first + CalculateTauEcalIsolation(*patTau1).first, GetTauTriggerWeight(*patTau1) * isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _htau1TauJetSumPtIsoTracks[NpdfID]->Fill(CalculateTauTrackIsolation(*patTau1).second, GetTauTriggerWeight(*patTau1) * isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _htau1TauJetSumPtIsoGammas[NpdfID]->Fill(CalculateTauEcalIsolation(*patTau1).second, GetTauTriggerWeight(*patTau1) * isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _htau1TauJetSumPtIso[NpdfID]->Fill(CalculateTauTrackIsolation(*patTau1).second + CalculateTauEcalIsolation(*patTau1).second, GetTauTriggerWeight(*patTau1) * isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); } _htau2TauJetEMFraction[NpdfID]->Fill(patTau2->emFraction(), GetTauTriggerWeight(*patTau2) * isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _htau2TauJetNumSignalTracks[NpdfID]->Fill(patTau2->signalPFChargedHadrCands().size(), GetTauTriggerWeight(*patTau2) * isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _htau2TauJetNumSignalGammas[NpdfID]->Fill(CalculateNumberSignalTauGammas(*patTau2), GetTauTriggerWeight(*patTau2) * isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _htau2TauJetCharge[NpdfID]->Fill(fabs(patTau2->charge()), GetTauTriggerWeight(*patTau2) * isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _htau2TauJetSignalTracksMass[NpdfID]->Fill(CalculateTauSignalTracksMass(*patTau2).M(), GetTauTriggerWeight(*patTau2) * isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _htau2TauJetSignalTracksAndGammasMass[NpdfID]->Fill(CalculateTauSignalTracksAndGammasMass(*patTau2).M(), GetTauTriggerWeight(*patTau2) * isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _htau2TauJetSignalTracksChargeFraction[NpdfID]->Fill(CalculateTauSignalTracksMass(*patTau2).pt() / patTau2->pt(), GetTauTriggerWeight(*patTau2) * isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); if(patTau2->signalPFChargedHadrCands().size() == 1) { _htau2TauJetSignalTracksMass1prong[NpdfID]->Fill(CalculateTauSignalTracksMass(*patTau2).M(), GetTauTriggerWeight(*patTau2) * isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _htau2TauJetSignalTracksAndGammasMass1prong[NpdfID]->Fill(CalculateTauSignalTracksAndGammasMass(*patTau2).M(), GetTauTriggerWeight(*patTau2) * isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _htau2TauJetSignalTracksAndPiZerosMass1prong[NpdfID]->Fill(CalculateTauSignalTracksAndPiZerosMass(*patTau2).first.M(), GetTauTriggerWeight(*patTau2) * isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _htau2TauJetNumSignalPiZeros1prong[NpdfID]->Fill(CalculateTauSignalTracksAndPiZerosMass(*patTau2).second, GetTauTriggerWeight(*patTau2) * isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); if(CalculateNumberSignalTauGammas(*patTau2) == 0) {_htau2TauJetMass1Prong0Gamma[NpdfID]->Fill(CalculateTauSignalTracksAndGammasMass(*patTau2).M(), GetTauTriggerWeight(*patTau2) * isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID));} if(CalculateNumberSignalTauGammas(*patTau2) == 1) {_htau2TauJetMass1Prong1Gamma[NpdfID]->Fill(CalculateTauSignalTracksAndGammasMass(*patTau2).M(), GetTauTriggerWeight(*patTau2) * isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID));} if(CalculateNumberSignalTauGammas(*patTau2) >= 2) {_htau2TauJetMass1Prong2orMoreGamma[NpdfID]->Fill(CalculateTauSignalTracksAndGammasMass(*patTau2).M(), GetTauTriggerWeight(*patTau2) * isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID));} } if(patTau2->signalPFChargedHadrCands().size() == 3) { _htau2TauJetSignalTracksMass3prong[NpdfID]->Fill(CalculateTauSignalTracksMass(*patTau2).M(), GetTauTriggerWeight(*patTau2) * isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _htau2TauJetSignalTracksAndGammasMass3prong[NpdfID]->Fill(CalculateTauSignalTracksAndGammasMass(*patTau2).M(), GetTauTriggerWeight(*patTau2) * isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); if(CalculateNumberSignalTauGammas(*patTau2) == 0) {_htau2TauJetMass3Prong0Gamma[NpdfID]->Fill(CalculateTauSignalTracksAndGammasMass(*patTau2).M(), GetTauTriggerWeight(*patTau2) * isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID));} if(CalculateNumberSignalTauGammas(*patTau2) == 1) {_htau2TauJetMass3Prong1Gamma[NpdfID]->Fill(CalculateTauSignalTracksAndGammasMass(*patTau2).M(), GetTauTriggerWeight(*patTau2) * isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID));} if(CalculateNumberSignalTauGammas(*patTau2) >= 2) {_htau2TauJetMass3Prong2orMoreGamma[NpdfID]->Fill(CalculateTauSignalTracksAndGammasMass(*patTau2).M(), GetTauTriggerWeight(*patTau2) * isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID));} } if( (patTau2->leadPFChargedHadrCand().isNonnull()) ) { _htau2TauJetSeedTrackPt[NpdfID]->Fill(patTau2->leadPFChargedHadrCand()->pt(), GetTauTriggerWeight(*patTau2) * isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _htau2TauJetSeedTrackIpSignificance[NpdfID]->Fill(patTau2->leadPFChargedHadrCandsignedSipt(), GetTauTriggerWeight(*patTau2) * isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); if( (patTau2->leadPFChargedHadrCand()->trackRef().isNonnull()) ) { _htau2TauJetSeedTrackNhits[NpdfID]->Fill(patTau2->leadPFChargedHadrCand()->trackRef()->recHitsSize(), GetTauTriggerWeight(*patTau2) * isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _htau2TauJetSeedTrackChi2[NpdfID]->Fill(patTau2->leadPFChargedHadrCand()->trackRef()->chi2(), GetTauTriggerWeight(*patTau2) * isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); } _htau2TauJetH3x3OverP[NpdfID]->Fill(patTau2->hcal3x3OverPLead(), GetTauTriggerWeight(*patTau2) * isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); } if (_UseRecoTauDiscrByIsolationFlag) { _htau2TauJetNumIsoTracks[NpdfID]->Fill(patTau2->isolationPFChargedHadrCands().size(), GetTauTriggerWeight(*patTau2) * isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _htau2TauJetNumIsoGammas[NpdfID]->Fill(patTau2->isolationPFGammaCands().size(), GetTauTriggerWeight(*patTau2) * isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _htau2TauJetNumIsoCands[NpdfID]->Fill(patTau2->isolationPFChargedHadrCands().size() + patTau2->isolationPFGammaCands().size(), GetTauTriggerWeight(*patTau2) * isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _htau2TauJetSumPtIsoTracks[NpdfID]->Fill(patTau2->isolationPFChargedHadrCandsPtSum(), GetTauTriggerWeight(*patTau2) * isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _htau2TauJetSumPtIsoGammas[NpdfID]->Fill(patTau2->isolationPFGammaCandsEtSum(), GetTauTriggerWeight(*patTau2) * isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _htau2TauJetSumPtIso[NpdfID]->Fill(patTau2->isolationPFChargedHadrCandsPtSum() + patTau2->isolationPFGammaCandsEtSum(), GetTauTriggerWeight(*patTau2) * isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); } else { _htau2TauJetNumIsoTracks[NpdfID]->Fill(CalculateTauTrackIsolation(*patTau2).first, GetTauTriggerWeight(*patTau2) * isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _htau2TauJetNumIsoGammas[NpdfID]->Fill(CalculateTauEcalIsolation(*patTau2).first, GetTauTriggerWeight(*patTau2) * isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _htau2TauJetNumIsoCands[NpdfID]->Fill(CalculateTauTrackIsolation(*patTau2).first + CalculateTauEcalIsolation(*patTau2).first, GetTauTriggerWeight(*patTau2) * isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _htau2TauJetSumPtIsoTracks[NpdfID]->Fill(CalculateTauTrackIsolation(*patTau2).second, GetTauTriggerWeight(*patTau2) * isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _htau2TauJetSumPtIsoGammas[NpdfID]->Fill(CalculateTauEcalIsolation(*patTau2).second, GetTauTriggerWeight(*patTau2) * isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); _htau2TauJetSumPtIso[NpdfID]->Fill(CalculateTauTrackIsolation(*patTau2).second + CalculateTauEcalIsolation(*patTau2).second, GetTauTriggerWeight(*patTau2) * isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); } // _htau1EMFractionVsFullMass->Fill(CalculateEMFraction((*patTau1),theNumberOfTaus1 - 1),(CalculateThe4Momentum((*patTau1),(*patTau2)).second.M()), GetTauTriggerWeight(*patTau1, *patTau2) * isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); // _htau2EMFractionVsFullMass->Fill(CalculateEMFraction((*patTau2),theNumberOfTaus2 - 1), (CalculateThe4Momentum((*patTau1),(*patTau2)).second.M()), GetTauTriggerWeight(*patTau1, *patTau2) * isrgluon_weight * isrgamma_weight * fsr_weight * pdfWeightVector.at(NpdfID)); } } } } pair HiMassTauAnalysis::getPATComponents(const reco::CompositeCandidate& theCandiate){ const Candidate* theTauCandOne = theCandiate.daughter("tau1"); const Candidate* theTauCandTwo = theCandiate.daughter("tau2"); const pat::Tau* theTau1 = dynamic_cast(theTauCandOne); const pat::Tau* theTau2 = dynamic_cast(theTauCandTwo); if(theTau1 == 0 && theTauCandOne->hasMasterClonePtr()) theTau1 = dynamic_cast(&*(theTauCandOne->masterClonePtr())); if(theTau2 == 0 && theTauCandTwo->hasMasterClonePtr()) theTau2 = dynamic_cast(&*(theTauCandTwo->masterClonePtr())); pair thePatComponents = make_pair(theTau1, theTau2); return thePatComponents; } pair HiMassTauAnalysis::getDiJetComponents(const reco::CompositeCandidate& theCandiate){ const Candidate* theJetCandOne = theCandiate.daughter("tau1"); const Candidate* theJetCandTwo = theCandiate.daughter("tau2"); const pat::Jet* theJet1 = dynamic_cast(theJetCandOne); const pat::Jet* theJet2 = dynamic_cast(theJetCandTwo); if(theJet1 == 0 && theJetCandOne->hasMasterClonePtr()) theJet1 = dynamic_cast(&*(theJetCandOne->masterClonePtr())); if(theJet2 == 0 && theJetCandTwo->hasMasterClonePtr()) theJet2 = dynamic_cast(&*(theJetCandTwo->masterClonePtr())); pair thePatComponents = make_pair(theJet1, theJet2); return thePatComponents; } void HiMassTauAnalysis::getCollections(const Event& iEvent, const EventSetup& iSetup) { if(_GenParticleSource.label() != "") { iEvent.getByLabel(_GenParticleSource, _genParticles); } iEvent.getByLabel(_RecoTauSource, _patTaus); iEvent.getByLabel(_RecoMuonSource, _patMuons); iEvent.getByLabel(_RecoElectronSource, _patElectrons); iEvent.getByLabel(_GsfElectronSource, _gsfElectrons); //iEvent.getByLabel(_RecoDiTauSource, _patDiTaus); iEvent.getByLabel(_RecoJetSource, _patJets); iEvent.getByLabel(_RecoMetSource, _patMETs); iEvent.getByLabel(_RecoVertexSource, _primaryEventVertexCollection); iEvent.getByLabel( std::string("offlineBeamSpot"), _beamSpot); iEvent.getByLabel(_RecoTriggerSource, _triggerResults); iEvent.getByLabel("hltTriggerSummaryAOD", handleTriggerEvent ); iEvent.getByLabel("hpsPFTauDiscriminationByLooseIsolation", _looseChargedIsoDisc); iEvent.getByLabel("hpsPFTauDiscriminationByMediumChargedIsolation", _mediumChargedIsoDisc); iEvent.getByLabel("hpsPFTauDiscriminationByTightIsolation", _tightChargedIsoDisc); // iEvent.getByLabel(_RecoParticleFlowSource, _pflow); iEvent.getByLabel("hpsPFTauProducer", _hpsTau); /* iEvent.getByLabel("muons", _recoMuonsForMetCorrections); iEvent.getByLabel("muonMETValueMapProducer", "muCorrData", vm_muCorrData_h); iEvent.getByLabel("selectedLayer1Muons", _patMuonsForMetCorrections); */ if(!_AnalyzeData) iEvent.getByLabel("addPileupInfo", _pileUpInfo); //for pf iso computation IsoDepositVals elecIsoValPFIdDr03((int)(_IsoValElecPFDr03VInputTag.size())); for (size_t isoj = 0; isoj<_IsoValElecPFDr03VInputTag.size(); ++isoj) { iEvent.getByLabel(_IsoValElecPFDr03VInputTag[isoj], elecIsoValPFIdDr03[isoj]); } IsoDepositVals elecIsoValPFIdDr04((int)(_IsoValElecPFDr04VInputTag.size())); for (size_t isoj = 0; isoj<_IsoValElecPFDr04VInputTag.size(); ++isoj) { iEvent.getByLabel(_IsoValElecPFDr04VInputTag[isoj], elecIsoValPFIdDr04[isoj]); } _elecIsoValPFIdDr03 = elecIsoValPFIdDr03; _elecIsoValPFIdDr04 = elecIsoValPFIdDr04; iEvent.getByLabel(_ElecRhoIsoSource, _elecRhoIso); elecRhoIso = *(_elecRhoIso.product()); iEvent.getByLabel(_ConversionSource, _elecConversions); } pair > HiMassTauAnalysis::isZee(reco::Candidate::LorentzVector theObject) { pair > theOutPutPair; bool eventIsZee = false; bool massWindow = false; bool ptAsymmWindow = false; const float zeeMass = 90.1876; const float zeeWidht = 2.4952; float zeePtAsymmetry = -10.; unsigned int i = 0; pair theMassPtAsymmPair; // if mass is within 3 sigmas of z or pt asymmetry is small set to true. for(pat::ElectronCollection::const_iterator patElectron = _patElectrons->begin(); patElectron != _patElectrons->end(); ++patElectron){ i++; if(reco::deltaR(theObject, smearedElectronMomentumVector.at(i - 1)) < _DiTauDeltaRCut) continue; if(theObject == smearedElectronMomentumVector.at(i - 1))continue; reco::Candidate::LorentzVector The_LorentzVect = theObject + smearedElectronMomentumVector.at(i - 1); zeePtAsymmetry = (theObject.pt() - smearedElectronPtEtaPhiMVector.at(i - 1).pt())/(theObject.pt() + smearedElectronPtEtaPhiMVector.at(i - 1).pt()); theMassPtAsymmPair = make_pair(The_LorentzVect.M(), zeePtAsymmetry); if(The_LorentzVect.M() < (zeeMass + 3.*zeeWidht) && The_LorentzVect.M() > (zeeMass - 3.*zeeWidht))massWindow = true; if(fabs(zeePtAsymmetry) < 0.20) ptAsymmWindow = true; if(massWindow || ptAsymmWindow){ eventIsZee = true; break; } } theOutPutPair = make_pair(eventIsZee, theMassPtAsymmPair); return theOutPutPair; } pair > HiMassTauAnalysis::foundZMuMu(){ bool zEvent = false; const float zMass = 90.1876; const float zWidth = 2.4952; float theMassDiff = 100.; float thePtAsymmetry = 10.; if(_patMuons->size() > 1){ // if mass is within 5 sigmas of Z, flag as Z event for(unsigned int muOne = 0; muOne < _patMuons->size() -1; ++muOne){ for(unsigned int muTwo = muOne + 1; muTwo < _patMuons->size(); ++muTwo){ reco::Candidate::LorentzVector theZCand = _patMuons->at(muOne).p4() + _patMuons->at(muTwo).p4(); double ptAsymmetry = (_patMuons->at(muOne).pt() - _patMuons->at(muTwo).pt())/(_patMuons->at(muOne).pt() + _patMuons->at(muTwo).pt()); if(abs(theZCand.mass() - zMass) < theMassDiff) theMassDiff = theZCand.mass() - zMass; if(abs(ptAsymmetry) < thePtAsymmetry) thePtAsymmetry = ptAsymmetry; } } } if(abs(theMassDiff) < 5.*zWidth ) zEvent = true; if(thePtAsymmetry < 0.25) zEvent = true; pair theMassDiffPtAsymmPair = make_pair(theMassDiff, thePtAsymmetry); pair > theOutPair = make_pair(zEvent, theMassDiffPtAsymmPair); return theOutPair; } pair > HiMassTauAnalysis::foundZEE(){ bool zEvent = false; const float zMass = 90.1876; const float zWidth = 2.4952; float theMassDiff = 100.; float thePtAsymmetry = 10.; if(_gsfElectrons->size() > 1){ // if mass is within 5 sigmas of Z, flag as Z event for(unsigned int elecOne = 0; elecOne < _gsfElectrons->size() -1; ++elecOne){ for(unsigned int elecTwo = elecOne + 1; elecTwo < _gsfElectrons->size(); ++elecTwo){ reco::Candidate::LorentzVector theZCand = _gsfElectrons->at(elecOne).p4() + _gsfElectrons->at(elecTwo).p4(); double ptAsymmetry = (_gsfElectrons->at(elecOne).pt() - _gsfElectrons->at(elecTwo).pt())/(_gsfElectrons->at(elecOne).pt() + _gsfElectrons->at(elecTwo).pt()); if(abs(theZCand.mass() - zMass) < theMassDiff) theMassDiff = theZCand.mass() - zMass; if(abs(ptAsymmetry) < thePtAsymmetry) thePtAsymmetry = ptAsymmetry; } } } if(abs(theMassDiff) < 5.*zWidth ) zEvent = true; if(thePtAsymmetry < 0.25) zEvent = true; pair theMassDiffPtAsymmPair = make_pair(theMassDiff, thePtAsymmetry); pair > theOutPair = make_pair(zEvent, theMassDiffPtAsymmPair); return theOutPair; } /* //-----Matching to generator level objects // get the pdg id of the gen particle closest in DeltaR to the reco/pat object template pair HiMassTauAnalysis::getMatchedPdgId(const PatObject& patObject){ pair theTrackAndMotherPdgId; float minDeltaPt = 1000.; float minDeltaR = 0.2; unsigned int thePdgId = 0; unsigned int theMotherPdgId = 0; for(GenParticleCollection::const_iterator genParticle = _genParticles->begin();genParticle != _genParticles->end();++genParticle){ if(patObject.charge() != genParticle->charge() || genParticle->status() != 1)continue; // match only to final states... if(reco::deltaR(patObject.eta(), patObject.phi(), genParticle->eta(), genParticle->phi()) > minDeltaR) continue ; float theDeltaPt = fabs(patObject.pt() - genParticle->pt()); if(theDeltaPt < minDeltaPt){ minDeltaPt = theDeltaPt; thePdgId = abs(genParticle->pdgId()); theMotherPdgId = abs(genParticle->mother()->pdgId()); } } theTrackAndMotherPdgId = make_pair(thePdgId, theMotherPdgId); return theTrackAndMotherPdgId; } */ //match patTau to pftau and get the discriminator bool HiMassTauAnalysis::GetTauDiscriminator(const pat::Tau& thePatTau, const reco::PFTauDiscriminator& theTauDisc){ bool passedDisc = false; float minDR = 0.1; //find the matched patTau and pftau for(unsigned int pfTauIt = 0; pfTauIt < _hpsTau->size(); ++pfTauIt){ PFTauRef theTauCand(_hpsTau,pfTauIt); if(deltaR(*theTauCand,thePatTau) < minDR){ minDR = deltaR(*theTauCand,thePatTau); passedDisc = theTauDisc[theTauCand]; } } return passedDisc; } //Get Generator Level object std::pair HiMassTauAnalysis::GetGenCandidate(int theCandPDGId, int theCandParentPDGId, int theCandParentStatusCode){ reco::Candidate* theGenCandidate = NULL; bool foundCand = false; for(reco::GenParticleCollection::const_iterator mcIt = _genParticles->begin(); mcIt != _genParticles->end(); mcIt++){ if(abs(mcIt->pdgId()) == theCandParentPDGId && mcIt->status() == theCandParentStatusCode){ //skip if looking for W's and found one top if(theCandParentPDGId == 24 && abs(mcIt->mother()->pdgId()) == 6) continue; for(unsigned int dauIt = 0; dauIt < mcIt->numberOfDaughters(); dauIt++){ if(mcIt->daughter(dauIt)->pdgId() == theCandPDGId){ foundCand = true; theGenCandidate = mcIt->daughter(dauIt)->clone(); break; } } } } std::pair thePair = make_pair(foundCand, theGenCandidate); return thePair; } //Get Generator Level object std::pair HiMassTauAnalysis::GetGenCandidate(int theCandPDGId, int theCandStatusCode){ reco::Candidate* theGenCandidate = NULL; bool foundCand = false; for(reco::GenParticleCollection::const_iterator mcIt = _genParticles->begin(); mcIt != _genParticles->end(); mcIt++){ if(abs(mcIt->pdgId()) == theCandPDGId && mcIt->status() == theCandStatusCode){ foundCand = true; theGenCandidate = mcIt->clone(); break; } } std::pair thePair = make_pair(foundCand, theGenCandidate); return thePair; } std::pair HiMassTauAnalysis::GetGenHadTau(reco::Candidate* theGenTau){ reco::Candidate::LorentzVector theGenHadTau = theGenTau->p4(); pair theOutPair; bool foundHadTau = false; unsigned int nNu = 0; for(unsigned int it = 0; it < theGenTau->numberOfDaughters(); ++it){ Candidate* theDaughterCand = theGenTau->daughter(it); if(abs(theDaughterCand->pdgId()) == 12 || abs(theDaughterCand->pdgId()) == 14 || abs(theDaughterCand->pdgId()) == 16){ nNu++; theGenHadTau =- theDaughterCand->p4(); } } if(nNu == 1) foundHadTau = true; theOutPair.first = foundHadTau; theOutPair.second = theGenHadTau; return theOutPair; } const reco::Candidate* HiMassTauAnalysis::getGenMotherCand(const reco::Candidate& theGenCand){ if(theGenCand.mother()->pdgId() != theGenCand.pdgId()){ return theGenCand.mother(); } else{ return getGenMotherCand(*theGenCand.mother()); } } pair HiMassTauAnalysis::matchGsfElectronToGen(const GsfElectron& theGsfElec){ //loop over gen particles collection //check mother //match to closest in DR reco::Candidate::LorentzVector theGenObject(0,0,0,0); bool isGenMatched = false; double minDR = _TauToGenMatchingDeltaR; for(GenParticleCollection::const_iterator mcIt = _genParticles->begin(); mcIt != _genParticles->end(); mcIt++){ const GenParticle genParticle = *mcIt; if(abs(genParticle.pdgId()) != 11) continue; int theMotherPDGId = getGenMotherCand(genParticle)->pdgId(); if(_UseLeptonMotherId && abs(theMotherPDGId) != _LeptonMotherId) continue; if(reco::deltaR(theGsfElec, genParticle) < minDR){ minDR = reco::deltaR(theGsfElec, genParticle); theGenObject = genParticle.p4(); isGenMatched = true; } } pair GenMatchedInformation(isGenMatched,theGenObject); return GenMatchedInformation; } /* //-----Matching Taus to generator level objects pair HiMassTauAnalysis::matchToGen(const pat::Tau& theObject) { bool isGenMatched = false; reco::Candidate::LorentzVector theGenObject(0,0,0,0); for(GenParticleCollection::const_iterator genParticle = _genParticles->begin();genParticle != _genParticles->end();++genParticle) { if((abs(genParticle->pdgId()) == 15) && (genParticle->status() != 3)) { int neutrinos = 0; MChadtau = genParticle->p4(); if(genParticle->mother(0)->pdgId() == genParticle->pdgId()) { motherCand = genParticle->mother(0)->mother(0); if(motherCand->mother(0)->pdgId() == motherCand->pdgId()) {grandMotherCand = motherCand->mother(0)->mother(0);} else {grandMotherCand = motherCand->mother(0);} } else { motherCand = genParticle->mother(0); if(motherCand->mother(0)->pdgId() == motherCand->pdgId()) {grandMotherCand = motherCand->mother(0)->mother(0);} else {grandMotherCand = motherCand->mother(0);} } for(int ii=0; ii<(int)(genParticle->numberOfDaughters()); ii++) { daughterCand = genParticle->daughter(ii); if( (abs(daughterCand->pdgId()) == 12) || (abs(daughterCand->pdgId()) == 14) || (abs(daughterCand->pdgId()) == 16) ) { neutrinos++; MChadtau = MChadtau - daughterCand->p4(); } } if(neutrinos == 1) { if(reco::deltaR(MChadtau.eta(), MChadtau.phi(), theObject.eta(), theObject.phi()) < _TauToGenMatchingDeltaR) { if(_UseTauMotherId) { if(abs(motherCand->pdgId()) == _TauMotherId) { if(_UseTauGrandMotherId) { if(abs(grandMotherCand->pdgId()) == _TauGrandMotherId) {isGenMatched = true;theGenObject = MChadtau;} } else { isGenMatched = true; theGenObject = MChadtau; } } } else {isGenMatched = true;theGenObject = MChadtau;} } } } } pair GenMatchedInformation(isGenMatched,theGenObject); return GenMatchedInformation; } */ //-----Matching Taus to generator level objects pair HiMassTauAnalysis::matchToGen(const pat::Tau& theObject) { bool isGenMatched = false; double minDR = _TauToGenMatchingDeltaR; Candidate::LorentzVector theGenHadTauFourVector(0,0,0,0); pair GenMatchedInformation = make_pair(isGenMatched, theGenHadTauFourVector); for(GenParticleCollection::const_iterator genParticle = _genParticles->begin();genParticle != _genParticles->end();++genParticle) { if((abs(genParticle->pdgId()) != 15) || (genParticle->status() == 3)) continue; //find the closest in DR to object unsigned int neutrinos = 0; if(reco::deltaR(theObject, *genParticle) < minDR){ bool matchedMother = false; bool matchedGrandMother = false; minDR = reco::deltaR(theObject, *genParticle); theGenHadTauFourVector = genParticle->p4(); motherCand = genParticle->mother(0); if(motherCand->pdgId() == genParticle->pdgId()) motherCand = genParticle->mother(0)->mother(0); if(motherCand->pdgId() == _TauMotherId) matchedMother = true; grandMotherCand = motherCand->mother(0); if(grandMotherCand->pdgId() == motherCand->pdgId()) grandMotherCand = motherCand->mother(0)->mother(0); if(grandMotherCand->pdgId() == _TauGrandMotherId) matchedGrandMother = true; for(unsigned int ii=0; ii< genParticle->numberOfDaughters(); ii++){ daughterCand = genParticle->daughter(ii); if((abs(daughterCand->pdgId()) == 12) || (abs(daughterCand->pdgId()) == 14) || (abs(daughterCand->pdgId()) == 16)) { neutrinos++; theGenHadTauFourVector = theGenHadTauFourVector - daughterCand->p4(); } } if(neutrinos == 1){ if(_UseTauGrandMotherId){ if(matchedMother && matchedGrandMother) isGenMatched = true; } else if(_UseTauMotherId){ if(matchedMother) isGenMatched = true; } else isGenMatched = true; } GenMatchedInformation = make_pair(isGenMatched, theGenHadTauFourVector); } } return GenMatchedInformation; } //-----Calculate mass reco variables template pair HiMassTauAnalysis::CalculateThe4Momentum(const PatObject1& patObject1, const PatObject2& patObject2) { if(_UseVectorSumOfVisProductsAndMetMassReco) { double px = patObject1.px() + patObject2.px() + theMETVector.px(); double py = patObject1.py() + patObject2.py() + theMETVector.py(); double pz = patObject1.pz() + patObject2.pz(); double e = patObject1.energy() + patObject2.energy() + TMath::Sqrt((theMETVector.px() * theMETVector.px()) + (theMETVector.py() * theMETVector.py())); reco::Candidate::LorentzVector The_LorentzVect(px, py, pz, e); pair MassRecoInformation(true,The_LorentzVect); return MassRecoInformation; } else if(_UseCollinearApproxMassReco) { double x1_numerator = (patObject1.px() * patObject2.py()) - (patObject2.px() * patObject1.py()); double x1_denominator = (patObject2.py() * (patObject1.px() + theMETVector.px())) - (patObject2.px() * (patObject1.py() + theMETVector.py())); double x1 = ( x1_denominator != 0. ) ? x1_numerator/x1_denominator : -1.; double x2_numerator = x1_numerator; double x2_denominator = (patObject1.px() * (patObject2.py() + theMETVector.py())) - (patObject1.py() * (patObject2.px() + theMETVector.px())); double x2 = ( x2_denominator != 0. ) ? x2_numerator/x2_denominator : -1.; if ( (x1 > 0. && x1 < 1.) && (x2 > 0. && x2 < 1.) ) { reco::Candidate::LorentzVector The_LorentzVect = (patObject1.p4() / x1) + (patObject2.p4() / x2); pair MassRecoInformation(true,The_LorentzVect); return MassRecoInformation; } else { double px = patObject1.px() + patObject2.px() + theMETVector.px(); double py = patObject1.py() + patObject2.py() + theMETVector.py(); double pz = patObject1.pz() + patObject2.pz(); double e = patObject1.energy() + patObject2.energy() + TMath::Sqrt((theMETVector.px() * theMETVector.px()) + (theMETVector.py() * theMETVector.py())); reco::Candidate::LorentzVector The_LorentzVect(px, py, pz, e); pair MassRecoInformation(false,The_LorentzVect); return MassRecoInformation; } } else { reco::Candidate::LorentzVector The_LorentzVect = patObject1.p4() + patObject2.p4(); pair MassRecoInformation(true,The_LorentzVect); return MassRecoInformation; } } //-----Calculate met correction /* double HiMassTauAnalysis::CorrectTheMet(const pat::Tau& patTau) { muonsrecoForMetCorrections = *(_recoMuonsForMetCorrections); vm_muCorrData = *(vm_muCorrData_h.product()); muonsForMetCorrections = *(_patMuonsForMetCorrections); float px; float deltax; float corMetX; uint nMuons = muonsForMetCorrections.size(); for(unsigned int iMu = 0; iMu HiMassTauAnalysis::CalculateTauTrackIsolation(const pat::Tau& patTau) { const reco::Vertex& thePrimaryEventVertex = (*(_primaryEventVertexCollection)->begin()); int nIsoTrks=0; double sumPtIsoTrks=0; if (patTau.leadPFChargedHadrCand().isNonnull()) { std::vector TauIsolTracks = patTau.isolationPFChargedHadrCands(); for(std::vector::const_iterator iTrk=TauIsolTracks.begin();iTrk!=TauIsolTracks.end();++iTrk) { if((reco::deltaR((**iTrk).eta(),(**iTrk).phi(),patTau.leadPFChargedHadrCand()->eta(),patTau.leadPFChargedHadrCand()->phi())<_RecoTauIsoDeltaRCone) && ((**iTrk).pt()>_RecoTauTrackIsoTrkThreshold) && ((**iTrk).trackRef()->recHitsSize() > 8) && ((**iTrk).trackRef().isNonnull()) && (fabs((**iTrk).trackRef()->dxy(thePrimaryEventVertex.position())) < 0.03) && (fabs((**iTrk).trackRef()->dz(thePrimaryEventVertex.position())) < 0.2) ) { nIsoTrks++; sumPtIsoTrks = sumPtIsoTrks + (**iTrk).pt(); } } } pair IsoTrksInformation(nIsoTrks,sumPtIsoTrks); return IsoTrksInformation; } pair HiMassTauAnalysis::CalculateTauTrackIsolation(const pat::Tau& patTau, float deltaRCone, float trkMinPt) { int nIsoTrks=0; double sumPtIsoTrks=0;if (patTau.leadPFChargedHadrCand().isNonnull()) { std::vector TauIsolTracks = patTau.isolationPFChargedHadrCands(); for(std::vector::const_iterator iTrk=TauIsolTracks.begin();iTrk!=TauIsolTracks.end();++iTrk) { if((reco::deltaR((**iTrk).eta(),(**iTrk).phi(),patTau.leadPFChargedHadrCand()->eta(),patTau.leadPFChargedHadrCand()->phi())< deltaRCone) &&((**iTrk).pt()> trkMinPt) && ((**iTrk).trackRef()->recHitsSize() > 8) ) { nIsoTrks++; sumPtIsoTrks = sumPtIsoTrks + (**iTrk).pt(); } } } pair IsoTrksInformation(nIsoTrks,sumPtIsoTrks); return IsoTrksInformation; } pair HiMassTauAnalysis::CalculateTauEcalIsolation(const pat::Tau& patTau) { int nIsoGams=0; double sumPtIsoGams=0; if (_UseRecoTauEllipseForEcalIso) if (patTau.leadPFChargedHadrCand().isNonnull()) { std::vector TauIsolGammas = patTau.isolationPFGammaCands(); for(std::vector::const_iterator iGam=TauIsolGammas.begin();iGam!=TauIsolGammas.end();++iGam) { if((reco::deltaR((**iGam).eta(),(**iGam).phi(),patTau.leadPFChargedHadrCand()->eta(),patTau.leadPFChargedHadrCand()->phi())<_RecoTauIsoDeltaRCone) && ((**iGam).pt()>_RecoTauGammaIsoGamThreshold)) { double deltaphi = TMath::Abs(normalizedPhi((**iGam).phi() - patTau.leadPFChargedHadrCand()->phi())); double deltaeta = (**iGam).eta() - patTau.leadPFChargedHadrCand()->eta(); if( ( ((deltaphi * deltaphi) / (_RecoTauEcalIsoRphiForEllipse * _RecoTauEcalIsoRphiForEllipse)) + ((deltaeta * deltaeta) / (_RecoTauEcalIsoRetaForEllipse * _RecoTauEcalIsoRetaForEllipse)) ) > 1.0 ) { nIsoGams++; sumPtIsoGams = sumPtIsoGams + (**iGam).pt(); } } } std::vector TauSigGammas = patTau.signalPFGammaCands(); for(std::vector::const_iterator iGam=TauSigGammas.begin();iGam!=TauSigGammas.end();++iGam) { if((reco::deltaR((**iGam).eta(),(**iGam).phi(),patTau.leadPFChargedHadrCand()->eta(),patTau.leadPFChargedHadrCand()->phi())<_RecoTauIsoDeltaRCone) && ((**iGam).pt()>_RecoTauGammaIsoGamThreshold)) { double deltaphi = TMath::Abs(normalizedPhi((**iGam).phi() - patTau.leadPFChargedHadrCand()->phi())); double deltaeta = (**iGam).eta() - patTau.leadPFChargedHadrCand()->eta(); if( ( ((deltaphi * deltaphi) / (_RecoTauEcalIsoRphiForEllipse * _RecoTauEcalIsoRphiForEllipse)) + ((deltaeta * deltaeta) / (_RecoTauEcalIsoRetaForEllipse * _RecoTauEcalIsoRetaForEllipse)) ) > 1.0 ) { nIsoGams++; sumPtIsoGams = sumPtIsoGams + (**iGam).pt(); } } } } pair IsoGamsInformation(nIsoGams,sumPtIsoGams); return IsoGamsInformation; } pair HiMassTauAnalysis::CalculateTauEcalIsolation(const pat::Tau& patTau, float deltaRCone, float gammaMinPt) { int nIsoGams=0; double sumPtIsoGams=0; if (_UseRecoTauEllipseForEcalIso) { if (patTau.leadPFChargedHadrCand().isNonnull()) { std::vector TauIsolGammas = patTau.isolationPFGammaCands(); for(std::vector::const_iterator iGam=TauIsolGammas.begin();iGam!=TauIsolGammas.end();++iGam) { if((reco::deltaR((**iGam).eta(),(**iGam).phi(),patTau.leadPFChargedHadrCand()->eta(),patTau.leadPFChargedHadrCand()->phi())gammaMinPt)) { double deltaphi = TMath::Abs(normalizedPhi((**iGam).phi() - patTau.leadPFChargedHadrCand()->phi())); double deltaeta = (**iGam).eta() - patTau.leadPFChargedHadrCand()->eta(); if( ( ((deltaphi * deltaphi) / (_RecoTauEcalIsoRphiForEllipse * _RecoTauEcalIsoRphiForEllipse)) + ((deltaeta * deltaeta) / (_RecoTauEcalIsoRetaForEllipse * _RecoTauEcalIsoRetaForEllipse)) ) > 1.0 ) { nIsoGams++; sumPtIsoGams = sumPtIsoGams + (**iGam).pt(); } } } std::vector TauSigGammas = patTau.signalPFGammaCands(); for(std::vector::const_iterator iGam=TauSigGammas.begin();iGam!=TauSigGammas.end();++iGam) { if((reco::deltaR((**iGam).eta(),(**iGam).phi(),patTau.leadPFChargedHadrCand()->eta(),patTau.leadPFChargedHadrCand()->phi())gammaMinPt)) { double deltaphi = TMath::Abs(normalizedPhi((**iGam).phi() - patTau.leadPFChargedHadrCand()->phi())); double deltaeta = (**iGam).eta() - patTau.leadPFChargedHadrCand()->eta(); if( ( ((deltaphi * deltaphi) / (_RecoTauEcalIsoRphiForEllipse * _RecoTauEcalIsoRphiForEllipse)) + ((deltaeta * deltaeta) / (_RecoTauEcalIsoRetaForEllipse * _RecoTauEcalIsoRetaForEllipse)) ) > 1.0 ) { nIsoGams++; sumPtIsoGams = sumPtIsoGams + (**iGam).pt(); } } } } } pair IsoGamsInformation(nIsoGams,sumPtIsoGams); return IsoGamsInformation; } //-----Calculate Leading Gamma Information int HiMassTauAnalysis::CalculateNumberSignalTauGammas(const pat::Tau& patTau) { int nSigGams=0; if (_UseRecoTauEllipseForEcalIso){ if (patTau.leadPFChargedHadrCand().isNonnull()) { std::vector TauSigGammas = patTau.signalPFGammaCands(); for(std::vector::const_iterator iGam=TauSigGammas.begin();iGam!=TauSigGammas.end();++iGam) { if((**iGam).pt()>_RecoTauSigGamThreshold) { double deltaphi = TMath::Abs(normalizedPhi((**iGam).phi() - patTau.leadPFChargedHadrCand()->phi())); double deltaeta = (**iGam).eta() - patTau.leadPFChargedHadrCand()->eta(); if( ( ((deltaphi * deltaphi) / (_RecoTauEcalIsoRphiForEllipse * _RecoTauEcalIsoRphiForEllipse)) + ((deltaeta * deltaeta) / (_RecoTauEcalIsoRetaForEllipse * _RecoTauEcalIsoRetaForEllipse)) ) <= 1.0 ) { nSigGams++; } } } } } return nSigGams; } //-----Calculate Mass from Tau signal track constituents reco::Candidate::LorentzVector HiMassTauAnalysis::CalculateTauSignalTracksMass(const pat::Tau& patTau) { double px=0; double py=0; double pz=0; double e=0; std::vector TauSigTracks = patTau.signalPFChargedHadrCands(); for(std::vector::const_iterator iTrk=TauSigTracks.begin();iTrk!=TauSigTracks.end();++iTrk) { /* px += (**iTrk).momentum().x(), py += (**iTrk).momentum().y(), pz += (**iTrk).momentum().z(), e += sqrt(pow((double)(**iTrk).momentum().r(),2)+pow(0.13957018,2)); */ px += (**iTrk).px(), py += (**iTrk).py(), pz += (**iTrk).pz(), e += (**iTrk).energy(); } reco::Candidate::LorentzVector TheSignalTracks_LorentzVect(px, py, pz, e); return TheSignalTracks_LorentzVect; } //-----Calculate Mass from Tau signal track AND gamma constituents reco::Candidate::LorentzVector HiMassTauAnalysis::CalculateTauSignalTracksAndGammasMass(const pat::Tau& patTau) { double px=0; double py=0; double pz=0; double e=0; std::vector TauSigTracks = patTau.signalPFChargedHadrCands(); for(std::vector::const_iterator iTrk=TauSigTracks.begin();iTrk!=TauSigTracks.end();++iTrk) { /* px += (**iTrk).momentum().x(), py += (**iTrk).momentum().y(), pz += (**iTrk).momentum().z(), e += sqrt(pow((double)(**iTrk).momentum().r(),2)+pow(0.13957018,2)); */ px += (**iTrk).px(), py += (**iTrk).py(), pz += (**iTrk).pz(), e += (**iTrk).energy(); } if (_UseRecoTauEllipseForEcalIso) { if (patTau.leadPFChargedHadrCand().isNonnull()) { std::vector TauSigGammas = patTau.signalPFGammaCands(); for(std::vector::const_iterator iGam=TauSigGammas.begin();iGam!=TauSigGammas.end();++iGam) { double deltaphi = TMath::Abs(normalizedPhi((**iGam).phi() - patTau.leadPFChargedHadrCand()->phi())); double deltaeta = (**iGam).eta() - patTau.leadPFChargedHadrCand()->eta(); if( ( ((deltaphi * deltaphi) / (_RecoTauEcalIsoRphiForEllipse * _RecoTauEcalIsoRphiForEllipse)) + ((deltaeta * deltaeta) / (_RecoTauEcalIsoRetaForEllipse * _RecoTauEcalIsoRetaForEllipse)) ) <= 1.0 ) { if((**iGam).pt() > _RecoTauSigGamThreshold) { px += (**iGam).px(), py += (**iGam).py(), pz += (**iGam).pz(), e += (**iGam).energy(); } } } } } else { if (patTau.leadPFChargedHadrCand().isNonnull()) { std::vector TauSigGammas = patTau.signalPFGammaCands(); for(std::vector::const_iterator iGam=TauSigGammas.begin();iGam!=TauSigGammas.end();++iGam) { if((**iGam).pt() > _RecoTauSigGamThreshold) { px += (**iGam).px(), py += (**iGam).py(), pz += (**iGam).pz(), e += (**iGam).energy(); } } } } reco::Candidate::LorentzVector TheSignalTracksAndGammas_LorentzVect(px, py, pz, e); return TheSignalTracksAndGammas_LorentzVect; } //-----Calculate Mass from Tau signal track AND pi0 constituents pair HiMassTauAnalysis::CalculateTauSignalTracksAndPiZerosMass(const pat::Tau& patTau) { //reco::Candidate::LorentzVector HiMassTauAnalysis::CalculateTauSignalTracksAndPiZerosMass(const pat::Tau& patTau) { // double px=0; // double py=0; // double pz=0; // double e=0; int npi0 = 0; reco::Candidate::LorentzVector TheSignalTracksAndPiZeros_LorentzVect(0.,0.,0.,0.); if (patTau.leadPFChargedHadrCand().isNonnull()) { for ( reco::PFTauCollection::const_iterator hpsTau = _hpsTau->begin(); hpsTau != _hpsTau->end(); ++hpsTau ) { const std::vector &signalpizeros = hpsTau->signalPiZeroCandidates(); const std::vector &isopizeros = hpsTau->isolationPiZeroCandidates(); if((int)(signalpizeros.size()) > 0) { for(int nsigpi0s=0; nsigpi0s < (int)(signalpizeros.size()); nsigpi0s++) { const RecoTauPiZero &signalpizero = signalpizeros.at(nsigpi0s); if( reco::deltaR(patTau.leadPFChargedHadrCand()->p4(),signalpizero.p4()) < (5.0 / patTau.leadPFChargedHadrCand()->et()) ) { // std::cout << "tau #" << nsigpi0s+1 << " signal pi0 px = " << signalpizero.px() << std::endl; // std::cout << "tau #" << nsigpi0s+1 << " signal pi0 energy = " << signalpizero.energy() << std::endl; TheSignalTracksAndPiZeros_LorentzVect += signalpizero.p4(); npi0++; } } } if((int)(isopizeros.size()) > 0) { for(int nisopi0s=0; nisopi0s < (int)(isopizeros.size()); nisopi0s++) { const RecoTauPiZero &isopizero = isopizeros.at(nisopi0s); if( reco::deltaR(patTau.leadPFChargedHadrCand()->p4(),isopizero.p4()) < (5.0 / patTau.leadPFChargedHadrCand()->et()) ) { // std::cout << "tau #" << nisopi0s+1 << " signal pi0 px = " << isopizero.px() << std::endl; // std::cout << "tau #" << nisopi0s+1 << " signal pi0 energy = " << isopizero.energy() << std::endl; TheSignalTracksAndPiZeros_LorentzVect += isopizero.p4(); npi0++; } } } } } pair TheSignalTracksAndPiZerosInfo(TheSignalTracksAndPiZeros_LorentzVect, npi0); return TheSignalTracksAndPiZerosInfo; } /* //-----Calculate Lepton Isolation Quantities pair HiMassTauAnalysis::CalculateLeptonTrackIsolation(const pat::Muon& patMuon) { int nIsoTrks=0; double sumPtIsoTrks=0; for( unsigned ipfcand=0; ipfcand < _pflow->size(); ++ipfcand ) { const reco::PFCandidate& cand = (*_pflow)[ipfcand]; if(cand.particleId()!=reco::PFCandidate::e) } for(std::vector::const_iterator iTrk=TauIsolTracks.begin();iTrk!=TauIsolTracks.end();++iTrk) { if((reco::deltaR((**iTrk).eta(),(**iTrk).phi(),patTau.leadPFChargedHadrCand()->eta(),patTau.leadPFChargedHadrCand()->phi())<_RecoTauIsoDeltaRCone) && ((**iTrk).pt()>_RecoTauTrackIsoTrkThreshold)) { nIsoTrks++; sumPtIsoTrks = sumPtIsoTrks + (**iTrk).pt(); } } pair LeptonIsoTrksInformation(nIsoTrks,sumPtIsoTrks); return LeptonIsoTrksInformation; } */ //-----Smear the light leptons (for studies of systematic uncertanties) pair HiMassTauAnalysis::SmearLightLepton(const pat::Muon& patMuon) { double smearedPt; double smearedEta; double smearedPhi; if(_GenParticleSource.label() != "") { if(matchToGen(patMuon, 13).first) { reco::Candidate::LorentzVector unsmearedMomentum = matchToGen(patMuon, 13).second; if(_SmearThePt) { smearedPt = (unsmearedMomentum.pt() * _MuonPtScaleOffset) + ((patMuon.pt() - unsmearedMomentum.pt()) * _MuonPtSigmaOffset); } else {smearedPt = patMuon.pt();} if(_SmearTheEta) { smearedEta = (unsmearedMomentum.eta() * _MuonEtaScaleOffset) + ((patMuon.eta() - unsmearedMomentum.eta()) * _MuonEtaSigmaOffset); } else {smearedEta = patMuon.eta();} if(_SmearThePhi) { smearedPhi = (unsmearedMomentum.phi() * _MuonPhiScaleOffset) + ((patMuon.phi() - unsmearedMomentum.phi()) * _MuonPhiSigmaOffset); } else {smearedPhi = patMuon.phi();} math::PtEtaPhiMLorentzVector smearedPtEtaPhiMVector(smearedPt, smearedEta, smearedPhi, unsmearedMomentum.mass()); reco::Candidate::LorentzVector smearedMomentum(smearedPtEtaPhiMVector.px(), smearedPtEtaPhiMVector.py(), smearedPtEtaPhiMVector.pz(), patMuon.energy()); pair theSmearedMomentumPair; theSmearedMomentumPair = make_pair(smearedMomentum, smearedPtEtaPhiMVector); return theSmearedMomentumPair; } else { math::PtEtaPhiMLorentzVector smearedPtEtaPhiMVector(patMuon.pt(), patMuon.eta(), patMuon.phi(), patMuon.mass()); reco::Candidate::LorentzVector smearedMomentum = patMuon.p4(); pair theSmearedMomentumPair; theSmearedMomentumPair = make_pair(smearedMomentum, smearedPtEtaPhiMVector); return theSmearedMomentumPair; } } else { math::PtEtaPhiMLorentzVector smearedPtEtaPhiMVector(patMuon.pt(), patMuon.eta(), patMuon.phi(), patMuon.mass()); reco::Candidate::LorentzVector smearedMomentum = patMuon.p4(); pair theSmearedMomentumPair; theSmearedMomentumPair = make_pair(smearedMomentum, smearedPtEtaPhiMVector); return theSmearedMomentumPair; } } pair HiMassTauAnalysis::SmearLightLepton(const pat::Electron& patElectron) { double smearedPt; double smearedEt; double smearedEta; double smearedScEta; double smearedPhi; if(_GenParticleSource.label() != "") { if(matchToGen(patElectron, 11).first) { reco::Candidate::LorentzVector unsmearedMomentum = matchToGen(patElectron, 11).second; if(_UseHeepInfo) { heep::Ele theHeepElec(patElectron); if(_SmearThePt) { smearedEt = (unsmearedMomentum.energy() * sin(unsmearedMomentum.theta()) * _ElectronPtScaleOffset) + ((theHeepElec.et() - (unsmearedMomentum.energy() * sin(unsmearedMomentum.theta()))) * _ElectronPtSigmaOffset); smearedPt = (unsmearedMomentum.pt() * _ElectronPtScaleOffset) + ((patElectron.pt() - unsmearedMomentum.pt()) * _ElectronPtSigmaOffset); } else {smearedEt = theHeepElec.et(); smearedPt = patElectron.pt();} if(_SmearTheEta) { smearedScEta = (unsmearedMomentum.eta() * _ElectronEtaScaleOffset) + ((theHeepElec.scEta() - unsmearedMomentum.eta()) * _ElectronEtaSigmaOffset); smearedEta = (unsmearedMomentum.eta() * _ElectronEtaScaleOffset) + ((patElectron.eta() - unsmearedMomentum.eta()) * _ElectronEtaSigmaOffset); } else {smearedScEta = theHeepElec.scEta(); smearedEta = patElectron.eta();} if(_SmearThePhi) { smearedPhi = (unsmearedMomentum.phi() * _ElectronPhiScaleOffset) + ((patElectron.phi() - unsmearedMomentum.phi()) * _ElectronPhiSigmaOffset); } else {smearedPhi = patElectron.phi();} math::PtEtaPhiMLorentzVector smearedPtEtaPhiMVector(smearedPt, smearedEta, smearedPhi, unsmearedMomentum.mass()); math::PtEtaPhiMLorentzVector smearedEtEtaPhiMVector(smearedEt, smearedScEta, smearedPhi, unsmearedMomentum.mass()); reco::Candidate::LorentzVector smearedMomentum(smearedPtEtaPhiMVector.px(), smearedPtEtaPhiMVector.py(), smearedPtEtaPhiMVector.pz(), patElectron.energy()); pair theSmearedMomentumPair; theSmearedMomentumPair = make_pair(smearedMomentum, smearedEtEtaPhiMVector); return theSmearedMomentumPair; } else { if(_SmearThePt) { smearedPt = (unsmearedMomentum.pt() * _ElectronPtScaleOffset) + ((patElectron.pt() - unsmearedMomentum.pt()) * _ElectronPtSigmaOffset); } else {smearedPt = patElectron.pt();} if(_SmearTheEta) { smearedEta = (unsmearedMomentum.eta() * _ElectronEtaScaleOffset) + ((patElectron.eta() - unsmearedMomentum.eta()) * _ElectronEtaSigmaOffset); } else {smearedEta = patElectron.eta();} if(_SmearThePhi) { smearedPhi = (unsmearedMomentum.phi() * _ElectronPhiScaleOffset) + ((patElectron.phi() - unsmearedMomentum.phi()) * _ElectronPhiSigmaOffset); } else {smearedPhi = patElectron.phi();} math::PtEtaPhiMLorentzVector smearedPtEtaPhiMVector(smearedPt, smearedEta, smearedPhi, unsmearedMomentum.mass()); reco::Candidate::LorentzVector smearedMomentum(smearedPtEtaPhiMVector.px(), smearedPtEtaPhiMVector.py(), smearedPtEtaPhiMVector.pz(), patElectron.energy()); pair theSmearedMomentumPair; theSmearedMomentumPair = make_pair(smearedMomentum, smearedPtEtaPhiMVector); return theSmearedMomentumPair; } } else { math::PtEtaPhiMLorentzVector smearedPtEtaPhiMVector(patElectron.pt(), patElectron.eta(), patElectron.phi(), patElectron.mass()); reco::Candidate::LorentzVector smearedMomentum = patElectron.p4(); pair theSmearedMomentumPair; theSmearedMomentumPair = make_pair(smearedMomentum, smearedPtEtaPhiMVector); return theSmearedMomentumPair; } } else { math::PtEtaPhiMLorentzVector smearedPtEtaPhiMVector(patElectron.pt(), patElectron.eta(), patElectron.phi(), patElectron.mass()); reco::Candidate::LorentzVector smearedMomentum = patElectron.p4(); pair theSmearedMomentumPair; theSmearedMomentumPair = make_pair(smearedMomentum, smearedPtEtaPhiMVector); return theSmearedMomentumPair; } } pair HiMassTauAnalysis::SmearTau(const pat::Tau& patTau) { double smearedPt; double smearedEta; double smearedPhi; if(_GenParticleSource.label() != "") { if(matchToGen(patTau).first) { reco::Candidate::LorentzVector unsmearedMomentum = matchToGen(patTau).second; if(_SmearThePt) { smearedPt = (unsmearedMomentum.pt() * _TauPtScaleOffset) + ((patTau.pt() - unsmearedMomentum.pt()) * _TauPtSigmaOffset); } else {smearedPt = patTau.pt();} if(_SmearTheEta) { smearedEta = (unsmearedMomentum.eta() * _TauEtaScaleOffset) + ((patTau.eta() - unsmearedMomentum.eta()) * _TauEtaSigmaOffset); } else {smearedEta = patTau.eta();} if(_SmearThePhi) { smearedPhi = (unsmearedMomentum.phi() * _TauPhiScaleOffset) + ((patTau.phi() - unsmearedMomentum.phi()) * _TauPhiSigmaOffset); } else {smearedPhi = patTau.phi();} math::PtEtaPhiMLorentzVector smearedPtEtaPhiMVector(smearedPt, smearedEta, smearedPhi, unsmearedMomentum.mass()); reco::Candidate::LorentzVector smearedMomentum(smearedPtEtaPhiMVector.px(), smearedPtEtaPhiMVector.py(), smearedPtEtaPhiMVector.pz(), patTau.energy()); pair theSmearedMomentumPair; theSmearedMomentumPair = make_pair(smearedMomentum, smearedPtEtaPhiMVector); return theSmearedMomentumPair; } else { math::PtEtaPhiMLorentzVector smearedPtEtaPhiMVector(patTau.pt(), patTau.eta(), patTau.phi(), patTau.mass()); reco::Candidate::LorentzVector smearedMomentum = patTau.p4(); pair theSmearedMomentumPair; theSmearedMomentumPair = make_pair(smearedMomentum, smearedPtEtaPhiMVector); return theSmearedMomentumPair; } } else { math::PtEtaPhiMLorentzVector smearedPtEtaPhiMVector(patTau.pt(), patTau.eta(), patTau.phi(), patTau.mass()); reco::Candidate::LorentzVector smearedMomentum = patTau.p4(); pair theSmearedMomentumPair; theSmearedMomentumPair = make_pair(smearedMomentum, smearedPtEtaPhiMVector); return theSmearedMomentumPair; } } pair HiMassTauAnalysis::SmearJet(const pat::Jet& patJet) { bool isRealJet = true; reco::Candidate::LorentzVector tempJetVector; math::PtEtaPhiMLorentzVector tempPtEtaPhiMVector; if(_UseCorrectedJet) { tempJetVector = patJet.p4(); math::PtEtaPhiMLorentzVector tempPtEtaPhiMVector(patJet.pt(), patJet.eta(), patJet.phi(), patJet.mass()); } else { tempJetVector = patJet.correctedJet("raw","").p4(); math::PtEtaPhiMLorentzVector tempPtEtaPhiMVector(patJet.correctedJet("raw","").pt(), patJet.correctedJet("raw","").eta(), patJet.correctedJet("raw","").phi(), patJet.correctedJet("raw","").mass()); } if(_GenParticleSource.label() != "") { for ( pat::MuonCollection::const_iterator patMuon = _patMuons->begin(); patMuon != _patMuons->end(); ++patMuon ) { if( (reco::deltaR(patMuon->p4(), tempJetVector) < _JetMuonMatchingDeltaR) && (matchToGen(*patMuon, 13).first) ) {isRealJet = false;} } for ( pat::ElectronCollection::const_iterator patElectron = _patElectrons->begin(); patElectron != _patElectrons->end(); ++patElectron ) { if( (reco::deltaR(patElectron->p4(), tempJetVector) < _JetElectronMatchingDeltaR) && (matchToGen(*patElectron, 11).first) ) {isRealJet = false;} } for ( pat::TauCollection::const_iterator patTau = _patTaus->begin(); patTau != _patTaus->end(); ++patTau ) { if( (reco::deltaR(patTau->p4(), tempJetVector) < _JetTauMatchingDeltaR) && (matchToGen(*patTau).first) ) {isRealJet = false;} } if(isRealJet) { reco::Candidate::LorentzVector smearedMomentum = _JetEnergyScaleOffset * tempJetVector; math::PtEtaPhiMLorentzVector smearedPtEtaPhiMVector(smearedMomentum.pt(), smearedMomentum.eta(), smearedMomentum.phi(), smearedMomentum.mass()); pair theSmearedMomentumPair; theSmearedMomentumPair = make_pair(smearedMomentum, smearedPtEtaPhiMVector); return theSmearedMomentumPair; } else { reco::Candidate::LorentzVector smearedMomentum = tempJetVector; math::PtEtaPhiMLorentzVector smearedPtEtaPhiMVector = tempPtEtaPhiMVector; pair theSmearedMomentumPair; theSmearedMomentumPair = make_pair(smearedMomentum, smearedPtEtaPhiMVector); return theSmearedMomentumPair; } } else { reco::Candidate::LorentzVector smearedMomentum = tempJetVector; math::PtEtaPhiMLorentzVector smearedPtEtaPhiMVector = tempPtEtaPhiMVector; pair theSmearedMomentumPair; theSmearedMomentumPair = make_pair(smearedMomentum, smearedPtEtaPhiMVector); return theSmearedMomentumPair; } } //-----Initialize information for the calculation of pdf systematic uncertaintites void HiMassTauAnalysis::InitializeInfoForPDFSystematicUncertaintites() { for (unsigned int i=0; imass_e) pigaga += alphapi * (2*log(pt/mass_e)/3.-5./9.); if (pt>mass_mu) pigaga += alphapi * (2*log(pt/mass_mu)/3.-5./9.); if (pt>mass_tau) pigaga += alphapi * (2*log(pt/mass_tau)/3.-5./9.); // Hadronic vaccum contribution // Using simple effective parametrization from Physics Letters B 513 (2001) 46. // Top contribution neglected double A = 0.; double B = 0.; double C = 0.; if (pt<0.7) { A = 0.0; B = 0.0023092; C = 3.9925370; } else if (pt<2.0) { A = 0.0; B = 0.0022333; C = 4.2191779; } else if (pt<4.0) { A = 0.0; B = 0.0024402; C = 3.2496684; } else if (pt<10.0) { A = 0.0; B = 0.0027340; C = 2.0995092; } else if (pt0.423 && fabs(etaValue)<0.461) || (fabs(etaValue)>0.770 && fabs(etaValue)<0.806) || (fabs(etaValue)>1.127 && fabs(etaValue)<1.163) || (fabs(etaValue)>1.460 && fabs(etaValue)<1.558)); } // Get trigger efficiency weights for one taus double HiMassTauAnalysis::GetTauTriggerWeight(const pat::Tau& patTau){ double result = 1.0; if (_ApplyTauTriggerScaleFactors){ double tauPt = patTau.pt(); unsigned int nbins = TauTrigPtBinEdges_.size()-1; if ( TauTrigPtBinEdges_.front() <= tauPt && tauPt < TauTrigPtBinEdges_.back() ){ for (unsigned int jtbin = 0; jtbin < nbins; ++jtbin ){ if ( TauTrigPtBinEdges_.at(jtbin) <= tauPt && tauPt < TauTrigPtBinEdges_.at(jtbin+1)){ result = TauTrigptWeights_.at(jtbin); return result; } } } } return result; } // Get trigger efficiency weights for a pair of taus double HiMassTauAnalysis::GetTauTriggerWeight(const pat::Tau& patTau1, const pat::Tau& patTau2){ double result = 1.0; if (_ApplyTauTriggerScaleFactors){ result = GetTauTriggerWeight(patTau1) * GetTauTriggerWeight(patTau2); } return result; }//*/ // --------------- void HiMassTauAnalysis::bookHistograms() { // Initialize TFileService Service fs; // Initialize stringstream used to name histograms for each PDF weight std::stringstream j; j.str(""); // The loop below is used to create a different histogram for each event weighting factor (for systematic studies or renomarlization w/ respect to data). // If reweighting booleans are set to false, then event weight will be set to 1 and only 1 histogram per variable will be created. for(unsigned int NpdfCounter = 0; NpdfCounter < pdfWeightVector.size(); NpdfCounter++){ j << NpdfCounter; //--- histogram containing the number of events analyzed and number passing specificied cuts _hEvents[NpdfCounter] = fs->make(("Events_"+j.str()).c_str(), ("Events_"+j.str()).c_str(), 2, 0., 2.); //--- book vertex histograms if (_FillRecoVertexHists) { _hVertexZposition[NpdfCounter] = fs->make(("VertexZposition_"+j.str()).c_str(), ("VertexZposition_"+j.str()).c_str(), 50, -50., 50.); _hVertexNTracks[NpdfCounter] = fs->make(("VertexNTracks_"+j.str()).c_str(), ("VertexNTracks_"+j.str()).c_str(), 100, 0., 100.); _hNVertices[NpdfCounter] = fs->make(("NVertices_"+j.str()).c_str(), ("NVertices_"+j.str()).c_str(), 10, 0., 10.); } //--- book generator level histograms if (_FillGenTauHists) { _hNGenTau[NpdfCounter] = fs->make(("NGenTau_"+j.str()).c_str(), ("NGenTau_"+j.str()).c_str(), 21, 0., 20.); _hGenTauEnergy[NpdfCounter] = fs->make(("GenTauEnergy_"+j.str()).c_str(), ("GenTauEnergy_"+j.str()).c_str(), 200, 0., 500.); _hGenTauPt[NpdfCounter] = fs->make(("GenTauPt_"+j.str()).c_str(), ("GenTauPt_"+j.str()).c_str(), 200, 0., 500.); _hGenTauEta[NpdfCounter] = fs->make(("GenTauEta_"+j.str()).c_str(), ("GenTauEta_"+j.str()).c_str(), 72, -3.6, +3.6); _hGenTauPhi[NpdfCounter] = fs->make(("GenTauPhi_"+j.str()).c_str(), ("GenTauPhi_"+j.str()).c_str(), 36, -TMath::Pi(), +TMath::Pi()); _hGenTauMotherEnergy[NpdfCounter] = fs->make(("GenTauMotherEnergy_"+j.str()).c_str(),("GenTauMotherEnergy_"+j.str()).c_str(),200, 0., 500.); _hGenTauMotherPt[NpdfCounter] = fs->make(("GenTauMotherPt_"+j.str()).c_str(), ("GenTauMotherPt_"+j.str()).c_str(), 200, 0., 500.); _hGenTauMotherEta[NpdfCounter] = fs->make(("GenTauMotherEta_"+j.str()).c_str(), ("GenTauMotherEta_"+j.str()).c_str(), 72, -3.6, +3.6); _hGenTauMotherPhi[NpdfCounter] = fs->make(("GenTauMotherPhi_"+j.str()).c_str(), ("GenTauMotherPhi_"+j.str()).c_str(), 36, -TMath::Pi(), +TMath::Pi()); _hGenTauGrandMotherEnergy[NpdfCounter] = fs->make(("GenTauGrandMotherEnergy_"+j.str()).c_str(), ("GenTauGrandMotherEnergy_"+j.str()).c_str(), 200, 0., 500.); _hGenTauGrandMotherPt[NpdfCounter] = fs->make(("GenTauGrandMotherPt_"+j.str()).c_str(),("GenTauGrandMotherPt_"+j.str()).c_str(), 200, 0., 500.); _hGenTauGrandMotherEta[NpdfCounter] = fs->make(("GenTauGrandMotherEta_"+j.str()).c_str(),("GenTauGrandMotherEta_"+j.str()).c_str(),72, -3.6, +3.6); _hGenTauGrandMotherPhi[NpdfCounter] = fs->make(("GenTauGrandMotherPhi_"+j.str()).c_str(),("GenTauGrandMotherPhi_"+j.str()).c_str(),36, -TMath::Pi(), +TMath::Pi()); } //--- book reconstruction level histograms if (_FillRecoTauHists) { // Tau basic physics quantities _hNTau[NpdfCounter] = fs->make(("NTau_"+j.str()).c_str(), ("NTau_"+j.str()).c_str(), 21, 0., 20.); _hTauJetEnergy[NpdfCounter] = fs->make(("TauJetEnergy_"+j.str()).c_str(), ("TauJetEnergy_"+j.str()).c_str(), 200, 0., 500.); _hTauJetPt[NpdfCounter] = fs->make(("TauJetPt_"+j.str()).c_str(), ("TauJetPt_"+j.str()).c_str(), 200, 0., 500.); _hTauJetEta[NpdfCounter] = fs->make(("TauJetEta_"+j.str()).c_str(), ("TauJetEta_"+j.str()).c_str(), 72, -3.6, +3.6); _hBestTauJetPt[NpdfCounter] = fs->make(("BestTauJetPt_"+j.str()).c_str(), ("BestTauJetPt_"+j.str()).c_str(), 200, 0., 500.); _hBestTauJetEta[NpdfCounter] = fs->make(("BestTauJetEta_"+j.str()).c_str(), ("BestTauJetEta_"+j.str()).c_str(), 72, -3.6, +3.6); _hTauJetPhi[NpdfCounter] = fs->make(("TauJetPhi_"+j.str()).c_str(), ("TauJetPhi_"+j.str()).c_str(), 36, -TMath::Pi(), +TMath::Pi()); _hTauJetNumSignalTracks[NpdfCounter] = fs->make(("TauJetNumSignalTracks_"+j.str()).c_str(), ("TauJetNumSignalTracks_"+j.str()).c_str(), 10, 0, 10); _hTauJetNumSignalGammas[NpdfCounter] = fs->make(("TauJetNumSignalGammas_"+j.str()).c_str(), ("TauJetNumSignalGammas_"+j.str()).c_str(), 10, 0, 10); _hTauJetSeedTrackPt[NpdfCounter] = fs->make(("TauJetSeedTrackPt_"+j.str()).c_str(), ("TauJetSeedTrackPt_"+j.str()).c_str(), 200, 0., 500.); _hBestTauJetSeedTrackPt[NpdfCounter] = fs->make(("BestTauJetSeedTrackPt_"+j.str()).c_str(), ("BestTauJetSeedTrackPt_"+j.str()).c_str(), 200, 0., 500.); _hTauJetSeedTrackIpSignificance[NpdfCounter] = fs->make(("TauJetSeedTrackIpSignificance_"+j.str()).c_str(), ("TauJetSeedTrackIpSignificance_"+j.str()).c_str(), 100, 0., 100.); _hTauJetSeedTrackNhits[NpdfCounter] = fs->make(("TauJetSeedTrackNhits_"+j.str()).c_str(), ("TauJetSeedTrackNhits_"+j.str()).c_str(), 40, 0., 40.); _hBestTauJetSeedTrackNhits[NpdfCounter] = fs->make(("BestTauJetSeedTrackNhits_"+j.str()).c_str(), ("BestTauJetSeedTrackNhits_"+j.str()).c_str(), 40, 0., 40.); _hTauJetSeedTrackChi2[NpdfCounter] = fs->make(("TauJetSeedTrackChi2_"+j.str()).c_str(), ("TauJetSeedTrackChi2_"+j.str()).c_str(), 50, 0., 100.); _hTauJetCharge[NpdfCounter] = fs->make(("TauJetCharge_"+j.str()).c_str(), ("TauJetCharge_"+j.str()).c_str(), 5, 0., 5.); _hTauJetSignalTracksMass[NpdfCounter] = fs->make(("TauJetSignalTracksMass_"+j.str()).c_str(), ("TauJetSignalTracksMass_"+j.str()).c_str(), 50, 0., 5.); _hTauJetSignalTracksAndGammasMass[NpdfCounter] = fs->make(("TauJetSignalTracksAndGammasMass_"+j.str()).c_str(), ("TauJetSignalTracksAndGammasMass_"+j.str()).c_str(), 50, 0., 5.); _hTauJetSignalTracksChargeFraction[NpdfCounter] = fs->make(("TauJetSignalTracksChargeFraction_"+j.str()).c_str(),("TauJetSignalTracksChargeFraction_"+j.str()).c_str(), 30, 0., 1.5); _hTauJetNumIsoTracks[NpdfCounter] = fs->make(("TauJetNumIsoTracks_"+j.str()).c_str(), ("TauJetNumIsoTracks_"+j.str()).c_str(), 10, 0, 10); _hTauJetNumIsoGammas[NpdfCounter] = fs->make(("TauJetNumIsoGammas_"+j.str()).c_str(), ("TauJetNumIsoGammas_"+j.str()).c_str(), 10, 0, 10); _hTauJetNumIsoCands[NpdfCounter] = fs->make(("TauJetNumIsoCands_"+j.str()).c_str(), ("TauJetNumIsoCands_"+j.str()).c_str(), 10, 0, 10); _hTauJetSumPtIsoTracks[NpdfCounter] = fs->make(("TauJetSumPtIsoTracks_"+j.str()).c_str(), ("TauJetSumPtIsoTracks_"+j.str()).c_str(), 100, 0, 50); _hTauJetSumPtIsoGammas[NpdfCounter] = fs->make(("TauJetSumPtIsoGammas_"+j.str()).c_str(), ("TauJetSumPtIsoGammas_"+j.str()).c_str(), 100, 0, 50); _hBestTauJetSumPtIsoTracks[NpdfCounter] = fs->make(("BestTauJetSumPtIsoTracks_"+j.str()).c_str(), ("BestTauJetSumPtIsoTracks_"+j.str()).c_str(), 100, 0, 50); _hBestTauJetSumPtIsoGammas[NpdfCounter] = fs->make(("BestTauJetSumPtIsoGammas_"+j.str()).c_str(), ("BestTauJetSumPtIsoGammas_"+j.str()).c_str(), 100, 0, 50); _hTauJetSumPtIso[NpdfCounter] = fs->make(("TauJetSumPtIso_"+j.str()).c_str(), ("TauJetSumPtIso_"+j.str()).c_str(), 100, 0, 50); _hTauJetGenTauDeltaPhi[NpdfCounter] = fs->make(("TauJetGenTauDeltaPhi_"+j.str()).c_str(), ("TauJetGenTauDeltaPhi_"+j.str()).c_str(), 800, -0.2, 0.2); _hTauJetGenTauDeltaEta[NpdfCounter] = fs->make(("TauJetGenTauDeltaEta_"+j.str()).c_str(), ("TauJetGenTauDeltaEta_"+j.str()).c_str(), 800, -0.2, 0.2); _hTauJetGenTauDeltaPt[NpdfCounter] = fs->make(("TauJetGenTauDeltaPt_"+j.str()).c_str(), ("TauJetGenTauDeltaPt_"+j.str()).c_str(), 500, -5, 5); _hTauJetSignalTracksMass1prong[NpdfCounter] = fs->make(("TauJetSignalTracksMass1prong_"+j.str()).c_str(), ("TauJetSignalTracksMass1prong_"+j.str()).c_str(), 50, 0., 5.); _hTauJetSignalTracksAndGammasMass1prong[NpdfCounter] = fs->make(("TauJetSignalTracksAndGammasMass1prong_"+j.str()).c_str(), ("TauJetSignalTracksAndGammasMass1prong_"+j.str()).c_str(), 50, 0., 5.); _hTauJetSignalTracksAndPiZerosMass1prong[NpdfCounter] = fs->make(("TauJetSignalTracksAndPiZerosMass1prong_"+j.str()).c_str(), ("TauJetSignalTracksAndPiZerosMass1prong_"+j.str()).c_str(), 50, 0., 5.); _hTauJetNumSignalPiZeros1prong[NpdfCounter] = fs->make(("TauJetNumSignalPiZeros1prong_"+j.str()).c_str(), ("TauJetNumSignalPiZeros1prong_"+j.str()).c_str(), 10, 0., 10.); _hTauJetSignalTracksMass3prong[NpdfCounter] = fs->make(("TauJetSignalTracksMass3prong_"+j.str()).c_str(), ("TauJetSignalTracksMass3prong_"+j.str()).c_str(), 50, 0., 5.); _hTauJetSignalTracksAndGammasMass3prong[NpdfCounter] = fs->make(("TauJetSignalTracksAndGammasMass3prong_"+j.str()).c_str(), ("TauJetSignalTracksAndGammasMass3prong_"+j.str()).c_str(), 50, 0., 5.); _hTauJetMass1Prong0Gamma[NpdfCounter] = fs->make(("TauJetMass1Prong0Gamma_"+j.str()).c_str(), ("TauJetMass1Prong0Gamma_"+j.str()).c_str(), 100, 0., 5.); _hTauJetMass1Prong1Gamma[NpdfCounter] = fs->make(("TauJetMass1Prong1Gamma_"+j.str()).c_str(), ("TauJetMass1Prong1Gamma_"+j.str()).c_str(), 100, 0., 5.); _hTauJetMass1Prong2orMoreGamma[NpdfCounter] = fs->make(("TauJetMass1Prong2orMoreGamma_"+j.str()).c_str(), ("TauJetMass1Prong2orMoreGamma_"+j.str()).c_str(), 100, 0., 5.); _hTauJetMass3Prong0Gamma[NpdfCounter] = fs->make(("TauJetMass3Prong0Gamma_"+j.str()).c_str(), ("TauJetMass3Prong0Gamma_"+j.str()).c_str(), 100, 0., 5.); _hTauJetMass3Prong1Gamma[NpdfCounter] = fs->make(("TauJetMass3Prong1Gamma_"+j.str()).c_str(), ("TauJetMass3Prong1Gamma_"+j.str()).c_str(), 100, 0., 5.); _hTauJetMass3Prong2orMoreGamma[NpdfCounter] = fs->make(("TauJetMass3Prong2orMoreGamma_"+j.str()).c_str(), ("TauJetMass3Prong2orMoreGamma_"+j.str()).c_str(), 100, 0., 5.); _hTauJetH3x3OverP[NpdfCounter] = fs->make(("TauJetH3x3OverP_"+j.str()).c_str(), ("TauJetH3x3OverP_"+j.str()).c_str(), 100, 0., 1.); _hBestTauJetH3x3OverP[NpdfCounter] = fs->make(("BestTauJetH3x3OverP_"+j.str()).c_str(), ("BestTauJetH3x3OverP_"+j.str()).c_str(), 100, 0., 1.); } //--- book reconstruction level histograms if (_FillRecoMuonHists) { _hNMuon[NpdfCounter] = fs->make(("NMuon_"+j.str()).c_str(), ("NMuon_"+j.str()).c_str(), 21, 0., 20.); _hMuonEnergy[NpdfCounter] = fs->make(("MuonEnergy_"+j.str()).c_str(), ("MuonEnergy_"+j.str()).c_str(), 200, 0., 500.); _hMuonPt[NpdfCounter] = fs->make(("MuonPt_"+j.str()).c_str(), ("MuonPt_"+j.str()).c_str(), 200, 0., 500.); _hMuonEta[NpdfCounter] = fs->make(("MuonEta_"+j.str()).c_str(), ("MuonEta_"+j.str()).c_str(), 72, -3.6, +3.6); _hBestMuonPt[NpdfCounter] = fs->make(("BestMuonPt_"+j.str()).c_str(), ("BestMuonPt_"+j.str()).c_str(), 200, 0., 500.); _hBestMuonEta[NpdfCounter] = fs->make(("BestMuonEta_"+j.str()).c_str(), ("BestMuonEta_"+j.str()).c_str(), 72, -3.6, +3.6); _hMuonPhi[NpdfCounter] = fs->make(("MuonPhi_"+j.str()).c_str(), ("MuonPhi_"+j.str()).c_str(), 36, -TMath::Pi(), +TMath::Pi()); _hMuonTrackIso[NpdfCounter] = fs->make(("MuonTrackIso_"+j.str()).c_str(), ("MuonTrackIso_"+j.str()).c_str(), 100, 0, 50); _hMuonEcalIso[NpdfCounter] = fs->make(("MuonEcalIso_"+j.str()).c_str(), ("MuonEcalIso_"+j.str()).c_str(), 100, 0, 50); _hBestMuonTrackIso[NpdfCounter] = fs->make(("BestMuonTrackIso_"+j.str()).c_str(), ("BestMuonTrackIso_"+j.str()).c_str(), 100, 0, 50); _hBestMuonEcalIso[NpdfCounter] = fs->make(("BestMuonEcalIso_"+j.str()).c_str(), ("BestMuonEcalIso_"+j.str()).c_str(), 100, 0, 50); _hMuonIso[NpdfCounter] = fs->make(("MuonIso_"+j.str()).c_str(), ("MuonIso_"+j.str()).c_str(), 100, 0, 50); _hMuonIp[NpdfCounter] = fs->make(("MuonIp_"+j.str()).c_str(), ("MuonIp_"+j.str()).c_str(), 500, -1, +1); _hBestMuonIp[NpdfCounter] = fs->make(("BestMuonIp_"+j.str()).c_str(), ("BestMuonIp_"+j.str()).c_str(), 500, -1, +1); _hMuonIpSignificance[NpdfCounter] = fs->make(("MuonIpSignificance_"+j.str()).c_str(), ("MuonIpSignificance_"+j.str()).c_str(), 100, 0., 100.); _hMuonGenMuonDeltaPhi[NpdfCounter] = fs->make(("MuonGenMuonDeltaPhi_"+j.str()).c_str(), ("MuonGenMuonDeltaPhi_"+j.str()).c_str(), 800, -0.2, 0.2); _hMuonGenMuonDeltaEta[NpdfCounter] = fs->make(("MuonGenMuonDeltaEta_"+j.str()).c_str(), ("MuonGenMuonDeltaEta_"+j.str()).c_str(), 800, -0.2, 0.2); _hMuonGenMuonDeltaPt[NpdfCounter] = fs->make(("MuonGenMuonDeltaPt_"+j.str()).c_str(), ("MuonGenMuonDeltaPt_"+j.str()).c_str(), 500, -5, 5); _hMuonCaloCompatibility[NpdfCounter] = fs->make(("MuonCaloCompatibility_"+j.str()).c_str(), ("MuonCaloCompatibility_"+j.str()).c_str(), 102, 0.0, 1.02); _hMuonSegmentCompatibility[NpdfCounter] = fs->make(("MuonSegmentCompatibility_"+j.str()).c_str(),("MuonSegmentCompatibility_"+j.str()).c_str(), 102, 0.0, 1.02); _hBestMuonCaloCompatibility[NpdfCounter] = fs->make(("BestMuonCaloCompatibility_"+j.str()).c_str(), ("BestMuonCaloCompatibility_"+j.str()).c_str(), 102, 0.0, 1.02); _hBestMuonSegmentCompatibility[NpdfCounter] = fs->make(("BestMuonSegmentCompatibility_"+j.str()).c_str(),("BestMuonSegmentCompatibility_"+j.str()).c_str(), 102, 0.0, 1.02); _hMuonAntiPion[NpdfCounter] = fs->make(("MuonAntiPion_"+j.str()).c_str(), ("MuonAntiPion_"+j.str()).c_str(), 202, 0.0, 2.02); _hBestMuonAntiPion[NpdfCounter] = fs->make(("BestMuonAntiPion_"+j.str()).c_str(), ("BestMuonAntiPion_"+j.str()).c_str(), 202, 0.0, 2.02); _hMuonCaloCompatibilityVsSegmentCompatibility[NpdfCounter] = fs->make(("MuonCaloCompatibilityVsSegmentCompatibility_"+j.str()).c_str(), ("MuonCaloCompatibilityVsSegmentCompatibility_"+j.str()).c_str(), 102, 0, 1.02, 102, 0, 1.02); } if (_FillRecoElectronHists) { _hNElectron[NpdfCounter] = fs->make(("NElectron_"+j.str()).c_str(), ("NElectron_"+j.str()).c_str(), 21, 0., 20.); _hElectronEnergy[NpdfCounter] = fs->make(("ElectronEnergy_"+j.str()).c_str(), ("ElectronEnergy_"+j.str()).c_str(), 200, 0., 500.); _hElectronPt[NpdfCounter] = fs->make(("ElectronPt_"+j.str()).c_str(), ("ElectronPt_"+j.str()).c_str(), 200, 0., 500.); _hElectronEta[NpdfCounter] = fs->make(("ElectronEta_"+j.str()).c_str(), ("ElectronEta_"+j.str()).c_str(), 72, -3.6, +3.6); _hBestElectronPt[NpdfCounter] = fs->make(("BestElectronPt_"+j.str()).c_str(), ("BestElectronPt_"+j.str()).c_str(), 200, 0., 500.); _hBestElectronEta[NpdfCounter] = fs->make(("BestElectronEta_"+j.str()).c_str(), ("BestElectronEta_"+j.str()).c_str(), 72, -3.6, +3.6); _hElectronPhi[NpdfCounter] = fs->make(("ElectronPhi_"+j.str()).c_str(), ("ElectronPhi_"+j.str()).c_str(), 36, -TMath::Pi(), +TMath::Pi()); _hElectronTrackIso[NpdfCounter] = fs->make(("ElectronTrackIso_"+j.str()).c_str(), ("ElectronTrackIso_"+j.str()).c_str(), 100, 0, 50); _hElectronEcalIso[NpdfCounter] = fs->make(("ElectronEcalIso_"+j.str()).c_str(), ("ElectronEcalIso_"+j.str()).c_str(), 100, 0, 50); _hBestElectronTrackIso[NpdfCounter] = fs->make(("BestElectronTrackIso_"+j.str()).c_str(), ("BestElectronTrackIso_"+j.str()).c_str(), 100, 0, 50); _hBestElectronEcalIso[NpdfCounter] = fs->make(("BestElectronEcalIso_"+j.str()).c_str(), ("BestElectronEcalIso_"+j.str()).c_str(), 100, 0, 50); _hElectronIp[NpdfCounter] = fs->make(("ElectronIp_"+j.str()).c_str(), ("ElectronIp_"+j.str()).c_str(), 500, -1, +1); _hElectronEoverP[NpdfCounter] = fs->make(("ElectronEoverP_"+j.str()).c_str(), ("ElectronEoverP_"+j.str()).c_str(), 60, 0, +3); _hElectronHoverEm[NpdfCounter] = fs->make(("ElectronHoverEm_"+j.str()).c_str(), ("ElectronHoverEm_"+j.str()).c_str(), 300, 0, +3); _hElectronClassification[NpdfCounter] = fs->make(("ElectronClassification_"+j.str()).c_str(), ("ElectronClassification_"+j.str()).c_str(), 200, 0, 200); _hElectronGenElectronDeltaPhi[NpdfCounter] = fs->make(("ElectronGenElectronDeltaPhi_"+j.str()).c_str(),("ElectronGenElectronDeltaPhi_"+j.str()).c_str(), 800, -0.2, 0.2); _hElectronGenElectronDeltaEta[NpdfCounter] = fs->make(("ElectronGenElectronDeltaEta_"+j.str()).c_str(),("ElectronGenElectronDeltaEta_"+j.str()).c_str(), 800, -0.2, 0.2); _hElectronGenElectronDeltaPt[NpdfCounter] = fs->make(("ElectronGenElectronDeltaPt_"+j.str()).c_str(), ("ElectronGenElectronDeltaPt_"+j.str()).c_str(), 500, -5, 5); _hElectronEcalDriven[NpdfCounter] = fs->make(("ElectronEcalDriven_"+j.str()).c_str(), ("ElectronEcalDriven_"+j.str()).c_str(), 2, 0., 2.); _hElectronTrackerDriven[NpdfCounter] = fs->make(("ElectronTrackerDriven_"+j.str()).c_str(), ("ElectronTrackerDriven_"+j.str()).c_str(), 2, 0., 2.); _hElectronIsZee[NpdfCounter] = fs->make(("ElectronIsZee_"+j.str()).c_str(), ("ElectronIsZee_"+j.str()).c_str(), 2, 0., 2.); _hElectronHoverEm[NpdfCounter] = fs->make(("ElectronHoverEm_"+j.str()).c_str(), ("ElectronHoverEm_"+j.str()).c_str(), 100, 0., 0.5); _hElectronEESigmaIEtaIEta[NpdfCounter] = fs->make(("ElectronEESigmaIEtaIEta_"+j.str()).c_str(), ("ElectronEESigmaIEtaIEta_"+j.str()).c_str(), 100, 0., 0.05); _hElectronEEDEta[NpdfCounter] = fs->make(("ElectronEEDEta_"+j.str()).c_str(), ("ElectronEEDEta_"+j.str()).c_str(), 100, -0.05, 0.05); _hElectronEEDPhi[NpdfCounter] = fs->make(("ElectronEEDPhi_"+j.str()).c_str(), ("ElectronEEDPhi_"+j.str()).c_str(), 100, -0.2, 0.2); _hElectronEBSigmaIEtaIEta[NpdfCounter] = fs->make(("ElectronEBSigmaIEtaIEta_"+j.str()).c_str(), ("ElectronEBSigmaIEtaIEta_"+j.str()).c_str(), 100, 0., 0.05); _hElectronEBDEta[NpdfCounter] = fs->make(("ElectronEBDEta_"+j.str()).c_str(), ("ElectronEBDEta_"+j.str()).c_str(), 100, -0.05, 0.05); _hElectronEBDPhi[NpdfCounter] = fs->make(("ElectronEBDPhi_"+j.str()).c_str(), ("ElectronEBDPhi_"+j.str()).c_str(), 100, -0.2, 0.2); _hElectronEB2by5Over5by5[NpdfCounter] = fs->make(("ElectronEB2by5Over5by5_"+j.str()).c_str(), ("ElectronEB2by5Over5by5_"+j.str()).c_str(), 100, 0., 1.); _hElectronEB1by5Over5by5[NpdfCounter] = fs->make(("ElectronEB1by5Over5by5_"+j.str()).c_str(), ("ElectronEB1by5Over5by5_"+j.str()).c_str(), 100, 0., 1.); _hElectronMissingHits[NpdfCounter] = fs->make(("ElectronMissingHits_"+j.str()).c_str(), ("ElectronMissingHits_"+j.str()).c_str(), 10, 0., 10.); _hBestElectronHoverEm[NpdfCounter] = fs->make(("BestElectronHoverEm_"+j.str()).c_str(), ("BestElectronHoverEm_"+j.str()).c_str(), 100, 0., 0.5); _hBestElectronEESigmaIEtaIEta[NpdfCounter] = fs->make(("BestElectronEESigmaIEtaIEta_"+j.str()).c_str(), ("BestElectronEESigmaIEtaIEta_"+j.str()).c_str(), 100, 0., 0.05); _hBestElectronEEDEta[NpdfCounter] = fs->make(("BestElectronEEDEta_"+j.str()).c_str(), ("BestElectronEEDEta_"+j.str()).c_str(), 100, -0.05, 0.05); _hBestElectronEEDPhi[NpdfCounter] = fs->make(("BestElectronEEDPhi_"+j.str()).c_str(), ("BestElectronEEDPhi_"+j.str()).c_str(), 100, -0.2, 0.2); _hBestElectronEBSigmaIEtaIEta[NpdfCounter] = fs->make(("BestElectronEBSigmaIEtaIEta_"+j.str()).c_str(), ("BestElectronEBSigmaIEtaIEta_"+j.str()).c_str(), 100, 0., 0.05); _hBestElectronEBDEta[NpdfCounter] = fs->make(("BestElectronEBDEta_"+j.str()).c_str(), ("BestElectronEBDEta_"+j.str()).c_str(), 100, -0.05, 0.05); _hBestElectronEBDPhi[NpdfCounter] = fs->make(("BestElectronEBDPhi_"+j.str()).c_str(), ("BestElectronEBDPhi_"+j.str()).c_str(), 100, -0.2, 0.2); _hBestElectronEB2by5Over5by5[NpdfCounter] = fs->make(("BestElectronEB2by5Over5by5_"+j.str()).c_str(), ("BestElectronEB2by5Over5by5_"+j.str()).c_str(), 100, 0., 1.); _hBestElectronEB1by5Over5by5[NpdfCounter] = fs->make(("BestElectronEB1by5Over5by5_"+j.str()).c_str(), ("BestElectronEB1by5Over5by5_"+j.str()).c_str(), 100, 0., 1.); _hBestElectronMissingHits[NpdfCounter] = fs->make(("BestElectronMissingHits_"+j.str()).c_str(), ("BestElectronMissingHits_"+j.str()).c_str(), 10, 0., 10.); } if (_FillRecoJetHists) { _hNJet[NpdfCounter] = fs->make(("NJet_"+j.str()).c_str(), ("NJet_"+j.str()).c_str(), 21, 0., 20.); _hJetEnergy[NpdfCounter] = fs->make(("JetEnergy_"+j.str()).c_str(), ("JetEnergy_"+j.str()).c_str(), 200, 0., 500.); _hJetPt[NpdfCounter] = fs->make(("JetPt_"+j.str()).c_str(), ("JetPt_"+j.str()).c_str(), 200, 0., 500.); _hJetEta[NpdfCounter] = fs->make(("JetEta_"+j.str()).c_str(), ("JetEta_"+j.str()).c_str(), 72, -3.6, +3.6); _hJetPhi[NpdfCounter] = fs->make(("JetPhi_"+j.str()).c_str(), ("JetPhi_"+j.str()).c_str(), 36, -TMath::Pi(), +TMath::Pi()); _hBJetDiscrByTrackCounting[NpdfCounter] = fs->make(("BJetDiscrByTrackCounting_"+j.str()).c_str(), ("BJetDiscrByTrackCounting_"+j.str()).c_str(), 400, -20, 20); _hBJetDiscrBySimpleSecondaryV[NpdfCounter] = fs->make(("BJetDiscrBySimpleSecondaryV_"+j.str()).c_str(), ("BJetDiscrBySimpleSecondaryV_"+j.str()).c_str(), 400, -20, 20); _hBJetDiscrByCombinedSecondaryV[NpdfCounter] = fs->make(("BJetDiscrByCombinedSecondaryV_"+j.str()).c_str(), ("BJetDiscrByCombinedSecondaryV_"+j.str()).c_str(), 400, -20, 20); } if (_FillTopologyHists) { if( ((_AnalyzeMuonForLeg1) && (_AnalyzeTauForLeg2)) || ((_AnalyzeMuonForLeg2) && (_AnalyzeTauForLeg1)) ) { _hMuonPtVsTauPt[NpdfCounter] = fs->make(("MuonPtVsTauPt_"+j.str()).c_str(), ("MuonPtVsTauPt_"+j.str()).c_str(), 100, 0, 500, 100, 0, 500); _hMuonTauDeltaR[NpdfCounter] = fs->make(("MuonTauDeltaR_"+j.str()).c_str(), ("MuonTauDeltaR_"+j.str()).c_str(), 100, 0, 5.); _hBestMuonTauDeltaR[NpdfCounter] = fs->make(("BestMuonTauDeltaR_"+j.str()).c_str(), ("BestMuonTauDeltaR_"+j.str()).c_str(), 100, 0, 5.); _hMuonTauDeltaPtDivSumPt[NpdfCounter] = fs->make(("MuonTauDeltaPtDivSumPt_"+j.str()).c_str(), ("MuonTauDeltaPtDivSumPt_"+j.str()).c_str(), 100, -5, 5.); _hMuonTauDeltaPt[NpdfCounter] = fs->make(("MuonTauDeltaPt_"+j.str()).c_str(), ("MuonTauDeltaPt_"+j.str()).c_str(), 100, 0, 1000); _hMuonMetMt[NpdfCounter] = fs->make(("MuonMetMt_"+j.str()).c_str(), ("MuonMetMt_"+j.str()).c_str(), 100, 0, 500); _hBestMuonMetMt[NpdfCounter] = fs->make(("BestMuonMetMt_"+j.str()).c_str(), ("BestMuonMetMt_"+j.str()).c_str(), 100, 0, 500); _hTauMetMt[NpdfCounter] = fs->make(("TauMetMt_"+j.str()).c_str(), ("TauMetMt_"+j.str()).c_str(), 100, 0, 500); _hMuonTauOSLS[NpdfCounter] = fs->make(("MuonTauOSLS_"+j.str()).c_str(), ("MuonTauOSLS_"+j.str()).c_str(), 20, -10, 10); _hBestMuonTauOSLS[NpdfCounter] = fs->make(("BestMuonTauOSLS_"+j.str()).c_str(), ("BestMuonTauOSLS_"+j.str()).c_str(), 20, -10, 10); _hMuonTauCosDphi[NpdfCounter] = fs->make(("MuonTauCosDphi_"+j.str()).c_str(), ("MuonTauCosDphi_"+j.str()).c_str(), 220, -1.1, 1.1); _hBestMuonTauCosDphi[NpdfCounter] = fs->make(("BestMuonTauCosDphi_"+j.str()).c_str(), ("BestMuonTauCosDphi_"+j.str()).c_str(), 220, -1.1, 1.1); _hMuonMetDeltaPhi[NpdfCounter] = fs->make(("MuonMetDeltaPhi_"+j.str()).c_str(), ("MuonMetDeltaPhi_"+j.str()).c_str(), 72, 0, +TMath::Pi()); _hTauMetDeltaPhi[NpdfCounter] = fs->make(("TauMetDeltaPhi_"+j.str()).c_str(), ("TauMetDeltaPhi_"+j.str()).c_str(), 72, 0, +TMath::Pi()); _hMuonMetDeltaPhiVsMuonTauCosDphi[NpdfCounter] = fs->make(("MuonMetDeltaPhiVsMuonTauCosDphi_"+j.str()).c_str(), ("MuonMetDeltaPhiVsMuonTauCosDphi_"+j.str()).c_str(), 72, 0, +TMath::Pi(), 220, -1.1, 1.1); } if( ((_AnalyzeElectronForLeg1) && (_AnalyzeTauForLeg2)) || ((_AnalyzeElectronForLeg2) && (_AnalyzeTauForLeg1)) ) { _hElectronPtVsTauPt[NpdfCounter] = fs->make(("ElectronPtVsTauPt_"+j.str()).c_str(), ("ElectronPtVsTauPt_"+j.str()).c_str(), 100, 0, 500, 100, 0, 500); _hElectronTauDeltaR[NpdfCounter] = fs->make(("ElectronTauDeltaR_"+j.str()).c_str(), ("ElectronTauDeltaR_"+j.str()).c_str(), 100, 0, 5.); _hBestElectronTauDeltaR[NpdfCounter] = fs->make(("BestElectronTauDeltaR_"+j.str()).c_str(), ("BestElectronTauDeltaR_"+j.str()).c_str(), 100, 0, 5.); _hElectronTauDeltaPtDivSumPt[NpdfCounter] = fs->make(("ElectronTauDeltaPtDivSumPt_"+j.str()).c_str(), ("ElectronTauDeltaPtDivSumPt_"+j.str()).c_str(), 100, -5, 5.); _hElectronTauDeltaPt[NpdfCounter] = fs->make(("ElectronTauDeltaPt_"+j.str()).c_str(), ("ElectronTauDeltaPt_"+j.str()).c_str(), 100, 0, 1000); _hElectronMetMt[NpdfCounter] = fs->make(("ElectronMetMt_"+j.str()).c_str(), ("ElectronMetMt_"+j.str()).c_str(), 100, 0, 500); _hBestElectronMetMt[NpdfCounter] = fs->make(("BestElectronMetMt_"+j.str()).c_str(), ("BestElectronMetMt_"+j.str()).c_str(), 100, 0, 500); _hTauMetMt[NpdfCounter] = fs->make(("TauMetMt_"+j.str()).c_str(), ("TauMetMt_"+j.str()).c_str(), 100, 0, 500); _hElectronTauOSLS[NpdfCounter] = fs->make(("ElectronTauOSLS_"+j.str()).c_str(), ("ElectronTauOSLS_"+j.str()).c_str(), 20, -10, 10); _hBestElectronTauOSLS[NpdfCounter] = fs->make(("BestElectronTauOSLS_"+j.str()).c_str(), ("BestElectronTauOSLS_"+j.str()).c_str(), 20, -10, 10); _hElectronTauCosDphi[NpdfCounter] = fs->make(("ElectronTauCosDphi_"+j.str()).c_str(), ("ElectronTauCosDphi_"+j.str()).c_str(), 220, -1.1, 1.1); _hBestElectronTauCosDphi[NpdfCounter] = fs->make(("BestElectronTauCosDphi_"+j.str()).c_str(), ("BestElectronTauCosDphi_"+j.str()).c_str(), 220, -1.1, 1.1); _hElectronMetDeltaPhi[NpdfCounter] = fs->make(("ElectronMetDeltaPhi_"+j.str()).c_str(), ("ElectronMetDeltaPhi_"+j.str()).c_str(), 72, 0, +TMath::Pi()); _hTauMetDeltaPhi[NpdfCounter] = fs->make(("TauMetDeltaPhi_"+j.str()).c_str(), ("TauMetDeltaPhi_"+j.str()).c_str(), 72, 0, +TMath::Pi()); _hElectronMetDeltaPhiVsElectronTauCosDphi[NpdfCounter] = fs->make(("ElectronMetDeltaPhiVsElectronTauCosDphi_"+j.str()).c_str(), ("ElectronMetDeltaPhiVsElectronTauCosDphi_"+j.str()).c_str(), 72, 0, +TMath::Pi(), 220, -1.1, 1.1); } if( ((_AnalyzeMuonForLeg1) && (_AnalyzeElectronForLeg2)) || ((_AnalyzeMuonForLeg2) && (_AnalyzeElectronForLeg1)) ) { _hElectronPtVsMuonPt[NpdfCounter] = fs->make(("ElectronPtVsMuonPt_"+j.str()).c_str(), ("ElectronPtVsMuonPt_"+j.str()).c_str(), 100, 0, 500, 100, 0, 500); _hElectronMuonDeltaR[NpdfCounter] = fs->make(("ElectronMuonDeltaR_"+j.str()).c_str(), ("ElectronMuonDeltaR_"+j.str()).c_str(), 100, 0, 5.); _hElectronMuonDeltaPtDivSumPt[NpdfCounter] = fs->make(("ElectronMuonDeltaPtDivSumPt_"+j.str()).c_str(), ("ElectronMuonDeltaPtDivSumPt_"+j.str()).c_str(), 100, -5, 5.); _hElectronMuonDeltaPt[NpdfCounter] = fs->make(("ElectronMuonDeltaPt_"+j.str()).c_str(), ("ElectronMuonDeltaPt_"+j.str()).c_str(), 100, 0, 1000); _hElectronMetMt[NpdfCounter] = fs->make(("ElectronMetMt_"+j.str()).c_str(), ("ElectronMetMt_"+j.str()).c_str(), 100, 0, 500); _hMuonMetMt[NpdfCounter] = fs->make(("MuonMetMt_"+j.str()).c_str(), ("MuonMetMt_"+j.str()).c_str(), 100, 0, 500); _hElectronMuonOSLS[NpdfCounter] = fs->make(("ElectronMuonOSLS_"+j.str()).c_str(), ("ElectronMuonOSLS_"+j.str()).c_str(), 20, -10, 10); _hElectronMuonCosDphi[NpdfCounter] = fs->make(("ElectronMuonCosDphi_"+j.str()).c_str(), ("ElectronMuonCosDphi_"+j.str()).c_str(), 220, -1.1, 1.1); _hElectronMetDeltaPhi[NpdfCounter] = fs->make(("ElectronMetDeltaPhi_"+j.str()).c_str(), ("ElectronMetDeltaPhi_"+j.str()).c_str(), 72, 0, +TMath::Pi()); _hMuonMetDeltaPhi[NpdfCounter] = fs->make(("MuonMetDeltaPhi_"+j.str()).c_str(), ("MuonMetDeltaPhi_"+j.str()).c_str(), 72, 0, +TMath::Pi()); _hElectronMetDeltaPhiVsElectronMuonCosDphi[NpdfCounter] = fs->make(("ElectronMetDeltaPhiVsElectronMuonCosDphi_"+j.str()).c_str(), ("ElectronMetDeltaPhiVsElectronMuonCosDphi_"+j.str()).c_str(), 72, 0, +TMath::Pi(), 220, -1.1, 1.1); } if( ((_AnalyzeTauForLeg1) && (_AnalyzeTauForLeg2)) ) { _hVisMass[NpdfCounter] = fs->make(("VisMass_"+j.str()).c_str(), ("VisMass_"+j.str()).c_str(),150, 0., 1500.); _hTau1PtVsTau2Pt[NpdfCounter] = fs->make(("Tau1PtVsTau2Pt_"+j.str()).c_str(), ("Tau1PtVsTau2Pt_"+j.str()).c_str(), 100, 0, 500, 100, 0, 500); _hTau1Tau2DeltaR[NpdfCounter] = fs->make(("Tau1Tau2DeltaR_"+j.str()).c_str(), ("Tau1Tau2DeltaR_"+j.str()).c_str(), 100, 0, 5.); _hTau1Tau2DeltaPtDivSumPt[NpdfCounter] = fs->make(("Tau1Tau2DeltaPtDivSumPt_"+j.str()).c_str(), ("Tau1Tau2DeltaPtDivSumPt_"+j.str()).c_str(), 100, -5, 5.); _hTau1Tau2DeltaPt[NpdfCounter] = fs->make(("Tau1Tau2DeltaPt_"+j.str()).c_str(), ("Tau1Tau2DeltaPt_"+j.str()).c_str(), 100, 0, 1000); _hTau1MetMt[NpdfCounter] = fs->make(("Tau1MetMt_"+j.str()).c_str(), ("Tau1MetMt_"+j.str()).c_str(), 100, 0, 500); _hTau2MetMt[NpdfCounter] = fs->make(("Tau2MetMt_"+j.str()).c_str(), ("Tau2MetMt_"+j.str()).c_str(), 100, 0, 500); _hTau1Tau2OSLS[NpdfCounter] = fs->make(("Tau1Tau2OSLS_"+j.str()).c_str(), ("Tau1Tau2OSLS_"+j.str()).c_str(), 20, -10, 10); _hTau1Tau2CosDphi[NpdfCounter] = fs->make(("Tau1Tau2CosDphi_"+j.str()).c_str(), ("Tau1Tau2CosDphi_"+j.str()).c_str(), 220, -1.1, 1.1); _hTau1MetDeltaPhi[NpdfCounter] = fs->make(("Tau1MetDeltaPhi_"+j.str()).c_str(), ("Tau1MetDeltaPhi_"+j.str()).c_str(), 72, 0, +TMath::Pi()); _hTau2MetDeltaPhi[NpdfCounter] = fs->make(("Tau2MetDeltaPhi_"+j.str()).c_str(), ("Tau2MetDeltaPhi_"+j.str()).c_str(), 72, 0, +TMath::Pi()); _hTau1MetDeltaPhiVsTau1Tau2CosDphi[NpdfCounter] = fs->make(("Tau1MetDeltaPhiVsTau1Tau2CosDphi_"+j.str()).c_str(), ("Tau1MetDeltaPhiVsTau1Tau2CosDphi_"+j.str()).c_str(), 72, 0, +TMath::Pi(), 220, -1.1, 1.1); _hBestTau1Tau2DeltaR[NpdfCounter] = fs->make(("BestTau1Tau2DeltaR_"+j.str()).c_str(), ("BestTau1Tau2DeltaR_"+j.str()).c_str(), 100, 0, 5.); _hBestTau1Tau2OSLS[NpdfCounter] = fs->make(("BestTau1Tau2OSLS_"+j.str()).c_str(), ("BestTau1Tau2OSLS_"+j.str()).c_str(), 20, -10, 10); _hBestTau1Tau2CosDphi[NpdfCounter] = fs->make(("BestTau1Tau2CosDphi_"+j.str()).c_str(), ("BestTau1Tau2CosDphi_"+j.str()).c_str(), 220, -1.1, 1.1); _htau1EMFractionVsFullMass[NpdfCounter] = fs->make(("tau1EMFractionVsFullMass_"+j.str()).c_str(), ("tau1EMFractionVsFullMass_"+j.str()).c_str(), 50, 0.,1., 100,0.,500.); _htau2EMFractionVsFullMass[NpdfCounter] = fs->make(("tau2EMFractionVsFullMass_"+j.str()).c_str(), ("tau2EMFractionVsFullMass_"+j.str()).c_str(), 50, 0.,1., 100,0.,500.); // NV: distros of individual taus _htau1NTau[NpdfCounter] = fs->make(("tau1NTau_"+j.str()).c_str(), ("tau1NTau_"+j.str()).c_str(), 21, 0., 20.); _htau1TauJetEnergy[NpdfCounter] = fs->make(("tau1TauJetEnergy_"+j.str()).c_str(), ("tau1TauJetEnergy_"+j.str()).c_str(), 200, 0., 500.); _htau1TauJetPt[NpdfCounter] = fs->make(("tau1TauJetPt_"+j.str()).c_str(), ("tau1TauJetPt_"+j.str()).c_str(), 200, 0., 500.); _htau1TauJetEta[NpdfCounter] = fs->make(("tau1TauJetEta_"+j.str()).c_str(), ("tau1TauJetEta_"+j.str()).c_str(), 72, -3.6, +3.6); _htau1BestTauJetPt[NpdfCounter] = fs->make(("tau1BestTauJetPt_"+j.str()).c_str(), ("tau1BestTauJetPt_"+j.str()).c_str(), 200, 0., 500.); _htau1BestTauJetEta[NpdfCounter] = fs->make(("tau1BestTauJetEta_"+j.str()).c_str(), ("tau1BestTauJetEta_"+j.str()).c_str(), 72, -3.6, +3.6); _htau1TauJetPhi[NpdfCounter] = fs->make(("tau1TauJetPhi_"+j.str()).c_str(), ("tau1TauJetPhi_"+j.str()).c_str(), 36, -TMath::Pi(), +TMath::Pi()); _htau1TauJetNumSignalTracks[NpdfCounter] = fs->make(("tau1TauJetNumSignalTracks_"+j.str()).c_str(), ("tau1TauJetNumSignalTracks_"+j.str()).c_str(), 10, 0, 10); _htau1TauJetNumSignalGammas[NpdfCounter] = fs->make(("tau1TauJetNumSignalGammas_"+j.str()).c_str(), ("tau1TauJetNumSignalGammas_"+j.str()).c_str(), 10, 0, 10); _htau1TauJetSeedTrackPt[NpdfCounter] = fs->make(("tau1TauJetSeedTrackPt_"+j.str()).c_str(), ("tau1TauJetSeedTrackPt_"+j.str()).c_str(), 200, 0., 500.); _htau1BestTauJetSeedTrackPt[NpdfCounter] = fs->make(("tau1BestTauJetSeedTrackPt_"+j.str()).c_str(), ("tau1BestTauJetSeedTrackPt_"+j.str()).c_str(), 200, 0., 500.); _htau1TauJetSeedTrackIpSignificance[NpdfCounter] = fs->make(("tau1TauJetSeedTrackIpSignificance_"+j.str()).c_str(), ("tau1TauJetSeedTrackIpSignificance_"+j.str()).c_str(), 100, 0., 100.); _htau1TauJetSeedTrackNhits[NpdfCounter] = fs->make(("tau1TauJetSeedTrackNhits_"+j.str()).c_str(), ("tau1TauJetSeedTrackNhits_"+j.str()).c_str(), 40, 0., 40.); _htau1BestTauJetSeedTrackNhits[NpdfCounter] = fs->make(("tau1BestTauJetSeedTrackNhits_"+j.str()).c_str(), ("tau1BestTauJetSeedTrackNhits_"+j.str()).c_str(), 40, 0., 40.); _htau1TauJetSeedTrackChi2[NpdfCounter] = fs->make(("tau1TauJetSeedTrackChi2_"+j.str()).c_str(), ("tau1TauJetSeedTrackChi2_"+j.str()).c_str(), 50, 0., 100.); _htau1TauJetCharge[NpdfCounter] = fs->make(("tau1TauJetCharge_"+j.str()).c_str(), ("tau1TauJetCharge_"+j.str()).c_str(), 5, 0., 5.); _htau1TauJetSignalTracksMass[NpdfCounter] = fs->make(("tau1TauJetSignalTracksMass_"+j.str()).c_str(), ("tau1TauJetSignalTracksMass_"+j.str()).c_str(), 50, 0., 5.); _htau1TauJetSignalTracksAndGammasMass[NpdfCounter] = fs->make(("tau1TauJetSignalTracksAndGammasMass_"+j.str()).c_str(), ("tau1TauJetSignalTracksAndGammasMass_"+j.str()).c_str(), 50, 0., 5.); _htau1TauJetSignalTracksChargeFraction[NpdfCounter] = fs->make(("tau1TauJetSignalTracksChargeFraction_"+j.str()).c_str(),("tau1TauJetSignalTracksChargeFraction_"+j.str()).c_str(), 30, 0., 1.5); _htau1TauJetNumIsoTracks[NpdfCounter] = fs->make(("tau1TauJetNumIsoTracks_"+j.str()).c_str(), ("tau1TauJetNumIsoTracks_"+j.str()).c_str(), 10, 0, 10); _htau1TauJetNumIsoGammas[NpdfCounter] = fs->make(("tau1TauJetNumIsoGammas_"+j.str()).c_str(), ("tau1TauJetNumIsoGammas_"+j.str()).c_str(), 10, 0, 10); _htau1TauJetNumIsoCands[NpdfCounter] = fs->make(("tau1TauJetNumIsoCands_"+j.str()).c_str(), ("tau1TauJetNumIsoCands_"+j.str()).c_str(), 10, 0, 10); _htau1TauJetSumPtIsoTracks[NpdfCounter] = fs->make(("tau1TauJetSumPtIsoTracks_"+j.str()).c_str(), ("tau1TauJetSumPtIsoTracks_"+j.str()).c_str(), 100, 0, 50); _htau1TauJetSumPtIsoGammas[NpdfCounter] = fs->make(("tau1TauJetSumPtIsoGammas_"+j.str()).c_str(), ("tau1TauJetSumPtIsoGammas_"+j.str()).c_str(), 100, 0, 50); _htau1BestTauJetSumPtIsoTracks[NpdfCounter] = fs->make(("tau1BestTauJetSumPtIsoTracks_"+j.str()).c_str(), ("tau1BestTauJetSumPtIsoTracks_"+j.str()).c_str(), 100, 0, 50); _htau1BestTauJetSumPtIsoGammas[NpdfCounter] = fs->make(("tau1BestTauJetSumPtIsoGammas_"+j.str()).c_str(), ("tau1BestTauJetSumPtIsoGammas_"+j.str()).c_str(), 100, 0, 50); _htau1TauJetSumPtIso[NpdfCounter] = fs->make(("tau1TauJetSumPtIso_"+j.str()).c_str(), ("tau1TauJetSumPtIso_"+j.str()).c_str(), 100, 0, 50); _htau1TauJetGenTauDeltaPhi[NpdfCounter] = fs->make(("tau1TauJetGenTauDeltaPhi_"+j.str()).c_str(), ("tau1TauJetGenTauDeltaPhi_"+j.str()).c_str(), 800, -0.2, 0.2); _htau1TauJetGenTauDeltaEta[NpdfCounter] = fs->make(("tau1TauJetGenTauDeltaEta_"+j.str()).c_str(), ("tau1TauJetGenTauDeltaEta_"+j.str()).c_str(), 800, -0.2, 0.2); _htau1TauJetGenTauDeltaPt[NpdfCounter] = fs->make(("tau1TauJetGenTauDeltaPt_"+j.str()).c_str(), ("tau1TauJetGenTauDeltaPt_"+j.str()).c_str(), 500, -5, 5); _htau1TauJetSignalTracksMass1prong[NpdfCounter] = fs->make(("tau1TauJetSignalTracksMass1prong_"+j.str()).c_str(), ("tau1TauJetSignalTracksMass1prong_"+j.str()).c_str(), 50, 0., 5.); _htau1TauJetSignalTracksAndGammasMass1prong[NpdfCounter] = fs->make(("tau1TauJetSignalTracksAndGammasMass1prong_"+j.str()).c_str(), ("tau1TauJetSignalTracksAndGammasMass1prong_"+j.str()).c_str(), 50, 0., 5.); _htau1TauJetSignalTracksAndPiZerosMass1prong[NpdfCounter] = fs->make(("tau1TauJetSignalTracksAndPiZerosMass1prong_"+j.str()).c_str(), ("tau1TauJetSignalTracksAndPiZerosMass1prong_"+j.str()).c_str(), 50, 0., 5.); _htau1TauJetNumSignalPiZeros1prong[NpdfCounter] = fs->make(("tau1TauJetNumSignalPiZeros1prong_"+j.str()).c_str(), ("tau1TauJetNumSignalPiZeros1prong_"+j.str()).c_str(), 10, 0., 10.); _htau1TauJetSignalTracksMass3prong[NpdfCounter] = fs->make(("tau1TauJetSignalTracksMass3prong_"+j.str()).c_str(), ("tau1TauJetSignalTracksMass3prong_"+j.str()).c_str(), 50, 0., 5.); _htau1TauJetSignalTracksAndGammasMass3prong[NpdfCounter] = fs->make(("tau1TauJetSignalTracksAndGammasMass3prong_"+j.str()).c_str(), ("tau1TauJetSignalTracksAndGammasMass3prong_"+j.str()).c_str(), 50, 0., 5.); _htau1TauJetMass1Prong0Gamma[NpdfCounter] = fs->make(("tau1TauJetMass1Prong0Gamma_"+j.str()).c_str(), ("tau1TauJetMass1Prong0Gamma_"+j.str()).c_str(), 100, 0., 5.); _htau1TauJetMass1Prong1Gamma[NpdfCounter] = fs->make(("tau1TauJetMass1Prong1Gamma_"+j.str()).c_str(), ("tau1TauJetMass1Prong1Gamma_"+j.str()).c_str(), 100, 0., 5.); _htau1TauJetMass1Prong2orMoreGamma[NpdfCounter] = fs->make(("tau1TauJetMass1Prong2orMoreGamma_"+j.str()).c_str(), ("tau1TauJetMass1Prong2orMoreGamma_"+j.str()).c_str(), 100, 0., 5.); _htau1TauJetMass3Prong0Gamma[NpdfCounter] = fs->make(("tau1TauJetMass3Prong0Gamma_"+j.str()).c_str(), ("tau1TauJetMass3Prong0Gamma_"+j.str()).c_str(), 100, 0., 5.); _htau1TauJetMass3Prong1Gamma[NpdfCounter] = fs->make(("tau1TauJetMass3Prong1Gamma_"+j.str()).c_str(), ("tau1TauJetMass3Prong1Gamma_"+j.str()).c_str(), 100, 0., 5.); _htau1TauJetMass3Prong2orMoreGamma[NpdfCounter] = fs->make(("tau1TauJetMass3Prong2orMoreGamma_"+j.str()).c_str(), ("tau1TauJetMass3Prong2orMoreGamma_"+j.str()).c_str(), 100, 0., 5.); _htau1TauJetH3x3OverP[NpdfCounter] = fs->make(("tau1TauJetH3x3OverP_"+j.str()).c_str(), ("tau1TauJetH3x3OverP_"+j.str()).c_str(), 100, 0., 1.); _htau1TauJetEMFraction[NpdfCounter] = fs->make(("tau1TauJetEMFraction_"+j.str()).c_str(), ("tau1TauJetEMFraction_"+j.str()).c_str(), 50, 0., 1.); _htau1BestTauJetH3x3OverP[NpdfCounter] = fs->make(("tau1BestTauJetH3x3OverP_"+j.str()).c_str(), ("tau1BestTauJetH3x3OverP_"+j.str()).c_str(), 100, 0., 1.); //*** End of tau1, beginning of tau 2 ***// _htau2NTau[NpdfCounter] = fs->make(("tau2NTau_"+j.str()).c_str(), ("tau2NTau_"+j.str()).c_str(), 21, 0., 20.); _htau2TauJetEnergy[NpdfCounter] = fs->make(("tau2TauJetEnergy_"+j.str()).c_str(), ("tau2TauJetEnergy_"+j.str()).c_str(), 200, 0., 500.); _htau2TauJetPt[NpdfCounter] = fs->make(("tau2TauJetPt_"+j.str()).c_str(), ("tau2TauJetPt_"+j.str()).c_str(), 200, 0., 500.); _htau2TauJetEta[NpdfCounter] = fs->make(("tau2TauJetEta_"+j.str()).c_str(), ("tau2TauJetEta_"+j.str()).c_str(), 72, -3.6, +3.6); _htau2BestTauJetPt[NpdfCounter] = fs->make(("tau2BestTauJetPt_"+j.str()).c_str(), ("tau2BestTauJetPt_"+j.str()).c_str(), 200, 0., 500.); _htau2BestTauJetEta[NpdfCounter] = fs->make(("tau2BestTauJetEta_"+j.str()).c_str(), ("tau2BestTauJetEta_"+j.str()).c_str(), 72, -3.6, +3.6); _htau2TauJetPhi[NpdfCounter] = fs->make(("tau2TauJetPhi_"+j.str()).c_str(), ("tau2TauJetPhi_"+j.str()).c_str(), 36, -TMath::Pi(), +TMath::Pi()); _htau2TauJetNumSignalTracks[NpdfCounter] = fs->make(("tau2TauJetNumSignalTracks_"+j.str()).c_str(), ("tau2TauJetNumSignalTracks_"+j.str()).c_str(), 10, 0, 10); _htau2TauJetNumSignalGammas[NpdfCounter] = fs->make(("tau2TauJetNumSignalGammas_"+j.str()).c_str(), ("tau2TauJetNumSignalGammas_"+j.str()).c_str(), 10, 0, 10); _htau2TauJetSeedTrackPt[NpdfCounter] = fs->make(("tau2TauJetSeedTrackPt_"+j.str()).c_str(), ("tau2TauJetSeedTrackPt_"+j.str()).c_str(), 200, 0., 500.); _htau2BestTauJetSeedTrackPt[NpdfCounter] = fs->make(("tau2BestTauJetSeedTrackPt_"+j.str()).c_str(), ("tau2BestTauJetSeedTrackPt_"+j.str()).c_str(), 200, 0., 500.); _htau2TauJetSeedTrackIpSignificance[NpdfCounter] = fs->make(("tau2TauJetSeedTrackIpSignificance_"+j.str()).c_str(), ("tau2TauJetSeedTrackIpSignificance_"+j.str()).c_str(), 100, 0., 100.); _htau2TauJetSeedTrackNhits[NpdfCounter] = fs->make(("tau2TauJetSeedTrackNhits_"+j.str()).c_str(), ("tau2TauJetSeedTrackNhits_"+j.str()).c_str(), 40, 0., 40.); _htau2BestTauJetSeedTrackNhits[NpdfCounter] = fs->make(("tau2BestTauJetSeedTrackNhits_"+j.str()).c_str(), ("tau2BestTauJetSeedTrackNhits_"+j.str()).c_str(), 40, 0., 40.); _htau2TauJetSeedTrackChi2[NpdfCounter] = fs->make(("tau2TauJetSeedTrackChi2_"+j.str()).c_str(), ("tau2TauJetSeedTrackChi2_"+j.str()).c_str(), 50, 0., 100.); _htau2TauJetCharge[NpdfCounter] = fs->make(("tau2TauJetCharge_"+j.str()).c_str(), ("tau2TauJetCharge_"+j.str()).c_str(), 5, 0., 5.); _htau2TauJetSignalTracksMass[NpdfCounter] = fs->make(("tau2TauJetSignalTracksMass_"+j.str()).c_str(), ("tau2TauJetSignalTracksMass_"+j.str()).c_str(), 50, 0., 5.); _htau2TauJetSignalTracksAndGammasMass[NpdfCounter] = fs->make(("tau2TauJetSignalTracksAndGammasMass_"+j.str()).c_str(), ("tau2TauJetSignalTracksAndGammasMass_"+j.str()).c_str(), 50, 0., 5.); _htau2TauJetSignalTracksChargeFraction[NpdfCounter] = fs->make(("tau2TauJetSignalTracksChargeFraction_"+j.str()).c_str(),("tau2TauJetSignalTracksChargeFraction_"+j.str()).c_str(), 30, 0., 1.5); _htau2TauJetNumIsoTracks[NpdfCounter] = fs->make(("tau2TauJetNumIsoTracks_"+j.str()).c_str(), ("tau2TauJetNumIsoTracks_"+j.str()).c_str(), 10, 0, 10); _htau2TauJetNumIsoGammas[NpdfCounter] = fs->make(("tau2TauJetNumIsoGammas_"+j.str()).c_str(), ("tau2TauJetNumIsoGammas_"+j.str()).c_str(), 10, 0, 10); _htau2TauJetNumIsoCands[NpdfCounter] = fs->make(("tau2TauJetNumIsoCands_"+j.str()).c_str(), ("tau2TauJetNumIsoCands_"+j.str()).c_str(), 10, 0, 10); _htau2TauJetSumPtIsoTracks[NpdfCounter] = fs->make(("tau2TauJetSumPtIsoTracks_"+j.str()).c_str(), ("tau2TauJetSumPtIsoTracks_"+j.str()).c_str(), 100, 0, 50); _htau2TauJetSumPtIsoGammas[NpdfCounter] = fs->make(("tau2TauJetSumPtIsoGammas_"+j.str()).c_str(), ("tau2TauJetSumPtIsoGammas_"+j.str()).c_str(), 100, 0, 50); _htau2BestTauJetSumPtIsoTracks[NpdfCounter] = fs->make(("tau2BestTauJetSumPtIsoTracks_"+j.str()).c_str(), ("tau2BestTauJetSumPtIsoTracks_"+j.str()).c_str(), 100, 0, 50); _htau2BestTauJetSumPtIsoGammas[NpdfCounter] = fs->make(("tau2BestTauJetSumPtIsoGammas_"+j.str()).c_str(), ("tau2BestTauJetSumPtIsoGammas_"+j.str()).c_str(), 100, 0, 50); _htau2TauJetSumPtIso[NpdfCounter] = fs->make(("tau2TauJetSumPtIso_"+j.str()).c_str(), ("tau2TauJetSumPtIso_"+j.str()).c_str(), 100, 0, 50); _htau2TauJetGenTauDeltaPhi[NpdfCounter] = fs->make(("tau2TauJetGenTauDeltaPhi_"+j.str()).c_str(), ("tau2TauJetGenTauDeltaPhi_"+j.str()).c_str(), 800, -0.2, 0.2); _htau2TauJetGenTauDeltaEta[NpdfCounter] = fs->make(("tau2TauJetGenTauDeltaEta_"+j.str()).c_str(), ("tau2TauJetGenTauDeltaEta_"+j.str()).c_str(), 800, -0.2, 0.2); _htau2TauJetGenTauDeltaPt[NpdfCounter] = fs->make(("tau2TauJetGenTauDeltaPt_"+j.str()).c_str(), ("tau2TauJetGenTauDeltaPt_"+j.str()).c_str(), 500, -5, 5); _htau2TauJetSignalTracksMass1prong[NpdfCounter] = fs->make(("tau2TauJetSignalTracksMass1prong_"+j.str()).c_str(), ("tau2TauJetSignalTracksMass1prong_"+j.str()).c_str(), 50, 0., 5.); _htau2TauJetSignalTracksAndGammasMass1prong[NpdfCounter] = fs->make(("tau2TauJetSignalTracksAndGammasMass1prong_"+j.str()).c_str(), ("tau2TauJetSignalTracksAndGammasMass1prong_"+j.str()).c_str(), 50, 0., 5.); _htau2TauJetSignalTracksAndPiZerosMass1prong[NpdfCounter] = fs->make(("tau2TauJetSignalTracksAndPiZerosMass1prong_"+j.str()).c_str(), ("tau2TauJetSignalTracksAndPiZerosMass1prong_"+j.str()).c_str(), 50, 0., 5.); _htau2TauJetNumSignalPiZeros1prong[NpdfCounter] = fs->make(("tau2TauJetNumSignalPiZeros1prong_"+j.str()).c_str(), ("tau2TauJetNumSignalPiZeros1prong_"+j.str()).c_str(), 10, 0., 10.); _htau2TauJetSignalTracksMass3prong[NpdfCounter] = fs->make(("tau2TauJetSignalTracksMass3prong_"+j.str()).c_str(), ("tau2TauJetSignalTracksMass3prong_"+j.str()).c_str(), 50, 0., 5.); _htau2TauJetSignalTracksAndGammasMass3prong[NpdfCounter] = fs->make(("tau2TauJetSignalTracksAndGammasMass3prong_"+j.str()).c_str(), ("tau2TauJetSignalTracksAndGammasMass3prong_"+j.str()).c_str(), 50, 0., 5.); _htau2TauJetMass1Prong0Gamma[NpdfCounter] = fs->make(("tau2TauJetMass1Prong0Gamma_"+j.str()).c_str(), ("tau2TauJetMass1Prong0Gamma_"+j.str()).c_str(), 100, 0., 5.); _htau2TauJetMass1Prong1Gamma[NpdfCounter] = fs->make(("tau2TauJetMass1Prong1Gamma_"+j.str()).c_str(), ("tau2TauJetMass1Prong1Gamma_"+j.str()).c_str(), 100, 0., 5.); _htau2TauJetMass1Prong2orMoreGamma[NpdfCounter] = fs->make(("tau2TauJetMass1Prong2orMoreGamma_"+j.str()).c_str(), ("tau2TauJetMass1Prong2orMoreGamma_"+j.str()).c_str(), 100, 0., 5.); _htau2TauJetMass3Prong0Gamma[NpdfCounter] = fs->make(("tau2TauJetMass3Prong0Gamma_"+j.str()).c_str(), ("tau2TauJetMass3Prong0Gamma_"+j.str()).c_str(), 100, 0., 5.); _htau2TauJetMass3Prong1Gamma[NpdfCounter] = fs->make(("tau2TauJetMass3Prong1Gamma_"+j.str()).c_str(), ("tau2TauJetMass3Prong1Gamma_"+j.str()).c_str(), 100, 0., 5.); _htau2TauJetMass3Prong2orMoreGamma[NpdfCounter] = fs->make(("tau2TauJetMass3Prong2orMoreGamma_"+j.str()).c_str(), ("tau2TauJetMass3Prong2orMoreGamma_"+j.str()).c_str(), 100, 0., 5.); _htau2TauJetH3x3OverP[NpdfCounter] = fs->make(("tau2TauJetH3x3OverP_"+j.str()).c_str(), ("tau2TauJetH3x3OverP_"+j.str()).c_str(), 100, 0., 1.); _htau2TauJetEMFraction[NpdfCounter] = fs->make(("tau2TauJetEMFraction_"+j.str()).c_str(), ("tau2TauJetEMFraction_"+j.str()).c_str(), 50, 0., 1.); _htau2BestTauJetH3x3OverP[NpdfCounter] = fs->make(("tau2BestTauJetH3x3OverP_"+j.str()).c_str(), ("tau2BestTauJetH3x3OverP_"+j.str()).c_str(), 100, 0., 1.); // End of distros of individual taus } if( ((_AnalyzeMuonForLeg1) && (_AnalyzeMuonForLeg2)) ) { _hMuon1PtVsMuon2Pt[NpdfCounter] = fs->make(("Muon1PtVsMuon2Pt_"+j.str()).c_str(), ("Muon1PtVsMuon2Pt_"+j.str()).c_str(), 100, 0, 500, 100, 0, 500); _hMuon1Muon2DeltaR[NpdfCounter] = fs->make(("Muon1Muon2DeltaR_"+j.str()).c_str(), ("Muon1Muon2DeltaR_"+j.str()).c_str(), 100, 0, 5.); _hMuon1Muon2DeltaPtDivSumPt[NpdfCounter] = fs->make(("Muon1Muon2DeltaPtDivSumPt_"+j.str()).c_str(), ("Muon1Muon2DeltaPtDivSumPt_"+j.str()).c_str(), 100, -5, 5.); _hMuon1Muon2DeltaPt[NpdfCounter] = fs->make(("Muon1Muon2DeltaPt_"+j.str()).c_str(), ("Muon1Muon2DeltaPt_"+j.str()).c_str(), 100, 0, 1000); _hMuon1MetMt[NpdfCounter] = fs->make(("Muon1MetMt_"+j.str()).c_str(), ("Muon1MetMt_"+j.str()).c_str(), 100, 0, 500); _hMuon2MetMt[NpdfCounter] = fs->make(("Muon2MetMt_"+j.str()).c_str(), ("Muon2MetMt_"+j.str()).c_str(), 100, 0, 500); _hMuon1Muon2OSLS[NpdfCounter] = fs->make(("Muon1Muon2OSLS_"+j.str()).c_str(), ("Muon1Muon2OSLS_"+j.str()).c_str(), 20, -10, 10); _hMuon1Muon2CosDphi[NpdfCounter] = fs->make(("Muon1Muon2CosDphi_"+j.str()).c_str(), ("Muon1Muon2CosDphi_"+j.str()).c_str(), 220, -1.1, 1.1); _hMuon1MetDeltaPhi[NpdfCounter] = fs->make(("Muon1MetDeltaPhi_"+j.str()).c_str(), ("Muon1MetDeltaPhi_"+j.str()).c_str(), 72, 0, +TMath::Pi()); _hMuon2MetDeltaPhi[NpdfCounter] = fs->make(("Muon2MetDeltaPhi_"+j.str()).c_str(), ("Muon2MetDeltaPhi_"+j.str()).c_str(), 72, 0, +TMath::Pi()); _hMuon1MetDeltaPhiVsMuon1Muon2CosDphi[NpdfCounter] = fs->make(("Muon1MetDeltaPhiVsMuon1Muon2CosDphi_"+j.str()).c_str(), ("Muon1MetDeltaPhiVsMuon1Muon2CosDphi_"+j.str()).c_str(), 72, 0, +TMath::Pi(), 220, -1.1, 1.1); } if( ((_AnalyzeElectronForLeg1) && (_AnalyzeElectronForLeg2)) ) { _hElectron1PtVsElectron2Pt[NpdfCounter] = fs->make(("Electron1PtVsElectron2Pt_"+j.str()).c_str(), ("Electron1PtVsElectron2Pt_"+j.str()).c_str(), 100, 0, 500, 100, 0, 500); _hElectron1Electron2DeltaR[NpdfCounter] = fs->make(("Electron1Electron2DeltaR_"+j.str()).c_str(), ("Electron1Electron2DeltaR_"+j.str()).c_str(), 100, 0, 5.); _hElectron1Electron2DeltaPtDivSumPt[NpdfCounter] = fs->make(("Electron1Electron2DeltaPtDivSumPt_"+j.str()).c_str(), ("Electron1Electron2DeltaPtDivSumPt_"+j.str()).c_str(), 100, -5, 5.); _hElectron1Electron2DeltaPt[NpdfCounter] = fs->make(("Electron1Electron2DeltaPt_"+j.str()).c_str(), ("Electron1Electron2DeltaPt_"+j.str()).c_str(), 100, 0, 1000); _hElectron1MetMt[NpdfCounter] = fs->make(("Electron1MetMt_"+j.str()).c_str(), ("Electron1MetMt_"+j.str()).c_str(), 100, 0, 500); _hElectron2MetMt[NpdfCounter] = fs->make(("Electron2MetMt_"+j.str()).c_str(), ("Electron2MetMt_"+j.str()).c_str(), 100, 0, 500); _hElectron1Electron2OSLS[NpdfCounter] = fs->make(("Electron1Electron2OSLS_"+j.str()).c_str(), ("Electron1Electron2OSLS_"+j.str()).c_str(), 20, -10, 10); _hElectron1Electron2CosDphi[NpdfCounter] = fs->make(("Electron1Electron2CosDphi_"+j.str()).c_str(), ("Electron1Electron2CosDphi_"+j.str()).c_str(), 220, -1.1, 1.1); _hElectron1MetDeltaPhi[NpdfCounter] = fs->make(("Electron1MetDeltaPhi_"+j.str()).c_str(), ("Electron1MetDeltaPhi_"+j.str()).c_str(), 72, 0, +TMath::Pi()); _hElectron2MetDeltaPhi[NpdfCounter] = fs->make(("Electron2MetDeltaPhi_"+j.str()).c_str(), ("Electron2MetDeltaPhi_"+j.str()).c_str(), 72, 0, +TMath::Pi()); _hElectron1MetDeltaPhiVsElectron1Electron2CosDphi[NpdfCounter] = fs->make(("Electron1MetDeltaPhiVsElectron1Electron2CosDphi_"+j.str()).c_str(), ("Electron1MetDeltaPhiVsElectron1Electron2CosDphi_"+j.str()).c_str(), 72, 0, +TMath::Pi(), 220, -1.1, 1.1); } /* _hTauJetSumPtIso_SeedOS[NpdfCounter] = fs->make(("TauJetSumPtIso_SeedOS_"+j.str()).c_str(), ("TauJetSumPtIso_SeedOS_"+j.str()).c_str(), 100, 0, 50); _hTauJetSumPtIso_JetOS[NpdfCounter] = fs->make(("TauJetSumPtIso_JetOS_"+j.str()).c_str(), ("TauJetSumPtIso_JetOS_"+j.str()).c_str(), 100, 0, 50); _hTauJetSumPtIso_SeedLS[NpdfCounter] = fs->make(("TauJetSumPtIso_SeedLS_"+j.str()).c_str(), ("TauJetSumPtIso_SeedLS_"+j.str()).c_str(), 100, 0, 50); _hTauJetSumPtIso_JetLS[NpdfCounter] = fs->make(("TauJetSumPtIso_JetLS_"+j.str()).c_str(), ("TauJetSumPtIso_JetLS_"+j.str()).c_str(), 100, 0, 50); */ _hNotReconstructableMass[NpdfCounter] = fs->make(("NotReconstructableMass_"+j.str()).c_str(), ("NotReconstructableMass_"+j.str()).c_str(), 150, 0, 1500); _hReconstructableMass[NpdfCounter] = fs->make(("ReconstructableMass_"+j.str()).c_str(), ("ReconstructableMass_"+j.str()).c_str(), 150, 0, 1500); _hRecoMassTau1MET[NpdfCounter] = fs->make(("RecoMassTau1MET_"+j.str()).c_str(), ("RecoMassTau1MET_"+j.str()).c_str(), 300, 0, 300); _hRecoMassTau2MET[NpdfCounter] = fs->make(("RecoMassTau2MET_"+j.str()).c_str(), ("RecoMassTau2MET_"+j.str()).c_str(), 300, 0, 300); _hPZeta[NpdfCounter] = fs->make(("PZeta_"+j.str()).c_str(), ("PZeta_"+j.str()).c_str(), 200, -100, 100); _hPZetaTemplate[NpdfCounter] = fs->make(("PZetaTemplate_"+j.str()).c_str(), ("PZeta_"+j.str()).c_str(), 200, -100, 100); _hPZetaVis[NpdfCounter] = fs->make(("PZetaVis_"+j.str()).c_str(), ("PZetaVis_"+j.str()).c_str(), 100, 0, 100); _hZeta2D[NpdfCounter] = fs->make(("Zeta2D_"+j.str()).c_str(), ("Zeta2D_"+j.str()).c_str(), 100, 0, 100, 200, -100, 100); _hZeta1D[NpdfCounter] = fs->make(("Zeta1D_"+j.str()).c_str(), ("Zeta1D_"+j.str()).c_str(), 50, -100, 100); _hBestZeta1D[NpdfCounter] = fs->make(("BestZeta1D_"+j.str()).c_str(), ("BestZeta1D_"+j.str()).c_str(), 50, -100, 100); _hMet[NpdfCounter] = fs->make(("Met_"+j.str()).c_str(), ("Met_"+j.str()).c_str(), 100, 0, 1000); } j.str(""); } } // Return whether the leg passes the prong reruirements specified bool HiMassTauAnalysis::passTauProngRequirement(const pat::Tau& patTau, string prongRequirement) { bool resultTau = false; bool passTau_1Prongs = false; bool passTau_2Prongs = false; bool passTau_3Prongs = false; int numTracksTau = 0; // Get the number of tracks from the appropriate collection if (patTau.isCaloTau()) { numTracksTau = patTau.signalTracks().size(); } else { numTracksTau = patTau.signalPFChargedHadrCands().size(); } // Figure out what we're looking for and what we have passTau_1Prongs = ((prongRequirement.find("1")) > prongRequirement.length() ) && ( numTracksTau == 1 ); // Only true when we are indeed interested in 1 prongs and we have a 1 prong passTau_2Prongs = ((prongRequirement.find("2")) > prongRequirement.length() ) && ( numTracksTau == 2 ); // Only true when we are indeed interested in 2 prongs and we have a 2 prong passTau_3Prongs = ((prongRequirement.find("3")) > prongRequirement.length() ) && ( numTracksTau == 3 ); // Only true when we are indeed interested in 3 prongs and we have a 3 prong resultTau = (passTau_1Prongs || passTau_2Prongs) || passTau_3Prongs; // If any of the conditions is true for leg 1 return resultTau; } // ------------ method called once each job just after ending the event loop ------------ void HiMassTauAnalysis::endJob() { printEfficiency(); //std::cout << "NW_R: " << _nWRCounter << "\t NTauWR :" << _nTauWRCounter << "\t NHeavyNu: " << _nHeavyNuCounter //<< "\t NTauHeavyNu: " << _nTauHeavyNuCounter << std::endl; if(_CalculatePdfSystematicUncertanties) { std::cout << "------------------------------PDFAnalysis------------------------------" << std::endl; std::cout << "PDF uncertainties will be determined for the following sets: "; std::cout << "" << std::endl; std::cout << "" << std::endl; std::cout << "---------------------------------------------------------------------------\n"; std::cout << "PDF weight systematics summary (Denominator)" << std::endl; std::cout << "---------------------------------------------------------------------------\n"; std::cout << "Analyzed data (reference): " << _totalEvents << " [events]" << std::endl; if (_totalEvents==0) return; for (unsigned int i=0; i" << std::endl; double events_central = weightedEvents_Denominator_[pdfStart_Denominator_[i]]; std::cout << "\tEstimate for central PDF member: " << int(events_central) << " [events]" << std::endl; std::cout << "\ti.e. " << std::setprecision(4) << 100*(events_central/_totalEvents-1.) << "% variation with respect to original PDF" << std::endl; if (npairs>0) { std::cout << "\tNumber of eigenvectors for uncertainty estimation: " << npairs << std::endl; double wplus = 0.; double wminus = 0.; for (unsigned int j=0; jwb) { if (wa<0.) wa = 0.; if (wb>0.) wb = 0.; wplus += wa*wa; wminus += wb*wb; } else { if (wb<0.) wb = 0.; if (wa>0.) wa = 0.; wplus += wb*wb; wminus += wa*wa; } } if (wplus>0) wplus = sqrt(wplus); if (wminus>0) wminus = sqrt(wminus); std::cout << "\tRelative uncertainty with respect to central member: +" << std::setprecision(4) << 100.*wplus << " / -" << std::setprecision(4) << 100.*wminus << " [%]" << std::endl; } else {std::cout << "\tNO eigenvectors for uncertainty estimation" << std::endl;} } std::cout << "End of PDF weight systematics summary (Denominator)" << std::endl; std::cout << "" << std::endl; std::cout << "---------------------------------------------------------------------------\n"; std::cout << "PDF weight systematics summary (Numerator)" << std::endl; std::cout << "---------------------------------------------------------------------------\n"; std::cout << "Analyzed data (reference): " << _totalEventsPassingCuts << " [events]" << std::endl; if (_totalEventsPassingCuts==0) return; for (unsigned int i=0; i" << std::endl; double events_central = weightedEvents_Numerator_[pdfStart_Numerator_[i]]; std::cout << "\tEstimate for central PDF member: " << int(events_central) << " [events]" << std::endl; std::cout << "\ti.e. " << std::setprecision(4) << 100*(events_central/_totalEventsPassingCuts-1.) << "% variation with respect to original PDF" << std::endl; if (npairs>0) { std::cout << "\tNumber of eigenvectors for uncertainty estimation: " << npairs << std::endl; double wplus = 0.; double wminus = 0.; for (unsigned int j=0; jwb) { if (wa<0.) wa = 0.; if (wb>0.) wb = 0.; wplus += wa*wa; wminus += wb*wb; } else { if (wb<0.) wb = 0.; if (wa>0.) wa = 0.; wplus += wb*wb; wminus += wa*wa; } } if (wplus>0) wplus = sqrt(wplus); if (wminus>0) wminus = sqrt(wminus); std::cout << "\tRelative uncertainty with respect to central member: +" << std::setprecision(4) << 100.*wplus << " / -" << std::setprecision(4) << 100.*wminus << " [%]" << std::endl; } else {std::cout << "\tNO eigenvectors for uncertainty estimation" << std::endl;} } std::cout << "End of PDF weight systematics summary (Numerator)" << std::endl; } } HiMassTauAnalysis::~HiMassTauAnalysis() { } //define this as a plug-in DEFINE_FWK_MODULE(HiMassTauAnalysis);