CMS 3D CMS Logo

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

Create L3MuonTrajectorySeeds from L2 Muons in an outside-in manner. More...

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

Classes

struct  StrategyParameters
 Container for DNN outupts. More...
 

Public Member Functions

void beginJob () override
 
void produce (edm::StreamID sid, edm::Event &iEvent, const edm::EventSetup &iSetup) const override
 
 TSGForOIDNN (const edm::ParameterSet &iConfig)
 
 ~TSGForOIDNN () 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
 
ESResolverIndex const * esGetTokenIndices (edm::Transition iTrans) const
 
std::vector< ESResolverIndex > 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
 
void selectInputProcessBlocks (ProductRegistry const &productRegistry, ProcessBlockHelperBase const &processBlockHelperBase)
 
ProductResolverIndexAndSkipBit uncheckedIndexFrom (EDGetToken) const
 
void updateLookup (BranchType iBranchType, ProductResolverIndexHelper const &, bool iPrefetchMayGet)
 
void updateLookup (eventsetup::ESRecordsToProductResolverIndices 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 Member Functions

void evaluateClassifier (const std::unordered_map< std::string, float > &feature_map, tensorflow::Session *session, const pt::ptree &metadata, StrategyParameters &out, bool &dnnSuccess) const
 Evaluate DNN classifier. More...
 
void evaluateRegressor (const std::unordered_map< std::string, float > &feature_map, tensorflow::Session *session_HB, const pt::ptree &metadata_HB, tensorflow::Session *session_HLIP, const pt::ptree &metadata_HLIP, tensorflow::Session *session_HLMuS, const pt::ptree &metadata_HLMuS, StrategyParameters &out, bool &dnnSuccess) const
 Evaluate DNN regressor. More...
 
void initializeTensorflow () const
 
void makeSeedsFromHitDoublets (const GeometricSearchDet &layer, const TrajectoryStateOnSurface &tsos, const Propagator &propagatorAlong, const Chi2MeasurementEstimatorBase &estimator, const MeasurementTrackerEvent &measurementTracker, const NavigationSchool &navSchool, unsigned int &hitDoubletSeedsMade, unsigned int &numSeedsMade, const unsigned int &maxHitDoubletSeeds, unsigned int &layerCount, std::vector< TrajectorySeed > &out) const
 Similar to makeSeedsFromHits, but seed is created only if there are compatible hits on two adjacent layers. More...
 
void makeSeedsFromHits (const GeometricSearchDet &layer, const TrajectoryStateOnSurface &tsos, const Propagator &propagatorAlong, const Chi2MeasurementEstimatorBase &estimator, const MeasurementTrackerEvent &measurementTracker, unsigned int &hitSeedsMade, unsigned int &numSeedsMade, const unsigned int &maxHitSeeds, unsigned int &layerCount, std::vector< TrajectorySeed > &out) const
 Find hits on a given layer (TOB or TEC) and create seeds from updated TSOS with hit. More...
 
void makeSeedsWithoutHits (const GeometricSearchDet &layer, const TrajectoryStateOnSurface &tsos, const Propagator &propagatorAlong, const Chi2MeasurementEstimatorBase &estimator, double errorSF, unsigned int &hitlessSeedsMade, unsigned int &numSeedsMade, std::vector< TrajectorySeed > &out) const
 Create seeds without hits on a given layer (TOB or TEC) More...
 
void updateFeatureMap (std::unordered_map< std::string, float > &the_map, const reco::Track &l2, const TrajectoryStateOnSurface &tsos_IP, const TrajectoryStateOnSurface &tsos_MuS) const
 Update dictionary of inputs for DNN. More...
 

Private Attributes

const std::string dnnMetadataPath_
 DNN metadata. More...
 
std::string dnnModelPath_
 Settings for classifier. More...
 
std::string dnnModelPath_HB_
 Settings for regressor. More...
 
std::string dnnModelPath_HLIP_
 
std::string dnnModelPath_HLMuS_
 
const std::string estimatorName_
 Estimator used to find dets and TrajectoryMeasurements. More...
 
const double fixedErrorRescalingForHitless_
 Rescale L2 parameter uncertainties (fixed error vs pT, eta) More...
 
const bool getStrategyFromDNN_
 Get number of seeds to use from DNN output instead of "max..Seeds" parameters. More...
 
std::unique_ptr< tensorflow::GraphDef > graphDef_
 
std::unique_ptr< tensorflow::GraphDef > graphDef_HB_
 
std::unique_ptr< tensorflow::GraphDef > graphDef_HLIP_
 
std::unique_ptr< tensorflow::GraphDef > graphDef_HLMuS_
 
const double maxEtaForTOB_
 Maximum eta value to activate searching in the TOB. More...
 
const unsigned int maxHitDoubletSeeds_
 
const unsigned int maxHitlessSeeds_
 Maximum number of hitless seeds for each L2. More...
 
const unsigned int maxHitlessSeedsIP_
 
const unsigned int maxHitlessSeedsMuS_
 
const unsigned int maxHitSeeds_
 Maximum number of hitbased seeds for each L2. More...
 
const unsigned int maxSeeds_
 Maximum number of seeds for each L2. More...
 
const edm::EDGetTokenT< MeasurementTrackerEventmeasurementTrackerTag_
 
pt::ptree metadata_
 
const double minEtaForTEC_
 Minimum eta value to activate searching in the TEC. More...
 
const unsigned int numOfHitsToTry_
 How many hits to try per layer. More...
 
const unsigned int numOfLayersToTry_
 How many layers to try. More...
 
const edm::EDGetTokenT< reco::TrackCollectionsrc_
 Labels for input collections. More...
 
const edm::ESGetToken< Chi2MeasurementEstimatorBase, TrackingComponentsRecordt_estimatorH_
 Tokens for ESHandle. More...
 
const edm::ESGetToken< GlobalTrackingGeometry, GlobalTrackingGeometryRecordt_geometryH_
 
const edm::ESGetToken< MagneticField, IdealMagneticFieldRecordt_magfieldH_
 
const edm::ESGetToken< NavigationSchool, NavigationSchoolRecordt_navSchool_
 
const edm::ESGetToken< Propagator, TrackingComponentsRecordt_propagatorAlongH_
 
const edm::ESGetToken< Propagator, TrackingComponentsRecordt_propagatorOppositeH_
 
const edm::ESGetToken< Propagator, TrackingComponentsRecordt_SHPOpposite_
 
const edm::ESGetToken< TrackerGeometry, TrackerDigiGeometryRecordt_tmpTkGeometryH_
 
tensorflow::Session * tf_session_
 
tensorflow::Session * tf_session_HB_
 
tensorflow::Session * tf_session_HLIP_
 
tensorflow::Session * tf_session_HLMuS_
 
const std::string theCategory_
 
const std::unique_ptr< TrajectoryStateUpdatorupdator_
 
const bool useRegressor_
 Whether to use DNN regressor (if false, will use classifier) More...
 

Additional Inherited Members

- Public Types inherited from edm::global::EDProducerBase
typedef EDProducerBase ModuleType
 
- Public Types inherited from edm::ProducerBase
template<typename T >
using BranchAliasSetterT = ProductRegistryHelper::BranchAliasSetterT< T >
 
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 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

Create L3MuonTrajectorySeeds from L2 Muons in an outside-in manner.

Author
Dmitry Kondratyev, Arnab Purohit, Jan-Frederik Schulte (Purdue University, West Lafayette, USA)

Definition at line 40 of file TSGForOIDNN.cc.

Constructor & Destructor Documentation

◆ TSGForOIDNN()

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

Definition at line 181 of file TSGForOIDNN.cc.

References tensorflow::createSession(), HLT_2024v12_cff::dnnMetadataPath, dnnMetadataPath_, dnnModelPath_, dnnModelPath_HB_, dnnModelPath_HLIP_, dnnModelPath_HLMuS_, getStrategyFromDNN_, graphDef_, graphDef_HB_, graphDef_HLIP_, graphDef_HLMuS_, tensorflow::loadGraphDef(), metadata_, tensorflow::setLogging(), AlCaHLTBitMon_QueryRunRegistry::string, tf_session_, tf_session_HB_, tf_session_HLIP_, tf_session_HLMuS_, and useRegressor_.

182  : src_(consumes(iConfig.getParameter<edm::InputTag>("src"))),
183  t_estimatorH_(esConsumes(edm::ESInputTag("", iConfig.getParameter<std::string>("estimator")))),
185  t_propagatorAlongH_(esConsumes(edm::ESInputTag("", iConfig.getParameter<std::string>("propagatorName")))),
189  t_navSchool_(esConsumes(edm::ESInputTag("", "SimpleNavigationSchool"))),
190  t_SHPOpposite_(esConsumes(edm::ESInputTag("", "hltESPSteppingHelixPropagatorOpposite"))),
191  updator_(new KFUpdator()),
192  measurementTrackerTag_(consumes(iConfig.getParameter<edm::InputTag>("MeasurementTrackerEvent"))),
193  theCategory_(std::string("Muon|RecoMuon|TSGForOIDNN")),
194  maxSeeds_(iConfig.getParameter<uint32_t>("maxSeeds")),
195  maxHitSeeds_(iConfig.getParameter<uint32_t>("maxHitSeeds")),
196  maxHitlessSeeds_(iConfig.getParameter<uint32_t>("maxHitlessSeeds")),
197  numOfLayersToTry_(iConfig.getParameter<int32_t>("layersToTry")),
198  numOfHitsToTry_(iConfig.getParameter<int32_t>("hitsToTry")),
199  fixedErrorRescalingForHitless_(iConfig.getParameter<double>("fixedErrorRescaleFactorForHitless")),
200  minEtaForTEC_(iConfig.getParameter<double>("minEtaForTEC")),
201  maxEtaForTOB_(iConfig.getParameter<double>("maxEtaForTOB")),
202  maxHitlessSeedsIP_(iConfig.getParameter<uint32_t>("maxHitlessSeedsIP")),
203  maxHitlessSeedsMuS_(iConfig.getParameter<uint32_t>("maxHitlessSeedsMuS")),
204  maxHitDoubletSeeds_(iConfig.getParameter<uint32_t>("maxHitDoubletSeeds")),
205  getStrategyFromDNN_(iConfig.getParameter<bool>("getStrategyFromDNN")),
206  useRegressor_(iConfig.getParameter<bool>("useRegressor")),
207  dnnMetadataPath_(iConfig.getParameter<std::string>("dnnMetadataPath")) {
208  if (getStrategyFromDNN_) {
210  pt::read_json(dnnMetadataPath.fullPath(), metadata_);
212 
213  if (useRegressor_) {
214  // use regressor
215  dnnModelPath_HB_ = metadata_.get<std::string>("HB.dnnmodel_path");
216  edm::FileInPath dnnPath_HB(dnnModelPath_HB_);
217  graphDef_HB_ = std::unique_ptr<tensorflow::GraphDef>(tensorflow::loadGraphDef(dnnPath_HB.fullPath()));
219 
220  dnnModelPath_HLIP_ = metadata_.get<std::string>("HLIP.dnnmodel_path");
221  edm::FileInPath dnnPath_HLIP(dnnModelPath_HLIP_);
222  graphDef_HLIP_ = std::unique_ptr<tensorflow::GraphDef>(tensorflow::loadGraphDef(dnnPath_HLIP.fullPath()));
224 
225  dnnModelPath_HLMuS_ = metadata_.get<std::string>("HLMuS.dnnmodel_path");
226  edm::FileInPath dnnPath_HLMuS(dnnModelPath_HLMuS_);
227  graphDef_HLMuS_ = std::unique_ptr<tensorflow::GraphDef>(tensorflow::loadGraphDef(dnnPath_HLMuS.fullPath()));
229  } else {
230  // use classifier (default)
231  dnnModelPath_ = metadata_.get<std::string>("dnnmodel_path");
233  graphDef_ = std::unique_ptr<tensorflow::GraphDef>(tensorflow::loadGraphDef(dnnPath.fullPath()));
235  }
236  }
237  produces<std::vector<TrajectorySeed> >();
238 }
const unsigned int numOfHitsToTry_
How many hits to try per layer.
Definition: TSGForOIDNN.cc:73
std::string dnnModelPath_HLIP_
Definition: TSGForOIDNN.cc:101
const unsigned int maxSeeds_
Maximum number of seeds for each L2.
Definition: TSGForOIDNN.cc:65
T getParameter(std::string const &) const
Definition: ParameterSet.h:307
std::string dnnModelPath_HLMuS_
Definition: TSGForOIDNN.cc:102
tensorflow::Session * tf_session_HLMuS_
Definition: TSGForOIDNN.cc:108
const edm::ESGetToken< NavigationSchool, NavigationSchoolRecord > t_navSchool_
Definition: TSGForOIDNN.cc:58
const edm::ESGetToken< GlobalTrackingGeometry, GlobalTrackingGeometryRecord > t_geometryH_
Definition: TSGForOIDNN.cc:57
const edm::EDGetTokenT< MeasurementTrackerEvent > measurementTrackerTag_
Definition: TSGForOIDNN.cc:61
GraphDef * loadGraphDef(const std::string &pbFile)
Definition: TensorFlow.cc:120
tensorflow::Session * tf_session_HB_
Definition: TSGForOIDNN.cc:104
const unsigned int maxHitlessSeedsMuS_
Definition: TSGForOIDNN.cc:86
const edm::EDGetTokenT< reco::TrackCollection > src_
Labels for input collections.
Definition: TSGForOIDNN.cc:50
const unsigned int maxHitlessSeedsIP_
Definition: TSGForOIDNN.cc:85
std::unique_ptr< tensorflow::GraphDef > graphDef_HLIP_
Definition: TSGForOIDNN.cc:105
const edm::ESGetToken< Chi2MeasurementEstimatorBase, TrackingComponentsRecord > t_estimatorH_
Tokens for ESHandle.
Definition: TSGForOIDNN.cc:52
const double minEtaForTEC_
Minimum eta value to activate searching in the TEC.
Definition: TSGForOIDNN.cc:79
EDGetTokenT< ProductType > consumes(edm::InputTag const &tag)
const double fixedErrorRescalingForHitless_
Rescale L2 parameter uncertainties (fixed error vs pT, eta)
Definition: TSGForOIDNN.cc:75
const std::string dnnMetadataPath_
DNN metadata.
Definition: TSGForOIDNN.cc:111
const std::string theCategory_
Definition: TSGForOIDNN.cc:62
const edm::ESGetToken< Propagator, TrackingComponentsRecord > t_propagatorOppositeH_
Definition: TSGForOIDNN.cc:55
const unsigned int maxHitSeeds_
Maximum number of hitbased seeds for each L2.
Definition: TSGForOIDNN.cc:67
const unsigned int maxHitDoubletSeeds_
Definition: TSGForOIDNN.cc:87
std::string dnnModelPath_
Settings for classifier.
Definition: TSGForOIDNN.cc:95
const bool useRegressor_
Whether to use DNN regressor (if false, will use classifier)
Definition: TSGForOIDNN.cc:92
Session * createSession()
Definition: TensorFlow.cc:137
void setLogging(const std::string &level="3")
Definition: TensorFlow.cc:81
const edm::ESGetToken< Propagator, TrackingComponentsRecord > t_SHPOpposite_
Definition: TSGForOIDNN.cc:59
const double maxEtaForTOB_
Maximum eta value to activate searching in the TOB.
Definition: TSGForOIDNN.cc:81
std::string dnnModelPath_HB_
Settings for regressor.
Definition: TSGForOIDNN.cc:100
std::unique_ptr< tensorflow::GraphDef > graphDef_
Definition: TSGForOIDNN.cc:96
const edm::ESGetToken< MagneticField, IdealMagneticFieldRecord > t_magfieldH_
Definition: TSGForOIDNN.cc:53
std::unique_ptr< tensorflow::GraphDef > graphDef_HB_
Definition: TSGForOIDNN.cc:103
tensorflow::Session * tf_session_
Definition: TSGForOIDNN.cc:97
const edm::ESGetToken< Propagator, TrackingComponentsRecord > t_propagatorAlongH_
Definition: TSGForOIDNN.cc:54
const unsigned int numOfLayersToTry_
How many layers to try.
Definition: TSGForOIDNN.cc:71
const bool getStrategyFromDNN_
Get number of seeds to use from DNN output instead of "max..Seeds" parameters.
Definition: TSGForOIDNN.cc:90
std::unique_ptr< tensorflow::GraphDef > graphDef_HLMuS_
Definition: TSGForOIDNN.cc:107
pt::ptree metadata_
Definition: TSGForOIDNN.cc:112
const std::unique_ptr< TrajectoryStateUpdator > updator_
Definition: TSGForOIDNN.cc:60
const edm::ESGetToken< TrackerGeometry, TrackerDigiGeometryRecord > t_tmpTkGeometryH_
Definition: TSGForOIDNN.cc:56
const unsigned int maxHitlessSeeds_
Maximum number of hitless seeds for each L2.
Definition: TSGForOIDNN.cc:69
tensorflow::Session * tf_session_HLIP_
Definition: TSGForOIDNN.cc:106

◆ ~TSGForOIDNN()

TSGForOIDNN::~TSGForOIDNN ( )
override

Definition at line 240 of file TSGForOIDNN.cc.

References tensorflow::closeSession(), getStrategyFromDNN_, tf_session_, tf_session_HB_, tf_session_HLIP_, tf_session_HLMuS_, and useRegressor_.

240  {
241  if (getStrategyFromDNN_) {
242  if (useRegressor_) {
246  } else {
248  }
249  }
250 }
tensorflow::Session * tf_session_HLMuS_
Definition: TSGForOIDNN.cc:108
tensorflow::Session * tf_session_HB_
Definition: TSGForOIDNN.cc:104
bool closeSession(Session *&session)
Definition: TensorFlow.cc:234
const bool useRegressor_
Whether to use DNN regressor (if false, will use classifier)
Definition: TSGForOIDNN.cc:92
tensorflow::Session * tf_session_
Definition: TSGForOIDNN.cc:97
const bool getStrategyFromDNN_
Get number of seeds to use from DNN output instead of "max..Seeds" parameters.
Definition: TSGForOIDNN.cc:90
tensorflow::Session * tf_session_HLIP_
Definition: TSGForOIDNN.cc:106

Member Function Documentation

◆ beginJob()

void TSGForOIDNN::beginJob ( void  )
overridevirtual

Reimplemented from edm::global::EDProducerBase.

Definition at line 252 of file TSGForOIDNN.cc.

References initializeTensorflow().

void initializeTensorflow() const
Definition: TSGForOIDNN.cc:287

◆ evaluateClassifier()

void TSGForOIDNN::evaluateClassifier ( const std::unordered_map< std::string, float > &  feature_map,
tensorflow::Session *  session,
const pt::ptree &  metadata,
StrategyParameters out,
bool &  dnnSuccess 
) const
private

Evaluate DNN classifier.

Definition at line 879 of file TSGForOIDNN.cc.

References nano_mu_digi_cff::float, alignmentValidation::fname, mps_fire::i, input, label, OccupancyTask_cfi::metadata, MillePedeFileConverter_cfg::out, PatBasicFWLiteJetAnalyzer_Selector_cfg::outputs, tensorflow::run(), AlCaHLTBitMon_QueryRunRegistry::string, and to_string().

Referenced by initializeTensorflow(), and produce().

883  {
884  int n_features = metadata.get<int>("n_features", 0);
885 
886  // Prepare tensor for DNN inputs
887  tensorflow::Tensor input(tensorflow::DT_FLOAT, {1, n_features});
889  int i_feature = 0;
890  for (const pt::ptree::value_type& feature : metadata.get_child("feature_names")) {
891  fname = feature.second.data();
892  if (feature_map.find(fname) == feature_map.end()) {
893  // don't evaluate DNN if any input feature is missing
894  dnnSuccess = false;
895  } else {
896  input.matrix<float>()(0, i_feature) = float(feature_map.at(fname));
897  i_feature++;
898  }
899  }
900 
901  // Prepare tensor for DNN outputs
902  std::vector<tensorflow::Tensor> outputs;
903 
904  // Evaluate DNN and put results in output tensor
905  std::string inputLayer = metadata.get<std::string>("input_layer");
906  std::string outputLayer = metadata.get<std::string>("output_layer");
907 
908  tensorflow::run(session, {{inputLayer, input}}, {outputLayer}, &outputs);
909  tensorflow::Tensor out_tensor = outputs[0];
910  tensorflow::TTypes<float, 1>::Matrix dnn_outputs = out_tensor.matrix<float>();
911 
912  // Find output with largest prediction
913  int imax = 0;
914  float out_max = 0;
915  for (long long int i = 0; i < out_tensor.dim_size(1); i++) {
916  float ith_output = dnn_outputs(0, i);
917  if (ith_output > out_max) {
918  imax = i;
919  out_max = ith_output;
920  }
921  }
922 
923  // Decode output
924  const std::string label = "output_labels.label_" + std::to_string(imax);
925  out.nHBd = metadata.get<int>(label + ".nHBd");
926  out.nHLIP = metadata.get<int>(label + ".nHLIP");
927  out.nHLMuS = metadata.get<int>(label + ".nHLMuS");
928  out.sf = metadata.get<int>(label + ".SF");
929 
930  dnnSuccess = true;
931 }
static std::string to_string(const XMLCh *ch)
static std::string const input
Definition: EdmProvDump.cc:50
char const * label
void run(Session *session, const NamedTensorList &inputs, const std::vector< std::string > &outputNames, std::vector< Tensor > *outputs, const thread::ThreadPoolOptions &threadPoolOptions)
Definition: TensorFlow.cc:272
string fname
main script
portabletest::Matrix Matrix

◆ evaluateRegressor()

void TSGForOIDNN::evaluateRegressor ( const std::unordered_map< std::string, float > &  feature_map,
tensorflow::Session *  session_HB,
const pt::ptree &  metadata_HB,
tensorflow::Session *  session_HLIP,
const pt::ptree &  metadata_HLIP,
tensorflow::Session *  session_HLMuS,
const pt::ptree &  metadata_HLMuS,
StrategyParameters out,
bool &  dnnSuccess 
) const
private

Evaluate DNN regressor.

Definition at line 936 of file TSGForOIDNN.cc.

References nano_mu_digi_cff::float, alignmentValidation::fname, input, MillePedeFileConverter_cfg::out, tensorflow::run(), and AlCaHLTBitMon_QueryRunRegistry::string.

Referenced by produce().

944  {
945  int n_features = metadata_HB.get<int>("n_features", 0);
946 
947  // Prepare tensor for DNN inputs
948  tensorflow::Tensor input(tensorflow::DT_FLOAT, {1, n_features});
950  int i_feature = 0;
951  for (const pt::ptree::value_type& feature : metadata_HB.get_child("feature_names")) {
952  fname = feature.second.data();
953  if (feature_map.find(fname) == feature_map.end()) {
954  // don't evaluate DNN if any input feature is missing
955  dnnSuccess = false;
956  } else {
957  input.matrix<float>()(0, i_feature) = float(feature_map.at(fname));
958  i_feature++;
959  }
960  }
961 
962  // Prepare tensor for DNN outputs
963  std::vector<tensorflow::Tensor> outputs_HB;
964  // Evaluate DNN and put results in output tensor
965  std::string inputLayer_HB = metadata_HB.get<std::string>("input_layer");
966  std::string outputLayer_HB = metadata_HB.get<std::string>("output_layer");
967  tensorflow::run(session_HB, {{inputLayer_HB, input}}, {outputLayer_HB}, &outputs_HB);
968  tensorflow::Tensor out_tensor_HB = outputs_HB[0];
969  tensorflow::TTypes<float, 1>::Matrix dnn_outputs_HB = out_tensor_HB.matrix<float>();
970 
971  // Prepare tensor for DNN outputs
972  std::vector<tensorflow::Tensor> outputs_HLIP;
973  // Evaluate DNN and put results in output tensor
974  std::string inputLayer_HLIP = metadata_HLIP.get<std::string>("input_layer");
975  std::string outputLayer_HLIP = metadata_HLIP.get<std::string>("output_layer");
976  tensorflow::run(session_HLIP, {{inputLayer_HLIP, input}}, {outputLayer_HLIP}, &outputs_HLIP);
977  tensorflow::Tensor out_tensor_HLIP = outputs_HLIP[0];
978  tensorflow::TTypes<float, 1>::Matrix dnn_outputs_HLIP = out_tensor_HLIP.matrix<float>();
979 
980  // Prepare tensor for DNN outputs
981  std::vector<tensorflow::Tensor> outputs_HLMuS;
982  // Evaluate DNN and put results in output tensor
983  std::string inputLayer_HLMuS = metadata_HLMuS.get<std::string>("input_layer");
984  std::string outputLayer_HLMuS = metadata_HLMuS.get<std::string>("output_layer");
985  tensorflow::run(session_HLMuS, {{inputLayer_HLMuS, input}}, {outputLayer_HLMuS}, &outputs_HLMuS);
986  tensorflow::Tensor out_tensor_HLMuS = outputs_HLMuS[0];
987  tensorflow::TTypes<float, 1>::Matrix dnn_outputs_HLMuS = out_tensor_HLMuS.matrix<float>();
988 
989  // Decode output
990  out.nHBd = round(dnn_outputs_HB(0, 0));
991  out.nHLIP = round(dnn_outputs_HLIP(0, 0));
992  out.sf = round(dnn_outputs_HLIP(0, 1));
993  out.nHLMuS = round(dnn_outputs_HLMuS(0, 0));
994 
995  // Prevent prediction of negative number of seeds or too many seeds
996  out.nHBd = std::clamp(out.nHBd, 0, 10);
997  out.nHLIP = std::clamp(out.nHLIP, 0, 10);
998  out.nHLMuS = std::clamp(out.nHLMuS, 0, 10);
999 
1000  // Prevent prediction of 0 seeds in total
1001  if (out.nHBd == 0 && out.nHLIP == 0 && out.nHLMuS == 0) {
1002  // default strategy, similar to Run 2
1003  out.nHBd = 1;
1004  out.nHLIP = 5;
1005  }
1006 
1007  // Prevent extreme predictions for scale factors
1008  // (on average SF=2 was found to be optimal)
1009  if (out.sf <= 0)
1010  out.sf = 2;
1011  if (out.sf > 10)
1012  out.sf = 10;
1013 
1014  dnnSuccess = true;
1015 }
static std::string const input
Definition: EdmProvDump.cc:50
void run(Session *session, const NamedTensorList &inputs, const std::vector< std::string > &outputNames, std::vector< Tensor > *outputs, const thread::ThreadPoolOptions &threadPoolOptions)
Definition: TensorFlow.cc:272
string fname
main script
portabletest::Matrix Matrix

◆ fillDescriptions()

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

Definition at line 1020 of file TSGForOIDNN.cc.

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

1020  {
1022  desc.add<edm::InputTag>("src", edm::InputTag("hltL2Muons", "UpdatedAtVtx"));
1023  desc.add<int>("layersToTry", 2);
1024  desc.add<double>("fixedErrorRescaleFactorForHitless", 2.0);
1025  desc.add<int>("hitsToTry", 1);
1026  desc.add<edm::InputTag>("MeasurementTrackerEvent", edm::InputTag("hltSiStripClusters"));
1027  desc.add<std::string>("estimator", "hltESPChi2MeasurementEstimator100");
1028  desc.add<double>("maxEtaForTOB", 1.8);
1029  desc.add<double>("minEtaForTEC", 0.7);
1030  desc.addUntracked<bool>("debug", false);
1031  desc.add<unsigned int>("maxSeeds", 20);
1032  desc.add<unsigned int>("maxHitlessSeeds", 5);
1033  desc.add<unsigned int>("maxHitSeeds", 1);
1034  desc.add<std::string>("propagatorName", "PropagatorWithMaterialParabolicMf");
1035  desc.add<unsigned int>("maxHitlessSeedsIP", 5);
1036  desc.add<unsigned int>("maxHitlessSeedsMuS", 0);
1037  desc.add<unsigned int>("maxHitDoubletSeeds", 0);
1038  desc.add<bool>("getStrategyFromDNN", false);
1039  desc.add<bool>("useRegressor", false);
1040  desc.add<std::string>("dnnMetadataPath", "");
1041  descriptions.add("tsgForOIDNN", desc);
1042 }
void add(std::string const &label, ParameterSetDescription const &psetDescription)

◆ initializeTensorflow()

void TSGForOIDNN::initializeTensorflow ( ) const
private

Definition at line 287 of file TSGForOIDNN.cc.

References evaluateClassifier(), getStrategyFromDNN_, metadata_, tf_session_, and useRegressor_.

Referenced by beginJob().

287  {
288  if (getStrategyFromDNN_ and not useRegressor_) {
289  // Container for DNN outputs
290  StrategyParameters strPars;
291  bool dnnSuccess = false;
292  evaluateClassifier(dummyFeatureMap(), tf_session_, metadata_, strPars, dnnSuccess);
293  }
294 }
const bool useRegressor_
Whether to use DNN regressor (if false, will use classifier)
Definition: TSGForOIDNN.cc:92
tensorflow::Session * tf_session_
Definition: TSGForOIDNN.cc:97
const bool getStrategyFromDNN_
Get number of seeds to use from DNN output instead of "max..Seeds" parameters.
Definition: TSGForOIDNN.cc:90
pt::ptree metadata_
Definition: TSGForOIDNN.cc:112
void evaluateClassifier(const std::unordered_map< std::string, float > &feature_map, tensorflow::Session *session, const pt::ptree &metadata, StrategyParameters &out, bool &dnnSuccess) const
Evaluate DNN classifier.
Definition: TSGForOIDNN.cc:879

◆ makeSeedsFromHitDoublets()

void TSGForOIDNN::makeSeedsFromHitDoublets ( const GeometricSearchDet layer,
const TrajectoryStateOnSurface tsos,
const Propagator propagatorAlong,
const Chi2MeasurementEstimatorBase estimator,
const MeasurementTrackerEvent measurementTracker,
const NavigationSchool navSchool,
unsigned int &  hitDoubletSeedsMade,
unsigned int &  numSeedsMade,
const unsigned int &  maxHitDoubletSeeds,
unsigned int &  layerCount,
std::vector< TrajectorySeed > &  out 
) const
private

Similar to makeSeedsFromHits, but seed is created only if there are compatible hits on two adjacent layers.

Definition at line 630 of file TSGForOIDNN.cc.

References alongMomentum, MeasurementDetWithData::fastMeasurements(), newFWLiteAna::found, TrajectoryStateOnSurface::freeState(), MeasurementDetWithData::isNull(), TrajectoryStateOnSurface::isValid(), nano_mu_digi_cff::layer, LogTrace, HLT_2024v12_cff::maxHitDoubletSeeds, HLTSiStripMonitoring_cff::measurementTracker, eostools::move(), HLT_2024v12_cff::navSchool, numOfHitsToTry_, oppositeToMomentum, MillePedeFileConverter_cfg::out, trajectoryStateTransform::persistentState(), L1TMuonDQMOffline_cfi::propagatorAlong, edm::OwnVector< T, P >::push_back(), fileCollector::seed, edm::OwnVector< T, P >::size(), jetUpdater_cfi::sort, and updator_.

Referenced by produce().

640  {
641  // This method is similar to makeSeedsFromHits, but the seed is created
642  // only when in addition to a hit on a given layer, there are more compatible hits
643  // on next layers (going from outside inwards), compatible with updated TSOS.
644  // If that's the case, multiple compatible hits are used to create a single seed.
645 
646  // Configured to only check the immideately adjacent layer and add one more hit
647  int max_addtnl_layers = 1; // max number of additional layers to scan
648  int max_meas = 1; // number of measurements to consider on each additional layer
649 
650  // // // First, regular procedure to find a compatible hit - like in makeSeedsFromHits // // //
651 
652  const TrajectoryStateOnSurface& onLayer(tsos);
653 
654  // Find dets compatible with original TSOS
655  std::vector<GeometricSearchDet::DetWithState> dets;
656  layer.compatibleDetsV(onLayer, propagatorAlong, estimator, dets);
657 
658  LogTrace("TSGForOIDNN") << "TSGForOIDNN::makeSeedsFromHitDoublets: Find measurements on each detWithState "
659  << dets.size();
660  std::vector<TrajectoryMeasurement> meas;
661 
662  // Loop over dets
663  for (auto const& detI : dets) {
664  MeasurementDetWithData det = measurementTracker.idToDet(detI.first->geographicalId());
665 
666  if (det.isNull())
667  continue; // skip if det does not exist
668  if (!detI.second.isValid())
669  continue; // skip if TSOS is invalid
670 
671  // Find measurements on this det
672  std::vector<TrajectoryMeasurement> mymeas = det.fastMeasurements(detI.second, onLayer, propagatorAlong, estimator);
673 
674  // Save valid measurements
675  for (auto const& measurement : mymeas) {
676  if (measurement.recHit()->isValid())
677  meas.push_back(measurement);
678  } // end loop over meas
679  } // end loop over dets
680 
681  LogTrace("TSGForOIDNN") << "TSGForOIDNN::makeSeedsFromHitDoublets: Update TSOS using TMs after sorting, then create "
682  "Trajectory Seed, number of TM = "
683  << meas.size();
684 
685  // sort valid measurements found on the first layer
686  std::sort(meas.begin(), meas.end(), TrajMeasLessEstim());
687 
688  unsigned int found = 0;
689 
690  // Loop over all valid measurements compatible with original TSOS
691  //for (std::vector<TrajectoryMeasurement>::const_iterator mea = meas.begin(); mea != meas.end(); ++mea) {
692  for (auto const& measurement : meas) {
693  if (hitDoubletSeedsMade >= maxHitDoubletSeeds)
694  return; // abort if enough seeds created
695 
696  // Update TSOS with measurement on first considered layer
697  TrajectoryStateOnSurface updatedTSOS = updator_->update(measurement.forwardPredictedState(), *measurement.recHit());
698 
699  LogTrace("TSGForOIDNN") << "TSGForOIDNN::makeSeedsFromHitDoublets: TSOS for TM " << found;
700  if (not updatedTSOS.isValid())
701  continue; // Skip if updated TSOS is invalid
702 
704 
705  // Save hit on first layer
706  seedHits.push_back(*measurement.recHit()->hit());
707  const DetLayer* detLayer = dynamic_cast<const DetLayer*>(&layer);
708 
709  // // // Now for this measurement we will loop over additional layers and try to update the TSOS again // // //
710 
711  // find layers compatible with updated TSOS
712  auto const& compLayers = navSchool.nextLayers(*detLayer, *updatedTSOS.freeState(), alongMomentum);
713 
714  int addtnl_layers_scanned = 0;
715  int found_compatible_on_next_layer = 0;
716  int det_id = 0;
717 
718  // Copy updated TSOS - we will update it again with a measurement from the next layer, if we find it
719  TrajectoryStateOnSurface updatedTSOS_next(updatedTSOS);
720 
721  // loop over layers compatible with updated TSOS
722  for (auto compLayer : compLayers) {
723  int nmeas = 0;
724 
725  if (addtnl_layers_scanned >= max_addtnl_layers)
726  break; // break if we already looped over enough layers
727  if (found_compatible_on_next_layer > 0)
728  break; // break if we already found additional hit
729 
730  // find dets compatible with updated TSOS
731  std::vector<GeometricSearchDet::DetWithState> dets_next;
732  TrajectoryStateOnSurface onLayer_next(updatedTSOS);
733 
734  compLayer->compatibleDetsV(onLayer_next, propagatorAlong, estimator, dets_next);
735 
736  //if (!detWithState.size()) continue;
737  std::vector<TrajectoryMeasurement> meas_next;
738 
739  // find measurements on dets_next and save the valid ones
740  for (auto const& detI_next : dets_next) {
741  MeasurementDetWithData det = measurementTracker.idToDet(detI_next.first->geographicalId());
742 
743  if (det.isNull())
744  continue; // skip if det does not exist
745  if (!detI_next.second.isValid())
746  continue; // skip if TSOS is invalid
747 
748  // Find measurements on this det
749  std::vector<TrajectoryMeasurement> mymeas_next =
750  det.fastMeasurements(detI_next.second, onLayer_next, propagatorAlong, estimator);
751 
752  for (auto const& mea_next : mymeas_next) {
753  // save valid measurements
754  if (mea_next.recHit()->isValid())
755  meas_next.push_back(mea_next);
756 
757  } // end loop over mymeas_next
758  } // end loop over dets_next
759 
760  // sort valid measurements found on this layer
761  std::sort(meas_next.begin(), meas_next.end(), TrajMeasLessEstim());
762 
763  // loop over valid measurements compatible with updated TSOS (TSOS updated with a hit on the first layer)
764  for (auto const& mea_next : meas_next) {
765  if (nmeas >= max_meas)
766  break; // skip if we already found enough hits
767 
768  // try to update TSOS again, with an additional hit
769  updatedTSOS_next = updator_->update(mea_next.forwardPredictedState(), *mea_next.recHit());
770 
771  if (not updatedTSOS_next.isValid())
772  continue; // skip if TSOS updated with additional hit is not valid
773 
774  // If there was a compatible hit on this layer, we end up here.
775  // An additional compatible hit is saved.
776  seedHits.push_back(*mea_next.recHit()->hit());
777  det_id = mea_next.recHit()->geographicalId().rawId();
778  nmeas++;
779  found_compatible_on_next_layer++;
780 
781  } // end loop over meas_next
782 
783  addtnl_layers_scanned++;
784 
785  } // end loop over compLayers (additional layers scanned after the original layer)
786 
787  if (found_compatible_on_next_layer == 0)
788  continue;
789  // only consider the hit if there was a compatible hit on one of the additional scanned layers
790 
791  // Create a seed from two saved hits
792  PTrajectoryStateOnDet const& pstate = trajectoryStateTransform::persistentState(updatedTSOS_next, det_id);
793  TrajectorySeed seed(pstate, std::move(seedHits), oppositeToMomentum);
794 
795  LogTrace("TSGForOIDNN") << "TSGForOIDNN::makeSeedsFromHitDoublets: Number of seedHits: " << seedHits.size();
796  out.push_back(seed);
797 
798  found++;
799  numSeedsMade++;
800  hitDoubletSeedsMade++;
801 
802  if (found == numOfHitsToTry_)
803  break; // break if enough measurements scanned
804 
805  } // end loop over measurements compatible with original TSOS
806 
807  if (found)
808  layerCount++;
809 }
const unsigned int numOfHitsToTry_
How many hits to try per layer.
Definition: TSGForOIDNN.cc:73
std::vector< TrajectoryMeasurement > fastMeasurements(const TrajectoryStateOnSurface &stateOnThisDet, const TrajectoryStateOnSurface &tsos2, const Propagator &prop, const MeasurementEstimator &est) const
PTrajectoryStateOnDet persistentState(const TrajectoryStateOnSurface &ts, unsigned int detid)
#define LogTrace(id)
void push_back(D *&d)
Definition: OwnVector.h:326
size_type size() const
Definition: OwnVector.h:300
FreeTrajectoryState const * freeState(bool withErrors=true) const
const std::unique_ptr< TrajectoryStateUpdator > updator_
Definition: TSGForOIDNN.cc:60
def move(src, dest)
Definition: eostools.py:511

◆ makeSeedsFromHits()

void TSGForOIDNN::makeSeedsFromHits ( const GeometricSearchDet layer,
const TrajectoryStateOnSurface tsos,
const Propagator propagatorAlong,
const Chi2MeasurementEstimatorBase estimator,
const MeasurementTrackerEvent measurementTracker,
unsigned int &  hitSeedsMade,
unsigned int &  numSeedsMade,
const unsigned int &  maxHitSeeds,
unsigned int &  layerCount,
std::vector< TrajectorySeed > &  out 
) const
private

Find hits on a given layer (TOB or TEC) and create seeds from updated TSOS with hit.

Definition at line 558 of file TSGForOIDNN.cc.

References MeasurementDetWithData::fastMeasurements(), newFWLiteAna::found, MeasurementDetWithData::isNull(), TrajectoryStateOnSurface::isValid(), nano_mu_digi_cff::layer, LogTrace, HLT_2024v12_cff::maxHitSeeds, HLTSiStripMonitoring_cff::measurementTracker, eostools::move(), numOfHitsToTry_, numOfLayersToTry_, oppositeToMomentum, MillePedeFileConverter_cfg::out, trajectoryStateTransform::persistentState(), L1TMuonDQMOffline_cfi::propagatorAlong, edm::OwnVector< T, P >::push_back(), fileCollector::seed, edm::OwnVector< T, P >::size(), jetUpdater_cfi::sort, and updator_.

Referenced by produce().

567  {
568  if (layerCount > numOfLayersToTry_)
569  return;
570 
571  const TrajectoryStateOnSurface& onLayer(tsos);
572 
573  std::vector<GeometricSearchDet::DetWithState> dets;
574  layer.compatibleDetsV(onLayer, propagatorAlong, estimator, dets);
575 
576  // Find Measurements on each DetWithState
577  LogTrace("TSGForOIDNN") << "TSGForOIDNN::makeSeedsFromHits: Find measurements on each detWithState " << dets.size();
578  std::vector<TrajectoryMeasurement> meas;
579  for (auto const& detI : dets) {
580  MeasurementDetWithData det = measurementTracker.idToDet(detI.first->geographicalId());
581  if (det.isNull())
582  continue;
583  if (!detI.second.isValid())
584  continue; // Skip if TSOS is not valid
585 
586  std::vector<TrajectoryMeasurement> mymeas =
587  det.fastMeasurements(detI.second, onLayer, propagatorAlong, estimator); // Second TSOS is not used
588  for (auto const& measurement : mymeas) {
589  if (measurement.recHit()->isValid())
590  meas.push_back(measurement); // Only save those which are valid
591  }
592  }
593 
594  // Update TSOS using TMs after sorting, then create Trajectory Seed and put into vector
595  LogTrace("TSGForOIDNN") << "TSGForOIDNN::makeSeedsFromHits: Update TSOS using TMs after sorting, then create "
596  "Trajectory Seed, number of TM = "
597  << meas.size();
598  std::sort(meas.begin(), meas.end(), TrajMeasLessEstim());
599 
600  unsigned int found = 0;
601  for (auto const& measurement : meas) {
602  if (hitSeedsMade >= maxHitSeeds)
603  return;
604  TrajectoryStateOnSurface updatedTSOS = updator_->update(measurement.forwardPredictedState(), *measurement.recHit());
605  LogTrace("TSGForOIDNN") << "TSGForOIDNN::makeSeedsFromHits: TSOS for TM " << found;
606  if (not updatedTSOS.isValid())
607  continue;
608 
610  seedHits.push_back(*measurement.recHit()->hit());
611  PTrajectoryStateOnDet const& pstate =
612  trajectoryStateTransform::persistentState(updatedTSOS, measurement.recHit()->geographicalId().rawId());
613  LogTrace("TSGForOIDNN") << "TSGForOIDNN::makeSeedsFromHits: Number of seedHits: " << seedHits.size();
614  TrajectorySeed seed(pstate, std::move(seedHits), oppositeToMomentum);
615  out.push_back(seed);
616  found++;
617  numSeedsMade++;
618  hitSeedsMade++;
619  if (found == numOfHitsToTry_)
620  break;
621  }
622 
623  if (found)
624  layerCount++;
625 }
const unsigned int numOfHitsToTry_
How many hits to try per layer.
Definition: TSGForOIDNN.cc:73
std::vector< TrajectoryMeasurement > fastMeasurements(const TrajectoryStateOnSurface &stateOnThisDet, const TrajectoryStateOnSurface &tsos2, const Propagator &prop, const MeasurementEstimator &est) const
PTrajectoryStateOnDet persistentState(const TrajectoryStateOnSurface &ts, unsigned int detid)
#define LogTrace(id)
void push_back(D *&d)
Definition: OwnVector.h:326
size_type size() const
Definition: OwnVector.h:300
const unsigned int numOfLayersToTry_
How many layers to try.
Definition: TSGForOIDNN.cc:71
const std::unique_ptr< TrajectoryStateUpdator > updator_
Definition: TSGForOIDNN.cc:60
def move(src, dest)
Definition: eostools.py:511

◆ makeSeedsWithoutHits()

void TSGForOIDNN::makeSeedsWithoutHits ( const GeometricSearchDet layer,
const TrajectoryStateOnSurface tsos,
const Propagator propagatorAlong,
const Chi2MeasurementEstimatorBase estimator,
double  errorSF,
unsigned int &  hitlessSeedsMade,
unsigned int &  numSeedsMade,
std::vector< TrajectorySeed > &  out 
) const
private

Create seeds without hits on a given layer (TOB or TEC)

Definition at line 524 of file TSGForOIDNN.cc.

References nano_mu_digi_cff::layer, LogTrace, oppositeToMomentum, MillePedeFileConverter_cfg::out, trajectoryStateTransform::persistentState(), L1TMuonDQMOffline_cfi::propagatorAlong, and theCategory_.

Referenced by produce().

531  {
532  // create hitless seeds
533  LogTrace("TSGForOIDNN") << "TSGForOIDNN::makeSeedsWithoutHits: Start hitless";
534  std::vector<GeometricSearchDet::DetWithState> dets;
535  layer.compatibleDetsV(tsos, propagatorAlong, estimator, dets);
536  if (!dets.empty()) {
537  auto const& detOnLayer = dets.front().first;
538  auto& tsosOnLayer = dets.front().second;
539  LogTrace("TSGForOIDNN") << "TSGForOIDNN::makeSeedsWithoutHits: tsosOnLayer " << tsosOnLayer;
540  if (!tsosOnLayer.isValid()) {
541  edm::LogInfo(theCategory_) << "ERROR!: Hitless TSOS is not valid!";
542  } else {
543  tsosOnLayer.rescaleError(errorSF);
544  PTrajectoryStateOnDet const& ptsod =
545  trajectoryStateTransform::persistentState(tsosOnLayer, detOnLayer->geographicalId().rawId());
547  out.push_back(TrajectorySeed(ptsod, rHC, oppositeToMomentum));
548  LogTrace("TSGForOIDNN") << "TSGForOIDNN::makeSeedsWithoutHits: TSOS (Hitless) done ";
549  hitlessSeedsMade++;
550  numSeedsMade++;
551  }
552  }
553 }
PTrajectoryStateOnDet persistentState(const TrajectoryStateOnSurface &ts, unsigned int detid)
#define LogTrace(id)
const std::string theCategory_
Definition: TSGForOIDNN.cc:62
Log< level::Info, false > LogInfo

◆ produce()

void TSGForOIDNN::produce ( edm::StreamID  sid,
edm::Event iEvent,
const edm::EventSetup iSetup 
) const
overridevirtual

Implements edm::global::EDProducerBase.

Definition at line 299 of file TSGForOIDNN.cc.

References funct::abs(), alongMomentum, Plane::build(), evaluateClassifier(), evaluateRegressor(), fixedErrorRescalingForHitless_, edm::EventSetup::getData(), edm::EventSetup::getHandle(), getStrategyFromDNN_, iEvent, trajectoryStateTransform::initialFreeState(), trajectoryStateTransform::innerStateOnSurface(), TrackerGeometry::isThere(), TrajectoryStateOnSurface::isValid(), ALPAKA_ACCELERATOR_NAMESPACE::vertexFinder::it, HLTObjectMonitor_cfi::l2muonEta, nano_mu_digi_cff::layer, hgcalTBTopologyTester_cfi::layers, LogTrace, volumeBasedMagneticField_160812_cfi::magfield, makeSeedsFromHitDoublets(), makeSeedsFromHits(), makeSeedsWithoutHits(), maxEtaForTOB_, HLT_2024v12_cff::maxHitDoubletSeeds, maxHitDoubletSeeds_, HLT_2024v12_cff::maxHitlessSeedsIP, maxHitlessSeedsIP_, HLT_2024v12_cff::maxHitlessSeedsMuS, maxHitlessSeedsMuS_, HLT_2024v12_cff::maxHitSeeds, maxHitSeeds_, maxSeeds_, HLTSiStripMonitoring_cff::measurementTracker, measurementTrackerTag_, metadata_, minEtaForTEC_, eostools::move(), HLT_2024v12_cff::navSchool, TSGForOIDNN::StrategyParameters::nHBd, TSGForOIDNN::StrategyParameters::nHLIP, TSGForOIDNN::StrategyParameters::nHLMuS, oppositeToMomentum, MillePedeFileConverter_cfg::out, GeomDetEnumerators::P2OTEC, FreeTrajectoryState::position(), L1TMuonDQMOffline_cfi::propagatorAlong, L1TMuonDQMOffline_cfi::propagatorOpposite, mps_fire::result, groupFilesInBlocks::reverse, SetPropagationDirection(), TSGForOIDNN::StrategyParameters::sf, src_, t_estimatorH_, t_geometryH_, t_magfieldH_, t_navSchool_, t_propagatorAlongH_, t_propagatorOppositeH_, t_SHPOpposite_, t_tmpTkGeometryH_, tf_session_, tf_session_HB_, tf_session_HLIP_, tf_session_HLMuS_, theCategory_, updateFeatureMap(), and useRegressor_.

299  {
300  // Initialize variables
301  unsigned int numSeedsMade = 0;
302  unsigned int layerCount = 0;
303  unsigned int hitlessSeedsMadeIP = 0;
304  unsigned int hitlessSeedsMadeMuS = 0;
305  unsigned int hitSeedsMade = 0;
306  unsigned int hitDoubletSeedsMade = 0;
307 
308  // Container for DNN inputs
309  std::unordered_map<std::string, float> feature_map;
310 
311  // Container for DNN outputs
312  StrategyParameters strPars;
313 
314  // Surface used to make a TSOS at the PCA to the beamline
316 
317  // Get setup objects
318  const MagneticField& magfield = iEventSetup.getData(t_magfieldH_);
319  const Chi2MeasurementEstimatorBase& estimator = iEventSetup.getData(t_estimatorH_);
320  const Propagator& tmpPropagatorAlong = iEventSetup.getData(t_propagatorAlongH_);
321  const Propagator& tmpPropagatorOpposite = iEventSetup.getData(t_propagatorOppositeH_);
322  const TrackerGeometry& tmpTkGeometry = iEventSetup.getData(t_tmpTkGeometryH_);
323  const GlobalTrackingGeometry& geometry = iEventSetup.getData(t_geometryH_);
324  const NavigationSchool& navSchool = iEventSetup.getData(t_navSchool_);
326 
327  // Read L2 track collection
328  auto const& l2TrackCol = iEvent.get(src_);
329 
330  // The product
331  std::unique_ptr<std::vector<TrajectorySeed> > result(new std::vector<TrajectorySeed>());
332 
333  // Get vector of Detector layers
334  auto const* gsTracker = measurementTracker.geometricSearchTracker();
335  std::vector<BarrelDetLayer const*> const& tob = gsTracker->tobLayers();
336  std::vector<ForwardDetLayer const*> const& tecPositive =
337  tmpTkGeometry.isThere(GeomDetEnumerators::P2OTEC) ? gsTracker->posTidLayers() : gsTracker->posTecLayers();
338  std::vector<ForwardDetLayer const*> const& tecNegative =
339  tmpTkGeometry.isThere(GeomDetEnumerators::P2OTEC) ? gsTracker->negTidLayers() : gsTracker->negTecLayers();
340 
341  // Get suitable propagators
342  std::unique_ptr<Propagator> propagatorAlong = SetPropagationDirection(tmpPropagatorAlong, alongMomentum);
343  std::unique_ptr<Propagator> propagatorOpposite = SetPropagationDirection(tmpPropagatorOpposite, oppositeToMomentum);
344 
345  // Stepping Helix Propagator for propogation from muon system to tracker
346  edm::ESHandle<Propagator> shpOpposite = iEventSetup.getHandle(t_SHPOpposite_);
347 
348  // Loop over the L2's and make seeds for all of them
349  LogTrace(theCategory_) << "TSGForOIDNN::produce: Number of L2's: " << l2TrackCol.size();
350 
351  for (auto const& l2 : l2TrackCol) {
352  // Container of Seeds
353  std::vector<TrajectorySeed> out;
354  LogTrace("TSGForOIDNN") << "TSGForOIDNN::produce: L2 muon pT, eta, phi --> " << l2.pt() << " , " << l2.eta()
355  << " , " << l2.phi();
356 
358 
359  dummyPlane->move(fts.position() - dummyPlane->position());
360  TrajectoryStateOnSurface tsosAtIP = TrajectoryStateOnSurface(fts, *dummyPlane);
361  LogTrace("TSGForOIDNN") << "TSGForOIDNN::produce: Created TSOSatIP: " << tsosAtIP;
362 
363  // Get the TSOS on the innermost layer of the L2
365  LogTrace("TSGForOIDNN") << "TSGForOIDNN::produce: Created TSOSatMuonSystem: " << tsosAtMuonSystem;
366 
367  LogTrace("TSGForOIDNN")
368  << "TSGForOIDNN::produce: Check the error of the L2 parameter and use hit seeds if big errors";
369 
370  StateOnTrackerBound fromInside(propagatorAlong.get());
371  TrajectoryStateOnSurface outerTkStateInside = fromInside(fts);
372 
373  StateOnTrackerBound fromOutside(&*shpOpposite);
374  TrajectoryStateOnSurface outerTkStateOutside = fromOutside(tsosAtMuonSystem);
375 
376  // Check if the two positions (using updated and not-updated TSOS) agree withing certain extent.
377  // If both TSOSs agree, use only the one at vertex, as it uses more information. If they do not agree, search for seeds based on both.
378  double l2muonEta = l2.eta();
379  double absL2muonEta = std::abs(l2muonEta);
380 
381  // make non-const copies of parameters, so they can be overriden for individual L2 muons
382  unsigned int maxHitSeeds = maxHitSeeds_;
384  unsigned int maxHitlessSeedsIP = maxHitlessSeedsIP_;
386 
387  float errorSFHitless = fixedErrorRescalingForHitless_;
388 
389  // update strategy parameters by evaluating DNN
390  if (getStrategyFromDNN_) {
391  bool dnnSuccess = false;
392 
393  // Update feature map with parameters of the current muon
394  updateFeatureMap(feature_map, l2, tsosAtIP, outerTkStateOutside);
395 
396  if (useRegressor_) {
397  // Use regressor
398  evaluateRegressor(feature_map,
400  metadata_.get_child("HB"),
402  metadata_.get_child("HLIP"),
404  metadata_.get_child("HLMuS"),
405  strPars,
406  dnnSuccess);
407  } else {
408  // Use classifier
409  evaluateClassifier(feature_map, tf_session_, metadata_, strPars, dnnSuccess);
410  }
411  if (!dnnSuccess)
412  break;
413 
414  maxHitSeeds = 0;
415  maxHitDoubletSeeds = strPars.nHBd;
416  maxHitlessSeedsIP = strPars.nHLIP;
417  maxHitlessSeedsMuS = strPars.nHLMuS;
418  errorSFHitless = strPars.sf;
419  }
420 
421  numSeedsMade = 0;
422  hitlessSeedsMadeIP = 0;
423  hitlessSeedsMadeMuS = 0;
424  hitSeedsMade = 0;
425  hitDoubletSeedsMade = 0;
426 
427  auto createSeeds = [&](auto const& layers) {
428  for (auto const& layer : boost::adaptors::reverse(layers)) {
429  if (hitlessSeedsMadeIP < maxHitlessSeedsIP && numSeedsMade < maxSeeds_)
431  tsosAtIP,
432  *(propagatorAlong.get()),
433  estimator,
434  errorSFHitless,
435  hitlessSeedsMadeIP,
436  numSeedsMade,
437  out);
438 
439  if (outerTkStateInside.isValid() && outerTkStateOutside.isValid() && hitlessSeedsMadeMuS < maxHitlessSeedsMuS &&
440  numSeedsMade < maxSeeds_)
442  outerTkStateOutside,
443  *(propagatorOpposite.get()),
444  estimator,
445  errorSFHitless,
446  hitlessSeedsMadeMuS,
447  numSeedsMade,
448  out);
449 
450  if (hitSeedsMade < maxHitSeeds && numSeedsMade < maxSeeds_)
452  tsosAtIP,
453  *(propagatorAlong.get()),
454  estimator,
456  hitSeedsMade,
457  numSeedsMade,
458  maxHitSeeds,
459  layerCount,
460  out);
461 
462  if (hitDoubletSeedsMade < maxHitDoubletSeeds && numSeedsMade < maxSeeds_)
464  tsosAtIP,
465  *(propagatorAlong.get()),
466  estimator,
468  navSchool,
469  hitDoubletSeedsMade,
470  numSeedsMade,
472  layerCount,
473  out);
474  };
475  };
476 
477  // BARREL
478  if (absL2muonEta < maxEtaForTOB_) {
479  layerCount = 0;
480  createSeeds(tob);
481  LogTrace("TSGForOIDNN") << "TSGForOIDNN:::produce: NumSeedsMade = " << numSeedsMade
482  << " , layerCount = " << layerCount;
483  }
484 
485  // Reset number of seeds if in overlap region
486  if (absL2muonEta > minEtaForTEC_ && absL2muonEta < maxEtaForTOB_) {
487  numSeedsMade = 0;
488  hitlessSeedsMadeIP = 0;
489  hitlessSeedsMadeMuS = 0;
490  hitSeedsMade = 0;
491  hitDoubletSeedsMade = 0;
492  }
493 
494  // ENDCAP+
495  if (l2muonEta > minEtaForTEC_) {
496  layerCount = 0;
497  createSeeds(tecPositive);
498  LogTrace("TSGForOIDNN") << "TSGForOIDNN:::produce: NumSeedsMade = " << numSeedsMade
499  << " , layerCount = " << layerCount;
500  }
501 
502  // ENDCAP-
503  if (l2muonEta < -minEtaForTEC_) {
504  layerCount = 0;
505  createSeeds(tecNegative);
506  LogTrace("TSGForOIDNN") << "TSGForOIDNN:::produce: NumSeedsMade = " << numSeedsMade
507  << " , layerCount = " << layerCount;
508  }
509 
510  for (std::vector<TrajectorySeed>::iterator it = out.begin(); it != out.end(); ++it) {
511  result->push_back(*it);
512  }
513 
514  } // L2Collection
515 
516  edm::LogInfo(theCategory_) << "TSGForOIDNN::produce: number of seeds made: " << result->size();
517 
518  iEvent.put(std::move(result));
519 }
const unsigned int maxSeeds_
Maximum number of seeds for each L2.
Definition: TSGForOIDNN.cc:65
void evaluateRegressor(const std::unordered_map< std::string, float > &feature_map, tensorflow::Session *session_HB, const pt::ptree &metadata_HB, tensorflow::Session *session_HLIP, const pt::ptree &metadata_HLIP, tensorflow::Session *session_HLMuS, const pt::ptree &metadata_HLMuS, StrategyParameters &out, bool &dnnSuccess) const
Evaluate DNN regressor.
Definition: TSGForOIDNN.cc:936
void updateFeatureMap(std::unordered_map< std::string, float > &the_map, const reco::Track &l2, const TrajectoryStateOnSurface &tsos_IP, const TrajectoryStateOnSurface &tsos_MuS) const
Update dictionary of inputs for DNN.
Definition: TSGForOIDNN.cc:814
tensorflow::Session * tf_session_HLMuS_
Definition: TSGForOIDNN.cc:108
const edm::ESGetToken< NavigationSchool, NavigationSchoolRecord > t_navSchool_
Definition: TSGForOIDNN.cc:58
const edm::ESGetToken< GlobalTrackingGeometry, GlobalTrackingGeometryRecord > t_geometryH_
Definition: TSGForOIDNN.cc:57
const edm::EDGetTokenT< MeasurementTrackerEvent > measurementTrackerTag_
Definition: TSGForOIDNN.cc:61
void makeSeedsFromHitDoublets(const GeometricSearchDet &layer, const TrajectoryStateOnSurface &tsos, const Propagator &propagatorAlong, const Chi2MeasurementEstimatorBase &estimator, const MeasurementTrackerEvent &measurementTracker, const NavigationSchool &navSchool, unsigned int &hitDoubletSeedsMade, unsigned int &numSeedsMade, const unsigned int &maxHitDoubletSeeds, unsigned int &layerCount, std::vector< TrajectorySeed > &out) const
Similar to makeSeedsFromHits, but seed is created only if there are compatible hits on two adjacent l...
Definition: TSGForOIDNN.cc:630
tensorflow::Session * tf_session_HB_
Definition: TSGForOIDNN.cc:104
const unsigned int maxHitlessSeedsMuS_
Definition: TSGForOIDNN.cc:86
const edm::EDGetTokenT< reco::TrackCollection > src_
Labels for input collections.
Definition: TSGForOIDNN.cc:50
const unsigned int maxHitlessSeedsIP_
Definition: TSGForOIDNN.cc:85
const edm::ESGetToken< Chi2MeasurementEstimatorBase, TrackingComponentsRecord > t_estimatorH_
Tokens for ESHandle.
Definition: TSGForOIDNN.cc:52
const double minEtaForTEC_
Minimum eta value to activate searching in the TEC.
Definition: TSGForOIDNN.cc:79
#define LogTrace(id)
static PlanePointer build(Args &&... args)
Definition: Plane.h:33
GlobalPoint position() const
std::unique_ptr< Propagator > SetPropagationDirection(Propagator const &iprop, PropagationDirection dir)
int iEvent
Definition: GenABIO.cc:224
const double fixedErrorRescalingForHitless_
Rescale L2 parameter uncertainties (fixed error vs pT, eta)
Definition: TSGForOIDNN.cc:75
bool isThere(GeomDetEnumerators::SubDetector subdet) const
const std::string theCategory_
Definition: TSGForOIDNN.cc:62
const edm::ESGetToken< Propagator, TrackingComponentsRecord > t_propagatorOppositeH_
Definition: TSGForOIDNN.cc:55
const unsigned int maxHitSeeds_
Maximum number of hitbased seeds for each L2.
Definition: TSGForOIDNN.cc:67
const unsigned int maxHitDoubletSeeds_
Definition: TSGForOIDNN.cc:87
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
const bool useRegressor_
Whether to use DNN regressor (if false, will use classifier)
Definition: TSGForOIDNN.cc:92
void makeSeedsWithoutHits(const GeometricSearchDet &layer, const TrajectoryStateOnSurface &tsos, const Propagator &propagatorAlong, const Chi2MeasurementEstimatorBase &estimator, double errorSF, unsigned int &hitlessSeedsMade, unsigned int &numSeedsMade, std::vector< TrajectorySeed > &out) const
Create seeds without hits on a given layer (TOB or TEC)
Definition: TSGForOIDNN.cc:524
Log< level::Info, false > LogInfo
const edm::ESGetToken< Propagator, TrackingComponentsRecord > t_SHPOpposite_
Definition: TSGForOIDNN.cc:59
const double maxEtaForTOB_
Maximum eta value to activate searching in the TOB.
Definition: TSGForOIDNN.cc:81
const edm::ESGetToken< MagneticField, IdealMagneticFieldRecord > t_magfieldH_
Definition: TSGForOIDNN.cc:53
tensorflow::Session * tf_session_
Definition: TSGForOIDNN.cc:97
const edm::ESGetToken< Propagator, TrackingComponentsRecord > t_propagatorAlongH_
Definition: TSGForOIDNN.cc:54
const bool getStrategyFromDNN_
Get number of seeds to use from DNN output instead of "max..Seeds" parameters.
Definition: TSGForOIDNN.cc:90
pt::ptree metadata_
Definition: TSGForOIDNN.cc:112
const edm::ESGetToken< TrackerGeometry, TrackerDigiGeometryRecord > t_tmpTkGeometryH_
Definition: TSGForOIDNN.cc:56
FreeTrajectoryState initialFreeState(const reco::Track &tk, const MagneticField *field, bool withErr=true)
void evaluateClassifier(const std::unordered_map< std::string, float > &feature_map, tensorflow::Session *session, const pt::ptree &metadata, StrategyParameters &out, bool &dnnSuccess) const
Evaluate DNN classifier.
Definition: TSGForOIDNN.cc:879
def move(src, dest)
Definition: eostools.py:511
void makeSeedsFromHits(const GeometricSearchDet &layer, const TrajectoryStateOnSurface &tsos, const Propagator &propagatorAlong, const Chi2MeasurementEstimatorBase &estimator, const MeasurementTrackerEvent &measurementTracker, unsigned int &hitSeedsMade, unsigned int &numSeedsMade, const unsigned int &maxHitSeeds, unsigned int &layerCount, std::vector< TrajectorySeed > &out) const
Find hits on a given layer (TOB or TEC) and create seeds from updated TSOS with hit.
Definition: TSGForOIDNN.cc:558
TrajectoryStateOnSurface innerStateOnSurface(const reco::Track &tk, const TrackingGeometry &geom, const MagneticField *field, bool withErr=true)
tensorflow::Session * tf_session_HLIP_
Definition: TSGForOIDNN.cc:106

◆ updateFeatureMap()

void TSGForOIDNN::updateFeatureMap ( std::unordered_map< std::string, float > &  the_map,
const reco::Track l2,
const TrajectoryStateOnSurface tsos_IP,
const TrajectoryStateOnSurface tsos_MuS 
) const
private

Update dictionary of inputs for DNN.

Definition at line 814 of file TSGForOIDNN.cc.

References TrajectoryStateOnSurface::curvilinearError(), PV3DBase< T, PVType, FrameType >::eta(), reco::TrackBase::eta(), reco::Track::found(), TrajectoryStateOnSurface::globalMomentum(), TrajectoryStateOnSurface::globalPosition(), TrajectoryStateOnSurface::isValid(), CurvilinearTrajectoryError::matrix(), PV3DBase< T, PVType, FrameType >::perp(), PV3DBase< T, PVType, FrameType >::phi(), reco::TrackBase::phi(), reco::TrackBase::pt(), and mathSSE::sqrt().

Referenced by produce().

817  {
818  the_map["pt"] = l2.pt();
819  the_map["eta"] = l2.eta();
820  the_map["phi"] = l2.phi();
821  the_map["validHits"] = l2.found();
822  if (tsos_IP.isValid()) {
823  the_map["tsos_IP_eta"] = tsos_IP.globalPosition().eta();
824  the_map["tsos_IP_phi"] = tsos_IP.globalPosition().phi();
825  the_map["tsos_IP_pt"] = tsos_IP.globalMomentum().perp();
826  the_map["tsos_IP_pt_eta"] = tsos_IP.globalMomentum().eta();
827  the_map["tsos_IP_pt_phi"] = tsos_IP.globalMomentum().phi();
828  const AlgebraicSymMatrix55& matrix_IP = tsos_IP.curvilinearError().matrix();
829  the_map["err0_IP"] = sqrt(matrix_IP[0][0]);
830  the_map["err1_IP"] = sqrt(matrix_IP[1][1]);
831  the_map["err2_IP"] = sqrt(matrix_IP[2][2]);
832  the_map["err3_IP"] = sqrt(matrix_IP[3][3]);
833  the_map["err4_IP"] = sqrt(matrix_IP[4][4]);
834  the_map["tsos_IP_valid"] = 1.0;
835  } else {
836  the_map["tsos_IP_eta"] = -999;
837  the_map["tsos_IP_phi"] = -999;
838  the_map["tsos_IP_pt"] = -999;
839  the_map["tsos_IP_pt_eta"] = -999;
840  the_map["tsos_IP_pt_phi"] = -999;
841  the_map["err0_IP"] = -999;
842  the_map["err1_IP"] = -999;
843  the_map["err2_IP"] = -999;
844  the_map["err3_IP"] = -999;
845  the_map["err4_IP"] = -999;
846  the_map["tsos_IP_valid"] = 0.0;
847  }
848  if (tsos_MuS.isValid()) {
849  the_map["tsos_MuS_eta"] = tsos_MuS.globalPosition().eta();
850  the_map["tsos_MuS_phi"] = tsos_MuS.globalPosition().phi();
851  the_map["tsos_MuS_pt"] = tsos_MuS.globalMomentum().perp();
852  the_map["tsos_MuS_pt_eta"] = tsos_MuS.globalMomentum().eta();
853  the_map["tsos_MuS_pt_phi"] = tsos_MuS.globalMomentum().phi();
854  const AlgebraicSymMatrix55& matrix_MuS = tsos_MuS.curvilinearError().matrix();
855  the_map["err0_MuS"] = sqrt(matrix_MuS[0][0]);
856  the_map["err1_MuS"] = sqrt(matrix_MuS[1][1]);
857  the_map["err2_MuS"] = sqrt(matrix_MuS[2][2]);
858  the_map["err3_MuS"] = sqrt(matrix_MuS[3][3]);
859  the_map["err4_MuS"] = sqrt(matrix_MuS[4][4]);
860  the_map["tsos_MuS_valid"] = 1.0;
861  } else {
862  the_map["tsos_MuS_eta"] = -999;
863  the_map["tsos_MuS_phi"] = -999;
864  the_map["tsos_MuS_pt"] = -999;
865  the_map["tsos_MuS_pt_eta"] = -999;
866  the_map["tsos_MuS_pt_phi"] = -999;
867  the_map["err0_MuS"] = -999;
868  the_map["err1_MuS"] = -999;
869  the_map["err2_MuS"] = -999;
870  the_map["err3_MuS"] = -999;
871  the_map["err4_MuS"] = -999;
872  the_map["tsos_MuS_valid"] = 0.0;
873  }
874 }
T perp() const
Definition: PV3DBase.h:69
Geom::Phi< T > phi() const
Definition: PV3DBase.h:66
T eta() const
Definition: PV3DBase.h:73
unsigned short found() const
Number of valid hits on track.
Definition: Track.h:142
double pt() const
track transverse momentum
Definition: TrackBase.h:637
GlobalPoint globalPosition() const
T sqrt(T t)
Definition: SSEVec.h:19
double phi() const
azimuthal angle of momentum vector
Definition: TrackBase.h:649
double eta() const
pseudorapidity of momentum vector
Definition: TrackBase.h:652
const CurvilinearTrajectoryError & curvilinearError() const
const AlgebraicSymMatrix55 & matrix() const
ROOT::Math::SMatrix< double, 5, 5, ROOT::Math::MatRepSym< double, 5 > > AlgebraicSymMatrix55
GlobalVector globalMomentum() const

Member Data Documentation

◆ dnnMetadataPath_

const std::string TSGForOIDNN::dnnMetadataPath_
private

DNN metadata.

Definition at line 111 of file TSGForOIDNN.cc.

Referenced by TSGForOIDNN().

◆ dnnModelPath_

std::string TSGForOIDNN::dnnModelPath_
private

Settings for classifier.

Definition at line 95 of file TSGForOIDNN.cc.

Referenced by TSGForOIDNN().

◆ dnnModelPath_HB_

std::string TSGForOIDNN::dnnModelPath_HB_
private

Settings for regressor.

Definition at line 100 of file TSGForOIDNN.cc.

Referenced by TSGForOIDNN().

◆ dnnModelPath_HLIP_

std::string TSGForOIDNN::dnnModelPath_HLIP_
private

Definition at line 101 of file TSGForOIDNN.cc.

Referenced by TSGForOIDNN().

◆ dnnModelPath_HLMuS_

std::string TSGForOIDNN::dnnModelPath_HLMuS_
private

Definition at line 102 of file TSGForOIDNN.cc.

Referenced by TSGForOIDNN().

◆ estimatorName_

const std::string TSGForOIDNN::estimatorName_
private

Estimator used to find dets and TrajectoryMeasurements.

Definition at line 77 of file TSGForOIDNN.cc.

◆ fixedErrorRescalingForHitless_

const double TSGForOIDNN::fixedErrorRescalingForHitless_
private

Rescale L2 parameter uncertainties (fixed error vs pT, eta)

Definition at line 75 of file TSGForOIDNN.cc.

Referenced by produce().

◆ getStrategyFromDNN_

const bool TSGForOIDNN::getStrategyFromDNN_
private

Get number of seeds to use from DNN output instead of "max..Seeds" parameters.

Definition at line 90 of file TSGForOIDNN.cc.

Referenced by initializeTensorflow(), produce(), TSGForOIDNN(), and ~TSGForOIDNN().

◆ graphDef_

std::unique_ptr<tensorflow::GraphDef> TSGForOIDNN::graphDef_
private

Definition at line 96 of file TSGForOIDNN.cc.

Referenced by TSGForOIDNN().

◆ graphDef_HB_

std::unique_ptr<tensorflow::GraphDef> TSGForOIDNN::graphDef_HB_
private

Definition at line 103 of file TSGForOIDNN.cc.

Referenced by TSGForOIDNN().

◆ graphDef_HLIP_

std::unique_ptr<tensorflow::GraphDef> TSGForOIDNN::graphDef_HLIP_
private

Definition at line 105 of file TSGForOIDNN.cc.

Referenced by TSGForOIDNN().

◆ graphDef_HLMuS_

std::unique_ptr<tensorflow::GraphDef> TSGForOIDNN::graphDef_HLMuS_
private

Definition at line 107 of file TSGForOIDNN.cc.

Referenced by TSGForOIDNN().

◆ maxEtaForTOB_

const double TSGForOIDNN::maxEtaForTOB_
private

Maximum eta value to activate searching in the TOB.

Definition at line 81 of file TSGForOIDNN.cc.

Referenced by produce().

◆ maxHitDoubletSeeds_

const unsigned int TSGForOIDNN::maxHitDoubletSeeds_
private

Definition at line 87 of file TSGForOIDNN.cc.

Referenced by produce().

◆ maxHitlessSeeds_

const unsigned int TSGForOIDNN::maxHitlessSeeds_
private

Maximum number of hitless seeds for each L2.

Definition at line 69 of file TSGForOIDNN.cc.

◆ maxHitlessSeedsIP_

const unsigned int TSGForOIDNN::maxHitlessSeedsIP_
private

IP refers to TSOS at interaction point, MuS refers to TSOS at muon system

Definition at line 85 of file TSGForOIDNN.cc.

Referenced by produce().

◆ maxHitlessSeedsMuS_

const unsigned int TSGForOIDNN::maxHitlessSeedsMuS_
private

Definition at line 86 of file TSGForOIDNN.cc.

Referenced by produce().

◆ maxHitSeeds_

const unsigned int TSGForOIDNN::maxHitSeeds_
private

Maximum number of hitbased seeds for each L2.

Definition at line 67 of file TSGForOIDNN.cc.

Referenced by produce().

◆ maxSeeds_

const unsigned int TSGForOIDNN::maxSeeds_
private

Maximum number of seeds for each L2.

Definition at line 65 of file TSGForOIDNN.cc.

Referenced by produce().

◆ measurementTrackerTag_

const edm::EDGetTokenT<MeasurementTrackerEvent> TSGForOIDNN::measurementTrackerTag_
private

Definition at line 61 of file TSGForOIDNN.cc.

Referenced by produce().

◆ metadata_

pt::ptree TSGForOIDNN::metadata_
private

Definition at line 112 of file TSGForOIDNN.cc.

Referenced by initializeTensorflow(), produce(), and TSGForOIDNN().

◆ minEtaForTEC_

const double TSGForOIDNN::minEtaForTEC_
private

Minimum eta value to activate searching in the TEC.

Definition at line 79 of file TSGForOIDNN.cc.

Referenced by produce().

◆ numOfHitsToTry_

const unsigned int TSGForOIDNN::numOfHitsToTry_
private

How many hits to try per layer.

Definition at line 73 of file TSGForOIDNN.cc.

Referenced by makeSeedsFromHitDoublets(), and makeSeedsFromHits().

◆ numOfLayersToTry_

const unsigned int TSGForOIDNN::numOfLayersToTry_
private

How many layers to try.

Definition at line 71 of file TSGForOIDNN.cc.

Referenced by makeSeedsFromHits().

◆ src_

const edm::EDGetTokenT<reco::TrackCollection> TSGForOIDNN::src_
private

Labels for input collections.

Definition at line 50 of file TSGForOIDNN.cc.

Referenced by produce().

◆ t_estimatorH_

const edm::ESGetToken<Chi2MeasurementEstimatorBase, TrackingComponentsRecord> TSGForOIDNN::t_estimatorH_
private

Tokens for ESHandle.

Definition at line 52 of file TSGForOIDNN.cc.

Referenced by produce().

◆ t_geometryH_

const edm::ESGetToken<GlobalTrackingGeometry, GlobalTrackingGeometryRecord> TSGForOIDNN::t_geometryH_
private

Definition at line 57 of file TSGForOIDNN.cc.

Referenced by produce().

◆ t_magfieldH_

const edm::ESGetToken<MagneticField, IdealMagneticFieldRecord> TSGForOIDNN::t_magfieldH_
private

Definition at line 53 of file TSGForOIDNN.cc.

Referenced by produce().

◆ t_navSchool_

const edm::ESGetToken<NavigationSchool, NavigationSchoolRecord> TSGForOIDNN::t_navSchool_
private

Definition at line 58 of file TSGForOIDNN.cc.

Referenced by produce().

◆ t_propagatorAlongH_

const edm::ESGetToken<Propagator, TrackingComponentsRecord> TSGForOIDNN::t_propagatorAlongH_
private

Definition at line 54 of file TSGForOIDNN.cc.

Referenced by produce().

◆ t_propagatorOppositeH_

const edm::ESGetToken<Propagator, TrackingComponentsRecord> TSGForOIDNN::t_propagatorOppositeH_
private

Definition at line 55 of file TSGForOIDNN.cc.

Referenced by produce().

◆ t_SHPOpposite_

const edm::ESGetToken<Propagator, TrackingComponentsRecord> TSGForOIDNN::t_SHPOpposite_
private

Definition at line 59 of file TSGForOIDNN.cc.

Referenced by produce().

◆ t_tmpTkGeometryH_

const edm::ESGetToken<TrackerGeometry, TrackerDigiGeometryRecord> TSGForOIDNN::t_tmpTkGeometryH_
private

Definition at line 56 of file TSGForOIDNN.cc.

Referenced by produce().

◆ tf_session_

tensorflow::Session* TSGForOIDNN::tf_session_
private

Definition at line 97 of file TSGForOIDNN.cc.

Referenced by initializeTensorflow(), produce(), TSGForOIDNN(), and ~TSGForOIDNN().

◆ tf_session_HB_

tensorflow::Session* TSGForOIDNN::tf_session_HB_
private

Definition at line 104 of file TSGForOIDNN.cc.

Referenced by produce(), TSGForOIDNN(), and ~TSGForOIDNN().

◆ tf_session_HLIP_

tensorflow::Session* TSGForOIDNN::tf_session_HLIP_
private

Definition at line 106 of file TSGForOIDNN.cc.

Referenced by produce(), TSGForOIDNN(), and ~TSGForOIDNN().

◆ tf_session_HLMuS_

tensorflow::Session* TSGForOIDNN::tf_session_HLMuS_
private

Definition at line 108 of file TSGForOIDNN.cc.

Referenced by produce(), TSGForOIDNN(), and ~TSGForOIDNN().

◆ theCategory_

const std::string TSGForOIDNN::theCategory_
private

Definition at line 62 of file TSGForOIDNN.cc.

Referenced by makeSeedsWithoutHits(), and produce().

◆ updator_

const std::unique_ptr<TrajectoryStateUpdator> TSGForOIDNN::updator_
private

Definition at line 60 of file TSGForOIDNN.cc.

Referenced by makeSeedsFromHitDoublets(), and makeSeedsFromHits().

◆ useRegressor_

const bool TSGForOIDNN::useRegressor_
private

Whether to use DNN regressor (if false, will use classifier)

Definition at line 92 of file TSGForOIDNN.cc.

Referenced by initializeTensorflow(), produce(), TSGForOIDNN(), and ~TSGForOIDNN().