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 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 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 178 of file TSGForOIDNN.cc.

References tensorflow::createSession(), HLT_2023v12_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_.

179  : src_(consumes(iConfig.getParameter<edm::InputTag>("src"))),
180  t_estimatorH_(esConsumes(edm::ESInputTag("", iConfig.getParameter<std::string>("estimator")))),
182  t_propagatorAlongH_(esConsumes(edm::ESInputTag("", iConfig.getParameter<std::string>("propagatorName")))),
186  t_navSchool_(esConsumes(edm::ESInputTag("", "SimpleNavigationSchool"))),
187  t_SHPOpposite_(esConsumes(edm::ESInputTag("", "hltESPSteppingHelixPropagatorOpposite"))),
188  updator_(new KFUpdator()),
189  measurementTrackerTag_(consumes(iConfig.getParameter<edm::InputTag>("MeasurementTrackerEvent"))),
190  theCategory_(std::string("Muon|RecoMuon|TSGForOIDNN")),
191  maxSeeds_(iConfig.getParameter<uint32_t>("maxSeeds")),
192  maxHitSeeds_(iConfig.getParameter<uint32_t>("maxHitSeeds")),
193  maxHitlessSeeds_(iConfig.getParameter<uint32_t>("maxHitlessSeeds")),
194  numOfLayersToTry_(iConfig.getParameter<int32_t>("layersToTry")),
195  numOfHitsToTry_(iConfig.getParameter<int32_t>("hitsToTry")),
196  fixedErrorRescalingForHitless_(iConfig.getParameter<double>("fixedErrorRescaleFactorForHitless")),
197  minEtaForTEC_(iConfig.getParameter<double>("minEtaForTEC")),
198  maxEtaForTOB_(iConfig.getParameter<double>("maxEtaForTOB")),
199  maxHitlessSeedsIP_(iConfig.getParameter<uint32_t>("maxHitlessSeedsIP")),
200  maxHitlessSeedsMuS_(iConfig.getParameter<uint32_t>("maxHitlessSeedsMuS")),
201  maxHitDoubletSeeds_(iConfig.getParameter<uint32_t>("maxHitDoubletSeeds")),
202  getStrategyFromDNN_(iConfig.getParameter<bool>("getStrategyFromDNN")),
203  useRegressor_(iConfig.getParameter<bool>("useRegressor")),
204  dnnMetadataPath_(iConfig.getParameter<std::string>("dnnMetadataPath")) {
205  if (getStrategyFromDNN_) {
207  pt::read_json(dnnMetadataPath.fullPath(), metadata_);
209 
210  if (useRegressor_) {
211  // use regressor
212  dnnModelPath_HB_ = metadata_.get<std::string>("HB.dnnmodel_path");
213  edm::FileInPath dnnPath_HB(dnnModelPath_HB_);
214  graphDef_HB_ = std::unique_ptr<tensorflow::GraphDef>(tensorflow::loadGraphDef(dnnPath_HB.fullPath()));
216 
217  dnnModelPath_HLIP_ = metadata_.get<std::string>("HLIP.dnnmodel_path");
218  edm::FileInPath dnnPath_HLIP(dnnModelPath_HLIP_);
219  graphDef_HLIP_ = std::unique_ptr<tensorflow::GraphDef>(tensorflow::loadGraphDef(dnnPath_HLIP.fullPath()));
221 
222  dnnModelPath_HLMuS_ = metadata_.get<std::string>("HLMuS.dnnmodel_path");
223  edm::FileInPath dnnPath_HLMuS(dnnModelPath_HLMuS_);
224  graphDef_HLMuS_ = std::unique_ptr<tensorflow::GraphDef>(tensorflow::loadGraphDef(dnnPath_HLMuS.fullPath()));
226  } else {
227  // use classifier (default)
228  dnnModelPath_ = metadata_.get<std::string>("dnnmodel_path");
230  graphDef_ = std::unique_ptr<tensorflow::GraphDef>(tensorflow::loadGraphDef(dnnPath.fullPath()));
232  }
233  }
234  produces<std::vector<TrajectorySeed> >();
235 }
const unsigned int numOfHitsToTry_
How many hits to try per layer.
Definition: TSGForOIDNN.cc:72
std::string dnnModelPath_HLIP_
Definition: TSGForOIDNN.cc:100
const unsigned int maxSeeds_
Maximum number of seeds for each L2.
Definition: TSGForOIDNN.cc:64
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
std::string dnnModelPath_HLMuS_
Definition: TSGForOIDNN.cc:101
tensorflow::Session * tf_session_HLMuS_
Definition: TSGForOIDNN.cc:107
const edm::ESGetToken< NavigationSchool, NavigationSchoolRecord > t_navSchool_
Definition: TSGForOIDNN.cc:57
const edm::ESGetToken< GlobalTrackingGeometry, GlobalTrackingGeometryRecord > t_geometryH_
Definition: TSGForOIDNN.cc:56
const edm::EDGetTokenT< MeasurementTrackerEvent > measurementTrackerTag_
Definition: TSGForOIDNN.cc:60
GraphDef * loadGraphDef(const std::string &pbFile)
Definition: TensorFlow.cc:120
tensorflow::Session * tf_session_HB_
Definition: TSGForOIDNN.cc:103
const unsigned int maxHitlessSeedsMuS_
Definition: TSGForOIDNN.cc:85
const edm::EDGetTokenT< reco::TrackCollection > src_
Labels for input collections.
Definition: TSGForOIDNN.cc:49
const unsigned int maxHitlessSeedsIP_
Definition: TSGForOIDNN.cc:84
std::unique_ptr< tensorflow::GraphDef > graphDef_HLIP_
Definition: TSGForOIDNN.cc:104
const edm::ESGetToken< Chi2MeasurementEstimatorBase, TrackingComponentsRecord > t_estimatorH_
Tokens for ESHandle.
Definition: TSGForOIDNN.cc:51
const double minEtaForTEC_
Minimum eta value to activate searching in the TEC.
Definition: TSGForOIDNN.cc:78
EDGetTokenT< ProductType > consumes(edm::InputTag const &tag)
const double fixedErrorRescalingForHitless_
Rescale L2 parameter uncertainties (fixed error vs pT, eta)
Definition: TSGForOIDNN.cc:74
const std::string dnnMetadataPath_
DNN metadata.
Definition: TSGForOIDNN.cc:110
const std::string theCategory_
Definition: TSGForOIDNN.cc:61
const edm::ESGetToken< Propagator, TrackingComponentsRecord > t_propagatorOppositeH_
Definition: TSGForOIDNN.cc:54
const unsigned int maxHitSeeds_
Maximum number of hitbased seeds for each L2.
Definition: TSGForOIDNN.cc:66
const unsigned int maxHitDoubletSeeds_
Definition: TSGForOIDNN.cc:86
std::string dnnModelPath_
Settings for classifier.
Definition: TSGForOIDNN.cc:94
const bool useRegressor_
Whether to use DNN regressor (if false, will use classifier)
Definition: TSGForOIDNN.cc:91
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:58
const double maxEtaForTOB_
Maximum eta value to activate searching in the TOB.
Definition: TSGForOIDNN.cc:80
std::string dnnModelPath_HB_
Settings for regressor.
Definition: TSGForOIDNN.cc:99
std::unique_ptr< tensorflow::GraphDef > graphDef_
Definition: TSGForOIDNN.cc:95
const edm::ESGetToken< MagneticField, IdealMagneticFieldRecord > t_magfieldH_
Definition: TSGForOIDNN.cc:52
std::unique_ptr< tensorflow::GraphDef > graphDef_HB_
Definition: TSGForOIDNN.cc:102
tensorflow::Session * tf_session_
Definition: TSGForOIDNN.cc:96
const edm::ESGetToken< Propagator, TrackingComponentsRecord > t_propagatorAlongH_
Definition: TSGForOIDNN.cc:53
const unsigned int numOfLayersToTry_
How many layers to try.
Definition: TSGForOIDNN.cc:70
const bool getStrategyFromDNN_
Get number of seeds to use from DNN output instead of "max..Seeds" parameters.
Definition: TSGForOIDNN.cc:89
std::unique_ptr< tensorflow::GraphDef > graphDef_HLMuS_
Definition: TSGForOIDNN.cc:106
pt::ptree metadata_
Definition: TSGForOIDNN.cc:111
const std::unique_ptr< TrajectoryStateUpdator > updator_
Definition: TSGForOIDNN.cc:59
const edm::ESGetToken< TrackerGeometry, TrackerDigiGeometryRecord > t_tmpTkGeometryH_
Definition: TSGForOIDNN.cc:55
const unsigned int maxHitlessSeeds_
Maximum number of hitless seeds for each L2.
Definition: TSGForOIDNN.cc:68
tensorflow::Session * tf_session_HLIP_
Definition: TSGForOIDNN.cc:105

◆ ~TSGForOIDNN()

TSGForOIDNN::~TSGForOIDNN ( )
override

Definition at line 237 of file TSGForOIDNN.cc.

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

237  {
238  if (getStrategyFromDNN_) {
239  if (useRegressor_) {
243  } else {
245  }
246  }
247 }
tensorflow::Session * tf_session_HLMuS_
Definition: TSGForOIDNN.cc:107
tensorflow::Session * tf_session_HB_
Definition: TSGForOIDNN.cc:103
bool closeSession(Session *&session)
Definition: TensorFlow.cc:234
const bool useRegressor_
Whether to use DNN regressor (if false, will use classifier)
Definition: TSGForOIDNN.cc:91
tensorflow::Session * tf_session_
Definition: TSGForOIDNN.cc:96
const bool getStrategyFromDNN_
Get number of seeds to use from DNN output instead of "max..Seeds" parameters.
Definition: TSGForOIDNN.cc:89
tensorflow::Session * tf_session_HLIP_
Definition: TSGForOIDNN.cc:105

Member Function Documentation

◆ 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 832 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 produce().

836  {
837  int n_features = metadata.get<int>("n_features", 0);
838 
839  // Prepare tensor for DNN inputs
840  tensorflow::Tensor input(tensorflow::DT_FLOAT, {1, n_features});
842  int i_feature = 0;
843  for (const pt::ptree::value_type& feature : metadata.get_child("feature_names")) {
844  fname = feature.second.data();
845  if (feature_map.find(fname) == feature_map.end()) {
846  // don't evaluate DNN if any input feature is missing
847  dnnSuccess = false;
848  } else {
849  input.matrix<float>()(0, i_feature) = float(feature_map.at(fname));
850  i_feature++;
851  }
852  }
853 
854  // Prepare tensor for DNN outputs
855  std::vector<tensorflow::Tensor> outputs;
856 
857  // Evaluate DNN and put results in output tensor
858  std::string inputLayer = metadata.get<std::string>("input_layer");
859  std::string outputLayer = metadata.get<std::string>("output_layer");
860 
861  tensorflow::run(session, {{inputLayer, input}}, {outputLayer}, &outputs);
862  tensorflow::Tensor out_tensor = outputs[0];
863  tensorflow::TTypes<float, 1>::Matrix dnn_outputs = out_tensor.matrix<float>();
864 
865  // Find output with largest prediction
866  int imax = 0;
867  float out_max = 0;
868  for (long long int i = 0; i < out_tensor.dim_size(1); i++) {
869  float ith_output = dnn_outputs(0, i);
870  if (ith_output > out_max) {
871  imax = i;
872  out_max = ith_output;
873  }
874  }
875 
876  // Decode output
877  const std::string label = "output_labels.label_" + std::to_string(imax);
878  out.nHBd = metadata.get<int>(label + ".nHBd");
879  out.nHLIP = metadata.get<int>(label + ".nHLIP");
880  out.nHLMuS = metadata.get<int>(label + ".nHLMuS");
881  out.sf = metadata.get<int>(label + ".SF");
882 
883  dnnSuccess = true;
884 }
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:259
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 889 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().

897  {
898  int n_features = metadata_HB.get<int>("n_features", 0);
899 
900  // Prepare tensor for DNN inputs
901  tensorflow::Tensor input(tensorflow::DT_FLOAT, {1, n_features});
903  int i_feature = 0;
904  for (const pt::ptree::value_type& feature : metadata_HB.get_child("feature_names")) {
905  fname = feature.second.data();
906  if (feature_map.find(fname) == feature_map.end()) {
907  // don't evaluate DNN if any input feature is missing
908  dnnSuccess = false;
909  } else {
910  input.matrix<float>()(0, i_feature) = float(feature_map.at(fname));
911  i_feature++;
912  }
913  }
914 
915  // Prepare tensor for DNN outputs
916  std::vector<tensorflow::Tensor> outputs_HB;
917  // Evaluate DNN and put results in output tensor
918  std::string inputLayer_HB = metadata_HB.get<std::string>("input_layer");
919  std::string outputLayer_HB = metadata_HB.get<std::string>("output_layer");
920  tensorflow::run(session_HB, {{inputLayer_HB, input}}, {outputLayer_HB}, &outputs_HB);
921  tensorflow::Tensor out_tensor_HB = outputs_HB[0];
922  tensorflow::TTypes<float, 1>::Matrix dnn_outputs_HB = out_tensor_HB.matrix<float>();
923 
924  // Prepare tensor for DNN outputs
925  std::vector<tensorflow::Tensor> outputs_HLIP;
926  // Evaluate DNN and put results in output tensor
927  std::string inputLayer_HLIP = metadata_HLIP.get<std::string>("input_layer");
928  std::string outputLayer_HLIP = metadata_HLIP.get<std::string>("output_layer");
929  tensorflow::run(session_HLIP, {{inputLayer_HLIP, input}}, {outputLayer_HLIP}, &outputs_HLIP);
930  tensorflow::Tensor out_tensor_HLIP = outputs_HLIP[0];
931  tensorflow::TTypes<float, 1>::Matrix dnn_outputs_HLIP = out_tensor_HLIP.matrix<float>();
932 
933  // Prepare tensor for DNN outputs
934  std::vector<tensorflow::Tensor> outputs_HLMuS;
935  // Evaluate DNN and put results in output tensor
936  std::string inputLayer_HLMuS = metadata_HLMuS.get<std::string>("input_layer");
937  std::string outputLayer_HLMuS = metadata_HLMuS.get<std::string>("output_layer");
938  tensorflow::run(session_HLMuS, {{inputLayer_HLMuS, input}}, {outputLayer_HLMuS}, &outputs_HLMuS);
939  tensorflow::Tensor out_tensor_HLMuS = outputs_HLMuS[0];
940  tensorflow::TTypes<float, 1>::Matrix dnn_outputs_HLMuS = out_tensor_HLMuS.matrix<float>();
941 
942  // Decode output
943  out.nHBd = round(dnn_outputs_HB(0, 0));
944  out.nHLIP = round(dnn_outputs_HLIP(0, 0));
945  out.sf = round(dnn_outputs_HLIP(0, 1));
946  out.nHLMuS = round(dnn_outputs_HLMuS(0, 0));
947 
948  // Prevent prediction of negative number of seeds or too many seeds
949  out.nHBd = std::clamp(out.nHBd, 0, 10);
950  out.nHLIP = std::clamp(out.nHLIP, 0, 10);
951  out.nHLMuS = std::clamp(out.nHLMuS, 0, 10);
952 
953  // Prevent prediction of 0 seeds in total
954  if (out.nHBd == 0 && out.nHLIP == 0 && out.nHLMuS == 0) {
955  // default strategy, similar to Run 2
956  out.nHBd = 1;
957  out.nHLIP = 5;
958  }
959 
960  // Prevent extreme predictions for scale factors
961  // (on average SF=2 was found to be optimal)
962  if (out.sf <= 0)
963  out.sf = 2;
964  if (out.sf > 10)
965  out.sf = 10;
966 
967  dnnSuccess = true;
968 }
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:259
string fname
main script
portabletest::Matrix Matrix

◆ fillDescriptions()

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

Definition at line 973 of file TSGForOIDNN.cc.

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

973  {
975  desc.add<edm::InputTag>("src", edm::InputTag("hltL2Muons", "UpdatedAtVtx"));
976  desc.add<int>("layersToTry", 2);
977  desc.add<double>("fixedErrorRescaleFactorForHitless", 2.0);
978  desc.add<int>("hitsToTry", 1);
979  desc.add<edm::InputTag>("MeasurementTrackerEvent", edm::InputTag("hltSiStripClusters"));
980  desc.add<std::string>("estimator", "hltESPChi2MeasurementEstimator100");
981  desc.add<double>("maxEtaForTOB", 1.8);
982  desc.add<double>("minEtaForTEC", 0.7);
983  desc.addUntracked<bool>("debug", false);
984  desc.add<unsigned int>("maxSeeds", 20);
985  desc.add<unsigned int>("maxHitlessSeeds", 5);
986  desc.add<unsigned int>("maxHitSeeds", 1);
987  desc.add<std::string>("propagatorName", "PropagatorWithMaterialParabolicMf");
988  desc.add<unsigned int>("maxHitlessSeedsIP", 5);
989  desc.add<unsigned int>("maxHitlessSeedsMuS", 0);
990  desc.add<unsigned int>("maxHitDoubletSeeds", 0);
991  desc.add<bool>("getStrategyFromDNN", false);
992  desc.add<bool>("useRegressor", false);
993  desc.add<std::string>("dnnMetadataPath", "");
994  descriptions.add("tsgForOIDNN", desc);
995 }
void add(std::string const &label, ParameterSetDescription const &psetDescription)

◆ 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 583 of file TSGForOIDNN.cc.

References alongMomentum, MeasurementDetWithData::fastMeasurements(), newFWLiteAna::found, TrajectoryStateOnSurface::freeState(), MeasurementDetWithData::isNull(), TrajectoryStateOnSurface::isValid(), nano_mu_digi_cff::layer, LogTrace, HLT_2023v12_cff::maxHitDoubletSeeds, HLTSiStripMonitoring_cff::measurementTracker, eostools::move(), HLT_2023v12_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().

593  {
594  // This method is similar to makeSeedsFromHits, but the seed is created
595  // only when in addition to a hit on a given layer, there are more compatible hits
596  // on next layers (going from outside inwards), compatible with updated TSOS.
597  // If that's the case, multiple compatible hits are used to create a single seed.
598 
599  // Configured to only check the immideately adjacent layer and add one more hit
600  int max_addtnl_layers = 1; // max number of additional layers to scan
601  int max_meas = 1; // number of measurements to consider on each additional layer
602 
603  // // // First, regular procedure to find a compatible hit - like in makeSeedsFromHits // // //
604 
605  const TrajectoryStateOnSurface& onLayer(tsos);
606 
607  // Find dets compatible with original TSOS
608  std::vector<GeometricSearchDet::DetWithState> dets;
609  layer.compatibleDetsV(onLayer, propagatorAlong, estimator, dets);
610 
611  LogTrace("TSGForOIDNN") << "TSGForOIDNN::makeSeedsFromHitDoublets: Find measurements on each detWithState "
612  << dets.size();
613  std::vector<TrajectoryMeasurement> meas;
614 
615  // Loop over dets
616  for (auto const& detI : dets) {
617  MeasurementDetWithData det = measurementTracker.idToDet(detI.first->geographicalId());
618 
619  if (det.isNull())
620  continue; // skip if det does not exist
621  if (!detI.second.isValid())
622  continue; // skip if TSOS is invalid
623 
624  // Find measurements on this det
625  std::vector<TrajectoryMeasurement> mymeas = det.fastMeasurements(detI.second, onLayer, propagatorAlong, estimator);
626 
627  // Save valid measurements
628  for (auto const& measurement : mymeas) {
629  if (measurement.recHit()->isValid())
630  meas.push_back(measurement);
631  } // end loop over meas
632  } // end loop over dets
633 
634  LogTrace("TSGForOIDNN") << "TSGForOIDNN::makeSeedsFromHitDoublets: Update TSOS using TMs after sorting, then create "
635  "Trajectory Seed, number of TM = "
636  << meas.size();
637 
638  // sort valid measurements found on the first layer
639  std::sort(meas.begin(), meas.end(), TrajMeasLessEstim());
640 
641  unsigned int found = 0;
642 
643  // Loop over all valid measurements compatible with original TSOS
644  //for (std::vector<TrajectoryMeasurement>::const_iterator mea = meas.begin(); mea != meas.end(); ++mea) {
645  for (auto const& measurement : meas) {
646  if (hitDoubletSeedsMade >= maxHitDoubletSeeds)
647  return; // abort if enough seeds created
648 
649  // Update TSOS with measurement on first considered layer
650  TrajectoryStateOnSurface updatedTSOS = updator_->update(measurement.forwardPredictedState(), *measurement.recHit());
651 
652  LogTrace("TSGForOIDNN") << "TSGForOIDNN::makeSeedsFromHitDoublets: TSOS for TM " << found;
653  if (not updatedTSOS.isValid())
654  continue; // Skip if updated TSOS is invalid
655 
657 
658  // Save hit on first layer
659  seedHits.push_back(*measurement.recHit()->hit());
660  const DetLayer* detLayer = dynamic_cast<const DetLayer*>(&layer);
661 
662  // // // Now for this measurement we will loop over additional layers and try to update the TSOS again // // //
663 
664  // find layers compatible with updated TSOS
665  auto const& compLayers = navSchool.nextLayers(*detLayer, *updatedTSOS.freeState(), alongMomentum);
666 
667  int addtnl_layers_scanned = 0;
668  int found_compatible_on_next_layer = 0;
669  int det_id = 0;
670 
671  // Copy updated TSOS - we will update it again with a measurement from the next layer, if we find it
672  TrajectoryStateOnSurface updatedTSOS_next(updatedTSOS);
673 
674  // loop over layers compatible with updated TSOS
675  for (auto compLayer : compLayers) {
676  int nmeas = 0;
677 
678  if (addtnl_layers_scanned >= max_addtnl_layers)
679  break; // break if we already looped over enough layers
680  if (found_compatible_on_next_layer > 0)
681  break; // break if we already found additional hit
682 
683  // find dets compatible with updated TSOS
684  std::vector<GeometricSearchDet::DetWithState> dets_next;
685  TrajectoryStateOnSurface onLayer_next(updatedTSOS);
686 
687  compLayer->compatibleDetsV(onLayer_next, propagatorAlong, estimator, dets_next);
688 
689  //if (!detWithState.size()) continue;
690  std::vector<TrajectoryMeasurement> meas_next;
691 
692  // find measurements on dets_next and save the valid ones
693  for (auto const& detI_next : dets_next) {
694  MeasurementDetWithData det = measurementTracker.idToDet(detI_next.first->geographicalId());
695 
696  if (det.isNull())
697  continue; // skip if det does not exist
698  if (!detI_next.second.isValid())
699  continue; // skip if TSOS is invalid
700 
701  // Find measurements on this det
702  std::vector<TrajectoryMeasurement> mymeas_next =
703  det.fastMeasurements(detI_next.second, onLayer_next, propagatorAlong, estimator);
704 
705  for (auto const& mea_next : mymeas_next) {
706  // save valid measurements
707  if (mea_next.recHit()->isValid())
708  meas_next.push_back(mea_next);
709 
710  } // end loop over mymeas_next
711  } // end loop over dets_next
712 
713  // sort valid measurements found on this layer
714  std::sort(meas_next.begin(), meas_next.end(), TrajMeasLessEstim());
715 
716  // loop over valid measurements compatible with updated TSOS (TSOS updated with a hit on the first layer)
717  for (auto const& mea_next : meas_next) {
718  if (nmeas >= max_meas)
719  break; // skip if we already found enough hits
720 
721  // try to update TSOS again, with an additional hit
722  updatedTSOS_next = updator_->update(mea_next.forwardPredictedState(), *mea_next.recHit());
723 
724  if (not updatedTSOS_next.isValid())
725  continue; // skip if TSOS updated with additional hit is not valid
726 
727  // If there was a compatible hit on this layer, we end up here.
728  // An additional compatible hit is saved.
729  seedHits.push_back(*mea_next.recHit()->hit());
730  det_id = mea_next.recHit()->geographicalId().rawId();
731  nmeas++;
732  found_compatible_on_next_layer++;
733 
734  } // end loop over meas_next
735 
736  addtnl_layers_scanned++;
737 
738  } // end loop over compLayers (additional layers scanned after the original layer)
739 
740  if (found_compatible_on_next_layer == 0)
741  continue;
742  // only consider the hit if there was a compatible hit on one of the additional scanned layers
743 
744  // Create a seed from two saved hits
745  PTrajectoryStateOnDet const& pstate = trajectoryStateTransform::persistentState(updatedTSOS_next, det_id);
746  TrajectorySeed seed(pstate, std::move(seedHits), oppositeToMomentum);
747 
748  LogTrace("TSGForOIDNN") << "TSGForOIDNN::makeSeedsFromHitDoublets: Number of seedHits: " << seedHits.size();
749  out.push_back(seed);
750 
751  found++;
752  numSeedsMade++;
753  hitDoubletSeedsMade++;
754 
755  if (found == numOfHitsToTry_)
756  break; // break if enough measurements scanned
757 
758  } // end loop over measurements compatible with original TSOS
759 
760  if (found)
761  layerCount++;
762 }
const unsigned int numOfHitsToTry_
How many hits to try per layer.
Definition: TSGForOIDNN.cc:72
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:59
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 511 of file TSGForOIDNN.cc.

References MeasurementDetWithData::fastMeasurements(), newFWLiteAna::found, MeasurementDetWithData::isNull(), TrajectoryStateOnSurface::isValid(), nano_mu_digi_cff::layer, LogTrace, HLT_2023v12_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().

520  {
521  if (layerCount > numOfLayersToTry_)
522  return;
523 
524  const TrajectoryStateOnSurface& onLayer(tsos);
525 
526  std::vector<GeometricSearchDet::DetWithState> dets;
527  layer.compatibleDetsV(onLayer, propagatorAlong, estimator, dets);
528 
529  // Find Measurements on each DetWithState
530  LogTrace("TSGForOIDNN") << "TSGForOIDNN::makeSeedsFromHits: Find measurements on each detWithState " << dets.size();
531  std::vector<TrajectoryMeasurement> meas;
532  for (auto const& detI : dets) {
533  MeasurementDetWithData det = measurementTracker.idToDet(detI.first->geographicalId());
534  if (det.isNull())
535  continue;
536  if (!detI.second.isValid())
537  continue; // Skip if TSOS is not valid
538 
539  std::vector<TrajectoryMeasurement> mymeas =
540  det.fastMeasurements(detI.second, onLayer, propagatorAlong, estimator); // Second TSOS is not used
541  for (auto const& measurement : mymeas) {
542  if (measurement.recHit()->isValid())
543  meas.push_back(measurement); // Only save those which are valid
544  }
545  }
546 
547  // Update TSOS using TMs after sorting, then create Trajectory Seed and put into vector
548  LogTrace("TSGForOIDNN") << "TSGForOIDNN::makeSeedsFromHits: Update TSOS using TMs after sorting, then create "
549  "Trajectory Seed, number of TM = "
550  << meas.size();
551  std::sort(meas.begin(), meas.end(), TrajMeasLessEstim());
552 
553  unsigned int found = 0;
554  for (auto const& measurement : meas) {
555  if (hitSeedsMade >= maxHitSeeds)
556  return;
557  TrajectoryStateOnSurface updatedTSOS = updator_->update(measurement.forwardPredictedState(), *measurement.recHit());
558  LogTrace("TSGForOIDNN") << "TSGForOIDNN::makeSeedsFromHits: TSOS for TM " << found;
559  if (not updatedTSOS.isValid())
560  continue;
561 
563  seedHits.push_back(*measurement.recHit()->hit());
564  PTrajectoryStateOnDet const& pstate =
565  trajectoryStateTransform::persistentState(updatedTSOS, measurement.recHit()->geographicalId().rawId());
566  LogTrace("TSGForOIDNN") << "TSGForOIDNN::makeSeedsFromHits: Number of seedHits: " << seedHits.size();
567  TrajectorySeed seed(pstate, std::move(seedHits), oppositeToMomentum);
568  out.push_back(seed);
569  found++;
570  numSeedsMade++;
571  hitSeedsMade++;
572  if (found == numOfHitsToTry_)
573  break;
574  }
575 
576  if (found)
577  layerCount++;
578 }
const unsigned int numOfHitsToTry_
How many hits to try per layer.
Definition: TSGForOIDNN.cc:72
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:70
const std::unique_ptr< TrajectoryStateUpdator > updator_
Definition: TSGForOIDNN.cc:59
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 477 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().

484  {
485  // create hitless seeds
486  LogTrace("TSGForOIDNN") << "TSGForOIDNN::makeSeedsWithoutHits: Start hitless";
487  std::vector<GeometricSearchDet::DetWithState> dets;
488  layer.compatibleDetsV(tsos, propagatorAlong, estimator, dets);
489  if (!dets.empty()) {
490  auto const& detOnLayer = dets.front().first;
491  auto& tsosOnLayer = dets.front().second;
492  LogTrace("TSGForOIDNN") << "TSGForOIDNN::makeSeedsWithoutHits: tsosOnLayer " << tsosOnLayer;
493  if (!tsosOnLayer.isValid()) {
494  edm::LogInfo(theCategory_) << "ERROR!: Hitless TSOS is not valid!";
495  } else {
496  tsosOnLayer.rescaleError(errorSF);
497  PTrajectoryStateOnDet const& ptsod =
498  trajectoryStateTransform::persistentState(tsosOnLayer, detOnLayer->geographicalId().rawId());
500  out.push_back(TrajectorySeed(ptsod, rHC, oppositeToMomentum));
501  LogTrace("TSGForOIDNN") << "TSGForOIDNN::makeSeedsWithoutHits: TSOS (Hitless) done ";
502  hitlessSeedsMade++;
503  numSeedsMade++;
504  }
505  }
506 }
PTrajectoryStateOnDet persistentState(const TrajectoryStateOnSurface &ts, unsigned int detid)
#define LogTrace(id)
const std::string theCategory_
Definition: TSGForOIDNN.cc:61
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 252 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(), HLTObjectMonitor_cfi::l2muonEta, nano_mu_digi_cff::layer, hgcalTBTopologyTester_cfi::layers, LogTrace, volumeBasedMagneticField_160812_cfi::magfield, makeSeedsFromHitDoublets(), makeSeedsFromHits(), makeSeedsWithoutHits(), maxEtaForTOB_, HLT_2023v12_cff::maxHitDoubletSeeds, maxHitDoubletSeeds_, HLT_2023v12_cff::maxHitlessSeedsIP, maxHitlessSeedsIP_, HLT_2023v12_cff::maxHitlessSeedsMuS, maxHitlessSeedsMuS_, HLT_2023v12_cff::maxHitSeeds, maxHitSeeds_, maxSeeds_, HLTSiStripMonitoring_cff::measurementTracker, measurementTrackerTag_, metadata_, minEtaForTEC_, eostools::move(), HLT_2023v12_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_.

252  {
253  // Initialize variables
254  unsigned int numSeedsMade = 0;
255  unsigned int layerCount = 0;
256  unsigned int hitlessSeedsMadeIP = 0;
257  unsigned int hitlessSeedsMadeMuS = 0;
258  unsigned int hitSeedsMade = 0;
259  unsigned int hitDoubletSeedsMade = 0;
260 
261  // Container for DNN inputs
262  std::unordered_map<std::string, float> feature_map;
263 
264  // Container for DNN outputs
265  StrategyParameters strPars;
266 
267  // Surface used to make a TSOS at the PCA to the beamline
269 
270  // Get setup objects
271  const MagneticField& magfield = iEventSetup.getData(t_magfieldH_);
272  const Chi2MeasurementEstimatorBase& estimator = iEventSetup.getData(t_estimatorH_);
273  const Propagator& tmpPropagatorAlong = iEventSetup.getData(t_propagatorAlongH_);
274  const Propagator& tmpPropagatorOpposite = iEventSetup.getData(t_propagatorOppositeH_);
275  const TrackerGeometry& tmpTkGeometry = iEventSetup.getData(t_tmpTkGeometryH_);
276  const GlobalTrackingGeometry& geometry = iEventSetup.getData(t_geometryH_);
277  const NavigationSchool& navSchool = iEventSetup.getData(t_navSchool_);
279 
280  // Read L2 track collection
281  auto const& l2TrackCol = iEvent.get(src_);
282 
283  // The product
284  std::unique_ptr<std::vector<TrajectorySeed> > result(new std::vector<TrajectorySeed>());
285 
286  // Get vector of Detector layers
287  auto const* gsTracker = measurementTracker.geometricSearchTracker();
288  std::vector<BarrelDetLayer const*> const& tob = gsTracker->tobLayers();
289  std::vector<ForwardDetLayer const*> const& tecPositive =
290  tmpTkGeometry.isThere(GeomDetEnumerators::P2OTEC) ? gsTracker->posTidLayers() : gsTracker->posTecLayers();
291  std::vector<ForwardDetLayer const*> const& tecNegative =
292  tmpTkGeometry.isThere(GeomDetEnumerators::P2OTEC) ? gsTracker->negTidLayers() : gsTracker->negTecLayers();
293 
294  // Get suitable propagators
295  std::unique_ptr<Propagator> propagatorAlong = SetPropagationDirection(tmpPropagatorAlong, alongMomentum);
296  std::unique_ptr<Propagator> propagatorOpposite = SetPropagationDirection(tmpPropagatorOpposite, oppositeToMomentum);
297 
298  // Stepping Helix Propagator for propogation from muon system to tracker
299  edm::ESHandle<Propagator> shpOpposite = iEventSetup.getHandle(t_SHPOpposite_);
300 
301  // Loop over the L2's and make seeds for all of them
302  LogTrace(theCategory_) << "TSGForOIDNN::produce: Number of L2's: " << l2TrackCol.size();
303 
304  for (auto const& l2 : l2TrackCol) {
305  // Container of Seeds
306  std::vector<TrajectorySeed> out;
307  LogTrace("TSGForOIDNN") << "TSGForOIDNN::produce: L2 muon pT, eta, phi --> " << l2.pt() << " , " << l2.eta()
308  << " , " << l2.phi();
309 
311 
312  dummyPlane->move(fts.position() - dummyPlane->position());
313  TrajectoryStateOnSurface tsosAtIP = TrajectoryStateOnSurface(fts, *dummyPlane);
314  LogTrace("TSGForOIDNN") << "TSGForOIDNN::produce: Created TSOSatIP: " << tsosAtIP;
315 
316  // Get the TSOS on the innermost layer of the L2
318  LogTrace("TSGForOIDNN") << "TSGForOIDNN::produce: Created TSOSatMuonSystem: " << tsosAtMuonSystem;
319 
320  LogTrace("TSGForOIDNN")
321  << "TSGForOIDNN::produce: Check the error of the L2 parameter and use hit seeds if big errors";
322 
323  StateOnTrackerBound fromInside(propagatorAlong.get());
324  TrajectoryStateOnSurface outerTkStateInside = fromInside(fts);
325 
326  StateOnTrackerBound fromOutside(&*shpOpposite);
327  TrajectoryStateOnSurface outerTkStateOutside = fromOutside(tsosAtMuonSystem);
328 
329  // Check if the two positions (using updated and not-updated TSOS) agree withing certain extent.
330  // 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.
331  double l2muonEta = l2.eta();
332  double absL2muonEta = std::abs(l2muonEta);
333 
334  // make non-const copies of parameters, so they can be overriden for individual L2 muons
335  unsigned int maxHitSeeds = maxHitSeeds_;
337  unsigned int maxHitlessSeedsIP = maxHitlessSeedsIP_;
339 
340  float errorSFHitless = fixedErrorRescalingForHitless_;
341 
342  // update strategy parameters by evaluating DNN
343  if (getStrategyFromDNN_) {
344  bool dnnSuccess = false;
345 
346  // Update feature map with parameters of the current muon
347  updateFeatureMap(feature_map, l2, tsosAtIP, outerTkStateOutside);
348 
349  if (useRegressor_) {
350  // Use regressor
351  evaluateRegressor(feature_map,
353  metadata_.get_child("HB"),
355  metadata_.get_child("HLIP"),
357  metadata_.get_child("HLMuS"),
358  strPars,
359  dnnSuccess);
360  } else {
361  // Use classifier
362  evaluateClassifier(feature_map, tf_session_, metadata_, strPars, dnnSuccess);
363  }
364  if (!dnnSuccess)
365  break;
366 
367  maxHitSeeds = 0;
368  maxHitDoubletSeeds = strPars.nHBd;
369  maxHitlessSeedsIP = strPars.nHLIP;
370  maxHitlessSeedsMuS = strPars.nHLMuS;
371  errorSFHitless = strPars.sf;
372  }
373 
374  numSeedsMade = 0;
375  hitlessSeedsMadeIP = 0;
376  hitlessSeedsMadeMuS = 0;
377  hitSeedsMade = 0;
378  hitDoubletSeedsMade = 0;
379 
380  auto createSeeds = [&](auto const& layers) {
381  for (auto const& layer : boost::adaptors::reverse(layers)) {
382  if (hitlessSeedsMadeIP < maxHitlessSeedsIP && numSeedsMade < maxSeeds_)
384  tsosAtIP,
385  *(propagatorAlong.get()),
386  estimator,
387  errorSFHitless,
388  hitlessSeedsMadeIP,
389  numSeedsMade,
390  out);
391 
392  if (outerTkStateInside.isValid() && outerTkStateOutside.isValid() && hitlessSeedsMadeMuS < maxHitlessSeedsMuS &&
393  numSeedsMade < maxSeeds_)
395  outerTkStateOutside,
396  *(propagatorOpposite.get()),
397  estimator,
398  errorSFHitless,
399  hitlessSeedsMadeMuS,
400  numSeedsMade,
401  out);
402 
403  if (hitSeedsMade < maxHitSeeds && numSeedsMade < maxSeeds_)
405  tsosAtIP,
406  *(propagatorAlong.get()),
407  estimator,
409  hitSeedsMade,
410  numSeedsMade,
411  maxHitSeeds,
412  layerCount,
413  out);
414 
415  if (hitDoubletSeedsMade < maxHitDoubletSeeds && numSeedsMade < maxSeeds_)
417  tsosAtIP,
418  *(propagatorAlong.get()),
419  estimator,
421  navSchool,
422  hitDoubletSeedsMade,
423  numSeedsMade,
425  layerCount,
426  out);
427  };
428  };
429 
430  // BARREL
431  if (absL2muonEta < maxEtaForTOB_) {
432  layerCount = 0;
433  createSeeds(tob);
434  LogTrace("TSGForOIDNN") << "TSGForOIDNN:::produce: NumSeedsMade = " << numSeedsMade
435  << " , layerCount = " << layerCount;
436  }
437 
438  // Reset number of seeds if in overlap region
439  if (absL2muonEta > minEtaForTEC_ && absL2muonEta < maxEtaForTOB_) {
440  numSeedsMade = 0;
441  hitlessSeedsMadeIP = 0;
442  hitlessSeedsMadeMuS = 0;
443  hitSeedsMade = 0;
444  hitDoubletSeedsMade = 0;
445  }
446 
447  // ENDCAP+
448  if (l2muonEta > minEtaForTEC_) {
449  layerCount = 0;
450  createSeeds(tecPositive);
451  LogTrace("TSGForOIDNN") << "TSGForOIDNN:::produce: NumSeedsMade = " << numSeedsMade
452  << " , layerCount = " << layerCount;
453  }
454 
455  // ENDCAP-
456  if (l2muonEta < -minEtaForTEC_) {
457  layerCount = 0;
458  createSeeds(tecNegative);
459  LogTrace("TSGForOIDNN") << "TSGForOIDNN:::produce: NumSeedsMade = " << numSeedsMade
460  << " , layerCount = " << layerCount;
461  }
462 
463  for (std::vector<TrajectorySeed>::iterator it = out.begin(); it != out.end(); ++it) {
464  result->push_back(*it);
465  }
466 
467  } // L2Collection
468 
469  edm::LogInfo(theCategory_) << "TSGForOIDNN::produce: number of seeds made: " << result->size();
470 
471  iEvent.put(std::move(result));
472 }
const unsigned int maxSeeds_
Maximum number of seeds for each L2.
Definition: TSGForOIDNN.cc:64
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:889
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:767
tensorflow::Session * tf_session_HLMuS_
Definition: TSGForOIDNN.cc:107
const edm::ESGetToken< NavigationSchool, NavigationSchoolRecord > t_navSchool_
Definition: TSGForOIDNN.cc:57
const edm::ESGetToken< GlobalTrackingGeometry, GlobalTrackingGeometryRecord > t_geometryH_
Definition: TSGForOIDNN.cc:56
const edm::EDGetTokenT< MeasurementTrackerEvent > measurementTrackerTag_
Definition: TSGForOIDNN.cc:60
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:583
tensorflow::Session * tf_session_HB_
Definition: TSGForOIDNN.cc:103
const unsigned int maxHitlessSeedsMuS_
Definition: TSGForOIDNN.cc:85
const edm::EDGetTokenT< reco::TrackCollection > src_
Labels for input collections.
Definition: TSGForOIDNN.cc:49
const unsigned int maxHitlessSeedsIP_
Definition: TSGForOIDNN.cc:84
const edm::ESGetToken< Chi2MeasurementEstimatorBase, TrackingComponentsRecord > t_estimatorH_
Tokens for ESHandle.
Definition: TSGForOIDNN.cc:51
const double minEtaForTEC_
Minimum eta value to activate searching in the TEC.
Definition: TSGForOIDNN.cc:78
#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:74
bool isThere(GeomDetEnumerators::SubDetector subdet) const
const std::string theCategory_
Definition: TSGForOIDNN.cc:61
const edm::ESGetToken< Propagator, TrackingComponentsRecord > t_propagatorOppositeH_
Definition: TSGForOIDNN.cc:54
const unsigned int maxHitSeeds_
Maximum number of hitbased seeds for each L2.
Definition: TSGForOIDNN.cc:66
const unsigned int maxHitDoubletSeeds_
Definition: TSGForOIDNN.cc:86
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:91
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:477
Log< level::Info, false > LogInfo
const edm::ESGetToken< Propagator, TrackingComponentsRecord > t_SHPOpposite_
Definition: TSGForOIDNN.cc:58
const double maxEtaForTOB_
Maximum eta value to activate searching in the TOB.
Definition: TSGForOIDNN.cc:80
const edm::ESGetToken< MagneticField, IdealMagneticFieldRecord > t_magfieldH_
Definition: TSGForOIDNN.cc:52
tensorflow::Session * tf_session_
Definition: TSGForOIDNN.cc:96
const edm::ESGetToken< Propagator, TrackingComponentsRecord > t_propagatorAlongH_
Definition: TSGForOIDNN.cc:53
const bool getStrategyFromDNN_
Get number of seeds to use from DNN output instead of "max..Seeds" parameters.
Definition: TSGForOIDNN.cc:89
pt::ptree metadata_
Definition: TSGForOIDNN.cc:111
const edm::ESGetToken< TrackerGeometry, TrackerDigiGeometryRecord > t_tmpTkGeometryH_
Definition: TSGForOIDNN.cc:55
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:832
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:511
TrajectoryStateOnSurface innerStateOnSurface(const reco::Track &tk, const TrackingGeometry &geom, const MagneticField *field, bool withErr=true)
tensorflow::Session * tf_session_HLIP_
Definition: TSGForOIDNN.cc:105

◆ 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 767 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().

770  {
771  the_map["pt"] = l2.pt();
772  the_map["eta"] = l2.eta();
773  the_map["phi"] = l2.phi();
774  the_map["validHits"] = l2.found();
775  if (tsos_IP.isValid()) {
776  the_map["tsos_IP_eta"] = tsos_IP.globalPosition().eta();
777  the_map["tsos_IP_phi"] = tsos_IP.globalPosition().phi();
778  the_map["tsos_IP_pt"] = tsos_IP.globalMomentum().perp();
779  the_map["tsos_IP_pt_eta"] = tsos_IP.globalMomentum().eta();
780  the_map["tsos_IP_pt_phi"] = tsos_IP.globalMomentum().phi();
781  const AlgebraicSymMatrix55& matrix_IP = tsos_IP.curvilinearError().matrix();
782  the_map["err0_IP"] = sqrt(matrix_IP[0][0]);
783  the_map["err1_IP"] = sqrt(matrix_IP[1][1]);
784  the_map["err2_IP"] = sqrt(matrix_IP[2][2]);
785  the_map["err3_IP"] = sqrt(matrix_IP[3][3]);
786  the_map["err4_IP"] = sqrt(matrix_IP[4][4]);
787  the_map["tsos_IP_valid"] = 1.0;
788  } else {
789  the_map["tsos_IP_eta"] = -999;
790  the_map["tsos_IP_phi"] = -999;
791  the_map["tsos_IP_pt"] = -999;
792  the_map["tsos_IP_pt_eta"] = -999;
793  the_map["tsos_IP_pt_phi"] = -999;
794  the_map["err0_IP"] = -999;
795  the_map["err1_IP"] = -999;
796  the_map["err2_IP"] = -999;
797  the_map["err3_IP"] = -999;
798  the_map["err4_IP"] = -999;
799  the_map["tsos_IP_valid"] = 0.0;
800  }
801  if (tsos_MuS.isValid()) {
802  the_map["tsos_MuS_eta"] = tsos_MuS.globalPosition().eta();
803  the_map["tsos_MuS_phi"] = tsos_MuS.globalPosition().phi();
804  the_map["tsos_MuS_pt"] = tsos_MuS.globalMomentum().perp();
805  the_map["tsos_MuS_pt_eta"] = tsos_MuS.globalMomentum().eta();
806  the_map["tsos_MuS_pt_phi"] = tsos_MuS.globalMomentum().phi();
807  const AlgebraicSymMatrix55& matrix_MuS = tsos_MuS.curvilinearError().matrix();
808  the_map["err0_MuS"] = sqrt(matrix_MuS[0][0]);
809  the_map["err1_MuS"] = sqrt(matrix_MuS[1][1]);
810  the_map["err2_MuS"] = sqrt(matrix_MuS[2][2]);
811  the_map["err3_MuS"] = sqrt(matrix_MuS[3][3]);
812  the_map["err4_MuS"] = sqrt(matrix_MuS[4][4]);
813  the_map["tsos_MuS_valid"] = 1.0;
814  } else {
815  the_map["tsos_MuS_eta"] = -999;
816  the_map["tsos_MuS_phi"] = -999;
817  the_map["tsos_MuS_pt"] = -999;
818  the_map["tsos_MuS_pt_eta"] = -999;
819  the_map["tsos_MuS_pt_phi"] = -999;
820  the_map["err0_MuS"] = -999;
821  the_map["err1_MuS"] = -999;
822  the_map["err2_MuS"] = -999;
823  the_map["err3_MuS"] = -999;
824  the_map["err4_MuS"] = -999;
825  the_map["tsos_MuS_valid"] = 0.0;
826  }
827 }
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 110 of file TSGForOIDNN.cc.

Referenced by TSGForOIDNN().

◆ dnnModelPath_

std::string TSGForOIDNN::dnnModelPath_
private

Settings for classifier.

Definition at line 94 of file TSGForOIDNN.cc.

Referenced by TSGForOIDNN().

◆ dnnModelPath_HB_

std::string TSGForOIDNN::dnnModelPath_HB_
private

Settings for regressor.

Definition at line 99 of file TSGForOIDNN.cc.

Referenced by TSGForOIDNN().

◆ dnnModelPath_HLIP_

std::string TSGForOIDNN::dnnModelPath_HLIP_
private

Definition at line 100 of file TSGForOIDNN.cc.

Referenced by TSGForOIDNN().

◆ dnnModelPath_HLMuS_

std::string TSGForOIDNN::dnnModelPath_HLMuS_
private

Definition at line 101 of file TSGForOIDNN.cc.

Referenced by TSGForOIDNN().

◆ estimatorName_

const std::string TSGForOIDNN::estimatorName_
private

Estimator used to find dets and TrajectoryMeasurements.

Definition at line 76 of file TSGForOIDNN.cc.

◆ fixedErrorRescalingForHitless_

const double TSGForOIDNN::fixedErrorRescalingForHitless_
private

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

Definition at line 74 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 89 of file TSGForOIDNN.cc.

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

◆ graphDef_

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

Definition at line 95 of file TSGForOIDNN.cc.

Referenced by TSGForOIDNN().

◆ graphDef_HB_

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

Definition at line 102 of file TSGForOIDNN.cc.

Referenced by TSGForOIDNN().

◆ graphDef_HLIP_

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

Definition at line 104 of file TSGForOIDNN.cc.

Referenced by TSGForOIDNN().

◆ graphDef_HLMuS_

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

Definition at line 106 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 80 of file TSGForOIDNN.cc.

Referenced by produce().

◆ maxHitDoubletSeeds_

const unsigned int TSGForOIDNN::maxHitDoubletSeeds_
private

Definition at line 86 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 68 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 84 of file TSGForOIDNN.cc.

Referenced by produce().

◆ maxHitlessSeedsMuS_

const unsigned int TSGForOIDNN::maxHitlessSeedsMuS_
private

Definition at line 85 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 66 of file TSGForOIDNN.cc.

Referenced by produce().

◆ maxSeeds_

const unsigned int TSGForOIDNN::maxSeeds_
private

Maximum number of seeds for each L2.

Definition at line 64 of file TSGForOIDNN.cc.

Referenced by produce().

◆ measurementTrackerTag_

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

Definition at line 60 of file TSGForOIDNN.cc.

Referenced by produce().

◆ metadata_

pt::ptree TSGForOIDNN::metadata_
private

Definition at line 111 of file TSGForOIDNN.cc.

Referenced by produce(), and TSGForOIDNN().

◆ minEtaForTEC_

const double TSGForOIDNN::minEtaForTEC_
private

Minimum eta value to activate searching in the TEC.

Definition at line 78 of file TSGForOIDNN.cc.

Referenced by produce().

◆ numOfHitsToTry_

const unsigned int TSGForOIDNN::numOfHitsToTry_
private

How many hits to try per layer.

Definition at line 72 of file TSGForOIDNN.cc.

Referenced by makeSeedsFromHitDoublets(), and makeSeedsFromHits().

◆ numOfLayersToTry_

const unsigned int TSGForOIDNN::numOfLayersToTry_
private

How many layers to try.

Definition at line 70 of file TSGForOIDNN.cc.

Referenced by makeSeedsFromHits().

◆ src_

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

Labels for input collections.

Definition at line 49 of file TSGForOIDNN.cc.

Referenced by produce().

◆ t_estimatorH_

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

Tokens for ESHandle.

Definition at line 51 of file TSGForOIDNN.cc.

Referenced by produce().

◆ t_geometryH_

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

Definition at line 56 of file TSGForOIDNN.cc.

Referenced by produce().

◆ t_magfieldH_

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

Definition at line 52 of file TSGForOIDNN.cc.

Referenced by produce().

◆ t_navSchool_

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

Definition at line 57 of file TSGForOIDNN.cc.

Referenced by produce().

◆ t_propagatorAlongH_

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

Definition at line 53 of file TSGForOIDNN.cc.

Referenced by produce().

◆ t_propagatorOppositeH_

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

Definition at line 54 of file TSGForOIDNN.cc.

Referenced by produce().

◆ t_SHPOpposite_

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

Definition at line 58 of file TSGForOIDNN.cc.

Referenced by produce().

◆ t_tmpTkGeometryH_

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

Definition at line 55 of file TSGForOIDNN.cc.

Referenced by produce().

◆ tf_session_

tensorflow::Session* TSGForOIDNN::tf_session_
private

Definition at line 96 of file TSGForOIDNN.cc.

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

◆ tf_session_HB_

tensorflow::Session* TSGForOIDNN::tf_session_HB_
private

Definition at line 103 of file TSGForOIDNN.cc.

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

◆ tf_session_HLIP_

tensorflow::Session* TSGForOIDNN::tf_session_HLIP_
private

Definition at line 105 of file TSGForOIDNN.cc.

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

◆ tf_session_HLMuS_

tensorflow::Session* TSGForOIDNN::tf_session_HLMuS_
private

Definition at line 107 of file TSGForOIDNN.cc.

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

◆ theCategory_

const std::string TSGForOIDNN::theCategory_
private

Definition at line 61 of file TSGForOIDNN.cc.

Referenced by makeSeedsWithoutHits(), and produce().

◆ updator_

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

Definition at line 59 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 91 of file TSGForOIDNN.cc.

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