CMS 3D CMS Logo

List of all members | Public Member Functions | Private Member Functions | Private Attributes
TrackerToMuonPropagator Class Reference

#include <Alignment/TrackerToMuonPropagator/src/TrackerToMuonPropagator.cc>

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

Public Member Functions

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

Private Attributes

const edm::ESGetToken< CSCGeometry, MuonGeometryRecordm_esTokenCSC
 
const edm::ESGetToken< DTGeometry, MuonGeometryRecordm_esTokenDT
 
const edm::ESGetToken< GlobalTrackingGeometry, GlobalTrackingGeometryRecordm_esTokenGTGeo
 
const edm::ESGetToken< MagneticField, IdealMagneticFieldRecordm_esTokenMF
 
const edm::ESGetToken< Propagator, TrackingComponentsRecordm_esTokenProp
 
const edm::ESGetToken< TrackerGeometry, TrackerDigiGeometryRecordm_esTokenTk
 
edm::InputTag m_globalMuons
 
edm::InputTag m_globalMuonTracks
 
bool m_refitTracker
 
TrackTransformerm_trackTransformer
 

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: <one line="" class="" summary>="">

Implementation: <Notes on="" implementation>="">

Definition at line 62 of file TrackerToMuonPropagator.cc.

Constructor & Destructor Documentation

◆ TrackerToMuonPropagator()

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

Definition at line 97 of file TrackerToMuonPropagator.cc.

98  : m_esTokenProp(esConsumes(edm::ESInputTag("", iConfig.getParameter<std::string>("propagator")))),
104  m_globalMuons = iConfig.getParameter<edm::InputTag>("globalMuons");
105  m_globalMuonTracks = iConfig.getParameter<edm::InputTag>("globalMuonTracks");
106  m_refitTracker = iConfig.getParameter<bool>("refitTrackerTrack");
107  if (m_refitTracker) {
108  m_trackTransformer = new TrackTransformer(iConfig.getParameter<edm::ParameterSet>("trackerTrackTransformer"));
109  } else
110  m_trackTransformer = nullptr;
111 
112  produces<std::vector<Trajectory>>();
113  produces<TrajTrackAssociationCollection>();
114 }

References edm::ParameterSet::getParameter(), m_globalMuons, m_globalMuonTracks, m_refitTracker, m_trackTransformer, and HLT_FULL_cff::TrackTransformer.

◆ ~TrackerToMuonPropagator()

TrackerToMuonPropagator::~TrackerToMuonPropagator ( )
override

Definition at line 116 of file TrackerToMuonPropagator.cc.

116  {
117  // do anything here that needs to be done at desctruction time
118  // (e.g. close files, deallocate resources etc.)
119 }

Member Function Documentation

◆ produce()

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

Definition at line 126 of file TrackerToMuonPropagator.cc.

126  {
127  if (m_trackTransformer)
129 
131  iEvent.getByLabel(m_globalMuons, globalMuons);
132 
133  edm::Handle<reco::TrackCollection> globalMuonTracks;
134  iEvent.getByLabel(m_globalMuonTracks, globalMuonTracks);
135 
136  const Propagator* propagator = &iSetup.getData(m_esTokenProp);
137  const TrackerGeometry* trackerGeometry = &iSetup.getData(m_esTokenTk);
138  const DTGeometry* dtGeometry = &iSetup.getData(m_esTokenDT);
139  const CSCGeometry* cscGeometry = &iSetup.getData(m_esTokenCSC);
141  const GlobalTrackingGeometry* globalGeometry = &iSetup.getData(m_esTokenGTGeo);
142 
143  // Create these factories once per event
144 
145  MuonTransientTrackingRecHitBuilder muonTransBuilder;
146 
147  // Create a collection of Trajectories, to put in the Event
148  auto trajectoryCollection = std::make_unique<std::vector<Trajectory>>();
149 
150  // Remember which trajectory is associated with which track
151  std::map<edm::Ref<std::vector<Trajectory>>::key_type, edm::Ref<reco::TrackCollection>::key_type> reference_map;
152  edm::Ref<std::vector<Trajectory>>::key_type trajCounter = 0;
153 
154  for (reco::MuonCollection::const_iterator globalMuon = globalMuons->begin(); globalMuon != globalMuons->end();
155  ++globalMuon) {
156  // get the counter for this global muon (that's why we needed to extract the collection explicitly
158  reco::TrackCollection::const_iterator globalMuonTrack = globalMuonTracks->begin();
159  for (; globalMuonTrack != globalMuonTracks->end(); ++globalMuonTrack) {
160  trackCounter++;
161  if (fabs(globalMuon->combinedMuon()->phi() - globalMuonTrack->phi()) < 1e-10 &&
162  fabs(globalMuon->combinedMuon()->eta() - globalMuonTrack->eta()) < 1e-10)
163  break;
164  }
165  if (globalMuonTrack == globalMuonTracks->end()) {
166  throw cms::Exception("BadConfig") << "The tracks label doesn't correspond to the same objects as the muons label"
167  << std::endl;
168  }
169 
170  TrajectoryStateOnSurface tracker_tsos;
171  DetId outerDetId;
172  if (m_refitTracker) {
173  std::vector<Trajectory> trackerTrajectories = m_trackTransformer->transform(*globalMuon->track());
174  if (trackerTrajectories.size() == 1) {
175  const Trajectory trackerTrajectory = *(trackerTrajectories.begin());
176 
177  // surprisingly, firstMeasurement() corresponds to the outermost state of the tracker
178  tracker_tsos = trackerTrajectory.firstMeasurement().forwardPredictedState();
179  outerDetId = trackerTrajectory.firstMeasurement().recHit()->geographicalId();
180  } else
181  continue;
182  } else {
183  // get information about the outermost tracker hit
184  GlobalPoint outerPosition(globalMuon->track()->outerPosition().x(),
185  globalMuon->track()->outerPosition().y(),
186  globalMuon->track()->outerPosition().z());
187  GlobalVector outerMomentum(globalMuon->track()->outerMomentum().x(),
188  globalMuon->track()->outerMomentum().y(),
189  globalMuon->track()->outerMomentum().z());
190  int charge = globalMuon->track()->charge();
191  const reco::Track::CovarianceMatrix outerStateCovariance = globalMuon->track()->outerStateCovariance();
192  outerDetId = DetId(globalMuon->track()->outerDetId());
193 
194  // construct the information necessary to make a TrajectoryStateOnSurface
195  GlobalTrajectoryParameters globalTrajParams(outerPosition, outerMomentum, charge, magneticField);
196  CurvilinearTrajectoryError curviError(outerStateCovariance);
197  FreeTrajectoryState tracker_state(globalTrajParams, curviError);
198 
199  // starting point for propagation into the muon system
200  tracker_tsos =
201  TrajectoryStateOnSurface(globalTrajParams, curviError, trackerGeometry->idToDet(outerDetId)->surface());
202  }
203 
204  TrajectoryStateOnSurface last_tsos = tracker_tsos;
205 
206  // loop over the muon hits, keeping track of the successful extrapolations
208  std::vector<TrajectoryStateOnSurface> TSOSes;
209  for (auto const& hit : globalMuon->combinedMuon()->recHits()) {
210  DetId id = hit->geographicalId();
211 
212  TrajectoryStateOnSurface extrapolation;
213  bool extrapolated = false;
214  if (id.det() == DetId::Muon && id.subdetId() == MuonSubdetId::DT) {
215  extrapolation = propagator->propagate(last_tsos, dtGeometry->idToDet(id)->surface());
216  extrapolated = true;
217  } else if (id.det() == DetId::Muon && id.subdetId() == MuonSubdetId::CSC) {
218  extrapolation = propagator->propagate(last_tsos, cscGeometry->idToDet(id)->surface());
219  extrapolated = true;
220  }
221 
222  if (extrapolated && extrapolation.isValid()) {
223  muonHits.push_back(hit->clone());
224  TSOSes.push_back(extrapolation);
225  }
226  } // end loop over standAloneMuon hits
227 
228  // if it has any successful extrapolations, make them into a Trajectory
229  if (!muonHits.empty()) {
230  PTrajectoryStateOnDet const& PTraj = trajectoryStateTransform::persistentState(tracker_tsos, outerDetId.rawId());
231  TrajectorySeed trajectorySeed(PTraj, muonHits, alongMomentum);
232  Trajectory trajectory(trajectorySeed, alongMomentum);
233 
234  for (unsigned int i = 0; i < muonHits.size(); i++) {
235  TrajectoryMeasurement::ConstRecHitPointer hitPtr(muonTransBuilder.build(&(muonHits[i]), globalGeometry));
236  TrajectoryStateOnSurface TSOS = TSOSes[i];
237  trajectory.push(TrajectoryMeasurement(TSOS, TSOS, TSOS, hitPtr));
238  } // end filling Trajectory
239 
240  trajectoryCollection->push_back(trajectory);
241 
242  // Remember which Trajectory is associated with which Track
243  trajCounter++;
244  reference_map[trajCounter] = trackCounter;
245 
246  } // end if we have some good extrapolations
247 
248  } // end loop over globalMuons
249 
250  unsigned int numTrajectories = trajectoryCollection->size();
251 
252  // insert the trajectories into the Event
253  edm::OrphanHandle<std::vector<Trajectory>> ohTrajs = iEvent.put(std::move(trajectoryCollection));
254 
255  // create the trajectory <-> track association map
256  auto trajTrackMap = std::make_unique<TrajTrackAssociationCollection>();
257 
258  for (trajCounter = 0; trajCounter < numTrajectories; trajCounter++) {
259  edm::Ref<reco::TrackCollection>::key_type trackCounter = reference_map[trajCounter];
260 
261  trajTrackMap->insert(edm::Ref<std::vector<Trajectory>>(ohTrajs, trajCounter),
262  edm::Ref<reco::TrackCollection>(globalMuonTracks, trackCounter));
263  }
264  // and put it in the Event, also
265  iEvent.put(std::move(trajTrackMap));
266 }

References alongMomentum, MuonTransientTrackingRecHitBuilder::build(), ALCARECOTkAlJpsiMuMu_cff::charge, MuonSubdetId::CSC, MuonSubdetId::DT, MillePedeFileConverter_cfg::e, edm::OwnVector< T, P >::empty(), Exception, Trajectory::firstMeasurement(), TrajectoryMeasurement::forwardPredictedState(), edm::EventSetup::getData(), susybsm::HSCParticleType::globalMuon, globalMuons_cfi::globalMuons, mps_fire::i, DTGeometry::idToDet(), TrackerGeometry::idToDet(), CSCGeometry::idToDet(), iEvent, TrajectoryStateOnSurface::isValid(), m_esTokenCSC, m_esTokenDT, m_esTokenGTGeo, m_esTokenMF, m_esTokenProp, m_esTokenTk, m_globalMuons, m_globalMuonTracks, m_refitTracker, m_trackTransformer, HLT_FULL_cff::magneticField, eostools::move(), DetId::Muon, trajectoryStateTransform::persistentState(), TrackCandidateProducer_cfi::propagator, Trajectory::push(), edm::OwnVector< T, P >::push_back(), DetId::rawId(), TrajectoryMeasurement::recHit(), TrackTransformer::setServices(), edm::OwnVector< T, P >::size(), GeomDet::surface(), and TrackTransformer::transform().

Member Data Documentation

◆ m_esTokenCSC

const edm::ESGetToken<CSCGeometry, MuonGeometryRecord> TrackerToMuonPropagator::m_esTokenCSC
private

Definition at line 76 of file TrackerToMuonPropagator.cc.

Referenced by produce().

◆ m_esTokenDT

const edm::ESGetToken<DTGeometry, MuonGeometryRecord> TrackerToMuonPropagator::m_esTokenDT
private

Definition at line 75 of file TrackerToMuonPropagator.cc.

Referenced by produce().

◆ m_esTokenGTGeo

const edm::ESGetToken<GlobalTrackingGeometry, GlobalTrackingGeometryRecord> TrackerToMuonPropagator::m_esTokenGTGeo
private

Definition at line 78 of file TrackerToMuonPropagator.cc.

Referenced by produce().

◆ m_esTokenMF

const edm::ESGetToken<MagneticField, IdealMagneticFieldRecord> TrackerToMuonPropagator::m_esTokenMF
private

Definition at line 77 of file TrackerToMuonPropagator.cc.

Referenced by produce().

◆ m_esTokenProp

const edm::ESGetToken<Propagator, TrackingComponentsRecord> TrackerToMuonPropagator::m_esTokenProp
private

Definition at line 73 of file TrackerToMuonPropagator.cc.

Referenced by produce().

◆ m_esTokenTk

const edm::ESGetToken<TrackerGeometry, TrackerDigiGeometryRecord> TrackerToMuonPropagator::m_esTokenTk
private

Definition at line 74 of file TrackerToMuonPropagator.cc.

Referenced by produce().

◆ m_globalMuons

edm::InputTag TrackerToMuonPropagator::m_globalMuons
private

Definition at line 80 of file TrackerToMuonPropagator.cc.

Referenced by produce(), and TrackerToMuonPropagator().

◆ m_globalMuonTracks

edm::InputTag TrackerToMuonPropagator::m_globalMuonTracks
private

Definition at line 80 of file TrackerToMuonPropagator.cc.

Referenced by produce(), and TrackerToMuonPropagator().

◆ m_refitTracker

bool TrackerToMuonPropagator::m_refitTracker
private

Definition at line 82 of file TrackerToMuonPropagator.cc.

Referenced by produce(), and TrackerToMuonPropagator().

◆ m_trackTransformer

TrackTransformer* TrackerToMuonPropagator::m_trackTransformer
private

Definition at line 83 of file TrackerToMuonPropagator.cc.

Referenced by produce(), and TrackerToMuonPropagator().

Vector3DBase
Definition: Vector3DBase.h:8
TrackerGeometry::idToDet
const TrackerGeomDet * idToDet(DetId) const override
Definition: TrackerGeometry.cc:193
DTGeometry
Definition: DTGeometry.h:28
TrackerToMuonPropagator::m_esTokenDT
const edm::ESGetToken< DTGeometry, MuonGeometryRecord > m_esTokenDT
Definition: TrackerToMuonPropagator.cc:75
MuonSubdetId::CSC
static constexpr int CSC
Definition: MuonSubdetId.h:12
mps_fire.i
i
Definition: mps_fire.py:428
edm::ESInputTag
Definition: ESInputTag.h:87
TrackerToMuonPropagator::m_esTokenProp
const edm::ESGetToken< Propagator, TrackingComponentsRecord > m_esTokenProp
Definition: TrackerToMuonPropagator.cc:73
TrackerToMuonPropagator::m_trackTransformer
TrackTransformer * m_trackTransformer
Definition: TrackerToMuonPropagator.cc:83
TrackTransformer::setServices
void setServices(const edm::EventSetup &) override
set the services needed by the TrackTransformer
Definition: TrackTransformer.cc:79
trajectoryStateTransform::persistentState
PTrajectoryStateOnDet persistentState(const TrajectoryStateOnSurface &ts, unsigned int detid)
Definition: TrajectoryStateTransform.cc:14
CSCGeometry::idToDet
const GeomDet * idToDet(DetId) const override
Definition: CSCGeometry.cc:91
TrackerToMuonPropagator::m_esTokenTk
const edm::ESGetToken< TrackerGeometry, TrackerDigiGeometryRecord > m_esTokenTk
Definition: TrackerToMuonPropagator.cc:74
TrackTransformer::transform
std::vector< Trajectory > transform(const reco::Track &) const override
Convert a reco::Track into Trajectory.
Definition: TrackTransformer.cc:182
HLT_FULL_cff.magneticField
magneticField
Definition: HLT_FULL_cff.py:348
edm::Handle< reco::MuonCollection >
edm::Ref
Definition: AssociativeIterator.h:58
CSCGeometry
Definition: CSCGeometry.h:24
TrackerToMuonPropagator::m_globalMuonTracks
edm::InputTag m_globalMuonTracks
Definition: TrackerToMuonPropagator.cc:80
Propagator
Definition: Propagator.h:44
DetId
Definition: DetId.h:17
edm::OwnVector::empty
bool empty() const
Definition: OwnVector.h:305
GeomDet::surface
const Plane & surface() const
The nominal surface of the GeomDet.
Definition: GeomDet.h:37
TrackerToMuonPropagator::m_refitTracker
bool m_refitTracker
Definition: TrackerToMuonPropagator.cc:82
TrajectoryStateOnSurface
Definition: TrajectoryStateOnSurface.h:16
CurvilinearTrajectoryError
Definition: CurvilinearTrajectoryError.h:27
TrackCandidateProducer_cfi.propagator
propagator
Definition: TrackCandidateProducer_cfi.py:17
GlobalTrackingGeometry
Definition: GlobalTrackingGeometry.h:20
TrajectoryMeasurement::forwardPredictedState
TrajectoryStateOnSurface const & forwardPredictedState() const
Access to forward predicted state (from fitter or builder)
Definition: TrajectoryMeasurement.h:177
TrackerToMuonPropagator::m_globalMuons
edm::InputTag m_globalMuons
Definition: TrackerToMuonPropagator.cc:80
GlobalTrajectoryParameters
Definition: GlobalTrajectoryParameters.h:15
MuonSubdetId::DT
static constexpr int DT
Definition: MuonSubdetId.h:11
Point3DBase< float, GlobalTag >
HLT_FULL_cff.TrackTransformer
TrackTransformer
Definition: HLT_FULL_cff.py:9725
ALCARECOTkAlJpsiMuMu_cff.charge
charge
Definition: ALCARECOTkAlJpsiMuMu_cff.py:47
edm::ParameterSet
Definition: ParameterSet.h:47
TrackerToMuonPropagator::m_esTokenGTGeo
const edm::ESGetToken< GlobalTrackingGeometry, GlobalTrackingGeometryRecord > m_esTokenGTGeo
Definition: TrackerToMuonPropagator.cc:78
iEvent
int iEvent
Definition: GenABIO.cc:224
TrackerToMuonPropagator::m_esTokenCSC
const edm::ESGetToken< CSCGeometry, MuonGeometryRecord > m_esTokenCSC
Definition: TrackerToMuonPropagator.cc:76
MuonTransientTrackingRecHitBuilder::build
RecHitPointer build(const TrackingRecHit *p, edm::ESHandle< GlobalTrackingGeometry > trackingGeometry) const
Call the MuonTransientTrackingRecHit::specificBuild.
Definition: MuonTransientTrackingRecHitBuilder.cc:20
AlCaHLTBitMon_QueryRunRegistry.string
string string
Definition: AlCaHLTBitMon_QueryRunRegistry.py:256
edm::Ref::key_type
std::remove_cv< typename std::remove_reference< argument_type >::type >::type key_type
Definition: Ref.h:164
edm::EventSetup::getData
bool getData(T &iHolder) const
Definition: EventSetup.h:127
TrajectoryMeasurement::recHit
ConstRecHitPointer const & recHit() const
Definition: TrajectoryMeasurement.h:190
eostools.move
def move(src, dest)
Definition: eostools.py:511
DetId::rawId
constexpr uint32_t rawId() const
get the raw id
Definition: DetId.h:57
edm::OrphanHandle
Definition: EDProductfwd.h:39
Trajectory::firstMeasurement
TrajectoryMeasurement const & firstMeasurement() const
Definition: Trajectory.h:166
FreeTrajectoryState
Definition: FreeTrajectoryState.h:27
TrajectoryMeasurement::ConstRecHitPointer
TrackingRecHit::ConstRecHitPointer ConstRecHitPointer
Definition: TrajectoryMeasurement.h:28
Trajectory
Definition: Trajectory.h:38
Exception
Definition: hltDiff.cc:245
TrajectorySeed
Definition: TrajectorySeed.h:18
edm::ParameterSet::getParameter
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
edm::OwnVector::push_back
void push_back(D *&d)
Definition: OwnVector.h:326
DetId::Muon
Definition: DetId.h:26
PTrajectoryStateOnDet
Definition: PTrajectoryStateOnDet.h:10
DeDxTools::esConsumes
ESGetTokenH3DDVariant esConsumes(std::string const &Reccord, edm::ConsumesCollector &)
Definition: DeDxTools.cc:283
reco::TrackBase::CovarianceMatrix
math::Error< dimension >::type CovarianceMatrix
5 parameter covariance matrix
Definition: TrackBase.h:74
globalMuons_cfi.globalMuons
globalMuons
Definition: globalMuons_cfi.py:6
MagneticField
Definition: MagneticField.h:19
MuonTransientTrackingRecHitBuilder
Definition: MuonTransientTrackingRecHitBuilder.h:12
TrajectoryMeasurement
Definition: TrajectoryMeasurement.h:25
DTGeometry::idToDet
const GeomDet * idToDet(DetId) const override
Definition: DTGeometry.cc:77
edm::OwnVector::size
size_type size() const
Definition: OwnVector.h:300
TrackerToMuonPropagator::m_esTokenMF
const edm::ESGetToken< MagneticField, IdealMagneticFieldRecord > m_esTokenMF
Definition: TrackerToMuonPropagator.cc:77
edm::InputTag
Definition: InputTag.h:15
alongMomentum
Definition: PropagationDirection.h:4
TrajectoryStateOnSurface::isValid
bool isValid() const
Definition: TrajectoryStateOnSurface.h:54
hit
Definition: SiStripHitEffFromCalibTree.cc:88
edm::OwnVector< TrackingRecHit >
MillePedeFileConverter_cfg.e
e
Definition: MillePedeFileConverter_cfg.py:37
TrackerGeometry
Definition: TrackerGeometry.h:14
susybsm::HSCParticleType::globalMuon
Definition: HSCParticle.h:20