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

Member Typedef Documentation

◆ InputCollection

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

Definition at line 471 of file TrackExtenderWithMTD.cc.

◆ TrackType

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

Definition at line 470 of file TrackExtenderWithMTD.cc.

Constructor & Destructor Documentation

◆ TrackExtenderWithMTDT()

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

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

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

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

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

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

525  {
526  if (!recHits.empty()) {
527  GlobalPoint first = gtg_->idToDet(recHits.front()->geographicalId())->position();
528  GlobalPoint last = gtg_->idToDet(recHits.back()->geographicalId())->position();
529 
530  // maybe perp2?
531  auto rFirst = first.mag2();
532  auto rLast = last.mag2();
533  if (rFirst < rLast)
535  if (rFirst > rLast)
537  }
538  LogDebug("TrackExtenderWithMTD") << "Impossible to determine the rechits order" << endl;
540  }
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 1539 of file TrackExtenderWithMTD.cc.

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

1539  {
1540  stringstream output;
1541 
1542  const BoundSurface* sur = nullptr;
1543  const BoundCylinder* bc = nullptr;
1544  const BoundDisk* bd = nullptr;
1545 
1546  sur = &(layer->surface());
1547  if ((bc = dynamic_cast<const BoundCylinder*>(sur))) {
1548  output << " Cylinder of radius: " << bc->radius() << endl;
1549  } else if ((bd = dynamic_cast<const BoundDisk*>(sur))) {
1550  output << " Disk at: " << bd->position().z() << endl;
1551  }
1552  return output.str();
1553 }
Definition: output.py:1

◆ fillDescriptions()

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

Definition at line 690 of file TrackExtenderWithMTD.cc.

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

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

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

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

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

734  {
735  auto out = std::make_unique<edm::ValueMap<T>>();
737  filler.insert(handle, vec.begin(), vec.end());
738  filler.fill();
739  iEvent.put(token, std::move(out));
740 }
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 743 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_2024v11_cff::track, and TrajectoryStateClosestToBeamLine::trackStateAtPCA().

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

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

1150  {
1151  const vector<const DetLayer*>& layers = geo->allBTLLayers();
1152 
1154  bestHit = MTDHitMatchingInfo();
1155  for (const DetLayer* ilay : layers) {
1156  LogTrace("TrackExtenderWithMTD") << "Hit search: BTL layer at R= "
1157  << static_cast<const BarrelDetLayer*>(ilay)->specificSurface().radius();
1158 
1159  fillMatchingHits(ilay, tsos, traj, pmag2, pathlength0, trs0, hits, prop, bs, vtxTime, matchVertex, output, bestHit);
1160  }
1161 
1162  return output;
1163 }
#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 1166 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().

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

◆ bsToken_

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

Definition at line 587 of file TrackExtenderWithMTD.cc.

◆ btlChi2Cut_

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

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

◆ builder_

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

Definition at line 596 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 617 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 612 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 613 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 600 of file TrackExtenderWithMTD.cc.

◆ gtgToken_

◆ hitbuilder_

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

Definition at line 598 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 586 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 584 of file TrackExtenderWithMTD.cc.

◆ trajTrackAToken_

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

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

◆ updatePattern_

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

Definition at line 592 of file TrackExtenderWithMTD.cc.

◆ updateTraj_

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

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