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 hasAbilityToProduceInLumis () const final
 
bool hasAbilityToProduceInRuns () 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 63 of file TrackExtenderWithMTD.cc.

Member Typedef Documentation

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

Definition at line 66 of file TrackExtenderWithMTD.cc.

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

Definition at line 65 of file TrackExtenderWithMTD.cc.

Constructor & Destructor Documentation

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

Definition at line 138 of file TrackExtenderWithMTD.cc.

References TrackExtenderWithMTDT< TrackCollection >::betaOrigTrkName, constexpr, edm::ParameterSet::getParameterSet(), btvTracks_cfi::maxChi2, gsfElectronCkfTrackCandidateMaker_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.

138  :
139  tracksToken_(consumes<InputCollection>(iConfig.getParameter<edm::InputTag>("tracksSrc"))),
140  hitsToken_(consumes<MTDTrackingDetSetVector>(iConfig.getParameter<edm::InputTag>("hitsSrc"))),
141  bsToken_(consumes<reco::BeamSpot>(iConfig.getParameter<edm::InputTag>("beamSpotSrc"))),
142  updateTraj_(iConfig.getParameter<bool>("updateTrackTrajectory")),
143  updateExtra_(iConfig.getParameter<bool>("updateTrackExtra")),
144  updatePattern_(iConfig.getParameter<bool>("updateTrackHitPattern")),
145  mtdRecHitBuilder_(iConfig.getParameter<std::string>("MTDRecHitBuilder")),
146  propagator_(iConfig.getParameter<std::string>("Propagator")),
147  transientTrackBuilder_(iConfig.getParameter<std::string>("TransientTrackBuilder")) {
148  constexpr float maxChi2=500.;
149  constexpr float nSigma=10.;
150  theEstimator = std::make_unique<Chi2MeasurementEstimator>(maxChi2,nSigma);
151 
152  theTransformer = std::make_unique<TrackTransformer>(iConfig.getParameterSet("TrackTransformer"));
153 
154  produces<edm::ValueMap<float> >(pathLengthName);
155  produces<edm::ValueMap<float> >(tmtdName);
156  produces<edm::ValueMap<float> >(sigmatmtdName);
157  produces<edm::ValueMap<float> >(pOrigTrkName);
158  produces<edm::ValueMap<float> >(betaOrigTrkName);
159  produces<edm::ValueMap<float> >(t0OrigTrkName);
160  produces<edm::ValueMap<float> >(sigmat0OrigTrkName);
161  produces<edm::ValueMap<float> >(pathLengthOrigTrkName);
162  produces<edm::ValueMap<float> >(tmtdOrigTrkName);
163  produces<edm::ValueMap<float> >(sigmatmtdOrigTrkName);
164 
165  produces<edm::OwnVector<TrackingRecHit>>();
166  produces<reco::TrackExtraCollection>();
167  produces<TrackCollection>();
168 }
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 439 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(), cscNeutronWriter_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().

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

Definition at line 579 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().

579  {
580 
581  static const string metname = "TrackExtenderWithMTD";
582 
583  const Trajectory::RecHitContainer transRecHits = trajectory.recHits();
584 
585  // put the collection of TrackingRecHit in the event
586 
587  // sets the outermost and innermost TSOSs
588  // ToDo: validation for track states with MTD
589  TrajectoryStateOnSurface outerTSOS;
590  TrajectoryStateOnSurface innerTSOS;
591  unsigned int innerId=0, outerId=0;
593  DetId outerDetId;
594 
595  if (trajectory.direction() == alongMomentum) {
596  LogTrace(metname)<<"alongMomentum";
597  outerTSOS = trajectory.lastMeasurement().updatedState();
598  innerTSOS = trajectory.firstMeasurement().updatedState();
599  outerId = trajectory.lastMeasurement().recHit()->geographicalId().rawId();
600  innerId = trajectory.firstMeasurement().recHit()->geographicalId().rawId();
601  outerRecHit = trajectory.lastMeasurement().recHit();
602  outerDetId = trajectory.lastMeasurement().recHit()->geographicalId();
603  }
604  else if (trajectory.direction() == oppositeToMomentum) {
605  LogTrace(metname)<<"oppositeToMomentum";
606  outerTSOS = trajectory.firstMeasurement().updatedState();
607  innerTSOS = trajectory.lastMeasurement().updatedState();
608  outerId = trajectory.firstMeasurement().recHit()->geographicalId().rawId();
609  innerId = trajectory.lastMeasurement().recHit()->geographicalId().rawId();
610  outerRecHit = trajectory.firstMeasurement().recHit();
611  outerDetId = trajectory.firstMeasurement().recHit()->geographicalId();
612  }
613  else LogError(metname)<<"Wrong propagation direction!";
614 
615  const GeomDet *outerDet = gtg->idToDet(outerDetId);
616  GlobalPoint outerTSOSPos = outerTSOS.globalParameters().position();
617  bool inside = outerDet->surface().bounds().inside(outerDet->toLocal(outerTSOSPos));
618 
619 
620  GlobalPoint hitPos = (outerRecHit->isValid()) ? outerRecHit->globalPosition() : outerTSOS.globalParameters().position() ;
621 
622  if(!inside) {
623  LogTrace(metname)
624  << "The Global Muon outerMostMeasurementState is not compatible with the recHit detector!"
625  << " Setting outerMost postition to recHit position if recHit isValid: " << outerRecHit->isValid();
626  LogTrace(metname)<<"From " << outerTSOSPos << " to " << hitPos;
627  }
628 
629 
630  //build the TrackExtra
631  GlobalPoint v = (inside) ? outerTSOSPos : hitPos ;
632  GlobalVector p = outerTSOS.globalParameters().momentum();
633  math::XYZPoint outpos( v.x(), v.y(), v.z() );
634  math::XYZVector outmom( p.x(), p.y(), p.z() );
635 
636  v = innerTSOS.globalParameters().position();
637  p = innerTSOS.globalParameters().momentum();
638  math::XYZPoint inpos( v.x(), v.y(), v.z() );
639  math::XYZVector inmom( p.x(), p.y(), p.z() );
640 
641  reco::TrackExtra trackExtra(outpos, outmom, true, inpos, inmom, true,
642  outerTSOS.curvilinearError(), outerId,
643  innerTSOS.curvilinearError(), innerId,
644  trajectory.direction(),trajectory.seedRef());
645 
646  return trackExtra;
647 
648 }
ConstRecHitPointer const & recHit() const
const std::string metname
const CurvilinearTrajectoryError & curvilinearError() const
T y() const
Definition: PV3DBase.h:63
LocalPoint toLocal(const GlobalPoint &gp) const
Conversion to the R.F. of the GeomDet.
Definition: GeomDet.h:69
ConstRecHitContainer recHits() const
Definition: Trajectory.h:204
const Bounds & bounds() const
Definition: Surface.h:120
edm::ESHandle< GlobalTrackingGeometry > gtg
const Plane & surface() const
The nominal surface of the GeomDet.
Definition: GeomDet.h:42
PropagationDirection const & direction() const
Definition: Trajectory.cc:140
virtual bool inside(const Local3DPoint &) const =0
Determine if the point is inside the bounds.
TrajectoryMeasurement const & lastMeasurement() const
Definition: Trajectory.h:174
T z() const
Definition: PV3DBase.h:64
edm::RefToBase< TrajectorySeed > seedRef(void) const
Definition: Trajectory.h:321
#define LogTrace(id)
Definition: DetId.h:18
TrajectoryMeasurement const & firstMeasurement() const
Definition: Trajectory.h:187
ConstRecHitContainer RecHitContainer
Definition: Trajectory.h:46
const GlobalTrajectoryParameters & globalParameters() const
XYZVectorD XYZVector
spatial vector with cartesian internal representation
Definition: Vector3D.h:30
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:62
template<class TrackCollection >
RefitDirection::GeometricalDirection TrackExtenderWithMTDT< TrackCollection >::checkRecHitsOrdering ( TransientTrackingRecHit::ConstRecHitContainer const &  recHits) const
inline

Definition at line 90 of file TrackExtenderWithMTD.cc.

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

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

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

Definition at line 651 of file TrackExtenderWithMTD.cc.

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

651  {
652  stringstream output;
653 
654  const BoundSurface* sur=nullptr;
655  const BoundCylinder* bc=nullptr;
656  const BoundDisk* bd=nullptr;
657 
658  sur = &(layer->surface());
659  if ( (bc = dynamic_cast<const BoundCylinder*>(sur)) ) {
660  output << " Cylinder of radius: " << bc->radius() << endl;
661  }
662  else if ( (bd = dynamic_cast<const BoundDisk*>(sur)) ) {
663  output << " Disk at: " << bd->position().z() << endl;
664  }
665  return output.str();
666 }
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 171 of file TrackExtenderWithMTD.cc.

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

171  {
172  edm::ParameterSetDescription desc,transDesc;
173  desc.add<edm::InputTag>("tracksSrc",edm::InputTag("generalTracks"));
174  desc.add<edm::InputTag>("hitsSrc",edm::InputTag("mtdTrackingRecHits"));
175  desc.add<edm::InputTag>("beamSpotSrc",edm::InputTag("offlineBeamSpot"));
176  desc.add<bool>("updateTrackTrajectory",true);
177  desc.add<bool>("updateTrackExtra",true);
178  desc.add<bool>("updateTrackHitPattern",true);
179  desc.add<std::string>("TransientTrackBuilder","TransientTrackBuilder");
180  desc.add<std::string>("MTDRecHitBuilder","MTDRecHitBuilder");
181  desc.add<std::string>("Propagator","PropagatorWithMaterialForMTD");
183  false,
184  "KFFitterForRefitInsideOut",
185  "KFSmootherForRefitInsideOut",
186  "PropagatorWithMaterialForMTD",
187  "alongMomentum",
188  true,
189  "WithTrackAngle",
190  "MuonRecHitBuilder",
191  "MTDRecHitBuilder"
192  );
193  desc.add<edm::ParameterSetDescription>("TrackTransformer",transDesc);
194  descriptions.add("trackExtenderWithMTDBase", desc);
195 }
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 199 of file TrackExtenderWithMTD.cc.

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

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

199  {
200  auto out = std::make_unique<edm::ValueMap<T>>();
202  filler.insert(handle, vec.begin(), vec.end());
203  filler.fill();
204  iEvent.put(std::move(out),name);
205 }
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
Definition: Event.h:125
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 208 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, 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(), 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, HiIsolationCommonParameters_cff::track, l1t::tracks, TrackExtenderWithMTDT< TrackCollection >::tracksToken_, TrackExtenderWithMTDT< TrackCollection >::transientTrackBuilder_, TrackExtenderWithMTDT< TrackCollection >::tryBTLLayers(), TrackExtenderWithMTDT< TrackCollection >::tryETLLayers(), TrackExtenderWithMTDT< TrackCollection >::updateExtra_, TrackExtenderWithMTDT< TrackCollection >::updatePattern_, and TrackExtenderWithMTDT< TrackCollection >::updateTraj_.

209  {
210  //this produces pieces of the track extra
211  Traj2TrackHits t2t;
212 
213  theTransformer->setServices(es);
214 
217 
219 
221  es.get<MTDRecoGeometryRecord>().get(geo);
222 
224  es.get<IdealMagneticFieldRecord>().get(magfield);
225 
228 
230  es.get<TrackingComponentsRecord>().get(propagator_,prop);
231 
233  es.get<TrackerTopologyRcd>().get(httopo);
234  const TrackerTopology& ttopo = *httopo;
235 
236  auto output = std::make_unique<TrackCollection>();
237  auto extras = std::make_unique<reco::TrackExtraCollection>();
238  auto outhits = std::make_unique<edm::OwnVector<TrackingRecHit>>();
239 
240  std::vector<float> pathLengthsRaw;
241  std::vector<float> tmtdRaw;
242  std::vector<float> sigmatmtdRaw;
243  std::vector<float> pOrigTrkRaw;
244  std::vector<float> betaOrigTrkRaw;
245  std::vector<float> t0OrigTrkRaw;
246  std::vector<float> sigmat0OrigTrkRaw;
247  std::vector<float> pathLengthsOrigTrkRaw;
248  std::vector<float> tmtdOrigTrkRaw;
249  std::vector<float> sigmatmtdOrigTrkRaw;
250 
252  ev.getByToken(tracksToken_,tracksH);
253  const auto& tracks = *tracksH;
254 
256  ev.getByToken(hitsToken_,hitsH);
257  const auto& hits = *hitsH;
258 
260  ev.getByToken(bsToken_,bsH);
261  const auto& bs = *bsH;
262 
263  std::vector<unsigned> track_indices;
264  unsigned itrack = 0;
265  for( const auto& track : tracks ) {
266 
267  reco::TransientTrack ttrack(track,magfield.product(),gtg);
268  const auto& trajs = theTransformer->transform(track);
269  auto thits = theTransformer->getTransientRecHits(ttrack);
270 
272  const auto& btlhits = tryBTLLayers(track,hits,geo.product(),magfield.product(),prop.product());
273  mtdthits.insert(mtdthits.end(),btlhits.begin(),btlhits.end());
274 
275  // in the future this should include an intermediate refit before propagating to the ETL
276  // for now it is ok
277  const auto& etlhits = tryETLLayers(track,hits,geo.product(),magfield.product(),prop.product());
278  mtdthits.insert(mtdthits.end(),etlhits.begin(),etlhits.end());
279 
280  auto ordering = checkRecHitsOrdering(thits);
282  thits.insert(thits.end(),mtdthits.begin(),mtdthits.end());
283  } else {
284  std::reverse(mtdthits.begin(),mtdthits.end());
285  mtdthits.insert(mtdthits.end(),thits.begin(),thits.end());
286  thits.swap(mtdthits);
287  }
288  const auto& trajwithmtd = theTransformer->transform(ttrack,thits);
289  float pMap = 0.f, betaMap = 0.f, t0Map = 0.f, sigmat0Map = -1.f, pathLengthMap = -1.f, tmtdMap = 0.f, sigmatmtdMap = -1.f;
290 
291  for( const auto& trj : trajwithmtd ) {
292  const auto& thetrj = (updateTraj_ ? trj : trajs.front());
293  float pathLength = 0.f, tmtd = 0.f, sigmatmtd = -1.f;
294  reco::Track result = buildTrack(track, thetrj, trj, bs, magfield.product(),
295  prop.product(), !mtdthits.empty(),pathLength,tmtd,sigmatmtd);
296  if( result.ndof() >= 0 ) {
298  reco::TrackExtra::TrajParams trajParams;
300  size_t hitsstart = outhits->size();
301  if( updatePattern_ ) {
302  t2t(trj,*outhits,trajParams,chi2s); // this fills the output hit collection
303  } else {
304  t2t(thetrj,*outhits,trajParams,chi2s);
305  }
306  size_t hitsend = outhits->size();
307  extras->push_back(buildTrackExtra(trj)); // always push back the fully built extra, update by setting in track
308  extras->back().setHits(hitsRefProd,hitsstart,hitsend-hitsstart);
309  extras->back().setTrajParams(trajParams,chi2s);
310  //create the track
311  output->push_back(result);
312  pathLengthsRaw.push_back(pathLength);
313  tmtdRaw.push_back(tmtd);
314  sigmatmtdRaw.push_back(sigmatmtd);
315  pathLengthMap = pathLength;
316  tmtdMap = tmtd;
317  sigmatmtdMap = sigmatmtd;
318  auto& backtrack = output->back();
319  pMap = backtrack.p();
320  betaMap = backtrack.beta();
321  t0Map = backtrack.t0();
322  sigmat0Map = std::copysign(std::sqrt(std::abs(backtrack.covt0t0())),backtrack.covt0t0());
323  reco::TrackExtraRef extraRef(extrasRefProd,extras->size()-1);
324  backtrack.setExtra( (updateExtra_ ? extraRef : track.extra()) );
325  for(unsigned ihit = hitsstart; ihit < hitsend; ++ihit) {
326  backtrack.appendHitPattern((*outhits)[ihit],ttopo);
327  }
328  }
329  }
330  pOrigTrkRaw.push_back(pMap);
331  betaOrigTrkRaw.push_back(betaMap);
332  t0OrigTrkRaw.push_back(t0Map);
333  sigmat0OrigTrkRaw.push_back(sigmat0Map);
334  pathLengthsOrigTrkRaw.push_back(pathLengthMap);
335  tmtdOrigTrkRaw.push_back(tmtdMap);
336  sigmatmtdOrigTrkRaw.push_back(sigmatmtdMap);
337  ++itrack;
338  }
339 
340  auto outTrksHandle = ev.put(std::move(output));
341  ev.put(std::move(extras));
342  ev.put(std::move(outhits));
343 
344  fillValueMap(ev, outTrksHandle, pathLengthsRaw, pathLengthName);
345  fillValueMap(ev, outTrksHandle, tmtdRaw, tmtdName);
346  fillValueMap(ev, outTrksHandle, sigmatmtdRaw, sigmatmtdName);
347  fillValueMap(ev, tracksH, pOrigTrkRaw, pOrigTrkName);
348  fillValueMap(ev, tracksH, betaOrigTrkRaw, betaOrigTrkName);
349  fillValueMap(ev, tracksH, t0OrigTrkRaw, t0OrigTrkName);
350  fillValueMap(ev, tracksH, sigmat0OrigTrkRaw, sigmat0OrigTrkName);
351  fillValueMap(ev, tracksH, pathLengthsOrigTrkRaw, pathLengthOrigTrkName);
352  fillValueMap(ev, tracksH, tmtdOrigTrkRaw, tmtdOrigTrkName);
353  fillValueMap(ev, tracksH, sigmatmtdOrigTrkRaw, sigmatmtdOrigTrkName);
354 }
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
Definition: Event.h:125
std::vector< unsigned char > Chi2sFive
reco::TrackExtra buildTrackExtra(const Trajectory &trajectory) const
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:517
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:588
T sqrt(T t)
Definition: SSEVec.h:18
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:150
std::vector< ConstRecHitPointer > ConstRecHitContainer
const std::string transientTrackBuilder_
std::vector< TrackExtra > TrackExtraCollection
collection of TrackExtra objects
Definition: TrackExtraFwd.h:11
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:71
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 392 of file TrackExtenderWithMTD.cc.

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

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

396  {
397 
399  const vector<const DetLayer*>& layers = geo->allBTLLayers();
400  auto tTrack = builder->build(track);
401 
402  for (const DetLayer* ilay : layers) {
403  // get the outermost trajectory point on the track
404  TrajectoryStateOnSurface tsos = tTrack.outermostMeasurementState();
405  find_hits_in_dets(hits,ilay,tsos,prop,*theEstimator,*hitbuilder,output);
406  }
407  return output;
408 }
std::vector< LayerSetAndLayers > layers(const SeedingLayerSetsHits &sets)
Definition: LayerTriplets.cc:4
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 412 of file TrackExtenderWithMTD.cc.

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

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

416  {
417 
419  const vector<const DetLayer*>& layers = geo->allETLLayers();
420 
421  auto tTrack = builder->build(track);
422 
423  for (const DetLayer* ilay : layers) {
424  const BoundDisk& disk = static_cast<const MTDRingForwardDoubleLayer*>(ilay)->specificSurface();
425  const double diskZ = disk.position().z();
426 
427  // get the outermost trajectory point on the track
428  TrajectoryStateOnSurface tsos = tTrack.outermostMeasurementState();
429  if( tsos.globalPosition().z() * diskZ < 0 ) continue; // only propagate to the disk that's on the same side
430  find_hits_in_dets(hits,ilay,tsos,prop,*theEstimator,*hitbuilder,output);
431  }
432  return output;
433 }
std::vector< LayerSetAndLayers > layers(const SeedingLayerSetsHits &sets)
Definition: LayerTriplets.cc:4
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:64
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