CMS 3D CMS Logo

List of all members | Public Types | Public Member Functions | Static Public Member Functions | Private Attributes | Static Private Attributes
TrackExtenderWithMTDT< TrackCollection > Class Template Reference
Inheritance diagram for TrackExtenderWithMTDT< TrackCollection >:
edm::stream::EDProducer<>

Public Types

typedef edm::View< TrackTypeInputCollection
 
typedef TrackCollection::value_type TrackType
 
- Public Types inherited from edm::stream::EDProducer<>
typedef CacheContexts< T... > CacheTypes
 
typedef CacheTypes::GlobalCache GlobalCache
 
typedef AbilityChecker< T... > HasAbility
 
typedef CacheTypes::LuminosityBlockCache LuminosityBlockCache
 
typedef LuminosityBlockContextT< LuminosityBlockCache, RunCache, GlobalCacheLuminosityBlockContext
 
typedef CacheTypes::LuminosityBlockSummaryCache LuminosityBlockSummaryCache
 
typedef CacheTypes::RunCache RunCache
 
typedef RunContextT< RunCache, GlobalCacheRunContext
 
typedef CacheTypes::RunSummaryCache RunSummaryCache
 

Public Member Functions

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
 
reco::TrackExtra buildTrackExtra (const Trajectory &trajectory) const
 
RefitDirection::GeometricalDirection checkRecHitsOrdering (TransientTrackingRecHit::ConstRecHitContainer const &recHits) const
 
string dumpLayer (const DetLayer *layer) const
 
template<class H , class T >
void fillValueMap (edm::Event &iEvent, const H &handle, const std::vector< T > &vec, const std::string &name) const
 
void produce (edm::Event &ev, const edm::EventSetup &es) final
 
 TrackExtenderWithMTDT (const ParameterSet &pset)
 
TransientTrackingRecHit::ConstRecHitContainer tryBTLLayers (const TrackType &, const MTDTrackingDetSetVector &, const MTDDetLayerGeometry *, const MagneticField *field, const Propagator *prop) const
 
TransientTrackingRecHit::ConstRecHitContainer tryETLLayers (const TrackType &, const MTDTrackingDetSetVector &, const MTDDetLayerGeometry *, const MagneticField *field, const Propagator *prop) const
 
- Public Member Functions inherited from edm::stream::EDProducer<>
 EDProducer ()=default
 
bool hasAbilityToProduceInBeginLumis () const final
 
bool hasAbilityToProduceInBeginRuns () const final
 
bool hasAbilityToProduceInEndLumis () const final
 
bool hasAbilityToProduceInEndRuns () const final
 

Static Public Member Functions

static void fillDescriptions (edm::ConfigurationDescriptions &descriptions)
 

Private Attributes

edm::EDGetTokenT< reco::BeamSpotbsToken_
 
edm::ESHandle< TransientTrackBuilderbuilder
 
edm::ESHandle< GlobalTrackingGeometrygtg
 
edm::ESHandle< TransientTrackingRecHitBuilderhitbuilder
 
edm::EDGetTokenT< MTDTrackingDetSetVectorhitsToken_
 
const std::string mtdRecHitBuilder_
 
edm::ESHandle< Propagatorprop
 
const std::string propagator_
 
std::unique_ptr< MeasurementEstimatortheEstimator
 
std::unique_ptr< TrackTransformertheTransformer
 
edm::EDGetTokenT< InputCollectiontracksToken_
 
const std::string transientTrackBuilder_
 
const bool updateExtra_
 
const bool updatePattern_
 
const bool updateTraj_
 

Static Private Attributes

static char betaOrigTrkName [] = "generalTrackBeta"
 
static char pathLengthName [] = "pathLength"
 
static char pathLengthOrigTrkName [] = "generalTrackPathLength"
 
static char pOrigTrkName [] = "generalTrackp"
 
static char sigmat0OrigTrkName [] = "generalTracksigmat0"
 
static char sigmatmtdName [] = "sigmatmtd"
 
static char sigmatmtdOrigTrkName [] = "generalTracksigmatmtd"
 
static char t0OrigTrkName [] = "generalTrackt0"
 
static char tmtdName [] = "tmtd"
 
static char tmtdOrigTrkName [] = "generalTracktmtd"
 

Detailed Description

template<class TrackCollection>
class TrackExtenderWithMTDT< TrackCollection >

Definition at line 60 of file TrackExtenderWithMTD.cc.

Member Typedef Documentation

template<class TrackCollection >
typedef edm::View<TrackType> TrackExtenderWithMTDT< TrackCollection >::InputCollection

Definition at line 63 of file TrackExtenderWithMTD.cc.

template<class TrackCollection >
typedef TrackCollection::value_type TrackExtenderWithMTDT< TrackCollection >::TrackType

Definition at line 62 of file TrackExtenderWithMTD.cc.

Constructor & Destructor Documentation

template<class TrackCollection >
TrackExtenderWithMTDT< TrackCollection >::TrackExtenderWithMTDT ( const ParameterSet pset)

Definition at line 144 of file TrackExtenderWithMTD.cc.

References TrackExtenderWithMTDT< TrackCollection >::betaOrigTrkName, constexpr, edm::ParameterSet::getParameterSet(), beam_dqm_sourceclient-live_cfg::maxChi2, HLTSiStripMonitoring_cff::nSigma, TrackExtenderWithMTDT< TrackCollection >::pathLengthName, TrackExtenderWithMTDT< TrackCollection >::pathLengthOrigTrkName, TrackExtenderWithMTDT< TrackCollection >::pOrigTrkName, TrackExtenderWithMTDT< TrackCollection >::sigmat0OrigTrkName, TrackExtenderWithMTDT< TrackCollection >::sigmatmtdName, TrackExtenderWithMTDT< TrackCollection >::sigmatmtdOrigTrkName, TrackExtenderWithMTDT< TrackCollection >::t0OrigTrkName, TrackExtenderWithMTDT< TrackCollection >::theEstimator, TrackExtenderWithMTDT< TrackCollection >::theTransformer, TrackExtenderWithMTDT< TrackCollection >::tmtdName, and TrackExtenderWithMTDT< TrackCollection >::tmtdOrigTrkName.

145  : tracksToken_(consumes<InputCollection>(iConfig.getParameter<edm::InputTag>("tracksSrc"))),
146  hitsToken_(consumes<MTDTrackingDetSetVector>(iConfig.getParameter<edm::InputTag>("hitsSrc"))),
147  bsToken_(consumes<reco::BeamSpot>(iConfig.getParameter<edm::InputTag>("beamSpotSrc"))),
148  updateTraj_(iConfig.getParameter<bool>("updateTrackTrajectory")),
149  updateExtra_(iConfig.getParameter<bool>("updateTrackExtra")),
150  updatePattern_(iConfig.getParameter<bool>("updateTrackHitPattern")),
151  mtdRecHitBuilder_(iConfig.getParameter<std::string>("MTDRecHitBuilder")),
152  propagator_(iConfig.getParameter<std::string>("Propagator")),
153  transientTrackBuilder_(iConfig.getParameter<std::string>("TransientTrackBuilder")) {
154  constexpr float maxChi2 = 500.;
155  constexpr float nSigma = 10.;
156  theEstimator = std::make_unique<Chi2MeasurementEstimator>(maxChi2, nSigma);
157 
158  theTransformer = std::make_unique<TrackTransformer>(iConfig.getParameterSet("TrackTransformer"));
159 
160  produces<edm::ValueMap<float>>(pathLengthName);
161  produces<edm::ValueMap<float>>(tmtdName);
162  produces<edm::ValueMap<float>>(sigmatmtdName);
163  produces<edm::ValueMap<float>>(pOrigTrkName);
164  produces<edm::ValueMap<float>>(betaOrigTrkName);
165  produces<edm::ValueMap<float>>(t0OrigTrkName);
166  produces<edm::ValueMap<float>>(sigmat0OrigTrkName);
167  produces<edm::ValueMap<float>>(pathLengthOrigTrkName);
168  produces<edm::ValueMap<float>>(tmtdOrigTrkName);
169  produces<edm::ValueMap<float>>(sigmatmtdOrigTrkName);
170 
171  produces<edm::OwnVector<TrackingRecHit>>();
172  produces<reco::TrackExtraCollection>();
173  produces<TrackCollection>();
174 }
edm::EDGetTokenT< reco::BeamSpot > bsToken_
std::unique_ptr< MeasurementEstimator > theEstimator
edm::EDGetTokenT< MTDTrackingDetSetVector > hitsToken_
const std::string mtdRecHitBuilder_
const std::string propagator_
const std::string transientTrackBuilder_
std::unique_ptr< TrackTransformer > theTransformer
edm::EDGetTokenT< InputCollection > tracksToken_
#define constexpr

Member Function Documentation

template<class TrackCollection >
reco::Track TrackExtenderWithMTDT< TrackCollection >::buildTrack ( const reco::Track orig,
const Trajectory traj,
const Trajectory trajWithMtd,
const reco::BeamSpot bs,
const MagneticField field,
const Propagator prop,
bool  hasMTD,
float &  pathLength,
float &  tmtdOut,
float &  sigmatmtdOut 
) const

Definition at line 445 of file TrackExtenderWithMTD.cc.

References funct::abs(), reco::TrackBase::algo(), alongMomentum, FreeTrajectoryState::charge(), Trajectory::chiSquared(), Trajectory::closestMeasurement(), constexpr, FreeTrajectoryState::curvilinearError(), Trajectory::direction(), FastTime, Trajectory::firstMeasurement(), DetId::Forward, TrajectoryStateOnSurface::freeState(), createfilelist::int, TrajectoryStateClosestToBeamLine::isValid(), TrajectoryStateOnSurface::isValid(), Trajectory::lastMeasurement(), m_pi, Trajectory::measurements(), FreeTrajectoryState::momentum(), ndof, Trajectory::ndof(), AlCaHLTBitMon_ParallelJobs::p, FreeTrajectoryState::position(), Propagator::propagateWithPath(), mathSSE::sqrt(), TrajectoryStateOnSurface::surface(), FrontierCondition_GT_autoExpress_cfi::t0, MTDTrackingRecHit::time(), MTDTrackingRecHit::timeError(), TrajectoryStateClosestToBeamLine::trackStateAtPCA(), reco::TrackBase::undefQuality, UNLIKELY, TrackInfoProducer_cfi::updatedState, TrajectoryMeasurement::updatedState(), findQualityFiles::v, PV3DBase< T, PVType, FrameType >::x(), reco::BeamSpot::x0(), PV3DBase< T, PVType, FrameType >::y(), reco::BeamSpot::y0(), PV3DBase< T, PVType, FrameType >::z(), and reco::BeamSpot::z0().

Referenced by TrackExtenderWithMTDT< TrackCollection >::produce().

454  {
455  // get the state closest to the beamline
456  TrajectoryStateOnSurface stateForProjectionToBeamLineOnSurface =
457  traj.closestMeasurement(GlobalPoint(bs.x0(), bs.y0(), bs.z0())).updatedState();
458 
459  if
460  UNLIKELY(!stateForProjectionToBeamLineOnSurface.isValid()) {
461  edm::LogError("CannotPropagateToBeamLine") << "the state on the closest measurement isnot valid. skipping track.";
462  return reco::Track();
463  }
464 
465  constexpr double m_pi = 0.13957018;
466  constexpr double m_pi_inv2 = 1.0 / m_pi / m_pi;
467  constexpr double m_p = 0.9382720813;
468  constexpr double m_p_inv2 = 1.0 / m_p / m_p;
469  constexpr double c_cm_ns = CLHEP::c_light * CLHEP::ns / CLHEP::cm; //[cm/ns]
470  constexpr double c_inv = 1.0 / c_cm_ns;
471 
472  const FreeTrajectoryState& stateForProjectionToBeamLine = *stateForProjectionToBeamLineOnSurface.freeState();
473 
474  TSCBLBuilderWithPropagator tscblBuilder(*thePropagator);
475  TrajectoryStateClosestToBeamLine tscbl = tscblBuilder(stateForProjectionToBeamLine, bs);
476 
477  if
478  UNLIKELY(!tscbl.isValid()) { return reco::Track(); }
479 
481  math::XYZPoint pos(v.x(), v.y(), v.z());
483  math::XYZVector mom(p.x(), p.y(), p.z());
484 
485  int ndof = traj.ndof();
486 
487  double t0 = 0.;
488  double covt0t0 = -1.;
489  pathLengthOut = -1.f; // if there is no MTD flag the pathlength with -1
490  tmtdOut = 0.f;
491  sigmatmtdOut = -1.f;
492  double betaOut = 0.;
493  double covbetabeta = -1.;
494 
495  //compute path length for time backpropagation, using first MTD hit for the momentum
496  if (hasMTD) {
497  bool validpropagation = true;
498  double pathlength = 0.;
499  double pathlength1 = 0.;
500  double pathlength2 = 0.;
501  for (auto it = trajWithMtd.measurements().begin(); it != trajWithMtd.measurements().end() - 1; ++it) {
502  const auto& propresult = thePropagator->propagateWithPath(it->updatedState(), (it + 1)->updatedState().surface());
503  double layerpathlength = std::abs(propresult.second);
504  if (layerpathlength == 0.) {
505  validpropagation = false;
506  }
507  pathlength1 += layerpathlength;
508  }
509 
510  double thit = 0.;
511  double thiterror = -1.;
512  bool validmtd = false;
513  if (trajWithMtd.direction() == alongMomentum) {
514  for (auto it = trajWithMtd.measurements().begin(); it != trajWithMtd.measurements().end(); ++it) {
515  bool ismtd = it->recHit()->geographicalId().det() == DetId::Forward &&
516  ForwardSubdetector(it->recHit()->geographicalId().subdetId()) == FastTime;
517  if (ismtd) {
518  const auto& propresult2 = thePropagator->propagateWithPath(
519  tscbl.trackStateAtPCA(), trajWithMtd.firstMeasurement().updatedState().surface());
520  pathlength2 = propresult2.second;
521  if (pathlength2 == 0.) {
522  validpropagation = false;
523  }
524  pathlength = pathlength1 + pathlength2;
525  const MTDTrackingRecHit* mtdhit = static_cast<const MTDTrackingRecHit*>(it->recHit()->hit());
526  thit = mtdhit->time();
527  thiterror = mtdhit->timeError();
528  validmtd = true;
529  break;
530  }
531  }
532  } else {
533  for (auto it = trajWithMtd.measurements().rbegin(); it != trajWithMtd.measurements().rend(); ++it) {
534  bool ismtd = it->recHit()->geographicalId().det() == DetId::Forward &&
535  ForwardSubdetector(it->recHit()->geographicalId().subdetId()) == FastTime;
536  if (ismtd) {
537  const auto& propresult2 = thePropagator->propagateWithPath(
538  tscbl.trackStateAtPCA(), trajWithMtd.lastMeasurement().updatedState().surface());
539  pathlength2 = propresult2.second;
540  if (pathlength2 == 0.) {
541  validpropagation = false;
542  }
543  pathlength = pathlength1 + pathlength2;
544  const MTDTrackingRecHit* mtdhit = static_cast<const MTDTrackingRecHit*>(it->recHit()->hit());
545  thit = mtdhit->time();
546  thiterror = mtdhit->timeError();
547  validmtd = true;
548  break;
549  }
550  }
551  }
552 
553  if (validmtd && validpropagation) {
554  double magp2 = p.mag2();
555 
556  double gammasq_pi = 1. + magp2 * m_pi_inv2;
557  double beta_pi = std::sqrt(1. - 1. / gammasq_pi);
558  double dt_pi = pathlength / beta_pi * c_inv;
559 
560  double gammasq_p = 1. + magp2 * m_p_inv2;
561  double beta_p = std::sqrt(1. - 1. / gammasq_p);
562  double dt_p = pathlength / beta_p * c_inv;
563 
564  double dterror = dt_p - dt_pi;
565  double betaerror = beta_p - beta_pi;
566 
567  pathLengthOut = pathlength; // set path length if we've got a timing hit
568  tmtdOut = thit;
569  sigmatmtdOut = thiterror;
570  t0 = thit - dt_pi;
571  covt0t0 = thiterror * thiterror + dterror * dterror;
572  betaOut = beta_pi;
573  covbetabeta = betaerror * betaerror;
574  }
575  }
576 
577  return reco::Track(traj.chiSquared(),
578  int(ndof),
579  pos,
580  mom,
581  tscbl.trackStateAtPCA().charge(),
583  orig.algo(),
585  t0,
586  betaOut,
587  covt0t0,
588  covbetabeta);
589 }
double z0() const
z coordinate
Definition: BeamSpot.h:65
float time() const
Global3DPoint GlobalPoint
Definition: GlobalPoint.h:10
T y() const
Definition: PV3DBase.h:60
TrackCharge charge() const
TrajectoryMeasurement const & closestMeasurement(GlobalPoint) const
Definition: Trajectory.cc:256
ForwardSubdetector
const CurvilinearTrajectoryError & curvilinearError() const
PropagationDirection const & direction() const
Definition: Trajectory.cc:133
TrackAlgorithm algo() const
Definition: TrackBase.h:526
DataContainer const & measurements() const
Definition: Trajectory.h:178
const SurfaceType & surface() const
T sqrt(T t)
Definition: SSEVec.h:19
TrajectoryMeasurement const & lastMeasurement() const
Definition: Trajectory.h:150
FreeTrajectoryState const * freeState(bool withErrors=true) const
T z() const
Definition: PV3DBase.h:61
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
GlobalVector momentum() const
GlobalPoint position() const
int ndof(bool bon=true) const
Definition: Trajectory.cc:97
TrajectoryMeasurement const & firstMeasurement() const
Definition: Trajectory.h:166
XYZVectorD XYZVector
spatial vector with cartesian internal representation
Definition: Vector3D.h:31
XYZPointD XYZPoint
point in space with cartesian internal representation
Definition: Point3D.h:12
A 2D TrackerRecHit with time and time error information.
float chiSquared() const
Definition: Trajectory.h:241
double y0() const
y coordinate
Definition: BeamSpot.h:63
TrajectoryStateOnSurface const & updatedState() const
#define UNLIKELY(x)
Definition: Likely.h:21
float timeError() const
T x() const
Definition: PV3DBase.h:59
#define constexpr
#define m_pi
Definition: RPCConst.cc:8
double x0() const
x coordinate
Definition: BeamSpot.h:61
template<class TrackCollection >
reco::TrackExtra TrackExtenderWithMTDT< TrackCollection >::buildTrackExtra ( const Trajectory trajectory) const

Definition at line 592 of file TrackExtenderWithMTD.cc.

References alongMomentum, Surface::bounds(), TrajectoryStateOnSurface::curvilinearError(), Trajectory::direction(), Trajectory::firstMeasurement(), TrajectoryStateOnSurface::globalParameters(), TrackExtenderWithMTDT< TrackCollection >::gtg, GlobalTrackingGeometry::idToDet(), Bounds::inside(), Trajectory::lastMeasurement(), LogTrace, metname, GlobalTrajectoryParameters::momentum(), oppositeToMomentum, AlCaHLTBitMon_ParallelJobs::p, GlobalTrajectoryParameters::position(), TrajectoryMeasurement::recHit(), Trajectory::recHits(), Trajectory::seedRef(), GeomDet::surface(), GeomDet::toLocal(), TrajectoryMeasurement::updatedState(), findQualityFiles::v, PV3DBase< T, PVType, FrameType >::x(), PV3DBase< T, PVType, FrameType >::y(), and PV3DBase< T, PVType, FrameType >::z().

Referenced by TrackExtenderWithMTDT< TrackCollection >::produce().

592  {
593  static const string metname = "TrackExtenderWithMTD";
594 
595  const Trajectory::RecHitContainer transRecHits = trajectory.recHits();
596 
597  // put the collection of TrackingRecHit in the event
598 
599  // sets the outermost and innermost TSOSs
600  // ToDo: validation for track states with MTD
601  TrajectoryStateOnSurface outerTSOS;
602  TrajectoryStateOnSurface innerTSOS;
603  unsigned int innerId = 0, outerId = 0;
605  DetId outerDetId;
606 
607  if (trajectory.direction() == alongMomentum) {
608  LogTrace(metname) << "alongMomentum";
609  outerTSOS = trajectory.lastMeasurement().updatedState();
610  innerTSOS = trajectory.firstMeasurement().updatedState();
611  outerId = trajectory.lastMeasurement().recHit()->geographicalId().rawId();
612  innerId = trajectory.firstMeasurement().recHit()->geographicalId().rawId();
613  outerRecHit = trajectory.lastMeasurement().recHit();
614  outerDetId = trajectory.lastMeasurement().recHit()->geographicalId();
615  } else if (trajectory.direction() == oppositeToMomentum) {
616  LogTrace(metname) << "oppositeToMomentum";
617  outerTSOS = trajectory.firstMeasurement().updatedState();
618  innerTSOS = trajectory.lastMeasurement().updatedState();
619  outerId = trajectory.firstMeasurement().recHit()->geographicalId().rawId();
620  innerId = trajectory.lastMeasurement().recHit()->geographicalId().rawId();
621  outerRecHit = trajectory.firstMeasurement().recHit();
622  outerDetId = trajectory.firstMeasurement().recHit()->geographicalId();
623  } else
624  LogError(metname) << "Wrong propagation direction!";
625 
626  const GeomDet* outerDet = gtg->idToDet(outerDetId);
627  GlobalPoint outerTSOSPos = outerTSOS.globalParameters().position();
628  bool inside = outerDet->surface().bounds().inside(outerDet->toLocal(outerTSOSPos));
629 
630  GlobalPoint hitPos =
631  (outerRecHit->isValid()) ? outerRecHit->globalPosition() : outerTSOS.globalParameters().position();
632 
633  if (!inside) {
634  LogTrace(metname) << "The Global Muon outerMostMeasurementState is not compatible with the recHit detector!"
635  << " Setting outerMost postition to recHit position if recHit isValid: "
636  << outerRecHit->isValid();
637  LogTrace(metname) << "From " << outerTSOSPos << " to " << hitPos;
638  }
639 
640  //build the TrackExtra
641  GlobalPoint v = (inside) ? outerTSOSPos : hitPos;
642  GlobalVector p = outerTSOS.globalParameters().momentum();
643  math::XYZPoint outpos(v.x(), v.y(), v.z());
644  math::XYZVector outmom(p.x(), p.y(), p.z());
645 
646  v = innerTSOS.globalParameters().position();
647  p = innerTSOS.globalParameters().momentum();
648  math::XYZPoint inpos(v.x(), v.y(), v.z());
649  math::XYZVector inmom(p.x(), p.y(), p.z());
650 
651  reco::TrackExtra trackExtra(outpos,
652  outmom,
653  true,
654  inpos,
655  inmom,
656  true,
657  outerTSOS.curvilinearError(),
658  outerId,
659  innerTSOS.curvilinearError(),
660  innerId,
661  trajectory.direction(),
662  trajectory.seedRef());
663 
664  return trackExtra;
665 }
ConstRecHitPointer const & recHit() const
const std::string metname
const CurvilinearTrajectoryError & curvilinearError() const
T y() const
Definition: PV3DBase.h:60
LocalPoint toLocal(const GlobalPoint &gp) const
Conversion to the R.F. of the GeomDet.
Definition: GeomDet.h:58
ConstRecHitContainer recHits() const
Definition: Trajectory.h:186
const Bounds & bounds() const
Definition: Surface.h:89
edm::ESHandle< GlobalTrackingGeometry > gtg
const Plane & surface() const
The nominal surface of the GeomDet.
Definition: GeomDet.h:37
PropagationDirection const & direction() const
Definition: Trajectory.cc:133
virtual bool inside(const Local3DPoint &) const =0
Determine if the point is inside the bounds.
TrajectoryMeasurement const & lastMeasurement() const
Definition: Trajectory.h:150
T z() const
Definition: PV3DBase.h:61
edm::RefToBase< TrajectorySeed > seedRef(void) const
Definition: Trajectory.h:303
#define LogTrace(id)
Definition: DetId.h:17
TrajectoryMeasurement const & firstMeasurement() const
Definition: Trajectory.h:166
ConstRecHitContainer RecHitContainer
Definition: Trajectory.h:42
const GlobalTrajectoryParameters & globalParameters() const
XYZVectorD XYZVector
spatial vector with cartesian internal representation
Definition: Vector3D.h:31
XYZPointD XYZPoint
point in space with cartesian internal representation
Definition: Point3D.h:12
TrackingRecHit::ConstRecHitPointer ConstRecHitPointer
const GeomDet * idToDet(DetId) const override
TrajectoryStateOnSurface const & updatedState() const
T x() const
Definition: PV3DBase.h:59
template<class TrackCollection >
RefitDirection::GeometricalDirection TrackExtenderWithMTDT< TrackCollection >::checkRecHitsOrdering ( TransientTrackingRecHit::ConstRecHitContainer const &  recHits) const
inline

Definition at line 86 of file TrackExtenderWithMTD.cc.

References dqmdumpme::first, RefitDirection::insideOut, dqmdumpme::last, LogDebug, PV3DBase< T, PVType, FrameType >::mag2(), RefitDirection::outsideIn, position, and RefitDirection::undetermined.

Referenced by TrackExtenderWithMTDT< TrackCollection >::produce().

87  {
88  if (!recHits.empty()) {
89  GlobalPoint first = gtg->idToDet(recHits.front()->geographicalId())->position();
90  GlobalPoint last = gtg->idToDet(recHits.back()->geographicalId())->position();
91 
92  // maybe perp2?
93  auto rFirst = first.mag2();
94  auto rLast = last.mag2();
95  if (rFirst < rLast)
97  if (rFirst > rLast)
99  }
100  LogDebug("TrackExtenderWithMTD") << "Impossible to determine the rechits order" << endl;
102  }
#define LogDebug(id)
T mag2() const
Definition: PV3DBase.h:63
edm::ESHandle< GlobalTrackingGeometry > gtg
static int position[264][3]
Definition: ReadPGInfo.cc:289
const GeomDet * idToDet(DetId) const override
template<class TrackCollection >
string TrackExtenderWithMTDT< TrackCollection >::dumpLayer ( const DetLayer layer) const

Definition at line 668 of file TrackExtenderWithMTD.cc.

References convertSQLitetoXML_cfg::output, and GeometricSearchDet::surface().

668  {
669  stringstream output;
670 
671  const BoundSurface* sur = nullptr;
672  const BoundCylinder* bc = nullptr;
673  const BoundDisk* bd = nullptr;
674 
675  sur = &(layer->surface());
676  if ((bc = dynamic_cast<const BoundCylinder*>(sur))) {
677  output << " Cylinder of radius: " << bc->radius() << endl;
678  } else if ((bd = dynamic_cast<const BoundDisk*>(sur))) {
679  output << " Disk at: " << bd->position().z() << endl;
680  }
681  return output.str();
682 }
virtual const BoundSurface & surface() const =0
The surface of the GeometricSearchDet.
template<class TrackCollection >
void TrackExtenderWithMTDT< TrackCollection >::fillDescriptions ( edm::ConfigurationDescriptions descriptions)
static

Definition at line 177 of file TrackExtenderWithMTD.cc.

References edm::ConfigurationDescriptions::add(), edm::ParameterSetDescription::add(), TrackTransformer::fillPSetDescription(), HLT_2018_cff::InputTag, and AlCaHLTBitMon_QueryRunRegistry::string.

177  {
178  edm::ParameterSetDescription desc, transDesc;
179  desc.add<edm::InputTag>("tracksSrc", edm::InputTag("generalTracks"));
180  desc.add<edm::InputTag>("hitsSrc", edm::InputTag("mtdTrackingRecHits"));
181  desc.add<edm::InputTag>("beamSpotSrc", edm::InputTag("offlineBeamSpot"));
182  desc.add<bool>("updateTrackTrajectory", true);
183  desc.add<bool>("updateTrackExtra", true);
184  desc.add<bool>("updateTrackHitPattern", true);
185  desc.add<std::string>("TransientTrackBuilder", "TransientTrackBuilder");
186  desc.add<std::string>("MTDRecHitBuilder", "MTDRecHitBuilder");
187  desc.add<std::string>("Propagator", "PropagatorWithMaterialForMTD");
189  false,
190  "KFFitterForRefitInsideOut",
191  "KFSmootherForRefitInsideOut",
192  "PropagatorWithMaterialForMTD",
193  "alongMomentum",
194  true,
195  "WithTrackAngle",
196  "MuonRecHitBuilder",
197  "MTDRecHitBuilder");
198  desc.add<edm::ParameterSetDescription>("TrackTransformer", transDesc);
199  descriptions.add("trackExtenderWithMTDBase", desc);
200 }
ParameterDescriptionBase * add(U const &iLabel, T const &value)
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
void add(std::string const &label, ParameterSetDescription const &psetDescription)
template<class TrackCollection >
template<class H , class T >
void TrackExtenderWithMTDT< TrackCollection >::fillValueMap ( edm::Event iEvent,
const H &  handle,
const std::vector< T > &  vec,
const std::string &  name 
) const

Definition at line 204 of file TrackExtenderWithMTD.cc.

References trigObjTnPSource_cfi::filler, eostools::move(), MillePedeFileConverter_cfg::out, and edm::Event::put().

Referenced by TrackExtenderWithMTDT< TrackCollection >::produce().

207  {
208  auto out = std::make_unique<edm::ValueMap<T>>();
210  filler.insert(handle, vec.begin(), vec.end());
211  filler.fill();
212  iEvent.put(std::move(out), name);
213 }
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
Definition: Event.h:131
def move(src, dest)
Definition: eostools.py:511
template<class TrackCollection >
void TrackExtenderWithMTDT< TrackCollection >::produce ( edm::Event ev,
const edm::EventSetup es 
)
final

setup the track extras

Definition at line 216 of file TrackExtenderWithMTD.cc.

References funct::abs(), TrackExtenderWithMTDT< TrackCollection >::betaOrigTrkName, TrackExtenderWithMTDT< TrackCollection >::bsToken_, TransientTrackingRecHitBuilder::build(), TrackExtenderWithMTDT< TrackCollection >::builder, TrackExtenderWithMTDT< TrackCollection >::buildTrack(), TrackExtenderWithMTDT< TrackCollection >::buildTrackExtra(), TrackExtenderWithMTDT< TrackCollection >::checkRecHitsOrdering(), AlCaHLTBitMon_QueryRunRegistry::comp, GeometricSearchDet::compatible(), GeometricSearchDet::compatibleDets(), edmNew::DetSetVector< T >::equal_range(), MeasurementEstimator::estimate(), TrackExtenderWithMTDT< TrackCollection >::fillValueMap(), edm::EventSetup::get(), edm::Event::getByToken(), edm::Event::getRefBeforePut(), TrackExtenderWithMTDT< TrackCollection >::gtg, TrackExtenderWithMTDT< TrackCollection >::hitbuilder, hfClusterShapes_cfi::hits, TrackExtenderWithMTDT< TrackCollection >::hitsToken_, RefitDirection::insideOut, volumeBasedMagneticField_1103l_cfi::magfield, SiStripPI::max, eostools::move(), TrackExtenderWithMTDT< TrackCollection >::mtdRecHitBuilder_, reco::TrackBase::ndof(), config::ordering, convertSQLitetoXML_cfg::output, TrackExtenderWithMTDT< TrackCollection >::pathLengthName, TrackExtenderWithMTDT< TrackCollection >::pathLengthOrigTrkName, TrackExtenderWithMTDT< TrackCollection >::pOrigTrkName, edm::ESHandle< T >::product(), TrackExtenderWithMTDT< TrackCollection >::prop, TrackExtenderWithMTDT< TrackCollection >::propagator_, edm::Event::put(), FastTimerService_cff::range, mps_fire::result, groupFilesInBlocks::reverse, TrackExtenderWithMTDT< TrackCollection >::sigmat0OrigTrkName, TrackExtenderWithMTDT< TrackCollection >::sigmatmtdName, TrackExtenderWithMTDT< TrackCollection >::sigmatmtdOrigTrkName, mathSSE::sqrt(), TrackExtenderWithMTDT< TrackCollection >::t0OrigTrkName, TrackExtenderWithMTDT< TrackCollection >::theEstimator, TrackExtenderWithMTDT< TrackCollection >::theTransformer, TrackExtenderWithMTDT< TrackCollection >::tmtdName, TrackExtenderWithMTDT< TrackCollection >::tmtdOrigTrkName, HLT_2018_cff::track, PDWG_EXOHSCP_cff::tracks, TrackExtenderWithMTDT< TrackCollection >::tracksToken_, TrackExtenderWithMTDT< TrackCollection >::transientTrackBuilder_, TrackExtenderWithMTDT< TrackCollection >::tryBTLLayers(), TrackExtenderWithMTDT< TrackCollection >::tryETLLayers(), TrackExtenderWithMTDT< TrackCollection >::updateExtra_, TrackExtenderWithMTDT< TrackCollection >::updatePattern_, and TrackExtenderWithMTDT< TrackCollection >::updateTraj_.

216  {
217  //this produces pieces of the track extra
218  Traj2TrackHits t2t;
219 
220  theTransformer->setServices(es);
221 
224 
226 
228  es.get<MTDRecoGeometryRecord>().get(geo);
229 
231  es.get<IdealMagneticFieldRecord>().get(magfield);
232 
235 
237  es.get<TrackingComponentsRecord>().get(propagator_, prop);
238 
240  es.get<TrackerTopologyRcd>().get(httopo);
241  const TrackerTopology& ttopo = *httopo;
242 
243  auto output = std::make_unique<TrackCollection>();
244  auto extras = std::make_unique<reco::TrackExtraCollection>();
245  auto outhits = std::make_unique<edm::OwnVector<TrackingRecHit>>();
246 
247  std::vector<float> pathLengthsRaw;
248  std::vector<float> tmtdRaw;
249  std::vector<float> sigmatmtdRaw;
250  std::vector<float> pOrigTrkRaw;
251  std::vector<float> betaOrigTrkRaw;
252  std::vector<float> t0OrigTrkRaw;
253  std::vector<float> sigmat0OrigTrkRaw;
254  std::vector<float> pathLengthsOrigTrkRaw;
255  std::vector<float> tmtdOrigTrkRaw;
256  std::vector<float> sigmatmtdOrigTrkRaw;
257 
259  ev.getByToken(tracksToken_, tracksH);
260  const auto& tracks = *tracksH;
261 
263  ev.getByToken(hitsToken_, hitsH);
264  const auto& hits = *hitsH;
265 
267  ev.getByToken(bsToken_, bsH);
268  const auto& bs = *bsH;
269 
270  std::vector<unsigned> track_indices;
271  unsigned itrack = 0;
272  for (const auto& track : tracks) {
273  reco::TransientTrack ttrack(track, magfield.product(), gtg);
274  const auto& trajs = theTransformer->transform(track);
275  auto thits = theTransformer->getTransientRecHits(ttrack);
276 
278  const auto& btlhits = tryBTLLayers(track, hits, geo.product(), magfield.product(), prop.product());
279  mtdthits.insert(mtdthits.end(), btlhits.begin(), btlhits.end());
280 
281  // in the future this should include an intermediate refit before propagating to the ETL
282  // for now it is ok
283  const auto& etlhits = tryETLLayers(track, hits, geo.product(), magfield.product(), prop.product());
284  mtdthits.insert(mtdthits.end(), etlhits.begin(), etlhits.end());
285 
286  auto ordering = checkRecHitsOrdering(thits);
288  thits.insert(thits.end(), mtdthits.begin(), mtdthits.end());
289  } else {
290  std::reverse(mtdthits.begin(), mtdthits.end());
291  mtdthits.insert(mtdthits.end(), thits.begin(), thits.end());
292  thits.swap(mtdthits);
293  }
294  const auto& trajwithmtd = theTransformer->transform(ttrack, thits);
295  float pMap = 0.f, betaMap = 0.f, t0Map = 0.f, sigmat0Map = -1.f, pathLengthMap = -1.f, tmtdMap = 0.f,
296  sigmatmtdMap = -1.f;
297 
298  for (const auto& trj : trajwithmtd) {
299  const auto& thetrj = (updateTraj_ ? trj : trajs.front());
300  float pathLength = 0.f, tmtd = 0.f, sigmatmtd = -1.f;
302  track, thetrj, trj, bs, magfield.product(), prop.product(), !mtdthits.empty(), pathLength, tmtd, sigmatmtd);
303  if (result.ndof() >= 0) {
305  reco::TrackExtra::TrajParams trajParams;
307  size_t hitsstart = outhits->size();
308  if (updatePattern_) {
309  t2t(trj, *outhits, trajParams, chi2s); // this fills the output hit collection
310  } else {
311  t2t(thetrj, *outhits, trajParams, chi2s);
312  }
313  size_t hitsend = outhits->size();
314  extras->push_back(buildTrackExtra(trj)); // always push back the fully built extra, update by setting in track
315  extras->back().setHits(hitsRefProd, hitsstart, hitsend - hitsstart);
316  extras->back().setTrajParams(trajParams, chi2s);
317  //create the track
318  output->push_back(result);
319  pathLengthsRaw.push_back(pathLength);
320  tmtdRaw.push_back(tmtd);
321  sigmatmtdRaw.push_back(sigmatmtd);
322  pathLengthMap = pathLength;
323  tmtdMap = tmtd;
324  sigmatmtdMap = sigmatmtd;
325  auto& backtrack = output->back();
326  pMap = backtrack.p();
327  betaMap = backtrack.beta();
328  t0Map = backtrack.t0();
329  sigmat0Map = std::copysign(std::sqrt(std::abs(backtrack.covt0t0())), backtrack.covt0t0());
330  reco::TrackExtraRef extraRef(extrasRefProd, extras->size() - 1);
331  backtrack.setExtra((updateExtra_ ? extraRef : track.extra()));
332  for (unsigned ihit = hitsstart; ihit < hitsend; ++ihit) {
333  backtrack.appendHitPattern((*outhits)[ihit], ttopo);
334  }
335  }
336  }
337  pOrigTrkRaw.push_back(pMap);
338  betaOrigTrkRaw.push_back(betaMap);
339  t0OrigTrkRaw.push_back(t0Map);
340  sigmat0OrigTrkRaw.push_back(sigmat0Map);
341  pathLengthsOrigTrkRaw.push_back(pathLengthMap);
342  tmtdOrigTrkRaw.push_back(tmtdMap);
343  sigmatmtdOrigTrkRaw.push_back(sigmatmtdMap);
344  ++itrack;
345  }
346 
347  auto outTrksHandle = ev.put(std::move(output));
348  ev.put(std::move(extras));
349  ev.put(std::move(outhits));
350 
351  fillValueMap(ev, outTrksHandle, pathLengthsRaw, pathLengthName);
352  fillValueMap(ev, outTrksHandle, tmtdRaw, tmtdName);
353  fillValueMap(ev, outTrksHandle, sigmatmtdRaw, sigmatmtdName);
354  fillValueMap(ev, tracksH, pOrigTrkRaw, pOrigTrkName);
355  fillValueMap(ev, tracksH, betaOrigTrkRaw, betaOrigTrkName);
356  fillValueMap(ev, tracksH, t0OrigTrkRaw, t0OrigTrkName);
357  fillValueMap(ev, tracksH, sigmat0OrigTrkRaw, sigmat0OrigTrkName);
358  fillValueMap(ev, tracksH, pathLengthsOrigTrkRaw, pathLengthOrigTrkName);
359  fillValueMap(ev, tracksH, tmtdOrigTrkRaw, tmtdOrigTrkName);
360  fillValueMap(ev, tracksH, sigmatmtdOrigTrkRaw, sigmatmtdOrigTrkName);
361 }
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
Definition: Event.h:131
std::vector< unsigned char > Chi2sFive
reco::TrackExtra buildTrackExtra(const Trajectory &trajectory) const
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:525
edm::EDGetTokenT< reco::BeamSpot > bsToken_
edm::ESHandle< GlobalTrackingGeometry > gtg
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
edm::EDGetTokenT< MTDTrackingDetSetVector > hitsToken_
std::vector< LocalTrajectoryParameters > TrajParams
const std::string mtdRecHitBuilder_
edm::ESHandle< TransientTrackingRecHitBuilder > hitbuilder
double ndof() const
number of degrees of freedom of the fit
Definition: TrackBase.h:569
T sqrt(T t)
Definition: SSEVec.h:19
RefitDirection::GeometricalDirection checkRecHitsOrdering(TransientTrackingRecHit::ConstRecHitContainer const &recHits) const
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
const std::string propagator_
RefProd< PROD > getRefBeforePut()
Definition: Event.h:156
std::vector< ConstRecHitPointer > ConstRecHitContainer
const std::string transientTrackBuilder_
std::vector< TrackExtra > TrackExtraCollection
collection of TrackExtra objects
Definition: TrackExtraFwd.h:10
TransientTrackingRecHit::ConstRecHitContainer tryBTLLayers(const TrackType &, const MTDTrackingDetSetVector &, const MTDDetLayerGeometry *, const MagneticField *field, const Propagator *prop) const
edm::ESHandle< Propagator > prop
TransientTrackingRecHit::ConstRecHitContainer tryETLLayers(const TrackType &, const MTDTrackingDetSetVector &, const MTDDetLayerGeometry *, const MagneticField *field, const Propagator *prop) const
edm::ESHandle< TransientTrackBuilder > builder
std::unique_ptr< TrackTransformer > theTransformer
T get() const
Definition: EventSetup.h:73
ordering
Definition: config.py:7
T const * product() const
Definition: ESHandle.h:86
edm::EDGetTokenT< InputCollection > tracksToken_
def move(src, dest)
Definition: eostools.py:511
void fillValueMap(edm::Event &iEvent, const H &handle, const std::vector< T > &vec, const std::string &name) const
template<class TrackCollection >
TransientTrackingRecHit::ConstRecHitContainer TrackExtenderWithMTDT< TrackCollection >::tryBTLLayers ( const TrackType track,
const MTDTrackingDetSetVector hits,
const MTDDetLayerGeometry geo,
const MagneticField field,
const Propagator prop 
) const

Definition at line 399 of file TrackExtenderWithMTD.cc.

References MTDDetLayerGeometry::allBTLLayers(), TransientTrackBuilder::build(), TrackExtenderWithMTDT< TrackCollection >::builder, TrackExtenderWithMTDT< TrackCollection >::hitbuilder, hgcalTopologyTester_cfi::layers, convertSQLitetoXML_cfg::output, and TrackExtenderWithMTDT< TrackCollection >::theEstimator.

Referenced by TrackExtenderWithMTDT< TrackCollection >::produce().

404  {
406  const vector<const DetLayer*>& layers = geo->allBTLLayers();
407  auto tTrack = builder->build(track);
408 
409  for (const DetLayer* ilay : layers) {
410  // get the outermost trajectory point on the track
411  TrajectoryStateOnSurface tsos = tTrack.outermostMeasurementState();
412  find_hits_in_dets(hits, ilay, tsos, prop, *theEstimator, *hitbuilder, output);
413  }
414  return output;
415 }
std::unique_ptr< MeasurementEstimator > theEstimator
reco::TransientTrack build(const reco::Track *p) const
const std::vector< const DetLayer * > & allBTLLayers() const
return the BTL DetLayers (barrel), inside-out
edm::ESHandle< TransientTrackingRecHitBuilder > hitbuilder
std::vector< ConstRecHitPointer > ConstRecHitContainer
edm::ESHandle< TransientTrackBuilder > builder
template<class TrackCollection >
TransientTrackingRecHit::ConstRecHitContainer TrackExtenderWithMTDT< TrackCollection >::tryETLLayers ( const TrackType track,
const MTDTrackingDetSetVector hits,
const MTDDetLayerGeometry geo,
const MagneticField field,
const Propagator prop 
) const

Definition at line 418 of file TrackExtenderWithMTD.cc.

References MTDDetLayerGeometry::allETLLayers(), TransientTrackBuilder::build(), TrackExtenderWithMTDT< TrackCollection >::builder, TrajectoryStateOnSurface::globalPosition(), TrackExtenderWithMTDT< TrackCollection >::hitbuilder, hgcalTopologyTester_cfi::layers, convertSQLitetoXML_cfg::output, TrackExtenderWithMTDT< TrackCollection >::theEstimator, and PV3DBase< T, PVType, FrameType >::z().

Referenced by TrackExtenderWithMTDT< TrackCollection >::produce().

423  {
425  const vector<const DetLayer*>& layers = geo->allETLLayers();
426 
427  auto tTrack = builder->build(track);
428 
429  for (const DetLayer* ilay : layers) {
430  const BoundDisk& disk = static_cast<const MTDRingForwardDoubleLayer*>(ilay)->specificSurface();
431  const double diskZ = disk.position().z();
432 
433  // get the outermost trajectory point on the track
434  TrajectoryStateOnSurface tsos = tTrack.outermostMeasurementState();
435  if (tsos.globalPosition().z() * diskZ < 0)
436  continue; // only propagate to the disk that's on the same side
437  find_hits_in_dets(hits, ilay, tsos, prop, *theEstimator, *hitbuilder, output);
438  }
439  return output;
440 }
std::unique_ptr< MeasurementEstimator > theEstimator
reco::TransientTrack build(const reco::Track *p) const
GlobalPoint globalPosition() const
const std::vector< const DetLayer * > & allETLLayers() const
return the ETL DetLayers (endcap), -Z to +Z
edm::ESHandle< TransientTrackingRecHitBuilder > hitbuilder
T z() const
Definition: PV3DBase.h:61
std::vector< ConstRecHitPointer > ConstRecHitContainer
edm::ESHandle< TransientTrackBuilder > builder

Member Data Documentation

template<class TrackCollection >
char TrackExtenderWithMTDT< TrackCollection >::betaOrigTrkName[] = "generalTrackBeta"
staticprivate
template<class TrackCollection >
edm::EDGetTokenT<reco::BeamSpot> TrackExtenderWithMTDT< TrackCollection >::bsToken_
private
template<class TrackCollection >
edm::ESHandle<TransientTrackBuilder> TrackExtenderWithMTDT< TrackCollection >::builder
private
template<class TrackCollection >
edm::ESHandle<GlobalTrackingGeometry> TrackExtenderWithMTDT< TrackCollection >::gtg
private
template<class TrackCollection >
edm::ESHandle<TransientTrackingRecHitBuilder> TrackExtenderWithMTDT< TrackCollection >::hitbuilder
private
template<class TrackCollection >
edm::EDGetTokenT<MTDTrackingDetSetVector> TrackExtenderWithMTDT< TrackCollection >::hitsToken_
private
template<class TrackCollection >
const std::string TrackExtenderWithMTDT< TrackCollection >::mtdRecHitBuilder_
private
template<class TrackCollection >
char TrackExtenderWithMTDT< TrackCollection >::pathLengthName[] = "pathLength"
staticprivate
template<class TrackCollection >
char TrackExtenderWithMTDT< TrackCollection >::pathLengthOrigTrkName[] = "generalTrackPathLength"
staticprivate
template<class TrackCollection >
char TrackExtenderWithMTDT< TrackCollection >::pOrigTrkName[] = "generalTrackp"
staticprivate
template<class TrackCollection >
edm::ESHandle<Propagator> TrackExtenderWithMTDT< TrackCollection >::prop
private
template<class TrackCollection >
const std::string TrackExtenderWithMTDT< TrackCollection >::propagator_
private
template<class TrackCollection >
char TrackExtenderWithMTDT< TrackCollection >::sigmat0OrigTrkName[] = "generalTracksigmat0"
staticprivate
template<class TrackCollection >
char TrackExtenderWithMTDT< TrackCollection >::sigmatmtdName[] = "sigmatmtd"
staticprivate
template<class TrackCollection >
char TrackExtenderWithMTDT< TrackCollection >::sigmatmtdOrigTrkName[] = "generalTracksigmatmtd"
staticprivate
template<class TrackCollection >
char TrackExtenderWithMTDT< TrackCollection >::t0OrigTrkName[] = "generalTrackt0"
staticprivate
template<class TrackCollection >
std::unique_ptr<MeasurementEstimator> TrackExtenderWithMTDT< TrackCollection >::theEstimator
private
template<class TrackCollection >
std::unique_ptr<TrackTransformer> TrackExtenderWithMTDT< TrackCollection >::theTransformer
private
template<class TrackCollection >
char TrackExtenderWithMTDT< TrackCollection >::tmtdName[] = "tmtd"
staticprivate
template<class TrackCollection >
char TrackExtenderWithMTDT< TrackCollection >::tmtdOrigTrkName[] = "generalTracktmtd"
staticprivate
template<class TrackCollection >
edm::EDGetTokenT<InputCollection> TrackExtenderWithMTDT< TrackCollection >::tracksToken_
private
template<class TrackCollection >
const std::string TrackExtenderWithMTDT< TrackCollection >::transientTrackBuilder_
private
template<class TrackCollection >
const bool TrackExtenderWithMTDT< TrackCollection >::updateExtra_
private
template<class TrackCollection >
const bool TrackExtenderWithMTDT< TrackCollection >::updatePattern_
private
template<class TrackCollection >
const bool TrackExtenderWithMTDT< TrackCollection >::updateTraj_
private