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 makeTau_HW (const l1t::PFCandidate &seed, l1t::PFCandidateCollection &parts, std::unique_ptr< l1t::PFTauCollection > &iTaus)
 
void process_HW (const l1t::PFCandidateCollection &parts, std::unique_ptr< l1t::PFTauCollection > &iTaus)
 
void process_SW (const l1t::PFCandidateCollection &parts, std::unique_ptr< l1t::PFTauCollection > &iTaus)
 
void produce (edm::Event &iEvent, const edm::EventSetup &iSetup) override
 

Private Attributes

double fConeSize_
 
const bool fDebug
 
const bool fEMSeed
 
const bool fHW
 
edm::EDGetTokenT< vector< l1t::PFCandidate > > fL1PFToken_
 
int fMaxTaus_
 
int fNParticles_
 
double fSeedPt_
 
std::unique_ptr< TauNNIdfTauNNId_
 
std::unique_ptr< TauNNIdHWfTauNNIdHW_
 
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 22 of file L1NNTauProducer.cc.

Constructor & Destructor Documentation

◆ L1NNTauProducer()

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

Definition at line 60 of file L1NNTauProducer.cc.

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

61  : fSeedPt_(cfg.getParameter<double>("seedpt")),
62  fConeSize_(cfg.getParameter<double>("conesize")),
63  fTauSize_(cfg.getParameter<double>("tausize")),
64  fMaxTaus_(cfg.getParameter<int>("maxtaus")),
65  fNParticles_(cfg.getParameter<int>("nparticles")),
66  fHW(cfg.getParameter<bool>("HW")),
67  fEMSeed(cfg.getParameter<bool>("emseed")),
68  fDebug(cfg.getParameter<bool>("debug")),
69  fL1PFToken_(consumes<vector<l1t::PFCandidate>>(cfg.getParameter<edm::InputTag>("L1PFObjects"))) {
70  std::string lNNFile = cfg.getParameter<std::string>("NNFileName"); //,"L1Trigger/Phase2L1Taus/data/tau_3layer.pb");
71  if (fHW) {
72  fTauNNIdHW_ = std::make_unique<TauNNIdHW>();
73  fTauNNIdHW_->initialize("input_1:0", fNParticles_);
74  } else {
75  fTauNNId_ = std::make_unique<TauNNId>(lNNFile.find("v0") == std::string::npos ? "input_1:0" : "dense_1_input:0",
76  cache->getSession(),
77  lNNFile,
78  fNParticles_);
79  }
80  produces<l1t::PFTauCollection>("L1PFTausNN");
81 }
std::unique_ptr< TauNNIdHW > fTauNNIdHW_
edm::EDGetTokenT< vector< l1t::PFCandidate > > fL1PFToken_
std::unique_ptr< TauNNId > fTauNNId_
def cache(function)
Definition: utilities.py:3
const bool fEMSeed

◆ ~L1NNTauProducer()

L1NNTauProducer::~L1NNTauProducer ( )
override

Definition at line 336 of file L1NNTauProducer.cc.

336 {}

Member Function Documentation

◆ addTau()

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

Definition at line 139 of file L1NNTauProducer.cc.

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

Referenced by process_SW().

141  {
142  l1t::PFCandidateCollection pfTauCands;
143  math::PtEtaPhiMLorentzVector lTot(0, 0, 0, 0);
144  math::PtEtaPhiMLorentzVector lCand(0, 0, 0, 0);
145  int lId = 0;
146  float z0 = 0;
147  float dxy = 0;
148  for (const auto& l1PFCand : iParts) {
149  if (reco::deltaR2(iCand, l1PFCand) > fConeSize_ * fConeSize_)
150  continue;
151  math::PtEtaPhiMLorentzVector pVec(l1PFCand.pt(), l1PFCand.eta(), l1PFCand.phi(), 0);
152  lTot += pVec;
153  if (reco::deltaR2(iCand, l1PFCand) < fTauSize_ * fTauSize_ &&
154  (l1PFCand.id() == l1t::PFCandidate::Electron || l1PFCand.id() == l1t::PFCandidate::ChargedHadron ||
155  l1PFCand.id() == l1t::PFCandidate::Photon)) {
156  lId++;
157  lCand += pVec;
158  if (z0 == 0 && l1PFCand.id() == l1t::PFCandidate::ChargedHadron) {
159  z0 = l1PFCand.z0();
160  dxy = l1PFCand.dxy();
161  }
162  }
163  pfTauCands.push_back(l1PFCand);
164  }
165  if (lTot.Pt() < fSeedPt_)
166  return;
167  std::sort(
168  pfTauCands.begin(), pfTauCands.end(), [](l1t::PFCandidate i, l1t::PFCandidate j) { return (i.pt() > j.pt()); });
169  float NN = fTauNNId_->compute(iCand, pfTauCands);
170  float* lNNVector = fTauNNId_->NNVectorVar();
171  math::PtEtaPhiMLorentzVector tempP4(lCand.Pt(), lCand.Eta(), lCand.Phi(), lCand.M() * lCand.M());
172  l1t::PFTau l1PFTau(tempP4, lNNVector, NN, 0, lId);
173  l1PFTau.setZ0(z0);
174  l1PFTau.setDxy(dxy);
175  outputTaus->push_back(l1PFTau);
176 }
std::vector< l1t::PFCandidate > PFCandidateCollection
Definition: PFCandidate.h:86
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 177 of file L1NNTauProducer.cc.

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

177  {
178  // L1NNTauProducer
180  desc.add<std::string>("NNFileName", "L1Trigger/Phase2L1ParticleFlow/data/tau_3layer.pb");
181  desc.add<double>("tausize", 0.1);
182  desc.add<int>("maxtaus", 5);
183  desc.add<int>("nparticles", 10);
184  desc.add<double>("conesize", 0.4);
185  desc.add<double>("seedpt", 20);
186  desc.add<bool>("HW", true);
187  desc.add<bool>("emseed", true);
188  desc.add<bool>("debug", false);
189  desc.add<edm::InputTag>("L1PFObjects", edm::InputTag("L1PFProducer", "l1pfCandidates"));
190  descriptions.add("L1NNTauProducer", desc);
191 }
void add(std::string const &label, ParameterSetDescription const &psetDescription)

◆ globalEndJob()

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

Definition at line 29 of file L1NNTauProducer.cc.

29 {};

◆ initializeGlobalCache()

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

Definition at line 83 of file L1NNTauProducer.cc.

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

83  {
85  std::string graphPath = edm::FileInPath(cfg.getParameter<std::string>("NNFileName")).fullPath();
86  return std::make_unique<tensorflow::SessionCache>(graphPath);
87 }
std::string fullPath() const
Definition: FileInPath.cc:161
void setLogging(const std::string &level="3")
Definition: TensorFlow.cc:90

◆ makeTau_HW()

void L1NNTauProducer::makeTau_HW ( const l1t::PFCandidate seed,
l1t::PFCandidateCollection parts,
std::unique_ptr< l1t::PFTauCollection > &  iTaus 
)
private

Definition at line 193 of file L1NNTauProducer.cc.

References l1t::PFCandidate::ChargedHadron, PVValHelper::dxy, l1t::PFCandidate::Electron, PVValHelper::eta, L1TauEmu::etaphi_base, l1gt::Scales::floatEta(), l1gt::Scales::floatPhi(), l1gt::Scales::floatPt(), fSeedPt_, fTauNNIdHW_, fTauSize_, l1ct::Tau::hwCharge, l1ct::Tau::hwEta, l1ct::Tau::hwPhi, l1ct::Tau::hwPt, l1ct::Tau::hwRawId, l1ct::Tau::hwSeedPt, l1ct::Tau::hwSeedZ0, l1ct::Tau::hwType, L1TauEmu::inCone(), l1ct::Scales::makeGlbEta(), l1ct::Scales::makeGlbPhi(), EgHLTOffHistBins_cfi::mass, Tau_NN_Result::nn_id, Tau_NN_Result::nn_pt_correction, l1gt::Tau::pack(), phi, l1t::PFCandidate::Photon, DiDispStaMuonMonitor_cfi::pt, fileCollector::seed, l1t::PFTau::set_encodedTau(), l1t::PFTau::setDxy(), l1t::PFTau::setZ0(), l1ct::Tau::toGT(), and HLTMuonOfflineAnalyzer_cfi::z0.

Referenced by process_HW().

195  {
196  // Seed Cone Jet algorithm with ap_fixed types and hardware emulation
197  L1TauEmu::detaphi_t rCone2 =
199  unsigned lId = 0;
200 
201  input2_t p1_tot = 0;
202  input2_t p1x_tot = 0;
203  input2_t p1y_tot = 0;
204  input2_t p1z_tot = 0;
205 
206  input_t e1ta_1 = seed.eta();
207  input_t p1hi_1 = seed.phi();
208  L1TauEmu::pt_t pt = 0;
209  L1TauEmu::z0_t z0 = 0;
210  L1TauEmu::dxy_t dxy = 0;
211 
212  // Reconstruct the Tau Cone
213  for (unsigned i0 = 0; i0 < parts.size(); i0++) {
214  if (L1TauEmu::inCone(seed, (parts[i0]), rCone2)) {
216  parts[i0].id() == l1t::PFCandidate::Photon) {
217  lId++;
218  pt = pt + L1TauEmu::pt_t(parts[i0].pt());
219 
220  input2_t d1eta = input_t(parts[i0].eta()) - e1ta_1;
221  input2_t d1phi = input_t(parts[i0].phi()) - p1hi_1;
222  input2_t d1r2 = d1eta * d1eta + d1phi * d1phi;
223  input2_t tmppt = input_t(parts[i0].pt());
224  input2_t half = 0.5;
225  p1z_tot = p1z_tot + tmppt * (1 - d1r2 * half);
226  p1y_tot = p1y_tot + tmppt * d1phi;
227  p1x_tot = p1x_tot + tmppt * d1eta;
228  p1_tot = p1_tot + tmppt;
229 
230  if (z0 == 0 && parts[i0].id() == l1t::PFCandidate::ChargedHadron) {
231  z0 = parts[i0].hwZ0();
232  dxy = parts[i0].hwDxy();
233  }
234  }
235  }
236  }
237 
238  //Compute the mass
239  input2_t tmpmass1 = (p1_tot * p1_tot - p1x_tot * p1x_tot - p1y_tot * p1y_tot - p1z_tot * p1z_tot);
240  if (tmpmass1 < 0)
241  tmpmass1 = 0;
242  L1TauEmu::pt_t mass = l1ct::pt_t(tmpmass1);
243 
244  if (pt < fSeedPt_)
245  return;
246 
247  // Tau NN Inference
248  Tau_NN_Result NN_ouput = fTauNNIdHW_->compute(seed, parts);
249 
250  // Needed for making PFTau
251  input_t* lNNVector = fTauNNIdHW_->NNVectorVar();
252  float pNNVec[80];
253  for (unsigned i0 = 0; i0 < 80; i0++)
254  pNNVec[i0] = float(lNNVector[i0]);
255 
256  //Firmware Tau
257  l1ct::Tau l1ctTau;
258  l1ctTau.hwPt = l1ct::pt_t(pt * NN_ouput.nn_pt_correction); //l1gt is <16,11> and currently <16,14>
259  l1ctTau.hwEta = l1ct::Scales::makeGlbEta(seed.eta()); // seed.eta() and seed.phi() are in physical coordinates
260  l1ctTau.hwPhi = l1ct::Scales::makeGlbPhi(seed.phi());
261 
262  l1ctTau.hwSeedPt = seed.pt();
263  l1ctTau.hwSeedZ0 = seed.hwZ0();
264  l1ctTau.hwCharge = seed.charge();
265 
266  l1ctTau.hwType = l1ct::Tau::type_t(lId);
267  l1ctTau.hwRawId = ap_uint<10>(NN_ouput.nn_id * 1024); //NN Output is ap_fixed<16, 6> so need to cast.
268 
269  //Convert to GT format and pack to encodedTau of PFTau
270  l1gt::Tau l1gtTau = l1ctTau.toGT();
271  l1gt::PackedTau packed_Tau = l1gtTau.pack();
272 
273  //Make PFTau
274  //Save pt, eta and phi in gt scales
276  l1gt::Scales::floatEta(l1gtTau.v3.eta),
277  l1gt::Scales::floatPhi(l1gtTau.v3.phi),
278  float(mass));
279 
280  l1t::PFTau l1PFTau(tempP4, pNNVec, NN_ouput.nn_id, 0, lId);
281  l1PFTau.setZ0(float(z0) * 0.05); //L1TauEmu::z0_base);
282  l1PFTau.setDxy(float(dxy) * 0.05); //L1TauEmu::dxy_base);
283 
284  l1PFTau.set_encodedTau(packed_Tau);
285 
286  iTaus->push_back(l1PFTau);
287 }
glbeta_t makeGlbEta(float eta)
Definition: datatypes.h:203
float floatPhi(phi_t phi)
Definition: gt_datatypes.h:49
float floatEta(eta_t eta)
Definition: gt_datatypes.h:48
result_t nn_id
Definition: TauNNIdHW.h:19
static constexpr float etaphi_base
Definition: TauNNIdHW.h:27
std::unique_ptr< TauNNIdHW > fTauNNIdHW_
ap_fixed< 24, 12 > input2_t
Definition: defines.h:28
glbphi_t makeGlbPhi(float phi)
Definition: datatypes.h:206
ap_fixed< 12, 6 > detaphi_t
Definition: TauNNIdHW.h:30
type_t hwType
Definition: taus.h:21
std::array< uint64_t, 2 > PackedTau
Definition: gt_datatypes.h:39
PtEtaPhiMLorentzVectorD PtEtaPhiMLorentzVector
Lorentz vector with cartesian internal representation.
Definition: LorentzVector.h:25
ap_uint< 2 > type_t
Definition: taus.h:11
float floatPt(pt_t pt)
Definition: gt_datatypes.h:47
bool hwCharge
Definition: taus.h:20
glbphi_t hwPhi
Definition: taus.h:17
pt_t hwPt
Definition: taus.h:15
Definition: taus.h:10
z0_t hwSeedZ0
Definition: taus.h:19
ap_fixed< 16, 10 > input_t
Definition: defines.h:27
ap_ufixed< 14, 12, AP_TRN, AP_SAT > pt_t
Definition: datatypes.h:10
pt_t hwSeedPt
Definition: taus.h:18
l1gt::Tau toGT() const
Definition: taus.h:108
ap_ufixed< 14, 12, AP_TRN, AP_SAT > pt_t
Definition: TauNNIdHW.h:28
glbeta_t hwEta
Definition: taus.h:16
ap_int< 10 > z0_t
Definition: TauNNIdHW.h:34
ap_int< 8 > dxy_t
Definition: TauNNIdHW.h:33
PackedTau pack() const
Definition: gt_datatypes.h:222
bool inCone(l1t::PFCandidate seed, l1t::PFCandidate part, detaphi_t cone2)
Definition: TauNNIdHW.h:123
result_t nn_pt_correction
Definition: TauNNIdHW.h:18
rawid_t hwRawId
Definition: taus.h:22

◆ process_HW()

void L1NNTauProducer::process_HW ( const l1t::PFCandidateCollection parts,
std::unique_ptr< l1t::PFTauCollection > &  iTaus 
)
private

Definition at line 289 of file L1NNTauProducer.cc.

References funct::abs(), l1t::PFCandidate::ChargedHadron, l1t::PFCandidate::Electron, l1HPSPFTauEmu::etaphi_base, fConeSize_, fEMSeed, fMaxTaus_, mps_fire::i, L1TauEmu::inCone(), dqmiolumiharvest::j, makeTau_HW(), l1t::PFCandidate::Photon, fileCollector::seed, HLT_2024v13_cff::seeds, jetUpdater_cfi::sort, track_trigger_eta_max, HcalDetIdTransform::transform(), parallelization::uint, and edmMakeDummyCfis::work.

Referenced by produce().

290  {
291  // The fixed point algorithm emulation
292  using namespace L1TauEmu;
293  std::vector<l1t::PFCandidate> work;
294  work.resize(parts.size());
295  std::transform(parts.begin(), parts.end(), work.begin(), [](const l1t::PFCandidate& part) { return part; });
296  std::sort(work.begin(), work.end(), [](l1t::PFCandidate i, l1t::PFCandidate j) {
297  return (l1ct::pt_t(i.pt()) > l1ct::pt_t(j.pt()));
298  });
299 
300  std::vector<l1t::PFCandidate> seeds;
302  if (fEMSeed)
303  lSeed = l1t::PFCandidate::Photon;
304  std::copy_if(work.begin(), work.end(), std::back_inserter(seeds), [&](const l1t::PFCandidate& part) {
306  part.id() == lSeed) &&
308  });
309  // It would be nice to transform the inputs to the etaphi_base of the FW here, as in the line below
310  // However the phi may wrap around if the etaphi_base > 1, so don't do it...
311  //std::for_each(work.begin(), work.end(), [](l1t::PFCandidate& x){x.setP4(math::PtEtaPhiMLorentzVector(pt_t(x.pt()), etaphi_t(x.eta()*etaphi_base), etaphi_t(x.phi()*etaphi_base), x.mass()));});
313 
314  iTaus->reserve(fMaxTaus_);
315  while (!seeds.empty() && iTaus->size() < unsigned(fMaxTaus_)) {
316  // Take the first (highest pt) candidate as a seed
317  l1t::PFCandidate seed = seeds.at(0);
318  // Get the particles within a _coneSize of the seed
319  std::vector<l1t::PFCandidate> particlesInCone;
320  std::copy_if(work.begin(), work.end(), std::back_inserter(particlesInCone), [&](l1t::PFCandidate& part) {
321  return inCone(seed, part, rCone2);
322  });
323  makeTau_HW(seed, particlesInCone, iTaus);
324  // remove the clustered particles
325  work.erase(std::remove_if(
326  work.begin(), work.end(), [&](const l1t::PFCandidate& part) { return inCone(seed, part, rCone2); }),
327  work.end());
328 
329  seeds.erase(
330  std::remove_if(
331  seeds.begin(), seeds.end(), [&](const l1t::PFCandidate& part) { return inCone(seed, part, rCone2); }),
332  seeds.end());
333  }
334 }
static constexpr float track_trigger_eta_max
ap_fixed< 12, 6 > detaphi_t
Definition: TauNNIdHW.h:30
void makeTau_HW(const l1t::PFCandidate &seed, l1t::PFCandidateCollection &parts, std::unique_ptr< l1t::PFTauCollection > &iTaus)
ap_int< 13 > detaphi_t
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
ap_ufixed< 14, 12, AP_TRN, AP_SAT > pt_t
Definition: datatypes.h:10
part
Definition: HCALResponse.h:20
const bool fEMSeed
bool inCone(l1t::PFCandidate seed, l1t::PFCandidate part, detaphi_t cone2)
Definition: TauNNIdHW.h:123
constexpr float etaphi_base
unsigned transform(const HcalDetId &id, unsigned transformCode)

◆ process_SW()

void L1NNTauProducer::process_SW ( const l1t::PFCandidateCollection parts,
std::unique_ptr< l1t::PFTauCollection > &  iTaus 
)
private

Definition at line 103 of file L1NNTauProducer.cc.

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

Referenced by produce().

104  {
105  std::vector<unique_ptr<l1t::PFCandidate>> pfChargedHadrons;
106  std::vector<unique_ptr<l1t::PFCandidate>> pfChargedHadrons_sort_v;
107  std::vector<unique_ptr<l1t::PFCandidate>> pfChargedHadrons_seeds_v;
108  for (const auto& l1PFCand : parts)
109  if ((l1PFCand.id() == l1t::PFCandidate::ChargedHadron || l1PFCand.id() == l1t::PFCandidate::Electron) &&
110  std::abs(l1PFCand.eta()) < track_trigger_eta_max)
111  pfChargedHadrons_sort_v.push_back(std::make_unique<l1t::PFCandidate>(l1PFCand));
112 
113  if (pfChargedHadrons_sort_v.empty())
114  return;
115  std::sort(
116  pfChargedHadrons_sort_v.begin(),
117  pfChargedHadrons_sort_v.end(),
118  [](std::unique_ptr<l1t::PFCandidate>& i, std::unique_ptr<l1t::PFCandidate>& j) { return (i->pt() > j->pt()); });
119 
120  pfChargedHadrons_seeds_v.push_back(std::move(pfChargedHadrons_sort_v[0]));
121  for (unsigned int i0 = 1; i0 < pfChargedHadrons_sort_v.size(); i0++) {
122  bool pMatch = false;
123  for (unsigned int i1 = 0; i1 < pfChargedHadrons_seeds_v.size(); i1++) {
124  if (reco::deltaR2(*(pfChargedHadrons_seeds_v[i1]), *(pfChargedHadrons_sort_v[i0])) < fConeSize_ * fConeSize_)
125  pMatch = true;
126  }
127  if (pMatch)
128  continue;
129  pfChargedHadrons_seeds_v.push_back(std::move(pfChargedHadrons_sort_v[i0]));
130  if (int(pfChargedHadrons_seeds_v.size()) > fMaxTaus_ - 1)
131  break;
132  }
133  for (unsigned int i0 = 0; i0 < pfChargedHadrons_seeds_v.size(); i0++) {
134  addTau(*(pfChargedHadrons_seeds_v[i0]), parts, iTaus);
135  }
136 }
static constexpr float track_trigger_eta_max
void addTau(const l1t::PFCandidate &iCand, const l1t::PFCandidateCollection &iParts, std::unique_ptr< PFTauCollection > &outputTaus)
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

◆ produce()

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

Definition at line 89 of file L1NNTauProducer.cc.

References fHW, fL1PFToken_, mps_fire::i, iEvent, dqmiolumiharvest::j, eostools::move(), process_HW(), process_SW(), and jetUpdater_cfi::sort.

89  {
91  iEvent.getByToken(fL1PFToken_, l1PFCandidates);
92  auto lTaus = std::make_unique<l1t::PFTauCollection>();
93 
94  if (fHW) {
95  process_HW(*l1PFCandidates, lTaus);
96  } else {
97  process_SW(*l1PFCandidates, lTaus);
98  }
99 
100  std::sort(lTaus->begin(), lTaus->end(), [](l1t::PFTau i, l1t::PFTau j) { return (i.pt() > j.pt()); });
101  iEvent.put(std::move(lTaus), "L1PFTausNN");
102 }
edm::EDGetTokenT< vector< l1t::PFCandidate > > fL1PFToken_
int iEvent
Definition: GenABIO.cc:224
void process_HW(const l1t::PFCandidateCollection &parts, std::unique_ptr< l1t::PFTauCollection > &iTaus)
void process_SW(const l1t::PFCandidateCollection &parts, std::unique_ptr< l1t::PFTauCollection > &iTaus)
def move(src, dest)
Definition: eostools.py:511

Member Data Documentation

◆ fConeSize_

double L1NNTauProducer::fConeSize_
private

Definition at line 48 of file L1NNTauProducer.cc.

Referenced by addTau(), process_HW(), and process_SW().

◆ fDebug

const bool L1NNTauProducer::fDebug
private

Definition at line 54 of file L1NNTauProducer.cc.

◆ fEMSeed

const bool L1NNTauProducer::fEMSeed
private

Definition at line 53 of file L1NNTauProducer.cc.

Referenced by process_HW().

◆ fHW

const bool L1NNTauProducer::fHW
private

Definition at line 52 of file L1NNTauProducer.cc.

Referenced by L1NNTauProducer(), and produce().

◆ fL1PFToken_

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

Definition at line 55 of file L1NNTauProducer.cc.

Referenced by produce().

◆ fMaxTaus_

int L1NNTauProducer::fMaxTaus_
private

Definition at line 50 of file L1NNTauProducer.cc.

Referenced by process_HW(), and process_SW().

◆ fNParticles_

int L1NNTauProducer::fNParticles_
private

Definition at line 51 of file L1NNTauProducer.cc.

Referenced by L1NNTauProducer().

◆ fSeedPt_

double L1NNTauProducer::fSeedPt_
private

Definition at line 47 of file L1NNTauProducer.cc.

Referenced by addTau(), and makeTau_HW().

◆ fTauNNId_

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

Definition at line 29 of file L1NNTauProducer.cc.

Referenced by addTau(), and L1NNTauProducer().

◆ fTauNNIdHW_

std::unique_ptr<TauNNIdHW> L1NNTauProducer::fTauNNIdHW_
private

Definition at line 34 of file L1NNTauProducer.cc.

Referenced by L1NNTauProducer(), and makeTau_HW().

◆ fTauSize_

double L1NNTauProducer::fTauSize_
private

Definition at line 49 of file L1NNTauProducer.cc.

Referenced by addTau(), and makeTau_HW().