Skip to content

Commit

Permalink
Merge pull request cms-sw#152 from lwezenbe/CMSSW_12_0_X_RefVectorL1M…
Browse files Browse the repository at this point in the history
…atcherv2

Add switch in L1 matcher to produce full PFtaus
  • Loading branch information
mbluj committed Oct 7, 2021
2 parents 8c5d4c0 + a8873c7 commit 488b70b
Show file tree
Hide file tree
Showing 3 changed files with 132 additions and 23 deletions.
2 changes: 2 additions & 0 deletions RecoTauTag/HLTProducers/interface/L1THLTTauMatching.h
Original file line number Diff line number Diff line change
Expand Up @@ -28,5 +28,7 @@ class L1THLTTauMatching : public edm::global::EDProducer<> {
const edm::EDGetTokenT<reco::PFTauCollection> jetSrc;
const edm::EDGetTokenT<trigger::TriggerFilterObjectWithRefs> tauTrigger;
const double mEt_Min;
const bool reduceTauContent;
const bool keepOriginalVertex;
};
#endif
125 changes: 108 additions & 17 deletions RecoTauTag/HLTProducers/python/deepTauAtHLT.py
Original file line number Diff line number Diff line change
Expand Up @@ -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" )
Expand All @@ -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',
Expand Down Expand Up @@ -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",
Expand All @@ -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
28 changes: 22 additions & 6 deletions RecoTauTag/HLTProducers/src/L1THLTTauMatching.cc
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -15,7 +16,9 @@ using namespace trigger;
L1THLTTauMatching::L1THLTTauMatching(const edm::ParameterSet& iConfig)
: jetSrc(consumes<PFTauCollection>(iConfig.getParameter<InputTag>("JetSrc"))),
tauTrigger(consumes<trigger::TriggerFilterObjectWithRefs>(iConfig.getParameter<InputTag>("L1TauTrigger"))),
mEt_Min(iConfig.getParameter<double>("EtMin")) {
mEt_Min(iConfig.getParameter<double>("EtMin")),
reduceTauContent(iConfig.getParameter<bool>("ReduceTauContent")),
keepOriginalVertex(iConfig.getParameter<bool>("KeepOriginalVertex")){
produces<PFTauCollection>();
}
L1THLTTauMatching::~L1THLTTauMatching() {}
Expand Down Expand Up @@ -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<int>::quiet_NaN(), myJet.p4(), a);
if (myJet.pt() > mEt_Min) {
tauL2jets->push_back(myPFTau);

PFTau myPFTau;
if (reduceTauContent) {
myPFTau = PFTau(std::numeric_limits<int>::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;
}
Expand All @@ -66,8 +80,10 @@ void L1THLTTauMatching::fillDescriptions(edm::ConfigurationDescriptions& descrip
desc.add<edm::InputTag>("JetSrc", edm::InputTag("hltSelectedPFTausTrackPt1MediumIsolationReg"))
->setComment("Input collection of PFTaus");
desc.add<double>("EtMin", 0.0)->setComment("Minimal pT of PFTau to match");
desc.add<bool>("ReduceTauContent", true)->setComment("Should produce taus with reduced content (Only p4 and vertex)");
desc.add<bool>("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);
}

0 comments on commit 488b70b

Please sign in to comment.