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 1130 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.

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

1277  {
1278  static const string metname = "TrackExtenderWithMTD";
1279 
1280  const Trajectory::RecHitContainer transRecHits = trajectory.recHits();
1281 
1282  // put the collection of TrackingRecHit in the event
1283 
1284  // sets the outermost and innermost TSOSs
1285  // ToDo: validation for track states with MTD
1286  TrajectoryStateOnSurface outerTSOS;
1287  TrajectoryStateOnSurface innerTSOS;
1288  unsigned int innerId = 0, outerId = 0;
1290  DetId outerDetId;
1291 
1292  if (trajectory.direction() == alongMomentum) {
1293  LogTrace(metname) << "alongMomentum";
1294  outerTSOS = trajectory.lastMeasurement().updatedState();
1295  innerTSOS = trajectory.firstMeasurement().updatedState();
1296  outerId = trajectory.lastMeasurement().recHit()->geographicalId().rawId();
1297  innerId = trajectory.firstMeasurement().recHit()->geographicalId().rawId();
1298  outerRecHit = trajectory.lastMeasurement().recHit();
1299  outerDetId = trajectory.lastMeasurement().recHit()->geographicalId();
1300  } else if (trajectory.direction() == oppositeToMomentum) {
1301  LogTrace(metname) << "oppositeToMomentum";
1302  outerTSOS = trajectory.firstMeasurement().updatedState();
1303  innerTSOS = trajectory.lastMeasurement().updatedState();
1304  outerId = trajectory.firstMeasurement().recHit()->geographicalId().rawId();
1305  innerId = trajectory.lastMeasurement().recHit()->geographicalId().rawId();
1306  outerRecHit = trajectory.firstMeasurement().recHit();
1307  outerDetId = trajectory.firstMeasurement().recHit()->geographicalId();
1308  } else
1309  LogError(metname) << "Wrong propagation direction!";
1310 
1311  const GeomDet* outerDet = gtg_->idToDet(outerDetId);
1312  GlobalPoint outerTSOSPos = outerTSOS.globalParameters().position();
1313  bool inside = outerDet->surface().bounds().inside(outerDet->toLocal(outerTSOSPos));
1314 
1315  GlobalPoint hitPos =
1316  (outerRecHit->isValid()) ? outerRecHit->globalPosition() : outerTSOS.globalParameters().position();
1317 
1318  if (!inside) {
1319  LogTrace(metname) << "The Global Muon outerMostMeasurementState is not compatible with the recHit detector!"
1320  << " Setting outerMost postition to recHit position if recHit isValid: "
1321  << outerRecHit->isValid();
1322  LogTrace(metname) << "From " << outerTSOSPos << " to " << hitPos;
1323  }
1324 
1325  //build the TrackExtra
1326  GlobalPoint v = (inside) ? outerTSOSPos : hitPos;
1327  GlobalVector p = outerTSOS.globalParameters().momentum();
1328  math::XYZPoint outpos(v.x(), v.y(), v.z());
1329  math::XYZVector outmom(p.x(), p.y(), p.z());
1330 
1331  v = innerTSOS.globalParameters().position();
1332  p = innerTSOS.globalParameters().momentum();
1333  math::XYZPoint inpos(v.x(), v.y(), v.z());
1334  math::XYZVector inmom(p.x(), p.y(), p.z());
1335 
1336  reco::TrackExtra trackExtra(outpos,
1337  outmom,
1338  true,
1339  inpos,
1340  inmom,
1341  true,
1342  outerTSOS.curvilinearError(),
1343  outerId,
1344  innerTSOS.curvilinearError(),
1345  innerId,
1346  trajectory.direction(),
1347  trajectory.seedRef());
1348 
1349  return trackExtra;
1350 }
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 1353 of file TrackExtenderWithMTD.cc.

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

1353  {
1354  stringstream output;
1355 
1356  const BoundSurface* sur = nullptr;
1357  const BoundCylinder* bc = nullptr;
1358  const BoundDisk* bd = nullptr;
1359 
1360  sur = &(layer->surface());
1361  if ((bc = dynamic_cast<const BoundCylinder*>(sur))) {
1362  output << " Cylinder of radius: " << bc->radius() << endl;
1363  } else if ((bd = dynamic_cast<const BoundDisk*>(sur))) {
1364  output << " Disk at: " << bd->position().z() << endl;
1365  }
1366  return output.str();
1367 }

◆ 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(), ProducerED_cfi::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 1056 of file TrackExtenderWithMTD.cc.

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

1068  {
1069  std::set<MTDHitMatchingInfo> hitsInLayer;
1070  bool hitMatched = false;
1071 
1072  using namespace std::placeholders;
1073  auto find_hits = std::bind(find_hits_in_dets,
1074  std::cref(hits),
1075  std::cref(traj),
1076  ilay,
1077  std::cref(tsos),
1078  pmag2,
1079  pathlength0,
1080  trs0,
1081  _1,
1082  std::cref(bs),
1083  bsTimeSpread_,
1084  prop,
1085  theEstimator.get(),
1086  _2,
1087  std::ref(hitsInLayer));
1088 
1089  if (useVertex_ && matchVertex)
1090  find_hits(vtxTime, true);
1091  else
1092  find_hits(0, false);
1093 
1094  float spaceChi2Cut = ilay->isBarrel() ? btlChi2Cut_ : etlChi2Cut_;
1095  float timeChi2Cut = ilay->isBarrel() ? btlTimeChi2Cut_ : etlTimeChi2Cut_;
1096 
1097  //just take the first hit because the hits are sorted on their matching quality
1098  if (!hitsInLayer.empty()) {
1099  //check hits to pass minimum quality matching requirements
1100  auto const& firstHit = *hitsInLayer.begin();
1101  if (firstHit.estChi2 < spaceChi2Cut && firstHit.timeChi2 < timeChi2Cut) {
1102  hitMatched = true;
1103  output.push_back(hitbuilder_->build(firstHit.hit));
1104  if (firstHit < bestHit)
1105  bestHit = firstHit;
1106  }
1107  }
1108 
1109  if (useVertex_ && matchVertex && !hitMatched) {
1110  //try a second search with beamspot hypothesis
1111  hitsInLayer.clear();
1112  find_hits(0, false);
1113  if (!hitsInLayer.empty()) {
1114  auto const& firstHit = *hitsInLayer.begin();
1115  if (firstHit.timeChi2 < timeChi2Cut) {
1116  if (firstHit.estChi2 < spaceChi2Cut) {
1117  hitMatched = true;
1118  output.push_back(hitbuilder_->build(firstHit.hit));
1119  if (firstHit < bestHit)
1120  bestHit = firstHit;
1121  }
1122  }
1123  }
1124  }
1125 }
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_2023v12_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 993 of file TrackExtenderWithMTD.cc.

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

1006  {
1007  const vector<const DetLayer*>& layers = geo->allBTLLayers();
1008 
1010  bestHit = MTDHitMatchingInfo();
1011  for (const DetLayer* ilay : layers)
1012  fillMatchingHits(ilay, tsos, traj, pmag2, pathlength0, trs0, hits, prop, bs, vtxTime, matchVertex, output, bestHit);
1013  return output;
1014 }
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 1017 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().

1030  {
1031  const vector<const DetLayer*>& layers = geo->allETLLayers();
1032 
1034  bestHit = MTDHitMatchingInfo();
1035  for (const DetLayer* ilay : layers) {
1036  const BoundDisk& disk = static_cast<const ForwardDetLayer*>(ilay)->specificSurface();
1037  const float diskZ = disk.position().z();
1038 
1039  if (tsos.globalPosition().z() * diskZ < 0)
1040  continue; // only propagate to the disk that's on the same side
1041 
1042  fillMatchingHits(ilay, tsos, traj, pmag2, pathlength0, trs0, hits, prop, bs, vtxTime, matchVertex, output, bestHit);
1043  }
1044 
1045  // the ETL hits order must be from the innermost to the outermost
1046 
1047  if (output.size() == 2) {
1048  if (std::abs(output[0]->globalPosition().z()) > std::abs(output[1]->globalPosition().z())) {
1049  std::reverse(output.begin(), output.end());
1050  }
1051  }
1052  return output;
1053 }
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