CMS 3D CMS Logo

List of all members | Public Member Functions | Static Public Member Functions | Private Member Functions | Private Attributes
TrackTransformer Class Referencefinal

#include <TrackTransformer.h>

Inheritance diagram for TrackTransformer:
TrackTransformerBase

Public Member Functions

TransientTrackingRecHit::ConstRecHitContainer getTransientRecHits (const reco::TransientTrack &track) const
 
const MagneticFieldmagneticField () const
 the magnetic field More...
 
std::unique_ptr< TrajectoryFitter > const & refitter () const
 the refitter used to refit the reco::Track More...
 
void setServices (const edm::EventSetup &) override
 set the services needed by the TrackTransformer More...
 
std::unique_ptr< TrajectorySmoother > const & smoother () const
 the smoother used to smooth the trajectory which came from the refitting step More...
 
edm::ESHandle< GlobalTrackingGeometrytrackingGeometry () const
 the tracking geometry More...
 
 TrackTransformer (const edm::ParameterSet &, edm::ConsumesCollector &)
 Constructor (for modules migrated to ES-consumes) More...
 
 TrackTransformer (const edm::ParameterSet &parameterSet, edm::ConsumesCollector &&iC)
 
std::vector< Trajectorytransform (const reco::Track &) const override
 Convert a reco::Track into Trajectory. More...
 
std::vector< Trajectorytransform (const reco::TrackRef &) const
 Convert a reco::TrackRef into Trajectory. More...
 
std::vector< Trajectorytransform (const reco::TransientTrack &, TransientTrackingRecHit::ConstRecHitContainer &) const
 Convert a reco::TrackRef into Trajectory, refit with a new set of hits. More...
 
 ~TrackTransformer () override
 Destructor. More...
 
- Public Member Functions inherited from TrackTransformerBase
 TrackTransformerBase ()
 Constructor. More...
 
virtual ~TrackTransformerBase ()
 Destructor. More...
 

Static Public Member Functions

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

Private Member Functions

RefitDirection::GeometricalDirection checkRecHitsOrdering (TransientTrackingRecHit::ConstRecHitContainer const &) const
 
edm::ESHandle< Propagator > const & propagator () const
 

Private Attributes

TkClonerImpl hitCloner
 
unsigned long long theCacheId_TRH = 0
 
const bool theDoPredictionsOnly
 
std::unique_ptr< TrajectoryFittertheFitter
 
const std::string theFitterName
 
edm::ESGetToken< TrajectoryFitter, TrajectoryFitterRecordtheFitterToken
 
edm::ESHandle< MagneticFieldtheMGField
 
edm::ESGetToken< MagneticField, IdealMagneticFieldRecordtheMGFieldToken
 
bool theMtdAvailable
 
edm::ESHandle< TransientTrackingRecHitBuildertheMTDRecHitBuilder
 
const std::string theMTDRecHitBuilderName
 
edm::ESGetToken< TransientTrackingRecHitBuilder, TransientRecHitRecordtheMTDRecHitBuilderToken
 
edm::ESHandle< TransientTrackingRecHitBuildertheMuonRecHitBuilder
 
const std::string theMuonRecHitBuilderName
 
edm::ESGetToken< TransientTrackingRecHitBuilder, TransientRecHitRecordtheMuonRecHitBuilderToken
 
edm::ESHandle< PropagatorthePropagator
 
const std::string thePropagatorName
 
edm::ESGetToken< Propagator, TrackingComponentsRecordthePropagatorToken
 
const RefitDirection theRefitDirection
 
const bool theRPCInTheFit
 
std::unique_ptr< TrajectorySmoothertheSmoother
 
const std::string theSmootherName
 
edm::ESGetToken< TrajectorySmoother, TrajectoryFitterRecordtheSmootherToken
 
const TransientTrackingRecHitBuildertheTrackerRecHitBuilder
 
const std::string theTrackerRecHitBuilderName
 
edm::ESGetToken< TransientTrackingRecHitBuilder, TransientRecHitRecordtheTrackerRecHitBuilderToken
 
edm::ESHandle< GlobalTrackingGeometrytheTrackingGeometry
 
edm::ESGetToken< GlobalTrackingGeometry, GlobalTrackingGeometryRecordtheTrackingGeometryToken
 

Detailed Description

This class takes a reco::Track and refits the rechits inside it. The final result is a Trajectory refitted and smoothed. To make the refitting (and the smoothing) the usual KF tools are used.

CAVEAT: till now (it will be changed in the near future) the class stores the pointers to the services, therefore EACH event the setServices(const edm::EventSetup&) method MUST be called in the code in which the TrackTransformer is used.

Author
R. Bellan - INFN Torino ricca.nosp@m.rdo..nosp@m.bella.nosp@m.n@ce.nosp@m.rn.ch

This class takes a reco::Track and refits the rechits inside it. The final result is a Trajectory refitted and smoothed. To make the refitting (and the smoothing) the usual KF tools are used.

CAVEAT: till now (it will be changed in the near future) the class stores the pointers to the services, therefore EACH event the setServices(const edm::EventSetup&) method MUST be called in the code in which the TrackTransformer is used.

Rec hits are ordered in rank of increasing |z| assuing muons are coming from the top of the detector.

$Date: 2009/01/15 author R. Bellan - CERN ricca.nosp@m.rdo..nosp@m.bella.nosp@m.n@ce.nosp@m.rn.ch modified for zed ordering by N. Kypreos - UF nicho.nosp@m.las..nosp@m.theod.nosp@m.ore..nosp@m.kypre.nosp@m.os@c.nosp@m.ern.c.nosp@m.h

This class takes a reco::Track and refits the rechits inside it. The final result is a Trajectory refitted and smoothed. To make the refitting (and the smoothing) the usual KF tools are used.

CAVEAT: till now (it will be changed in the near future) the class stores the pointers to the services, therefore EACH event the setServices(const edm::EventSetup&) method MUST be called in the code in which the TrackTransformer is used.

Author
R. Bellan - CERN ricca.nosp@m.rdo..nosp@m.bella.nosp@m.n@ce.nosp@m.rn.ch

Definition at line 46 of file TrackTransformer.h.

Constructor & Destructor Documentation

◆ TrackTransformer() [1/2]

TrackTransformer::TrackTransformer ( const edm::ParameterSet parameterSet,
edm::ConsumesCollector iC 
)
explicit

Constructor (for modules migrated to ES-consumes)

Constructor.

Definition at line 32 of file TrackTransformer.cc.

References edm::ConsumesCollector::esConsumes(), theFitterName, theFitterToken, theMGFieldToken, theMTDRecHitBuilderName, theMTDRecHitBuilderToken, theMuonRecHitBuilderName, theMuonRecHitBuilderToken, thePropagatorName, thePropagatorToken, theSmootherName, theSmootherToken, theTrackerRecHitBuilderName, theTrackerRecHitBuilderToken, and theTrackingGeometryToken.

33  : theRPCInTheFit(parameterSet.getParameter<bool>("RefitRPCHits")),
34  theDoPredictionsOnly(parameterSet.getParameter<bool>("DoPredictionsOnly")),
35  theRefitDirection(parameterSet.getParameter<string>("RefitDirection")),
36  theFitterName(parameterSet.getParameter<string>("Fitter")),
37  theSmootherName(parameterSet.getParameter<string>("Smoother")),
38  thePropagatorName(parameterSet.getParameter<string>("Propagator")),
39  theTrackerRecHitBuilderName(parameterSet.getParameter<string>("TrackerRecHitBuilder")),
40  theMuonRecHitBuilderName(parameterSet.getParameter<string>("MuonRecHitBuilder")),
41  theMTDRecHitBuilderName(parameterSet.getParameter<string>("MTDRecHitBuilder")) {
50 }
const std::string theTrackerRecHitBuilderName
T getParameter(std::string const &) const
Definition: ParameterSet.h:307
const RefitDirection theRefitDirection
const bool theRPCInTheFit
edm::ESGetToken< TransientTrackingRecHitBuilder, TransientRecHitRecord > theTrackerRecHitBuilderToken
ParameterSet const & parameterSet(StableProvenance const &provenance, ProcessHistory const &history)
Definition: Provenance.cc:11
const std::string thePropagatorName
const std::string theFitterName
edm::ESGetToken< TrajectoryFitter, TrajectoryFitterRecord > theFitterToken
const std::string theMuonRecHitBuilderName
edm::ESGetToken< Propagator, TrackingComponentsRecord > thePropagatorToken
const std::string theSmootherName
edm::ESGetToken< TrajectorySmoother, TrajectoryFitterRecord > theSmootherToken
edm::ESGetToken< TransientTrackingRecHitBuilder, TransientRecHitRecord > theMTDRecHitBuilderToken
const std::string theMTDRecHitBuilderName
const bool theDoPredictionsOnly
edm::ESGetToken< MagneticField, IdealMagneticFieldRecord > theMGFieldToken
edm::ESGetToken< TransientTrackingRecHitBuilder, TransientRecHitRecord > theMuonRecHitBuilderToken
edm::ESGetToken< GlobalTrackingGeometry, GlobalTrackingGeometryRecord > theTrackingGeometryToken

◆ TrackTransformer() [2/2]

TrackTransformer::TrackTransformer ( const edm::ParameterSet parameterSet,
edm::ConsumesCollector &&  iC 
)
inlineexplicit

Definition at line 50 of file TrackTransformer.h.

ParameterSet const & parameterSet(StableProvenance const &provenance, ProcessHistory const &history)
Definition: Provenance.cc:11
TrackTransformer(const edm::ParameterSet &, edm::ConsumesCollector &)
Constructor (for modules migrated to ES-consumes)

◆ ~TrackTransformer()

TrackTransformer::~TrackTransformer ( )
override

Destructor.

Definition at line 53 of file TrackTransformer.cc.

53 {}

Member Function Documentation

◆ checkRecHitsOrdering()

RefitDirection::GeometricalDirection TrackTransformer::checkRecHitsOrdering ( TransientTrackingRecHit::ConstRecHitContainer const &  recHits) const
private

Definition at line 135 of file TrackTransformer.cc.

References dqmdumpme::first, GlobalTrackingGeometry::idToDet(), RefitDirection::insideOut, dqmdumpme::last, LogDebug, RefitDirection::outsideIn, position, FastTrackerRecHitMaskProducer_cfi::recHits, trackingGeometry(), and RefitDirection::undetermined.

Referenced by transform().

136  {
137  if (!recHits.empty()) {
138  GlobalPoint first = trackingGeometry()->idToDet(recHits.front()->geographicalId())->position();
139  GlobalPoint last = trackingGeometry()->idToDet(recHits.back()->geographicalId())->position();
140 
141  // maybe perp2?
142  auto rFirst = first.mag2();
143  auto rLast = last.mag2();
144  if (rFirst < rLast)
146  if (rFirst > rLast)
148  }
149  LogDebug("Reco|TrackingTools|TrackTransformer") << "Impossible to determine the rechits order" << endl;
151 }
const GeomDet * idToDet(DetId) const override
edm::ESHandle< GlobalTrackingGeometry > trackingGeometry() const
the tracking geometry
static int position[264][3]
Definition: ReadPGInfo.cc:289
#define LogDebug(id)

◆ fillPSetDescription()

void TrackTransformer::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" 
)
static

fillDescriptions

Definition at line 55 of file TrackTransformer.cc.

References submitPVResolutionJobs::desc, propagator(), smoother(), and AlCaHLTBitMon_QueryRunRegistry::string.

Referenced by L3MuonProducer::fillDescriptions(), and TrackExtenderWithMTDT< TrackCollection >::fillDescriptions().

64  {
65  desc.add<bool>("DoPredictionsOnly", doPredictionsOnly);
66  desc.add<std::string>("Fitter", fitter);
67  desc.add<std::string>("Smoother", smoother);
68  desc.add<std::string>("Propagator", propagator);
69  desc.add<std::string>("RefitDirection", refitDirection);
70  desc.add<bool>("RefitRPCHits", refitRPCHits);
71  desc.add<std::string>("TrackerRecHitBuilder", trackerRecHitBuilder);
72  desc.add<std::string>("MuonRecHitBuilder", muonRecHitBuilder);
73  desc.add<std::string>("MTDRecHitBuilder", mtdRecHitBuilder);
74 }
std::unique_ptr< TrajectorySmoother > const & smoother() const
the smoother used to smooth the trajectory which came from the refitting step
edm::ESHandle< Propagator > const & propagator() const

◆ getTransientRecHits()

TransientTrackingRecHit::ConstRecHitContainer TrackTransformer::getTransientRecHits ( const reco::TransientTrack track) const

Definition at line 107 of file TrackTransformer.cc.

References TransientTrackingRecHitBuilder::build(), Options::const, Exception, FastTime, DetId::Forward, LogTrace, DetId::Muon, mps_fire::result, theMtdAvailable, theMTDRecHitBuilder, theMuonRecHitBuilder, theRPCInTheFit, theTrackerRecHitBuilder, HLT_2024v14_cff::track, and DetId::Tracker.

Referenced by transform().

108  {
110  auto tkbuilder = static_cast<TkTransientTrackingRecHitBuilder const*>(theTrackerRecHitBuilder);
111 
112  for (auto hit = track.recHitsBegin(); hit != track.recHitsEnd(); ++hit) {
113  if ((*hit)->isValid()) {
114  if ((*hit)->geographicalId().det() == DetId::Tracker) {
115  result.emplace_back((**hit).cloneForFit(*tkbuilder->geometry()->idToDet((**hit).geographicalId())));
116  } else if ((*hit)->geographicalId().det() == DetId::Muon) {
117  if ((*hit)->geographicalId().subdetId() == 3 && !theRPCInTheFit) {
118  LogTrace("Reco|TrackingTools|TrackTransformer") << "RPC Rec Hit discarged";
119  continue;
120  }
121  result.push_back(theMuonRecHitBuilder->build(&**hit));
122  } else if ((*hit)->geographicalId().det() == DetId::Forward && (*hit)->geographicalId().subdetId() == FastTime) {
123  if (theMtdAvailable)
124  result.push_back(theMTDRecHitBuilder->build(&**hit));
125  else
126  throw cms::Exception("TrackTransformer") << "MTD hit encountered but MTD not available!";
127  }
128  }
129  }
130 
131  return result;
132 }
const TransientTrackingRecHitBuilder * theTrackerRecHitBuilder
const bool theRPCInTheFit
#define LogTrace(id)
edm::ESHandle< TransientTrackingRecHitBuilder > theMTDRecHitBuilder
edm::ESHandle< TransientTrackingRecHitBuilder > theMuonRecHitBuilder
virtual RecHitPointer build(const TrackingRecHit *p) const =0
build a tracking rechit from an existing rechit
std::vector< ConstRecHitPointer > ConstRecHitContainer

◆ magneticField()

const MagneticField* TrackTransformer::magneticField ( ) const
inline

the magnetic field

Definition at line 80 of file TrackTransformer.h.

References theMGField.

Referenced by transform().

80 { return &*theMGField; }
edm::ESHandle< MagneticField > theMGField

◆ propagator()

edm::ESHandle<Propagator> const& TrackTransformer::propagator ( ) const
inlineprivate

Definition at line 121 of file TrackTransformer.h.

References thePropagator.

Referenced by fillPSetDescription(), and transform().

121 { return thePropagator; }
edm::ESHandle< Propagator > thePropagator

◆ refitter()

std::unique_ptr<TrajectoryFitter> const& TrackTransformer::refitter ( ) const
inline

the refitter used to refit the reco::Track

Definition at line 89 of file TrackTransformer.h.

References theFitter.

89 { return theFitter; }
std::unique_ptr< TrajectoryFitter > theFitter

◆ setServices()

void TrackTransformer::setServices ( const edm::EventSetup setup)
overridevirtual

set the services needed by the TrackTransformer

Implements TrackTransformerBase.

Definition at line 76 of file TrackTransformer.cc.

References Options::const, hitCloner, edm::ESHandleBase::isValid(), LogTrace, metname, singleTopDQM_cfi::setup, AlCaHLTBitMon_QueryRunRegistry::string, theCacheId_TRH, theFitter, theFitterToken, theMGField, theMGFieldToken, theMtdAvailable, theMTDRecHitBuilder, theMTDRecHitBuilderToken, theMuonRecHitBuilder, theMuonRecHitBuilderToken, thePropagator, thePropagatorToken, theSmoother, theSmootherToken, theTrackerRecHitBuilder, theTrackerRecHitBuilderToken, theTrackingGeometry, and theTrackingGeometryToken.

Referenced by TrackingRecoMaterialAnalyser::analyze(), MuonKinkFinder::init(), MuonReSeeder::produce(), TrackerToMuonPropagator::produce(), CSCOverlapsAlignmentAlgorithm::run(), and GlobalTrajectoryBuilderBase::setEvent().

76  {
77  const std::string metname = "Reco|TrackingTools|TrackTransformer";
78 
79  theFitter = setup.getData(theFitterToken).clone();
80  theSmoother.reset(setup.getData(theSmootherToken).clone());
81 
83 
84  // Global Tracking Geometry
86 
87  // Magfield Field
88  theMGField = setup.getHandle(theMGFieldToken);
89 
90  // Transient Rechit Builders
91  unsigned long long newCacheId_TRH = setup.get<TransientRecHitRecord>().cacheIdentifier();
92  if (newCacheId_TRH != theCacheId_TRH) {
93  theCacheId_TRH = newCacheId_TRH;
94  LogTrace(metname) << "TransientRecHitRecord changed!";
100  }
101  theFitter->setHitCloner(&hitCloner);
102  theSmoother->setHitCloner(&hitCloner);
103 }
const TransientTrackingRecHitBuilder * theTrackerRecHitBuilder
const std::string metname
edm::ESGetToken< TransientTrackingRecHitBuilder, TransientRecHitRecord > theTrackerRecHitBuilderToken
unsigned long long theCacheId_TRH
#define LogTrace(id)
edm::ESHandle< GlobalTrackingGeometry > theTrackingGeometry
edm::ESHandle< TransientTrackingRecHitBuilder > theMTDRecHitBuilder
edm::ESHandle< Propagator > thePropagator
edm::ESHandle< TransientTrackingRecHitBuilder > theMuonRecHitBuilder
std::unique_ptr< TrajectoryFitter > theFitter
edm::ESHandle< MagneticField > theMGField
edm::ESGetToken< TrajectoryFitter, TrajectoryFitterRecord > theFitterToken
bool isValid() const
Definition: ESHandle.h:44
TkClonerImpl hitCloner
edm::ESGetToken< Propagator, TrackingComponentsRecord > thePropagatorToken
edm::ESGetToken< TrajectorySmoother, TrajectoryFitterRecord > theSmootherToken
edm::ESGetToken< TransientTrackingRecHitBuilder, TransientRecHitRecord > theMTDRecHitBuilderToken
edm::ESGetToken< MagneticField, IdealMagneticFieldRecord > theMGFieldToken
std::unique_ptr< TrajectorySmoother > theSmoother
edm::ESGetToken< TransientTrackingRecHitBuilder, TransientRecHitRecord > theMuonRecHitBuilderToken
edm::ESGetToken< GlobalTrackingGeometry, GlobalTrackingGeometryRecord > theTrackingGeometryToken

◆ smoother()

std::unique_ptr<TrajectorySmoother> const& TrackTransformer::smoother ( ) const
inline

the smoother used to smooth the trajectory which came from the refitting step

Definition at line 92 of file TrackTransformer.h.

References theSmoother.

Referenced by fillPSetDescription().

92 { return theSmoother; }
std::unique_ptr< TrajectorySmoother > theSmoother

◆ trackingGeometry()

edm::ESHandle<GlobalTrackingGeometry> TrackTransformer::trackingGeometry ( ) const
inline

the tracking geometry

Definition at line 83 of file TrackTransformer.h.

References theTrackingGeometry.

Referenced by checkRecHitsOrdering(), and transform().

83 { return theTrackingGeometry; }
edm::ESHandle< GlobalTrackingGeometry > theTrackingGeometry

◆ transform() [1/3]

vector< Trajectory > TrackTransformer::transform ( const reco::Track newTrack) const
overridevirtual

Convert a reco::Track into Trajectory.

Convert Tracks into Trajectories.

Implements TrackTransformerBase.

Definition at line 154 of file TrackTransformer.cc.

References getTransientRecHits(), magneticField(), metname, AlCaHLTBitMon_QueryRunRegistry::string, HLT_2024v14_cff::track, and trackingGeometry().

Referenced by TrackingRecoMaterialAnalyser::analyze(), GlobalTrajectoryBuilderBase::build(), CSCPairResidualsConstraint::dphidzFromTrack(), MuonKinkFinder::fillTrkKink(), MuonReSeeder::produce(), TrackerToMuonPropagator::produce(), and transform().

154  {
155  const std::string metname = "Reco|TrackingTools|TrackTransformer";
156 
158 
159  auto recHitsForReFit = getTransientRecHits(track);
160  return transform(track, recHitsForReFit);
161 }
TransientTrackingRecHit::ConstRecHitContainer getTransientRecHits(const reco::TransientTrack &track) const
const std::string metname
const MagneticField * magneticField() const
the magnetic field
edm::ESHandle< GlobalTrackingGeometry > trackingGeometry() const
the tracking geometry
std::vector< Trajectory > transform(const reco::Track &) const override
Convert a reco::Track into Trajectory.

◆ transform() [2/3]

vector< Trajectory > TrackTransformer::transform ( const reco::TrackRef track) const

Convert a reco::TrackRef into Trajectory.

Definition at line 105 of file TrackTransformer.cc.

References HLT_2024v14_cff::track, and transform().

105 { return transform(*track); }
std::vector< Trajectory > transform(const reco::Track &) const override
Convert a reco::Track into Trajectory.

◆ transform() [3/3]

vector< Trajectory > TrackTransformer::transform ( const reco::TransientTrack track,
TransientTrackingRecHit::ConstRecHitContainer recHitsForReFit 
) const

Convert a reco::TrackRef into Trajectory, refit with a new set of hits.

Convert Tracks into Trajectories with a given set of hits.

Definition at line 164 of file TrackTransformer.cc.

References alongMomentum, anyDirection, checkRecHitsOrdering(), RefitDirection::geometricalDirection(), RefitDirection::insideOut, TrajectoryStateOnSurface::isValid(), LogTrace, metname, oppositeToMomentum, RefitDirection::outsideIn, AlCaHLTBitMon_ParallelJobs::p, position, Propagator::propagate(), RefitDirection::propagationDirection(), propagator(), Trajectory::push(), groupFilesInBlocks::reverse, fileCollector::seed, AlCaHLTBitMon_QueryRunRegistry::string, TrajectoryStateOnSurface::surface(), theDoPredictionsOnly, theFitter, theRefitDirection, theSmoother, HLT_2024v14_cff::track, setupCalibrationTree_cff::trajectories, PV3DBase< T, PVType, FrameType >::x(), and PV3DBase< T, PVType, FrameType >::y().

165  {
166  const std::string metname = "Reco|TrackingTools|TrackTransformer";
167 
168  if (recHitsForReFit.size() < 2)
169  return vector<Trajectory>();
170 
171  // 8 cases are foreseen:
172  // [RH = rec hit order, P = momentum dir, FD = fit direction. IO/OI = inside-out/outside-in, AM/OM = along momentum/opposite to momentum]
173  // (1) RH IO | P IO | FD AM ---> Start from IN
174  // (2) RH IO | P IO | FD OM ---> Reverse RH and start from OUT
175  // (3) RH IO | P OI | FD AM ---> Reverse RH and start from IN
176  // (4) RH IO | P OI | FD OM ---> Start from OUT
177  // (5) RH OI | P IO | FD AM ---> Reverse RH and start from IN
178  // (6) RH OI | P IO | FD OM ---> Start from OUT
179  // (7) RH OI | P OI | FD AM ---> Start from IN
180  // (8) RH OI | P OI | FD OM ---> Reverse RH and start from OUT
181  //
182  // *** Rules: ***
183  // -A- If RH-FD agree (IO-AM,OI-OM) do not reverse the RH
184  // -B- If FD along momentum start from innermost state, otherwise use outermost
185 
186  // Other special cases can be handled:
187  // (1 bis) RH IO | P IO | GFD IO => FD AM ---> Start from IN
188  // (2 bis) RH IO | P IO | GFD OI => FD OM ---> Reverse RH and start from OUT
189  // (3 bis) RH IO | P OI | GFD OI => FD AM ---> Reverse RH and start from OUT
190  // (4 bis) RH IO | P OI | GFD IO => FD OM ---> Start from IN
191  // (5 bis) RH OI | P IO | GFD IO => FD AM ---> Reverse RH and start from IN
192  // (6 bis) RH OI | P IO | GFD OI => FD OM ---> Start from OUT
193  // (7 bis) RH OI | P OI | GFD OI => FD AM ---> Start from OUT
194  // (8 bis) RH OI | P OI | GFD IO => FD OM ---> Reverse RH and start from IN
195  //
196  // *** Additional rule: ***
197  // -A0- If P and GFD agree, then FD is AM otherwise is OM
198  // -A00- rechit must be ordered as GFD in order to handle the case of cosmics
199  // -B0- The starting state is decided by GFD
200 
201  // Determine the RH order
203  checkRecHitsOrdering(recHitsForReFit); // FIXME change nome of the *type* --> RecHit order!
204  LogTrace(metname) << "RH order (0-insideOut, 1-outsideIn): " << recHitsOrder;
205 
207 
208  // Apply rule -A0-
209  if (propagationDirection == anyDirection) {
210  GlobalVector momentum = track.innermostMeasurementState().globalMomentum();
211  GlobalVector position = track.innermostMeasurementState().globalPosition() - GlobalPoint(0, 0, 0);
212  RefitDirection::GeometricalDirection p = (momentum.x() * position.x() > 0 || momentum.y() * position.y() > 0)
215 
217  LogTrace(metname) << "P (0-insideOut, 1-outsideIn): " << p;
218  LogTrace(metname) << "FD (0-OM, 1-AM, 2-ANY): " << propagationDirection;
219  }
220  // -A0-
221 
222  // Apply rule -A-
224  if ((recHitsOrder == RefitDirection::insideOut && propagationDirection == oppositeToMomentum) ||
225  (recHitsOrder == RefitDirection::outsideIn && propagationDirection == alongMomentum))
226  reverse(recHitsForReFit.begin(), recHitsForReFit.end());
227  }
228  // -A-
229  // Apply rule -A00-
230  else {
231  // reorder the rechit as defined in theRefitDirection.geometricalDirection();
232  if (theRefitDirection.geometricalDirection() != recHitsOrder)
233  reverse(recHitsForReFit.begin(), recHitsForReFit.end());
234  }
235  // -A00-
236 
237  // Apply rule -B-
238  TrajectoryStateOnSurface firstTSOS = track.innermostMeasurementState();
239  unsigned int innerId = track.track().innerDetId();
241  if (propagationDirection == oppositeToMomentum) {
242  innerId = track.track().outerDetId();
243  firstTSOS = track.outermostMeasurementState();
244  }
245  } else { // if(theRefitDirection.propagationDirection() == anyDirection)
246  // Apply rule -B0-
248  innerId = track.track().outerDetId();
249  firstTSOS = track.outermostMeasurementState();
250  }
251  // -B0-
252  }
253  // -B-
254 
255  if (!firstTSOS.isValid()) {
256  LogTrace(metname) << "Error wrong initial state!" << endl;
257  return vector<Trajectory>();
258  }
259 
260  TrajectorySeed seed({}, {}, propagationDirection);
261 
262  if (recHitsForReFit.front()->geographicalId() != DetId(innerId)) {
263  LogTrace(metname) << "Propagation occured" << endl;
264  firstTSOS = propagator()->propagate(firstTSOS, recHitsForReFit.front()->det()->surface());
265  if (!firstTSOS.isValid()) {
266  LogTrace(metname) << "Propagation error!" << endl;
267  return vector<Trajectory>();
268  }
269  }
270 
271  if (theDoPredictionsOnly) {
272  Trajectory aTraj(seed, propagationDirection);
273  TrajectoryStateOnSurface predTSOS = firstTSOS;
274  for (auto const& hit : recHitsForReFit) {
275  predTSOS = propagator()->propagate(predTSOS, hit->det()->surface());
276  if (predTSOS.isValid())
277  aTraj.push(TrajectoryMeasurement(predTSOS, hit));
278  }
279  return vector<Trajectory>(1, aTraj);
280  }
281 
282  auto const& trajectories = theFitter->fit(seed, recHitsForReFit, firstTSOS);
283 
284  if (trajectories.empty()) {
285  LogTrace(metname) << "No Track refitted!" << endl;
286  return trajectories;
287  }
288 
289  auto const& trajectoryBW = trajectories.front();
290 
291  auto const& trajectoriesSM = theSmoother->trajectories(trajectoryBW);
292 
293  if (trajectoriesSM.empty()) {
294  LogTrace(metname) << "No Track smoothed!" << endl;
295  }
296 
297  return trajectoriesSM;
298 }
RefitDirection::GeometricalDirection checkRecHitsOrdering(TransientTrackingRecHit::ConstRecHitContainer const &) const
const std::string metname
const RefitDirection theRefitDirection
Global3DPoint GlobalPoint
Definition: GlobalPoint.h:10
PropagationDirection
TrajectoryStateOnSurface propagate(STA const &state, SUR const &surface) const
Definition: Propagator.h:50
#define LogTrace(id)
T x() const
Definition: PV3DBase.h:59
T y() const
Definition: PV3DBase.h:60
std::unique_ptr< TrajectoryFitter > theFitter
PropagationDirection propagationDirection() const
Definition: DetId.h:17
const bool theDoPredictionsOnly
static int position[264][3]
Definition: ReadPGInfo.cc:289
GeometricalDirection geometricalDirection() const
edm::ESHandle< Propagator > const & propagator() const
std::unique_ptr< TrajectorySmoother > theSmoother

Member Data Documentation

◆ hitCloner

TkClonerImpl TrackTransformer::hitCloner
private

Definition at line 127 of file TrackTransformer.h.

Referenced by setServices().

◆ theCacheId_TRH

unsigned long long TrackTransformer::theCacheId_TRH = 0
private

Definition at line 99 of file TrackTransformer.h.

Referenced by setServices().

◆ theDoPredictionsOnly

const bool TrackTransformer::theDoPredictionsOnly
private

Definition at line 103 of file TrackTransformer.h.

Referenced by transform().

◆ theFitter

std::unique_ptr<TrajectoryFitter> TrackTransformer::theFitter
private

Definition at line 113 of file TrackTransformer.h.

Referenced by refitter(), setServices(), and transform().

◆ theFitterName

const std::string TrackTransformer::theFitterName
private

Definition at line 111 of file TrackTransformer.h.

Referenced by TrackTransformer().

◆ theFitterToken

edm::ESGetToken<TrajectoryFitter, TrajectoryFitterRecord> TrackTransformer::theFitterToken
private

Definition at line 112 of file TrackTransformer.h.

Referenced by setServices(), and TrackTransformer().

◆ theMGField

edm::ESHandle<MagneticField> TrackTransformer::theMGField
private

Definition at line 109 of file TrackTransformer.h.

Referenced by magneticField(), and setServices().

◆ theMGFieldToken

edm::ESGetToken<MagneticField, IdealMagneticFieldRecord> TrackTransformer::theMGFieldToken
private

Definition at line 107 of file TrackTransformer.h.

Referenced by setServices(), and TrackTransformer().

◆ theMtdAvailable

bool TrackTransformer::theMtdAvailable
private

Definition at line 135 of file TrackTransformer.h.

Referenced by getTransientRecHits(), and setServices().

◆ theMTDRecHitBuilder

edm::ESHandle<TransientTrackingRecHitBuilder> TrackTransformer::theMTDRecHitBuilder
private

Definition at line 136 of file TrackTransformer.h.

Referenced by getTransientRecHits(), and setServices().

◆ theMTDRecHitBuilderName

const std::string TrackTransformer::theMTDRecHitBuilderName
private

Definition at line 133 of file TrackTransformer.h.

Referenced by TrackTransformer().

◆ theMTDRecHitBuilderToken

edm::ESGetToken<TransientTrackingRecHitBuilder, TransientRecHitRecord> TrackTransformer::theMTDRecHitBuilderToken
private

Definition at line 134 of file TrackTransformer.h.

Referenced by setServices(), and TrackTransformer().

◆ theMuonRecHitBuilder

edm::ESHandle<TransientTrackingRecHitBuilder> TrackTransformer::theMuonRecHitBuilder
private

Definition at line 131 of file TrackTransformer.h.

Referenced by getTransientRecHits(), and setServices().

◆ theMuonRecHitBuilderName

const std::string TrackTransformer::theMuonRecHitBuilderName
private

Definition at line 129 of file TrackTransformer.h.

Referenced by TrackTransformer().

◆ theMuonRecHitBuilderToken

edm::ESGetToken<TransientTrackingRecHitBuilder, TransientRecHitRecord> TrackTransformer::theMuonRecHitBuilderToken
private

Definition at line 130 of file TrackTransformer.h.

Referenced by setServices(), and TrackTransformer().

◆ thePropagator

edm::ESHandle<Propagator> TrackTransformer::thePropagator
private

Definition at line 122 of file TrackTransformer.h.

Referenced by propagator(), and setServices().

◆ thePropagatorName

const std::string TrackTransformer::thePropagatorName
private

Definition at line 119 of file TrackTransformer.h.

Referenced by TrackTransformer().

◆ thePropagatorToken

edm::ESGetToken<Propagator, TrackingComponentsRecord> TrackTransformer::thePropagatorToken
private

Definition at line 120 of file TrackTransformer.h.

Referenced by setServices(), and TrackTransformer().

◆ theRefitDirection

const RefitDirection TrackTransformer::theRefitDirection
private

Definition at line 104 of file TrackTransformer.h.

Referenced by transform().

◆ theRPCInTheFit

const bool TrackTransformer::theRPCInTheFit
private

Definition at line 101 of file TrackTransformer.h.

Referenced by getTransientRecHits().

◆ theSmoother

std::unique_ptr<TrajectorySmoother> TrackTransformer::theSmoother
private

Definition at line 117 of file TrackTransformer.h.

Referenced by setServices(), smoother(), and transform().

◆ theSmootherName

const std::string TrackTransformer::theSmootherName
private

Definition at line 115 of file TrackTransformer.h.

Referenced by TrackTransformer().

◆ theSmootherToken

edm::ESGetToken<TrajectorySmoother, TrajectoryFitterRecord> TrackTransformer::theSmootherToken
private

Definition at line 116 of file TrackTransformer.h.

Referenced by setServices(), and TrackTransformer().

◆ theTrackerRecHitBuilder

const TransientTrackingRecHitBuilder* TrackTransformer::theTrackerRecHitBuilder
private

Definition at line 126 of file TrackTransformer.h.

Referenced by getTransientRecHits(), and setServices().

◆ theTrackerRecHitBuilderName

const std::string TrackTransformer::theTrackerRecHitBuilderName
private

Definition at line 124 of file TrackTransformer.h.

Referenced by TrackTransformer().

◆ theTrackerRecHitBuilderToken

edm::ESGetToken<TransientTrackingRecHitBuilder, TransientRecHitRecord> TrackTransformer::theTrackerRecHitBuilderToken
private

Definition at line 125 of file TrackTransformer.h.

Referenced by setServices(), and TrackTransformer().

◆ theTrackingGeometry

edm::ESHandle<GlobalTrackingGeometry> TrackTransformer::theTrackingGeometry
private

Definition at line 108 of file TrackTransformer.h.

Referenced by setServices(), and trackingGeometry().

◆ theTrackingGeometryToken

edm::ESGetToken<GlobalTrackingGeometry, GlobalTrackingGeometryRecord> TrackTransformer::theTrackingGeometryToken
private

Definition at line 106 of file TrackTransformer.h.

Referenced by setServices(), and TrackTransformer().