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, float &sigmatofpi, float &sigmatofk, float &sigmatofp) 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 sigmatofkOrigTrkToken_
 
edm::EDPutToken sigmatofpiOrigTrkToken_
 
edm::EDPutToken sigmatofpOrigTrkToken_
 
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 458 of file TrackExtenderWithMTD.cc.

Member Typedef Documentation

◆ InputCollection

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

Definition at line 461 of file TrackExtenderWithMTD.cc.

◆ TrackType

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

Definition at line 460 of file TrackExtenderWithMTD.cc.

Constructor & Destructor Documentation

◆ TrackExtenderWithMTDT()

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

Definition at line 612 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 >::sigmatofkOrigTrkToken_, TrackExtenderWithMTDT< TrackCollection >::sigmatofpiOrigTrkToken_, TrackExtenderWithMTDT< TrackCollection >::sigmatofpOrigTrkToken_, 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_.

613  : tracksToken_(consumes<InputCollection>(iConfig.getParameter<edm::InputTag>("tracksSrc"))),
614  trajTrackAToken_(consumes<TrajTrackAssociationCollection>(iConfig.getParameter<edm::InputTag>("trjtrkAssSrc"))),
615  hitsToken_(consumes<MTDTrackingDetSetVector>(iConfig.getParameter<edm::InputTag>("hitsSrc"))),
616  bsToken_(consumes<reco::BeamSpot>(iConfig.getParameter<edm::InputTag>("beamSpotSrc"))),
617  updateTraj_(iConfig.getParameter<bool>("updateTrackTrajectory")),
618  updateExtra_(iConfig.getParameter<bool>("updateTrackExtra")),
619  updatePattern_(iConfig.getParameter<bool>("updateTrackHitPattern")),
620  mtdRecHitBuilder_(iConfig.getParameter<std::string>("MTDRecHitBuilder")),
621  propagator_(iConfig.getParameter<std::string>("Propagator")),
622  transientTrackBuilder_(iConfig.getParameter<std::string>("TransientTrackBuilder")),
623  estMaxChi2_(iConfig.getParameter<double>("estimatorMaxChi2")),
624  estMaxNSigma_(iConfig.getParameter<double>("estimatorMaxNSigma")),
625  btlChi2Cut_(iConfig.getParameter<double>("btlChi2Cut")),
626  btlTimeChi2Cut_(iConfig.getParameter<double>("btlTimeChi2Cut")),
627  etlChi2Cut_(iConfig.getParameter<double>("etlChi2Cut")),
628  etlTimeChi2Cut_(iConfig.getParameter<double>("etlTimeChi2Cut")),
629  useVertex_(iConfig.getParameter<bool>("useVertex")),
630  useSimVertex_(iConfig.getParameter<bool>("useSimVertex")),
631  dzCut_(iConfig.getParameter<double>("dZCut")),
632  bsTimeSpread_(iConfig.getParameter<double>("bsTimeSpread")) {
633  if (useVertex_) {
634  if (useSimVertex_) {
635  genVtxPositionToken_ = consumes<GlobalPoint>(iConfig.getParameter<edm::InputTag>("genVtxPositionSrc"));
636  genVtxTimeToken_ = consumes<float>(iConfig.getParameter<edm::InputTag>("genVtxTimeSrc"));
637  } else
638  vtxToken_ = consumes<VertexCollection>(iConfig.getParameter<edm::InputTag>("vtxSrc"));
639  }
640 
641  theEstimator = std::make_unique<Chi2MeasurementEstimator>(estMaxChi2_, estMaxNSigma_);
642  theTransformer = std::make_unique<TrackTransformer>(iConfig.getParameterSet("TrackTransformer"), consumesCollector());
643 
644  btlMatchChi2Token_ = produces<edm::ValueMap<float>>("btlMatchChi2");
645  etlMatchChi2Token_ = produces<edm::ValueMap<float>>("etlMatchChi2");
646  btlMatchTimeChi2Token_ = produces<edm::ValueMap<float>>("btlMatchTimeChi2");
647  etlMatchTimeChi2Token_ = produces<edm::ValueMap<float>>("etlMatchTimeChi2");
648  npixBarrelToken_ = produces<edm::ValueMap<int>>("npixBarrel");
649  npixEndcapToken_ = produces<edm::ValueMap<int>>("npixEndcap");
650  pOrigTrkToken_ = produces<edm::ValueMap<float>>("generalTrackp");
651  betaOrigTrkToken_ = produces<edm::ValueMap<float>>("generalTrackBeta");
652  t0OrigTrkToken_ = produces<edm::ValueMap<float>>("generalTrackt0");
653  sigmat0OrigTrkToken_ = produces<edm::ValueMap<float>>("generalTracksigmat0");
654  pathLengthOrigTrkToken_ = produces<edm::ValueMap<float>>("generalTrackPathLength");
655  tmtdOrigTrkToken_ = produces<edm::ValueMap<float>>("generalTracktmtd");
656  sigmatmtdOrigTrkToken_ = produces<edm::ValueMap<float>>("generalTracksigmatmtd");
657  tofpiOrigTrkToken_ = produces<edm::ValueMap<float>>("generalTrackTofPi");
658  tofkOrigTrkToken_ = produces<edm::ValueMap<float>>("generalTrackTofK");
659  tofpOrigTrkToken_ = produces<edm::ValueMap<float>>("generalTrackTofP");
660  sigmatofpiOrigTrkToken_ = produces<edm::ValueMap<float>>("generalTrackSigmaTofPi");
661  sigmatofkOrigTrkToken_ = produces<edm::ValueMap<float>>("generalTrackSigmaTofK");
662  sigmatofpOrigTrkToken_ = produces<edm::ValueMap<float>>("generalTrackSigmaTofP");
663  assocOrigTrkToken_ = produces<edm::ValueMap<int>>("generalTrackassoc");
664 
665  builderToken_ = esConsumes<TransientTrackBuilder, TransientTrackRecord>(edm::ESInputTag("", transientTrackBuilder_));
667  esConsumes<TransientTrackingRecHitBuilder, TransientRecHitRecord>(edm::ESInputTag("", mtdRecHitBuilder_));
668  gtgToken_ = esConsumes<GlobalTrackingGeometry, GlobalTrackingGeometryRecord>();
669  dlgeoToken_ = esConsumes<MTDDetLayerGeometry, MTDRecoGeometryRecord>();
670  magfldToken_ = esConsumes<MagneticField, IdealMagneticFieldRecord>();
671  propToken_ = esConsumes<Propagator, TrackingComponentsRecord>(edm::ESInputTag("", propagator_));
672  ttopoToken_ = esConsumes<TrackerTopology, TrackerTopologyRcd>();
673 
674  produces<edm::OwnVector<TrackingRecHit>>();
675  produces<reco::TrackExtraCollection>();
676  produces<TrackCollection>();
677 }
edm::EDPutToken btlMatchTimeChi2Token_
edm::ESGetToken< TransientTrackingRecHitBuilder, TransientRecHitRecord > hitbuilderToken_
edm::EDPutToken btlMatchChi2Token_
edm::EDPutToken tofpOrigTrkToken_
edm::ESGetToken< GlobalTrackingGeometry, GlobalTrackingGeometryRecord > gtgToken_
edm::EDPutToken sigmatofkOrigTrkToken_
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::EDPutToken sigmatofpiOrigTrkToken_
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::EDPutToken sigmatofpOrigTrkToken_
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,
float &  sigmatofpi,
float &  sigmatofk,
float &  sigmatofp 
) const

Definition at line 1283 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(), PixelVertexMonitor_cff::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.

1298  {
1300  bool tsbcl_status = getTrajectoryStateClosestToBeamLine(traj, bs, thePropagator, tscbl);
1301 
1302  if (!tsbcl_status)
1303  return reco::Track();
1304 
1305  GlobalPoint v = tscbl.trackStateAtPCA().position();
1306  math::XYZPoint pos(v.x(), v.y(), v.z());
1307  GlobalVector p = tscbl.trackStateAtPCA().momentum();
1308  math::XYZVector mom(p.x(), p.y(), p.z());
1309 
1310  int ndof = traj.ndof();
1311 
1312  float t0 = 0.f;
1313  float covt0t0 = -1.f;
1314  pathLengthOut = -1.f; // if there is no MTD flag the pathlength with -1
1315  tmtdOut = 0.f;
1316  sigmatmtdOut = -1.f;
1317  float betaOut = 0.f;
1318  float covbetabeta = -1.f;
1319 
1320  auto routput = [&]() {
1321  return reco::Track(traj.chiSquared(),
1322  int(ndof),
1323  pos,
1324  mom,
1325  tscbl.trackStateAtPCA().charge(),
1327  orig->algo(),
1329  t0,
1330  betaOut,
1331  covt0t0,
1332  covbetabeta);
1333  };
1334 
1335  //compute path length for time backpropagation, using first MTD hit for the momentum
1336  if (hasMTD) {
1337  float pathlength;
1338  TrackSegments trs;
1339  bool validpropagation = trackPathLength(trajWithMtd, bs, thePropagator, pathlength, trs);
1340  float thit = 0.f;
1341  float thiterror = -1.f;
1342  bool validmtd = false;
1343 
1344  if (!validpropagation) {
1345  return routput();
1346  }
1347 
1348  uint32_t ihitcount(0), ietlcount(0);
1349  for (auto const& hit : trajWithMtd.measurements()) {
1350  if (hit.recHit()->geographicalId().det() == DetId::Forward &&
1351  ForwardSubdetector(hit.recHit()->geographicalId().subdetId()) == FastTime) {
1352  ihitcount++;
1353  if (MTDDetId(hit.recHit()->geographicalId()).mtdSubDetector() == MTDDetId::MTDType::ETL) {
1354  ietlcount++;
1355  }
1356  }
1357  }
1358 
1359  LogTrace("TrackExtenderWithMTD") << "TrackExtenderWithMTD: selected #hits " << ihitcount << " from ETL "
1360  << ietlcount;
1361 
1362  auto ihit1 = trajWithMtd.measurements().cbegin();
1363  if (ihitcount == 1) {
1364  const MTDTrackingRecHit* mtdhit = static_cast<const MTDTrackingRecHit*>((*ihit1).recHit()->hit());
1365  thit = mtdhit->time();
1366  thiterror = mtdhit->timeError();
1367  validmtd = true;
1368  } else if (ihitcount == 2 && ietlcount == 2) {
1369  std::pair<float, float> lastStep = trs.getSegmentPathAndMom2(0);
1370  float etlpathlength = std::abs(lastStep.first * c_cm_ns);
1371  //
1372  // The information of the two ETL hits is combined and attributed to the innermost hit
1373  //
1374  if (etlpathlength == 0.f) {
1375  validpropagation = false;
1376  } else {
1377  pathlength -= etlpathlength;
1378  trs.removeFirstSegment();
1379  const MTDTrackingRecHit* mtdhit1 = static_cast<const MTDTrackingRecHit*>((*ihit1).recHit()->hit());
1380  const MTDTrackingRecHit* mtdhit2 = static_cast<const MTDTrackingRecHit*>((*(ihit1 + 1)).recHit()->hit());
1381  TrackTofPidInfo tofInfo = computeTrackTofPidInfo(
1382  lastStep.second, etlpathlength, trs, mtdhit1->time(), mtdhit1->timeError(), 0.f, 0.f, true, TofCalc::kCost);
1383  //
1384  // Protect against incompatible times
1385  //
1386  float err1 = tofInfo.dterror * tofInfo.dterror;
1387  float err2 = mtdhit2->timeError() * mtdhit2->timeError();
1388  if (cms_rounding::roundIfNear0(err1) == 0.f || cms_rounding::roundIfNear0(err2) == 0.f) {
1389  edm::LogError("TrackExtenderWithMTD")
1390  << "MTD tracking hits with zero time uncertainty: " << err1 << " " << err2;
1391  } else {
1392  if ((tofInfo.dt - mtdhit2->time()) * (tofInfo.dt - mtdhit2->time()) < (err1 + err2) * etlTimeChi2Cut_) {
1393  //
1394  // Subtract the ETL time of flight from the outermost measurement, and combine it in a weighted average with the innermost
1395  // the mass ambiguity related uncertainty on the time of flight is added as an additional uncertainty
1396  //
1397  err1 = 1.f / err1;
1398  err2 = 1.f / err2;
1399  thiterror = 1.f / (err1 + err2);
1400  thit = (tofInfo.dt * err1 + mtdhit2->time() * err2) * thiterror;
1401  thiterror = std::sqrt(thiterror);
1402  LogTrace("TrackExtenderWithMTD")
1403  << "TrackExtenderWithMTD: p trk = " << p.mag() << " ETL hits times/errors: " << mtdhit1->time()
1404  << " +/- " << mtdhit1->timeError() << " , " << mtdhit2->time() << " +/- " << mtdhit2->timeError()
1405  << " extrapolated time1: " << tofInfo.dt << " +/- " << tofInfo.dterror << " average = " << thit
1406  << " +/- " << thiterror;
1407  validmtd = true;
1408  } else {
1409  // if back extrapolated time of the outermost measurement not compatible with the innermost, keep the one with smallest error
1410  if (err1 <= err2) {
1411  thit = tofInfo.dt;
1412  thiterror = tofInfo.dterror;
1413  validmtd = true;
1414  } else {
1415  thit = mtdhit2->time();
1416  thiterror = mtdhit2->timeError();
1417  validmtd = true;
1418  }
1419  }
1420  }
1421  }
1422  } else {
1423  edm::LogInfo("TrackExtenderWithMTD")
1424  << "MTD hits #" << ihitcount << "ETL hits #" << ietlcount << " anomalous pattern, skipping...";
1425  }
1426 
1427  if (validmtd && validpropagation) {
1428  //here add the PID uncertainty for later use in the 1st step of 4D vtx reconstruction
1429  TrackTofPidInfo tofInfo = computeTrackTofPidInfo(
1430  p.mag2(), pathlength, trs, thit, thiterror, 0.f, 0.f, true, TofCalc::kSegm, SigmaTofCalc::kCost);
1431 
1432  pathLengthOut = pathlength; // set path length if we've got a timing hit
1433  tmtdOut = thit;
1434  sigmatmtdOut = thiterror;
1435  t0 = tofInfo.dt;
1436  covt0t0 = tofInfo.dterror * tofInfo.dterror;
1437  betaOut = tofInfo.beta_pi;
1438  covbetabeta = tofInfo.betaerror * tofInfo.betaerror;
1439  tofpi = tofInfo.dt_pi;
1440  tofk = tofInfo.dt_k;
1441  tofp = tofInfo.dt_p;
1442  sigmatofpi = tofInfo.sigma_dt_pi;
1443  sigmatofk = tofInfo.sigma_dt_k;
1444  sigmatofp = tofInfo.sigma_dt_p;
1445  }
1446  }
1447 
1448  return routput();
1449 }
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 1452 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.

1452  {
1453  static const string metname = "TrackExtenderWithMTD";
1454 
1455  const Trajectory::RecHitContainer transRecHits = trajectory.recHits();
1456 
1457  // put the collection of TrackingRecHit in the event
1458 
1459  // sets the outermost and innermost TSOSs
1460  // ToDo: validation for track states with MTD
1461  TrajectoryStateOnSurface outerTSOS;
1462  TrajectoryStateOnSurface innerTSOS;
1463  unsigned int innerId = 0, outerId = 0;
1465  DetId outerDetId;
1466 
1467  if (trajectory.direction() == alongMomentum) {
1468  LogTrace(metname) << "alongMomentum";
1469  outerTSOS = trajectory.lastMeasurement().updatedState();
1470  innerTSOS = trajectory.firstMeasurement().updatedState();
1471  outerId = trajectory.lastMeasurement().recHit()->geographicalId().rawId();
1472  innerId = trajectory.firstMeasurement().recHit()->geographicalId().rawId();
1473  outerRecHit = trajectory.lastMeasurement().recHit();
1474  outerDetId = trajectory.lastMeasurement().recHit()->geographicalId();
1475  } else if (trajectory.direction() == oppositeToMomentum) {
1476  LogTrace(metname) << "oppositeToMomentum";
1477  outerTSOS = trajectory.firstMeasurement().updatedState();
1478  innerTSOS = trajectory.lastMeasurement().updatedState();
1479  outerId = trajectory.firstMeasurement().recHit()->geographicalId().rawId();
1480  innerId = trajectory.lastMeasurement().recHit()->geographicalId().rawId();
1481  outerRecHit = trajectory.firstMeasurement().recHit();
1482  outerDetId = trajectory.firstMeasurement().recHit()->geographicalId();
1483  } else
1484  LogError(metname) << "Wrong propagation direction!";
1485 
1486  const GeomDet* outerDet = gtg_->idToDet(outerDetId);
1487  GlobalPoint outerTSOSPos = outerTSOS.globalParameters().position();
1488  bool inside = outerDet->surface().bounds().inside(outerDet->toLocal(outerTSOSPos));
1489 
1490  GlobalPoint hitPos =
1491  (outerRecHit->isValid()) ? outerRecHit->globalPosition() : outerTSOS.globalParameters().position();
1492 
1493  if (!inside) {
1494  LogTrace(metname) << "The Global Muon outerMostMeasurementState is not compatible with the recHit detector!"
1495  << " Setting outerMost postition to recHit position if recHit isValid: "
1496  << outerRecHit->isValid();
1497  LogTrace(metname) << "From " << outerTSOSPos << " to " << hitPos;
1498  }
1499 
1500  //build the TrackExtra
1501  GlobalPoint v = (inside) ? outerTSOSPos : hitPos;
1502  GlobalVector p = outerTSOS.globalParameters().momentum();
1503  math::XYZPoint outpos(v.x(), v.y(), v.z());
1504  math::XYZVector outmom(p.x(), p.y(), p.z());
1505 
1506  v = innerTSOS.globalParameters().position();
1507  p = innerTSOS.globalParameters().momentum();
1508  math::XYZPoint inpos(v.x(), v.y(), v.z());
1509  math::XYZVector inmom(p.x(), p.y(), p.z());
1510 
1511  reco::TrackExtra trackExtra(outpos,
1512  outmom,
1513  true,
1514  inpos,
1515  inmom,
1516  true,
1517  outerTSOS.curvilinearError(),
1518  outerId,
1519  innerTSOS.curvilinearError(),
1520  innerId,
1521  trajectory.direction(),
1522  trajectory.seedRef());
1523 
1524  return trackExtra;
1525 }
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 514 of file TrackExtenderWithMTD.cc.

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

515  {
516  if (!recHits.empty()) {
517  GlobalPoint first = gtg_->idToDet(recHits.front()->geographicalId())->position();
518  GlobalPoint last = gtg_->idToDet(recHits.back()->geographicalId())->position();
519 
520  // maybe perp2?
521  auto rFirst = first.mag2();
522  auto rLast = last.mag2();
523  if (rFirst < rLast)
525  if (rFirst > rLast)
527  }
528  LogDebug("TrackExtenderWithMTD") << "Impossible to determine the rechits order" << endl;
530  }
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 1528 of file TrackExtenderWithMTD.cc.

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

1528  {
1529  stringstream output;
1530 
1531  const BoundSurface* sur = nullptr;
1532  const BoundCylinder* bc = nullptr;
1533  const BoundDisk* bd = nullptr;
1534 
1535  sur = &(layer->surface());
1536  if ((bc = dynamic_cast<const BoundCylinder*>(sur))) {
1537  output << " Cylinder of radius: " << bc->radius() << endl;
1538  } else if ((bd = dynamic_cast<const BoundDisk*>(sur))) {
1539  output << " Disk at: " << bd->position().z() << endl;
1540  }
1541  return output.str();
1542 }
Definition: output.py:1

◆ fillDescriptions()

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

Definition at line 680 of file TrackExtenderWithMTD.cc.

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

680  {
682  desc.add<edm::InputTag>("tracksSrc", edm::InputTag("generalTracks"));
683  desc.add<edm::InputTag>("trjtrkAssSrc", edm::InputTag("generalTracks"));
684  desc.add<edm::InputTag>("hitsSrc", edm::InputTag("mtdTrackingRecHits"));
685  desc.add<edm::InputTag>("beamSpotSrc", edm::InputTag("offlineBeamSpot"));
686  desc.add<edm::InputTag>("genVtxPositionSrc", edm::InputTag("genParticles:xyz0"));
687  desc.add<edm::InputTag>("genVtxTimeSrc", edm::InputTag("genParticles:t0"));
688  desc.add<edm::InputTag>("vtxSrc", edm::InputTag("offlinePrimaryVertices4D"));
689  desc.add<bool>("updateTrackTrajectory", true);
690  desc.add<bool>("updateTrackExtra", true);
691  desc.add<bool>("updateTrackHitPattern", true);
692  desc.add<std::string>("TransientTrackBuilder", "TransientTrackBuilder");
693  desc.add<std::string>("MTDRecHitBuilder", "MTDRecHitBuilder");
694  desc.add<std::string>("Propagator", "PropagatorWithMaterialForMTD");
696  false,
697  "KFFitterForRefitInsideOut",
698  "KFSmootherForRefitInsideOut",
699  "PropagatorWithMaterialForMTD",
700  "alongMomentum",
701  true,
702  "WithTrackAngle",
703  "MuonRecHitBuilder",
704  "MTDRecHitBuilder");
705  desc.add<edm::ParameterSetDescription>("TrackTransformer", transDesc);
706  desc.add<double>("estimatorMaxChi2", 500.);
707  desc.add<double>("estimatorMaxNSigma", 10.);
708  desc.add<double>("btlChi2Cut", 50.);
709  desc.add<double>("btlTimeChi2Cut", 10.);
710  desc.add<double>("etlChi2Cut", 50.);
711  desc.add<double>("etlTimeChi2Cut", 10.);
712  desc.add<bool>("useVertex", false);
713  desc.add<bool>("useSimVertex", false);
714  desc.add<double>("dZCut", 0.1);
715  desc.add<double>("bsTimeSpread", 0.2);
716  descriptions.add("trackExtenderWithMTDBase", desc);
717 }
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 1196 of file TrackExtenderWithMTD.cc.

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

1208  {
1209  std::set<MTDHitMatchingInfo> hitsInLayer;
1210  bool hitMatched = false;
1211 
1212  using namespace std::placeholders;
1213  auto find_hits = std::bind(find_hits_in_dets,
1214  std::cref(hits),
1215  std::cref(traj),
1216  ilay,
1217  std::cref(tsos),
1218  pmag2,
1219  pathlength0,
1220  trs0,
1221  _1,
1222  std::cref(bs),
1223  bsTimeSpread_,
1224  prop,
1225  theEstimator.get(),
1226  _2,
1227  std::ref(hitsInLayer));
1228 
1229  if (useVertex_ && matchVertex)
1230  find_hits(vtxTime, true);
1231  else
1232  find_hits(0, false);
1233 
1234  float spaceChi2Cut = ilay->isBarrel() ? btlChi2Cut_ : etlChi2Cut_;
1235  float timeChi2Cut = ilay->isBarrel() ? btlTimeChi2Cut_ : etlTimeChi2Cut_;
1236 
1237  //just take the first hit because the hits are sorted on their matching quality
1238  if (!hitsInLayer.empty()) {
1239  //check hits to pass minimum quality matching requirements
1240  auto const& firstHit = *hitsInLayer.begin();
1241  LogTrace("TrackExtenderWithMTD") << "TrackExtenderWithMTD: matching trial 1: estChi2= " << firstHit.estChi2
1242  << " timeChi2= " << firstHit.timeChi2;
1243  if (firstHit.estChi2 < spaceChi2Cut && firstHit.timeChi2 < timeChi2Cut) {
1244  hitMatched = true;
1245  output.push_back(hitbuilder_->build(firstHit.hit));
1246  if (firstHit < bestHit)
1247  bestHit = firstHit;
1248  }
1249  }
1250 
1251  if (useVertex_ && matchVertex && !hitMatched) {
1252  //try a second search with beamspot hypothesis
1253  hitsInLayer.clear();
1254  find_hits(0, false);
1255  if (!hitsInLayer.empty()) {
1256  auto const& firstHit = *hitsInLayer.begin();
1257  LogTrace("TrackExtenderWithMTD") << "TrackExtenderWithMTD: matching trial 2: estChi2= " << firstHit.estChi2
1258  << " timeChi2= " << firstHit.timeChi2;
1259  if (firstHit.timeChi2 < timeChi2Cut) {
1260  if (firstHit.estChi2 < spaceChi2Cut) {
1261  hitMatched = true;
1262  output.push_back(hitbuilder_->build(firstHit.hit));
1263  if (firstHit < bestHit)
1264  bestHit = firstHit;
1265  }
1266  }
1267  }
1268  }
1269 
1270 #ifdef EDM_ML_DEBUG
1271  if (hitMatched) {
1272  LogTrace("TrackExtenderWithMTD") << "TrackExtenderWithMTD: matched hit with time: " << bestHit.hit->time()
1273  << " +/- " << bestHit.hit->timeError();
1274  } else {
1275  LogTrace("TrackExtenderWithMTD") << "TrackExtenderWithMTD: no matched hit";
1276  }
1277 #endif
1278 }
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 721 of file TrackExtenderWithMTD.cc.

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

724  {
725  auto out = std::make_unique<edm::ValueMap<T>>();
727  filler.insert(handle, vec.begin(), vec.end());
728  filler.fill();
729  iEvent.put(token, std::move(out));
730 }
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 733 of file TrackExtenderWithMTD.cc.

References funct::abs(), cms::cuda::bs, PVValHelper::dz, makeMEIFBenchmarkPlots::ev, f, dqm-mbProfile::format, 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_2024v10_cff::track, and TrajectoryStateClosestToBeamLine::trackStateAtPCA().

733  {
734  //this produces pieces of the track extra
735  Traj2TrackHits t2t;
736 
737  theTransformer->setServices(es);
738 
739  TrackingRecHitRefProd hitsRefProd = ev.getRefBeforePut<TrackingRecHitCollection>();
740  reco::TrackExtraRefProd extrasRefProd = ev.getRefBeforePut<reco::TrackExtraCollection>();
741 
742  gtg_ = es.getHandle(gtgToken_);
743 
744  auto geo = es.getTransientHandle(dlgeoToken_);
745 
747 
750 
751  auto propH = es.getTransientHandle(propToken_);
752  const Propagator* prop = propH.product();
753 
754  auto httopo = es.getTransientHandle(ttopoToken_);
755  const TrackerTopology& ttopo = *httopo;
756 
757  auto output = std::make_unique<TrackCollection>();
758  auto extras = std::make_unique<reco::TrackExtraCollection>();
759  auto outhits = std::make_unique<edm::OwnVector<TrackingRecHit>>();
760 
761  std::vector<float> btlMatchChi2;
762  std::vector<float> etlMatchChi2;
763  std::vector<float> btlMatchTimeChi2;
764  std::vector<float> etlMatchTimeChi2;
765  std::vector<int> npixBarrel;
766  std::vector<int> npixEndcap;
767  std::vector<float> pOrigTrkRaw;
768  std::vector<float> betaOrigTrkRaw;
769  std::vector<float> t0OrigTrkRaw;
770  std::vector<float> sigmat0OrigTrkRaw;
771  std::vector<float> pathLengthsOrigTrkRaw;
772  std::vector<float> tmtdOrigTrkRaw;
773  std::vector<float> sigmatmtdOrigTrkRaw;
774  std::vector<float> tofpiOrigTrkRaw;
775  std::vector<float> tofkOrigTrkRaw;
776  std::vector<float> tofpOrigTrkRaw;
777  std::vector<float> sigmatofpiOrigTrkRaw;
778  std::vector<float> sigmatofkOrigTrkRaw;
779  std::vector<float> sigmatofpOrigTrkRaw;
780  std::vector<int> assocOrigTrkRaw;
781 
782  auto const tracksH = ev.getHandle(tracksToken_);
783 
784  const auto& trjtrks = ev.get(trajTrackAToken_);
785 
786  //MTD hits DetSet
787  const auto& hits = ev.get(hitsToken_);
788 
789  //beam spot
790  const auto& bs = ev.get(bsToken_);
791 
792  const Vertex* pv = nullptr;
793  if (useVertex_ && !useSimVertex_) {
794  auto const& vtxs = ev.get(vtxToken_);
795  if (!vtxs.empty())
796  pv = &vtxs[0];
797  }
798 
799  std::unique_ptr<math::XYZTLorentzVectorF> genPV(nullptr);
800  if (useVertex_ && useSimVertex_) {
801  const auto& genVtxPosition = ev.get(genVtxPositionToken_);
802  const auto& genVtxTime = ev.get(genVtxTimeToken_);
803  genPV = std::make_unique<math::XYZTLorentzVectorF>(
804  genVtxPosition.x(), genVtxPosition.y(), genVtxPosition.z(), genVtxTime);
805  }
806 
807  float vtxTime = 0.f;
808  if (useVertex_) {
809  if (useSimVertex_ && genPV) {
810  vtxTime = genPV->t();
811  } else if (pv)
812  vtxTime = pv->t(); //already in ns
813  }
814 
815  std::vector<unsigned> track_indices;
816  unsigned itrack = 0;
817 
818  for (const auto& trjtrk : trjtrks) {
819  const Trajectory& trajs = *trjtrk.key;
820  const reco::TrackRef& track = trjtrk.val;
821 
822  LogTrace("TrackExtenderWithMTD") << "TrackExtenderWithMTD: extrapolating track " << itrack
823  << " p/pT = " << track->p() << " " << track->pt() << " eta = " << track->eta();
824  LogTrace("TrackExtenderWithMTD") << "TrackExtenderWithMTD: sigma_p = "
825  << sqrt(track->covariance()(0, 0)) * track->p2()
826  << " sigma_p/p = " << sqrt(track->covariance()(0, 0)) * track->p() * 100 << " %";
827 
828  float trackVtxTime = 0.f;
829  if (useVertex_) {
830  float dz;
831  if (useSimVertex_)
832  dz = std::abs(track->dz(math::XYZPoint(*genPV)));
833  else
834  dz = std::abs(track->dz(pv->position()));
835 
836  if (dz < dzCut_)
837  trackVtxTime = vtxTime;
838  }
839 
840  reco::TransientTrack ttrack(track, magfield.product(), gtg_);
841  auto thits = theTransformer->getTransientRecHits(ttrack);
843  MTDHitMatchingInfo mBTL, mETL;
844 
845  if (trajs.isValid()) {
846  // get the outermost trajectory point on the track
849  bool tscbl_status = getTrajectoryStateClosestToBeamLine(trajs, bs, prop, tscbl);
850 
851  if (tscbl_status) {
852  float pmag2 = tscbl.trackStateAtPCA().momentum().mag2();
853  float pathlength0;
854  TrackSegments trs0;
855  trackPathLength(trajs, tscbl, prop, pathlength0, trs0);
856 
857  const auto& btlhits = tryBTLLayers(tsos,
858  trajs,
859  pmag2,
860  pathlength0,
861  trs0,
862  hits,
863  geo.product(),
864  magfield.product(),
865  prop,
866  bs,
867  trackVtxTime,
868  trackVtxTime != 0.f,
869  mBTL);
870  mtdthits.insert(mtdthits.end(), btlhits.begin(), btlhits.end());
871 
872  // in the future this should include an intermediate refit before propagating to the ETL
873  // for now it is ok
874  const auto& etlhits = tryETLLayers(tsos,
875  trajs,
876  pmag2,
877  pathlength0,
878  trs0,
879  hits,
880  geo.product(),
881  magfield.product(),
882  prop,
883  bs,
884  trackVtxTime,
885  trackVtxTime != 0.f,
886  mETL);
887  mtdthits.insert(mtdthits.end(), etlhits.begin(), etlhits.end());
888  }
889  }
890 
891  auto ordering = checkRecHitsOrdering(thits);
893  thits.insert(thits.end(), mtdthits.begin(), mtdthits.end());
894  } else {
895  std::reverse(mtdthits.begin(), mtdthits.end());
896  mtdthits.insert(mtdthits.end(), thits.begin(), thits.end());
897  thits.swap(mtdthits);
898  }
899 
900  const auto& trajwithmtd =
901  mtdthits.empty() ? std::vector<Trajectory>(1, trajs) : theTransformer->transform(ttrack, thits);
902  float pMap = 0.f, betaMap = 0.f, t0Map = 0.f, sigmat0Map = -1.f, pathLengthMap = -1.f, tmtdMap = 0.f,
903  sigmatmtdMap = -1.f, tofpiMap = 0.f, tofkMap = 0.f, tofpMap = 0.f, sigmatofpiMap = -1.f, sigmatofkMap = -1.f,
904  sigmatofpMap = -1.f;
905  int iMap = -1;
906 
907  for (const auto& trj : trajwithmtd) {
908  const auto& thetrj = (updateTraj_ ? trj : trajs);
909  float pathLength = 0.f, tmtd = 0.f, sigmatmtd = -1.f, tofpi = 0.f, tofk = 0.f, tofp = 0.f, sigmatofpi = -1.f,
910  sigmatofk = -1.f, sigmatofp = -1.f;
911  LogTrace("TrackExtenderWithMTD") << "TrackExtenderWithMTD: refit track " << itrack << " p/pT = " << track->p()
912  << " " << track->pt() << " eta = " << track->eta();
914  thetrj,
915  trj,
916  bs,
917  magfield.product(),
918  prop,
919  !trajwithmtd.empty() && !mtdthits.empty(),
920  pathLength,
921  tmtd,
922  sigmatmtd,
923  tofpi,
924  tofk,
925  tofp,
926  sigmatofpi,
927  sigmatofk,
928  sigmatofp);
929  if (result.ndof() >= 0) {
931  reco::TrackExtra::TrajParams trajParams;
933  size_t hitsstart = outhits->size();
934  if (updatePattern_) {
935  t2t(trj, *outhits, trajParams, chi2s); // this fills the output hit collection
936  } else {
937  t2t(thetrj, *outhits, trajParams, chi2s);
938  }
939  size_t hitsend = outhits->size();
940  extras->push_back(buildTrackExtra(trj)); // always push back the fully built extra, update by setting in track
941  extras->back().setHits(hitsRefProd, hitsstart, hitsend - hitsstart);
942  extras->back().setTrajParams(trajParams, chi2s);
943  //create the track
944  output->push_back(result);
945  btlMatchChi2.push_back(mBTL.hit ? mBTL.estChi2 : -1.f);
946  etlMatchChi2.push_back(mETL.hit ? mETL.estChi2 : -1.f);
947  btlMatchTimeChi2.push_back(mBTL.hit ? mBTL.timeChi2 : -1.f);
948  etlMatchTimeChi2.push_back(mETL.hit ? mETL.timeChi2 : -1.f);
949  pathLengthMap = pathLength;
950  tmtdMap = tmtd;
951  sigmatmtdMap = sigmatmtd;
952  auto& backtrack = output->back();
953  iMap = output->size() - 1;
954  pMap = backtrack.p();
955  betaMap = backtrack.beta();
956  t0Map = backtrack.t0();
957  sigmat0Map = std::copysign(std::sqrt(std::abs(backtrack.covt0t0())), backtrack.covt0t0());
958  tofpiMap = tofpi;
959  tofkMap = tofk;
960  tofpMap = tofp;
961  sigmatofpiMap = sigmatofpi;
962  sigmatofkMap = sigmatofk;
963  sigmatofpMap = sigmatofp;
964  reco::TrackExtraRef extraRef(extrasRefProd, extras->size() - 1);
965  backtrack.setExtra((updateExtra_ ? extraRef : track->extra()));
966  for (unsigned ihit = hitsstart; ihit < hitsend; ++ihit) {
967  backtrack.appendHitPattern((*outhits)[ihit], ttopo);
968  }
969  npixBarrel.push_back(backtrack.hitPattern().numberOfValidPixelBarrelHits());
970  npixEndcap.push_back(backtrack.hitPattern().numberOfValidPixelEndcapHits());
971  LogTrace("TrackExtenderWithMTD") << "TrackExtenderWithMTD: tmtd " << tmtdMap << " +/- " << sigmatmtdMap
972  << " t0 " << t0Map << " +/- " << sigmat0Map << " tof pi/K/p " << tofpiMap
973  << "+/-" << fmt::format("{:0.2g}", sigmatofpiMap) << " ("
974  << fmt::format("{:0.2g}", sigmatofpiMap / tofpiMap * 100) << "%) " << tofkMap
975  << "+/-" << fmt::format("{:0.2g}", sigmatofkMap) << " ("
976  << fmt::format("{:0.2g}", sigmatofkMap / tofkMap * 100) << "%) " << tofpMap
977  << "+/-" << fmt::format("{:0.2g}", sigmatofpMap) << " ("
978  << fmt::format("{:0.2g}", sigmatofpMap / tofpMap * 100) << "%) ";
979  } else {
980  LogTrace("TrackExtenderWithMTD") << "Error in the MTD track refitting. This should not happen";
981  }
982  }
983 
984  pOrigTrkRaw.push_back(pMap);
985  betaOrigTrkRaw.push_back(betaMap);
986  t0OrigTrkRaw.push_back(t0Map);
987  sigmat0OrigTrkRaw.push_back(sigmat0Map);
988  pathLengthsOrigTrkRaw.push_back(pathLengthMap);
989  tmtdOrigTrkRaw.push_back(tmtdMap);
990  sigmatmtdOrigTrkRaw.push_back(sigmatmtdMap);
991  tofpiOrigTrkRaw.push_back(tofpiMap);
992  tofkOrigTrkRaw.push_back(tofkMap);
993  tofpOrigTrkRaw.push_back(tofpMap);
994  sigmatofpiOrigTrkRaw.push_back(sigmatofpiMap);
995  sigmatofkOrigTrkRaw.push_back(sigmatofkMap);
996  sigmatofpOrigTrkRaw.push_back(sigmatofpMap);
997  assocOrigTrkRaw.push_back(iMap);
998 
999  if (iMap == -1) {
1000  btlMatchChi2.push_back(-1.f);
1001  etlMatchChi2.push_back(-1.f);
1002  btlMatchTimeChi2.push_back(-1.f);
1003  etlMatchTimeChi2.push_back(-1.f);
1004  npixBarrel.push_back(-1.f);
1005  npixEndcap.push_back(-1.f);
1006  }
1007 
1008  ++itrack;
1009  }
1010 
1011  auto outTrksHandle = ev.put(std::move(output));
1012  ev.put(std::move(extras));
1013  ev.put(std::move(outhits));
1014 
1015  fillValueMap(ev, tracksH, btlMatchChi2, btlMatchChi2Token_);
1016  fillValueMap(ev, tracksH, etlMatchChi2, etlMatchChi2Token_);
1017  fillValueMap(ev, tracksH, btlMatchTimeChi2, btlMatchTimeChi2Token_);
1018  fillValueMap(ev, tracksH, etlMatchTimeChi2, etlMatchTimeChi2Token_);
1019  fillValueMap(ev, tracksH, npixBarrel, npixBarrelToken_);
1020  fillValueMap(ev, tracksH, npixEndcap, npixEndcapToken_);
1021  fillValueMap(ev, tracksH, pOrigTrkRaw, pOrigTrkToken_);
1022  fillValueMap(ev, tracksH, betaOrigTrkRaw, betaOrigTrkToken_);
1023  fillValueMap(ev, tracksH, t0OrigTrkRaw, t0OrigTrkToken_);
1024  fillValueMap(ev, tracksH, sigmat0OrigTrkRaw, sigmat0OrigTrkToken_);
1025  fillValueMap(ev, tracksH, pathLengthsOrigTrkRaw, pathLengthOrigTrkToken_);
1026  fillValueMap(ev, tracksH, tmtdOrigTrkRaw, tmtdOrigTrkToken_);
1027  fillValueMap(ev, tracksH, sigmatmtdOrigTrkRaw, sigmatmtdOrigTrkToken_);
1028  fillValueMap(ev, tracksH, tofpiOrigTrkRaw, tofpiOrigTrkToken_);
1029  fillValueMap(ev, tracksH, tofkOrigTrkRaw, tofkOrigTrkToken_);
1030  fillValueMap(ev, tracksH, tofpOrigTrkRaw, tofpOrigTrkToken_);
1031  fillValueMap(ev, tracksH, sigmatofpiOrigTrkRaw, sigmatofpiOrigTrkToken_);
1032  fillValueMap(ev, tracksH, sigmatofkOrigTrkRaw, sigmatofkOrigTrkToken_);
1033  fillValueMap(ev, tracksH, sigmatofpOrigTrkRaw, sigmatofpOrigTrkToken_);
1034  fillValueMap(ev, tracksH, assocOrigTrkRaw, assocOrigTrkToken_);
1035 }
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::EDPutToken sigmatofkOrigTrkToken_
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
edm::EDPutToken sigmatofpiOrigTrkToken_
std::vector< LocalTrajectoryParameters > TrajParams
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, float &sigmatofpi, float &sigmatofk, float &sigmatofp) const
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
edm::EDPutToken sigmatofpOrigTrkToken_
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 1126 of file TrackExtenderWithMTD.cc.

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

1139  {
1140  const vector<const DetLayer*>& layers = geo->allBTLLayers();
1141 
1143  bestHit = MTDHitMatchingInfo();
1144  for (const DetLayer* ilay : layers) {
1145  LogTrace("TrackExtenderWithMTD") << "Hit search: BTL layer at R= "
1146  << static_cast<const BarrelDetLayer*>(ilay)->specificSurface().radius();
1147 
1148  fillMatchingHits(ilay, tsos, traj, pmag2, pathlength0, trs0, hits, prop, bs, vtxTime, matchVertex, output, bestHit);
1149  }
1150 
1151  return output;
1152 }
#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 1155 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().

1168  {
1169  const vector<const DetLayer*>& layers = geo->allETLLayers();
1170 
1172  bestHit = MTDHitMatchingInfo();
1173  for (const DetLayer* ilay : layers) {
1174  const BoundDisk& disk = static_cast<const ForwardDetLayer*>(ilay)->specificSurface();
1175  const float diskZ = disk.position().z();
1176 
1177  if (tsos.globalPosition().z() * diskZ < 0)
1178  continue; // only propagate to the disk that's on the same side
1179 
1180  LogTrace("TrackExtenderWithMTD") << "Hit search: ETL disk at Z = " << diskZ;
1181 
1182  fillMatchingHits(ilay, tsos, traj, pmag2, pathlength0, trs0, hits, prop, bs, vtxTime, matchVertex, output, bestHit);
1183  }
1184 
1185  // the ETL hits order must be from the innermost to the outermost
1186 
1187  if (output.size() == 2) {
1188  if (std::abs(output[0]->globalPosition().z()) > std::abs(output[1]->globalPosition().z())) {
1189  std::reverse(output.begin(), output.end());
1190  }
1191  }
1192  return output;
1193 }
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 608 of file TrackExtenderWithMTD.cc.

◆ bsToken_

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

Definition at line 577 of file TrackExtenderWithMTD.cc.

◆ btlChi2Cut_

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

Definition at line 600 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 601 of file TrackExtenderWithMTD.cc.

◆ builder_

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

Definition at line 586 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 607 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 602 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 603 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 590 of file TrackExtenderWithMTD.cc.

◆ gtgToken_

◆ hitbuilder_

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

Definition at line 588 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 576 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

◆ sigmatofkOrigTrkToken_

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

◆ sigmatofpiOrigTrkToken_

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

◆ sigmatofpOrigTrkToken_

template<class TrackCollection >
edm::EDPutToken TrackExtenderWithMTDT< TrackCollection >::sigmatofpOrigTrkToken_
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 574 of file TrackExtenderWithMTD.cc.

◆ trajTrackAToken_

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

Definition at line 575 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 582 of file TrackExtenderWithMTD.cc.

◆ updatePattern_

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

Definition at line 582 of file TrackExtenderWithMTD.cc.

◆ updateTraj_

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

Definition at line 582 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