CMS 3D CMS Logo

List of all members | Classes | Public Member Functions | Static Public Member Functions | Private Types | Private Member Functions | Private Attributes
L1TrackSelectionProducer Class Reference

#include <L1Trigger/L1TTrackMatch/plugins/L1TrackSelectionProducer.cc>

Inheritance diagram for L1TrackSelectionProducer:
edm::global::EDProducer<> edm::global::EDProducerBase edm::ProducerBase edm::EDConsumerBase edm::ProductRegistryHelper

Classes

struct  TTTrackAbsEtaMaxSelector
 
struct  TTTrackAbsZ0MaxSelector
 
struct  TTTrackBendChi2MaxSelector
 
struct  TTTrackChi2RPhiMaxSelector
 
struct  TTTrackChi2RZMaxSelector
 
struct  TTTrackDeltaZMaxSelector
 
struct  TTTrackNPSStubsMinSelector
 
struct  TTTrackNStubsMinSelector
 
struct  TTTrackPtMinSelector
 
struct  TTTrackWordAbsEtaMaxSelector
 
struct  TTTrackWordAbsZ0MaxSelector
 
struct  TTTrackWordBendChi2MaxSelector
 
struct  TTTrackWordChi2RPhiMaxSelector
 
struct  TTTrackWordChi2RZMaxSelector
 
struct  TTTrackWordDeltaZMaxSelector
 
struct  TTTrackWordNStubsMinSelector
 
struct  TTTrackWordPtMinSelector
 

Public Member Functions

 L1TrackSelectionProducer (const edm::ParameterSet &)
 
 ~L1TrackSelectionProducer () override
 
- Public Member Functions inherited from edm::global::EDProducer<>
 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
 
EDProduceroperator= (const EDProducer &)=delete
 
bool wantsGlobalLuminosityBlocks () const final
 
bool wantsGlobalRuns () const final
 
bool wantsInputProcessBlocks () const final
 
bool wantsProcessBlocks () const final
 
bool wantsStreamLuminosityBlocks () const final
 
bool wantsStreamRuns () const final
 
- Public Member Functions inherited from edm::global::EDProducerBase
 EDProducerBase ()
 
ModuleDescription const & moduleDescription () const
 
 ~EDProducerBase () override
 
- Public Member Functions inherited from edm::ProducerBase
void callWhenNewProductsRegistered (std::function< void(BranchDescription const &)> const &func)
 
std::vector< edm::ProductResolverIndex > const & indiciesForPutProducts (BranchType iBranchType) const
 
 ProducerBase ()
 
std::vector< edm::ProductResolverIndex > const & putTokenIndexToProductResolverIndex () const
 
std::vector< bool > const & recordProvenanceList () const
 
void registerProducts (ProducerBase *, ProductRegistry *, ModuleDescription const &)
 
std::function< void(BranchDescription const &)> registrationCallback () const
 used by the fwk to register list of products More...
 
void resolvePutIndicies (BranchType iBranchType, ModuleToResolverIndicies const &iIndicies, std::string const &moduleLabel)
 
TypeLabelList const & typeLabelList () const
 used by the fwk to register the list of products of this module More...
 
 ~ProducerBase () noexcept(false) override
 
- Public Member Functions inherited from edm::EDConsumerBase
std::vector< ConsumesInfoconsumesInfo () const
 
void convertCurrentProcessAlias (std::string const &processName)
 Convert "@currentProcess" in InputTag process names to the actual current process name. More...
 
 EDConsumerBase ()
 
 EDConsumerBase (EDConsumerBase const &)=delete
 
 EDConsumerBase (EDConsumerBase &&)=default
 
ESProxyIndex const * esGetTokenIndices (edm::Transition iTrans) const
 
std::vector< ESProxyIndex > const & esGetTokenIndicesVector (edm::Transition iTrans) const
 
std::vector< ESRecordIndex > const & esGetTokenRecordIndicesVector (edm::Transition iTrans) const
 
ProductResolverIndexAndSkipBit indexFrom (EDGetToken, BranchType, TypeID const &) const
 
void itemsMayGet (BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
 
void itemsToGet (BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
 
std::vector< ProductResolverIndexAndSkipBit > const & itemsToGetFrom (BranchType iType) const
 
void labelsForToken (EDGetToken iToken, Labels &oLabels) const
 
void modulesWhoseProductsAreConsumed (std::array< std::vector< ModuleDescription const *> *, NumBranchTypes > &modulesAll, std::vector< ModuleProcessName > &modulesInPreviousProcesses, ProductRegistry const &preg, std::map< std::string, ModuleDescription const *> const &labelsToDesc, std::string const &processName) const
 
EDConsumerBase const & operator= (EDConsumerBase const &)=delete
 
EDConsumerBaseoperator= (EDConsumerBase &&)=default
 
bool registeredToConsume (ProductResolverIndex, bool, BranchType) const
 
bool registeredToConsumeMany (TypeID const &, BranchType) const
 
void selectInputProcessBlocks (ProductRegistry const &productRegistry, ProcessBlockHelperBase const &processBlockHelperBase)
 
ProductResolverIndexAndSkipBit uncheckedIndexFrom (EDGetToken) const
 
void updateLookup (BranchType iBranchType, ProductResolverIndexHelper const &, bool iPrefetchMayGet)
 
void updateLookup (eventsetup::ESRecordsToProxyIndices const &)
 
virtual ~EDConsumerBase () noexcept(false)
 

Static Public Member Functions

static void fillDescriptions (edm::ConfigurationDescriptions &descriptions)
 
- Static Public Member Functions inherited from edm::global::EDProducerBase
static const std::string & baseType ()
 
static void fillDescriptions (ConfigurationDescriptions &descriptions)
 
static void prevalidate (ConfigurationDescriptions &descriptions)
 

Private Types

typedef TTTrack< Ref_Phase2TrackerDigi_L1Track
 
enum  TrackBitWidths { kPtSize = TTTrack_TrackWord::TrackBitWidths::kRinvSize - 1, kPtMagSize = 9, kEtaSize = TTTrack_TrackWord::TrackBitWidths::kTanlSize, kEtaMagSize = 3 }
 
typedef AndSelector< TTTrackBendChi2MaxSelector, TTTrackChi2RZMaxSelector, TTTrackChi2RPhiMaxSelectorTTTrackBendChi2Chi2RZChi2RPhiMaxSelector
 
typedef std::vector< L1TrackTTTrackCollection
 
typedef edm::Handle< TTTrackCollectionTTTrackCollectionHandle
 
typedef AndSelector< TTTrackPtMinSelector, TTTrackAbsEtaMaxSelector, TTTrackAbsZ0MaxSelector, TTTrackNStubsMinSelectorTTTrackPtMinEtaMaxZ0MaxNStubsMinSelector
 
typedef edm::Ref< TTTrackCollectionTTTrackRef
 
typedef std::vector< TTTrackRefTTTrackRefCollection
 
typedef std::unique_ptr< TTTrackRefCollectionTTTrackRefCollectionUPtr
 
typedef AndSelector< TTTrackWordBendChi2MaxSelector, TTTrackWordChi2RZMaxSelector, TTTrackWordChi2RPhiMaxSelectorTTTrackWordBendChi2Chi2RZChi2RPhiMaxSelector
 
typedef AndSelector< TTTrackWordPtMinSelector, TTTrackWordAbsEtaMaxSelector, TTTrackWordAbsZ0MaxSelector, TTTrackWordNStubsMinSelectorTTTrackWordPtMinEtaMaxZ0MaxNStubsMinSelector
 

Private Member Functions

void printDebugInfo (const TTTrackCollectionHandle &l1TracksHandle, const TTTrackRefCollectionUPtr &vTTTrackOutput, const TTTrackRefCollectionUPtr &vTTTrackEmulationOutput, const TTTrackRefCollectionUPtr &vTTTrackAssociatedOutput, const TTTrackRefCollectionUPtr &vTTTrackAssociatedEmulationOutput) const
 
void printTrackInfo (edm::LogInfo &log, const L1Track &track, bool printEmulation=false) const
 
void produce (edm::StreamID, edm::Event &, const edm::EventSetup &) const override
 

Private Attributes

const double absEtaMax_
 
const double absZ0Max_
 
const double bendChi2Max_
 
const edm::ParameterSet cutSet_
 
int debug_
 
std::vector< double > deltaZMax_
 
std::vector< double > deltaZMaxEtaBounds_
 
bool doDeltaZCutEmu_
 
bool doDeltaZCutSim_
 
const edm::EDGetTokenT< TTTrackCollectionl1TracksToken_
 
edm::EDGetTokenT< l1t::VertexWordCollectionl1VerticesEmulationToken_
 
edm::EDGetTokenT< l1t::VertexCollectionl1VerticesToken_
 
const int nPSStubsMin_
 
const int nStubsMin_
 
const std::string outputCollectionName_
 
bool processEmulatedTracks_
 
bool processSimulatedTracks_
 
const double ptMin_
 
const double reducedChi2RPhiMax_
 
const double reducedChi2RZMax_
 
edm::ESGetToken< TrackerTopology, TrackerTopologyRcdtTopoToken_
 
const double useDisplacedTracksDeltaZOverride_
 

Additional Inherited Members

- Public Types inherited from edm::global::EDProducerBase
typedef EDProducerBase ModuleType
 
- Public Types inherited from edm::ProducerBase
using ModuleToResolverIndicies = std::unordered_multimap< std::string, std::tuple< edm::TypeID const *, const char *, edm::ProductResolverIndex > >
 
typedef ProductRegistryHelper::TypeLabelList TypeLabelList
 
- Public Types inherited from edm::EDConsumerBase
typedef ProductLabels Labels
 
- Protected Member Functions inherited from edm::ProducerBase
template<Transition Tr = Transition::Event>
auto produces (std::string instanceName) noexcept
 declare what type of product will make and with which optional label More...
 
template<Transition B>
BranchAliasSetter produces (const TypeID &id, std::string instanceName=std::string(), bool recordProvenance=true)
 
template<BranchType B>
BranchAliasSetter produces (const TypeID &id, std::string instanceName=std::string(), bool recordProvenance=true)
 
BranchAliasSetter produces (const TypeID &id, std::string instanceName=std::string(), bool recordProvenance=true)
 
template<typename ProductType , Transition B>
BranchAliasSetterT< ProductType > produces (std::string instanceName)
 
template<class ProductType >
BranchAliasSetterT< ProductType > produces ()
 
template<typename ProductType , BranchType B>
BranchAliasSetterT< ProductType > produces (std::string instanceName)
 
template<typename ProductType , BranchType B>
BranchAliasSetterT< ProductType > produces ()
 
template<class ProductType >
BranchAliasSetterT< ProductType > produces (std::string instanceName)
 
template<typename ProductType , Transition B>
BranchAliasSetterT< ProductType > produces ()
 
template<Transition Tr = Transition::Event>
auto produces () noexcept
 
ProducesCollector producesCollector ()
 
- Protected Member Functions inherited from edm::EDConsumerBase
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > consumes (edm::InputTag const &tag)
 
template<BranchType B = InEvent>
EDConsumerBaseAdaptor< Bconsumes (edm::InputTag tag) noexcept
 
EDGetToken consumes (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken consumes (TypeToGet const &id, edm::InputTag const &tag)
 
ConsumesCollector consumesCollector ()
 Use a ConsumesCollector to gather consumes information from helper functions. More...
 
template<typename ProductType , BranchType B = InEvent>
void consumesMany ()
 
void consumesMany (const TypeToGet &id)
 
template<BranchType B>
void consumesMany (const TypeToGet &id)
 
template<typename ESProduct , typename ESRecord , Transition Tr = Transition::Event>
auto esConsumes ()
 
template<typename ESProduct , typename ESRecord , Transition Tr = Transition::Event>
auto esConsumes (ESInputTag const &tag)
 
template<Transition Tr = Transition::Event>
constexpr auto esConsumes ()
 
template<Transition Tr = Transition::Event>
auto esConsumes (ESInputTag tag)
 
template<Transition Tr = Transition::Event>
ESGetTokenGeneric esConsumes (eventsetup::EventSetupRecordKey const &iRecord, eventsetup::DataKey const &iKey)
 Used with EventSetupRecord::doGet. More...
 
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > mayConsume (edm::InputTag const &tag)
 
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 
void resetItemsToGetFrom (BranchType iType)
 

Detailed Description

Description: Selects a set of L1Tracks based on a set of predefined criteria.

Implementation: Inputs: std::vector<TTTrack> - Each floating point TTTrack inside this collection inherits from a bit-accurate TTTrack_TrackWord, used for emulation purposes. Outputs: std::vector<TTTrack> - A collection of TTTracks selected from cuts on the TTTrack properties std::vector<TTTrack> - A collection of TTTracks selected from cuts on the TTTrack_TrackWord properties

Definition at line 64 of file L1TrackSelectionProducer.cc.

Member Typedef Documentation

◆ L1Track

Definition at line 81 of file L1TrackSelectionProducer.cc.

◆ TTTrackBendChi2Chi2RZChi2RPhiMaxSelector

Definition at line 304 of file L1TrackSelectionProducer.cc.

◆ TTTrackCollection

Definition at line 82 of file L1TrackSelectionProducer.cc.

◆ TTTrackCollectionHandle

Definition at line 83 of file L1TrackSelectionProducer.cc.

◆ TTTrackPtMinEtaMaxZ0MaxNStubsMinSelector

Definition at line 297 of file L1TrackSelectionProducer.cc.

◆ TTTrackRef

Definition at line 84 of file L1TrackSelectionProducer.cc.

◆ TTTrackRefCollection

Definition at line 85 of file L1TrackSelectionProducer.cc.

◆ TTTrackRefCollectionUPtr

Definition at line 86 of file L1TrackSelectionProducer.cc.

◆ TTTrackWordBendChi2Chi2RZChi2RPhiMaxSelector

Definition at line 306 of file L1TrackSelectionProducer.cc.

◆ TTTrackWordPtMinEtaMaxZ0MaxNStubsMinSelector

Definition at line 302 of file L1TrackSelectionProducer.cc.

Member Enumeration Documentation

◆ TrackBitWidths

Enumerator
kPtSize 
kPtMagSize 
kEtaSize 
kEtaMagSize 

Definition at line 74 of file L1TrackSelectionProducer.cc.

74  {
75  kPtSize = TTTrack_TrackWord::TrackBitWidths::kRinvSize - 1, // Width of pt
76  kPtMagSize = 9, // Width of pt magnitude (unsigned)
77  kEtaSize = TTTrack_TrackWord::TrackBitWidths::kTanlSize, // Width of eta
78  kEtaMagSize = 3, // Width of eta magnitude (signed)
79  };

Constructor & Destructor Documentation

◆ L1TrackSelectionProducer()

L1TrackSelectionProducer::L1TrackSelectionProducer ( const edm::ParameterSet iConfig)
explicit

Definition at line 326 of file L1TrackSelectionProducer.cc.

References deltaZMax_, deltaZMaxEtaBounds_, doDeltaZCutEmu_, doDeltaZCutSim_, Exception, edm::ParameterSet::exists(), edm::ParameterSet::getParameter(), l1VerticesEmulationToken_, l1VerticesToken_, outputCollectionName_, processEmulatedTracks_, processSimulatedTracks_, and useDisplacedTracksDeltaZOverride_.

327  : l1TracksToken_(consumes<TTTrackCollection>(iConfig.getParameter<edm::InputTag>("l1TracksInputTag"))),
328  tTopoToken_(esConsumes<TrackerTopology, TrackerTopologyRcd>(edm::ESInputTag("", ""))),
329  outputCollectionName_(iConfig.getParameter<std::string>("outputCollectionName")),
330  cutSet_(iConfig.getParameter<edm::ParameterSet>("cutSet")),
331 
332  ptMin_(cutSet_.getParameter<double>("ptMin")),
333  absEtaMax_(cutSet_.getParameter<double>("absEtaMax")),
334  absZ0Max_(cutSet_.getParameter<double>("absZ0Max")),
335  bendChi2Max_(cutSet_.getParameter<double>("reducedBendChi2Max")),
336  reducedChi2RZMax_(cutSet_.getParameter<double>("reducedChi2RZMax")),
337  reducedChi2RPhiMax_(cutSet_.getParameter<double>("reducedChi2RPhiMax")),
338  nStubsMin_(cutSet_.getParameter<int>("nStubsMin")),
339  nPSStubsMin_(cutSet_.getParameter<int>("nPSStubsMin")),
340  deltaZMaxEtaBounds_(cutSet_.getParameter<std::vector<double>>("deltaZMaxEtaBounds")),
341  deltaZMax_(cutSet_.getParameter<std::vector<double>>("deltaZMax")),
342 
343  useDisplacedTracksDeltaZOverride_(iConfig.getParameter<double>("useDisplacedTracksDeltaZOverride")),
344  processSimulatedTracks_(iConfig.getParameter<bool>("processSimulatedTracks")),
345  processEmulatedTracks_(iConfig.getParameter<bool>("processEmulatedTracks")),
346  debug_(iConfig.getParameter<int>("debug")) {
347  // Confirm the the configuration makes sense
349  throw cms::Exception("You must process at least one of the track collections (simulated or emulated).");
350  }
351 
352  if (deltaZMax_.size() != deltaZMaxEtaBounds_.size() - 1) {
353  throw cms::Exception("The number of deltaZ cuts does not match the number of eta bins!");
354  }
355 
357  deltaZMax_ = std::vector<double>(deltaZMax_.size(), useDisplacedTracksDeltaZOverride_);
358  }
359 
360  // Get additional input tags and define the EDM output based on the previous configuration parameters
361  doDeltaZCutSim_ = false;
362  doDeltaZCutEmu_ = false;
364  produces<TTTrackRefCollection>(outputCollectionName_);
365  if (iConfig.exists("l1VerticesInputTag")) {
366  l1VerticesToken_ = consumes<l1t::VertexCollection>(iConfig.getParameter<edm::InputTag>("l1VerticesInputTag"));
367  doDeltaZCutSim_ = true;
368  produces<TTTrackRefCollection>(outputCollectionName_ + "Associated");
369  }
370  }
372  produces<TTTrackRefCollection>(outputCollectionName_ + "Emulation");
373  if (iConfig.exists("l1VerticesEmulationInputTag")) {
375  consumes<l1t::VertexWordCollection>(iConfig.getParameter<edm::InputTag>("l1VerticesEmulationInputTag"));
376  doDeltaZCutEmu_ = true;
377  produces<TTTrackRefCollection>(outputCollectionName_ + "AssociatedEmulation");
378  }
379  }
380 }
edm::ESGetToken< TrackerTopology, TrackerTopologyRcd > tTopoToken_
T getParameter(std::string const &) const
Definition: ParameterSet.h:307
bool exists(std::string const &parameterName) const
checks if a parameter exists
std::vector< double > deltaZMaxEtaBounds_
edm::EDGetTokenT< l1t::VertexCollection > l1VerticesToken_
const edm::ParameterSet cutSet_
edm::EDGetTokenT< l1t::VertexWordCollection > l1VerticesEmulationToken_
const edm::EDGetTokenT< TTTrackCollection > l1TracksToken_

◆ ~L1TrackSelectionProducer()

L1TrackSelectionProducer::~L1TrackSelectionProducer ( )
override

Definition at line 382 of file L1TrackSelectionProducer.cc.

382 {}

Member Function Documentation

◆ fillDescriptions()

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

Definition at line 598 of file L1TrackSelectionProducer.cc.

References edm::ParameterSetDescription::add(), edm::ConfigurationDescriptions::addWithDefaultLabel(), submitPVResolutionJobs::desc, HLT_2022v12_cff::InputTag, edm::ParameterDescriptionNode::setComment(), and AlCaHLTBitMon_QueryRunRegistry::string.

598  {
599  //L1TrackSelectionProducer
601  desc.add<edm::InputTag>("l1TracksInputTag", edm::InputTag("TTTracksFromTrackletEmulation", "Level1TTTracks"));
602  desc.addOptional<edm::InputTag>("l1VerticesInputTag", edm::InputTag("L1VertexFinder", "l1vertices"));
603  desc.addOptional<edm::InputTag>("l1VerticesEmulationInputTag",
604  edm::InputTag("L1VertexFinderEmulator", "l1verticesEmulation"));
605  desc.add<std::string>("outputCollectionName", "Level1TTTracksSelected");
606  {
607  edm::ParameterSetDescription descCutSet;
608  descCutSet.add<double>("ptMin", 2.0)->setComment("pt must be greater than this value, [GeV]");
609  descCutSet.add<double>("absEtaMax", 2.4)->setComment("absolute value of eta must be less than this value");
610  descCutSet.add<double>("absZ0Max", 15.0)->setComment("z0 must be less than this value, [cm]");
611  descCutSet.add<int>("nStubsMin", 4)->setComment("number of stubs must be greater than or equal to this value");
612  descCutSet.add<int>("nPSStubsMin", 0)
613  ->setComment("number of stubs in the PS Modules must be greater than or equal to this value");
614 
615  descCutSet.add<double>("reducedBendChi2Max", 2.25)->setComment("bend chi2 must be less than this value");
616  descCutSet.add<double>("reducedChi2RZMax", 5.0)->setComment("chi2rz/dof must be less than this value");
617  descCutSet.add<double>("reducedChi2RPhiMax", 20.0)->setComment("chi2rphi/dof must be less than this value");
618 
619  descCutSet.add<std::vector<double>>("deltaZMaxEtaBounds", {0.0, 0.7, 1.0, 1.2, 1.6, 2.0, 2.4})
620  ->setComment("these values define the bin boundaries in |eta|");
621  descCutSet.add<std::vector<double>>("deltaZMax", {0.37, 0.50, 0.60, 0.75, 1.00, 1.60})
622  ->setComment(
623  "delta z must be less than these values, there will be one less value here than in deltaZMaxEtaBounds, "
624  "[cm]");
625  desc.add<edm::ParameterSetDescription>("cutSet", descCutSet);
626  }
627  desc.add<double>("useDisplacedTracksDeltaZOverride", -1.0)
628  ->setComment("override the deltaZ cut value for displaced tracks");
629  desc.add<bool>("processSimulatedTracks", true)
630  ->setComment("return selected tracks after cutting on the floating point values");
631  desc.add<bool>("processEmulatedTracks", true)
632  ->setComment("return selected tracks after cutting on the bitwise emulated values");
633  desc.add<int>("debug", 0)->setComment("Verbosity levels: 0, 1, 2, 3");
634  descriptions.addWithDefaultLabel(desc);
635 }
void setComment(std::string const &value)
void addWithDefaultLabel(ParameterSetDescription const &psetDescription)
ParameterDescriptionBase * add(U const &iLabel, T const &value)

◆ printDebugInfo()

void L1TrackSelectionProducer::printDebugInfo ( const TTTrackCollectionHandle l1TracksHandle,
const TTTrackRefCollectionUPtr vTTTrackOutput,
const TTTrackRefCollectionUPtr vTTTrackEmulationOutput,
const TTTrackRefCollectionUPtr vTTTrackAssociatedOutput,
const TTTrackRefCollectionUPtr vTTTrackAssociatedEmulationOutput 
) const
private

Definition at line 388 of file L1TrackSelectionProducer.cc.

References debug_, dqm-mbProfile::log, printTrackInfo(), processEmulatedTracks_, processSimulatedTracks_, DBoxMetadataHelper::set_difference(), and HLT_2022v12_cff::track.

Referenced by produce().

392  {
393  edm::LogInfo log("L1TrackSelectionProducer");
394  log << "The original track collection (pt, eta, phi, nstub, bendchi2, chi2rz, chi2rphi, z0) values are ... \n";
395  for (const auto& track : *l1TracksHandle) {
396  printTrackInfo(log, track, debug_ >= 4);
397  }
398  log << "\t---\n\tNumber of tracks in this selection = " << l1TracksHandle->size() << "\n\n";
400  log << "The selected track collection (pt, eta, phi, nstub, bendchi2, chi2rz, chi2rphi, z0) values are ... \n";
401  for (const auto& track : *vTTTrackOutput) {
402  printTrackInfo(log, *track, debug_ >= 4);
403  }
404  log << "\t---\n\tNumber of tracks in this selection = " << vTTTrackOutput->size() << "\n\n";
405  }
407  log << "The emulation selected track collection (pt, eta, phi, nstub, bendchi2, chi2rz, chi2rphi, z0) values are "
408  "... \n";
409  for (const auto& track : *vTTTrackEmulationOutput) {
410  printTrackInfo(log, *track, debug_ >= 4);
411  }
412  log << "\t---\n\tNumber of tracks in this selection = " << vTTTrackEmulationOutput->size() << "\n\n";
413  }
415  TTTrackRefCollection inSimButNotEmu;
416  TTTrackRefCollection inEmuButNotSim;
417  std::set_difference(vTTTrackOutput->begin(),
418  vTTTrackOutput->end(),
419  vTTTrackEmulationOutput->begin(),
420  vTTTrackEmulationOutput->end(),
421  std::back_inserter(inSimButNotEmu));
422  std::set_difference(vTTTrackEmulationOutput->begin(),
423  vTTTrackEmulationOutput->end(),
424  vTTTrackOutput->begin(),
425  vTTTrackOutput->end(),
426  std::back_inserter(inEmuButNotSim));
427  log << "The set of tracks selected via cuts on the simulated values which are not in the set of tracks selected "
428  "by cutting on the emulated values ... \n";
429  for (const auto& track : inSimButNotEmu) {
430  printTrackInfo(log, *track, debug_ >= 3);
431  }
432  log << "\t---\n\tNumber of tracks in this selection = " << inSimButNotEmu.size() << "\n\n"
433  << "The set of tracks selected via cuts on the emulated values which are not in the set of tracks selected "
434  "by cutting on the simulated values ... \n";
435  for (const auto& track : inEmuButNotSim) {
436  printTrackInfo(log, *track, debug_ >= 3);
437  }
438  log << "\t---\n\tNumber of tracks in this selection = " << inEmuButNotSim.size() << "\n\n";
439  }
441  log << "The selected and leading vertex associated track collection (pt, eta, phi, nstub, bendchi2, chi2rz, "
442  "chi2rphi, z0) values are ... \n";
443  for (const auto& track : *vTTTrackAssociatedOutput) {
444  printTrackInfo(log, *track, debug_ >= 4);
445  }
446  log << "\t---\n\tNumber of tracks in this selection = " << vTTTrackAssociatedOutput->size() << "\n\n";
447  }
449  log << "The emulation selected and leading vertex associated track collection (pt, eta, phi, nstub, bendchi2, "
450  "chi2rz, chi2rphi, z0) values are "
451  "... \n";
452  for (const auto& track : *vTTTrackAssociatedEmulationOutput) {
453  printTrackInfo(log, *track, debug_ >= 4);
454  }
455  log << "\t---\n\tNumber of tracks in this selection = " << vTTTrackAssociatedEmulationOutput->size() << "\n\n";
456  }
458  TTTrackRefCollection inSimButNotEmu;
459  TTTrackRefCollection inEmuButNotSim;
460  std::set_difference(vTTTrackAssociatedOutput->begin(),
461  vTTTrackAssociatedOutput->end(),
462  vTTTrackAssociatedEmulationOutput->begin(),
463  vTTTrackAssociatedEmulationOutput->end(),
464  std::back_inserter(inSimButNotEmu));
465  std::set_difference(vTTTrackAssociatedEmulationOutput->begin(),
466  vTTTrackAssociatedEmulationOutput->end(),
467  vTTTrackAssociatedOutput->begin(),
468  vTTTrackAssociatedOutput->end(),
469  std::back_inserter(inEmuButNotSim));
470  log << "The set of tracks selected via cuts on the simulated values which are not in the set of tracks selected "
471  "by cutting on the emulated values ... \n";
472  for (const auto& track : inSimButNotEmu) {
473  printTrackInfo(log, *track, debug_ >= 3);
474  }
475  log << "\t---\n\tNumber of tracks in this selection = " << inSimButNotEmu.size() << "\n\n"
476  << "The set of tracks selected via cuts on the emulated values which are not in the set of tracks selected "
477  "by cutting on the simulated values ... \n";
478  for (const auto& track : inEmuButNotSim) {
479  printTrackInfo(log, *track, debug_ >= 3);
480  }
481  log << "\t---\n\tNumber of tracks in this selection = " << inEmuButNotSim.size() << "\n\n";
482  }
483 }
std::vector< TTTrackRef > TTTrackRefCollection
void printTrackInfo(edm::LogInfo &log, const L1Track &track, bool printEmulation=false) const
std::vector< std::string > set_difference(std::vector< std::string > const &v1, std::vector< std::string > const &v2)

◆ printTrackInfo()

void L1TrackSelectionProducer::printTrackInfo ( edm::LogInfo log,
const L1Track track,
bool  printEmulation = false 
) const
private

Definition at line 485 of file L1TrackSelectionProducer.cc.

References dqm-mbProfile::log, and HLT_2022v12_cff::track.

Referenced by printDebugInfo().

485  {
486  log << "\t(" << track.momentum().perp() << ", " << track.momentum().eta() << ", " << track.momentum().phi() << ", "
487  << track.getStubRefs().size() << ", " << track.stubPtConsistency() << ", " << track.chi2ZRed() << ", "
488  << track.chi2XYRed() << ", " << track.z0() << ")\n";
489 
490  if (printEmulation) {
491  ap_uint<TrackBitWidths::kPtSize> ptEmulationBits = track.getTrackWord()(
492  TTTrack_TrackWord::TrackBitLocations::kRinvMSB - 1, TTTrack_TrackWord::TrackBitLocations::kRinvLSB);
493  ap_ufixed<TrackBitWidths::kPtSize, TrackBitWidths::kPtMagSize> ptEmulation;
494  ptEmulation.V = ptEmulationBits.range();
495  TTTrack_TrackWord::tanl_t etaEmulationBits = track.getTanlWord();
496  ap_fixed<TrackBitWidths::kEtaSize, TrackBitWidths::kEtaMagSize> etaEmulation;
497  etaEmulation.V = etaEmulationBits.range();
498  log << "\t\t(" << ptEmulation.to_double() << ", " << etaEmulation.to_double() << ", " << track.getPhi() << ", "
499  << track.getNStubs() << ", " << track.getBendChi2() << ", " << track.getChi2RZ() << ", " << track.getChi2RPhi()
500  << ", " << track.getZ0() << ")\n";
501  }
502 }
ap_uint< TrackBitWidths::kTanlSize > tanl_t

◆ produce()

void L1TrackSelectionProducer::produce ( edm::StreamID  ,
edm::Event iEvent,
const edm::EventSetup iSetup 
) const
overrideprivatevirtual

Implements edm::global::EDProducerBase.

Definition at line 505 of file L1TrackSelectionProducer.cc.

References absEtaMax_, absZ0Max_, bendChi2Max_, debug_, deltaZMax_, deltaZMaxEtaBounds_, doDeltaZCutEmu_, doDeltaZCutSim_, edm::EventSetup::getData(), mps_fire::i, iEvent, l1TracksToken_, l1VerticesEmulationToken_, l1VerticesToken_, eostools::move(), nPSStubsMin_, nStubsMin_, outputCollectionName_, printDebugInfo(), processEmulatedTracks_, processSimulatedTracks_, ptMin_, reducedChi2RPhiMax_, reducedChi2RZMax_, HLT_2022v12_cff::track, tTopoToken_, l1t::Vertex::z0(), and l1t::VertexWord::z0().

505  {
506  auto vTTTrackOutput = std::make_unique<TTTrackRefCollection>();
507  auto vTTTrackAssociatedOutput = std::make_unique<TTTrackRefCollection>();
508  auto vTTTrackEmulationOutput = std::make_unique<TTTrackRefCollection>();
509  auto vTTTrackAssociatedEmulationOutput = std::make_unique<TTTrackRefCollection>();
510 
511  // Tracker Topology
512  const TrackerTopology& tTopo = iSetup.getData(tTopoToken_);
513 
514  TTTrackCollectionHandle l1TracksHandle;
515  edm::Handle<l1t::VertexCollection> l1VerticesHandle;
516  edm::Handle<l1t::VertexWordCollection> l1VerticesEmulationHandle;
517 
518  l1t::Vertex leadingVertex;
519  l1t::VertexWord leadingEmulationVertex;
520 
521  iEvent.getByToken(l1TracksToken_, l1TracksHandle);
522  size_t nOutputApproximate = l1TracksHandle->size();
524  if (doDeltaZCutSim_) {
525  iEvent.getByToken(l1VerticesToken_, l1VerticesHandle);
526  leadingVertex = l1VerticesHandle->at(0);
527  if (debug_ >= 2) {
528  edm::LogInfo("L1TrackSelectionProducer") << "leading vertex z0 = " << leadingVertex.z0();
529  }
530  }
531  vTTTrackOutput->reserve(nOutputApproximate);
532  vTTTrackAssociatedOutput->reserve(nOutputApproximate);
533  }
535  if (doDeltaZCutEmu_) {
536  iEvent.getByToken(l1VerticesEmulationToken_, l1VerticesEmulationHandle);
537  leadingEmulationVertex = l1VerticesEmulationHandle->at(0);
538  if (debug_ >= 2) {
539  edm::LogInfo("L1TrackSelectionProducer") << "leading emulation vertex z0 = " << leadingEmulationVertex.z0();
540  }
541  }
542  vTTTrackEmulationOutput->reserve(nOutputApproximate);
543  vTTTrackAssociatedEmulationOutput->reserve(nOutputApproximate);
544  }
545 
550  TTTrackDeltaZMaxSelector deltaZSel(deltaZMaxEtaBounds_, deltaZMax_);
551  TTTrackWordDeltaZMaxSelector deltaZSelEmu(deltaZMaxEtaBounds_, deltaZMax_);
552  TTTrackNPSStubsMinSelector nPSStubsSel(nPSStubsMin_, tTopo);
553 
554  for (size_t i = 0; i < nOutputApproximate; i++) {
555  const auto& track = l1TracksHandle->at(i);
556 
557  // Select tracks based on the floating point TTTrack
558  if (processSimulatedTracks_ && kinSel(track) && nPSStubsSel(track) && chi2Sel(track)) {
559  vTTTrackOutput->push_back(TTTrackRef(l1TracksHandle, i));
560  if (doDeltaZCutSim_ && deltaZSel(track, leadingVertex)) {
561  vTTTrackAssociatedOutput->push_back(TTTrackRef(l1TracksHandle, i));
562  }
563  }
564 
565  // Select tracks based on the bitwise accurate TTTrack_TrackWord
566  if (processEmulatedTracks_ && kinSelEmu(track) && chi2SelEmu(track)) {
567  vTTTrackEmulationOutput->push_back(TTTrackRef(l1TracksHandle, i));
568  if (doDeltaZCutEmu_ && deltaZSelEmu(track, leadingEmulationVertex)) {
569  vTTTrackAssociatedEmulationOutput->push_back(TTTrackRef(l1TracksHandle, i));
570  }
571  }
572  }
573 
574  if (debug_ >= 2) {
575  printDebugInfo(l1TracksHandle,
576  vTTTrackOutput,
577  vTTTrackEmulationOutput,
578  vTTTrackAssociatedOutput,
579  vTTTrackAssociatedEmulationOutput);
580  }
581 
582  // Put the outputs into the event
584  iEvent.put(std::move(vTTTrackOutput), outputCollectionName_);
585  if (doDeltaZCutSim_) {
586  iEvent.put(std::move(vTTTrackAssociatedOutput), outputCollectionName_ + "Associated");
587  }
588  }
590  iEvent.put(std::move(vTTTrackEmulationOutput), outputCollectionName_ + "Emulation");
591  if (doDeltaZCutEmu_) {
592  iEvent.put(std::move(vTTTrackAssociatedEmulationOutput), outputCollectionName_ + "AssociatedEmulation");
593  }
594  }
595 }
edm::ESGetToken< TrackerTopology, TrackerTopologyRcd > tTopoToken_
edm::Handle< TTTrackCollection > TTTrackCollectionHandle
AndSelector< TTTrackBendChi2MaxSelector, TTTrackChi2RZMaxSelector, TTTrackChi2RPhiMaxSelector > TTTrackBendChi2Chi2RZChi2RPhiMaxSelector
AndSelector< TTTrackWordBendChi2MaxSelector, TTTrackWordChi2RZMaxSelector, TTTrackWordChi2RPhiMaxSelector > TTTrackWordBendChi2Chi2RZChi2RPhiMaxSelector
AndSelector< TTTrackWordPtMinSelector, TTTrackWordAbsEtaMaxSelector, TTTrackWordAbsZ0MaxSelector, TTTrackWordNStubsMinSelector > TTTrackWordPtMinEtaMaxZ0MaxNStubsMinSelector
void printDebugInfo(const TTTrackCollectionHandle &l1TracksHandle, const TTTrackRefCollectionUPtr &vTTTrackOutput, const TTTrackRefCollectionUPtr &vTTTrackEmulationOutput, const TTTrackRefCollectionUPtr &vTTTrackAssociatedOutput, const TTTrackRefCollectionUPtr &vTTTrackAssociatedEmulationOutput) const
AndSelector< TTTrackPtMinSelector, TTTrackAbsEtaMaxSelector, TTTrackAbsZ0MaxSelector, TTTrackNStubsMinSelector > TTTrackPtMinEtaMaxZ0MaxNStubsMinSelector
int iEvent
Definition: GenABIO.cc:224
std::vector< double > deltaZMaxEtaBounds_
edm::EDGetTokenT< l1t::VertexCollection > l1VerticesToken_
edm::Ref< TTTrackCollection > TTTrackRef
bool getData(T &iHolder) const
Definition: EventSetup.h:122
Log< level::Info, false > LogInfo
double z0() const
Definition: VertexWord.h:156
edm::EDGetTokenT< l1t::VertexWordCollection > l1VerticesEmulationToken_
float z0() const
Definition: Vertex.h:21
def move(src, dest)
Definition: eostools.py:511
const edm::EDGetTokenT< TTTrackCollection > l1TracksToken_

Member Data Documentation

◆ absEtaMax_

const double L1TrackSelectionProducer::absEtaMax_
private

Definition at line 315 of file L1TrackSelectionProducer.cc.

Referenced by produce().

◆ absZ0Max_

const double L1TrackSelectionProducer::absZ0Max_
private

Definition at line 315 of file L1TrackSelectionProducer.cc.

Referenced by produce().

◆ bendChi2Max_

const double L1TrackSelectionProducer::bendChi2Max_
private

Definition at line 315 of file L1TrackSelectionProducer.cc.

Referenced by produce().

◆ cutSet_

const edm::ParameterSet L1TrackSelectionProducer::cutSet_
private

Definition at line 314 of file L1TrackSelectionProducer.cc.

◆ debug_

int L1TrackSelectionProducer::debug_
private

Definition at line 320 of file L1TrackSelectionProducer.cc.

Referenced by printDebugInfo(), and produce().

◆ deltaZMax_

std::vector<double> L1TrackSelectionProducer::deltaZMax_
private

Definition at line 317 of file L1TrackSelectionProducer.cc.

Referenced by L1TrackSelectionProducer(), and produce().

◆ deltaZMaxEtaBounds_

std::vector<double> L1TrackSelectionProducer::deltaZMaxEtaBounds_
private

Definition at line 317 of file L1TrackSelectionProducer.cc.

Referenced by L1TrackSelectionProducer(), and produce().

◆ doDeltaZCutEmu_

bool L1TrackSelectionProducer::doDeltaZCutEmu_
private

Definition at line 319 of file L1TrackSelectionProducer.cc.

Referenced by L1TrackSelectionProducer(), and produce().

◆ doDeltaZCutSim_

bool L1TrackSelectionProducer::doDeltaZCutSim_
private

Definition at line 319 of file L1TrackSelectionProducer.cc.

Referenced by L1TrackSelectionProducer(), and produce().

◆ l1TracksToken_

const edm::EDGetTokenT<TTTrackCollection> L1TrackSelectionProducer::l1TracksToken_
private

Definition at line 309 of file L1TrackSelectionProducer.cc.

Referenced by produce().

◆ l1VerticesEmulationToken_

edm::EDGetTokenT<l1t::VertexWordCollection> L1TrackSelectionProducer::l1VerticesEmulationToken_
private

Definition at line 311 of file L1TrackSelectionProducer.cc.

Referenced by L1TrackSelectionProducer(), and produce().

◆ l1VerticesToken_

edm::EDGetTokenT<l1t::VertexCollection> L1TrackSelectionProducer::l1VerticesToken_
private

Definition at line 310 of file L1TrackSelectionProducer.cc.

Referenced by L1TrackSelectionProducer(), and produce().

◆ nPSStubsMin_

const int L1TrackSelectionProducer::nPSStubsMin_
private

Definition at line 316 of file L1TrackSelectionProducer.cc.

Referenced by produce().

◆ nStubsMin_

const int L1TrackSelectionProducer::nStubsMin_
private

Definition at line 316 of file L1TrackSelectionProducer.cc.

Referenced by produce().

◆ outputCollectionName_

const std::string L1TrackSelectionProducer::outputCollectionName_
private

Definition at line 313 of file L1TrackSelectionProducer.cc.

Referenced by L1TrackSelectionProducer(), and produce().

◆ processEmulatedTracks_

bool L1TrackSelectionProducer::processEmulatedTracks_
private

Definition at line 319 of file L1TrackSelectionProducer.cc.

Referenced by L1TrackSelectionProducer(), printDebugInfo(), and produce().

◆ processSimulatedTracks_

bool L1TrackSelectionProducer::processSimulatedTracks_
private

Definition at line 319 of file L1TrackSelectionProducer.cc.

Referenced by L1TrackSelectionProducer(), printDebugInfo(), and produce().

◆ ptMin_

const double L1TrackSelectionProducer::ptMin_
private

Definition at line 315 of file L1TrackSelectionProducer.cc.

Referenced by produce().

◆ reducedChi2RPhiMax_

const double L1TrackSelectionProducer::reducedChi2RPhiMax_
private

Definition at line 315 of file L1TrackSelectionProducer.cc.

Referenced by produce().

◆ reducedChi2RZMax_

const double L1TrackSelectionProducer::reducedChi2RZMax_
private

Definition at line 315 of file L1TrackSelectionProducer.cc.

Referenced by produce().

◆ tTopoToken_

edm::ESGetToken<TrackerTopology, TrackerTopologyRcd> L1TrackSelectionProducer::tTopoToken_
private

Definition at line 312 of file L1TrackSelectionProducer.cc.

Referenced by produce().

◆ useDisplacedTracksDeltaZOverride_

const double L1TrackSelectionProducer::useDisplacedTracksDeltaZOverride_
private

Definition at line 318 of file L1TrackSelectionProducer.cc.

Referenced by L1TrackSelectionProducer().