CMS 3D CMS Logo

List of all members | Public Member Functions | Static Public Member Functions | Private Member Functions | Private Attributes
L1NNTauProducer Class Reference
Inheritance diagram for L1NNTauProducer:
edm::stream::EDProducer< edm::GlobalCache< tensorflow::SessionCache > >

Public Member Functions

 L1NNTauProducer (const edm::ParameterSet &, const tensorflow::SessionCache *)
 
 ~L1NNTauProducer () override
 
- Public Member Functions inherited from edm::stream::EDProducer< edm::GlobalCache< tensorflow::SessionCache > >
 EDProducer ()=default
 
 EDProducer (const EDProducer &)=delete
 
bool hasAbilityToProduceInBeginLumis () const final
 
bool hasAbilityToProduceInBeginProcessBlocks () const final
 
bool hasAbilityToProduceInBeginRuns () const final
 
bool hasAbilityToProduceInEndLumis () const final
 
bool hasAbilityToProduceInEndProcessBlocks () const final
 
bool hasAbilityToProduceInEndRuns () const final
 
const EDProduceroperator= (const EDProducer &)=delete
 

Static Public Member Functions

static void fillDescriptions (edm::ConfigurationDescriptions &descriptions)
 
static void globalEndJob (const tensorflow::SessionCache *)
 
static std::unique_ptr< tensorflow::SessionCacheinitializeGlobalCache (const edm::ParameterSet &)
 

Private Member Functions

void addTau (const l1t::PFCandidate &iCand, const l1t::PFCandidateCollection &iParts, std::unique_ptr< PFTauCollection > &outputTaus)
 
void produce (edm::Event &iEvent, const edm::EventSetup &iSetup) override
 

Private Attributes

double fConeSize_
 
edm::EDGetTokenT< vector< l1t::PFCandidate > > fL1PFToken_
 
int fMaxTaus_
 
int fNParticles_
 
double fSeedPt_
 
std::unique_ptr< TauNNIdfTauNNId_
 
double fTauSize_
 

Additional Inherited Members

- Public Types inherited from edm::stream::EDProducer< edm::GlobalCache< tensorflow::SessionCache > >
using CacheTypes = CacheContexts< T... >
 
using GlobalCache = typename CacheTypes::GlobalCache
 
using HasAbility = AbilityChecker< T... >
 
using InputProcessBlockCache = typename CacheTypes::InputProcessBlockCache
 
using LuminosityBlockCache = typename CacheTypes::LuminosityBlockCache
 
using LuminosityBlockContext = LuminosityBlockContextT< LuminosityBlockCache, RunCache, GlobalCache >
 
using LuminosityBlockSummaryCache = typename CacheTypes::LuminosityBlockSummaryCache
 
using RunCache = typename CacheTypes::RunCache
 
using RunContext = RunContextT< RunCache, GlobalCache >
 
using RunSummaryCache = typename CacheTypes::RunSummaryCache
 

Detailed Description

Definition at line 17 of file L1NNTauProducer.cc.

Constructor & Destructor Documentation

◆ L1NNTauProducer()

L1NNTauProducer::L1NNTauProducer ( const edm::ParameterSet cfg,
const tensorflow::SessionCache cache 
)
explicit

Definition at line 43 of file L1NNTauProducer.cc.

References utilities::cache(), looper::cfg, fNParticles_, fTauNNId_, and AlCaHLTBitMon_QueryRunRegistry::string.

44  : fSeedPt_(cfg.getParameter<double>("seedpt")),
45  fConeSize_(cfg.getParameter<double>("conesize")),
46  fTauSize_(cfg.getParameter<double>("tausize")),
47  fMaxTaus_(cfg.getParameter<int>("maxtaus")),
48  fNParticles_(cfg.getParameter<int>("nparticles")),
49  fL1PFToken_(consumes<vector<l1t::PFCandidate>>(cfg.getParameter<edm::InputTag>("L1PFObjects"))) {
50  std::string lNNFile = cfg.getParameter<std::string>("NNFileName"); //,"L1Trigger/Phase2L1Taus/data/tau_3layer.pb");
51  fTauNNId_ = std::make_unique<TauNNId>(lNNFile.find("v0") == std::string::npos ? "input_1:0" : "dense_1_input:0",
52  cache->getSession(),
53  lNNFile,
54  fNParticles_);
55  produces<l1t::PFTauCollection>("L1PFTausNN");
56 }
edm::EDGetTokenT< vector< l1t::PFCandidate > > fL1PFToken_
std::unique_ptr< TauNNId > fTauNNId_
def cache(function)
Definition: utilities.py:3

◆ ~L1NNTauProducer()

L1NNTauProducer::~L1NNTauProducer ( )
override

Definition at line 155 of file L1NNTauProducer.cc.

155 {}

Member Function Documentation

◆ addTau()

void L1NNTauProducer::addTau ( const l1t::PFCandidate iCand,
const l1t::PFCandidateCollection iParts,
std::unique_ptr< PFTauCollection > &  outputTaus 
)
private

Definition at line 114 of file L1NNTauProducer.cc.

References l1t::PFCandidate::ChargedHadron, reco::deltaR2(), l1t::PFCandidate::Electron, fConeSize_, fSeedPt_, fTauNNId_, fTauSize_, mps_fire::i, dqmiolumiharvest::j, mkfit::NN, l1t::PFCandidate::Photon, and jetUpdater_cfi::sort.

Referenced by produce().

116  {
117  l1t::PFCandidateCollection pfTauCands;
118  math::PtEtaPhiMLorentzVector lTot(0, 0, 0, 0);
119  math::PtEtaPhiMLorentzVector lCand(0, 0, 0, 0);
120  int lId = 0;
121  for (const auto& l1PFCand : iParts) {
122  if (reco::deltaR2(iCand, l1PFCand) > fConeSize_ * fConeSize_)
123  continue;
124  math::PtEtaPhiMLorentzVector pVec(l1PFCand.pt(), l1PFCand.eta(), l1PFCand.phi(), 0);
125  lTot += pVec;
126  if (reco::deltaR2(iCand, l1PFCand) < fTauSize_ * fTauSize_ &&
127  (l1PFCand.id() == l1t::PFCandidate::Electron || l1PFCand.id() == l1t::PFCandidate::ChargedHadron ||
128  l1PFCand.id() == l1t::PFCandidate::Photon)) {
129  lId++;
130  lCand += pVec;
131  }
132  pfTauCands.push_back(l1PFCand);
133  }
134  if (lTot.Pt() < fSeedPt_)
135  return;
136  std::sort(
137  pfTauCands.begin(), pfTauCands.end(), [](l1t::PFCandidate i, l1t::PFCandidate j) { return (i.pt() > j.pt()); });
138  float NN = fTauNNId_->compute(iCand, pfTauCands);
139  math::PtEtaPhiMLorentzVector tempP4(lCand.Pt(), lCand.Eta(), lCand.Phi(), lCand.M());
140  l1t::PFTau l1PFTau(tempP4, NN, 0, lId);
141  outputTaus->push_back(l1PFTau);
142 }
std::vector< l1t::PFCandidate > PFCandidateCollection
Definition: PFCandidate.h:82
PtEtaPhiMLorentzVectorD PtEtaPhiMLorentzVector
Lorentz vector with cartesian internal representation.
Definition: LorentzVector.h:25
std::unique_ptr< TauNNId > fTauNNId_
constexpr Matriplex::idx_t NN
Definition: Matrix.h:43
constexpr auto deltaR2(const T1 &t1, const T2 &t2) -> decltype(t1.eta())
Definition: deltaR.h:16

◆ fillDescriptions()

void L1NNTauProducer::fillDescriptions ( edm::ConfigurationDescriptions descriptions)
static

Definition at line 143 of file L1NNTauProducer.cc.

References edm::ConfigurationDescriptions::add(), submitPVResolutionJobs::desc, HLT_2022v15_cff::InputTag, and AlCaHLTBitMon_QueryRunRegistry::string.

143  {
144  // L1NNTauProducer
146  desc.add<std::string>("NNFileName", "L1Trigger/Phase2L1ParticleFlow/data/tau_3layer.pb");
147  desc.add<double>("tausize", 0.1);
148  desc.add<int>("maxtaus", 5);
149  desc.add<int>("nparticles", 10);
150  desc.add<double>("conesize", 0.4);
151  desc.add<double>("seedpt", 20);
152  desc.add<edm::InputTag>("L1PFObjects", edm::InputTag("L1PFProducer", "l1pfCandidates"));
153  descriptions.add("L1NNTauProducer", desc);
154 }
void add(std::string const &label, ParameterSetDescription const &psetDescription)

◆ globalEndJob()

static void L1NNTauProducer::globalEndJob ( const tensorflow::SessionCache )
inlinestatic

Definition at line 24 of file L1NNTauProducer.cc.

24 {};

◆ initializeGlobalCache()

std::unique_ptr< tensorflow::SessionCache > L1NNTauProducer::initializeGlobalCache ( const edm::ParameterSet cfg)
static

Definition at line 58 of file L1NNTauProducer.cc.

References looper::cfg, edm::FileInPath::fullPath(), HLT_2022v15_cff::graphPath, tensorflow::setLogging(), and AlCaHLTBitMon_QueryRunRegistry::string.

58  {
60  std::string graphPath = edm::FileInPath(cfg.getParameter<std::string>("NNFileName")).fullPath();
61  return std::make_unique<tensorflow::SessionCache>(graphPath);
62 }
std::string fullPath() const
Definition: FileInPath.cc:161
void setLogging(const std::string &level="3")
Definition: TensorFlow.cc:15

◆ produce()

void L1NNTauProducer::produce ( edm::Event iEvent,
const edm::EventSetup iSetup 
)
overrideprivate

Definition at line 64 of file L1NNTauProducer.cc.

References funct::abs(), addTau(), l1t::PFCandidate::ChargedHadron, reco::deltaR2(), l1t::PFCandidate::Electron, fConeSize_, fL1PFToken_, fMaxTaus_, mps_fire::i, testProducerWithPsetDescEmpty_cfi::i1, iEvent, dqmiolumiharvest::j, eostools::move(), jetUpdater_cfi::sort, and track_trigger_eta_max.

64  {
66  iEvent.getByToken(fL1PFToken_, l1PFCandidates);
67 
68  std::vector<unique_ptr<l1t::PFCandidate>> pfChargedHadrons_sort_v;
69  std::vector<unique_ptr<l1t::PFCandidate>> pfChargedHadrons_seeds_v;
70  for (const auto& l1PFCand : *l1PFCandidates)
71  if ((l1PFCand.id() == l1t::PFCandidate::ChargedHadron || l1PFCand.id() == l1t::PFCandidate::Electron) &&
72  std::abs(l1PFCand.eta()) < track_trigger_eta_max)
73  pfChargedHadrons_sort_v.push_back(std::make_unique<l1t::PFCandidate>(l1PFCand));
74 
75  std::sort(
76  pfChargedHadrons_sort_v.begin(),
77  pfChargedHadrons_sort_v.end(),
78  [](std::unique_ptr<l1t::PFCandidate>& i, std::unique_ptr<l1t::PFCandidate>& j) { return (i->pt() > j->pt()); });
79 
80  auto lTaus = std::make_unique<l1t::PFTauCollection>();
81  if (pfChargedHadrons_sort_v.empty()) {
82  if (lTaus->empty()) {
83  PFTau dummy;
84  lTaus->push_back(dummy);
85  }
86  iEvent.put(std::move(lTaus), "L1PFTausNN");
87  return;
88  }
89  pfChargedHadrons_seeds_v.push_back(std::move(pfChargedHadrons_sort_v[0]));
90  for (unsigned int i0 = 1; i0 < pfChargedHadrons_sort_v.size(); i0++) {
91  bool pMatch = false;
92  for (unsigned int i1 = 0; i1 < pfChargedHadrons_seeds_v.size(); i1++) {
93  if (reco::deltaR2(*(pfChargedHadrons_seeds_v[i1]), *(pfChargedHadrons_sort_v[i0])) < fConeSize_ * fConeSize_)
94  pMatch = true;
95  }
96  if (pMatch)
97  continue;
98  pfChargedHadrons_seeds_v.push_back(std::move(pfChargedHadrons_sort_v[i0]));
99  if (int(pfChargedHadrons_seeds_v.size()) > fMaxTaus_ - 1)
100  break;
101  }
102  for (unsigned int i0 = 0; i0 < pfChargedHadrons_seeds_v.size(); i0++) {
103  addTau(*(pfChargedHadrons_seeds_v[i0]), (*l1PFCandidates), lTaus);
104  }
105  if (lTaus->empty()) {
106  PFTau dummy;
107  lTaus->push_back(dummy);
108  }
109  std::sort(lTaus->begin(), lTaus->end(), [](l1t::PFTau i, l1t::PFTau j) { return (i.pt() > j.pt()); });
110  iEvent.put(std::move(lTaus), "L1PFTausNN");
111 }
static constexpr float track_trigger_eta_max
edm::EDGetTokenT< vector< l1t::PFCandidate > > fL1PFToken_
void addTau(const l1t::PFCandidate &iCand, const l1t::PFCandidateCollection &iParts, std::unique_ptr< PFTauCollection > &outputTaus)
int iEvent
Definition: GenABIO.cc:224
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
constexpr auto deltaR2(const T1 &t1, const T2 &t2) -> decltype(t1.eta())
Definition: deltaR.h:16
def move(src, dest)
Definition: eostools.py:511

Member Data Documentation

◆ fConeSize_

double L1NNTauProducer::fConeSize_
private

Definition at line 34 of file L1NNTauProducer.cc.

Referenced by addTau(), and produce().

◆ fL1PFToken_

edm::EDGetTokenT<vector<l1t::PFCandidate> > L1NNTauProducer::fL1PFToken_
private

Definition at line 38 of file L1NNTauProducer.cc.

Referenced by produce().

◆ fMaxTaus_

int L1NNTauProducer::fMaxTaus_
private

Definition at line 36 of file L1NNTauProducer.cc.

Referenced by produce().

◆ fNParticles_

int L1NNTauProducer::fNParticles_
private

Definition at line 37 of file L1NNTauProducer.cc.

Referenced by L1NNTauProducer().

◆ fSeedPt_

double L1NNTauProducer::fSeedPt_
private

Definition at line 33 of file L1NNTauProducer.cc.

Referenced by addTau().

◆ fTauNNId_

std::unique_ptr<TauNNId> L1NNTauProducer::fTauNNId_
private

Definition at line 24 of file L1NNTauProducer.cc.

Referenced by addTau(), and L1NNTauProducer().

◆ fTauSize_

double L1NNTauProducer::fTauSize_
private

Definition at line 35 of file L1NNTauProducer.cc.

Referenced by addTau().