34 #include <boost/property_tree/ptree.hpp> 35 #include <boost/property_tree/json_parser.hpp> 36 #include <boost/range/adaptor/reversed.hpp> 38 namespace pt = boost::property_tree;
60 const std::unique_ptr<TrajectoryStateUpdator>
updator_;
120 unsigned int& hitlessSeedsMade,
121 unsigned int& numSeedsMade,
122 std::vector<TrajectorySeed>&
out)
const;
130 unsigned int& hitSeedsMade,
131 unsigned int& numSeedsMade,
133 unsigned int& layerCount,
134 std::vector<TrajectorySeed>&
out)
const;
143 unsigned int& hitDoubletSeedsMade,
144 unsigned int& numSeedsMade,
146 unsigned int& layerCount,
147 std::vector<TrajectorySeed>&
out)
const;
164 tensorflow::Session* session,
167 bool& dnnSuccess)
const;
170 void evaluateRegressor(
const std::unordered_map<std::string, float>& feature_map,
171 tensorflow::Session* session_HB,
172 const pt::ptree& metadata_HB,
173 tensorflow::Session* session_HLIP,
174 const pt::ptree& metadata_HLIP,
175 tensorflow::Session* session_HLMuS,
176 const pt::ptree& metadata_HLMuS,
178 bool& dnnSuccess)
const;
182 : src_(consumes(iConfig.getParameter<
edm::
InputTag>(
"src"))),
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")) {
236 produces<std::vector<TrajectorySeed> >();
254 std::unordered_map<std::string, float> dummyFeatureMap() {
255 std::unordered_map<std::string, float> the_map;
257 the_map[
"eta"] = 0.5;
258 the_map[
"phi"] = 1.0;
259 the_map[
"validHits"] = 0.;
260 the_map[
"tsos_IP_eta"] = -999;
261 the_map[
"tsos_IP_phi"] = -999;
262 the_map[
"tsos_IP_pt"] = -999;
263 the_map[
"tsos_IP_pt_eta"] = -999;
264 the_map[
"tsos_IP_pt_phi"] = -999;
265 the_map[
"err0_IP"] = -999;
266 the_map[
"err1_IP"] = -999;
267 the_map[
"err2_IP"] = -999;
268 the_map[
"err3_IP"] = -999;
269 the_map[
"err4_IP"] = -999;
270 the_map[
"tsos_IP_valid"] = 0.0;
271 the_map[
"tsos_MuS_eta"] = -999;
272 the_map[
"tsos_MuS_phi"] = -999;
273 the_map[
"tsos_MuS_pt"] = -999;
274 the_map[
"tsos_MuS_pt_eta"] = -999;
275 the_map[
"tsos_MuS_pt_phi"] = -999;
276 the_map[
"err0_MuS"] = -999;
277 the_map[
"err1_MuS"] = -999;
278 the_map[
"err2_MuS"] = -999;
279 the_map[
"err3_MuS"] = -999;
280 the_map[
"err4_MuS"] = -999;
281 the_map[
"tsos_MuS_valid"] = 0.0;
290 bool dnnSuccess =
false;
300 unsigned int numSeedsMade = 0;
301 unsigned int layerCount = 0;
302 unsigned int hitlessSeedsMadeIP = 0;
303 unsigned int hitlessSeedsMadeMuS = 0;
304 unsigned int hitSeedsMade = 0;
305 unsigned int hitDoubletSeedsMade = 0;
308 std::unordered_map<std::string, float> feature_map;
330 std::unique_ptr<std::vector<TrajectorySeed> >
result(
new std::vector<TrajectorySeed>());
334 std::vector<BarrelDetLayer const*>
const& tob = gsTracker->tobLayers();
335 std::vector<ForwardDetLayer const*>
const& tecPositive =
337 std::vector<ForwardDetLayer const*>
const& tecNegative =
350 for (
auto const& l2 : l2TrackCol) {
352 std::vector<TrajectorySeed>
out;
353 LogTrace(
"TSGForOIDNN") <<
"TSGForOIDNN::produce: L2 muon pT, eta, phi --> " << l2.pt() <<
" , " << l2.eta()
354 <<
" , " << l2.phi();
358 dummyPlane->move(fts.
position() - dummyPlane->position());
360 LogTrace(
"TSGForOIDNN") <<
"TSGForOIDNN::produce: Created TSOSatIP: " << tsosAtIP;
364 LogTrace(
"TSGForOIDNN") <<
"TSGForOIDNN::produce: Created TSOSatMuonSystem: " << tsosAtMuonSystem;
367 <<
"TSGForOIDNN::produce: Check the error of the L2 parameter and use hit seeds if big errors";
390 bool dnnSuccess =
false;
417 errorSFHitless = strPars.
sf;
421 hitlessSeedsMadeIP = 0;
422 hitlessSeedsMadeMuS = 0;
424 hitDoubletSeedsMade = 0;
426 auto createSeeds = [&](
auto const&
layers) {
480 LogTrace(
"TSGForOIDNN") <<
"TSGForOIDNN:::produce: NumSeedsMade = " << numSeedsMade
481 <<
" , layerCount = " << layerCount;
487 hitlessSeedsMadeIP = 0;
488 hitlessSeedsMadeMuS = 0;
490 hitDoubletSeedsMade = 0;
496 createSeeds(tecPositive);
497 LogTrace(
"TSGForOIDNN") <<
"TSGForOIDNN:::produce: NumSeedsMade = " << numSeedsMade
498 <<
" , layerCount = " << layerCount;
504 createSeeds(tecNegative);
505 LogTrace(
"TSGForOIDNN") <<
"TSGForOIDNN:::produce: NumSeedsMade = " << numSeedsMade
506 <<
" , layerCount = " << layerCount;
509 for (std::vector<TrajectorySeed>::iterator
it =
out.begin();
it !=
out.end(); ++
it) {
528 unsigned int& hitlessSeedsMade,
529 unsigned int& numSeedsMade,
530 std::vector<TrajectorySeed>&
out)
const {
532 LogTrace(
"TSGForOIDNN") <<
"TSGForOIDNN::makeSeedsWithoutHits: Start hitless";
533 std::vector<GeometricSearchDet::DetWithState> dets;
536 auto const& detOnLayer = dets.front().first;
537 auto& tsosOnLayer = dets.front().second;
538 LogTrace(
"TSGForOIDNN") <<
"TSGForOIDNN::makeSeedsWithoutHits: tsosOnLayer " << tsosOnLayer;
539 if (!tsosOnLayer.isValid()) {
542 tsosOnLayer.rescaleError(errorSF);
547 LogTrace(
"TSGForOIDNN") <<
"TSGForOIDNN::makeSeedsWithoutHits: TSOS (Hitless) done ";
562 unsigned int& hitSeedsMade,
563 unsigned int& numSeedsMade,
565 unsigned int& layerCount,
566 std::vector<TrajectorySeed>&
out)
const {
572 std::vector<GeometricSearchDet::DetWithState> dets;
576 LogTrace(
"TSGForOIDNN") <<
"TSGForOIDNN::makeSeedsFromHits: Find measurements on each detWithState " << dets.size();
577 std::vector<TrajectoryMeasurement> meas;
578 for (
auto const& detI : dets) {
582 if (!detI.second.isValid())
585 std::vector<TrajectoryMeasurement> mymeas =
587 for (
auto const& measurement : mymeas) {
588 if (measurement.recHit()->isValid())
589 meas.push_back(measurement);
594 LogTrace(
"TSGForOIDNN") <<
"TSGForOIDNN::makeSeedsFromHits: Update TSOS using TMs after sorting, then create " 595 "Trajectory Seed, number of TM = " 599 unsigned int found = 0;
600 for (
auto const& measurement : meas) {
604 LogTrace(
"TSGForOIDNN") <<
"TSGForOIDNN::makeSeedsFromHits: TSOS for TM " <<
found;
609 seedHits.
push_back(*measurement.recHit()->hit());
612 LogTrace(
"TSGForOIDNN") <<
"TSGForOIDNN::makeSeedsFromHits: Number of seedHits: " << seedHits.
size();
635 unsigned int& hitDoubletSeedsMade,
636 unsigned int& numSeedsMade,
638 unsigned int& layerCount,
639 std::vector<TrajectorySeed>&
out)
const {
646 int max_addtnl_layers = 1;
654 std::vector<GeometricSearchDet::DetWithState> dets;
657 LogTrace(
"TSGForOIDNN") <<
"TSGForOIDNN::makeSeedsFromHitDoublets: Find measurements on each detWithState " 659 std::vector<TrajectoryMeasurement> meas;
662 for (
auto const& detI : dets) {
667 if (!detI.second.isValid())
674 for (
auto const& measurement : mymeas) {
675 if (measurement.recHit()->isValid())
676 meas.push_back(measurement);
680 LogTrace(
"TSGForOIDNN") <<
"TSGForOIDNN::makeSeedsFromHitDoublets: Update TSOS using TMs after sorting, then create " 681 "Trajectory Seed, number of TM = " 687 unsigned int found = 0;
691 for (
auto const& measurement : meas) {
698 LogTrace(
"TSGForOIDNN") <<
"TSGForOIDNN::makeSeedsFromHitDoublets: TSOS for TM " <<
found;
705 seedHits.
push_back(*measurement.recHit()->hit());
713 int addtnl_layers_scanned = 0;
714 int found_compatible_on_next_layer = 0;
721 for (
auto compLayer : compLayers) {
724 if (addtnl_layers_scanned >= max_addtnl_layers)
726 if (found_compatible_on_next_layer > 0)
730 std::vector<GeometricSearchDet::DetWithState> dets_next;
736 std::vector<TrajectoryMeasurement> meas_next;
739 for (
auto const& detI_next : dets_next) {
744 if (!detI_next.second.isValid())
748 std::vector<TrajectoryMeasurement> mymeas_next =
751 for (
auto const& mea_next : mymeas_next) {
753 if (mea_next.recHit()->isValid())
754 meas_next.push_back(mea_next);
763 for (
auto const& mea_next : meas_next) {
764 if (nmeas >= max_meas)
768 updatedTSOS_next =
updator_->update(mea_next.forwardPredictedState(), *mea_next.recHit());
770 if (not updatedTSOS_next.
isValid())
775 seedHits.
push_back(*mea_next.recHit()->hit());
776 det_id = mea_next.recHit()->geographicalId().rawId();
778 found_compatible_on_next_layer++;
782 addtnl_layers_scanned++;
786 if (found_compatible_on_next_layer == 0)
794 LogTrace(
"TSGForOIDNN") <<
"TSGForOIDNN::makeSeedsFromHitDoublets: Number of seedHits: " << seedHits.
size();
799 hitDoubletSeedsMade++;
817 the_map[
"pt"] = l2.
pt();
818 the_map[
"eta"] = l2.
eta();
819 the_map[
"phi"] = l2.
phi();
820 the_map[
"validHits"] = l2.
found();
828 the_map[
"err0_IP"] =
sqrt(matrix_IP[0][0]);
829 the_map[
"err1_IP"] =
sqrt(matrix_IP[1][1]);
830 the_map[
"err2_IP"] =
sqrt(matrix_IP[2][2]);
831 the_map[
"err3_IP"] =
sqrt(matrix_IP[3][3]);
832 the_map[
"err4_IP"] =
sqrt(matrix_IP[4][4]);
833 the_map[
"tsos_IP_valid"] = 1.0;
835 the_map[
"tsos_IP_eta"] = -999;
836 the_map[
"tsos_IP_phi"] = -999;
837 the_map[
"tsos_IP_pt"] = -999;
838 the_map[
"tsos_IP_pt_eta"] = -999;
839 the_map[
"tsos_IP_pt_phi"] = -999;
840 the_map[
"err0_IP"] = -999;
841 the_map[
"err1_IP"] = -999;
842 the_map[
"err2_IP"] = -999;
843 the_map[
"err3_IP"] = -999;
844 the_map[
"err4_IP"] = -999;
845 the_map[
"tsos_IP_valid"] = 0.0;
854 the_map[
"err0_MuS"] =
sqrt(matrix_MuS[0][0]);
855 the_map[
"err1_MuS"] =
sqrt(matrix_MuS[1][1]);
856 the_map[
"err2_MuS"] =
sqrt(matrix_MuS[2][2]);
857 the_map[
"err3_MuS"] =
sqrt(matrix_MuS[3][3]);
858 the_map[
"err4_MuS"] =
sqrt(matrix_MuS[4][4]);
859 the_map[
"tsos_MuS_valid"] = 1.0;
861 the_map[
"tsos_MuS_eta"] = -999;
862 the_map[
"tsos_MuS_phi"] = -999;
863 the_map[
"tsos_MuS_pt"] = -999;
864 the_map[
"tsos_MuS_pt_eta"] = -999;
865 the_map[
"tsos_MuS_pt_phi"] = -999;
866 the_map[
"err0_MuS"] = -999;
867 the_map[
"err1_MuS"] = -999;
868 the_map[
"err2_MuS"] = -999;
869 the_map[
"err3_MuS"] = -999;
870 the_map[
"err4_MuS"] = -999;
871 the_map[
"tsos_MuS_valid"] = 0.0;
879 tensorflow::Session* session,
882 bool& dnnSuccess)
const {
883 int n_features =
metadata.get<
int>(
"n_features", 0);
886 tensorflow::Tensor
input(tensorflow::DT_FLOAT, {1, n_features});
890 fname = feature.second.data();
891 if (feature_map.find(
fname) == feature_map.end()) {
901 std::vector<tensorflow::Tensor>
outputs;
908 tensorflow::Tensor out_tensor =
outputs[0];
914 for (
long long int i = 0;
i < out_tensor.dim_size(1);
i++) {
915 float ith_output = dnn_outputs(0,
i);
916 if (ith_output > out_max) {
918 out_max = ith_output;
936 tensorflow::Session* session_HB,
937 const pt::ptree& metadata_HB,
938 tensorflow::Session* session_HLIP,
939 const pt::ptree& metadata_HLIP,
940 tensorflow::Session* session_HLMuS,
941 const pt::ptree& metadata_HLMuS,
943 bool& dnnSuccess)
const {
944 int n_features = metadata_HB.get<
int>(
"n_features", 0);
947 tensorflow::Tensor
input(tensorflow::DT_FLOAT, {1, n_features});
951 fname = feature.second.data();
952 if (feature_map.find(
fname) == feature_map.end()) {
962 std::vector<tensorflow::Tensor> outputs_HB;
967 tensorflow::Tensor out_tensor_HB = outputs_HB[0];
971 std::vector<tensorflow::Tensor> outputs_HLIP;
976 tensorflow::Tensor out_tensor_HLIP = outputs_HLIP[0];
980 std::vector<tensorflow::Tensor> outputs_HLMuS;
984 tensorflow::run(session_HLMuS, {{inputLayer_HLMuS,
input}}, {outputLayer_HLMuS}, &outputs_HLMuS);
985 tensorflow::Tensor out_tensor_HLMuS = outputs_HLMuS[0];
989 out.nHBd = round(dnn_outputs_HB(0, 0));
990 out.nHLIP = round(dnn_outputs_HLIP(0, 0));
991 out.sf = round(dnn_outputs_HLIP(0, 1));
992 out.nHLMuS = round(dnn_outputs_HLMuS(0, 0));
995 out.nHBd = std::clamp(
out.nHBd, 0, 10);
996 out.nHLIP = std::clamp(
out.nHLIP, 0, 10);
997 out.nHLMuS = std::clamp(
out.nHLMuS, 0, 10);
1000 if (
out.nHBd == 0 &&
out.nHLIP == 0 &&
out.nHLMuS == 0) {
1022 desc.add<
int>(
"layersToTry", 2);
1023 desc.add<
double>(
"fixedErrorRescaleFactorForHitless", 2.0);
1024 desc.add<
int>(
"hitsToTry", 1);
1026 desc.add<
std::string>(
"estimator",
"hltESPChi2MeasurementEstimator100");
1027 desc.add<
double>(
"maxEtaForTOB", 1.8);
1028 desc.add<
double>(
"minEtaForTEC", 0.7);
1029 desc.addUntracked<
bool>(
"debug",
false);
1030 desc.add<
unsigned int>(
"maxSeeds", 20);
1031 desc.add<
unsigned int>(
"maxHitlessSeeds", 5);
1032 desc.add<
unsigned int>(
"maxHitSeeds", 1);
1033 desc.add<
std::string>(
"propagatorName",
"PropagatorWithMaterialParabolicMf");
1034 desc.add<
unsigned int>(
"maxHitlessSeedsIP", 5);
1035 desc.add<
unsigned int>(
"maxHitlessSeedsMuS", 0);
1036 desc.add<
unsigned int>(
"maxHitDoubletSeeds", 0);
1037 desc.add<
bool>(
"getStrategyFromDNN",
false);
1038 desc.add<
bool>(
"useRegressor",
false);
1040 descriptions.
add(
"tsgForOIDNN",
desc);
const unsigned int numOfHitsToTry_
How many hits to try per layer.
std::string dnnModelPath_HLIP_
const unsigned int maxSeeds_
Maximum number of seeds for each L2.
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.
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.
std::string dnnModelPath_HLMuS_
tensorflow::Session * tf_session_HLMuS_
T const & getData(const ESGetToken< T, R > &iToken) const noexcept(false)
const edm::ESGetToken< NavigationSchool, NavigationSchoolRecord > t_navSchool_
const edm::ESGetToken< GlobalTrackingGeometry, GlobalTrackingGeometryRecord > t_geometryH_
const edm::EDGetTokenT< MeasurementTrackerEvent > measurementTrackerTag_
std::vector< TrajectoryMeasurement > fastMeasurements(const TrajectoryStateOnSurface &stateOnThisDet, const TrajectoryStateOnSurface &tsos2, const Propagator &prop, const MeasurementEstimator &est) const
GraphDef * loadGraphDef(const std::string &pbFile)
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...
Geom::Phi< T > phi() const
tensorflow::Session * tf_session_HB_
const unsigned int maxHitlessSeedsMuS_
const edm::EDGetTokenT< reco::TrackCollection > src_
Labels for input collections.
const unsigned int maxHitlessSeedsIP_
std::unique_ptr< tensorflow::GraphDef > graphDef_HLIP_
const edm::ESGetToken< Chi2MeasurementEstimatorBase, TrackingComponentsRecord > t_estimatorH_
Tokens for ESHandle.
const double minEtaForTEC_
Minimum eta value to activate searching in the TEC.
Container for DNN outupts.
static std::string to_string(const XMLCh *ch)
static std::string const input
unsigned short found() const
Number of valid hits on track.
static PlanePointer build(Args &&... args)
GlobalPoint position() const
double pt() const
track transverse momentum
std::unique_ptr< Propagator > SetPropagationDirection(Propagator const &iprop, PropagationDirection dir)
Container::value_type value_type
const double fixedErrorRescalingForHitless_
Rescale L2 parameter uncertainties (fixed error vs pT, eta)
GlobalPoint globalPosition() const
const std::string dnnMetadataPath_
DNN metadata.
bool isThere(GeomDetEnumerators::SubDetector subdet) const
const std::string theCategory_
const edm::ESGetToken< Propagator, TrackingComponentsRecord > t_propagatorOppositeH_
const std::string estimatorName_
Estimator used to find dets and TrajectoryMeasurements.
const unsigned int maxHitSeeds_
Maximum number of hitbased seeds for each L2.
void run(Session *session, const NamedTensorList &inputs, const std::vector< std::string > &outputNames, std::vector< Tensor > *outputs, const thread::ThreadPoolOptions &threadPoolOptions)
bool closeSession(Session *&session)
const unsigned int maxHitDoubletSeeds_
Abs< T >::type abs(const T &t)
std::string dnnModelPath_
Settings for classifier.
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
double phi() const
azimuthal angle of momentum vector
#define DEFINE_FWK_MODULE(type)
TSGForOIDNN(const edm::ParameterSet &iConfig)
ESHandle< T > getHandle(const ESGetToken< T, R > &iToken) const
void initializeTensorflow() const
const bool useRegressor_
Whether to use DNN regressor (if false, will use classifier)
Session * createSession()
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)
Log< level::Info, false > LogInfo
double eta() const
pseudorapidity of momentum vector
const CurvilinearTrajectoryError & curvilinearError() const
const edm::ESGetToken< Propagator, TrackingComponentsRecord > t_SHPOpposite_
const double maxEtaForTOB_
Maximum eta value to activate searching in the TOB.
const AlgebraicSymMatrix55 & matrix() const
ROOT::Math::SMatrix< double, 5, 5, ROOT::Math::MatRepSym< double, 5 > > AlgebraicSymMatrix55
std::string dnnModelPath_HB_
Settings for regressor.
void add(std::string const &label, ParameterSetDescription const &psetDescription)
GlobalVector globalMomentum() const
std::unique_ptr< tensorflow::GraphDef > graphDef_
const edm::ESGetToken< MagneticField, IdealMagneticFieldRecord > t_magfieldH_
std::unique_ptr< tensorflow::GraphDef > graphDef_HB_
tensorflow::Session * tf_session_
FreeTrajectoryState const * freeState(bool withErrors=true) const
const edm::ESGetToken< Propagator, TrackingComponentsRecord > t_propagatorAlongH_
const unsigned int numOfLayersToTry_
How many layers to try.
const bool getStrategyFromDNN_
Get number of seeds to use from DNN output instead of "max..Seeds" parameters.
std::unique_ptr< tensorflow::GraphDef > graphDef_HLMuS_
const std::unique_ptr< TrajectoryStateUpdator > updator_
const edm::ESGetToken< TrackerGeometry, TrackerDigiGeometryRecord > t_tmpTkGeometryH_
portabletest::Matrix Matrix
Create L3MuonTrajectorySeeds from L2 Muons in an outside-in manner.
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.
void produce(edm::StreamID sid, edm::Event &iEvent, const edm::EventSetup &iSetup) const override
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.
const unsigned int maxHitlessSeeds_
Maximum number of hitless seeds for each L2.
tensorflow::Session * tf_session_HLIP_