CMS 3D CMS Logo

List of all members | Public Types | Public Member Functions | Static Public Member Functions | 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<>
using CacheTypes = CacheContexts< T... >
 
using GlobalCache = typename CacheTypes::GlobalCache
 
using HasAbility = AbilityChecker< T... >
 
using InputProcessBlockCache = typename CacheTypes::InputProcessBlockCache
 
using LuminosityBlockCache = typename CacheTypes::LuminosityBlockCache
 
using LuminosityBlockContext = LuminosityBlockContextT< LuminosityBlockCache, RunCache, GlobalCache >
 
using LuminosityBlockSummaryCache = typename CacheTypes::LuminosityBlockSummaryCache
 
using RunCache = typename CacheTypes::RunCache
 
using RunContext = RunContextT< RunCache, GlobalCache >
 
using RunSummaryCache = typename CacheTypes::RunSummaryCache
 

Public Member Functions

reco::Track buildTrack (const reco::TrackRef &, const Trajectory &, const Trajectory &, const reco::BeamSpot &, const MagneticField *field, const Propagator *prop, bool hasMTD, float &pathLength, float &tmtdOut, float &sigmatmtdOut, float &tofpi, float &tofk, float &tofp) const
 
reco::TrackExtra buildTrackExtra (const Trajectory &trajectory) const
 
RefitDirection::GeometricalDirection checkRecHitsOrdering (TransientTrackingRecHit::ConstRecHitContainer const &recHits) const
 
string dumpLayer (const DetLayer *layer) const
 
void fillMatchingHits (const DetLayer *, const TrajectoryStateOnSurface &, const Trajectory &, const float, const float, const TrackSegments &, const MTDTrackingDetSetVector &, const Propagator *, const reco::BeamSpot &, const float &, const bool, TransientTrackingRecHit::ConstRecHitContainer &, MTDHitMatchingInfo &) const
 
template<class H , class T >
void fillValueMap (edm::Event &iEvent, const H &handle, const std::vector< T > &vec, const edm::EDPutToken &token) const
 
void produce (edm::Event &ev, const edm::EventSetup &es) final
 
 TrackExtenderWithMTDT (const ParameterSet &pset)
 
TransientTrackingRecHit::ConstRecHitContainer tryBTLLayers (const TrajectoryStateOnSurface &, const Trajectory &traj, const float, const float, const TrackSegments &, const MTDTrackingDetSetVector &, const MTDDetLayerGeometry *, const MagneticField *field, const Propagator *prop, const reco::BeamSpot &bs, const float vtxTime, const bool matchVertex, MTDHitMatchingInfo &bestHit) const
 
TransientTrackingRecHit::ConstRecHitContainer tryETLLayers (const TrajectoryStateOnSurface &, const Trajectory &traj, const float, const float, const TrackSegments &, const MTDTrackingDetSetVector &, const MTDDetLayerGeometry *, const MagneticField *field, const Propagator *prop, const reco::BeamSpot &bs, const float vtxTime, const bool matchVertex, MTDHitMatchingInfo &bestHit) const
 
- Public Member Functions inherited from edm::stream::EDProducer<>
 EDProducer ()=default
 
 EDProducer (const EDProducer &)=delete
 
bool hasAbilityToProduceInBeginLumis () const final
 
bool hasAbilityToProduceInBeginProcessBlocks () const final
 
bool hasAbilityToProduceInBeginRuns () const final
 
bool hasAbilityToProduceInEndLumis () const final
 
bool hasAbilityToProduceInEndProcessBlocks () const final
 
bool hasAbilityToProduceInEndRuns () const final
 
const EDProduceroperator= (const EDProducer &)=delete
 

Static Public Member Functions

static void fillDescriptions (edm::ConfigurationDescriptions &descriptions)
 

Private Attributes

edm::EDPutToken assocOrigTrkToken_
 
edm::EDPutToken betaOrigTrkToken_
 
const float bsTimeSpread_
 
edm::EDGetTokenT< reco::BeamSpotbsToken_
 
const float btlChi2Cut_
 
edm::EDPutToken btlMatchChi2Token_
 
edm::EDPutToken btlMatchTimeChi2Token_
 
const float btlTimeChi2Cut_
 
edm::ESHandle< TransientTrackBuilderbuilder_
 
edm::ESGetToken< TransientTrackBuilder, TransientTrackRecordbuilderToken_
 
edm::ESGetToken< MTDDetLayerGeometry, MTDRecoGeometryRecorddlgeoToken_
 
const float dzCut_
 
const float estMaxChi2_
 
const float estMaxNSigma_
 
const float etlChi2Cut_
 
edm::EDPutToken etlMatchChi2Token_
 
edm::EDPutToken etlMatchTimeChi2Token_
 
const float etlTimeChi2Cut_
 
edm::EDGetTokenT< GlobalPointgenVtxPositionToken_
 
edm::EDGetTokenT< float > genVtxTimeToken_
 
edm::ESHandle< GlobalTrackingGeometrygtg_
 
edm::ESGetToken< GlobalTrackingGeometry, GlobalTrackingGeometryRecordgtgToken_
 
edm::ESHandle< TransientTrackingRecHitBuilderhitbuilder_
 
edm::ESGetToken< TransientTrackingRecHitBuilder, TransientRecHitRecordhitbuilderToken_
 
edm::EDGetTokenT< MTDTrackingDetSetVectorhitsToken_
 
edm::ESGetToken< MagneticField, IdealMagneticFieldRecordmagfldToken_
 
const std::string mtdRecHitBuilder_
 
edm::EDPutToken npixBarrelToken_
 
edm::EDPutToken npixEndcapToken_
 
edm::EDPutToken pathLengthOrigTrkToken_
 
edm::EDPutToken pOrigTrkToken_
 
const std::string propagator_
 
edm::ESGetToken< Propagator, TrackingComponentsRecordpropToken_
 
edm::EDPutToken sigmat0OrigTrkToken_
 
edm::EDPutToken sigmatmtdOrigTrkToken_
 
edm::EDPutToken t0OrigTrkToken_
 
std::unique_ptr< MeasurementEstimatortheEstimator
 
std::unique_ptr< TrackTransformertheTransformer
 
edm::EDPutToken tmtdOrigTrkToken_
 
edm::EDPutToken tofkOrigTrkToken_
 
edm::EDPutToken tofpiOrigTrkToken_
 
edm::EDPutToken tofpOrigTrkToken_
 
edm::EDGetTokenT< InputCollectiontracksToken_
 
edm::EDGetTokenT< TrajTrackAssociationCollectiontrajTrackAToken_
 
const std::string transientTrackBuilder_
 
edm::ESGetToken< TrackerTopology, TrackerTopologyRcdttopoToken_
 
const bool updateExtra_
 
const bool updatePattern_
 
const bool updateTraj_
 
const bool useSimVertex_
 
const bool useVertex_
 
edm::EDGetTokenT< VertexCollectionvtxToken_
 

Detailed Description

template<class TrackCollection>
class TrackExtenderWithMTDT< TrackCollection >

Definition at line 376 of file TrackExtenderWithMTD.cc.

Member Typedef Documentation

◆ InputCollection

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

Definition at line 379 of file TrackExtenderWithMTD.cc.

◆ TrackType

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

Definition at line 378 of file TrackExtenderWithMTD.cc.

Constructor & Destructor Documentation

◆ TrackExtenderWithMTDT()

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

Definition at line 524 of file TrackExtenderWithMTD.cc.

References TrackExtenderWithMTDT< TrackCollection >::assocOrigTrkToken_, TrackExtenderWithMTDT< TrackCollection >::betaOrigTrkToken_, TrackExtenderWithMTDT< TrackCollection >::btlMatchChi2Token_, TrackExtenderWithMTDT< TrackCollection >::btlMatchTimeChi2Token_, TrackExtenderWithMTDT< TrackCollection >::builderToken_, TrackExtenderWithMTDT< TrackCollection >::dlgeoToken_, TrackExtenderWithMTDT< TrackCollection >::estMaxChi2_, TrackExtenderWithMTDT< TrackCollection >::estMaxNSigma_, TrackExtenderWithMTDT< TrackCollection >::etlMatchChi2Token_, TrackExtenderWithMTDT< TrackCollection >::etlMatchTimeChi2Token_, TrackExtenderWithMTDT< TrackCollection >::genVtxPositionToken_, TrackExtenderWithMTDT< TrackCollection >::genVtxTimeToken_, edm::ParameterSet::getParameter(), edm::ParameterSet::getParameterSet(), TrackExtenderWithMTDT< TrackCollection >::gtgToken_, TrackExtenderWithMTDT< TrackCollection >::hitbuilderToken_, TrackExtenderWithMTDT< TrackCollection >::magfldToken_, TrackExtenderWithMTDT< TrackCollection >::mtdRecHitBuilder_, TrackExtenderWithMTDT< TrackCollection >::npixBarrelToken_, TrackExtenderWithMTDT< TrackCollection >::npixEndcapToken_, TrackExtenderWithMTDT< TrackCollection >::pathLengthOrigTrkToken_, TrackExtenderWithMTDT< TrackCollection >::pOrigTrkToken_, TrackExtenderWithMTDT< TrackCollection >::propagator_, TrackExtenderWithMTDT< TrackCollection >::propToken_, TrackExtenderWithMTDT< TrackCollection >::sigmat0OrigTrkToken_, TrackExtenderWithMTDT< TrackCollection >::sigmatmtdOrigTrkToken_, TrackExtenderWithMTDT< TrackCollection >::t0OrigTrkToken_, TrackExtenderWithMTDT< TrackCollection >::theEstimator, TrackExtenderWithMTDT< TrackCollection >::theTransformer, TrackExtenderWithMTDT< TrackCollection >::tmtdOrigTrkToken_, TrackExtenderWithMTDT< TrackCollection >::tofkOrigTrkToken_, TrackExtenderWithMTDT< TrackCollection >::tofpiOrigTrkToken_, TrackExtenderWithMTDT< TrackCollection >::tofpOrigTrkToken_, TrackExtenderWithMTDT< TrackCollection >::transientTrackBuilder_, TrackExtenderWithMTDT< TrackCollection >::ttopoToken_, TrackExtenderWithMTDT< TrackCollection >::useSimVertex_, TrackExtenderWithMTDT< TrackCollection >::useVertex_, and TrackExtenderWithMTDT< TrackCollection >::vtxToken_.

525  : tracksToken_(consumes<InputCollection>(iConfig.getParameter<edm::InputTag>("tracksSrc"))),
526  trajTrackAToken_(consumes<TrajTrackAssociationCollection>(iConfig.getParameter<edm::InputTag>("trjtrkAssSrc"))),
527  hitsToken_(consumes<MTDTrackingDetSetVector>(iConfig.getParameter<edm::InputTag>("hitsSrc"))),
528  bsToken_(consumes<reco::BeamSpot>(iConfig.getParameter<edm::InputTag>("beamSpotSrc"))),
529  updateTraj_(iConfig.getParameter<bool>("updateTrackTrajectory")),
530  updateExtra_(iConfig.getParameter<bool>("updateTrackExtra")),
531  updatePattern_(iConfig.getParameter<bool>("updateTrackHitPattern")),
532  mtdRecHitBuilder_(iConfig.getParameter<std::string>("MTDRecHitBuilder")),
533  propagator_(iConfig.getParameter<std::string>("Propagator")),
534  transientTrackBuilder_(iConfig.getParameter<std::string>("TransientTrackBuilder")),
535  estMaxChi2_(iConfig.getParameter<double>("estimatorMaxChi2")),
536  estMaxNSigma_(iConfig.getParameter<double>("estimatorMaxNSigma")),
537  btlChi2Cut_(iConfig.getParameter<double>("btlChi2Cut")),
538  btlTimeChi2Cut_(iConfig.getParameter<double>("btlTimeChi2Cut")),
539  etlChi2Cut_(iConfig.getParameter<double>("etlChi2Cut")),
540  etlTimeChi2Cut_(iConfig.getParameter<double>("etlTimeChi2Cut")),
541  useVertex_(iConfig.getParameter<bool>("useVertex")),
542  useSimVertex_(iConfig.getParameter<bool>("useSimVertex")),
543  dzCut_(iConfig.getParameter<double>("dZCut")),
544  bsTimeSpread_(iConfig.getParameter<double>("bsTimeSpread")) {
545  if (useVertex_) {
546  if (useSimVertex_) {
547  genVtxPositionToken_ = consumes<GlobalPoint>(iConfig.getParameter<edm::InputTag>("genVtxPositionSrc"));
548  genVtxTimeToken_ = consumes<float>(iConfig.getParameter<edm::InputTag>("genVtxTimeSrc"));
549  } else
550  vtxToken_ = consumes<VertexCollection>(iConfig.getParameter<edm::InputTag>("vtxSrc"));
551  }
552 
553  theEstimator = std::make_unique<Chi2MeasurementEstimator>(estMaxChi2_, estMaxNSigma_);
554  theTransformer = std::make_unique<TrackTransformer>(iConfig.getParameterSet("TrackTransformer"), consumesCollector());
555 
556  btlMatchChi2Token_ = produces<edm::ValueMap<float>>("btlMatchChi2");
557  etlMatchChi2Token_ = produces<edm::ValueMap<float>>("etlMatchChi2");
558  btlMatchTimeChi2Token_ = produces<edm::ValueMap<float>>("btlMatchTimeChi2");
559  etlMatchTimeChi2Token_ = produces<edm::ValueMap<float>>("etlMatchTimeChi2");
560  npixBarrelToken_ = produces<edm::ValueMap<int>>("npixBarrel");
561  npixEndcapToken_ = produces<edm::ValueMap<int>>("npixEndcap");
562  pOrigTrkToken_ = produces<edm::ValueMap<float>>("generalTrackp");
563  betaOrigTrkToken_ = produces<edm::ValueMap<float>>("generalTrackBeta");
564  t0OrigTrkToken_ = produces<edm::ValueMap<float>>("generalTrackt0");
565  sigmat0OrigTrkToken_ = produces<edm::ValueMap<float>>("generalTracksigmat0");
566  pathLengthOrigTrkToken_ = produces<edm::ValueMap<float>>("generalTrackPathLength");
567  tmtdOrigTrkToken_ = produces<edm::ValueMap<float>>("generalTracktmtd");
568  sigmatmtdOrigTrkToken_ = produces<edm::ValueMap<float>>("generalTracksigmatmtd");
569  tofpiOrigTrkToken_ = produces<edm::ValueMap<float>>("generalTrackTofPi");
570  tofkOrigTrkToken_ = produces<edm::ValueMap<float>>("generalTrackTofK");
571  tofpOrigTrkToken_ = produces<edm::ValueMap<float>>("generalTrackTofP");
572  assocOrigTrkToken_ = produces<edm::ValueMap<int>>("generalTrackassoc");
573 
574  builderToken_ = esConsumes<TransientTrackBuilder, TransientTrackRecord>(edm::ESInputTag("", transientTrackBuilder_));
576  esConsumes<TransientTrackingRecHitBuilder, TransientRecHitRecord>(edm::ESInputTag("", mtdRecHitBuilder_));
577  gtgToken_ = esConsumes<GlobalTrackingGeometry, GlobalTrackingGeometryRecord>();
578  dlgeoToken_ = esConsumes<MTDDetLayerGeometry, MTDRecoGeometryRecord>();
579  magfldToken_ = esConsumes<MagneticField, IdealMagneticFieldRecord>();
580  propToken_ = esConsumes<Propagator, TrackingComponentsRecord>(edm::ESInputTag("", propagator_));
581  ttopoToken_ = esConsumes<TrackerTopology, TrackerTopologyRcd>();
582 
583  produces<edm::OwnVector<TrackingRecHit>>();
584  produces<reco::TrackExtraCollection>();
585  produces<TrackCollection>();
586 }
edm::EDPutToken btlMatchTimeChi2Token_
edm::ESGetToken< TransientTrackingRecHitBuilder, TransientRecHitRecord > hitbuilderToken_
edm::EDPutToken btlMatchChi2Token_
edm::EDPutToken tofpOrigTrkToken_
edm::ESGetToken< GlobalTrackingGeometry, GlobalTrackingGeometryRecord > gtgToken_
edm::EDGetTokenT< reco::BeamSpot > bsToken_
std::unique_ptr< MeasurementEstimator > theEstimator
edm::ESGetToken< TrackerTopology, TrackerTopologyRcd > ttopoToken_
edm::EDPutToken etlMatchChi2Token_
edm::EDGetTokenT< GlobalPoint > genVtxPositionToken_
edm::EDPutToken tofkOrigTrkToken_
edm::EDPutToken etlMatchTimeChi2Token_
edm::EDPutToken sigmat0OrigTrkToken_
edm::EDPutToken tmtdOrigTrkToken_
edm::EDGetTokenT< MTDTrackingDetSetVector > hitsToken_
edm::ESGetToken< TransientTrackBuilder, TransientTrackRecord > builderToken_
const std::string mtdRecHitBuilder_
edm::EDPutToken assocOrigTrkToken_
const std::string propagator_
edm::ESGetToken< Propagator, TrackingComponentsRecord > propToken_
const std::string transientTrackBuilder_
std::unique_ptr< TrackTransformer > theTransformer
edm::EDPutToken npixBarrelToken_
edm::ESGetToken< MagneticField, IdealMagneticFieldRecord > magfldToken_
edm::EDPutToken npixEndcapToken_
edm::EDPutToken betaOrigTrkToken_
edm::EDGetTokenT< TrajTrackAssociationCollection > trajTrackAToken_
edm::EDPutToken pathLengthOrigTrkToken_
edm::EDPutToken sigmatmtdOrigTrkToken_
edm::EDPutToken tofpiOrigTrkToken_
edm::EDGetTokenT< float > genVtxTimeToken_
edm::EDGetTokenT< VertexCollection > vtxToken_
edm::EDGetTokenT< InputCollection > tracksToken_
edm::ESGetToken< MTDDetLayerGeometry, MTDRecoGeometryRecord > dlgeoToken_

Member Function Documentation

◆ buildTrack()

template<class TrackCollection >
reco::Track TrackExtenderWithMTDT< TrackCollection >::buildTrack ( const reco::TrackRef 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,
float &  tofpi,
float &  tofk,
float &  tofp 
) const

Definition at line 1122 of file TrackExtenderWithMTD.cc.

References funct::abs(), cms::cuda::bs, c_cm_ns, FreeTrajectoryState::charge(), Trajectory::chiSquared(), FreeTrajectoryState::curvilinearError(), f, FastTime, DetId::Forward, createfilelist::int, LogDebug, Trajectory::measurements(), FreeTrajectoryState::momentum(), ndof, Trajectory::ndof(), AlCaHLTBitMon_ParallelJobs::p, FreeTrajectoryState::position(), cms_rounding::roundIfNear0(), mathSSE::sqrt(), FrontierCondition_GT_autoExpress_cfi::t0, MTDTrackingRecHit::time(), MTDTrackingRecHit::timeError(), TrajectoryStateClosestToBeamLine::trackStateAtPCA(), reco::TrackBase::undefQuality, and findQualityFiles::v.

1134  {
1136  bool tsbcl_status = getTrajectoryStateClosestToBeamLine(traj, bs, thePropagator, tscbl);
1137 
1138  if (!tsbcl_status)
1139  return reco::Track();
1140 
1141  GlobalPoint v = tscbl.trackStateAtPCA().position();
1142  math::XYZPoint pos(v.x(), v.y(), v.z());
1143  GlobalVector p = tscbl.trackStateAtPCA().momentum();
1144  math::XYZVector mom(p.x(), p.y(), p.z());
1145 
1146  int ndof = traj.ndof();
1147 
1148  float t0 = 0.f;
1149  float covt0t0 = -1.f;
1150  pathLengthOut = -1.f; // if there is no MTD flag the pathlength with -1
1151  tmtdOut = 0.f;
1152  sigmatmtdOut = -1.f;
1153  float betaOut = 0.f;
1154  float covbetabeta = -1.f;
1155 
1156  auto routput = [&]() {
1157  return reco::Track(traj.chiSquared(),
1158  int(ndof),
1159  pos,
1160  mom,
1161  tscbl.trackStateAtPCA().charge(),
1163  orig->algo(),
1165  t0,
1166  betaOut,
1167  covt0t0,
1168  covbetabeta);
1169  };
1170 
1171  //compute path length for time backpropagation, using first MTD hit for the momentum
1172  if (hasMTD) {
1173  float pathlength;
1174  TrackSegments trs;
1175  bool validpropagation = trackPathLength(trajWithMtd, bs, thePropagator, pathlength, trs);
1176  float thit = 0.f;
1177  float thiterror = -1.f;
1178  bool validmtd = false;
1179 
1180  if (!validpropagation) {
1181  return routput();
1182  }
1183 
1184  uint32_t ihitcount(0), ietlcount(0);
1185  for (auto const& hit : trajWithMtd.measurements()) {
1186  if (hit.recHit()->geographicalId().det() == DetId::Forward &&
1187  ForwardSubdetector(hit.recHit()->geographicalId().subdetId()) == FastTime) {
1188  ihitcount++;
1189  if (MTDDetId(hit.recHit()->geographicalId()).mtdSubDetector() == MTDDetId::MTDType::ETL) {
1190  ietlcount++;
1191  }
1192  }
1193  }
1194 
1195  auto ihit1 = trajWithMtd.measurements().cbegin();
1196  if (ihitcount == 1) {
1197  const MTDTrackingRecHit* mtdhit = static_cast<const MTDTrackingRecHit*>((*ihit1).recHit()->hit());
1198  thit = mtdhit->time();
1199  thiterror = mtdhit->timeError();
1200  validmtd = true;
1201  } else if (ihitcount == 2 && ietlcount == 2) {
1202  std::pair<float, float> lastStep = trs.getSegmentPathAndMom2(0);
1203  float etlpathlength = std::abs(lastStep.first * c_cm_ns);
1204  //
1205  // The information of the two ETL hits is combined and attributed to the innermost hit
1206  //
1207  if (etlpathlength == 0.f) {
1208  validpropagation = false;
1209  } else {
1210  pathlength -= etlpathlength;
1211  trs.removeFirstSegment();
1212  const MTDTrackingRecHit* mtdhit1 = static_cast<const MTDTrackingRecHit*>((*ihit1).recHit()->hit());
1213  const MTDTrackingRecHit* mtdhit2 = static_cast<const MTDTrackingRecHit*>((*(ihit1 + 1)).recHit()->hit());
1214  TrackTofPidInfo tofInfo = computeTrackTofPidInfo(
1215  lastStep.second, etlpathlength, trs, mtdhit1->time(), mtdhit1->timeError(), 0.f, 0.f, true, TofCalc::kCost);
1216  //
1217  // Protect against incompatible times
1218  //
1219  float err1 = tofInfo.dterror * tofInfo.dterror;
1220  float err2 = mtdhit2->timeError() * mtdhit2->timeError();
1221  if (cms_rounding::roundIfNear0(err1) == 0.f || cms_rounding::roundIfNear0(err2) == 0.f) {
1222  edm::LogError("TrackExtenderWithMTD")
1223  << "MTD tracking hits with zero time uncertainty: " << err1 << " " << err2;
1224  } else {
1225  if ((tofInfo.dt - mtdhit2->time()) * (tofInfo.dt - mtdhit2->time()) < (err1 + err2) * etlTimeChi2Cut_) {
1226  //
1227  // Subtract the ETL time of flight from the outermost measurement, and combine it in a weighted average with the innermost
1228  // the mass ambiguity related uncertainty on the time of flight is added as an additional uncertainty
1229  //
1230  err1 = 1.f / err1;
1231  err2 = 1.f / err2;
1232  thiterror = 1.f / (err1 + err2);
1233  thit = (tofInfo.dt * err1 + mtdhit2->time() * err2) * thiterror;
1234  thiterror = std::sqrt(thiterror);
1235  LogDebug("TrackExtenderWithMTD") << "p trk = " << p.mag() << " ETL hits times/errors: " << mtdhit1->time()
1236  << " +/- " << mtdhit1->timeError() << " , " << mtdhit2->time() << " +/- "
1237  << mtdhit2->timeError() << " extrapolated time1: " << tofInfo.dt << " +/- "
1238  << tofInfo.dterror << " average = " << thit << " +/- " << thiterror;
1239  validmtd = true;
1240  }
1241  }
1242  }
1243  } else {
1244  edm::LogInfo("TrackExtenderWithMTD")
1245  << "MTD hits #" << ihitcount << "ETL hits #" << ietlcount << " anomalous pattern, skipping...";
1246  }
1247 
1248  if (validmtd && validpropagation) {
1249  //here add the PID uncertainty for later use in the 1st step of 4D vtx reconstruction
1250  TrackTofPidInfo tofInfo =
1251  computeTrackTofPidInfo(p.mag2(), pathlength, trs, thit, thiterror, 0.f, 0.f, true, TofCalc::kSegm);
1252  pathLengthOut = pathlength; // set path length if we've got a timing hit
1253  tmtdOut = thit;
1254  sigmatmtdOut = thiterror;
1255  t0 = tofInfo.dt;
1256  covt0t0 = tofInfo.dterror * tofInfo.dterror;
1257  betaOut = tofInfo.beta_pi;
1258  covbetabeta = tofInfo.betaerror * tofInfo.betaerror;
1259  tofpi = tofInfo.dt_pi;
1260  tofk = tofInfo.dt_k;
1261  tofp = tofInfo.dt_p;
1262  }
1263  }
1264 
1265  return routput();
1266 }
const CurvilinearTrajectoryError & curvilinearError() const
constexpr double c_cm_ns
float chiSquared() const
Definition: Trajectory.h:241
Log< level::Error, false > LogError
ForwardSubdetector
Detector identifier base class for the MIP Timing Layer.
Definition: MTDDetId.h:21
DataContainer const & measurements() const
Definition: Trajectory.h:178
GlobalPoint position() const
int ndof(bool bon=true) const
Definition: Trajectory.cc:97
T sqrt(T t)
Definition: SSEVec.h:19
TrackCharge charge() const
GlobalVector momentum() const
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
double f[11][100]
constexpr valType roundIfNear0(valType value, double tolerance=1.e-7)
Definition: Rounding.h:11
Log< level::Info, false > LogInfo
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 timeError() const
float time() const
#define LogDebug(id)

◆ buildTrackExtra()

template<class TrackCollection >
reco::TrackExtra TrackExtenderWithMTDT< TrackCollection >::buildTrackExtra ( const Trajectory trajectory) const

Definition at line 1269 of file TrackExtenderWithMTD.cc.

References alongMomentum, Surface::bounds(), TrajectoryStateOnSurface::curvilinearError(), Trajectory::direction(), Trajectory::firstMeasurement(), TrajectoryStateOnSurface::globalParameters(), 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(), and findQualityFiles::v.

1269  {
1270  static const string metname = "TrackExtenderWithMTD";
1271 
1272  const Trajectory::RecHitContainer transRecHits = trajectory.recHits();
1273 
1274  // put the collection of TrackingRecHit in the event
1275 
1276  // sets the outermost and innermost TSOSs
1277  // ToDo: validation for track states with MTD
1278  TrajectoryStateOnSurface outerTSOS;
1279  TrajectoryStateOnSurface innerTSOS;
1280  unsigned int innerId = 0, outerId = 0;
1282  DetId outerDetId;
1283 
1284  if (trajectory.direction() == alongMomentum) {
1285  LogTrace(metname) << "alongMomentum";
1286  outerTSOS = trajectory.lastMeasurement().updatedState();
1287  innerTSOS = trajectory.firstMeasurement().updatedState();
1288  outerId = trajectory.lastMeasurement().recHit()->geographicalId().rawId();
1289  innerId = trajectory.firstMeasurement().recHit()->geographicalId().rawId();
1290  outerRecHit = trajectory.lastMeasurement().recHit();
1291  outerDetId = trajectory.lastMeasurement().recHit()->geographicalId();
1292  } else if (trajectory.direction() == oppositeToMomentum) {
1293  LogTrace(metname) << "oppositeToMomentum";
1294  outerTSOS = trajectory.firstMeasurement().updatedState();
1295  innerTSOS = trajectory.lastMeasurement().updatedState();
1296  outerId = trajectory.firstMeasurement().recHit()->geographicalId().rawId();
1297  innerId = trajectory.lastMeasurement().recHit()->geographicalId().rawId();
1298  outerRecHit = trajectory.firstMeasurement().recHit();
1299  outerDetId = trajectory.firstMeasurement().recHit()->geographicalId();
1300  } else
1301  LogError(metname) << "Wrong propagation direction!";
1302 
1303  const GeomDet* outerDet = gtg_->idToDet(outerDetId);
1304  GlobalPoint outerTSOSPos = outerTSOS.globalParameters().position();
1305  bool inside = outerDet->surface().bounds().inside(outerDet->toLocal(outerTSOSPos));
1306 
1307  GlobalPoint hitPos =
1308  (outerRecHit->isValid()) ? outerRecHit->globalPosition() : outerTSOS.globalParameters().position();
1309 
1310  if (!inside) {
1311  LogTrace(metname) << "The Global Muon outerMostMeasurementState is not compatible with the recHit detector!"
1312  << " Setting outerMost postition to recHit position if recHit isValid: "
1313  << outerRecHit->isValid();
1314  LogTrace(metname) << "From " << outerTSOSPos << " to " << hitPos;
1315  }
1316 
1317  //build the TrackExtra
1318  GlobalPoint v = (inside) ? outerTSOSPos : hitPos;
1319  GlobalVector p = outerTSOS.globalParameters().momentum();
1320  math::XYZPoint outpos(v.x(), v.y(), v.z());
1321  math::XYZVector outmom(p.x(), p.y(), p.z());
1322 
1323  v = innerTSOS.globalParameters().position();
1324  p = innerTSOS.globalParameters().momentum();
1325  math::XYZPoint inpos(v.x(), v.y(), v.z());
1326  math::XYZVector inmom(p.x(), p.y(), p.z());
1327 
1328  reco::TrackExtra trackExtra(outpos,
1329  outmom,
1330  true,
1331  inpos,
1332  inmom,
1333  true,
1334  outerTSOS.curvilinearError(),
1335  outerId,
1336  innerTSOS.curvilinearError(),
1337  innerId,
1338  trajectory.direction(),
1339  trajectory.seedRef());
1340 
1341  return trackExtra;
1342 }
virtual bool inside(const Local3DPoint &) const =0
Determine if the point is inside the bounds.
LocalPoint toLocal(const GlobalPoint &gp) const
Conversion to the R.F. of the GeomDet.
Definition: GeomDet.h:58
const std::string metname
const GlobalTrajectoryParameters & globalParameters() const
edm::RefToBase< TrajectorySeed > seedRef(void) const
Definition: Trajectory.h:303
Log< level::Error, false > LogError
const GeomDet * idToDet(DetId) const override
TrajectoryMeasurement const & lastMeasurement() const
Definition: Trajectory.h:150
#define LogTrace(id)
PropagationDirection const & direction() const
Definition: Trajectory.cc:133
ConstRecHitContainer recHits() const
Definition: Trajectory.h:186
Definition: DetId.h:17
ConstRecHitContainer RecHitContainer
Definition: Trajectory.h:42
const Plane & surface() const
The nominal surface of the GeomDet.
Definition: GeomDet.h:37
const CurvilinearTrajectoryError & curvilinearError() 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
TrajectoryStateOnSurface const & updatedState() const
TrajectoryMeasurement const & firstMeasurement() const
Definition: Trajectory.h:166
edm::ESHandle< GlobalTrackingGeometry > gtg_
ConstRecHitPointer const & recHit() const
const Bounds & bounds() const
Definition: Surface.h:87

◆ checkRecHitsOrdering()

template<class TrackCollection >
RefitDirection::GeometricalDirection TrackExtenderWithMTDT< TrackCollection >::checkRecHitsOrdering ( TransientTrackingRecHit::ConstRecHitContainer const &  recHits) const
inline

Definition at line 432 of file TrackExtenderWithMTD.cc.

References dqmdumpme::first, RefitDirection::insideOut, dqmdumpme::last, LogDebug, RefitDirection::outsideIn, position, FastTrackerRecHitMaskProducer_cfi::recHits, and RefitDirection::undetermined.

433  {
434  if (!recHits.empty()) {
435  GlobalPoint first = gtg_->idToDet(recHits.front()->geographicalId())->position();
436  GlobalPoint last = gtg_->idToDet(recHits.back()->geographicalId())->position();
437 
438  // maybe perp2?
439  auto rFirst = first.mag2();
440  auto rLast = last.mag2();
441  if (rFirst < rLast)
443  if (rFirst > rLast)
445  }
446  LogDebug("TrackExtenderWithMTD") << "Impossible to determine the rechits order" << endl;
448  }
const GeomDet * idToDet(DetId) const override
static int position[264][3]
Definition: ReadPGInfo.cc:289
edm::ESHandle< GlobalTrackingGeometry > gtg_
#define LogDebug(id)

◆ dumpLayer()

template<class TrackCollection >
string TrackExtenderWithMTDT< TrackCollection >::dumpLayer ( const DetLayer layer) const

Definition at line 1345 of file TrackExtenderWithMTD.cc.

References pixelTopology::layer, and convertSQLitetoXML_cfg::output.

1345  {
1346  stringstream output;
1347 
1348  const BoundSurface* sur = nullptr;
1349  const BoundCylinder* bc = nullptr;
1350  const BoundDisk* bd = nullptr;
1351 
1352  sur = &(layer->surface());
1353  if ((bc = dynamic_cast<const BoundCylinder*>(sur))) {
1354  output << " Cylinder of radius: " << bc->radius() << endl;
1355  } else if ((bd = dynamic_cast<const BoundDisk*>(sur))) {
1356  output << " Disk at: " << bd->position().z() << endl;
1357  }
1358  return output.str();
1359 }
constexpr std::array< uint8_t, layerIndexSize< TrackerTraits > > layer

◆ fillDescriptions()

template<class TrackCollection >
void TrackExtenderWithMTDT< TrackCollection >::fillDescriptions ( edm::ConfigurationDescriptions descriptions)
static

Definition at line 589 of file TrackExtenderWithMTD.cc.

References edm::ConfigurationDescriptions::add(), submitPVResolutionJobs::desc, TrackTransformer::fillPSetDescription(), HLT_2022v15_cff::InputTag, and AlCaHLTBitMon_QueryRunRegistry::string.

589  {
591  desc.add<edm::InputTag>("tracksSrc", edm::InputTag("generalTracks"));
592  desc.add<edm::InputTag>("trjtrkAssSrc", edm::InputTag("generalTracks"));
593  desc.add<edm::InputTag>("hitsSrc", edm::InputTag("mtdTrackingRecHits"));
594  desc.add<edm::InputTag>("beamSpotSrc", edm::InputTag("offlineBeamSpot"));
595  desc.add<edm::InputTag>("genVtxPositionSrc", edm::InputTag("genParticles:xyz0"));
596  desc.add<edm::InputTag>("genVtxTimeSrc", edm::InputTag("genParticles:t0"));
597  desc.add<edm::InputTag>("vtxSrc", edm::InputTag("offlinePrimaryVertices4D"));
598  desc.add<bool>("updateTrackTrajectory", true);
599  desc.add<bool>("updateTrackExtra", true);
600  desc.add<bool>("updateTrackHitPattern", true);
601  desc.add<std::string>("TransientTrackBuilder", "TransientTrackBuilder");
602  desc.add<std::string>("MTDRecHitBuilder", "MTDRecHitBuilder");
603  desc.add<std::string>("Propagator", "PropagatorWithMaterialForMTD");
605  false,
606  "KFFitterForRefitInsideOut",
607  "KFSmootherForRefitInsideOut",
608  "PropagatorWithMaterialForMTD",
609  "alongMomentum",
610  true,
611  "WithTrackAngle",
612  "MuonRecHitBuilder",
613  "MTDRecHitBuilder");
614  desc.add<edm::ParameterSetDescription>("TrackTransformer", transDesc);
615  desc.add<double>("estimatorMaxChi2", 500.);
616  desc.add<double>("estimatorMaxNSigma", 10.);
617  desc.add<double>("btlChi2Cut", 50.);
618  desc.add<double>("btlTimeChi2Cut", 10.);
619  desc.add<double>("etlChi2Cut", 50.);
620  desc.add<double>("etlTimeChi2Cut", 10.);
621  desc.add<bool>("useVertex", false);
622  desc.add<bool>("useSimVertex", false);
623  desc.add<double>("dZCut", 0.1);
624  desc.add<double>("bsTimeSpread", 0.2);
625  descriptions.add("trackExtenderWithMTDBase", desc);
626 }
void add(std::string const &label, ParameterSetDescription const &psetDescription)
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

◆ fillMatchingHits()

template<class TrackCollection >
void TrackExtenderWithMTDT< TrackCollection >::fillMatchingHits ( const DetLayer ilay,
const TrajectoryStateOnSurface tsos,
const Trajectory traj,
const float  pmag2,
const float  pathlength0,
const TrackSegments &  trs0,
const MTDTrackingDetSetVector hits,
const Propagator prop,
const reco::BeamSpot bs,
const float &  vtxTime,
const bool  matchVertex,
TransientTrackingRecHit::ConstRecHitContainer output,
MTDHitMatchingInfo &  bestHit 
) const

Definition at line 1048 of file TrackExtenderWithMTD.cc.

References cms::cuda::bs, hfClusterShapes_cfi::hits, DetLayer::isBarrel(), and convertSQLitetoXML_cfg::output.

1060  {
1061  std::set<MTDHitMatchingInfo> hitsInLayer;
1062  bool hitMatched = false;
1063 
1064  using namespace std::placeholders;
1065  auto find_hits = std::bind(find_hits_in_dets,
1066  std::cref(hits),
1067  std::cref(traj),
1068  ilay,
1069  std::cref(tsos),
1070  pmag2,
1071  pathlength0,
1072  trs0,
1073  _1,
1074  std::cref(bs),
1075  bsTimeSpread_,
1076  prop,
1077  theEstimator.get(),
1078  _2,
1079  std::ref(hitsInLayer));
1080 
1081  if (useVertex_ && matchVertex)
1082  find_hits(vtxTime, true);
1083  else
1084  find_hits(0, false);
1085 
1086  float spaceChi2Cut = ilay->isBarrel() ? btlChi2Cut_ : etlChi2Cut_;
1087  float timeChi2Cut = ilay->isBarrel() ? btlTimeChi2Cut_ : etlTimeChi2Cut_;
1088 
1089  //just take the first hit because the hits are sorted on their matching quality
1090  if (!hitsInLayer.empty()) {
1091  //check hits to pass minimum quality matching requirements
1092  auto const& firstHit = *hitsInLayer.begin();
1093  if (firstHit.estChi2 < spaceChi2Cut && firstHit.timeChi2 < timeChi2Cut) {
1094  hitMatched = true;
1095  output.push_back(hitbuilder_->build(firstHit.hit));
1096  if (firstHit < bestHit)
1097  bestHit = firstHit;
1098  }
1099  }
1100 
1101  if (useVertex_ && matchVertex && !hitMatched) {
1102  //try a second search with beamspot hypothesis
1103  hitsInLayer.clear();
1104  find_hits(0, false);
1105  if (!hitsInLayer.empty()) {
1106  auto const& firstHit = *hitsInLayer.begin();
1107  if (firstHit.timeChi2 < timeChi2Cut) {
1108  if (firstHit.estChi2 < spaceChi2Cut) {
1109  hitMatched = true;
1110  output.push_back(hitbuilder_->build(firstHit.hit));
1111  if (firstHit < bestHit)
1112  bestHit = firstHit;
1113  }
1114  }
1115  }
1116  }
1117 }
std::unique_ptr< MeasurementEstimator > theEstimator
virtual RecHitPointer build(const TrackingRecHit *p) const =0
build a tracking rechit from an existing rechit
edm::ESHandle< TransientTrackingRecHitBuilder > hitbuilder_
bool isBarrel() const
Definition: DetLayer.h:31

◆ fillValueMap()

template<class TrackCollection >
template<class H , class T >
void TrackExtenderWithMTDT< TrackCollection >::fillValueMap ( edm::Event iEvent,
const H &  handle,
const std::vector< T > &  vec,
const edm::EDPutToken token 
) const

Definition at line 630 of file TrackExtenderWithMTD.cc.

References trigObjTnPSource_cfi::filler, patZpeak::handle, iEvent, eostools::move(), MillePedeFileConverter_cfg::out, and unpackBuffers-CaloStage2::token.

633  {
634  auto out = std::make_unique<edm::ValueMap<T>>();
636  filler.insert(handle, vec.begin(), vec.end());
637  filler.fill();
638  iEvent.put(token, std::move(out));
639 }
int iEvent
Definition: GenABIO.cc:224
def move(src, dest)
Definition: eostools.py:511

◆ produce()

template<class TrackCollection >
void TrackExtenderWithMTDT< TrackCollection >::produce ( edm::Event ev,
const edm::EventSetup es 
)
final

setup the track extras

Definition at line 642 of file TrackExtenderWithMTD.cc.

References funct::abs(), cms::cuda::bs, PVValHelper::dz, makeMEIFBenchmarkPlots::ev, f, edm::EventSetup::getHandle(), edm::EventSetup::getTransientHandle(), hfClusterShapes_cfi::hits, RefitDirection::insideOut, Trajectory::isValid(), LogTrace, PV3DBase< T, PVType, FrameType >::mag2(), volumeBasedMagneticField_160812_cfi::magfield, FreeTrajectoryState::momentum(), eostools::move(), config::ordering, convertSQLitetoXML_cfg::output, mps_fire::result, groupFilesInBlocks::reverse, mathSSE::sqrt(), HLT_2022v15_cff::track, and TrajectoryStateClosestToBeamLine::trackStateAtPCA().

642  {
643  //this produces pieces of the track extra
644  Traj2TrackHits t2t;
645 
646  theTransformer->setServices(es);
647 
648  TrackingRecHitRefProd hitsRefProd = ev.getRefBeforePut<TrackingRecHitCollection>();
649  reco::TrackExtraRefProd extrasRefProd = ev.getRefBeforePut<reco::TrackExtraCollection>();
650 
651  gtg_ = es.getHandle(gtgToken_);
652 
653  auto geo = es.getTransientHandle(dlgeoToken_);
654 
656 
659 
660  auto propH = es.getTransientHandle(propToken_);
661  const Propagator* prop = propH.product();
662 
663  auto httopo = es.getTransientHandle(ttopoToken_);
664  const TrackerTopology& ttopo = *httopo;
665 
666  auto output = std::make_unique<TrackCollection>();
667  auto extras = std::make_unique<reco::TrackExtraCollection>();
668  auto outhits = std::make_unique<edm::OwnVector<TrackingRecHit>>();
669 
670  std::vector<float> btlMatchChi2;
671  std::vector<float> etlMatchChi2;
672  std::vector<float> btlMatchTimeChi2;
673  std::vector<float> etlMatchTimeChi2;
674  std::vector<int> npixBarrel;
675  std::vector<int> npixEndcap;
676  std::vector<float> pOrigTrkRaw;
677  std::vector<float> betaOrigTrkRaw;
678  std::vector<float> t0OrigTrkRaw;
679  std::vector<float> sigmat0OrigTrkRaw;
680  std::vector<float> pathLengthsOrigTrkRaw;
681  std::vector<float> tmtdOrigTrkRaw;
682  std::vector<float> sigmatmtdOrigTrkRaw;
683  std::vector<float> tofpiOrigTrkRaw;
684  std::vector<float> tofkOrigTrkRaw;
685  std::vector<float> tofpOrigTrkRaw;
686  std::vector<int> assocOrigTrkRaw;
687 
688  auto const tracksH = ev.getHandle(tracksToken_);
689 
690  const auto& trjtrks = ev.get(trajTrackAToken_);
691 
692  //MTD hits DetSet
693  const auto& hits = ev.get(hitsToken_);
694 
695  //beam spot
696  const auto& bs = ev.get(bsToken_);
697 
698  const Vertex* pv = nullptr;
699  if (useVertex_ && !useSimVertex_) {
700  auto const& vtxs = ev.get(vtxToken_);
701  if (!vtxs.empty())
702  pv = &vtxs[0];
703  }
704 
705  std::unique_ptr<math::XYZTLorentzVectorF> genPV(nullptr);
706  if (useVertex_ && useSimVertex_) {
707  const auto& genVtxPosition = ev.get(genVtxPositionToken_);
708  const auto& genVtxTime = ev.get(genVtxTimeToken_);
709  genPV = std::make_unique<math::XYZTLorentzVectorF>(
710  genVtxPosition.x(), genVtxPosition.y(), genVtxPosition.z(), genVtxTime);
711  }
712 
713  float vtxTime = 0.f;
714  if (useVertex_) {
715  if (useSimVertex_ && genPV) {
716  vtxTime = genPV->t();
717  } else if (pv)
718  vtxTime = pv->t(); //already in ns
719  }
720 
721  std::vector<unsigned> track_indices;
722  unsigned itrack = 0;
723 
724  for (const auto& trjtrk : trjtrks) {
725  const Trajectory& trajs = *trjtrk.key;
726  const reco::TrackRef& track = trjtrk.val;
727 
728  float trackVtxTime = 0.f;
729  if (useVertex_) {
730  float dz;
731  if (useSimVertex_)
732  dz = std::abs(track->dz(math::XYZPoint(*genPV)));
733  else
734  dz = std::abs(track->dz(pv->position()));
735 
736  if (dz < dzCut_)
737  trackVtxTime = vtxTime;
738  }
739 
740  reco::TransientTrack ttrack(track, magfield.product(), gtg_);
741  auto thits = theTransformer->getTransientRecHits(ttrack);
743  MTDHitMatchingInfo mBTL, mETL;
744 
745  if (trajs.isValid()) {
746  // get the outermost trajectory point on the track
749  bool tscbl_status = getTrajectoryStateClosestToBeamLine(trajs, bs, prop, tscbl);
750 
751  if (tscbl_status) {
752  float pmag2 = tscbl.trackStateAtPCA().momentum().mag2();
753  float pathlength0;
754  TrackSegments trs0;
755  trackPathLength(trajs, tscbl, prop, pathlength0, trs0);
756 
757  const auto& btlhits = tryBTLLayers(tsos,
758  trajs,
759  pmag2,
760  pathlength0,
761  trs0,
762  hits,
763  geo.product(),
764  magfield.product(),
765  prop,
766  bs,
767  trackVtxTime,
768  trackVtxTime != 0.f,
769  mBTL);
770  mtdthits.insert(mtdthits.end(), btlhits.begin(), btlhits.end());
771 
772  // in the future this should include an intermediate refit before propagating to the ETL
773  // for now it is ok
774  const auto& etlhits = tryETLLayers(tsos,
775  trajs,
776  pmag2,
777  pathlength0,
778  trs0,
779  hits,
780  geo.product(),
781  magfield.product(),
782  prop,
783  bs,
784  trackVtxTime,
785  trackVtxTime != 0.f,
786  mETL);
787  mtdthits.insert(mtdthits.end(), etlhits.begin(), etlhits.end());
788  }
789  }
790 
791  auto ordering = checkRecHitsOrdering(thits);
793  thits.insert(thits.end(), mtdthits.begin(), mtdthits.end());
794  } else {
795  std::reverse(mtdthits.begin(), mtdthits.end());
796  mtdthits.insert(mtdthits.end(), thits.begin(), thits.end());
797  thits.swap(mtdthits);
798  }
799 
800  const auto& trajwithmtd =
801  mtdthits.empty() ? std::vector<Trajectory>(1, trajs) : theTransformer->transform(ttrack, thits);
802  float pMap = 0.f, betaMap = 0.f, t0Map = 0.f, sigmat0Map = -1.f, pathLengthMap = -1.f, tmtdMap = 0.f,
803  sigmatmtdMap = -1.f, tofpiMap = 0.f, tofkMap = 0.f, tofpMap = 0.f;
804  int iMap = -1;
805 
806  for (const auto& trj : trajwithmtd) {
807  const auto& thetrj = (updateTraj_ ? trj : trajs);
808  float pathLength = 0.f, tmtd = 0.f, sigmatmtd = -1.f, tofpi = 0.f, tofk = 0.f, tofp = 0.f;
809  LogTrace("TrackExtenderWithMTD") << "Refit track " << itrack << " p/pT = " << track->p() << " " << track->pt()
810  << " eta = " << track->eta();
812  thetrj,
813  trj,
814  bs,
815  magfield.product(),
816  prop,
817  !trajwithmtd.empty() && !mtdthits.empty(),
818  pathLength,
819  tmtd,
820  sigmatmtd,
821  tofpi,
822  tofk,
823  tofp);
824  if (result.ndof() >= 0) {
826  reco::TrackExtra::TrajParams trajParams;
828  size_t hitsstart = outhits->size();
829  if (updatePattern_) {
830  t2t(trj, *outhits, trajParams, chi2s); // this fills the output hit collection
831  } else {
832  t2t(thetrj, *outhits, trajParams, chi2s);
833  }
834  size_t hitsend = outhits->size();
835  extras->push_back(buildTrackExtra(trj)); // always push back the fully built extra, update by setting in track
836  extras->back().setHits(hitsRefProd, hitsstart, hitsend - hitsstart);
837  extras->back().setTrajParams(trajParams, chi2s);
838  //create the track
839  output->push_back(result);
840  btlMatchChi2.push_back(mBTL.hit ? mBTL.estChi2 : -1.f);
841  etlMatchChi2.push_back(mETL.hit ? mETL.estChi2 : -1.f);
842  btlMatchTimeChi2.push_back(mBTL.hit ? mBTL.timeChi2 : -1.f);
843  etlMatchTimeChi2.push_back(mETL.hit ? mETL.timeChi2 : -1.f);
844  pathLengthMap = pathLength;
845  tmtdMap = tmtd;
846  sigmatmtdMap = sigmatmtd;
847  auto& backtrack = output->back();
848  iMap = output->size() - 1;
849  pMap = backtrack.p();
850  betaMap = backtrack.beta();
851  t0Map = backtrack.t0();
852  sigmat0Map = std::copysign(std::sqrt(std::abs(backtrack.covt0t0())), backtrack.covt0t0());
853  tofpiMap = tofpi;
854  tofkMap = tofk;
855  tofpMap = tofp;
856  reco::TrackExtraRef extraRef(extrasRefProd, extras->size() - 1);
857  backtrack.setExtra((updateExtra_ ? extraRef : track->extra()));
858  for (unsigned ihit = hitsstart; ihit < hitsend; ++ihit) {
859  backtrack.appendHitPattern((*outhits)[ihit], ttopo);
860  }
861  npixBarrel.push_back(backtrack.hitPattern().numberOfValidPixelBarrelHits());
862  npixEndcap.push_back(backtrack.hitPattern().numberOfValidPixelEndcapHits());
863  LogTrace("TrackExtenderWithMTD") << "tmtd " << tmtdMap << " +/- " << sigmatmtdMap << " t0 " << t0Map << " +/- "
864  << sigmat0Map << " tof pi/K/p " << tofpiMap << " " << tofkMap << " "
865  << tofpMap;
866  } else {
867  LogTrace("TrackExtenderWithMTD") << "Error in the MTD track refitting. This should not happen";
868  }
869  }
870 
871  pOrigTrkRaw.push_back(pMap);
872  betaOrigTrkRaw.push_back(betaMap);
873  t0OrigTrkRaw.push_back(t0Map);
874  sigmat0OrigTrkRaw.push_back(sigmat0Map);
875  pathLengthsOrigTrkRaw.push_back(pathLengthMap);
876  tmtdOrigTrkRaw.push_back(tmtdMap);
877  sigmatmtdOrigTrkRaw.push_back(sigmatmtdMap);
878  tofpiOrigTrkRaw.push_back(tofpiMap);
879  tofkOrigTrkRaw.push_back(tofkMap);
880  tofpOrigTrkRaw.push_back(tofpMap);
881  assocOrigTrkRaw.push_back(iMap);
882 
883  if (iMap == -1) {
884  btlMatchChi2.push_back(-1.f);
885  etlMatchChi2.push_back(-1.f);
886  btlMatchTimeChi2.push_back(-1.f);
887  etlMatchTimeChi2.push_back(-1.f);
888  npixBarrel.push_back(-1.f);
889  npixEndcap.push_back(-1.f);
890  }
891 
892  ++itrack;
893  }
894 
895  auto outTrksHandle = ev.put(std::move(output));
896  ev.put(std::move(extras));
897  ev.put(std::move(outhits));
898 
899  fillValueMap(ev, tracksH, btlMatchChi2, btlMatchChi2Token_);
900  fillValueMap(ev, tracksH, etlMatchChi2, etlMatchChi2Token_);
901  fillValueMap(ev, tracksH, btlMatchTimeChi2, btlMatchTimeChi2Token_);
902  fillValueMap(ev, tracksH, etlMatchTimeChi2, etlMatchTimeChi2Token_);
903  fillValueMap(ev, tracksH, npixBarrel, npixBarrelToken_);
904  fillValueMap(ev, tracksH, npixEndcap, npixEndcapToken_);
905  fillValueMap(ev, tracksH, pOrigTrkRaw, pOrigTrkToken_);
906  fillValueMap(ev, tracksH, betaOrigTrkRaw, betaOrigTrkToken_);
907  fillValueMap(ev, tracksH, t0OrigTrkRaw, t0OrigTrkToken_);
908  fillValueMap(ev, tracksH, sigmat0OrigTrkRaw, sigmat0OrigTrkToken_);
909  fillValueMap(ev, tracksH, pathLengthsOrigTrkRaw, pathLengthOrigTrkToken_);
910  fillValueMap(ev, tracksH, tmtdOrigTrkRaw, tmtdOrigTrkToken_);
911  fillValueMap(ev, tracksH, sigmatmtdOrigTrkRaw, sigmatmtdOrigTrkToken_);
912  fillValueMap(ev, tracksH, tofpiOrigTrkRaw, tofpiOrigTrkToken_);
913  fillValueMap(ev, tracksH, tofkOrigTrkRaw, tofkOrigTrkToken_);
914  fillValueMap(ev, tracksH, tofpOrigTrkRaw, tofpOrigTrkToken_);
915  fillValueMap(ev, tracksH, assocOrigTrkRaw, assocOrigTrkToken_);
916 }
edm::EDPutToken btlMatchTimeChi2Token_
bool isValid() const
Definition: Trajectory.h:257
edm::ESGetToken< TransientTrackingRecHitBuilder, TransientRecHitRecord > hitbuilderToken_
edm::EDPutToken btlMatchChi2Token_
std::vector< unsigned char > Chi2sFive
edm::EDPutToken tofpOrigTrkToken_
edm::ESGetToken< GlobalTrackingGeometry, GlobalTrackingGeometryRecord > gtgToken_
edm::EDGetTokenT< reco::BeamSpot > bsToken_
edm::ESGetToken< TrackerTopology, TrackerTopologyRcd > ttopoToken_
edm::EDPutToken etlMatchChi2Token_
edm::EDGetTokenT< GlobalPoint > genVtxPositionToken_
T mag2() const
Definition: PV3DBase.h:63
edm::EDPutToken tofkOrigTrkToken_
edm::EDPutToken etlMatchTimeChi2Token_
edm::EDPutToken sigmat0OrigTrkToken_
void fillValueMap(edm::Event &iEvent, const H &handle, const std::vector< T > &vec, const edm::EDPutToken &token) const
edm::EDPutToken tmtdOrigTrkToken_
edm::EDGetTokenT< MTDTrackingDetSetVector > hitsToken_
#define LogTrace(id)
TransientTrackingRecHit::ConstRecHitContainer tryETLLayers(const TrajectoryStateOnSurface &, const Trajectory &traj, const float, const float, const TrackSegments &, const MTDTrackingDetSetVector &, const MTDDetLayerGeometry *, const MagneticField *field, const Propagator *prop, const reco::BeamSpot &bs, const float vtxTime, const bool matchVertex, MTDHitMatchingInfo &bestHit) const
reco::TransientTrack build(const reco::Track *p) const
std::vector< LocalTrajectoryParameters > TrajParams
edm::ESGetToken< TransientTrackBuilder, TransientTrackRecord > builderToken_
TrajectoryStateOnSurface outermostMeasurementState() const
T sqrt(T t)
Definition: SSEVec.h:19
GlobalVector momentum() const
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
double f[11][100]
edm::EDPutToken assocOrigTrkToken_
edm::ESGetToken< Propagator, TrackingComponentsRecord > propToken_
ESHandle< T > getHandle(const ESGetToken< T, R > &iToken) const
Definition: EventSetup.h:130
edm::ESHandle< TransientTrackingRecHitBuilder > hitbuilder_
std::vector< ConstRecHitPointer > ConstRecHitContainer
std::vector< TrackExtra > TrackExtraCollection
collection of TrackExtra objects
Definition: TrackExtraFwd.h:10
XYZPointD XYZPoint
point in space with cartesian internal representation
Definition: Point3D.h:12
reco::TrackExtra buildTrackExtra(const Trajectory &trajectory) const
edm::ESHandle< TransientTrackBuilder > builder_
std::unique_ptr< TrackTransformer > theTransformer
edm::EDPutToken npixBarrelToken_
edm::ESGetToken< MagneticField, IdealMagneticFieldRecord > magfldToken_
edm::EDPutToken npixEndcapToken_
edm::EDPutToken betaOrigTrkToken_
ESTransientHandle< T > getTransientHandle(const ESGetToken< T, R > &iToken) const
Definition: EventSetup.h:141
edm::EDGetTokenT< TrajTrackAssociationCollection > trajTrackAToken_
edm::EDPutToken pathLengthOrigTrkToken_
edm::ESHandle< GlobalTrackingGeometry > gtg_
edm::EDPutToken sigmatmtdOrigTrkToken_
TransientTrackingRecHit::ConstRecHitContainer tryBTLLayers(const TrajectoryStateOnSurface &, const Trajectory &traj, const float, const float, const TrackSegments &, const MTDTrackingDetSetVector &, const MTDDetLayerGeometry *, const MagneticField *field, const Propagator *prop, const reco::BeamSpot &bs, const float vtxTime, const bool matchVertex, MTDHitMatchingInfo &bestHit) const
edm::EDPutToken tofpiOrigTrkToken_
edm::EDGetTokenT< float > genVtxTimeToken_
ordering
Definition: config.py:7
edm::EDGetTokenT< VertexCollection > vtxToken_
edm::EDGetTokenT< InputCollection > tracksToken_
def move(src, dest)
Definition: eostools.py:511
RefitDirection::GeometricalDirection checkRecHitsOrdering(TransientTrackingRecHit::ConstRecHitContainer const &recHits) const
reco::Track buildTrack(const reco::TrackRef &, const Trajectory &, const Trajectory &, const reco::BeamSpot &, const MagneticField *field, const Propagator *prop, bool hasMTD, float &pathLength, float &tmtdOut, float &sigmatmtdOut, float &tofpi, float &tofk, float &tofp) const
edm::ESGetToken< MTDDetLayerGeometry, MTDRecoGeometryRecord > dlgeoToken_

◆ tryBTLLayers()

template<class TrackCollection >
TransientTrackingRecHit::ConstRecHitContainer TrackExtenderWithMTDT< TrackCollection >::tryBTLLayers ( const TrajectoryStateOnSurface tsos,
const Trajectory traj,
const float  pmag2,
const float  pathlength0,
const TrackSegments &  trs0,
const MTDTrackingDetSetVector hits,
const MTDDetLayerGeometry geo,
const MagneticField field,
const Propagator prop,
const reco::BeamSpot bs,
const float  vtxTime,
const bool  matchVertex,
MTDHitMatchingInfo &  bestHit 
) const

Definition at line 985 of file TrackExtenderWithMTD.cc.

References MTDDetLayerGeometry::allBTLLayers(), cms::cuda::bs, hfClusterShapes_cfi::hits, hgcalTBTopologyTester_cfi::layers, and convertSQLitetoXML_cfg::output.

998  {
999  const vector<const DetLayer*>& layers = geo->allBTLLayers();
1000 
1002  bestHit = MTDHitMatchingInfo();
1003  for (const DetLayer* ilay : layers)
1004  fillMatchingHits(ilay, tsos, traj, pmag2, pathlength0, trs0, hits, prop, bs, vtxTime, matchVertex, output, bestHit);
1005  return output;
1006 }
void fillMatchingHits(const DetLayer *, const TrajectoryStateOnSurface &, const Trajectory &, const float, const float, const TrackSegments &, const MTDTrackingDetSetVector &, const Propagator *, const reco::BeamSpot &, const float &, const bool, TransientTrackingRecHit::ConstRecHitContainer &, MTDHitMatchingInfo &) const
const std::vector< const DetLayer * > & allBTLLayers() const
return the BTL DetLayers (barrel), inside-out
std::vector< ConstRecHitPointer > ConstRecHitContainer

◆ tryETLLayers()

template<class TrackCollection >
TransientTrackingRecHit::ConstRecHitContainer TrackExtenderWithMTDT< TrackCollection >::tryETLLayers ( const TrajectoryStateOnSurface tsos,
const Trajectory traj,
const float  pmag2,
const float  pathlength0,
const TrackSegments &  trs0,
const MTDTrackingDetSetVector hits,
const MTDDetLayerGeometry geo,
const MagneticField field,
const Propagator prop,
const reco::BeamSpot bs,
const float  vtxTime,
const bool  matchVertex,
MTDHitMatchingInfo &  bestHit 
) const

Definition at line 1009 of file TrackExtenderWithMTD.cc.

References funct::abs(), MTDDetLayerGeometry::allETLLayers(), cms::cuda::bs, TrajectoryStateOnSurface::globalPosition(), hfClusterShapes_cfi::hits, hgcalTBTopologyTester_cfi::layers, convertSQLitetoXML_cfg::output, groupFilesInBlocks::reverse, detailsBasic3DVector::z, and PV3DBase< T, PVType, FrameType >::z().

1022  {
1023  const vector<const DetLayer*>& layers = geo->allETLLayers();
1024 
1026  bestHit = MTDHitMatchingInfo();
1027  for (const DetLayer* ilay : layers) {
1028  const BoundDisk& disk = static_cast<const ForwardDetLayer*>(ilay)->specificSurface();
1029  const float diskZ = disk.position().z();
1030 
1031  if (tsos.globalPosition().z() * diskZ < 0)
1032  continue; // only propagate to the disk that's on the same side
1033 
1034  fillMatchingHits(ilay, tsos, traj, pmag2, pathlength0, trs0, hits, prop, bs, vtxTime, matchVertex, output, bestHit);
1035  }
1036 
1037  // the ETL hits order must be from the innermost to the outermost
1038 
1039  if (output.size() == 2) {
1040  if (std::abs(output[0]->globalPosition().z()) > std::abs(output[1]->globalPosition().z())) {
1041  std::reverse(output.begin(), output.end());
1042  }
1043  }
1044  return output;
1045 }
T z() const
Definition: PV3DBase.h:61
GlobalPoint globalPosition() const
void fillMatchingHits(const DetLayer *, const TrajectoryStateOnSurface &, const Trajectory &, const float, const float, const TrackSegments &, const MTDTrackingDetSetVector &, const Propagator *, const reco::BeamSpot &, const float &, const bool, TransientTrackingRecHit::ConstRecHitContainer &, MTDHitMatchingInfo &) const
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
std::vector< ConstRecHitPointer > ConstRecHitContainer
const std::vector< const DetLayer * > & allETLLayers() const
return the ETL DetLayers (endcap), -Z to +Z

Member Data Documentation

◆ assocOrigTrkToken_

template<class TrackCollection >
edm::EDPutToken TrackExtenderWithMTDT< TrackCollection >::assocOrigTrkToken_
private

◆ betaOrigTrkToken_

template<class TrackCollection >
edm::EDPutToken TrackExtenderWithMTDT< TrackCollection >::betaOrigTrkToken_
private

◆ bsTimeSpread_

template<class TrackCollection >
const float TrackExtenderWithMTDT< TrackCollection >::bsTimeSpread_
private

Definition at line 520 of file TrackExtenderWithMTD.cc.

◆ bsToken_

template<class TrackCollection >
edm::EDGetTokenT<reco::BeamSpot> TrackExtenderWithMTDT< TrackCollection >::bsToken_
private

Definition at line 489 of file TrackExtenderWithMTD.cc.

◆ btlChi2Cut_

template<class TrackCollection >
const float TrackExtenderWithMTDT< TrackCollection >::btlChi2Cut_
private

Definition at line 512 of file TrackExtenderWithMTD.cc.

◆ btlMatchChi2Token_

template<class TrackCollection >
edm::EDPutToken TrackExtenderWithMTDT< TrackCollection >::btlMatchChi2Token_
private

◆ btlMatchTimeChi2Token_

template<class TrackCollection >
edm::EDPutToken TrackExtenderWithMTDT< TrackCollection >::btlMatchTimeChi2Token_
private

◆ btlTimeChi2Cut_

template<class TrackCollection >
const float TrackExtenderWithMTDT< TrackCollection >::btlTimeChi2Cut_
private

Definition at line 513 of file TrackExtenderWithMTD.cc.

◆ builder_

template<class TrackCollection >
edm::ESHandle<TransientTrackBuilder> TrackExtenderWithMTDT< TrackCollection >::builder_
private

Definition at line 498 of file TrackExtenderWithMTD.cc.

◆ builderToken_

template<class TrackCollection >
edm::ESGetToken<TransientTrackBuilder, TransientTrackRecord> TrackExtenderWithMTDT< TrackCollection >::builderToken_
private

◆ dlgeoToken_

template<class TrackCollection >
edm::ESGetToken<MTDDetLayerGeometry, MTDRecoGeometryRecord> TrackExtenderWithMTDT< TrackCollection >::dlgeoToken_
private

◆ dzCut_

template<class TrackCollection >
const float TrackExtenderWithMTDT< TrackCollection >::dzCut_
private

Definition at line 519 of file TrackExtenderWithMTD.cc.

◆ estMaxChi2_

template<class TrackCollection >
const float TrackExtenderWithMTDT< TrackCollection >::estMaxChi2_
private

◆ estMaxNSigma_

template<class TrackCollection >
const float TrackExtenderWithMTDT< TrackCollection >::estMaxNSigma_
private

◆ etlChi2Cut_

template<class TrackCollection >
const float TrackExtenderWithMTDT< TrackCollection >::etlChi2Cut_
private

Definition at line 514 of file TrackExtenderWithMTD.cc.

◆ etlMatchChi2Token_

template<class TrackCollection >
edm::EDPutToken TrackExtenderWithMTDT< TrackCollection >::etlMatchChi2Token_
private

◆ etlMatchTimeChi2Token_

template<class TrackCollection >
edm::EDPutToken TrackExtenderWithMTDT< TrackCollection >::etlMatchTimeChi2Token_
private

◆ etlTimeChi2Cut_

template<class TrackCollection >
const float TrackExtenderWithMTDT< TrackCollection >::etlTimeChi2Cut_
private

Definition at line 515 of file TrackExtenderWithMTD.cc.

◆ genVtxPositionToken_

template<class TrackCollection >
edm::EDGetTokenT<GlobalPoint> TrackExtenderWithMTDT< TrackCollection >::genVtxPositionToken_
private

◆ genVtxTimeToken_

template<class TrackCollection >
edm::EDGetTokenT<float> TrackExtenderWithMTDT< TrackCollection >::genVtxTimeToken_
private

◆ gtg_

template<class TrackCollection >
edm::ESHandle<GlobalTrackingGeometry> TrackExtenderWithMTDT< TrackCollection >::gtg_
private

Definition at line 502 of file TrackExtenderWithMTD.cc.

◆ gtgToken_

◆ hitbuilder_

template<class TrackCollection >
edm::ESHandle<TransientTrackingRecHitBuilder> TrackExtenderWithMTDT< TrackCollection >::hitbuilder_
private

Definition at line 500 of file TrackExtenderWithMTD.cc.

◆ hitbuilderToken_

template<class TrackCollection >
edm::ESGetToken<TransientTrackingRecHitBuilder, TransientRecHitRecord> TrackExtenderWithMTDT< TrackCollection >::hitbuilderToken_
private

◆ hitsToken_

template<class TrackCollection >
edm::EDGetTokenT<MTDTrackingDetSetVector> TrackExtenderWithMTDT< TrackCollection >::hitsToken_
private

Definition at line 488 of file TrackExtenderWithMTD.cc.

◆ magfldToken_

template<class TrackCollection >
edm::ESGetToken<MagneticField, IdealMagneticFieldRecord> TrackExtenderWithMTDT< TrackCollection >::magfldToken_
private

◆ mtdRecHitBuilder_

template<class TrackCollection >
const std::string TrackExtenderWithMTDT< TrackCollection >::mtdRecHitBuilder_
private

◆ npixBarrelToken_

template<class TrackCollection >
edm::EDPutToken TrackExtenderWithMTDT< TrackCollection >::npixBarrelToken_
private

◆ npixEndcapToken_

template<class TrackCollection >
edm::EDPutToken TrackExtenderWithMTDT< TrackCollection >::npixEndcapToken_
private

◆ pathLengthOrigTrkToken_

template<class TrackCollection >
edm::EDPutToken TrackExtenderWithMTDT< TrackCollection >::pathLengthOrigTrkToken_
private

◆ pOrigTrkToken_

template<class TrackCollection >
edm::EDPutToken TrackExtenderWithMTDT< TrackCollection >::pOrigTrkToken_
private

◆ propagator_

template<class TrackCollection >
const std::string TrackExtenderWithMTDT< TrackCollection >::propagator_
private

◆ propToken_

template<class TrackCollection >
edm::ESGetToken<Propagator, TrackingComponentsRecord> TrackExtenderWithMTDT< TrackCollection >::propToken_
private

◆ sigmat0OrigTrkToken_

template<class TrackCollection >
edm::EDPutToken TrackExtenderWithMTDT< TrackCollection >::sigmat0OrigTrkToken_
private

◆ sigmatmtdOrigTrkToken_

template<class TrackCollection >
edm::EDPutToken TrackExtenderWithMTDT< TrackCollection >::sigmatmtdOrigTrkToken_
private

◆ t0OrigTrkToken_

template<class TrackCollection >
edm::EDPutToken TrackExtenderWithMTDT< TrackCollection >::t0OrigTrkToken_
private

◆ theEstimator

template<class TrackCollection >
std::unique_ptr<MeasurementEstimator> TrackExtenderWithMTDT< TrackCollection >::theEstimator
private

◆ theTransformer

template<class TrackCollection >
std::unique_ptr<TrackTransformer> TrackExtenderWithMTDT< TrackCollection >::theTransformer
private

◆ tmtdOrigTrkToken_

template<class TrackCollection >
edm::EDPutToken TrackExtenderWithMTDT< TrackCollection >::tmtdOrigTrkToken_
private

◆ tofkOrigTrkToken_

template<class TrackCollection >
edm::EDPutToken TrackExtenderWithMTDT< TrackCollection >::tofkOrigTrkToken_
private

◆ tofpiOrigTrkToken_

template<class TrackCollection >
edm::EDPutToken TrackExtenderWithMTDT< TrackCollection >::tofpiOrigTrkToken_
private

◆ tofpOrigTrkToken_

template<class TrackCollection >
edm::EDPutToken TrackExtenderWithMTDT< TrackCollection >::tofpOrigTrkToken_
private

◆ tracksToken_

template<class TrackCollection >
edm::EDGetTokenT<InputCollection> TrackExtenderWithMTDT< TrackCollection >::tracksToken_
private

Definition at line 486 of file TrackExtenderWithMTD.cc.

◆ trajTrackAToken_

template<class TrackCollection >
edm::EDGetTokenT<TrajTrackAssociationCollection> TrackExtenderWithMTDT< TrackCollection >::trajTrackAToken_
private

Definition at line 487 of file TrackExtenderWithMTD.cc.

◆ transientTrackBuilder_

template<class TrackCollection >
const std::string TrackExtenderWithMTDT< TrackCollection >::transientTrackBuilder_
private

◆ ttopoToken_

template<class TrackCollection >
edm::ESGetToken<TrackerTopology, TrackerTopologyRcd> TrackExtenderWithMTDT< TrackCollection >::ttopoToken_
private

◆ updateExtra_

template<class TrackCollection >
const bool TrackExtenderWithMTDT< TrackCollection >::updateExtra_
private

Definition at line 494 of file TrackExtenderWithMTD.cc.

◆ updatePattern_

template<class TrackCollection >
const bool TrackExtenderWithMTDT< TrackCollection >::updatePattern_
private

Definition at line 494 of file TrackExtenderWithMTD.cc.

◆ updateTraj_

template<class TrackCollection >
const bool TrackExtenderWithMTDT< TrackCollection >::updateTraj_
private

Definition at line 494 of file TrackExtenderWithMTD.cc.

◆ useSimVertex_

template<class TrackCollection >
const bool TrackExtenderWithMTDT< TrackCollection >::useSimVertex_
private

◆ useVertex_

template<class TrackCollection >
const bool TrackExtenderWithMTDT< TrackCollection >::useVertex_
private

◆ vtxToken_

template<class TrackCollection >
edm::EDGetTokenT<VertexCollection> TrackExtenderWithMTDT< TrackCollection >::vtxToken_
private