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")) {
237 produces<std::vector<TrajectorySeed> >();
255 std::unordered_map<std::string, float> dummyFeatureMap() {
256 std::unordered_map<std::string, float> the_map;
258 the_map[
"eta"] = 0.5;
259 the_map[
"phi"] = 1.0;
260 the_map[
"validHits"] = 0.;
261 the_map[
"tsos_IP_eta"] = -999;
262 the_map[
"tsos_IP_phi"] = -999;
263 the_map[
"tsos_IP_pt"] = -999;
264 the_map[
"tsos_IP_pt_eta"] = -999;
265 the_map[
"tsos_IP_pt_phi"] = -999;
266 the_map[
"err0_IP"] = -999;
267 the_map[
"err1_IP"] = -999;
268 the_map[
"err2_IP"] = -999;
269 the_map[
"err3_IP"] = -999;
270 the_map[
"err4_IP"] = -999;
271 the_map[
"tsos_IP_valid"] = 0.0;
272 the_map[
"tsos_MuS_eta"] = -999;
273 the_map[
"tsos_MuS_phi"] = -999;
274 the_map[
"tsos_MuS_pt"] = -999;
275 the_map[
"tsos_MuS_pt_eta"] = -999;
276 the_map[
"tsos_MuS_pt_phi"] = -999;
277 the_map[
"err0_MuS"] = -999;
278 the_map[
"err1_MuS"] = -999;
279 the_map[
"err2_MuS"] = -999;
280 the_map[
"err3_MuS"] = -999;
281 the_map[
"err4_MuS"] = -999;
282 the_map[
"tsos_MuS_valid"] = 0.0;
291 bool dnnSuccess =
false;
301 unsigned int numSeedsMade = 0;
302 unsigned int layerCount = 0;
303 unsigned int hitlessSeedsMadeIP = 0;
304 unsigned int hitlessSeedsMadeMuS = 0;
305 unsigned int hitSeedsMade = 0;
306 unsigned int hitDoubletSeedsMade = 0;
309 std::unordered_map<std::string, float> feature_map;
331 std::unique_ptr<std::vector<TrajectorySeed> >
result(
new std::vector<TrajectorySeed>());
335 std::vector<BarrelDetLayer const*>
const& tob = gsTracker->tobLayers();
336 std::vector<ForwardDetLayer const*>
const& tecPositive =
338 std::vector<ForwardDetLayer const*>
const& tecNegative =
351 for (
auto const& l2 : l2TrackCol) {
353 std::vector<TrajectorySeed>
out;
354 LogTrace(
"TSGForOIDNN") <<
"TSGForOIDNN::produce: L2 muon pT, eta, phi --> " << l2.pt() <<
" , " << l2.eta()
355 <<
" , " << l2.phi();
359 dummyPlane->move(fts.
position() - dummyPlane->position());
361 LogTrace(
"TSGForOIDNN") <<
"TSGForOIDNN::produce: Created TSOSatIP: " << tsosAtIP;
365 LogTrace(
"TSGForOIDNN") <<
"TSGForOIDNN::produce: Created TSOSatMuonSystem: " << tsosAtMuonSystem;
368 <<
"TSGForOIDNN::produce: Check the error of the L2 parameter and use hit seeds if big errors";
391 bool dnnSuccess =
false;
418 errorSFHitless = strPars.
sf;
422 hitlessSeedsMadeIP = 0;
423 hitlessSeedsMadeMuS = 0;
425 hitDoubletSeedsMade = 0;
427 auto createSeeds = [&](
auto const&
layers) {
481 LogTrace(
"TSGForOIDNN") <<
"TSGForOIDNN:::produce: NumSeedsMade = " << numSeedsMade
482 <<
" , layerCount = " << layerCount;
488 hitlessSeedsMadeIP = 0;
489 hitlessSeedsMadeMuS = 0;
491 hitDoubletSeedsMade = 0;
497 createSeeds(tecPositive);
498 LogTrace(
"TSGForOIDNN") <<
"TSGForOIDNN:::produce: NumSeedsMade = " << numSeedsMade
499 <<
" , layerCount = " << layerCount;
505 createSeeds(tecNegative);
506 LogTrace(
"TSGForOIDNN") <<
"TSGForOIDNN:::produce: NumSeedsMade = " << numSeedsMade
507 <<
" , layerCount = " << layerCount;
510 for (std::vector<TrajectorySeed>::iterator
it =
out.begin();
it !=
out.end(); ++
it) {
529 unsigned int& hitlessSeedsMade,
530 unsigned int& numSeedsMade,
531 std::vector<TrajectorySeed>&
out)
const {
533 LogTrace(
"TSGForOIDNN") <<
"TSGForOIDNN::makeSeedsWithoutHits: Start hitless";
534 std::vector<GeometricSearchDet::DetWithState> dets;
537 auto const& detOnLayer = dets.front().first;
538 auto& tsosOnLayer = dets.front().second;
539 LogTrace(
"TSGForOIDNN") <<
"TSGForOIDNN::makeSeedsWithoutHits: tsosOnLayer " << tsosOnLayer;
540 if (!tsosOnLayer.isValid()) {
543 tsosOnLayer.rescaleError(errorSF);
548 LogTrace(
"TSGForOIDNN") <<
"TSGForOIDNN::makeSeedsWithoutHits: TSOS (Hitless) done ";
563 unsigned int& hitSeedsMade,
564 unsigned int& numSeedsMade,
566 unsigned int& layerCount,
567 std::vector<TrajectorySeed>&
out)
const {
573 std::vector<GeometricSearchDet::DetWithState> dets;
577 LogTrace(
"TSGForOIDNN") <<
"TSGForOIDNN::makeSeedsFromHits: Find measurements on each detWithState " << dets.size();
578 std::vector<TrajectoryMeasurement> meas;
579 for (
auto const& detI : dets) {
583 if (!detI.second.isValid())
586 std::vector<TrajectoryMeasurement> mymeas =
588 for (
auto const& measurement : mymeas) {
589 if (measurement.recHit()->isValid())
590 meas.push_back(measurement);
595 LogTrace(
"TSGForOIDNN") <<
"TSGForOIDNN::makeSeedsFromHits: Update TSOS using TMs after sorting, then create " 596 "Trajectory Seed, number of TM = " 600 unsigned int found = 0;
601 for (
auto const& measurement : meas) {
605 LogTrace(
"TSGForOIDNN") <<
"TSGForOIDNN::makeSeedsFromHits: TSOS for TM " <<
found;
610 seedHits.
push_back(*measurement.recHit()->hit());
613 LogTrace(
"TSGForOIDNN") <<
"TSGForOIDNN::makeSeedsFromHits: Number of seedHits: " << seedHits.
size();
636 unsigned int& hitDoubletSeedsMade,
637 unsigned int& numSeedsMade,
639 unsigned int& layerCount,
640 std::vector<TrajectorySeed>&
out)
const {
647 int max_addtnl_layers = 1;
655 std::vector<GeometricSearchDet::DetWithState> dets;
658 LogTrace(
"TSGForOIDNN") <<
"TSGForOIDNN::makeSeedsFromHitDoublets: Find measurements on each detWithState " 660 std::vector<TrajectoryMeasurement> meas;
663 for (
auto const& detI : dets) {
668 if (!detI.second.isValid())
675 for (
auto const& measurement : mymeas) {
676 if (measurement.recHit()->isValid())
677 meas.push_back(measurement);
681 LogTrace(
"TSGForOIDNN") <<
"TSGForOIDNN::makeSeedsFromHitDoublets: Update TSOS using TMs after sorting, then create " 682 "Trajectory Seed, number of TM = " 688 unsigned int found = 0;
692 for (
auto const& measurement : meas) {
699 LogTrace(
"TSGForOIDNN") <<
"TSGForOIDNN::makeSeedsFromHitDoublets: TSOS for TM " <<
found;
706 seedHits.
push_back(*measurement.recHit()->hit());
714 int addtnl_layers_scanned = 0;
715 int found_compatible_on_next_layer = 0;
722 for (
auto compLayer : compLayers) {
725 if (addtnl_layers_scanned >= max_addtnl_layers)
727 if (found_compatible_on_next_layer > 0)
731 std::vector<GeometricSearchDet::DetWithState> dets_next;
737 std::vector<TrajectoryMeasurement> meas_next;
740 for (
auto const& detI_next : dets_next) {
745 if (!detI_next.second.isValid())
749 std::vector<TrajectoryMeasurement> mymeas_next =
752 for (
auto const& mea_next : mymeas_next) {
754 if (mea_next.recHit()->isValid())
755 meas_next.push_back(mea_next);
764 for (
auto const& mea_next : meas_next) {
765 if (nmeas >= max_meas)
769 updatedTSOS_next =
updator_->update(mea_next.forwardPredictedState(), *mea_next.recHit());
771 if (not updatedTSOS_next.
isValid())
776 seedHits.
push_back(*mea_next.recHit()->hit());
777 det_id = mea_next.recHit()->geographicalId().rawId();
779 found_compatible_on_next_layer++;
783 addtnl_layers_scanned++;
787 if (found_compatible_on_next_layer == 0)
795 LogTrace(
"TSGForOIDNN") <<
"TSGForOIDNN::makeSeedsFromHitDoublets: Number of seedHits: " << seedHits.
size();
800 hitDoubletSeedsMade++;
818 the_map[
"pt"] = l2.
pt();
819 the_map[
"eta"] = l2.
eta();
820 the_map[
"phi"] = l2.
phi();
821 the_map[
"validHits"] = l2.
found();
829 the_map[
"err0_IP"] =
sqrt(matrix_IP[0][0]);
830 the_map[
"err1_IP"] =
sqrt(matrix_IP[1][1]);
831 the_map[
"err2_IP"] =
sqrt(matrix_IP[2][2]);
832 the_map[
"err3_IP"] =
sqrt(matrix_IP[3][3]);
833 the_map[
"err4_IP"] =
sqrt(matrix_IP[4][4]);
834 the_map[
"tsos_IP_valid"] = 1.0;
836 the_map[
"tsos_IP_eta"] = -999;
837 the_map[
"tsos_IP_phi"] = -999;
838 the_map[
"tsos_IP_pt"] = -999;
839 the_map[
"tsos_IP_pt_eta"] = -999;
840 the_map[
"tsos_IP_pt_phi"] = -999;
841 the_map[
"err0_IP"] = -999;
842 the_map[
"err1_IP"] = -999;
843 the_map[
"err2_IP"] = -999;
844 the_map[
"err3_IP"] = -999;
845 the_map[
"err4_IP"] = -999;
846 the_map[
"tsos_IP_valid"] = 0.0;
855 the_map[
"err0_MuS"] =
sqrt(matrix_MuS[0][0]);
856 the_map[
"err1_MuS"] =
sqrt(matrix_MuS[1][1]);
857 the_map[
"err2_MuS"] =
sqrt(matrix_MuS[2][2]);
858 the_map[
"err3_MuS"] =
sqrt(matrix_MuS[3][3]);
859 the_map[
"err4_MuS"] =
sqrt(matrix_MuS[4][4]);
860 the_map[
"tsos_MuS_valid"] = 1.0;
862 the_map[
"tsos_MuS_eta"] = -999;
863 the_map[
"tsos_MuS_phi"] = -999;
864 the_map[
"tsos_MuS_pt"] = -999;
865 the_map[
"tsos_MuS_pt_eta"] = -999;
866 the_map[
"tsos_MuS_pt_phi"] = -999;
867 the_map[
"err0_MuS"] = -999;
868 the_map[
"err1_MuS"] = -999;
869 the_map[
"err2_MuS"] = -999;
870 the_map[
"err3_MuS"] = -999;
871 the_map[
"err4_MuS"] = -999;
872 the_map[
"tsos_MuS_valid"] = 0.0;
880 tensorflow::Session* session,
883 bool& dnnSuccess)
const {
884 int n_features =
metadata.get<
int>(
"n_features", 0);
887 tensorflow::Tensor
input(tensorflow::DT_FLOAT, {1, n_features});
891 fname = feature.second.data();
892 if (feature_map.find(
fname) == feature_map.end()) {
902 std::vector<tensorflow::Tensor>
outputs;
909 tensorflow::Tensor out_tensor =
outputs[0];
915 for (
long long int i = 0;
i < out_tensor.dim_size(1);
i++) {
916 float ith_output = dnn_outputs(0,
i);
917 if (ith_output > out_max) {
919 out_max = ith_output;
937 tensorflow::Session* session_HB,
938 const pt::ptree& metadata_HB,
939 tensorflow::Session* session_HLIP,
940 const pt::ptree& metadata_HLIP,
941 tensorflow::Session* session_HLMuS,
942 const pt::ptree& metadata_HLMuS,
944 bool& dnnSuccess)
const {
945 int n_features = metadata_HB.get<
int>(
"n_features", 0);
948 tensorflow::Tensor
input(tensorflow::DT_FLOAT, {1, n_features});
952 fname = feature.second.data();
953 if (feature_map.find(
fname) == feature_map.end()) {
963 std::vector<tensorflow::Tensor> outputs_HB;
968 tensorflow::Tensor out_tensor_HB = outputs_HB[0];
972 std::vector<tensorflow::Tensor> outputs_HLIP;
977 tensorflow::Tensor out_tensor_HLIP = outputs_HLIP[0];
981 std::vector<tensorflow::Tensor> outputs_HLMuS;
985 tensorflow::run(session_HLMuS, {{inputLayer_HLMuS,
input}}, {outputLayer_HLMuS}, &outputs_HLMuS);
986 tensorflow::Tensor out_tensor_HLMuS = outputs_HLMuS[0];
990 out.nHBd = round(dnn_outputs_HB(0, 0));
991 out.nHLIP = round(dnn_outputs_HLIP(0, 0));
992 out.sf = round(dnn_outputs_HLIP(0, 1));
993 out.nHLMuS = round(dnn_outputs_HLMuS(0, 0));
996 out.nHBd = std::clamp(
out.nHBd, 0, 10);
997 out.nHLIP = std::clamp(
out.nHLIP, 0, 10);
998 out.nHLMuS = std::clamp(
out.nHLMuS, 0, 10);
1001 if (
out.nHBd == 0 &&
out.nHLIP == 0 &&
out.nHLMuS == 0) {
1023 desc.add<
int>(
"layersToTry", 2);
1024 desc.add<
double>(
"fixedErrorRescaleFactorForHitless", 2.0);
1025 desc.add<
int>(
"hitsToTry", 1);
1027 desc.add<
std::string>(
"estimator",
"hltESPChi2MeasurementEstimator100");
1028 desc.add<
double>(
"maxEtaForTOB", 1.8);
1029 desc.add<
double>(
"minEtaForTEC", 0.7);
1030 desc.addUntracked<
bool>(
"debug",
false);
1031 desc.add<
unsigned int>(
"maxSeeds", 20);
1032 desc.add<
unsigned int>(
"maxHitlessSeeds", 5);
1033 desc.add<
unsigned int>(
"maxHitSeeds", 1);
1034 desc.add<
std::string>(
"propagatorName",
"PropagatorWithMaterialParabolicMf");
1035 desc.add<
unsigned int>(
"maxHitlessSeedsIP", 5);
1036 desc.add<
unsigned int>(
"maxHitlessSeedsMuS", 0);
1037 desc.add<
unsigned int>(
"maxHitDoubletSeeds", 0);
1038 desc.add<
bool>(
"getStrategyFromDNN",
false);
1039 desc.add<
bool>(
"useRegressor",
false);
1041 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
void setLogging(const std::string &level="3")
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_