diff --git a/RecoTauTag/HLTProducers/interface/L1THLTTauMatching.h b/RecoTauTag/HLTProducers/interface/L1THLTTauMatching.h index f1db27af5b15b..dc6c18e44e187 100644 --- a/RecoTauTag/HLTProducers/interface/L1THLTTauMatching.h +++ b/RecoTauTag/HLTProducers/interface/L1THLTTauMatching.h @@ -28,5 +28,7 @@ class L1THLTTauMatching : public edm::global::EDProducer<> { const edm::EDGetTokenT jetSrc; const edm::EDGetTokenT tauTrigger; const double mEt_Min; + const bool reduceTauContent; + const bool keepOriginalVertex; }; #endif diff --git a/RecoTauTag/HLTProducers/python/deepTauAtHLT.py b/RecoTauTag/HLTProducers/python/deepTauAtHLT.py index 5bc006fc64035..93583d09604d4 100644 --- a/RecoTauTag/HLTProducers/python/deepTauAtHLT.py +++ b/RecoTauTag/HLTProducers/python/deepTauAtHLT.py @@ -17,7 +17,7 @@ def update(process): process.options.wantSummary = cms.untracked.bool(True) - process.hltFixedGridRhoFastjetAll = cms.EDProducer( "FixedGridRhoProducerFastjet", + process.hltFixedGridRhoFastjetAllTau = cms.EDProducer( "FixedGridRhoProducerFastjet", gridSpacing = cms.double( 0.55 ), maxRapidity = cms.double( 5.0 ), pfCandidatesTag = cms.InputTag( "hltParticleFlowReg" ) @@ -35,9 +35,9 @@ def update(process): ) ## Cut based isolations dR=0.5 - process.hpsPFTauBasicDiscriminators = pfRecoTauDiscriminationByIsolation.clone( - PFTauProducer = 'hltHpsPFTauProducerReg', - Prediscriminants = requireDecayMode.clone(), + process.hpsPFTauBasicDiscriminatorsForDeepTau = pfRecoTauDiscriminationByIsolation.clone( + PFTauProducer = 'hltHpsL1JetsHLTForDeepTauInput', + Prediscriminants = cms.PSet( BooleanOperator = cms.string( "and" ) ), deltaBetaPUTrackPtCutOverride = True, # Set the boolean = True to override. deltaBetaPUTrackPtCutOverride_val = 0.5, # Set the value for new value. particleFlowSrc = 'hltParticleFlowReg', @@ -80,11 +80,11 @@ def update(process): ) ## Cut based isolations dR=0.3 - process.hpsPFTauBasicDiscriminatorsdR03 = process.hpsPFTauBasicDiscriminators.clone( + process.hpsPFTauBasicDiscriminatorsdR03ForDeepTau = process.hpsPFTauBasicDiscriminatorsForDeepTau.clone( customOuterCone = 0.3 ) - process.hpsPFTauPrimaryVertexProducer = PFTauPrimaryVertexProducer.clone( + process.hpsPFTauPrimaryVertexProducerForDeepTau = PFTauPrimaryVertexProducer.clone( PFTauTag = "hltHpsPFTauProducerReg", ElectronTag = "hltEgammaCandidates", MuonTag = "hltMuonsReg", @@ -100,41 +100,132 @@ def update(process): qualityCuts = PFTauQualityCuts ) - process.hpsPFTauSecondaryVertexProducer = PFTauSecondaryVertexProducer.clone( + process.hpsPFTauSecondaryVertexProducerForDeepTau = PFTauSecondaryVertexProducer.clone( PFTauTag = "hltHpsPFTauProducerReg" ) - process.hpsPFTauTransverseImpactParameters = PFTauTransverseImpactParameters.clone( + process.hpsPFTauTransverseImpactParametersForDeepTau = PFTauTransverseImpactParameters.clone( PFTauTag = "hltHpsPFTauProducerReg", - PFTauPVATag = "hpsPFTauPrimaryVertexProducer", - PFTauSVATag = "hpsPFTauSecondaryVertexProducer", + PFTauPVATag = "hpsPFTauPrimaryVertexProducerForDeepTau", + PFTauSVATag = "hpsPFTauSecondaryVertexProducerForDeepTau", useFullCalculation = True ) + chargedIsolationQualityCuts = PFTauQualityCuts.clone( + isolationQualityCuts = cms.PSet( + maxDeltaZ = cms.double( 0.2 ), + minTrackPt = cms.double( 0.5 ), + minGammaEt = cms.double( 0.5 ), + minTrackHits = cms.uint32( 3 ), + minTrackPixelHits = cms.uint32( 0 ), + maxTrackChi2 = cms.double( 100.0 ), + maxTransverseImpactParameter = cms.double( 0.1 ), + useTracksInsteadOfPFHadrons = cms.bool( False ) + ), + primaryVertexSrc = cms.InputTag( "hltPixelVertices" ), + signalQualityCuts = cms.PSet( + maxDeltaZ = cms.double( 0.2 ), + minTrackPt = cms.double( 0.0 ), + minGammaEt = cms.double( 0.5 ), + minTrackHits = cms.uint32( 3 ), + minTrackPixelHits = cms.uint32( 0 ), + maxTrackChi2 = cms.double( 1000.0 ), + maxTransverseImpactParameter = cms.double( 0.2 ), + useTracksInsteadOfPFHadrons = cms.bool( False ), + minNeutralHadronEt = cms.double( 1.0 ) + ), + vxAssocQualityCuts = cms.PSet( + minTrackPt = cms.double( 0.0 ), + minGammaEt = cms.double( 0.5 ), + minTrackHits = cms.uint32( 3 ), + minTrackPixelHits = cms.uint32( 0 ), + maxTrackChi2 = cms.double( 1000.0 ), + maxTransverseImpactParameter = cms.double( 0.2 ), + useTracksInsteadOfPFHadrons = cms.bool( False ) + ), + ) + + process.hltHpsL1JetsHLTForDeepTauInput = process.hltHpsL1JetsHLTDoublePFTauTrackPt1MediumChargedIsolationMatchReg.clone( + JetSrc = cms.InputTag('hltHpsPFTauProducerReg'), + ReduceTauContent = cms.bool(False), + KeepOriginalVertex = cms.bool(True), + ) + file_names = [ 'core:RecoTauTag/TrainingFiles/data/DeepTauId/deepTau_2017v2p6_e6_core.pb', 'inner:RecoTauTag/TrainingFiles/data/DeepTauId/deepTau_2017v2p6_e6_inner.pb', 'outer:RecoTauTag/TrainingFiles/data/DeepTauId/deepTau_2017v2p6_e6_outer.pb', ] - working_points = ["0.", "0.92"] + def getLinExpression(x1, x2, y1, y2): + return "(((({3}-{2})/({1}-{0}))*(pt-{0}))+{2})".format(x1, x2, y1, y2) + + val1, val2 = ("0.49948551", "0.125") + working_points = ["return {0}*(pt < 35)+".format(val1)+getLinExpression("35", "300", val1, val2)+ "*(35 <= pt && pt < 300) + {0}*(pt >= 300);".format(val2)] + working_points = ["return 0.49948551*(pt < 35)+(-0.00141315*(pt-35)+0.49948551)*(35 <= pt && pt < 300) + 0.125*(pt >= 300);"] process.deepTauProducer = DeepTau.clone( - taus = 'hltHpsPFTauProducerReg', + taus = 'hltHpsL1JetsHLTForDeepTauInput', + # taus = 'hltHpsPFTauProducerReg', pfcands = 'hltParticleFlowReg', vertices = 'hltPixelVertices', - rho = 'hltFixedGridRhoFastjetAll', + rho = 'hltFixedGridRhoFastjetAllTau', graph_file = file_names, disable_dxy_pca = cms.bool(True), is_online = cms.bool(True), - basicTauDiscriminators = 'hpsPFTauBasicDiscriminators', - basicTauDiscriminatorsdR03 = 'hpsPFTauBasicDiscriminatorsdR03', - Prediscriminants = requireDecayMode.clone(), + basicTauDiscriminators = 'hpsPFTauBasicDiscriminatorsForDeepTau', + basicTauDiscriminatorsdR03 = 'hpsPFTauBasicDiscriminatorsdR03ForDeepTau', + pfTauTransverseImpactParameters = 'hpsPFTauTransverseImpactParametersForDeepTau', + Prediscriminants = cms.PSet( BooleanOperator = cms.string( "and" ) ), VSeWP = working_points, VSmuWP = working_points, VSjetWP = working_points ) # Add DeepTauProducer - process.HLTHPSMediumChargedIsoPFTauSequenceReg += (process.hpsPFTauPrimaryVertexProducer + process.hpsPFTauSecondaryVertexProducer + process.hpsPFTauTransverseImpactParameters + process.hltFixedGridRhoFastjetAll + process.hpsPFTauBasicDiscriminators + process.hpsPFTauBasicDiscriminatorsdR03 + process.deepTauProducer) + process.HLTHPSDeepTau35IsoPFTauSequenceReg = cms.Sequence(process.hpsPFTauPrimaryVertexProducerForDeepTau + process.hpsPFTauSecondaryVertexProducerForDeepTau + process.hpsPFTauTransverseImpactParametersForDeepTau + process.hltFixedGridRhoFastjetAllTau + process.hltHpsL1JetsHLTForDeepTauInput + process.hpsPFTauBasicDiscriminatorsForDeepTau + process.hpsPFTauBasicDiscriminatorsdR03ForDeepTau + process.deepTauProducer) + process.hltHpsSelectedPFTausTrackPt1DeepTau35IsolationReg = process.hltHpsSelectedPFTausTrackPt1MediumChargedIsolationReg.clone( + discriminators = [], + # discriminators = [ + # cms.PSet( + # discriminator = cms.InputTag( "hltHpsPFTauTrackPt1DiscriminatorReg" ), + # selectionCut = cms.double( 0.5 ) + # ) + # ], + src = 'hltHpsL1JetsHLTForDeepTauInput', + discriminatorContainers = [ + cms.PSet( + discriminator = cms.InputTag( "deepTauProducer", "VSjet" ), + rawValues = cms.vstring(), + selectionCuts = cms.vdouble(), + workingPoints = cms.vstring(working_points), + ) + ] + ) + + process.hltHpsDoublePFTau35TrackPt1DeepTau35IsolationReg = process.hltHpsDoublePFTau35TrackPt1MediumChargedIsolationReg.clone( + inputTag = "hltHpsSelectedPFTausTrackPt1DeepTau35IsolationReg", + ) + + process.hltHpsL1JetsHLTDoublePFTauTrackPt1DeepTauMatchReg = process.hltHpsL1JetsHLTDoublePFTauTrackPt1MediumChargedIsolationMatchReg.clone( + JetSrc = "hltHpsSelectedPFTausTrackPt1DeepTau35IsolationReg", + ) + + process.hltHpsDoublePFTau35TrackPt1DeepTauL1HLTMatchedReg = process.hltHpsDoublePFTau35TrackPt1MediumChargedIsolationL1HLTMatchedReg.clone( + inputTag = "hltHpsL1JetsHLTDoublePFTauTrackPt1DeepTauMatchReg", + ) + + process.hltHpsDoublePFTau35TrackPt1DeepTau35IsolationDz02Reg = process.hltHpsDoublePFTau35TrackPt1MediumChargedIsolationDz02Reg.clone( + JetSrc = "hltHpsL1JetsHLTDoublePFTauTrackPt1DeepTauMatchReg" + ) + + process.HLT_DoubleMediumChargedIsoPFTauHPS35_Trk1_eta2p1_Reg_v4.remove(process.HLTHPSMediumChargedIsoPFTauSequenceReg) + process.HLT_DoubleMediumChargedIsoPFTauHPS35_Trk1_eta2p1_Reg_v4.remove(process.hltHpsSelectedPFTausTrackPt1MediumChargedIsolationReg) + process.HLT_DoubleMediumChargedIsoPFTauHPS35_Trk1_eta2p1_Reg_v4.remove(process.hltHpsDoublePFTau35TrackPt1MediumChargedIsolationReg) + process.HLT_DoubleMediumChargedIsoPFTauHPS35_Trk1_eta2p1_Reg_v4.remove(process.hltHpsL1JetsHLTDoublePFTauTrackPt1MediumChargedIsolationMatchReg) + process.HLT_DoubleMediumChargedIsoPFTauHPS35_Trk1_eta2p1_Reg_v4.remove(process.hltHpsDoublePFTau35TrackPt1MediumChargedIsolationL1HLTMatchedReg) + process.HLT_DoubleMediumChargedIsoPFTauHPS35_Trk1_eta2p1_Reg_v4.remove(process.hltHpsDoublePFTau35TrackPt1MediumChargedIsolationDz02Reg) + process.HLT_DoubleMediumChargedIsoPFTauHPS35_Trk1_eta2p1_Reg_v4.remove(process.HLTEndSequence) + + process.HLT_DoubleMediumChargedIsoPFTauHPS35_Trk1_eta2p1_Reg_v4 += (process.HLTHPSDeepTau35IsoPFTauSequenceReg + process.hltHpsSelectedPFTausTrackPt1DeepTau35IsolationReg + process.hltHpsDoublePFTau35TrackPt1DeepTau35IsolationReg + process.hltHpsL1JetsHLTDoublePFTauTrackPt1DeepTauMatchReg + process.hltHpsDoublePFTau35TrackPt1DeepTauL1HLTMatchedReg + process.hltHpsDoublePFTau35TrackPt1DeepTau35IsolationDz02Reg + process.HLTEndSequence) return process diff --git a/RecoTauTag/HLTProducers/src/L1THLTTauMatching.cc b/RecoTauTag/HLTProducers/src/L1THLTTauMatching.cc index d42925be9a3f9..4503d1b5270fe 100644 --- a/RecoTauTag/HLTProducers/src/L1THLTTauMatching.cc +++ b/RecoTauTag/HLTProducers/src/L1THLTTauMatching.cc @@ -3,6 +3,7 @@ #include "DataFormats/HLTReco/interface/TriggerTypeDefs.h" #include "FWCore/Utilities/interface/EDMException.h" #include "DataFormats/TauReco/interface/PFTau.h" +#include "DataFormats/Common/interface/RefVector.h" // // class decleration @@ -15,7 +16,9 @@ using namespace trigger; L1THLTTauMatching::L1THLTTauMatching(const edm::ParameterSet& iConfig) : jetSrc(consumes(iConfig.getParameter("JetSrc"))), tauTrigger(consumes(iConfig.getParameter("L1TauTrigger"))), - mEt_Min(iConfig.getParameter("EtMin")) { + mEt_Min(iConfig.getParameter("EtMin")), + reduceTauContent(iConfig.getParameter("ReduceTauContent")), + keepOriginalVertex(iConfig.getParameter("KeepOriginalVertex")){ produces(); } L1THLTTauMatching::~L1THLTTauMatching() {} @@ -47,9 +50,20 @@ void L1THLTTauMatching::produce(edm::StreamID iSId, edm::Event& iEvent, const ed if (myJet.leadChargedHadrCand().isNonnull()) { a = myJet.leadChargedHadrCand()->vertex(); } - PFTau myPFTau(std::numeric_limits::quiet_NaN(), myJet.p4(), a); - if (myJet.pt() > mEt_Min) { - tauL2jets->push_back(myPFTau); + + PFTau myPFTau; + if (reduceTauContent) { + myPFTau = PFTau(std::numeric_limits::quiet_NaN(), myJet.p4(), myJet.vertex()); + } else { + myPFTau = PFTau(myJet); + } + + if (!keepOriginalVertex) { + myPFTau.setVertex(a); + } + + if (myPFTau.pt() > mEt_Min) { + tauL2jets->push_back(myJet); } break; } @@ -66,8 +80,10 @@ void L1THLTTauMatching::fillDescriptions(edm::ConfigurationDescriptions& descrip desc.add("JetSrc", edm::InputTag("hltSelectedPFTausTrackPt1MediumIsolationReg")) ->setComment("Input collection of PFTaus"); desc.add("EtMin", 0.0)->setComment("Minimal pT of PFTau to match"); + desc.add("ReduceTauContent", true)->setComment("Should produce taus with reduced content (Only p4 and vertex)"); + desc.add("KeepOriginalVertex", false)->setComment("Should use original vertex instead of setting the vertex to that of the leading charged hadron"); descriptions.setComment( - "This module produces collection of PFTaus matched to L1 Taus / Jets passing a HLT filter (Only p4 and vertex of " - "returned PFTaus are set)."); + "This module produces collection of PFTaus matched to L1 Taus / Jets passing a HLT filter."); descriptions.add("L1THLTTauMatching", desc); } +