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;
59 const std::unique_ptr<TrajectoryStateUpdator>
updator_;
123 unsigned int& hitlessSeedsMade,
124 unsigned int& numSeedsMade,
125 std::vector<TrajectorySeed>&
out)
const;
133 unsigned int& hitSeedsMade,
134 unsigned int& numSeedsMade,
136 unsigned int& layerCount,
137 std::vector<TrajectorySeed>&
out)
const;
146 unsigned int& hitDoubletSeedsMade,
147 unsigned int& numSeedsMade,
148 const unsigned int& maxHitDoubletSeeds,
149 unsigned int& layerCount,
150 std::vector<TrajectorySeed>&
out)
const;
166 const pt::ptree& metadata,
168 bool& dnnSuccess)
const;
171 void evaluateRegressor(
const std::unordered_map<std::string, float>& feature_map,
172 tensorflow::Session* session_HB,
173 const pt::ptree& metadata_HB,
174 tensorflow::Session* session_HLIP,
175 const pt::ptree& metadata_HLIP,
176 tensorflow::Session* session_HLMuS,
177 const pt::ptree& metadata_HLMuS,
179 bool& dnnSuccess)
const;
183 : src_(consumes(iConfig.getParameter<edm::
InputTag>(
"src"))),
193 measurementTrackerTag_(consumes(iConfig.getParameter<edm::
InputTag>(
"MeasurementTrackerEvent"))),
194 theCategory_(std::
string(
"Muon|RecoMuon|TSGForOIDNN")),
195 maxSeeds_(iConfig.getParameter<uint32_t>(
"maxSeeds")),
196 maxHitSeeds_(iConfig.getParameter<uint32_t>(
"maxHitSeeds")),
197 maxHitlessSeeds_(iConfig.getParameter<uint32_t>(
"maxHitlessSeeds")),
198 numOfLayersToTry_(iConfig.getParameter<int32_t>(
"layersToTry")),
199 numOfHitsToTry_(iConfig.getParameter<int32_t>(
"hitsToTry")),
200 fixedErrorRescalingForHitless_(iConfig.getParameter<double>(
"fixedErrorRescaleFactorForHitless")),
201 minEtaForTEC_(iConfig.getParameter<double>(
"minEtaForTEC")),
202 maxEtaForTOB_(iConfig.getParameter<double>(
"maxEtaForTOB")),
203 maxHitlessSeedsIP_(iConfig.getParameter<uint32_t>(
"maxHitlessSeedsIP")),
204 maxHitlessSeedsMuS_(iConfig.getParameter<uint32_t>(
"maxHitlessSeedsMuS")),
205 maxHitDoubletSeeds_(iConfig.getParameter<uint32_t>(
"maxHitDoubletSeeds")),
206 getStrategyFromDNN_(iConfig.getParameter<bool>(
"getStrategyFromDNN")),
207 useRegressor_(iConfig.getParameter<bool>(
"useRegressor")),
208 etaSplitForDnn_(iConfig.getParameter<double>(
"etaSplitForDnn")),
209 dnnMetadataPath_(iConfig.getParameter<std::
string>(
"dnnMetadataPath")) {
244 produces<std::vector<TrajectorySeed> >();
265 unsigned int numSeedsMade = 0;
266 unsigned int layerCount = 0;
267 unsigned int hitlessSeedsMadeIP = 0;
268 unsigned int hitlessSeedsMadeMuS = 0;
269 unsigned int hitSeedsMade = 0;
270 unsigned int hitDoubletSeedsMade = 0;
273 std::unordered_map<std::string, float> feature_map;
292 auto const& l2TrackCol = iEvent.
get(
src_);
295 std::unique_ptr<std::vector<TrajectorySeed> >
result(
new std::vector<TrajectorySeed>());
299 std::vector<BarrelDetLayer const*>
const& tob = gsTracker->tobLayers();
300 std::vector<ForwardDetLayer const*>
const& tecPositive =
302 std::vector<ForwardDetLayer const*>
const& tecNegative =
315 for (
auto const& l2 : l2TrackCol) {
317 std::vector<TrajectorySeed>
out;
318 LogTrace(
"TSGForOIDNN") <<
"TSGForOIDNN::produce: L2 muon pT, eta, phi --> " << l2.pt() <<
" , " << l2.eta()
319 <<
" , " << l2.phi();
323 dummyPlane->move(fts.
position() - dummyPlane->position());
325 LogTrace(
"TSGForOIDNN") <<
"TSGForOIDNN::produce: Created TSOSatIP: " << tsosAtIP;
329 LogTrace(
"TSGForOIDNN") <<
"TSGForOIDNN::produce: Created TSOSatMuonSystem: " << tsosAtMuonSystem;
332 <<
"TSGForOIDNN::produce: Check the error of the L2 parameter and use hit seeds if big errors";
342 double l2muonEta = l2.eta();
343 double absL2muonEta =
std::abs(l2muonEta);
355 bool dnnSuccess =
false;
374 const pt::ptree& tr = isBarrel ?
metadata_.get_child(
"barrel") :
metadata_.get_child(
"endcap");
382 maxHitDoubletSeeds = strPars.
nHBd;
383 maxHitlessSeedsIP = strPars.
nHLIP;
384 maxHitlessSeedsMuS = strPars.
nHLMuS;
385 errorSFHitless = strPars.
sf;
389 hitlessSeedsMadeIP = 0;
390 hitlessSeedsMadeMuS = 0;
392 hitDoubletSeedsMade = 0;
394 auto createSeeds = [&](
auto const&
layers) {
395 for (
auto const&
layer : boost::adaptors::reverse(
layers)) {
396 if (hitlessSeedsMadeIP < maxHitlessSeedsIP && numSeedsMade <
maxSeeds_)
399 *(propagatorAlong.get()),
406 if (outerTkStateInside.isValid() && outerTkStateOutside.
isValid() && hitlessSeedsMadeMuS < maxHitlessSeedsMuS &&
410 *(propagatorOpposite.get()),
417 if (hitSeedsMade < maxHitSeeds && numSeedsMade <
maxSeeds_)
420 *(propagatorAlong.get()),
429 if (hitDoubletSeedsMade < maxHitDoubletSeeds && numSeedsMade <
maxSeeds_)
432 *(propagatorAlong.get()),
448 LogTrace(
"TSGForOIDNN") <<
"TSGForOIDNN:::produce: NumSeedsMade = " << numSeedsMade
449 <<
" , layerCount = " << layerCount;
455 hitlessSeedsMadeIP = 0;
456 hitlessSeedsMadeMuS = 0;
458 hitDoubletSeedsMade = 0;
464 createSeeds(tecPositive);
465 LogTrace(
"TSGForOIDNN") <<
"TSGForOIDNN:::produce: NumSeedsMade = " << numSeedsMade
466 <<
" , layerCount = " << layerCount;
472 createSeeds(tecNegative);
473 LogTrace(
"TSGForOIDNN") <<
"TSGForOIDNN:::produce: NumSeedsMade = " << numSeedsMade
474 <<
" , layerCount = " << layerCount;
477 for (std::vector<TrajectorySeed>::iterator it = out.begin(); it != out.end(); ++it) {
478 result->push_back(*it);
496 unsigned int& hitlessSeedsMade,
497 unsigned int& numSeedsMade,
498 std::vector<TrajectorySeed>&
out)
const {
500 LogTrace(
"TSGForOIDNN") <<
"TSGForOIDNN::makeSeedsWithoutHits: Start hitless";
501 std::vector<GeometricSearchDet::DetWithState> dets;
504 auto const& detOnLayer = dets.front().first;
505 auto& tsosOnLayer = dets.front().second;
506 LogTrace(
"TSGForOIDNN") <<
"TSGForOIDNN::makeSeedsWithoutHits: tsosOnLayer " << tsosOnLayer;
507 if (!tsosOnLayer.isValid()) {
510 tsosOnLayer.rescaleError(errorSF);
515 LogTrace(
"TSGForOIDNN") <<
"TSGForOIDNN::makeSeedsWithoutHits: TSOS (Hitless) done ";
530 unsigned int& hitSeedsMade,
531 unsigned int& numSeedsMade,
533 unsigned int& layerCount,
534 std::vector<TrajectorySeed>&
out)
const {
540 std::vector<GeometricSearchDet::DetWithState> dets;
544 LogTrace(
"TSGForOIDNN") <<
"TSGForOIDNN::makeSeedsFromHits: Find measurements on each detWithState " << dets.size();
545 std::vector<TrajectoryMeasurement> meas;
546 for (
auto const& detI : dets) {
550 if (!detI.second.isValid())
553 std::vector<TrajectoryMeasurement> mymeas =
555 for (
auto const& measurement : mymeas) {
556 if (measurement.recHit()->isValid())
557 meas.push_back(measurement);
562 LogTrace(
"TSGForOIDNN") <<
"TSGForOIDNN::makeSeedsFromHits: Update TSOS using TMs after sorting, then create "
563 "Trajectory Seed, number of TM = "
567 unsigned int found = 0;
568 for (
auto const& measurement : meas) {
569 if (hitSeedsMade >= maxHitSeeds)
572 LogTrace(
"TSGForOIDNN") <<
"TSGForOIDNN::makeSeedsFromHits: TSOS for TM " <<
found;
577 seedHits.
push_back(*measurement.recHit()->hit());
580 LogTrace(
"TSGForOIDNN") <<
"TSGForOIDNN::makeSeedsFromHits: Number of seedHits: " << seedHits.
size();
603 unsigned int& hitDoubletSeedsMade,
604 unsigned int& numSeedsMade,
605 const unsigned int& maxHitDoubletSeeds,
606 unsigned int& layerCount,
607 std::vector<TrajectorySeed>&
out)
const {
614 int max_addtnl_layers = 1;
622 std::vector<GeometricSearchDet::DetWithState> dets;
625 LogTrace(
"TSGForOIDNN") <<
"TSGForOIDNN::makeSeedsFromHitDoublets: Find measurements on each detWithState "
627 std::vector<TrajectoryMeasurement> meas;
630 for (
auto const& detI : dets) {
635 if (!detI.second.isValid())
639 std::vector<TrajectoryMeasurement> mymeas = det.
fastMeasurements(detI.second, onLayer, propagatorAlong, estimator);
642 for (
auto const& measurement : mymeas) {
643 if (measurement.recHit()->isValid())
644 meas.push_back(measurement);
648 LogTrace(
"TSGForOIDNN") <<
"TSGForOIDNN::makeSeedsFromHitDoublets: Update TSOS using TMs after sorting, then create "
649 "Trajectory Seed, number of TM = "
655 unsigned int found = 0;
660 for (
auto const& measurement : meas) {
661 if (hitDoubletSeedsMade >= maxHitDoubletSeeds)
669 LogTrace(
"TSGForOIDNN") <<
"TSGForOIDNN::makeSeedsFromHitDoublets: TSOS for TM " <<
found;
676 seedHits.
push_back(*measurement.recHit()->hit());
684 int addtnl_layers_scanned = 0;
685 int found_compatible_on_next_layer = 0;
692 for (
auto compLayer : compLayers) {
695 if (addtnl_layers_scanned >= max_addtnl_layers)
697 if (found_compatible_on_next_layer > 0)
701 std::vector<GeometricSearchDet::DetWithState> dets_next;
704 compLayer->compatibleDetsV(onLayer_next, propagatorAlong, estimator, dets_next);
707 std::vector<TrajectoryMeasurement> meas_next;
710 for (
auto const& detI_next : dets_next) {
715 if (!detI_next.second.isValid())
719 std::vector<TrajectoryMeasurement> mymeas_next =
720 det.
fastMeasurements(detI_next.second, onLayer_next, propagatorAlong, estimator);
722 for (
auto const& mea_next : mymeas_next) {
724 if (mea_next.recHit()->isValid())
725 meas_next.push_back(mea_next);
734 for (
auto const& mea_next : meas_next) {
735 if (nmeas >= max_meas)
739 updatedTSOS_next =
updator_->update(mea_next.forwardPredictedState(), *mea_next.recHit());
741 if (not updatedTSOS_next.
isValid())
746 seedHits.
push_back(*mea_next.recHit()->hit());
747 det_id = mea_next.recHit()->geographicalId().rawId();
749 found_compatible_on_next_layer++;
753 addtnl_layers_scanned++;
757 if (found_compatible_on_next_layer == 0)
765 LogTrace(
"TSGForOIDNN") <<
"TSGForOIDNN::makeSeedsFromHitDoublets: Number of seedHits: " << seedHits.
size();
770 hitDoubletSeedsMade++;
788 the_map[
"pt"] = l2.
pt();
789 the_map[
"eta"] = l2.
eta();
790 the_map[
"phi"] = l2.
phi();
791 the_map[
"validHits"] = l2.
found();
799 the_map[
"err0_IP"] =
sqrt(matrix_IP[0][0]);
800 the_map[
"err1_IP"] =
sqrt(matrix_IP[1][1]);
801 the_map[
"err2_IP"] =
sqrt(matrix_IP[2][2]);
802 the_map[
"err3_IP"] =
sqrt(matrix_IP[3][3]);
803 the_map[
"err4_IP"] =
sqrt(matrix_IP[4][4]);
804 the_map[
"tsos_IP_valid"] = 1.0;
806 the_map[
"tsos_IP_eta"] = -999;
807 the_map[
"tsos_IP_phi"] = -999;
808 the_map[
"tsos_IP_pt"] = -999;
809 the_map[
"tsos_IP_pt_eta"] = -999;
810 the_map[
"tsos_IP_pt_phi"] = -999;
811 the_map[
"err0_IP"] = -999;
812 the_map[
"err1_IP"] = -999;
813 the_map[
"err2_IP"] = -999;
814 the_map[
"err3_IP"] = -999;
815 the_map[
"err4_IP"] = -999;
816 the_map[
"tsos_IP_valid"] = 0.0;
825 the_map[
"err0_MuS"] =
sqrt(matrix_MuS[0][0]);
826 the_map[
"err1_MuS"] =
sqrt(matrix_MuS[1][1]);
827 the_map[
"err2_MuS"] =
sqrt(matrix_MuS[2][2]);
828 the_map[
"err3_MuS"] =
sqrt(matrix_MuS[3][3]);
829 the_map[
"err4_MuS"] =
sqrt(matrix_MuS[4][4]);
830 the_map[
"tsos_MuS_valid"] = 1.0;
832 the_map[
"tsos_MuS_eta"] = -999;
833 the_map[
"tsos_MuS_phi"] = -999;
834 the_map[
"tsos_MuS_pt"] = -999;
835 the_map[
"tsos_MuS_pt_eta"] = -999;
836 the_map[
"tsos_MuS_pt_phi"] = -999;
837 the_map[
"err0_MuS"] = -999;
838 the_map[
"err1_MuS"] = -999;
839 the_map[
"err2_MuS"] = -999;
840 the_map[
"err3_MuS"] = -999;
841 the_map[
"err4_MuS"] = -999;
842 the_map[
"tsos_MuS_valid"] = 0.0;
851 const pt::ptree& metadata,
853 bool& dnnSuccess)
const {
854 int n_features = metadata.get<
int>(
"n_features", 0);
857 tensorflow::Tensor
input(tensorflow::DT_FLOAT, {1, n_features});
861 fname = feature.second.data();
862 if (feature_map.find(fname) == feature_map.end()) {
866 input.matrix<
float>()(0, i_feature) = float(feature_map.at(fname));
872 std::vector<tensorflow::Tensor> outputs;
879 tensorflow::Tensor out_tensor = outputs[0];
885 for (
long long int i = 0;
i < out_tensor.dim_size(1);
i++) {
886 float ith_output = dnn_outputs(0,
i);
887 if (ith_output > out_max) {
889 out_max = ith_output;
895 out.
nHBd = metadata.get<
int>(label +
".nHBd");
896 out.
nHLIP = metadata.get<
int>(label +
".nHLIP");
897 out.
nHLMuS = metadata.get<
int>(label +
".nHLMuS");
898 out.
sf = metadata.get<
int>(label +
".SF");
907 tensorflow::Session* session_HB,
908 const pt::ptree& metadata_HB,
909 tensorflow::Session* session_HLIP,
910 const pt::ptree& metadata_HLIP,
911 tensorflow::Session* session_HLMuS,
912 const pt::ptree& metadata_HLMuS,
914 bool& dnnSuccess)
const {
915 int n_features = metadata_HB.get<
int>(
"n_features", 0);
918 tensorflow::Tensor
input(tensorflow::DT_FLOAT, {1, n_features});
922 fname = feature.second.data();
923 if (feature_map.find(fname) == feature_map.end()) {
927 input.matrix<
float>()(0, i_feature) = float(feature_map.at(fname));
933 std::vector<tensorflow::Tensor> outputs_HB;
938 tensorflow::Tensor out_tensor_HB = outputs_HB[0];
942 std::vector<tensorflow::Tensor> outputs_HLIP;
947 tensorflow::Tensor out_tensor_HLIP = outputs_HLIP[0];
951 std::vector<tensorflow::Tensor> outputs_HLMuS;
955 tensorflow::run(session_HLMuS, {{inputLayer_HLMuS,
input}}, {outputLayer_HLMuS}, &outputs_HLMuS);
956 tensorflow::Tensor out_tensor_HLMuS = outputs_HLMuS[0];
960 out.
nHBd = round(dnn_outputs_HB(0, 0));
961 out.
nHLIP = round(dnn_outputs_HLIP(0, 0));
962 out.
sf = round(dnn_outputs_HLIP(0, 1));
963 out.
nHLMuS = round(dnn_outputs_HLMuS(0, 0));
966 out.
nHBd = std::clamp(out.
nHBd, 0, 10);
993 desc.
add<
int>(
"layersToTry", 2);
994 desc.
add<
double>(
"fixedErrorRescaleFactorForHitless", 2.0);
995 desc.
add<
int>(
"hitsToTry", 1);
997 desc.
add<
std::string>(
"estimator",
"hltESPChi2MeasurementEstimator100");
998 desc.
add<
double>(
"maxEtaForTOB", 1.8);
999 desc.
add<
double>(
"minEtaForTEC", 0.7);
1001 desc.
add<
unsigned int>(
"maxSeeds", 20);
1002 desc.
add<
unsigned int>(
"maxHitlessSeeds", 5);
1003 desc.
add<
unsigned int>(
"maxHitSeeds", 1);
1004 desc.
add<
std::string>(
"propagatorName",
"PropagatorWithMaterialParabolicMf");
1005 desc.
add<
unsigned int>(
"maxHitlessSeedsIP", 5);
1006 desc.
add<
unsigned int>(
"maxHitlessSeedsMuS", 0);
1007 desc.
add<
unsigned int>(
"maxHitDoubletSeeds", 0);
1008 desc.
add<
bool>(
"getStrategyFromDNN",
false);
1009 desc.
add<
bool>(
"useRegressor",
false);
1010 desc.
add<
double>(
"etaSplitForDnn", 1.0);
1012 descriptions.
add(
"tsgForOIDNN", desc);
Session * createSession(SessionOptions &sessionOptions)
const unsigned int numOfHitsToTry_
How many hits to try per layer.
MeasurementDetWithData idToDet(const DetId &id) const
Previous MeasurementDetSystem interface.
std::string dnnModelPath_HLIP_
const unsigned int maxSeeds_
Maximum number of seeds for each L2.
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
std::vector< LayerSetAndLayers > layers(const SeedingLayerSetsHits &sets)
std::string dnnModelPath_HLMuS_
tensorflow::Session * tf_session_HLMuS_
ParameterDescriptionBase * addUntracked(U const &iLabel, T const &value)
const edm::ESGetToken< NavigationSchool, NavigationSchoolRecord > t_navSchool_
const edm::ESGetToken< GlobalTrackingGeometry, GlobalTrackingGeometryRecord > t_geometryH_
const edm::EDGetTokenT< MeasurementTrackerEvent > measurementTrackerTag_
#define DEFINE_FWK_MODULE(type)
GraphDef * loadGraphDef(const std::string &pbFile)
std::unique_ptr< tensorflow::GraphDef > graphDef_endcap_
tensorflow::Session * tf_session_HB_
const CurvilinearTrajectoryError & curvilinearError() const
const unsigned int maxHitlessSeedsMuS_
const edm::EDGetTokenT< reco::TrackCollection > src_
Labels for input collections.
Geom::Phi< T > phi() const
const unsigned int maxHitlessSeedsIP_
std::unique_ptr< tensorflow::GraphDef > graphDef_HLIP_
GlobalPoint globalPosition() const
const edm::ESGetToken< Chi2MeasurementEstimatorBase, TrackingComponentsRecord > t_estimatorH_
Tokens for ESHandle.
double phi() const
azimuthal angle of momentum vector
tensorflow::Session * tf_session_endcap_
const double minEtaForTEC_
Minimum eta value to activate searching in the TEC.
Container for DNN outupts.
constexpr std::array< uint8_t, layerIndexSize > layer
static std::string const input
bool isThere(GeomDetEnumerators::SubDetector subdet) const
bool getData(T &iHolder) const
std::unique_ptr< Propagator > SetPropagationDirection(Propagator const &iprop, PropagationDirection dir)
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.
Container::value_type value_type
const double fixedErrorRescalingForHitless_
Rescale L2 parameter uncertainties (fixed error vs pT, eta)
double eta() const
pseudorapidity of momentum vector
const std::string dnnMetadataPath_
DNN metadata.
const std::string theCategory_
std::vector< TrajectoryMeasurement > fastMeasurements(const TrajectoryStateOnSurface &stateOnThisDet, const TrajectoryStateOnSurface &tsos2, const Propagator &prop, const MeasurementEstimator &est) const
const edm::ESGetToken< Propagator, TrackingComponentsRecord > t_propagatorOppositeH_
double pt() const
track transverse momentum
const std::string estimatorName_
Estimator used to find dets and TrajectoryMeasurements.
static PlanePointer build(Args &&...args)
FreeTrajectoryState const * freeState(bool withErrors=true) const
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)
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
bool get(ProductID const &oid, Handle< PROD > &result) const
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.
TSGForOIDNN(const edm::ParameterSet &iConfig)
const double etaSplitForDnn_
Settings for classifier.
ParameterDescriptionBase * add(U const &iLabel, T const &value)
const bool useRegressor_
Whether to use DNN regressor (if false, will use classifier)
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
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.
GlobalPoint position() const
void setLogging(const std::string &level="3")
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 edm::ESGetToken< Propagator, TrackingComponentsRecord > t_SHPOpposite_
const double maxEtaForTOB_
Maximum eta value to activate searching in the TOB.
std::vector< const DetLayer * > nextLayers(const DetLayer &detLayer, Args &&...args) 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)
const edm::ESGetToken< MagneticField, IdealMagneticFieldRecord > t_magfieldH_
std::string dnnModelPath_barrel_
std::unique_ptr< tensorflow::GraphDef > graphDef_HB_
const AlgebraicSymMatrix55 & matrix() const
GlobalVector globalMomentum() const
unsigned short found() const
Number of valid hits on track.
std::string fullPath() 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_
ESHandle< T > getHandle(const ESGetToken< T, R > &iToken) const
std::unique_ptr< tensorflow::GraphDef > graphDef_barrel_
std::string dnnModelPath_endcap_
Create L3MuonTrajectorySeeds from L2 Muons in an outside-in manner.
virtual void compatibleDetsV(const TrajectoryStateOnSurface &startingState, const Propagator &prop, const MeasurementEstimator &est, std::vector< DetWithState > &result) const
void produce(edm::StreamID sid, edm::Event &iEvent, const edm::EventSetup &iSetup) const override
const unsigned int maxHitlessSeeds_
Maximum number of hitless seeds for each L2.
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...
tensorflow::Session * tf_session_barrel_
tensorflow::Session * tf_session_HLIP_