CMS 3D CMS Logo

TrackExtenderWithMTD.cc
Go to the documentation of this file.
7 
10 
13 
15 
17 
22 
27 
29 
33 
35 
38 
41 
43 
46 
47 #include <sstream>
48 
50 
53 
56 #include "CLHEP/Units/GlobalPhysicalConstants.h"
58 
61 
62 using namespace std;
63 using namespace edm;
64 using namespace reco;
65 
66 namespace {
67  class MTDHitMatchingInfo {
68  public:
69  MTDHitMatchingInfo() {
70  hit = nullptr;
73  }
74 
75  //Operator used to sort the hits while performing the matching step at the MTD
76  inline bool operator<(const MTDHitMatchingInfo& m2) const {
77  //only for good matching in time use estChi2, otherwise use mostly time compatibility
78  constexpr double chi2_cut = 10.;
79  constexpr double low_weight = 3.;
80  constexpr double high_weight = 8.;
81  if (timeChi2 < chi2_cut && m2.timeChi2 < chi2_cut)
82  return chi2(low_weight) < m2.chi2(low_weight);
83  else
84  return chi2(high_weight) < m2.chi2(high_weight);
85  }
86 
87  inline double chi2(double timeWeight = 1.) const { return estChi2 + timeWeight * timeChi2; }
88 
89  const MTDTrackingRecHit* hit;
90  double estChi2;
91  double timeChi2;
92  };
93 
94  struct TrackTofPidInfo {
95  double tmtd;
96  double tmtderror;
97  double pathlength;
98 
99  double betaerror;
100 
101  double dt;
102  double dterror;
103  double dtchi2;
104 
105  double dt_best;
106  double dterror_best;
107  double dtchi2_best;
108 
109  double gammasq_pi;
110  double beta_pi;
111  double dt_pi;
112 
113  double gammasq_k;
114  double beta_k;
115  double dt_k;
116 
117  double gammasq_p;
118  double beta_p;
119  double dt_p;
120 
121  double prob_pi;
122  double prob_k;
123  double prob_p;
124  };
125 
126  const TrackTofPidInfo computeTrackTofPidInfo(double magp2,
127  double length,
128  double t_mtd,
129  double t_mtderr,
130  double t_vtx,
131  double t_vtx_err,
132  bool addPIDError = true) {
133  constexpr double m_pi = 0.13957018;
134  constexpr double m_pi_inv2 = 1.0 / m_pi / m_pi;
135  constexpr double m_k = 0.493677;
136  constexpr double m_k_inv2 = 1.0 / m_k / m_k;
137  constexpr double m_p = 0.9382720813;
138  constexpr double m_p_inv2 = 1.0 / m_p / m_p;
139  constexpr double c_cm_ns = geant_units::operators::convertMmToCm(CLHEP::c_light); // [mm/ns] -> [cm/ns]
140  constexpr double c_inv = 1.0 / c_cm_ns;
141 
142  TrackTofPidInfo tofpid;
143 
144  tofpid.tmtd = t_mtd;
145  tofpid.tmtderror = t_mtderr;
146  tofpid.pathlength = length;
147 
148  tofpid.gammasq_pi = 1. + magp2 * m_pi_inv2;
149  tofpid.beta_pi = std::sqrt(1. - 1. / tofpid.gammasq_pi);
150  tofpid.dt_pi = tofpid.pathlength / tofpid.beta_pi * c_inv;
151 
152  tofpid.gammasq_k = 1. + magp2 * m_k_inv2;
153  tofpid.beta_k = std::sqrt(1. - 1. / tofpid.gammasq_k);
154  tofpid.dt_k = tofpid.pathlength / tofpid.beta_k * c_inv;
155 
156  tofpid.gammasq_p = 1. + magp2 * m_p_inv2;
157  tofpid.beta_p = std::sqrt(1. - 1. / tofpid.gammasq_p);
158  tofpid.dt_p = tofpid.pathlength / tofpid.beta_p * c_inv;
159 
160  tofpid.dt = tofpid.tmtd - tofpid.dt_pi - t_vtx; //assume by default the pi hypothesis
161  tofpid.dterror = sqrt(tofpid.tmtderror * tofpid.tmtderror + t_vtx_err * t_vtx_err);
162  tofpid.betaerror = 0;
163  if (addPIDError) {
164  tofpid.dterror =
165  sqrt(tofpid.dterror * tofpid.dterror + (tofpid.dt_p - tofpid.dt_pi) * (tofpid.dt_p - tofpid.dt_pi));
166  tofpid.betaerror = tofpid.beta_p - tofpid.beta_pi;
167  }
168 
169  tofpid.dtchi2 = (tofpid.dt * tofpid.dt) / (tofpid.dterror * tofpid.dterror);
170 
171  tofpid.dt_best = tofpid.dt;
172  tofpid.dterror_best = tofpid.dterror;
173  tofpid.dtchi2_best = tofpid.dtchi2;
174 
175  tofpid.prob_pi = -1.;
176  tofpid.prob_k = -1.;
177  tofpid.prob_p = -1.;
178 
179  if (!addPIDError) {
180  //*TODO* deal with heavier nucleons and/or BSM case here?
181  double chi2_pi = tofpid.dtchi2;
182  double chi2_k =
183  (tofpid.tmtd - tofpid.dt_k - t_vtx) * (tofpid.tmtd - tofpid.dt_k - t_vtx) / (tofpid.dterror * tofpid.dterror);
184  double chi2_p =
185  (tofpid.tmtd - tofpid.dt_p - t_vtx) * (tofpid.tmtd - tofpid.dt_p - t_vtx) / (tofpid.dterror * tofpid.dterror);
186 
187  double rawprob_pi = exp(-0.5 * chi2_pi);
188  double rawprob_k = exp(-0.5 * chi2_k);
189  double rawprob_p = exp(-0.5 * chi2_p);
190  double normprob = 1. / (rawprob_pi + rawprob_k + rawprob_p);
191 
192  tofpid.prob_pi = rawprob_pi * normprob;
193  tofpid.prob_k = rawprob_k * normprob;
194  tofpid.prob_p = rawprob_p * normprob;
195 
196  double prob_heavy = 1. - tofpid.prob_pi;
197  constexpr double heavy_threshold = 0.75;
198 
199  if (prob_heavy > heavy_threshold) {
200  if (chi2_k < chi2_p) {
201  tofpid.dt_best = (tofpid.tmtd - tofpid.dt_k - t_vtx);
202  tofpid.dtchi2_best = chi2_k;
203  } else {
204  tofpid.dt_best = (tofpid.tmtd - tofpid.dt_p - t_vtx);
205  tofpid.dtchi2_best = chi2_p;
206  }
207  }
208  }
209  return tofpid;
210  }
211 
212  bool getTrajectoryStateClosestToBeamLine(const Trajectory& traj,
213  const reco::BeamSpot& bs,
214  const Propagator* thePropagator,
216  // get the state closest to the beamline
217  TrajectoryStateOnSurface stateForProjectionToBeamLineOnSurface =
218  traj.closestMeasurement(GlobalPoint(bs.x0(), bs.y0(), bs.z0())).updatedState();
219 
220  if (!stateForProjectionToBeamLineOnSurface.isValid()) {
221  edm::LogError("CannotPropagateToBeamLine") << "the state on the closest measurement isnot valid. skipping track.";
222  return false;
223  }
224 
225  const FreeTrajectoryState& stateForProjectionToBeamLine = *stateForProjectionToBeamLineOnSurface.freeState();
226 
227  TSCBLBuilderWithPropagator tscblBuilder(*thePropagator);
228  tscbl = tscblBuilder(stateForProjectionToBeamLine, bs);
229 
230  return tscbl.isValid();
231  }
232 
233  bool trackPathLength(const Trajectory& traj,
235  const Propagator* thePropagator,
236  double& pathlength) {
237  pathlength = 0.;
238 
239  bool validpropagation = true;
240  double pathlength1 = 0.;
241  double pathlength2 = 0.;
242 
243  //add pathlength layer by layer
244  for (auto it = traj.measurements().begin(); it != traj.measurements().end() - 1; ++it) {
245  const auto& propresult = thePropagator->propagateWithPath(it->updatedState(), (it + 1)->updatedState().surface());
246  double layerpathlength = std::abs(propresult.second);
247  if (layerpathlength == 0.) {
248  validpropagation = false;
249  }
250  pathlength1 += layerpathlength;
251  }
252 
253  //add distance from bs to first measurement
254  auto const& tscblPCA = tscbl.trackStateAtPCA();
255  auto const& aSurface = traj.direction() == alongMomentum ? traj.firstMeasurement().updatedState().surface()
256  : traj.lastMeasurement().updatedState().surface();
257  pathlength2 = thePropagator->propagateWithPath(tscblPCA, aSurface).second;
258  if (pathlength2 == 0.) {
259  validpropagation = false;
260  }
261  pathlength = pathlength1 + pathlength2;
262 
263  return validpropagation;
264  }
265 
266  bool trackPathLength(const Trajectory& traj,
267  const reco::BeamSpot& bs,
268  const Propagator* thePropagator,
269  double& pathlength) {
270  pathlength = 0.;
271 
273  bool tscbl_status = getTrajectoryStateClosestToBeamLine(traj, bs, thePropagator, tscbl);
274 
275  if (!tscbl_status)
276  return false;
277 
278  return trackPathLength(traj, tscbl, thePropagator, pathlength);
279  }
280 
281 } // namespace
282 
283 template <class TrackCollection>
285 public:
288 
290 
291  template <class H, class T>
292  void fillValueMap(edm::Event& iEvent, const H& handle, const std::vector<T>& vec, const edm::EDPutToken& token) const;
293 
294  void produce(edm::Event& ev, const edm::EventSetup& es) final;
295 
296  static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
297 
299  const Trajectory& traj,
300  const double,
301  const double,
303  const MTDDetLayerGeometry*,
304  const MagneticField* field,
305  const Propagator* prop,
306  const reco::BeamSpot& bs,
307  const double vtxTime,
308  const bool matchVertex,
309  MTDHitMatchingInfo& bestHit) const;
310 
312  const Trajectory& traj,
313  const double,
314  const double,
316  const MTDDetLayerGeometry*,
317  const MagneticField* field,
318  const Propagator* prop,
319  const reco::BeamSpot& bs,
320  const double vtxTime,
321  const bool matchVertex,
322  MTDHitMatchingInfo& bestHit) const;
323 
324  void fillMatchingHits(const DetLayer*,
326  const Trajectory&,
327  const double,
328  const double,
330  const Propagator*,
331  const reco::BeamSpot&,
332  const double&,
333  const bool,
335  MTDHitMatchingInfo&) const;
336 
339  if (!recHits.empty()) {
340  GlobalPoint first = gtg_->idToDet(recHits.front()->geographicalId())->position();
341  GlobalPoint last = gtg_->idToDet(recHits.back()->geographicalId())->position();
342 
343  // maybe perp2?
344  auto rFirst = first.mag2();
345  auto rLast = last.mag2();
346  if (rFirst < rLast)
348  if (rFirst > rLast)
350  }
351  LogDebug("TrackExtenderWithMTD") << "Impossible to determine the rechits order" << endl;
353  }
354 
355  reco::Track buildTrack(const reco::Track&,
356  const Trajectory&,
357  const Trajectory&,
358  const reco::BeamSpot&,
359  const MagneticField* field,
360  const Propagator* prop,
361  bool hasMTD,
362  float& pathLength,
363  float& tmtdOut,
364  float& sigmatmtdOut) const;
365  reco::TrackExtra buildTrackExtra(const Trajectory& trajectory) const;
366 
367  string dumpLayer(const DetLayer* layer) const;
368 
369 private:
385 
392 
393  const bool updateTraj_, updateExtra_, updatePattern_;
394  const std::string mtdRecHitBuilder_, propagator_, transientTrackBuilder_;
395  std::unique_ptr<MeasurementEstimator> theEstimator;
396  std::unique_ptr<TrackTransformer> theTransformer;
403 
408 
409  const float estMaxChi2_;
410  const float estMaxNSigma_;
411  const float btlChi2Cut_;
412  const float btlTimeChi2Cut_;
413  const float etlChi2Cut_;
414  const float etlTimeChi2Cut_;
415 
416  const bool useVertex_;
417  const bool useSimVertex_;
418  const float dzCut_;
419  const float bsTimeSpread_;
420 };
421 
422 template <class TrackCollection>
424  : tracksToken_(consumes<InputCollection>(iConfig.getParameter<edm::InputTag>("tracksSrc"))),
425  hitsToken_(consumes<MTDTrackingDetSetVector>(iConfig.getParameter<edm::InputTag>("hitsSrc"))),
426  bsToken_(consumes<reco::BeamSpot>(iConfig.getParameter<edm::InputTag>("beamSpotSrc"))),
427  updateTraj_(iConfig.getParameter<bool>("updateTrackTrajectory")),
428  updateExtra_(iConfig.getParameter<bool>("updateTrackExtra")),
429  updatePattern_(iConfig.getParameter<bool>("updateTrackHitPattern")),
430  mtdRecHitBuilder_(iConfig.getParameter<std::string>("MTDRecHitBuilder")),
431  propagator_(iConfig.getParameter<std::string>("Propagator")),
432  transientTrackBuilder_(iConfig.getParameter<std::string>("TransientTrackBuilder")),
433  estMaxChi2_(iConfig.getParameter<double>("estimatorMaxChi2")),
434  estMaxNSigma_(iConfig.getParameter<double>("estimatorMaxNSigma")),
435  btlChi2Cut_(iConfig.getParameter<double>("btlChi2Cut")),
436  btlTimeChi2Cut_(iConfig.getParameter<double>("btlTimeChi2Cut")),
437  etlChi2Cut_(iConfig.getParameter<double>("etlChi2Cut")),
438  etlTimeChi2Cut_(iConfig.getParameter<double>("etlTimeChi2Cut")),
439  useVertex_(iConfig.getParameter<bool>("useVertex")),
440  useSimVertex_(iConfig.getParameter<bool>("useSimVertex")),
441  dzCut_(iConfig.getParameter<double>("dZCut")),
442  bsTimeSpread_(iConfig.getParameter<double>("bsTimeSpread")) {
443  if (useVertex_) {
444  if (useSimVertex_) {
445  genVtxPositionToken_ = consumes<GlobalPoint>(iConfig.getParameter<edm::InputTag>("genVtxPositionSrc"));
446  genVtxTimeToken_ = consumes<float>(iConfig.getParameter<edm::InputTag>("genVtxTimeSrc"));
447  } else
448  vtxToken_ = consumes<VertexCollection>(iConfig.getParameter<edm::InputTag>("vtxSrc"));
449  }
450 
451  theEstimator = std::make_unique<Chi2MeasurementEstimator>(estMaxChi2_, estMaxNSigma_);
452  theTransformer = std::make_unique<TrackTransformer>(iConfig.getParameterSet("TrackTransformer"));
453 
454  btlMatchChi2Token = produces<edm::ValueMap<float>>("btlMatchChi2");
455  etlMatchChi2Token = produces<edm::ValueMap<float>>("etlMatchChi2");
456  btlMatchTimeChi2Token = produces<edm::ValueMap<float>>("btlMatchTimeChi2");
457  etlMatchTimeChi2Token = produces<edm::ValueMap<float>>("etlMatchTimeChi2");
458  pathLengthToken = produces<edm::ValueMap<float>>("pathLength");
459  tmtdToken = produces<edm::ValueMap<float>>("tmtd");
460  sigmatmtdToken = produces<edm::ValueMap<float>>("sigmatmtd");
461  pOrigTrkToken = produces<edm::ValueMap<float>>("generalTrackp");
462  betaOrigTrkToken = produces<edm::ValueMap<float>>("generalTrackBeta");
463  t0OrigTrkToken = produces<edm::ValueMap<float>>("generalTrackt0");
464  sigmat0OrigTrkToken = produces<edm::ValueMap<float>>("generalTracksigmat0");
465  pathLengthOrigTrkToken = produces<edm::ValueMap<float>>("generalTrackPathLength");
466  tmtdOrigTrkToken = produces<edm::ValueMap<float>>("generalTracktmtd");
467  sigmatmtdOrigTrkToken = produces<edm::ValueMap<float>>("generalTracksigmatmtd");
468  assocOrigTrkToken = produces<edm::ValueMap<int>>("generalTrackassoc");
469 
470  builderToken_ = esConsumes<TransientTrackBuilder, TransientTrackRecord>(edm::ESInputTag("", transientTrackBuilder_));
472  esConsumes<TransientTrackingRecHitBuilder, TransientRecHitRecord>(edm::ESInputTag("", mtdRecHitBuilder_));
473  gtgToken_ = esConsumes<GlobalTrackingGeometry, GlobalTrackingGeometryRecord>();
474  dlgeoToken_ = esConsumes<MTDDetLayerGeometry, MTDRecoGeometryRecord>();
475  magfldToken_ = esConsumes<MagneticField, IdealMagneticFieldRecord>();
476  propToken_ = esConsumes<Propagator, TrackingComponentsRecord>(edm::ESInputTag("", propagator_));
477  ttopoToken_ = esConsumes<TrackerTopology, TrackerTopologyRcd>();
478 
479  produces<edm::OwnVector<TrackingRecHit>>();
480  produces<reco::TrackExtraCollection>();
481  produces<TrackCollection>();
482 }
483 
484 template <class TrackCollection>
487  desc.add<edm::InputTag>("tracksSrc", edm::InputTag("generalTracks"));
488  desc.add<edm::InputTag>("hitsSrc", edm::InputTag("mtdTrackingRecHits"));
489  desc.add<edm::InputTag>("beamSpotSrc", edm::InputTag("offlineBeamSpot"));
490  desc.add<edm::InputTag>("genVtxPositionSrc", edm::InputTag("genParticles:xyz0"));
491  desc.add<edm::InputTag>("genVtxTimeSrc", edm::InputTag("genParticles:t0"));
492  desc.add<edm::InputTag>("vtxSrc", edm::InputTag("offlinePrimaryVertices4D"));
493  desc.add<bool>("updateTrackTrajectory", true);
494  desc.add<bool>("updateTrackExtra", true);
495  desc.add<bool>("updateTrackHitPattern", true);
496  desc.add<std::string>("TransientTrackBuilder", "TransientTrackBuilder");
497  desc.add<std::string>("MTDRecHitBuilder", "MTDRecHitBuilder");
498  desc.add<std::string>("Propagator", "PropagatorWithMaterialForMTD");
500  false,
501  "KFFitterForRefitInsideOut",
502  "KFSmootherForRefitInsideOut",
503  "PropagatorWithMaterialForMTD",
504  "alongMomentum",
505  true,
506  "WithTrackAngle",
507  "MuonRecHitBuilder",
508  "MTDRecHitBuilder");
509  desc.add<edm::ParameterSetDescription>("TrackTransformer", transDesc);
510  desc.add<double>("estimatorMaxChi2", 500.);
511  desc.add<double>("estimatorMaxNSigma", 10.);
512  desc.add<double>("btlChi2Cut", 50.);
513  desc.add<double>("btlTimeChi2Cut", 10.);
514  desc.add<double>("etlChi2Cut", 50.);
515  desc.add<double>("etlTimeChi2Cut", 10.);
516  desc.add<bool>("useVertex", false);
517  desc.add<bool>("useSimVertex", false);
518  desc.add<double>("dZCut", 0.1);
519  desc.add<double>("bsTimeSpread", 0.2);
520  descriptions.add("trackExtenderWithMTDBase", desc);
521 }
522 
523 template <class TrackCollection>
524 template <class H, class T>
526  const H& handle,
527  const std::vector<T>& vec,
528  const edm::EDPutToken& token) const {
529  auto out = std::make_unique<edm::ValueMap<T>>();
531  filler.insert(handle, vec.begin(), vec.end());
532  filler.fill();
533  iEvent.put(token, std::move(out));
534 }
535 
536 template <class TrackCollection>
538  //this produces pieces of the track extra
539  Traj2TrackHits t2t;
540 
541  theTransformer->setServices(es);
542 
543  TrackingRecHitRefProd hitsRefProd = ev.getRefBeforePut<TrackingRecHitCollection>();
544  reco::TrackExtraRefProd extrasRefProd = ev.getRefBeforePut<reco::TrackExtraCollection>();
545 
546  gtg_ = es.getHandle(gtgToken_);
547 
548  auto geo = es.getTransientHandle(dlgeoToken_);
549 
550  auto magfield = es.getTransientHandle(magfldToken_);
551 
552  builder_ = es.getHandle(builderToken_);
553  hitbuilder_ = es.getHandle(hitbuilderToken_);
554 
555  auto propH = es.getTransientHandle(propToken_);
556  const Propagator* prop = propH.product();
557 
558  auto httopo = es.getTransientHandle(ttopoToken_);
559  const TrackerTopology& ttopo = *httopo;
560 
561  auto output = std::make_unique<TrackCollection>();
562  auto extras = std::make_unique<reco::TrackExtraCollection>();
563  auto outhits = std::make_unique<edm::OwnVector<TrackingRecHit>>();
564 
565  std::vector<float> btlMatchChi2;
566  std::vector<float> etlMatchChi2;
567  std::vector<float> btlMatchTimeChi2;
568  std::vector<float> etlMatchTimeChi2;
569  std::vector<float> pathLengthsRaw;
570  std::vector<float> tmtdRaw;
571  std::vector<float> sigmatmtdRaw;
572  std::vector<float> pOrigTrkRaw;
573  std::vector<float> betaOrigTrkRaw;
574  std::vector<float> t0OrigTrkRaw;
575  std::vector<float> sigmat0OrigTrkRaw;
576  std::vector<float> pathLengthsOrigTrkRaw;
577  std::vector<float> tmtdOrigTrkRaw;
578  std::vector<float> sigmatmtdOrigTrkRaw;
579  std::vector<int> assocOrigTrkRaw;
580 
581  auto const tracksH = ev.getHandle(tracksToken_);
582  const auto& tracks = *tracksH;
583 
584  //MTD hits DetSet
585  const auto& hits = ev.get(hitsToken_);
586 
587  //beam spot
588  const auto& bs = ev.get(bsToken_);
589 
590  const Vertex* pv = nullptr;
591  if (useVertex_ && !useSimVertex_) {
592  auto const& vtxs = ev.get(vtxToken_);
593  if (!vtxs.empty())
594  pv = &vtxs[0];
595  }
596 
597  std::unique_ptr<math::XYZTLorentzVectorF> genPV(nullptr);
598  if (useVertex_ && useSimVertex_) {
599  const auto& genVtxPosition = ev.get(genVtxPositionToken_);
600  const auto& genVtxTime = ev.get(genVtxTimeToken_);
601  genPV = std::make_unique<math::XYZTLorentzVectorF>(
602  genVtxPosition.x(), genVtxPosition.y(), genVtxPosition.z(), genVtxTime);
603  }
604 
605  double vtxTime = 0.;
606  if (useVertex_) {
607  if (useSimVertex_ && genPV) {
608  vtxTime = genPV->t();
609  } else if (pv)
610  vtxTime = pv->t(); //already in ns
611  }
612 
613  std::vector<unsigned> track_indices;
614  unsigned itrack = 0;
615 
616  for (const auto& track : tracks) {
617  double trackVtxTime = 0.;
618  if (useVertex_) {
619  double dz;
620  if (useSimVertex_)
621  dz = std::abs(track.dz(math::XYZPoint(*genPV)));
622  else
623  dz = std::abs(track.dz(pv->position()));
624 
625  if (dz < dzCut_)
626  trackVtxTime = vtxTime;
627  }
628 
629  reco::TransientTrack ttrack(track, magfield.product(), gtg_);
630  const auto& trajs = theTransformer->transform(track);
631  auto thits = theTransformer->getTransientRecHits(ttrack);
633  MTDHitMatchingInfo mBTL, mETL;
634  if (!trajs.empty()) {
635  // get the outermost trajectory point on the track
636  TrajectoryStateOnSurface tsos = builder_->build(track).outermostMeasurementState();
638  bool tscbl_status = getTrajectoryStateClosestToBeamLine(trajs.front(), bs, prop, tscbl);
639 
640  if (tscbl_status) {
641  double pmag2 = tscbl.trackStateAtPCA().momentum().mag2();
642  double pathlength0;
643  trackPathLength(trajs.front(), tscbl, prop, pathlength0);
644 
645  const auto& btlhits = tryBTLLayers(tsos,
646  trajs.front(),
647  pmag2,
648  pathlength0,
649  hits,
650  geo.product(),
651  magfield.product(),
652  prop,
653  bs,
654  trackVtxTime,
655  trackVtxTime != 0.,
656  mBTL);
657  mtdthits.insert(mtdthits.end(), btlhits.begin(), btlhits.end());
658 
659  // in the future this should include an intermediate refit before propagating to the ETL
660  // for now it is ok
661  const auto& etlhits = tryETLLayers(tsos,
662  trajs.front(),
663  pmag2,
664  pathlength0,
665  hits,
666  geo.product(),
667  magfield.product(),
668  prop,
669  bs,
670  trackVtxTime,
671  trackVtxTime != 0.,
672  mETL);
673  mtdthits.insert(mtdthits.end(), etlhits.begin(), etlhits.end());
674  }
675  }
676 
677  auto ordering = checkRecHitsOrdering(thits);
679  thits.insert(thits.end(), mtdthits.begin(), mtdthits.end());
680  } else {
681  std::reverse(mtdthits.begin(), mtdthits.end());
682  mtdthits.insert(mtdthits.end(), thits.begin(), thits.end());
683  thits.swap(mtdthits);
684  }
685 
686  const auto& trajwithmtd = mtdthits.empty() ? trajs : theTransformer->transform(ttrack, thits);
687  float pMap = 0.f, betaMap = 0.f, t0Map = 0.f, sigmat0Map = -1.f, pathLengthMap = -1.f, tmtdMap = 0.f,
688  sigmatmtdMap = -1.f;
689  int iMap = -1;
690 
691  for (const auto& trj : trajwithmtd) {
692  const auto& thetrj = (updateTraj_ ? trj : trajs.front());
693  float pathLength = 0.f, tmtd = 0.f, sigmatmtd = -1.f;
694  reco::Track result = buildTrack(track,
695  thetrj,
696  trj,
697  bs,
698  magfield.product(),
699  prop,
700  !trajwithmtd.empty() && !mtdthits.empty(),
701  pathLength,
702  tmtd,
703  sigmatmtd);
704  if (result.ndof() >= 0) {
706  reco::TrackExtra::TrajParams trajParams;
708  size_t hitsstart = outhits->size();
709  if (updatePattern_) {
710  t2t(trj, *outhits, trajParams, chi2s); // this fills the output hit collection
711  } else {
712  t2t(thetrj, *outhits, trajParams, chi2s);
713  }
714  size_t hitsend = outhits->size();
715  extras->push_back(buildTrackExtra(trj)); // always push back the fully built extra, update by setting in track
716  extras->back().setHits(hitsRefProd, hitsstart, hitsend - hitsstart);
717  extras->back().setTrajParams(trajParams, chi2s);
718  //create the track
719  output->push_back(result);
720  btlMatchChi2.push_back(mBTL.hit ? mBTL.estChi2 : -1);
721  etlMatchChi2.push_back(mETL.hit ? mETL.estChi2 : -1);
722  btlMatchTimeChi2.push_back(mBTL.hit ? mBTL.timeChi2 : -1);
723  etlMatchTimeChi2.push_back(mETL.hit ? mETL.timeChi2 : -1);
724  pathLengthsRaw.push_back(pathLength);
725  tmtdRaw.push_back(tmtd);
726  sigmatmtdRaw.push_back(sigmatmtd);
727  pathLengthMap = pathLength;
728  tmtdMap = tmtd;
729  sigmatmtdMap = sigmatmtd;
730  auto& backtrack = output->back();
731  iMap = output->size() - 1;
732  pMap = backtrack.p();
733  betaMap = backtrack.beta();
734  t0Map = backtrack.t0();
735  sigmat0Map = std::copysign(std::sqrt(std::abs(backtrack.covt0t0())), backtrack.covt0t0());
736  reco::TrackExtraRef extraRef(extrasRefProd, extras->size() - 1);
737  backtrack.setExtra((updateExtra_ ? extraRef : track.extra()));
738  for (unsigned ihit = hitsstart; ihit < hitsend; ++ihit) {
739  backtrack.appendHitPattern((*outhits)[ihit], ttopo);
740  }
741  } else {
742  LogTrace("TrackExtenderWithMTD") << "Error in the MTD track refitting. This should not happen";
743  }
744  }
745 
746  pOrigTrkRaw.push_back(pMap);
747  betaOrigTrkRaw.push_back(betaMap);
748  t0OrigTrkRaw.push_back(t0Map);
749  sigmat0OrigTrkRaw.push_back(sigmat0Map);
750  pathLengthsOrigTrkRaw.push_back(pathLengthMap);
751  tmtdOrigTrkRaw.push_back(tmtdMap);
752  sigmatmtdOrigTrkRaw.push_back(sigmatmtdMap);
753  assocOrigTrkRaw.push_back(iMap);
754  ++itrack;
755  }
756 
757  auto outTrksHandle = ev.put(std::move(output));
758  ev.put(std::move(extras));
759  ev.put(std::move(outhits));
760 
761  fillValueMap(ev, outTrksHandle, btlMatchChi2, btlMatchChi2Token);
762  fillValueMap(ev, outTrksHandle, etlMatchChi2, etlMatchChi2Token);
763  fillValueMap(ev, outTrksHandle, btlMatchTimeChi2, btlMatchTimeChi2Token);
764  fillValueMap(ev, outTrksHandle, etlMatchTimeChi2, etlMatchTimeChi2Token);
765  fillValueMap(ev, outTrksHandle, pathLengthsRaw, pathLengthToken);
766  fillValueMap(ev, outTrksHandle, tmtdRaw, tmtdToken);
767  fillValueMap(ev, outTrksHandle, sigmatmtdRaw, sigmatmtdToken);
768  fillValueMap(ev, tracksH, pOrigTrkRaw, pOrigTrkToken);
769  fillValueMap(ev, tracksH, betaOrigTrkRaw, betaOrigTrkToken);
770  fillValueMap(ev, tracksH, t0OrigTrkRaw, t0OrigTrkToken);
771  fillValueMap(ev, tracksH, sigmat0OrigTrkRaw, sigmat0OrigTrkToken);
772  fillValueMap(ev, tracksH, pathLengthsOrigTrkRaw, pathLengthOrigTrkToken);
773  fillValueMap(ev, tracksH, tmtdOrigTrkRaw, tmtdOrigTrkToken);
774  fillValueMap(ev, tracksH, sigmatmtdOrigTrkRaw, sigmatmtdOrigTrkToken);
775  fillValueMap(ev, tracksH, assocOrigTrkRaw, assocOrigTrkToken);
776 }
777 
778 namespace {
779  bool cmp_for_detset(const unsigned one, const unsigned two) { return one < two; };
780 
781  void find_hits_in_dets(const MTDTrackingDetSetVector& hits,
782  const Trajectory& traj,
783  const DetLayer* layer,
784  const TrajectoryStateOnSurface& tsos,
785  const double pmag2,
786  const double pathlength0,
787  const double vtxTime,
788  const reco::BeamSpot& bs,
789  const float bsTimeSpread,
790  const Propagator* prop,
792  bool useVtxConstraint,
793  std::set<MTDHitMatchingInfo>& out) {
794  pair<bool, TrajectoryStateOnSurface> comp = layer->compatible(tsos, *prop, *estimator);
795  if (comp.first) {
796  const vector<DetLayer::DetWithState> compDets = layer->compatibleDets(tsos, *prop, *estimator);
797  if (!compDets.empty()) {
798  for (const auto& detWithState : compDets) {
799  auto range = hits.equal_range(detWithState.first->geographicalId(), cmp_for_detset);
800  if (range.first == range.second)
801  continue;
802 
803  auto pl = prop->propagateWithPath(tsos, detWithState.second.surface());
804  if (pl.second == 0.)
805  continue;
806 
807  const double tot_pl = pathlength0 + std::abs(pl.second);
808  const double t_vtx = useVtxConstraint ? vtxTime : 0.;
809 
810  constexpr double vtx_res = 0.008;
811  const double t_vtx_err = useVtxConstraint ? vtx_res : bsTimeSpread;
812 
813  constexpr double t_res_manual = 0.035;
814 
815  for (auto detitr = range.first; detitr != range.second; ++detitr) {
816  for (const auto& hit : *detitr) {
817  auto est = estimator->estimate(detWithState.second, hit);
818  if (!est.first)
819  continue;
820 
821  TrackTofPidInfo tof = computeTrackTofPidInfo(pmag2,
822  tot_pl,
823  hit.time(),
824  t_res_manual, //put hit error by hand for the moment
825  t_vtx,
826  t_vtx_err, //put vtx error by hand for the moment
827  false);
828  MTDHitMatchingInfo mi;
829  mi.hit = &hit;
830  mi.estChi2 = est.second;
831  mi.timeChi2 = tof.dtchi2_best; //use the chi2 for the best matching hypothesis
832 
833  out.insert(mi);
834  }
835  }
836  }
837  }
838  }
839  }
840 } // namespace
841 
842 template <class TrackCollection>
844  const TrajectoryStateOnSurface& tsos,
845  const Trajectory& traj,
846  const double pmag2,
847  const double pathlength0,
849  const MTDDetLayerGeometry* geo,
850  const MagneticField* field,
851  const Propagator* prop,
852  const reco::BeamSpot& bs,
853  const double vtxTime,
854  const bool matchVertex,
855  MTDHitMatchingInfo& bestHit) const {
856  const vector<const DetLayer*>& layers = geo->allBTLLayers();
857 
859  bestHit = MTDHitMatchingInfo();
860  for (const DetLayer* ilay : layers)
861  fillMatchingHits(ilay, tsos, traj, pmag2, pathlength0, hits, prop, bs, vtxTime, matchVertex, output, bestHit);
862  return output;
863 }
864 
865 template <class TrackCollection>
867  const TrajectoryStateOnSurface& tsos,
868  const Trajectory& traj,
869  const double pmag2,
870  const double pathlength0,
872  const MTDDetLayerGeometry* geo,
873  const MagneticField* field,
874  const Propagator* prop,
875  const reco::BeamSpot& bs,
876  const double vtxTime,
877  const bool matchVertex,
878  MTDHitMatchingInfo& bestHit) const {
879  const vector<const DetLayer*>& layers = geo->allETLLayers();
880 
882  bestHit = MTDHitMatchingInfo();
883  for (const DetLayer* ilay : layers) {
884  const BoundDisk& disk = static_cast<const MTDRingForwardDoubleLayer*>(ilay)->specificSurface();
885  const double diskZ = disk.position().z();
886 
887  if (tsos.globalPosition().z() * diskZ < 0)
888  continue; // only propagate to the disk that's on the same side
889 
890  fillMatchingHits(ilay, tsos, traj, pmag2, pathlength0, hits, prop, bs, vtxTime, matchVertex, output, bestHit);
891  }
892 
893  // the ETL hits order must be from the innermost to the outermost
894 
895  if (output.size() == 2) {
896  if (std::abs(output[0]->globalPosition().z()) > std::abs(output[1]->globalPosition().z())) {
897  std::reverse(output.begin(), output.end());
898  }
899  }
900  return output;
901 }
902 
903 template <class TrackCollection>
905  const TrajectoryStateOnSurface& tsos,
906  const Trajectory& traj,
907  const double pmag2,
908  const double pathlength0,
910  const Propagator* prop,
911  const reco::BeamSpot& bs,
912  const double& vtxTime,
913  const bool matchVertex,
915  MTDHitMatchingInfo& bestHit) const {
916  std::set<MTDHitMatchingInfo> hitsInLayer;
917  bool hitMatched = false;
918 
919  using namespace std::placeholders;
920  auto find_hits = std::bind(find_hits_in_dets,
921  std::cref(hits),
922  std::cref(traj),
923  ilay,
924  std::cref(tsos),
925  pmag2,
926  pathlength0,
927  _1,
928  std::cref(bs),
929  bsTimeSpread_,
930  prop,
931  theEstimator.get(),
932  _2,
933  std::ref(hitsInLayer));
934 
935  if (useVertex_ && matchVertex)
936  find_hits(vtxTime, true);
937  else
938  find_hits(0, false);
939 
940  //just take the first hit because the hits are sorted on their matching quality
941  if (!hitsInLayer.empty()) {
942  //check hits to pass minimum quality matching requirements
943  auto const& firstHit = *hitsInLayer.begin();
944  if (firstHit.estChi2 < etlChi2Cut_ && firstHit.timeChi2 < etlTimeChi2Cut_) {
945  hitMatched = true;
946  output.push_back(hitbuilder_->build(firstHit.hit));
947  if (firstHit < bestHit)
948  bestHit = firstHit;
949  }
950  }
951 
952  if (useVertex_ && matchVertex && !hitMatched) {
953  //try a second search with beamspot hypothesis
954  hitsInLayer.clear();
955  find_hits(0, false);
956  if (!hitsInLayer.empty()) {
957  auto const& firstHit = *hitsInLayer.begin();
958  if (firstHit.timeChi2 < etlTimeChi2Cut_) {
959  if (firstHit.estChi2 < etlChi2Cut_) {
960  hitMatched = true;
961  output.push_back(hitbuilder_->build(firstHit.hit));
962  if (firstHit < bestHit)
963  bestHit = firstHit;
964  }
965  }
966  }
967  }
968 }
969 
970 //below is unfortunately ripped from other places but
971 //since track producer doesn't know about MTD we have to do this
972 template <class TrackCollection>
974  const Trajectory& traj,
975  const Trajectory& trajWithMtd,
976  const reco::BeamSpot& bs,
977  const MagneticField* field,
978  const Propagator* thePropagator,
979  bool hasMTD,
980  float& pathLengthOut,
981  float& tmtdOut,
982  float& sigmatmtdOut) const {
984  bool tsbcl_status = getTrajectoryStateClosestToBeamLine(traj, bs, thePropagator, tscbl);
985 
986  if (!tsbcl_status)
987  return reco::Track();
988 
990  math::XYZPoint pos(v.x(), v.y(), v.z());
992  math::XYZVector mom(p.x(), p.y(), p.z());
993 
994  int ndof = traj.ndof();
995 
996  double t0 = 0.;
997  double covt0t0 = -1.;
998  pathLengthOut = -1.f; // if there is no MTD flag the pathlength with -1
999  tmtdOut = 0.f;
1000  sigmatmtdOut = -1.f;
1001  double betaOut = 0.;
1002  double covbetabeta = -1.;
1003 
1004  auto routput = [&]() {
1005  return reco::Track(traj.chiSquared(),
1006  int(ndof),
1007  pos,
1008  mom,
1009  tscbl.trackStateAtPCA().charge(),
1011  orig.algo(),
1013  t0,
1014  betaOut,
1015  covt0t0,
1016  covbetabeta);
1017  };
1018 
1019  //compute path length for time backpropagation, using first MTD hit for the momentum
1020  if (hasMTD) {
1021  double pathlength;
1022  bool validpropagation = trackPathLength(trajWithMtd, bs, thePropagator, pathlength);
1023  double thit = 0.;
1024  double thiterror = -1.;
1025  bool validmtd = false;
1026 
1027  if (!validpropagation) {
1028  return routput();
1029  }
1030 
1031  size_t ihitcount(0), ietlcount(0);
1032  for (auto const& hit : trajWithMtd.measurements()) {
1033  if (hit.recHit()->geographicalId().det() == DetId::Forward &&
1034  ForwardSubdetector(hit.recHit()->geographicalId().subdetId()) == FastTime) {
1035  ihitcount++;
1036  if (MTDDetId(hit.recHit()->geographicalId()).mtdSubDetector() == MTDDetId::MTDType::ETL) {
1037  ietlcount++;
1038  }
1039  }
1040  }
1041 
1042  auto ihit1 = trajWithMtd.measurements().cbegin();
1043  if (ihitcount == 1) {
1044  const MTDTrackingRecHit* mtdhit = static_cast<const MTDTrackingRecHit*>((*ihit1).recHit()->hit());
1045  thit = mtdhit->time();
1046  thiterror = mtdhit->timeError();
1047  validmtd = true;
1048  } else if (ihitcount == 2 && ietlcount == 2) {
1049  const auto& propresult =
1050  thePropagator->propagateWithPath(ihit1->updatedState(), (ihit1 + 1)->updatedState().surface());
1051  double etlpathlength = std::abs(propresult.second);
1052  //
1053  // The information of the two ETL hits is combined and attributed to the innermost hit
1054  //
1055  if (etlpathlength == 0.) {
1056  validpropagation = false;
1057  } else {
1058  pathlength -= etlpathlength;
1059  const MTDTrackingRecHit* mtdhit1 = static_cast<const MTDTrackingRecHit*>((*ihit1).recHit()->hit());
1060  const MTDTrackingRecHit* mtdhit2 = static_cast<const MTDTrackingRecHit*>((*(ihit1 + 1)).recHit()->hit());
1061  TrackTofPidInfo tofInfo =
1062  computeTrackTofPidInfo(p.mag2(), etlpathlength, mtdhit1->time(), mtdhit1->timeError(), 0., 0., true);
1063  //
1064  // Protect against incompatible times
1065  //
1066  double err1 = tofInfo.dterror * tofInfo.dterror;
1067  double err2 = mtdhit2->timeError() * mtdhit2->timeError();
1068  if (cms_rounding::roundIfNear0(err1) == 0. || cms_rounding::roundIfNear0(err2) == 0.) {
1069  edm::LogError("TrackExtenderWithMTD")
1070  << "MTD tracking hits with zero time uncertainty: " << err1 << " " << err2;
1071  } else {
1072  if ((tofInfo.dt - mtdhit2->time()) * (tofInfo.dt - mtdhit2->time()) < (err1 + err2) * etlTimeChi2Cut_) {
1073  //
1074  // Subtract the ETL time of flight from the outermost measurement, and combine it in a weighted average with the innermost
1075  // the mass ambiguity related uncertainty on the time of flight is added as an additional uncertainty
1076  //
1077  err1 = 1. / err1;
1078  err2 = 1. / err2;
1079  thiterror = 1. / (err1 + err2);
1080  thit = (tofInfo.dt * err1 + mtdhit2->time() * err2) * thiterror;
1081  thiterror = std::sqrt(thiterror);
1082  LogDebug("TrackExtenderWithMTD") << "p trk = " << p.mag() << " ETL hits times/errors: " << mtdhit1->time()
1083  << " +/- " << mtdhit1->timeError() << " , " << mtdhit2->time() << " +/- "
1084  << mtdhit2->timeError() << " extrapolated time1: " << tofInfo.dt << " +/- "
1085  << tofInfo.dterror << " average = " << thit << " +/- " << thiterror;
1086  validmtd = true;
1087  }
1088  }
1089  }
1090  } else {
1091  edm::LogInfo("TrackExtenderWithMTD")
1092  << "MTD hits #" << ihitcount << "ETL hits #" << ietlcount << " anomalous pattern, skipping...";
1093  }
1094 
1095  if (validmtd && validpropagation) {
1096  //here add the PID uncertainty for later use in the 1st step of 4D vtx reconstruction
1097  TrackTofPidInfo tofInfo = computeTrackTofPidInfo(p.mag2(), pathlength, thit, thiterror, 0., 0., true);
1098  pathLengthOut = pathlength; // set path length if we've got a timing hit
1099  tmtdOut = thit;
1100  sigmatmtdOut = thiterror;
1101  t0 = tofInfo.dt;
1102  covt0t0 = tofInfo.dterror * tofInfo.dterror;
1103  betaOut = tofInfo.beta_pi;
1104  covbetabeta = tofInfo.betaerror * tofInfo.betaerror;
1105  }
1106  }
1107 
1108  return routput();
1109 }
1110 
1111 template <class TrackCollection>
1113  static const string metname = "TrackExtenderWithMTD";
1114 
1115  const Trajectory::RecHitContainer transRecHits = trajectory.recHits();
1116 
1117  // put the collection of TrackingRecHit in the event
1118 
1119  // sets the outermost and innermost TSOSs
1120  // ToDo: validation for track states with MTD
1121  TrajectoryStateOnSurface outerTSOS;
1122  TrajectoryStateOnSurface innerTSOS;
1123  unsigned int innerId = 0, outerId = 0;
1125  DetId outerDetId;
1126 
1127  if (trajectory.direction() == alongMomentum) {
1128  LogTrace(metname) << "alongMomentum";
1129  outerTSOS = trajectory.lastMeasurement().updatedState();
1130  innerTSOS = trajectory.firstMeasurement().updatedState();
1131  outerId = trajectory.lastMeasurement().recHit()->geographicalId().rawId();
1132  innerId = trajectory.firstMeasurement().recHit()->geographicalId().rawId();
1133  outerRecHit = trajectory.lastMeasurement().recHit();
1134  outerDetId = trajectory.lastMeasurement().recHit()->geographicalId();
1135  } else if (trajectory.direction() == oppositeToMomentum) {
1136  LogTrace(metname) << "oppositeToMomentum";
1137  outerTSOS = trajectory.firstMeasurement().updatedState();
1138  innerTSOS = trajectory.lastMeasurement().updatedState();
1139  outerId = trajectory.firstMeasurement().recHit()->geographicalId().rawId();
1140  innerId = trajectory.lastMeasurement().recHit()->geographicalId().rawId();
1141  outerRecHit = trajectory.firstMeasurement().recHit();
1142  outerDetId = trajectory.firstMeasurement().recHit()->geographicalId();
1143  } else
1144  LogError(metname) << "Wrong propagation direction!";
1145 
1146  const GeomDet* outerDet = gtg_->idToDet(outerDetId);
1147  GlobalPoint outerTSOSPos = outerTSOS.globalParameters().position();
1148  bool inside = outerDet->surface().bounds().inside(outerDet->toLocal(outerTSOSPos));
1149 
1150  GlobalPoint hitPos =
1151  (outerRecHit->isValid()) ? outerRecHit->globalPosition() : outerTSOS.globalParameters().position();
1152 
1153  if (!inside) {
1154  LogTrace(metname) << "The Global Muon outerMostMeasurementState is not compatible with the recHit detector!"
1155  << " Setting outerMost postition to recHit position if recHit isValid: "
1156  << outerRecHit->isValid();
1157  LogTrace(metname) << "From " << outerTSOSPos << " to " << hitPos;
1158  }
1159 
1160  //build the TrackExtra
1161  GlobalPoint v = (inside) ? outerTSOSPos : hitPos;
1162  GlobalVector p = outerTSOS.globalParameters().momentum();
1163  math::XYZPoint outpos(v.x(), v.y(), v.z());
1164  math::XYZVector outmom(p.x(), p.y(), p.z());
1165 
1166  v = innerTSOS.globalParameters().position();
1167  p = innerTSOS.globalParameters().momentum();
1168  math::XYZPoint inpos(v.x(), v.y(), v.z());
1169  math::XYZVector inmom(p.x(), p.y(), p.z());
1170 
1171  reco::TrackExtra trackExtra(outpos,
1172  outmom,
1173  true,
1174  inpos,
1175  inmom,
1176  true,
1177  outerTSOS.curvilinearError(),
1178  outerId,
1179  innerTSOS.curvilinearError(),
1180  innerId,
1181  trajectory.direction(),
1182  trajectory.seedRef());
1183 
1184  return trackExtra;
1185 }
1186 
1187 template <class TrackCollection>
1189  stringstream output;
1190 
1191  const BoundSurface* sur = nullptr;
1192  const BoundCylinder* bc = nullptr;
1193  const BoundDisk* bd = nullptr;
1194 
1195  sur = &(layer->surface());
1196  if ((bc = dynamic_cast<const BoundCylinder*>(sur))) {
1197  output << " Cylinder of radius: " << bc->radius() << endl;
1198  } else if ((bd = dynamic_cast<const BoundDisk*>(sur))) {
1199  output << " Disk at: " << bd->position().z() << endl;
1200  }
1201  return output.str();
1202 }
1203 
1204 //define this as a plug-in
1211 
Vector3DBase
Definition: Vector3DBase.h:8
ConfigurationDescriptions.h
edm::RefProd< TrackingRecHitCollection >
TrackExtenderWithMTDT::etlMatchChi2Token
edm::EDPutToken etlMatchChi2Token
Definition: TrackExtenderWithMTD.cc:371
Propagator.h
class-composition.H
H
Definition: class-composition.py:31
TrackExtenderWithMTDT::theEstimator
std::unique_ptr< MeasurementEstimator > theEstimator
Definition: TrackExtenderWithMTD.cc:395
Chi2MeasurementEstimator.h
MeasurementEstimator
Definition: MeasurementEstimator.h:19
FreeTrajectoryState::momentum
GlobalVector momentum() const
Definition: FreeTrajectoryState.h:68
TrajectoryStateClosestToBeamLine
Definition: TrajectoryStateClosestToBeamLine.h:15
FastTimerService_cff.range
range
Definition: FastTimerService_cff.py:34
TrackExtenderWithMTDT::genVtxTimeToken_
edm::EDGetTokenT< float > genVtxTimeToken_
Definition: TrackExtenderWithMTD.cc:390
BTLDetId.h
electrons_cff.bool
bool
Definition: electrons_cff.py:366
SiPixelPI::one
Definition: SiPixelPayloadInspectorHelper.h:39
edm::ESInputTag
Definition: ESInputTag.h:87
TrackExtenderWithMTDT::etlTimeChi2Cut_
const float etlTimeChi2Cut_
Definition: TrackExtenderWithMTD.cc:414
HLT_FULL_cff.track
track
Definition: HLT_FULL_cff.py:11713
GeomDet
Definition: GeomDet.h:27
PixelTopology.h
hfClusterShapes_cfi.hits
hits
Definition: hfClusterShapes_cfi.py:5
TrackExtenderWithMTDT::magfldToken_
edm::ESGetToken< MagneticField, IdealMagneticFieldRecord > magfldToken_
Definition: TrackExtenderWithMTD.cc:405
ESHandle.h
DetLayer
Definition: DetLayer.h:21
detailsBasic3DVector::z
float float float z
Definition: extBasic3DVector.h:14
Trajectory::seedRef
edm::RefToBase< TrajectorySeed > seedRef(void) const
Definition: Trajectory.h:303
Trajectory::chiSquared
float chiSquared() const
Definition: Trajectory.h:241
GlobalTrajectoryParameters::position
GlobalPoint position() const
Definition: GlobalTrajectoryParameters.h:60
Trajectory::direction
PropagationDirection const & direction() const
Definition: Trajectory.cc:133
convertSQLitetoXML_cfg.output
output
Definition: convertSQLitetoXML_cfg.py:72
TrackExtenderWithMTDT::useSimVertex_
const bool useSimVertex_
Definition: TrackExtenderWithMTD.cc:417
patZpeak.handle
handle
Definition: patZpeak.py:23
ForwardSubdetector
ForwardSubdetector
Definition: ForwardSubdetector.h:4
edm::EDGetTokenT< InputCollection >
m_pi
#define m_pi
Definition: RPCConst.cc:8
edm
HLT enums.
Definition: AlignableModifier.h:19
TrackerTopology
Definition: TrackerTopology.h:16
AlCaHLTBitMon_ParallelJobs.p
p
Definition: AlCaHLTBitMon_ParallelJobs.py:153
reco::TrackBase::undefQuality
Definition: TrackBase.h:151
deep_tau::DeepTauBase::BasicDiscriminator
BasicDiscriminator
Definition: DeepTauBase.h:115
TransientRecHitRecord.h
TrajectoryStateOnSurface::globalPosition
GlobalPoint globalPosition() const
Definition: TrajectoryStateOnSurface.h:65
c_cm_ns
constexpr double c_cm_ns
Definition: Phase2TrackerDigitizerAlgorithm.h:56
TrackExtenderWithMTDT::estMaxChi2_
const float estMaxChi2_
Definition: TrackExtenderWithMTD.cc:409
pos
Definition: PixelAliasList.h:18
TrackExtenderWithMTDT::btlMatchTimeChi2Token
edm::EDPutToken btlMatchTimeChi2Token
Definition: TrackExtenderWithMTD.cc:372
RefitDirection::GeometricalDirection
GeometricalDirection
Definition: RefitDirection.h:15
FreeTrajectoryState::charge
TrackCharge charge() const
Definition: FreeTrajectoryState.h:69
HLT_FULL_cff.InputTag
InputTag
Definition: HLT_FULL_cff.py:89285
Rounding.h
edm::ParameterSetDescription
Definition: ParameterSetDescription.h:52
TrackExtenderWithMTDT::sigmatmtdToken
edm::EDPutToken sigmatmtdToken
Definition: TrackExtenderWithMTD.cc:376
TrackExtenderWithMTDT::fillDescriptions
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
Definition: TrackExtenderWithMTD.cc:485
oppositeToMomentum
Definition: PropagationDirection.h:4
EDProducer.h
Surface
Definition: Surface.h:36
TrackExtenderWithMTDT::tmtdOrigTrkToken
edm::EDPutToken tmtdOrigTrkToken
Definition: TrackExtenderWithMTD.cc:382
TransientTrackingRecHit.h
TrajectoryMeasurement::updatedState
TrajectoryStateOnSurface const & updatedState() const
Definition: TrajectoryMeasurement.h:184
TrackExtenderWithMTDT::btlMatchChi2Token
edm::EDPutToken btlMatchChi2Token
Definition: TrackExtenderWithMTD.cc:370
reco
fixed size matrix
Definition: AlignmentAlgorithmBase.h:45
MTDTrayBarrelLayer.h
FreeTrajectoryState::position
GlobalPoint position() const
Definition: FreeTrajectoryState.h:67
edm::LogInfo
Log< level::Info, false > LogInfo
Definition: MessageLogger.h:125
TrackExtenderWithMTDT::builder_
edm::ESHandle< TransientTrackBuilder > builder_
Definition: TrackExtenderWithMTD.cc:397
TransientTrack.h
findQualityFiles.v
v
Definition: findQualityFiles.py:179
hltPixelTracks_cff.chi2
chi2
Definition: hltPixelTracks_cff.py:25
TrackExtenderWithMTDT::genVtxPositionToken_
edm::EDGetTokenT< GlobalPoint > genVtxPositionToken_
Definition: TrackExtenderWithMTD.cc:389
ETLDetId.h
PV3DBase::mag2
T mag2() const
Definition: PV3DBase.h:63
TrackExtenderWithMTDT::pathLengthToken
edm::EDPutToken pathLengthToken
Definition: TrackExtenderWithMTD.cc:374
BoundDisk
AlCaHLTBitMon_QueryRunRegistry.comp
comp
Definition: AlCaHLTBitMon_QueryRunRegistry.py:249
rpcPointValidation_cfi.recHit
recHit
Definition: rpcPointValidation_cfi.py:7
TrackExtenderWithMTDT::hitbuilderToken_
edm::ESGetToken< TransientTrackingRecHitBuilder, TransientRecHitRecord > hitbuilderToken_
Definition: TrackExtenderWithMTD.cc:400
TrackExtenderWithMTDT::bsTimeSpread_
const float bsTimeSpread_
Definition: TrackExtenderWithMTD.cc:419
TrackExtenderWithMTDT::buildTrack
reco::Track buildTrack(const reco::Track &, const Trajectory &, const Trajectory &, const reco::BeamSpot &, const MagneticField *field, const Propagator *prop, bool hasMTD, float &pathLength, float &tmtdOut, float &sigmatmtdOut) const
Definition: TrackExtenderWithMTD.cc:973
TrackExtenderWithMTDT::fillMatchingHits
void fillMatchingHits(const DetLayer *, const TrajectoryStateOnSurface &, const Trajectory &, const double, const double, const MTDTrackingDetSetVector &, const Propagator *, const reco::BeamSpot &, const double &, const bool, TransientTrackingRecHit::ConstRecHitContainer &, MTDHitMatchingInfo &) const
Definition: TrackExtenderWithMTD.cc:904
groupFilesInBlocks.reverse
reverse
Definition: groupFilesInBlocks.py:131
edm::Ref< TrackExtraCollection >
TrackExtenderWithMTDT::updateTraj_
const bool updateTraj_
Definition: TrackExtenderWithMTD.cc:393
TrackExtenderWithMTDT::propToken_
edm::ESGetToken< Propagator, TrackingComponentsRecord > propToken_
Definition: TrackExtenderWithMTD.cc:406
PV3DBase::z
T z() const
Definition: PV3DBase.h:61
ndof
Definition: HIMultiTrackSelector.h:49
TrackExtenderWithMTDT::buildTrackExtra
reco::TrackExtra buildTrackExtra(const Trajectory &trajectory) const
Definition: TrackExtenderWithMTD.cc:1112
TrackExtenderWithMTDT::estMaxNSigma_
const float estMaxNSigma_
Definition: TrackExtenderWithMTD.cc:410
dt
float dt
Definition: AMPTWrapper.h:136
TrackExtenderWithMTDT::useVertex_
const bool useVertex_
Definition: TrackExtenderWithMTD.cc:416
Propagator
Definition: Propagator.h:44
DetId
Definition: DetId.h:17
reco::TrackExtra
Definition: TrackExtra.h:26
GeomDet::surface
const Plane & surface() const
The nominal surface of the GeomDet.
Definition: GeomDet.h:37
TrajectoryStateOnSurface
Definition: TrajectoryStateOnSurface.h:16
MakerMacros.h
cms::cuda::bs
bs
Definition: HistoContainer.h:127
dqmdumpme.last
last
Definition: dqmdumpme.py:56
TrackExtenderWithMTDT::ttopoToken_
edm::ESGetToken< TrackerTopology, TrackerTopologyRcd > ttopoToken_
Definition: TrackExtenderWithMTD.cc:407
Track.h
TrajectoryStateOnSurface::freeState
FreeTrajectoryState const * freeState(bool withErrors=true) const
Definition: TrajectoryStateOnSurface.h:58
TrackExtenderWithMTDT::tryETLLayers
TransientTrackingRecHit::ConstRecHitContainer tryETLLayers(const TrajectoryStateOnSurface &, const Trajectory &traj, const double, const double, const MTDTrackingDetSetVector &, const MTDDetLayerGeometry *, const MagneticField *field, const Propagator *prop, const reco::BeamSpot &bs, const double vtxTime, const bool matchVertex, MTDHitMatchingInfo &bestHit) const
Definition: TrackExtenderWithMTD.cc:866
TrackExtenderWithMTDT::vtxToken_
edm::EDGetTokenT< VertexCollection > vtxToken_
Definition: TrackExtenderWithMTD.cc:391
PVValHelper::estimator
estimator
Definition: PVValidationHelpers.h:45
TrackFwd.h
DEFINE_FWK_MODULE
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
config.ordering
ordering
Definition: config.py:7
edm::ConfigurationDescriptions::add
void add(std::string const &label, ParameterSetDescription const &psetDescription)
Definition: ConfigurationDescriptions.cc:57
TrackExtenderWithMTDT::t0OrigTrkToken
edm::EDPutToken t0OrigTrkToken
Definition: TrackExtenderWithMTD.cc:379
TrackExtenderWithMTDT::TrackExtenderWithMTDT
TrackExtenderWithMTDT(const ParameterSet &pset)
Definition: TrackExtenderWithMTD.cc:423
edm::EDPutToken
Definition: EDPutToken.h:38
FrontierCondition_GT_autoExpress_cfi.t0
t0
Definition: FrontierCondition_GT_autoExpress_cfi.py:149
Bounds::inside
virtual bool inside(const Local3DPoint &) const =0
Determine if the point is inside the bounds.
TrackExtenderWithMTDT::TrackType
TrackCollection::value_type TrackType
Definition: TrackExtenderWithMTD.cc:286
FreeTrajectoryState::curvilinearError
const CurvilinearTrajectoryError & curvilinearError() const
Definition: FreeTrajectoryState.h:89
mathSSE::sqrt
T sqrt(T t)
Definition: SSEVec.h:19
Surface::bounds
const Bounds & bounds() const
Definition: Surface.h:87
fillDescriptions
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
reco::BeamSpot
Definition: BeamSpot.h:21
reco::Track
Definition: Track.h:27
IdealMagneticFieldRecord.h
edm::ESHandle< TransientTrackBuilder >
reco::TrackExtraCollection
std::vector< TrackExtra > TrackExtraCollection
collection of TrackExtra objects
Definition: TrackExtraFwd.h:10
TrackExtenderWithMTDT::hitbuilder_
edm::ESHandle< TransientTrackingRecHitBuilder > hitbuilder_
Definition: TrackExtenderWithMTD.cc:399
TrackExtenderWithMTDT::fillValueMap
void fillValueMap(edm::Event &iEvent, const H &handle, const std::vector< T > &vec, const edm::EDPutToken &token) const
Definition: TrackExtenderWithMTD.cc:525
GlobalPoint
Global3DPoint GlobalPoint
Definition: GlobalPoint.h:10
Traj2TrackHits.h
Point3DBase< float, GlobalTag >
TrackExtenderWithMTDT::assocOrigTrkToken
edm::EDPutToken assocOrigTrkToken
Definition: TrackExtenderWithMTD.cc:384
ParameterSetDescription.h
GeomDet::toLocal
LocalPoint toLocal(const GlobalPoint &gp) const
Conversion to the R.F. of the GeomDet.
Definition: GeomDet.h:58
TrackExtenderWithMTDT::bsToken_
edm::EDGetTokenT< reco::BeamSpot > bsToken_
Definition: TrackExtenderWithMTD.cc:388
MTDTrackingRecHit::timeError
float timeError() const
Definition: MTDTrackingRecHit.h:28
first
auto first
Definition: CAHitNtupletGeneratorKernelsImpl.h:112
GlobalTrajectoryParameters::momentum
GlobalVector momentum() const
Definition: GlobalTrajectoryParameters.h:65
edm::ConfigurationDescriptions
Definition: ConfigurationDescriptions.h:28
MTDTrackingRecHit.h
phase1PixelTopology::layer
constexpr std::array< uint8_t, layerIndexSize > layer
Definition: phase1PixelTopology.h:99
AlCaHLTBitMon_QueryRunRegistry.string
string
Definition: AlCaHLTBitMon_QueryRunRegistry.py:256
Vertex.h
FastTrackerRecHitMaskProducer_cfi.recHits
recHits
Definition: FastTrackerRecHitMaskProducer_cfi.py:8
RefitDirection::undetermined
Definition: RefitDirection.h:15
edm::View
Definition: CaloClusterFwd.h:14
TrackExtenderWithMTDT::propagator_
const std::string propagator_
Definition: TrackExtenderWithMTD.cc:394
TransientTrackBuilder.h
LogDebug
#define LogDebug(id)
Definition: MessageLogger.h:233
edm::ParameterSet
Definition: ParameterSet.h:47
math::XYZPoint
XYZPointD XYZPoint
point in space with cartesian internal representation
Definition: Point3D.h:12
TrackExtenderWithMTDT::gtg_
edm::ESHandle< GlobalTrackingGeometry > gtg_
Definition: TrackExtenderWithMTD.cc:401
Trajectory::ndof
int ndof(bool bon=true) const
Definition: Trajectory.cc:97
TrackExtenderWithMTDT::theTransformer
std::unique_ptr< TrackTransformer > theTransformer
Definition: TrackExtenderWithMTD.cc:396
MTDRingForwardDoubleLayer.h
Trajectory::RecHitContainer
ConstRecHitContainer RecHitContainer
Definition: Trajectory.h:42
TSCBLBuilderWithPropagator.h
Event.h
TrackExtenderWithMTDT::sigmatmtdOrigTrkToken
edm::EDPutToken sigmatmtdOrigTrkToken
Definition: TrackExtenderWithMTD.cc:383
tracks
const uint32_t *__restrict__ const HitContainer *__restrict__ TkSoA *__restrict__ tracks
Definition: CAHitNtupletGeneratorKernelsImpl.h:159
TrackingRecHit::ConstRecHitContainer
std::vector< ConstRecHitPointer > ConstRecHitContainer
Definition: TrackingRecHit.h:32
SiStripPI::max
Definition: SiStripPayloadInspectorHelper.h:169
MTDDetRing.h
TrackExtenderWithMTDT::hitsToken_
edm::EDGetTokenT< MTDTrackingDetSetVector > hitsToken_
Definition: TrackExtenderWithMTD.cc:387
GeantUnits.h
Trajectory::lastMeasurement
TrajectoryMeasurement const & lastMeasurement() const
Definition: Trajectory.h:150
trigObjTnPSource_cfi.filler
filler
Definition: trigObjTnPSource_cfi.py:21
Traj2TrackHits
Definition: Traj2TrackHits.h:16
TrackExtenderWithMTDT::mtdRecHitBuilder_
const std::string mtdRecHitBuilder_
Definition: TrackExtenderWithMTD.cc:394
FastTime
Definition: ForwardSubdetector.h:6
TrackExtenderWithMTDT::tracksToken_
edm::EDGetTokenT< InputCollection > tracksToken_
Definition: TrackExtenderWithMTD.cc:386
MTDTrackingRecHit
A 2D TrackerRecHit with time and time error information.
Definition: MTDTrackingRecHit.h:10
math::XYZVector
XYZVectorD XYZVector
spatial vector with cartesian internal representation
Definition: Vector3D.h:31
position
static int position[264][3]
Definition: ReadPGInfo.cc:289
LorentzVector.h
TrackExtenderWithMTDT::sigmat0OrigTrkToken
edm::EDPutToken sigmat0OrigTrkToken
Definition: TrackExtenderWithMTD.cc:380
createfilelist.int
int
Definition: createfilelist.py:10
MetAnalyzer.pv
def pv(vc)
Definition: MetAnalyzer.py:7
iEvent
int iEvent
Definition: GenABIO.cc:224
GsfTrack.h
edm::EventSetup::getHandle
ESHandle< T > getHandle(const ESGetToken< T, R > &iToken) const
Definition: EventSetup.h:155
edm::stream::EDProducer
Definition: EDProducer.h:38
TrackExtenderWithMTDT::betaOrigTrkToken
edm::EDPutToken betaOrigTrkToken
Definition: TrackExtenderWithMTD.cc:378
cms_rounding::roundIfNear0
constexpr valType roundIfNear0(valType value, double tolerance=1.e-7)
Definition: Rounding.h:11
MagneticField.h
TrackTransformer.h
edm::EventSetup
Definition: EventSetup.h:58
MTDRecoGeometryRecord.h
reco::JetExtendedAssociation::value_type
Container::value_type value_type
Definition: JetExtendedAssociation.h:30
edm::LogError
Log< level::Error, false > LogError
Definition: MessageLogger.h:123
TransientTrackRecord.h
MTDDetLayerGeometry
Definition: MTDDetLayerGeometry.h:22
TrackExtenderWithMTDT::tryBTLLayers
TransientTrackingRecHit::ConstRecHitContainer tryBTLLayers(const TrajectoryStateOnSurface &, const Trajectory &traj, const double, const double, const MTDTrackingDetSetVector &, const MTDDetLayerGeometry *, const MagneticField *field, const Propagator *prop, const reco::BeamSpot &bs, const double vtxTime, const bool matchVertex, MTDHitMatchingInfo &bestHit) const
Definition: TrackExtenderWithMTD.cc:843
edm::EventSetup::getTransientHandle
ESTransientHandle< T > getTransientHandle(const ESGetToken< T, R > &iToken) const
Definition: EventSetup.h:166
MTDDetLayerGeometry::allBTLLayers
const std::vector< const DetLayer * > & allBTLLayers() const
return the BTL DetLayers (barrel), inside-out
Definition: MTDDetLayerGeometry.cc:89
edm::ESGetToken< TransientTrackBuilder, TransientTrackRecord >
MTDTrackingRecHit::time
float time() const
Definition: MTDTrackingRecHit.h:27
TrackTransformer::fillPSetDescription
static void fillPSetDescription(edm::ParameterSetDescription &descriptions, bool DoPredictionsOnly=false, const std::string &Fitter="KFFitterForRefitInsideOut", const std::string &Smoother="KFSmootherForRefitInsideOut", const std::string &Propagator="SmartPropagatorAnyRK", const std::string &RefitDirection="alongMomentum", bool RefitRPCHits=true, const std::string &TrackerRecHitBuilder="WithTrackAngle", const std::string &MuonRecHitBuilder="MuonRecHitBuilder", const std::string &MTDRecHitBuilder="MTDRecHitBuilder")
fillDescriptions
Definition: TrackTransformer.cc:58
Trajectory::measurements
DataContainer const & measurements() const
Definition: Trajectory.h:178
reco::TrackBase::algo
TrackAlgorithm algo() const
Definition: TrackBase.h:547
VertexFwd.h
TrajectoryMeasurement::recHit
ConstRecHitPointer const & recHit() const
Definition: TrajectoryMeasurement.h:190
TSCBLBuilderWithPropagator
Definition: TSCBLBuilderWithPropagator.h:16
Trajectory.h
Trajectory::recHits
ConstRecHitContainer recHits() const
Definition: Trajectory.h:186
edmNew::DetSetVector
Definition: DetSetNew.h:13
SiPixelPI::two
Definition: SiPixelPayloadInspectorHelper.h:39
submitPVResolutionJobs.desc
string desc
Definition: submitPVResolutionJobs.py:251
TrackExtenderWithMTDT::dumpLayer
string dumpLayer(const DetLayer *layer) const
Definition: TrackExtenderWithMTD.cc:1188
eostools.move
def move(src, dest)
Definition: eostools.py:511
std
Definition: JetResolutionObject.h:76
TrackExtenderWithMTDT::transientTrackBuilder_
const std::string transientTrackBuilder_
Definition: TrackExtenderWithMTD.cc:394
GsfTrackFwd.h
Trajectory::firstMeasurement
TrajectoryMeasurement const & firstMeasurement() const
Definition: Trajectory.h:166
MTDDetLayerGeometry.h
reco::TransientTrack
Definition: TransientTrack.h:19
TrackExtenderWithMTDT::pathLengthOrigTrkToken
edm::EDPutToken pathLengthOrigTrkToken
Definition: TrackExtenderWithMTD.cc:381
FreeTrajectoryState
Definition: FreeTrajectoryState.h:27
TrackExtenderWithMTDT::produce
void produce(edm::Event &ev, const edm::EventSetup &es) final
Definition: TrackExtenderWithMTD.cc:537
reco::TrackExtraBase::Chi2sFive
std::vector< unsigned char > Chi2sFive
Definition: TrackExtraBase.h:25
c_inv
constexpr double c_inv
Definition: Phase2TrackerDigitizerAlgorithm.h:57
TrajectoryMeasurement::ConstRecHitPointer
TrackingRecHit::ConstRecHitPointer ConstRecHitPointer
Definition: TrajectoryMeasurement.h:28
PVValHelper::dz
Definition: PVValidationHelpers.h:51
Trajectory
Definition: Trajectory.h:38
Frameworkfwd.h
TrackExtenderWithMTDT::checkRecHitsOrdering
RefitDirection::GeometricalDirection checkRecHitsOrdering(TransientTrackingRecHit::ConstRecHitContainer const &recHits) const
Definition: TrackExtenderWithMTD.cc:337
MTDDetTray.h
TrackingComponentsRecord.h
MTDDetId
Detector identifier base class for the MIP Timing Layer.
Definition: MTDDetId.h:21
ev
bool ev
Definition: Hydjet2Hadronizer.cc:95
TrajectoryStateOnSurface::curvilinearError
const CurvilinearTrajectoryError & curvilinearError() const
Definition: TrajectoryStateOnSurface.h:72
TrackExtenderWithMTDT::pOrigTrkToken
edm::EDPutToken pOrigTrkToken
Definition: TrackExtenderWithMTD.cc:377
RefitDirection::insideOut
Definition: RefitDirection.h:15
TrackExtenderWithMTDT::gtgToken_
edm::ESGetToken< GlobalTrackingGeometry, GlobalTrackingGeometryRecord > gtgToken_
Definition: TrackExtenderWithMTD.cc:402
EventSetup.h
BoundCylinder
edm::ParameterSet::getParameter
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
Propagator::propagateWithPath
virtual std::pair< TrajectoryStateOnSurface, double > propagateWithPath(const FreeTrajectoryState &, const Surface &) const final
Definition: Propagator.cc:10
Trajectory::closestMeasurement
TrajectoryMeasurement const & closestMeasurement(GlobalPoint) const
Definition: Trajectory.cc:256
TrajectoryStateOnSurface::surface
const SurfaceType & surface() const
Definition: TrajectoryStateOnSurface.h:78
geant_units::operators::convertMmToCm
constexpr NumType convertMmToCm(NumType millimeters)
Definition: GeantUnits.h:62
MillePedeFileConverter_cfg.out
out
Definition: MillePedeFileConverter_cfg.py:31
TrackExtenderWithMTD
TrackExtenderWithMTDT< reco::TrackCollection > TrackExtenderWithMTD
Definition: TrackExtenderWithMTD.cc:1210
MTDDetLayerGeometry::allETLLayers
const std::vector< const DetLayer * > & allETLLayers() const
return the ETL DetLayers (endcap), -Z to +Z
Definition: MTDDetLayerGeometry.cc:91
mps_fire.result
result
Definition: mps_fire.py:311
TrackExtenderWithMTDT::etlMatchTimeChi2Token
edm::EDPutToken etlMatchTimeChi2Token
Definition: TrackExtenderWithMTD.cc:373
edm::helper::Filler
Definition: ValueMap.h:22
MTDChannelIdentifier.h
funct::abs
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
LogTrace
#define LogTrace(id)
Definition: MessageLogger.h:234
TrajectoryStateOnSurface::globalParameters
const GlobalTrajectoryParameters & globalParameters() const
Definition: TrajectoryStateOnSurface.h:64
TrackExtenderWithMTDT::btlChi2Cut_
const float btlChi2Cut_
Definition: TrackExtenderWithMTD.cc:411
operator<
bool operator<(DTCELinkId const &lhs, DTCELinkId const &rhs)
Definition: DTCELinkId.h:70
TrajectoryStateClosestToBeamLine::isValid
bool isValid() const
Definition: TrajectoryStateClosestToBeamLine.h:50
ParameterSet.h
TrackExtenderWithMTDT::dzCut_
const float dzCut_
Definition: TrackExtenderWithMTD.cc:418
TrajectoryStateClosestToBeamLine::trackStateAtPCA
FTS const & trackStateAtPCA() const
Definition: TrajectoryStateClosestToBeamLine.h:32
DetId::Forward
Definition: DetId.h:30
JetChargeProducer_cfi.exp
exp
Definition: JetChargeProducer_cfi.py:6
TrackExtenderWithMTDT
Definition: TrackExtenderWithMTD.cc:284
edm::Event
Definition: Event.h:73
TrackExtenderWithMTDT::btlTimeChi2Cut_
const float btlTimeChi2Cut_
Definition: TrackExtenderWithMTD.cc:412
MTDTransientTrackingRecHitBuilder.h
MagneticField
Definition: MagneticField.h:19
volumeBasedMagneticField_160812_cfi.magfield
magfield
Definition: volumeBasedMagneticField_160812_cfi.py:11
TrackExtenderWithMTDT::dlgeoToken_
edm::ESGetToken< MTDDetLayerGeometry, MTDRecoGeometryRecord > dlgeoToken_
Definition: TrackExtenderWithMTD.cc:404
RefitDirection::outsideIn
Definition: RefitDirection.h:15
Topology.h
reco::TrackExtraBase::TrajParams
std::vector< LocalTrajectoryParameters > TrajParams
Definition: TrackExtraBase.h:24
edm::InputTag
Definition: InputTag.h:15
alongMomentum
Definition: PropagationDirection.h:4
hgcalTopologyTester_cfi.layers
layers
Definition: hgcalTopologyTester_cfi.py:8
TrackExtenderWithMTDT::etlChi2Cut_
const float etlChi2Cut_
Definition: TrackExtenderWithMTD.cc:413
TrackExtenderWithMTDT::builderToken_
edm::ESGetToken< TransientTrackBuilder, TransientTrackRecord > builderToken_
Definition: TrackExtenderWithMTD.cc:398
reco::Vertex
Definition: Vertex.h:35
edm::ParameterSet::getParameterSet
ParameterSet const & getParameterSet(std::string const &) const
Definition: ParameterSet.cc:2128
TrajectoryStateOnSurface::isValid
bool isValid() const
Definition: TrajectoryStateOnSurface.h:54
TrackExtenderWithMTDT::tmtdToken
edm::EDPutToken tmtdToken
Definition: TrackExtenderWithMTD.cc:375
hit
Definition: SiStripHitEffFromCalibTree.cc:88
muonDTDigis_cfi.pset
pset
Definition: muonDTDigis_cfi.py:27
edm::OwnVector< TrackingRecHit >
TrackExtenderWithMTDT::InputCollection
edm::View< TrackType > InputCollection
Definition: TrackExtenderWithMTD.cc:287
metname
const std::string metname
Definition: MuonSeedOrcaPatternRecognition.cc:40
unpackBuffers-CaloStage2.token
token
Definition: unpackBuffers-CaloStage2.py:316