CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
List of all members | Public Member Functions | Private Member Functions | Private Attributes
TrackExtrapolator Class Reference

#include <RecoTracker/TrackExtrapolator/src/TrackExtrapolator.cc>

Inheritance diagram for TrackExtrapolator:
edm::stream::EDProducer<>

Public Member Functions

 TrackExtrapolator (const edm::ParameterSet &)
 
 ~TrackExtrapolator () override
 
- 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
 

Private Member Functions

void produce (edm::Event &, const edm::EventSetup &) override
 
bool propagateTrackToVolume (const reco::Track &fTrack, const MagneticField &fField, const Propagator &fPropagator, const FiducialVolume &volume, reco::TrackBase::Point &resultPos, reco::TrackBase::Vector &resultMom)
 track quality of the tracks we care about More...
 

Private Attributes

const edm::ESGetToken
< DetIdAssociator,
DetIdAssociatorRecord
ecalDetIdAssociatorToken_
 
const edm::ESGetToken
< MagneticField,
IdealMagneticFieldRecord
fieldToken_
 Input tracks. More...
 
const edm::ESGetToken
< Propagator,
TrackingComponentsRecord
propagatorToken_
 
const reco::TrackBase::TrackQuality trackQuality_
 
const edm::EDGetTokenT
< reco::TrackCollection
tracksSrc_
 

Additional Inherited Members

- 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
 

Detailed Description

Description: Extrapolates tracks to Calo Face. Migrating this functionality from RecoJets/JetAssociationAlgorithms/JetTracksAssociatorDRCalo.h, which will now essentially be defunct.

Implementation:

Definition at line 58 of file TrackExtrapolator.h.

Constructor & Destructor Documentation

TrackExtrapolator::TrackExtrapolator ( const edm::ParameterSet iConfig)
explicit

Definition at line 8 of file TrackExtrapolator.cc.

References Exception, edm::ParameterSet::getParameter(), AlCaHLTBitMon_QueryRunRegistry::string, trackQuality_, and reco::TrackBase::undefQuality.

9  : tracksSrc_(consumes(iConfig.getParameter<edm::InputTag>("trackSrc"))),
11  propagatorToken_(esConsumes(edm::ESInputTag("", "SteppingHelixPropagatorAlong"))),
12  ecalDetIdAssociatorToken_(esConsumes(edm::ESInputTag("", "EcalDetIdAssociator"))),
14  if (trackQuality_ == reco::TrackBase::undefQuality) { // we have a problem
15  throw cms::Exception("InvalidInput") << "Unknown trackQuality value '"
16  << iConfig.getParameter<std::string>("trackQuality")
17  << "'. See possible values in 'reco::TrackBase::qualityByName'";
18  }
19 
20  produces<std::vector<reco::TrackExtrapolation>>();
21 }
const edm::ESGetToken< MagneticField, IdealMagneticFieldRecord > fieldToken_
Input tracks.
const edm::EDGetTokenT< reco::TrackCollection > tracksSrc_
const edm::ESGetToken< DetIdAssociator, DetIdAssociatorRecord > ecalDetIdAssociatorToken_
const edm::ESGetToken< Propagator, TrackingComponentsRecord > propagatorToken_
static TrackQuality qualityByName(const std::string &name)
Definition: TrackBase.cc:126
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
const reco::TrackBase::TrackQuality trackQuality_
ESGetTokenH3DDVariant esConsumes(std::string const &Reccord, edm::ConsumesCollector &)
Definition: DeDxTools.cc:283
TrackExtrapolator::~TrackExtrapolator ( )
override

Definition at line 23 of file TrackExtrapolator.cc.

23 {}

Member Function Documentation

void TrackExtrapolator::produce ( edm::Event iEvent,
const edm::EventSetup iSetup 
)
overrideprivate

Definition at line 30 of file TrackExtrapolator.cc.

References ecalDetIdAssociatorToken_, fieldToken_, edm::Event::getByToken(), edm::EventSetup::getData(), goodTracks_cfi::goodTracks, eostools::move(), propagateTrackToVolume(), HLT_FULL_cff::propagator, propagatorToken_, edm::Event::put(), Reconstruction_hiPF_cff::trackQuality, trackQuality_, and tracksSrc_.

30  {
31  // get stuff from Event Setup
32  auto const& field = iSetup.getData(fieldToken_);
33  auto const& propagator = iSetup.getData(propagatorToken_);
34  FiducialVolume const& ecalvolume = iSetup.getData(ecalDetIdAssociatorToken_).volume();
35 
36  // get stuff from Event
38  iEvent.getByToken(tracksSrc_, tracks_h);
39 
40  auto extrapolations = std::make_unique<std::vector<reco::TrackExtrapolation>>();
41 
42  // Get list of tracks we want to extrapolate
43  std::vector<reco::TrackRef> goodTracks;
44  for (reco::TrackCollection::const_iterator trkBegin = tracks_h->begin(), trkEnd = tracks_h->end(), itrk = trkBegin;
45  itrk != trkEnd;
46  ++itrk) {
48 
49  // Cut on track quality
50  if (itrk->quality(trackQuality)) {
51  goodTracks.push_back(reco::TrackRef(tracks_h, itrk - trkBegin));
52  }
53  }
54  std::vector<reco::TrackBase::Point> vresultPos(1);
55  std::vector<reco::TrackBase::Vector> vresultMom(1);
56 
57  // Now loop through the list of tracks and extrapolate them
58  for (std::vector<reco::TrackRef>::const_iterator trkBegin = goodTracks.begin(),
59  trkEnd = goodTracks.end(),
60  itrk = trkBegin;
61  itrk != trkEnd;
62  ++itrk) {
63  if (propagateTrackToVolume(**itrk, field, propagator, ecalvolume, vresultPos[0], vresultMom[0])) {
64  extrapolations->push_back(reco::TrackExtrapolation(*itrk, vresultPos, vresultMom));
65  }
66  }
67  iEvent.put(std::move(extrapolations));
68 }
tuple propagator
const edm::ESGetToken< MagneticField, IdealMagneticFieldRecord > fieldToken_
Input tracks.
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
Definition: Event.h:133
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:539
TrackQuality
track quality
Definition: TrackBase.h:150
bool propagateTrackToVolume(const reco::Track &fTrack, const MagneticField &fField, const Propagator &fPropagator, const FiducialVolume &volume, reco::TrackBase::Point &resultPos, reco::TrackBase::Vector &resultMom)
track quality of the tracks we care about
const edm::EDGetTokenT< reco::TrackCollection > tracksSrc_
bool getData(T &iHolder) const
Definition: EventSetup.h:128
const edm::ESGetToken< DetIdAssociator, DetIdAssociatorRecord > ecalDetIdAssociatorToken_
def move
Definition: eostools.py:511
const edm::ESGetToken< Propagator, TrackingComponentsRecord > propagatorToken_
const reco::TrackBase::TrackQuality trackQuality_
bool TrackExtrapolator::propagateTrackToVolume ( const reco::Track fTrack,
const MagneticField fField,
const Propagator fPropagator,
const FiducialVolume volume,
reco::TrackBase::Point resultPos,
reco::TrackBase::Vector resultMom 
)
private

track quality of the tracks we care about

Propagate a track to a given radius, given the magnetic field and the propagator. Store the resulting position, momentum, and direction.

Definition at line 72 of file TrackExtrapolator.cc.

References Plane::build(), Cylinder::build(), reco::TrackBase::charge(), reco::Track::extra(), TrajectoryStateOnSurface::globalMomentum(), TrajectoryStateOnSurface::globalPosition(), edm::Ref< C, T, F >::isAvailable(), TrajectoryStateOnSurface::isValid(), FiducialVolume::minR(), FiducialVolume::minZ(), gpuPixelDoublets::minz, reco::Track::outerPx(), reco::Track::outerPy(), reco::Track::outerPz(), reco::Track::outerX(), reco::Track::outerY(), reco::Track::outerZ(), Propagator::propagate(), reco::TrackBase::px(), reco::TrackBase::py(), reco::TrackBase::pz(), reco::btau::trackMomentum, reco::TrackBase::vx(), reco::TrackBase::vy(), reco::TrackBase::vz(), and PV3DBase< T, PVType, FrameType >::z().

Referenced by produce().

77  {
78  GlobalPoint trackPosition(fTrack.vx(), fTrack.vy(), fTrack.vz()); // reference point
79  GlobalVector trackMomentum(fTrack.px(), fTrack.py(), fTrack.pz()); // reference momentum
80  if (fTrack.extra().isAvailable()) { // use outer point information, if available
81  trackPosition = GlobalPoint(fTrack.outerX(), fTrack.outerY(), fTrack.outerZ());
82  trackMomentum = GlobalVector(fTrack.outerPx(), fTrack.outerPy(), fTrack.outerPz());
83  }
84 
85  GlobalTrajectoryParameters trackParams(trackPosition, trackMomentum, fTrack.charge(), &fField);
86  FreeTrajectoryState trackState(trackParams);
87 
88  TrajectoryStateOnSurface propagatedInfo = fPropagator.propagate(
89  trackState, *Cylinder::build(volume.minR(), Surface::PositionType(0, 0, 0), Surface::RotationType()));
90 
91  // if the track went through either side of the endcaps, repropagate the track
92  double minz = volume.minZ();
93  if (propagatedInfo.isValid() && propagatedInfo.globalPosition().z() > minz) {
94  propagatedInfo =
95  fPropagator.propagate(trackState, *Plane::build(Surface::PositionType(0, 0, minz), Surface::RotationType()));
96 
97  } else if (propagatedInfo.isValid() && propagatedInfo.globalPosition().z() < -minz) {
98  propagatedInfo =
99  fPropagator.propagate(trackState, *Plane::build(Surface::PositionType(0, 0, -minz), Surface::RotationType()));
100  }
101 
102  if (propagatedInfo.isValid()) {
103  resultPos = propagatedInfo.globalPosition();
104  resultMom = propagatedInfo.globalMomentum();
105  return true;
106  } else {
107  return false;
108  }
109 }
bool isAvailable() const
Definition: Ref.h:537
double outerPy() const
y coordinate of momentum vector at the outermost hit position
Definition: Track.h:103
const TrackExtraRef & extra() const
reference to &quot;extra&quot; object
Definition: Track.h:139
Global3DPoint GlobalPoint
Definition: GlobalPoint.h:10
GlobalPoint globalPosition() const
double px() const
x coordinate of momentum vector
Definition: TrackBase.h:640
double minZ(bool withTolerance=true) const
double outerZ() const
z coordinate of the outermost hit position
Definition: Track.h:115
__constant__ float const minz[nPairs]
static PlanePointer build(Args &&...args)
Definition: Plane.h:33
T z() const
Definition: PV3DBase.h:61
double outerX() const
x coordinate of the outermost hit position
Definition: Track.h:109
Point3DBase< float, GlobalTag > PositionType
double outerPz() const
z coordinate of momentum vector at the outermost hit position
Definition: Track.h:106
double pz() const
z coordinate of momentum vector
Definition: TrackBase.h:646
double minR(bool withTolerance=true) const
double vz() const
z coordinate of the reference point on track
Definition: TrackBase.h:661
static CylinderPointer build(const PositionType &pos, const RotationType &rot, Scalar radius, Bounds *bounds=nullptr)
Definition: Cylinder.h:45
TrajectoryStateOnSurface propagate(STA const &state, SUR const &surface) const
Definition: Propagator.h:50
double vy() const
y coordinate of the reference point on track
Definition: TrackBase.h:658
GlobalVector globalMomentum() const
TkRotation< float > RotationType
double outerY() const
y coordinate of the outermost hit position
Definition: Track.h:112
int charge() const
track electric charge
Definition: TrackBase.h:596
double outerPx() const
x coordinate of momentum vector at the outermost hit position
Definition: Track.h:100
double py() const
y coordinate of momentum vector
Definition: TrackBase.h:643
double vx() const
x coordinate of the reference point on track
Definition: TrackBase.h:655
Global3DVector GlobalVector
Definition: GlobalVector.h:10

Member Data Documentation

const edm::ESGetToken<DetIdAssociator, DetIdAssociatorRecord> TrackExtrapolator::ecalDetIdAssociatorToken_
private

Definition at line 71 of file TrackExtrapolator.h.

Referenced by produce().

const edm::ESGetToken<MagneticField, IdealMagneticFieldRecord> TrackExtrapolator::fieldToken_
private

Input tracks.

Definition at line 69 of file TrackExtrapolator.h.

Referenced by produce().

const edm::ESGetToken<Propagator, TrackingComponentsRecord> TrackExtrapolator::propagatorToken_
private

Definition at line 70 of file TrackExtrapolator.h.

Referenced by produce().

const reco::TrackBase::TrackQuality TrackExtrapolator::trackQuality_
private

Definition at line 72 of file TrackExtrapolator.h.

Referenced by produce(), and TrackExtrapolator().

const edm::EDGetTokenT<reco::TrackCollection> TrackExtrapolator::tracksSrc_
private

Definition at line 68 of file TrackExtrapolator.h.

Referenced by produce().