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 1167 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, LogTrace, 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.

1179  {
1181  bool tsbcl_status = getTrajectoryStateClosestToBeamLine(traj, bs, thePropagator, tscbl);
1182 
1183  if (!tsbcl_status)
1184  return reco::Track();
1185 
1186  GlobalPoint v = tscbl.trackStateAtPCA().position();
1187  math::XYZPoint pos(v.x(), v.y(), v.z());
1188  GlobalVector p = tscbl.trackStateAtPCA().momentum();
1189  math::XYZVector mom(p.x(), p.y(), p.z());
1190 
1191  int ndof = traj.ndof();
1192 
1193  float t0 = 0.f;
1194  float covt0t0 = -1.f;
1195  pathLengthOut = -1.f; // if there is no MTD flag the pathlength with -1
1196  tmtdOut = 0.f;
1197  sigmatmtdOut = -1.f;
1198  float betaOut = 0.f;
1199  float covbetabeta = -1.f;
1200 
1201  auto routput = [&]() {
1202  return reco::Track(traj.chiSquared(),
1203  int(ndof),
1204  pos,
1205  mom,
1206  tscbl.trackStateAtPCA().charge(),
1208  orig->algo(),
1210  t0,
1211  betaOut,
1212  covt0t0,
1213  covbetabeta);
1214  };
1215 
1216  //compute path length for time backpropagation, using first MTD hit for the momentum
1217  if (hasMTD) {
1218  float pathlength;
1219  TrackSegments trs;
1220  bool validpropagation = trackPathLength(trajWithMtd, bs, thePropagator, pathlength, trs);
1221  float thit = 0.f;
1222  float thiterror = -1.f;
1223  bool validmtd = false;
1224 
1225  if (!validpropagation) {
1226  return routput();
1227  }
1228 
1229  uint32_t ihitcount(0), ietlcount(0);
1230  for (auto const& hit : trajWithMtd.measurements()) {
1231  if (hit.recHit()->geographicalId().det() == DetId::Forward &&
1232  ForwardSubdetector(hit.recHit()->geographicalId().subdetId()) == FastTime) {
1233  ihitcount++;
1234  if (MTDDetId(hit.recHit()->geographicalId()).mtdSubDetector() == MTDDetId::MTDType::ETL) {
1235  ietlcount++;
1236  }
1237  }
1238  }
1239 
1240  LogTrace("TrackExtenderWithMTD") << "TrackExtenderWithMTD: selected #hits " << ihitcount << " from ETL "
1241  << ietlcount;
1242 
1243  auto ihit1 = trajWithMtd.measurements().cbegin();
1244  if (ihitcount == 1) {
1245  const MTDTrackingRecHit* mtdhit = static_cast<const MTDTrackingRecHit*>((*ihit1).recHit()->hit());
1246  thit = mtdhit->time();
1247  thiterror = mtdhit->timeError();
1248  validmtd = true;
1249  } else if (ihitcount == 2 && ietlcount == 2) {
1250  std::pair<float, float> lastStep = trs.getSegmentPathAndMom2(0);
1251  float etlpathlength = std::abs(lastStep.first * c_cm_ns);
1252  //
1253  // The information of the two ETL hits is combined and attributed to the innermost hit
1254  //
1255  if (etlpathlength == 0.f) {
1256  validpropagation = false;
1257  } else {
1258  pathlength -= etlpathlength;
1259  trs.removeFirstSegment();
1260  const MTDTrackingRecHit* mtdhit1 = static_cast<const MTDTrackingRecHit*>((*ihit1).recHit()->hit());
1261  const MTDTrackingRecHit* mtdhit2 = static_cast<const MTDTrackingRecHit*>((*(ihit1 + 1)).recHit()->hit());
1262  TrackTofPidInfo tofInfo = computeTrackTofPidInfo(
1263  lastStep.second, etlpathlength, trs, mtdhit1->time(), mtdhit1->timeError(), 0.f, 0.f, true, TofCalc::kCost);
1264  //
1265  // Protect against incompatible times
1266  //
1267  float err1 = tofInfo.dterror * tofInfo.dterror;
1268  float err2 = mtdhit2->timeError() * mtdhit2->timeError();
1269  if (cms_rounding::roundIfNear0(err1) == 0.f || cms_rounding::roundIfNear0(err2) == 0.f) {
1270  edm::LogError("TrackExtenderWithMTD")
1271  << "MTD tracking hits with zero time uncertainty: " << err1 << " " << err2;
1272  } else {
1273  if ((tofInfo.dt - mtdhit2->time()) * (tofInfo.dt - mtdhit2->time()) < (err1 + err2) * etlTimeChi2Cut_) {
1274  //
1275  // Subtract the ETL time of flight from the outermost measurement, and combine it in a weighted average with the innermost
1276  // the mass ambiguity related uncertainty on the time of flight is added as an additional uncertainty
1277  //
1278  err1 = 1.f / err1;
1279  err2 = 1.f / err2;
1280  thiterror = 1.f / (err1 + err2);
1281  thit = (tofInfo.dt * err1 + mtdhit2->time() * err2) * thiterror;
1282  thiterror = std::sqrt(thiterror);
1283  LogTrace("TrackExtenderWithMTD")
1284  << "TrackExtenderWithMTD: p trk = " << p.mag() << " ETL hits times/errors: " << mtdhit1->time()
1285  << " +/- " << mtdhit1->timeError() << " , " << mtdhit2->time() << " +/- " << mtdhit2->timeError()
1286  << " extrapolated time1: " << tofInfo.dt << " +/- " << tofInfo.dterror << " average = " << thit
1287  << " +/- " << thiterror;
1288  validmtd = true;
1289  } else {
1290  // if back extrapolated time of the outermost measurement not compatible with the innermost, keep the one with smallest error
1291  if (err1 <= err2) {
1292  thit = tofInfo.dt;
1293  thiterror = tofInfo.dterror;
1294  validmtd = true;
1295  } else {
1296  thit = mtdhit2->time();
1297  thiterror = mtdhit2->timeError();
1298  validmtd = true;
1299  }
1300  }
1301  }
1302  }
1303  } else {
1304  edm::LogInfo("TrackExtenderWithMTD")
1305  << "MTD hits #" << ihitcount << "ETL hits #" << ietlcount << " anomalous pattern, skipping...";
1306  }
1307 
1308  if (validmtd && validpropagation) {
1309  //here add the PID uncertainty for later use in the 1st step of 4D vtx reconstruction
1310  TrackTofPidInfo tofInfo =
1311  computeTrackTofPidInfo(p.mag2(), pathlength, trs, thit, thiterror, 0.f, 0.f, true, TofCalc::kSegm);
1312  pathLengthOut = pathlength; // set path length if we've got a timing hit
1313  tmtdOut = thit;
1314  sigmatmtdOut = thiterror;
1315  t0 = tofInfo.dt;
1316  covt0t0 = tofInfo.dterror * tofInfo.dterror;
1317  betaOut = tofInfo.beta_pi;
1318  covbetabeta = tofInfo.betaerror * tofInfo.betaerror;
1319  tofpi = tofInfo.dt_pi;
1320  tofk = tofInfo.dt_k;
1321  tofp = tofInfo.dt_p;
1322  }
1323  }
1324 
1325  return routput();
1326 }
const CurvilinearTrajectoryError & curvilinearError() const
constexpr double c_cm_ns
float chiSquared() const
Definition: Trajectory.h:241
Log< level::Error, false > LogError
ForwardSubdetector
#define LogTrace(id)
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

◆ buildTrackExtra()

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

Definition at line 1329 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.

1329  {
1330  static const string metname = "TrackExtenderWithMTD";
1331 
1332  const Trajectory::RecHitContainer transRecHits = trajectory.recHits();
1333 
1334  // put the collection of TrackingRecHit in the event
1335 
1336  // sets the outermost and innermost TSOSs
1337  // ToDo: validation for track states with MTD
1338  TrajectoryStateOnSurface outerTSOS;
1339  TrajectoryStateOnSurface innerTSOS;
1340  unsigned int innerId = 0, outerId = 0;
1342  DetId outerDetId;
1343 
1344  if (trajectory.direction() == alongMomentum) {
1345  LogTrace(metname) << "alongMomentum";
1346  outerTSOS = trajectory.lastMeasurement().updatedState();
1347  innerTSOS = trajectory.firstMeasurement().updatedState();
1348  outerId = trajectory.lastMeasurement().recHit()->geographicalId().rawId();
1349  innerId = trajectory.firstMeasurement().recHit()->geographicalId().rawId();
1350  outerRecHit = trajectory.lastMeasurement().recHit();
1351  outerDetId = trajectory.lastMeasurement().recHit()->geographicalId();
1352  } else if (trajectory.direction() == oppositeToMomentum) {
1353  LogTrace(metname) << "oppositeToMomentum";
1354  outerTSOS = trajectory.firstMeasurement().updatedState();
1355  innerTSOS = trajectory.lastMeasurement().updatedState();
1356  outerId = trajectory.firstMeasurement().recHit()->geographicalId().rawId();
1357  innerId = trajectory.lastMeasurement().recHit()->geographicalId().rawId();
1358  outerRecHit = trajectory.firstMeasurement().recHit();
1359  outerDetId = trajectory.firstMeasurement().recHit()->geographicalId();
1360  } else
1361  LogError(metname) << "Wrong propagation direction!";
1362 
1363  const GeomDet* outerDet = gtg_->idToDet(outerDetId);
1364  GlobalPoint outerTSOSPos = outerTSOS.globalParameters().position();
1365  bool inside = outerDet->surface().bounds().inside(outerDet->toLocal(outerTSOSPos));
1366 
1367  GlobalPoint hitPos =
1368  (outerRecHit->isValid()) ? outerRecHit->globalPosition() : outerTSOS.globalParameters().position();
1369 
1370  if (!inside) {
1371  LogTrace(metname) << "The Global Muon outerMostMeasurementState is not compatible with the recHit detector!"
1372  << " Setting outerMost postition to recHit position if recHit isValid: "
1373  << outerRecHit->isValid();
1374  LogTrace(metname) << "From " << outerTSOSPos << " to " << hitPos;
1375  }
1376 
1377  //build the TrackExtra
1378  GlobalPoint v = (inside) ? outerTSOSPos : hitPos;
1379  GlobalVector p = outerTSOS.globalParameters().momentum();
1380  math::XYZPoint outpos(v.x(), v.y(), v.z());
1381  math::XYZVector outmom(p.x(), p.y(), p.z());
1382 
1383  v = innerTSOS.globalParameters().position();
1384  p = innerTSOS.globalParameters().momentum();
1385  math::XYZPoint inpos(v.x(), v.y(), v.z());
1386  math::XYZVector inmom(p.x(), p.y(), p.z());
1387 
1388  reco::TrackExtra trackExtra(outpos,
1389  outmom,
1390  true,
1391  inpos,
1392  inmom,
1393  true,
1394  outerTSOS.curvilinearError(),
1395  outerId,
1396  innerTSOS.curvilinearError(),
1397  innerId,
1398  trajectory.direction(),
1399  trajectory.seedRef());
1400 
1401  return trackExtra;
1402 }
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 1405 of file TrackExtenderWithMTD.cc.

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

1405  {
1406  stringstream output;
1407 
1408  const BoundSurface* sur = nullptr;
1409  const BoundCylinder* bc = nullptr;
1410  const BoundDisk* bd = nullptr;
1411 
1412  sur = &(layer->surface());
1413  if ((bc = dynamic_cast<const BoundCylinder*>(sur))) {
1414  output << " Cylinder of radius: " << bc->radius() << endl;
1415  } else if ((bd = dynamic_cast<const BoundDisk*>(sur))) {
1416  output << " Disk at: " << bd->position().z() << endl;
1417  }
1418  return output.str();
1419 }
Definition: output.py:1

◆ 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 1080 of file TrackExtenderWithMTD.cc.

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

1092  {
1093  std::set<MTDHitMatchingInfo> hitsInLayer;
1094  bool hitMatched = false;
1095 
1096  using namespace std::placeholders;
1097  auto find_hits = std::bind(find_hits_in_dets,
1098  std::cref(hits),
1099  std::cref(traj),
1100  ilay,
1101  std::cref(tsos),
1102  pmag2,
1103  pathlength0,
1104  trs0,
1105  _1,
1106  std::cref(bs),
1107  bsTimeSpread_,
1108  prop,
1109  theEstimator.get(),
1110  _2,
1111  std::ref(hitsInLayer));
1112 
1113  if (useVertex_ && matchVertex)
1114  find_hits(vtxTime, true);
1115  else
1116  find_hits(0, false);
1117 
1118  float spaceChi2Cut = ilay->isBarrel() ? btlChi2Cut_ : etlChi2Cut_;
1119  float timeChi2Cut = ilay->isBarrel() ? btlTimeChi2Cut_ : etlTimeChi2Cut_;
1120 
1121  //just take the first hit because the hits are sorted on their matching quality
1122  if (!hitsInLayer.empty()) {
1123  //check hits to pass minimum quality matching requirements
1124  auto const& firstHit = *hitsInLayer.begin();
1125  LogTrace("TrackExtenderWithMTD") << "TrackExtenderWithMTD: matching trial 1: estChi2= " << firstHit.estChi2
1126  << " timeChi2= " << firstHit.timeChi2;
1127  if (firstHit.estChi2 < spaceChi2Cut && firstHit.timeChi2 < timeChi2Cut) {
1128  hitMatched = true;
1129  output.push_back(hitbuilder_->build(firstHit.hit));
1130  if (firstHit < bestHit)
1131  bestHit = firstHit;
1132  }
1133  }
1134 
1135  if (useVertex_ && matchVertex && !hitMatched) {
1136  //try a second search with beamspot hypothesis
1137  hitsInLayer.clear();
1138  find_hits(0, false);
1139  if (!hitsInLayer.empty()) {
1140  auto const& firstHit = *hitsInLayer.begin();
1141  LogTrace("TrackExtenderWithMTD") << "TrackExtenderWithMTD: matching trial 2: estChi2= " << firstHit.estChi2
1142  << " timeChi2= " << firstHit.timeChi2;
1143  if (firstHit.timeChi2 < timeChi2Cut) {
1144  if (firstHit.estChi2 < spaceChi2Cut) {
1145  hitMatched = true;
1146  output.push_back(hitbuilder_->build(firstHit.hit));
1147  if (firstHit < bestHit)
1148  bestHit = firstHit;
1149  }
1150  }
1151  }
1152  }
1153 
1154 #ifdef EDM_ML_DEBUG
1155  if (hitMatched) {
1156  LogTrace("TrackExtenderWithMTD") << "TrackExtenderWithMTD: matched hit with time: " << bestHit.hit->time()
1157  << " +/- " << bestHit.hit->timeError();
1158  } else {
1159  LogTrace("TrackExtenderWithMTD") << "TrackExtenderWithMTD: no matched hit";
1160  }
1161 #endif
1162 }
std::unique_ptr< MeasurementEstimator > theEstimator
#define LogTrace(id)
virtual RecHitPointer build(const TrackingRecHit *p) const =0
build a tracking rechit from an existing rechit
edm::ESHandle< TransientTrackingRecHitBuilder > hitbuilder_
Definition: output.py:1
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, 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  LogTrace("TrackExtenderWithMTD") << "TrackExtenderWithMTD: extrapolating track " << itrack
729  << " p/pT = " << track->p() << " " << track->pt() << " eta = " << track->eta();
730 
731  float trackVtxTime = 0.f;
732  if (useVertex_) {
733  float dz;
734  if (useSimVertex_)
735  dz = std::abs(track->dz(math::XYZPoint(*genPV)));
736  else
737  dz = std::abs(track->dz(pv->position()));
738 
739  if (dz < dzCut_)
740  trackVtxTime = vtxTime;
741  }
742 
743  reco::TransientTrack ttrack(track, magfield.product(), gtg_);
744  auto thits = theTransformer->getTransientRecHits(ttrack);
746  MTDHitMatchingInfo mBTL, mETL;
747 
748  if (trajs.isValid()) {
749  // get the outermost trajectory point on the track
752  bool tscbl_status = getTrajectoryStateClosestToBeamLine(trajs, bs, prop, tscbl);
753 
754  if (tscbl_status) {
755  float pmag2 = tscbl.trackStateAtPCA().momentum().mag2();
756  float pathlength0;
757  TrackSegments trs0;
758  trackPathLength(trajs, tscbl, prop, pathlength0, trs0);
759 
760  const auto& btlhits = tryBTLLayers(tsos,
761  trajs,
762  pmag2,
763  pathlength0,
764  trs0,
765  hits,
766  geo.product(),
767  magfield.product(),
768  prop,
769  bs,
770  trackVtxTime,
771  trackVtxTime != 0.f,
772  mBTL);
773  mtdthits.insert(mtdthits.end(), btlhits.begin(), btlhits.end());
774 
775  // in the future this should include an intermediate refit before propagating to the ETL
776  // for now it is ok
777  const auto& etlhits = tryETLLayers(tsos,
778  trajs,
779  pmag2,
780  pathlength0,
781  trs0,
782  hits,
783  geo.product(),
784  magfield.product(),
785  prop,
786  bs,
787  trackVtxTime,
788  trackVtxTime != 0.f,
789  mETL);
790  mtdthits.insert(mtdthits.end(), etlhits.begin(), etlhits.end());
791  }
792  }
793 
794  auto ordering = checkRecHitsOrdering(thits);
796  thits.insert(thits.end(), mtdthits.begin(), mtdthits.end());
797  } else {
798  std::reverse(mtdthits.begin(), mtdthits.end());
799  mtdthits.insert(mtdthits.end(), thits.begin(), thits.end());
800  thits.swap(mtdthits);
801  }
802 
803  const auto& trajwithmtd =
804  mtdthits.empty() ? std::vector<Trajectory>(1, trajs) : theTransformer->transform(ttrack, thits);
805  float pMap = 0.f, betaMap = 0.f, t0Map = 0.f, sigmat0Map = -1.f, pathLengthMap = -1.f, tmtdMap = 0.f,
806  sigmatmtdMap = -1.f, tofpiMap = 0.f, tofkMap = 0.f, tofpMap = 0.f;
807  int iMap = -1;
808 
809  for (const auto& trj : trajwithmtd) {
810  const auto& thetrj = (updateTraj_ ? trj : trajs);
811  float pathLength = 0.f, tmtd = 0.f, sigmatmtd = -1.f, tofpi = 0.f, tofk = 0.f, tofp = 0.f;
812  LogTrace("TrackExtenderWithMTD") << "TrackExtenderWithMTD: refit track " << itrack << " p/pT = " << track->p()
813  << " " << track->pt() << " eta = " << track->eta();
815  thetrj,
816  trj,
817  bs,
818  magfield.product(),
819  prop,
820  !trajwithmtd.empty() && !mtdthits.empty(),
821  pathLength,
822  tmtd,
823  sigmatmtd,
824  tofpi,
825  tofk,
826  tofp);
827  if (result.ndof() >= 0) {
829  reco::TrackExtra::TrajParams trajParams;
831  size_t hitsstart = outhits->size();
832  if (updatePattern_) {
833  t2t(trj, *outhits, trajParams, chi2s); // this fills the output hit collection
834  } else {
835  t2t(thetrj, *outhits, trajParams, chi2s);
836  }
837  size_t hitsend = outhits->size();
838  extras->push_back(buildTrackExtra(trj)); // always push back the fully built extra, update by setting in track
839  extras->back().setHits(hitsRefProd, hitsstart, hitsend - hitsstart);
840  extras->back().setTrajParams(trajParams, chi2s);
841  //create the track
842  output->push_back(result);
843  btlMatchChi2.push_back(mBTL.hit ? mBTL.estChi2 : -1.f);
844  etlMatchChi2.push_back(mETL.hit ? mETL.estChi2 : -1.f);
845  btlMatchTimeChi2.push_back(mBTL.hit ? mBTL.timeChi2 : -1.f);
846  etlMatchTimeChi2.push_back(mETL.hit ? mETL.timeChi2 : -1.f);
847  pathLengthMap = pathLength;
848  tmtdMap = tmtd;
849  sigmatmtdMap = sigmatmtd;
850  auto& backtrack = output->back();
851  iMap = output->size() - 1;
852  pMap = backtrack.p();
853  betaMap = backtrack.beta();
854  t0Map = backtrack.t0();
855  sigmat0Map = std::copysign(std::sqrt(std::abs(backtrack.covt0t0())), backtrack.covt0t0());
856  tofpiMap = tofpi;
857  tofkMap = tofk;
858  tofpMap = tofp;
859  reco::TrackExtraRef extraRef(extrasRefProd, extras->size() - 1);
860  backtrack.setExtra((updateExtra_ ? extraRef : track->extra()));
861  for (unsigned ihit = hitsstart; ihit < hitsend; ++ihit) {
862  backtrack.appendHitPattern((*outhits)[ihit], ttopo);
863  }
864  npixBarrel.push_back(backtrack.hitPattern().numberOfValidPixelBarrelHits());
865  npixEndcap.push_back(backtrack.hitPattern().numberOfValidPixelEndcapHits());
866  LogTrace("TrackExtenderWithMTD") << "TrackExtenderWithMTD: tmtd " << tmtdMap << " +/- " << sigmatmtdMap
867  << " t0 " << t0Map << " +/- " << sigmat0Map << " tof pi/K/p " << tofpiMap
868  << " " << tofkMap << " " << tofpMap;
869  } else {
870  LogTrace("TrackExtenderWithMTD") << "Error in the MTD track refitting. This should not happen";
871  }
872  }
873 
874  pOrigTrkRaw.push_back(pMap);
875  betaOrigTrkRaw.push_back(betaMap);
876  t0OrigTrkRaw.push_back(t0Map);
877  sigmat0OrigTrkRaw.push_back(sigmat0Map);
878  pathLengthsOrigTrkRaw.push_back(pathLengthMap);
879  tmtdOrigTrkRaw.push_back(tmtdMap);
880  sigmatmtdOrigTrkRaw.push_back(sigmatmtdMap);
881  tofpiOrigTrkRaw.push_back(tofpiMap);
882  tofkOrigTrkRaw.push_back(tofkMap);
883  tofpOrigTrkRaw.push_back(tofpMap);
884  assocOrigTrkRaw.push_back(iMap);
885 
886  if (iMap == -1) {
887  btlMatchChi2.push_back(-1.f);
888  etlMatchChi2.push_back(-1.f);
889  btlMatchTimeChi2.push_back(-1.f);
890  etlMatchTimeChi2.push_back(-1.f);
891  npixBarrel.push_back(-1.f);
892  npixEndcap.push_back(-1.f);
893  }
894 
895  ++itrack;
896  }
897 
898  auto outTrksHandle = ev.put(std::move(output));
899  ev.put(std::move(extras));
900  ev.put(std::move(outhits));
901 
902  fillValueMap(ev, tracksH, btlMatchChi2, btlMatchChi2Token_);
903  fillValueMap(ev, tracksH, etlMatchChi2, etlMatchChi2Token_);
904  fillValueMap(ev, tracksH, btlMatchTimeChi2, btlMatchTimeChi2Token_);
905  fillValueMap(ev, tracksH, etlMatchTimeChi2, etlMatchTimeChi2Token_);
906  fillValueMap(ev, tracksH, npixBarrel, npixBarrelToken_);
907  fillValueMap(ev, tracksH, npixEndcap, npixEndcapToken_);
908  fillValueMap(ev, tracksH, pOrigTrkRaw, pOrigTrkToken_);
909  fillValueMap(ev, tracksH, betaOrigTrkRaw, betaOrigTrkToken_);
910  fillValueMap(ev, tracksH, t0OrigTrkRaw, t0OrigTrkToken_);
911  fillValueMap(ev, tracksH, sigmat0OrigTrkRaw, sigmat0OrigTrkToken_);
912  fillValueMap(ev, tracksH, pathLengthsOrigTrkRaw, pathLengthOrigTrkToken_);
913  fillValueMap(ev, tracksH, tmtdOrigTrkRaw, tmtdOrigTrkToken_);
914  fillValueMap(ev, tracksH, sigmatmtdOrigTrkRaw, sigmatmtdOrigTrkToken_);
915  fillValueMap(ev, tracksH, tofpiOrigTrkRaw, tofpiOrigTrkToken_);
916  fillValueMap(ev, tracksH, tofkOrigTrkRaw, tofkOrigTrkToken_);
917  fillValueMap(ev, tracksH, tofpOrigTrkRaw, tofpOrigTrkToken_);
918  fillValueMap(ev, tracksH, assocOrigTrkRaw, assocOrigTrkToken_);
919 }
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_
Definition: output.py:1
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 1010 of file TrackExtenderWithMTD.cc.

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

1023  {
1024  const vector<const DetLayer*>& layers = geo->allBTLLayers();
1025 
1027  bestHit = MTDHitMatchingInfo();
1028  for (const DetLayer* ilay : layers) {
1029  LogTrace("TrackExtenderWithMTD") << "Hit search: BTL layer at R= "
1030  << static_cast<const BarrelDetLayer*>(ilay)->specificSurface().radius();
1031 
1032  fillMatchingHits(ilay, tsos, traj, pmag2, pathlength0, trs0, hits, prop, bs, vtxTime, matchVertex, output, bestHit);
1033  }
1034 
1035  return output;
1036 }
#define LogTrace(id)
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
Definition: output.py:1

◆ 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 1039 of file TrackExtenderWithMTD.cc.

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

1052  {
1053  const vector<const DetLayer*>& layers = geo->allETLLayers();
1054 
1056  bestHit = MTDHitMatchingInfo();
1057  for (const DetLayer* ilay : layers) {
1058  const BoundDisk& disk = static_cast<const ForwardDetLayer*>(ilay)->specificSurface();
1059  const float diskZ = disk.position().z();
1060 
1061  if (tsos.globalPosition().z() * diskZ < 0)
1062  continue; // only propagate to the disk that's on the same side
1063 
1064  LogTrace("TrackExtenderWithMTD") << "Hit search: ETL disk at Z = " << diskZ;
1065 
1066  fillMatchingHits(ilay, tsos, traj, pmag2, pathlength0, trs0, hits, prop, bs, vtxTime, matchVertex, output, bestHit);
1067  }
1068 
1069  // the ETL hits order must be from the innermost to the outermost
1070 
1071  if (output.size() == 2) {
1072  if (std::abs(output[0]->globalPosition().z()) > std::abs(output[1]->globalPosition().z())) {
1073  std::reverse(output.begin(), output.end());
1074  }
1075  }
1076  return output;
1077 }
T z() const
Definition: PV3DBase.h:61
#define LogTrace(id)
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
Definition: output.py:1
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