CMS 3D CMS Logo

List of all members | Classes | Public Types | Public Member Functions | Protected Types | Protected Member Functions | Protected Attributes | Private Attributes
GlobalTrajectoryBuilderBase Class Referenceabstract

#include <GlobalTrajectoryBuilderBase.h>

Inheritance diagram for GlobalTrajectoryBuilderBase:
MuonTrajectoryBuilder GlobalMuonTrajectoryBuilder L3MuonTrajectoryBuilder

Classes

struct  ComparatorInOut
 

Public Types

typedef MuonTransientTrackingRecHit::ConstMuonRecHitContainer ConstMuonRecHitContainer
 
typedef MuonTransientTrackingRecHit::ConstMuonRecHitPointer ConstMuonRecHitPointer
 
typedef TransientTrackingRecHit::ConstRecHitContainer ConstRecHitContainer
 
typedef TransientTrackingRecHit::ConstRecHitPointer ConstRecHitPointer
 
typedef MuonTransientTrackingRecHit::MuonRecHitContainer MuonRecHitContainer
 
typedef MuonTransientTrackingRecHit::MuonRecHitPointer MuonRecHitPointer
 
typedef TransientTrackingRecHit::RecHitContainer RecHitContainer
 
typedef TransientTrackingRecHit::RecHitPointer RecHitPointer
 
typedef std::vector< TrajectoryTC
 
typedef TC::const_iterator TI
 
- Public Types inherited from MuonTrajectoryBuilder
typedef MuonCandidate::CandidateContainer CandidateContainer
 
typedef std::pair< const Trajectory *, reco::TrackRefTrackCand
 
typedef MuonCandidate::TrajectoryContainer TrajectoryContainer
 

Public Member Functions

 GlobalTrajectoryBuilderBase (const edm::ParameterSet &, const MuonServiceProxy *, edm::ConsumesCollector &)
 constructor with Parameter Set and MuonServiceProxy More...
 
void setEvent (const edm::Event &) override
 pass the Event to the algo at each event More...
 
MuonTrajectoryBuilder::TrajectoryContainer trajectories (const TrajectorySeed &) override
 dummy implementation, unused in this class More...
 
 ~GlobalTrajectoryBuilderBase () override
 destructor More...
 
- Public Member Functions inherited from MuonTrajectoryBuilder
 MuonTrajectoryBuilder ()
 constructor More...
 
virtual CandidateContainer trajectories (const TrackCand &)=0
 return a container reconstructed muons starting from a given track More...
 
virtual ~MuonTrajectoryBuilder ()
 destructor More...
 

Protected Types

enum  RefitDirection { inToOut, outToIn, undetermined }
 

Protected Member Functions

void addTraj (TrackCand &)
 if TrackCand has only a TrackRef, attempt to add Trajectory* More...
 
MuonTrajectoryBuilder::CandidateContainer build (const TrackCand &, MuonTrajectoryBuilder::CandidateContainer &) const
 build combined trajectory from sta Track and tracker RecHits More...
 
void checkMuonHits (const reco::Track &, ConstRecHitContainer &, ConstRecHitContainer &, std::vector< int > &) const
 check muon RecHits, calculate chamber occupancy and select hits to be used in the final fit More...
 
RefitDirection checkRecHitsOrdering (const ConstRecHitContainer &) const
 This does nothing now. More...
 
std::vector< TrackCandchooseRegionalTrackerTracks (const TrackCand &, const std::vector< TrackCand > &)
 choose tracker tracks within region of interest More...
 
const TrajectorychooseTrajectory (const std::vector< Trajectory *> &, int) const
 choose final trajectory More...
 
RectangularEtaPhiTrackingRegion defineRegionOfInterest (const reco::TrackRef &) const
 define region of interest with tracker More...
 
void fixTEC (ConstRecHitContainer &all, double scl_x, double scl_y) const
 rescale errors of outermost TEC RecHit More...
 
TransientTrackingRecHit::ConstRecHitContainer getTransientRecHits (const reco::Track &) const
 get transient RecHits of a Track More...
 
virtual std::vector< TrackCandmakeTkCandCollection (const TrackCand &)=0
 make a TrackCand collection using tracker Track, Trajectory information More...
 
void printHits (const ConstRecHitContainer &) const
 print all RecHits of a trajectory More...
 
ConstRecHitContainer selectMuonHits (const Trajectory &, const std::vector< int > &) const
 select muon hits compatible with trajectory; check hits in chambers with showers More...
 
ConstRecHitContainer selectTrackerHits (const ConstRecHitContainer &) const
 select tracker hits; exclude some tracker hits in the global trajectory More...
 
const MuonServiceProxyservice () const
 
GlobalMuonTrackMatchertrackMatcher () const
 
double trackProbability (const Trajectory &) const
 calculate chi2 probability (-ln(P)) More...
 

Protected Attributes

std::string theCategory
 
float thePCut
 
float thePtCut
 

Private Attributes

const edm::EventtheEvent
 
const MagneticFieldtheField
 
edm::ESGetToken< MagneticField, IdealMagneticFieldRecordtheFieldToken
 
GlobalMuonRefittertheGlbRefitter
 
MuonDetLayerMeasurementstheLayerMeasurements
 
const MultipleScatteringParametrisationMakertheMSMaker
 
edm::ESGetToken< MultipleScatteringParametrisationMaker, TrackerMultipleScatteringRecordtheMSMakerToken
 
int theMuonHitsOption
 
const TransientTrackingRecHitBuildertheMuonRecHitBuilder
 
edm::ESGetToken< TransientTrackingRecHitBuilder, TransientRecHitRecordtheMuonRecHitBuilderToken
 
bool theRefitFlag
 
MuonTrackingRegionBuildertheRegionBuilder
 
bool theRPCInTheFit
 
const MuonServiceProxytheService
 
float theTECxScale
 
float theTECyScale
 
const TrackerTopologytheTopo
 
edm::ESGetToken< TrackerTopology, TrackerTopologyRcdtheTopoToken
 
std::string theTrackerPropagatorName
 
const TransientTrackingRecHitBuildertheTrackerRecHitBuilder
 
edm::ESGetToken< TransientTrackingRecHitBuilder, TransientRecHitRecordtheTrackerRecHitBuilderToken
 
GlobalMuonTrackMatchertheTrackMatcher
 
TrackTransformertheTrackTransformer
 

Detailed Description

Base class for GlobalMuonTrajectoryBuilder and L3MuonTrajectoryBuilder Provide common tools and interface to reconstruct muons starting from a muon track reconstructed in the standalone muon system (with DT, CSC and RPC information). It tries to reconstruct the corresponding track in the tracker and performs matching between the reconstructed tracks in the muon system and the tracker.

Author
N. Neumeister Purdue University
C. Liu Purdue University
A. Everett Purdue University

Definition at line 46 of file GlobalTrajectoryBuilderBase.h.

Member Typedef Documentation

◆ ConstMuonRecHitContainer

Definition at line 55 of file GlobalTrajectoryBuilderBase.h.

◆ ConstMuonRecHitPointer

Definition at line 53 of file GlobalTrajectoryBuilderBase.h.

◆ ConstRecHitContainer

Definition at line 49 of file GlobalTrajectoryBuilderBase.h.

◆ ConstRecHitPointer

Definition at line 51 of file GlobalTrajectoryBuilderBase.h.

◆ MuonRecHitContainer

Definition at line 54 of file GlobalTrajectoryBuilderBase.h.

◆ MuonRecHitPointer

Definition at line 52 of file GlobalTrajectoryBuilderBase.h.

◆ RecHitContainer

Definition at line 48 of file GlobalTrajectoryBuilderBase.h.

◆ RecHitPointer

Definition at line 50 of file GlobalTrajectoryBuilderBase.h.

◆ TC

Definition at line 56 of file GlobalTrajectoryBuilderBase.h.

◆ TI

typedef TC::const_iterator GlobalTrajectoryBuilderBase::TI

Definition at line 57 of file GlobalTrajectoryBuilderBase.h.

Member Enumeration Documentation

◆ RefitDirection

Constructor & Destructor Documentation

◆ GlobalTrajectoryBuilderBase()

GlobalTrajectoryBuilderBase::GlobalTrajectoryBuilderBase ( const edm::ParameterSet par,
const MuonServiceProxy service,
edm::ConsumesCollector iC 
)

constructor with Parameter Set and MuonServiceProxy

Class: GlobalTrajectoryBuilderBase

Base class for GlobalMuonTrajectoryBuilder and L3MuonTrajectoryBuilder Provide common tools and interface to reconstruct muons starting from a muon track reconstructed in the standalone muon system (with DT, CSC and RPC information). It tries to reconstruct the corresponding track in the tracker and performs matching between the reconstructed tracks in the muon system and the tracker.

Author
N. Neumeister Purdue University
C. Liu Purdue University
A. Everett Purdue University

Definition at line 76 of file GlobalTrajectoryBuilderBase.cc.

References edm::ConsumesCollector::esConsumes(), edm::ParameterSet::getParameter(), edm::ParameterSet::getUntrackedParameter(), GlobalMuonRefitter_cff::GlobalMuonRefitter, HLT_2023v12_cff::GlobalMuonTrackMatcher, HLT_2023v12_cff::MuonTrackingRegionBuilder, AlCaHLTBitMon_QueryRunRegistry::string, theCategory, theFieldToken, theGlbRefitter, theMSMakerToken, theMuonHitsOption, theMuonRecHitBuilderToken, thePCut, thePtCut, theRefitFlag, theRegionBuilder, theRPCInTheFit, theService, theTECxScale, theTECyScale, theTopoToken, theTrackerPropagatorName, theTrackerRecHitBuilderToken, theTrackMatcher, theTrackTransformer, and HLT_2023v12_cff::TrackTransformer.

79  : theLayerMeasurements(nullptr),
80  theTrackTransformer(nullptr),
81  theRegionBuilder(nullptr),
83  theGlbRefitter(nullptr) {
84  theCategory =
85  par.getUntrackedParameter<std::string>("Category", "Muon|RecoMuon|GlobalMuon|GlobalTrajectoryBuilderBase");
86 
87  edm::ParameterSet trackMatcherPSet = par.getParameter<edm::ParameterSet>("GlobalMuonTrackMatcher");
88  theTrackMatcher = new GlobalMuonTrackMatcher(trackMatcherPSet, theService);
89 
90  theTrackerPropagatorName = par.getParameter<std::string>("TrackerPropagator");
91 
92  edm::ParameterSet trackTransformerPSet = par.getParameter<edm::ParameterSet>("TrackTransformer");
93  theTrackTransformer = new TrackTransformer(trackTransformerPSet, iC);
94 
95  edm::ParameterSet regionBuilderPSet = par.getParameter<edm::ParameterSet>("MuonTrackingRegionBuilder");
96 
97  theRegionBuilder = new MuonTrackingRegionBuilder(regionBuilderPSet, iC);
98 
99  // TrackRefitter parameters
100  edm::ParameterSet refitterParameters = par.getParameter<edm::ParameterSet>("GlbRefitterParameters");
101  theGlbRefitter = new GlobalMuonRefitter(refitterParameters, theService, iC);
102 
103  theMuonHitsOption = refitterParameters.getParameter<int>("MuonHitsOption");
104  theRefitFlag = refitterParameters.getParameter<bool>("RefitFlag");
105 
107  iC.esConsumes(edm::ESInputTag("", par.getParameter<std::string>("TrackerRecHitBuilder")));
108  theMuonRecHitBuilderToken = iC.esConsumes(edm::ESInputTag("", par.getParameter<std::string>("MuonRecHitBuilder")));
109  theTopoToken = iC.esConsumes();
110  theFieldToken = iC.esConsumes();
112 
113  theRPCInTheFit = par.getParameter<bool>("RefitRPCHits");
114 
115  theTECxScale = par.getParameter<double>("ScaleTECxFactor");
116  theTECyScale = par.getParameter<double>("ScaleTECyFactor");
117  thePtCut = par.getParameter<double>("PtCut");
118  thePCut = par.getParameter<double>("PCut");
119 }
edm::ESGetToken< TrackerTopology, TrackerTopologyRcd > theTopoToken
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
edm::ESGetToken< MultipleScatteringParametrisationMaker, TrackerMultipleScatteringRecord > theMSMakerToken
T getUntrackedParameter(std::string const &, T const &) const
edm::ESGetToken< MagneticField, IdealMagneticFieldRecord > theFieldToken
MuonDetLayerMeasurements * theLayerMeasurements
edm::ESGetToken< TransientTrackingRecHitBuilder, TransientRecHitRecord > theMuonRecHitBuilderToken
GlobalMuonTrackMatcher * theTrackMatcher
MuonTrackingRegionBuilder * theRegionBuilder
edm::ESGetToken< TransientTrackingRecHitBuilder, TransientRecHitRecord > theTrackerRecHitBuilderToken

◆ ~GlobalTrajectoryBuilderBase()

GlobalTrajectoryBuilderBase::~GlobalTrajectoryBuilderBase ( )
override

destructor

Definition at line 124 of file GlobalTrajectoryBuilderBase.cc.

References theGlbRefitter, theRegionBuilder, theTrackMatcher, and theTrackTransformer.

124  {
125  if (theTrackMatcher)
126  delete theTrackMatcher;
127  if (theRegionBuilder)
128  delete theRegionBuilder;
130  delete theTrackTransformer;
131  if (theGlbRefitter)
132  delete theGlbRefitter;
133 }
GlobalMuonTrackMatcher * theTrackMatcher
MuonTrackingRegionBuilder * theRegionBuilder

Member Function Documentation

◆ addTraj()

void GlobalTrajectoryBuilderBase::addTraj ( TrackCand )
inlineprotected

if TrackCand has only a TrackRef, attempt to add Trajectory*

Definition at line 110 of file GlobalTrajectoryBuilderBase.h.

110 {}

◆ build()

MuonCandidate::CandidateContainer GlobalTrajectoryBuilderBase::build ( const TrackCand staCand,
MuonTrajectoryBuilder::CandidateContainer tkTrajs 
) const
protected

build combined trajectory from sta Track and tracker RecHits

Definition at line 160 of file GlobalTrajectoryBuilderBase.cc.

References funct::abs(), checkRecHitsOrdering(), fixTEC(), getTransientRecHits(), LogDebug, LogTrace, MuonServiceProxy::magneticField(), SiStripPI::max, conversionTrackMerger_cfi::minProb, eostools::move(), or, outToIn, TtFullHadEvtBuilder_cfi::prob, GlobalMuonRefitter::refit(), groupFilesInBlocks::reverse, selectTrackerHits(), theCategory, theGlbRefitter, theMuonHitsOption, thePCut, thePtCut, theRefitFlag, theService, theTECxScale, theTECyScale, theTopo, theTrackTransformer, MuonServiceProxy::trackingGeometry(), trackProbability(), and TrackTransformer::transform().

Referenced by GlobalMuonTrajectoryBuilder::trajectories(), and L3MuonTrajectoryBuilder::trajectories().

161  {
162  LogTrace(theCategory) << " Begin Build" << std::endl;
163 
164  // tracker trajectory should be built and refit before this point
165  if (tkTrajs.empty())
166  return CandidateContainer();
167 
168  // add muon hits and refit/smooth trajectories
169  CandidateContainer refittedResult;
170  ConstRecHitContainer muonRecHits = getTransientRecHits(*(staCand.second));
171 
172  // check order of muon measurements
173  if ((muonRecHits.size() > 1) &&
174  (muonRecHits.front()->globalPosition().mag() > muonRecHits.back()->globalPosition().mag())) {
175  LogTrace(theCategory) << " reverse order: ";
176  }
177 
178  for (auto&& it : tkTrajs) {
179  // cut on tracks with low momenta
180  LogTrace(theCategory) << " Track p and pT " << it->trackerTrack()->p() << " " << it->trackerTrack()->pt();
181  if (it->trackerTrack()->p() < thePCut || it->trackerTrack()->pt() < thePtCut)
182  continue;
183 
184  // If true we will run theGlbRefitter->refit from all hits
185  if (theRefitFlag) {
186  ConstRecHitContainer trackerRecHits;
187  if (it->trackerTrack().isNonnull()) {
188  trackerRecHits = getTransientRecHits(*it->trackerTrack());
189  } else {
190  LogDebug(theCategory) << " NEED HITS FROM TRAJ";
191  }
192 
193  // ToDo: Do we need the following ?:
194  // check for single TEC RecHits in trajectories in the overalp region
195  if (std::abs(it->trackerTrack()->eta()) > 0.95 && std::abs(it->trackerTrack()->eta()) < 1.15 &&
196  it->trackerTrack()->pt() < 60) {
197  if (theTECxScale < 0 || theTECyScale < 0)
198  trackerRecHits = selectTrackerHits(trackerRecHits);
199  else
200  fixTEC(trackerRecHits, theTECxScale, theTECyScale);
201  }
202 
203  RefitDirection recHitDir = checkRecHitsOrdering(trackerRecHits);
204  if (recHitDir == outToIn)
205  reverse(trackerRecHits.begin(), trackerRecHits.end());
206 
207  reco::TransientTrack tTT(it->trackerTrack(), &*theService->magneticField(), theService->trackingGeometry());
208  TrajectoryStateOnSurface innerTsos = tTT.innermostMeasurementState();
209 
211  if (it->trackerTrack()->seedRef().isAvailable())
212  tmpSeed = it->trackerTrack()->seedRef();
213 
214  if (!innerTsos.isValid()) {
215  LogTrace(theCategory) << " inner Trajectory State is invalid. ";
216  continue;
217  }
218 
219  innerTsos.rescaleError(100.);
220 
221  TC refitted0, refitted1;
222  std::unique_ptr<Trajectory> tkTrajectory;
223 
224  // tracker only track
225  if (!(it->trackerTrajectory() && it->trackerTrajectory()->isValid())) {
226  refitted0 = theTrackTransformer->transform(it->trackerTrack());
227  if (!refitted0.empty())
228  tkTrajectory = std::make_unique<Trajectory>(*(refitted0.begin()));
229  else
230  LogDebug(theCategory) << " Failed to load tracker track trajectory";
231  } else
232  tkTrajectory = it->releaseTrackerTrajectory();
233  if (tkTrajectory)
234  tkTrajectory->setSeedRef(tmpSeed);
235 
236  // full track with all muon hits using theGlbRefitter
237  ConstRecHitContainer allRecHits = trackerRecHits;
238  allRecHits.insert(allRecHits.end(), muonRecHits.begin(), muonRecHits.end());
239  refitted1 = theGlbRefitter->refit(*it->trackerTrack(), tTT, allRecHits, theMuonHitsOption, theTopo);
240  LogTrace(theCategory) << " This track-sta refitted to " << refitted1.size() << " trajectories";
241 
242  std::unique_ptr<Trajectory> glbTrajectory1;
243  if (!refitted1.empty())
244  glbTrajectory1 = std::make_unique<Trajectory>(*(refitted1.begin()));
245  else
246  LogDebug(theCategory) << " Failed to load global track trajectory 1";
247  if (glbTrajectory1)
248  glbTrajectory1->setSeedRef(tmpSeed);
249 
250  if (glbTrajectory1 && tkTrajectory) {
251  refittedResult.emplace_back(std::make_unique<MuonCandidate>(
252  std::move(glbTrajectory1), it->muonTrack(), it->trackerTrack(), std::move(tkTrajectory)));
253  }
254  } else {
256  if (it->trackerTrack()->seedRef().isAvailable())
257  tmpSeed = it->trackerTrack()->seedRef();
258 
259  TC refitted0;
260  std::unique_ptr<Trajectory> tkTrajectory;
261  if (!(it->trackerTrajectory() && it->trackerTrajectory()->isValid())) {
262  refitted0 = theTrackTransformer->transform(it->trackerTrack());
263  if (!refitted0.empty()) {
264  tkTrajectory = std::make_unique<Trajectory>(*(refitted0.begin()));
265  } else
266  LogDebug(theCategory) << " Failed to load tracker track trajectory";
267  } else
268  tkTrajectory = it->releaseTrackerTrajectory();
269  std::unique_ptr<Trajectory> cpy;
270  if (tkTrajectory) {
271  tkTrajectory->setSeedRef(tmpSeed);
272  cpy = std::make_unique<Trajectory>(*tkTrajectory);
273  }
274  // Creating MuonCandidate using only the tracker trajectory:
275  refittedResult.emplace_back(std::make_unique<MuonCandidate>(
276  std::move(tkTrajectory), it->muonTrack(), it->trackerTrack(), std::move(cpy)));
277  }
278  }
279 
280  // choose the best global fit for this Standalone Muon based on the track probability
281  CandidateContainer selectedResult;
282  std::unique_ptr<MuonCandidate> tmpCand;
284 
285  for (auto&& cand : refittedResult) {
286  double prob = trackProbability(*cand->trajectory());
287  LogTrace(theCategory) << " refitted-track-sta with pT " << cand->trackerTrack()->pt() << " has probability "
288  << prob;
289 
290  if (prob < minProb or not tmpCand) {
291  minProb = prob;
292  tmpCand = std::move(cand);
293  }
294  }
295 
296  if (tmpCand)
297  selectedResult.push_back(std::move(tmpCand));
298 
299  refittedResult.clear();
300 
301  return selectedResult;
302 }
TransientTrackingRecHit::ConstRecHitContainer getTransientRecHits(const reco::Track &) const
get transient RecHits of a Track
MuonCandidate::CandidateContainer CandidateContainer
edm::ESHandle< GlobalTrackingGeometry > trackingGeometry() const
get the tracking geometry
edm::ESHandle< MagneticField > magneticField() const
get the magnetic field
ConstRecHitContainer selectTrackerHits(const ConstRecHitContainer &) const
select tracker hits; exclude some tracker hits in the global trajectory
void fixTEC(ConstRecHitContainer &all, double scl_x, double scl_y) const
rescale errors of outermost TEC RecHit
#define LogTrace(id)
double trackProbability(const Trajectory &) const
calculate chi2 probability (-ln(P))
The Signals That Services Can Subscribe To This is based on ActivityRegistry and is current per Services can connect to the signals distributed by the ActivityRegistry in order to monitor the activity of the application Each possible callback has some defined which we here list in angle e< void, edm::EventID const &, edm::Timestamp const & > We also list in braces which AR_WATCH_USING_METHOD_ is used for those or
Definition: Activities.doc:12
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
TransientTrackingRecHit::ConstRecHitContainer ConstRecHitContainer
std::vector< Trajectory > refit(const reco::Track &globalTrack, const int theMuonHitsOption, const TrackerTopology *tTopo) const
build combined trajectory from sta Track and tracker RecHits
std::vector< Trajectory > transform(const reco::Track &) const override
Convert a reco::Track into Trajectory.
def move(src, dest)
Definition: eostools.py:511
#define LogDebug(id)
RefitDirection checkRecHitsOrdering(const ConstRecHitContainer &) const
This does nothing now.

◆ checkMuonHits()

void GlobalTrajectoryBuilderBase::checkMuonHits ( const reco::Track ,
ConstRecHitContainer ,
ConstRecHitContainer ,
std::vector< int > &   
) const
protected

check muon RecHits, calculate chamber occupancy and select hits to be used in the final fit

◆ checkRecHitsOrdering()

GlobalTrajectoryBuilderBase::RefitDirection GlobalTrajectoryBuilderBase::checkRecHitsOrdering ( const ConstRecHitContainer recHits) const
protected

This does nothing now.

check order of RechIts on a trajectory

Definition at line 393 of file GlobalTrajectoryBuilderBase.cc.

References inToOut, outToIn, FastTrackerRecHitMaskProducer_cfi::recHits, theCategory, and undetermined.

Referenced by build().

394  {
395  if (!recHits.empty()) {
396  ConstRecHitContainer::const_iterator frontHit = recHits.begin();
397  ConstRecHitContainer::const_iterator backHit = recHits.end() - 1;
398  while (!(*frontHit)->isValid() && frontHit != backHit) {
399  frontHit++;
400  }
401  while (!(*backHit)->isValid() && backHit != frontHit) {
402  backHit--;
403  }
404 
405  double rFirst = (*frontHit)->globalPosition().mag();
406  double rLast = (*backHit)->globalPosition().mag();
407 
408  if (rFirst < rLast)
409  return inToOut;
410  else if (rFirst > rLast)
411  return outToIn;
412  else {
413  edm::LogError(theCategory) << "Impossible to determine the rechits order" << std::endl;
414  return undetermined;
415  }
416  } else {
417  edm::LogError(theCategory) << "Impossible to determine the rechits order" << std::endl;
418  return undetermined;
419  }
420 }
Log< level::Error, false > LogError

◆ chooseRegionalTrackerTracks()

std::vector< GlobalTrajectoryBuilderBase::TrackCand > GlobalTrajectoryBuilderBase::chooseRegionalTrackerTracks ( const TrackCand staCand,
const std::vector< TrackCand > &  tkTs 
)
protected

choose tracker tracks within region of interest

Definition at line 307 of file GlobalTrajectoryBuilderBase.cc.

References defineRegionOfInterest(), PbPb_ZMuSkimMuonDPG_cff::deltaR, TrackingRegion::direction(), PV3DBase< T, PVType, FrameType >::eta(), PV3DBase< T, PVType, FrameType >::phi(), and mps_fire::result.

Referenced by GlobalMuonTrajectoryBuilder::makeTkCandCollection().

308  {
309  // define eta-phi region
310  RectangularEtaPhiTrackingRegion regionOfInterest = defineRegionOfInterest(staCand.second);
311 
312  // get region's etaRange and phiMargin
313  //UNUSED: PixelRecoRange<float> etaRange = regionOfInterest.etaRange();
314  //UNUSED: TkTrackingRegionsMargin<float> phiMargin = regionOfInterest.phiMargin();
315 
316  std::vector<TrackCand> result;
317 
318  double deltaR_max = 1.0;
319 
320  for (auto&& is : tkTs) {
321  double deltaR_tmp = deltaR(static_cast<double>(regionOfInterest.direction().eta()),
322  static_cast<double>(regionOfInterest.direction().phi()),
323  is.second->eta(),
324  is.second->phi());
325 
326  // for each trackCand in region, add trajectory and add to result
327  //if ( inEtaRange && inPhiRange ) {
328  if (deltaR_tmp < deltaR_max) {
329  TrackCand tmpCand = TrackCand(is);
330  result.push_back(tmpCand);
331  }
332  }
333 
334  return result;
335 }
std::pair< const Trajectory *, reco::TrackRef > TrackCand
Geom::Phi< T > phi() const
Definition: PV3DBase.h:66
T eta() const
Definition: PV3DBase.h:73
RectangularEtaPhiTrackingRegion defineRegionOfInterest(const reco::TrackRef &) const
define region of interest with tracker
GlobalVector const & direction() const
the direction around which region is constructed

◆ chooseTrajectory()

const Trajectory* GlobalTrajectoryBuilderBase::chooseTrajectory ( const std::vector< Trajectory *> &  ,
int   
) const
protected

choose final trajectory

◆ defineRegionOfInterest()

RectangularEtaPhiTrackingRegion GlobalTrajectoryBuilderBase::defineRegionOfInterest ( const reco::TrackRef staTrack) const
protected

define region of interest with tracker

Definition at line 340 of file GlobalTrajectoryBuilderBase.cc.

References funct::abs(), MuonTrackingRegionBuilder::region(), theField, theMSMaker, and theRegionBuilder.

Referenced by chooseRegionalTrackerTracks().

341  {
342  std::unique_ptr<RectangularEtaPhiTrackingRegion> region1 = theRegionBuilder->region(staTrack);
343 
344  TkTrackingRegionsMargin<float> etaMargin(std::abs(region1->etaRange().min() - region1->etaRange().mean()),
345  std::abs(region1->etaRange().max() - region1->etaRange().mean()));
346 
347  RectangularEtaPhiTrackingRegion region2(region1->direction(),
348  region1->origin(),
349  region1->ptMin(),
350  region1->originRBound(),
351  region1->originZBound(),
352  etaMargin,
353  region1->phiMargin(),
354  *theField,
355  theMSMaker);
356 
357  return region2;
358 }
std::unique_ptr< RectangularEtaPhiTrackingRegion > region(const reco::TrackRef &) const
Define tracking region.
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
const MultipleScatteringParametrisationMaker * theMSMaker
MuonTrackingRegionBuilder * theRegionBuilder

◆ fixTEC()

void GlobalTrajectoryBuilderBase::fixTEC ( ConstRecHitContainer all,
double  scl_x,
double  scl_y 
) const
protected

rescale errors of outermost TEC RecHit

freeze this hit, make sure it will not be recomputed during fitting / the implemetantion below works with cloning / to get a RecHitPointer to SiStripRecHit2D, the only method that works is / RecHitPointer MuonTransientTrackingRecHit::build(const GeomDet*,const TrackingRecHit*)

Definition at line 449 of file GlobalTrajectoryBuilderBase.cc.

References python.cmstools::all(), angle(), MuonTransientTrackingRecHit::build(), relativeConstraints::error, mps_fire::i, digitizers_cfi::strip, StripTopology::strip(), StripTopology::stripAngle(), StripSubdetector::TEC, DetId::Tracker, LocalError::xx(), and LocalError::yy().

Referenced by build().

449  {
450  int nTEC(0);
451  ConstRecHitContainer::iterator lone_tec;
452 
453  for (ConstRecHitContainer::iterator i = all.begin(); i != all.end(); i++) {
454  if (!(*i)->isValid())
455  continue;
456 
457  if ((*i)->det()->geographicalId().det() == DetId::Tracker &&
458  (*i)->det()->geographicalId().subdetId() == StripSubdetector::TEC) {
459  lone_tec = i;
460  nTEC++;
461 
462  if ((i + 1) != all.end() && (*(i + 1))->isValid() &&
463  (*(i + 1))->det()->geographicalId().det() == DetId::Tracker &&
464  (*(i + 1))->det()->geographicalId().subdetId() == StripSubdetector::TEC) {
465  nTEC++;
466  break;
467  }
468  }
469 
470  if (nTEC > 1)
471  break;
472  }
473 
474  int hitDet = (*lone_tec)->hit()->geographicalId().det();
475  int hitSubDet = (*lone_tec)->hit()->geographicalId().subdetId();
476  if (nTEC == 1 && (*lone_tec)->hit()->isValid() && hitDet == DetId::Tracker && hitSubDet == StripSubdetector::TEC) {
477  // rescale the TEC rechit error matrix in its rotated frame
478  const SiStripRecHit2D* strip = dynamic_cast<const SiStripRecHit2D*>((*lone_tec)->hit());
479  if (strip && strip->det()) {
480  LocalPoint pos = strip->localPosition();
481  if ((*lone_tec)->detUnit()) {
482  const StripTopology* topology = dynamic_cast<const StripTopology*>(&(*lone_tec)->detUnit()->topology());
483  if (topology) {
484  // rescale the local error along/perp the strip by a factor
485  float angle = topology->stripAngle(topology->strip((*lone_tec)->hit()->localPosition()));
486  LocalError error = strip->localPositionError();
487  LocalError rotError = error.rotate(angle);
488  LocalError scaledError(rotError.xx() * scl_x * scl_x, 0, rotError.yy() * scl_y * scl_y);
489  error = scaledError.rotate(-angle);
494  SiStripRecHit2D* st = new SiStripRecHit2D(pos, error, *strip->det(), strip->cluster());
495  *lone_tec = MuonTransientTrackingRecHit::build((*lone_tec)->det(), st);
496  }
497  }
498  }
499  }
500 }
static constexpr auto TEC
virtual float stripAngle(float strip) const =0
def all(container)
workaround iterator generators for ROOT classes
Definition: cmstools.py:25
virtual float strip(const LocalPoint &) const =0
float yy() const
Definition: LocalError.h:24
static RecHitPointer build(const GeomDet *geom, const TrackingRecHit *rh)
FIXME virtual ConstMuonRecHitContainer specificTransientHits() const;.
float xx() const
Definition: LocalError.h:22
T angle(T x1, T y1, T z1, T x2, T y2, T z2)
Definition: angle.h:11

◆ getTransientRecHits()

TransientTrackingRecHit::ConstRecHitContainer GlobalTrajectoryBuilderBase::getTransientRecHits ( const reco::Track track) const
protected

get transient RecHits of a Track

Definition at line 506 of file GlobalTrajectoryBuilderBase.cc.

References TransientTrackingRecHitBuilder::build(), runTheMatrix::const, DetId::det(), h, GlobalTrackingGeometry::idToDet(), trajectoryStateTransform::innerStateOnSurface(), TrajectoryStateOnSurface::isValid(), LogDebug, MuonServiceProxy::magneticField(), DetId::Muon, Propagator::propagate(), MuonServiceProxy::propagator(), mps_fire::result, GeomDet::surface(), theCategory, theMuonRecHitBuilder, theRPCInTheFit, theService, theTrackerPropagatorName, theTrackerRecHitBuilder, HLT_2023v12_cff::track, DetId::Tracker, and MuonServiceProxy::trackingGeometry().

Referenced by build().

507  {
509 
512 
513  auto tkbuilder = static_cast<TkTransientTrackingRecHitBuilder const*>(theTrackerRecHitBuilder);
514  auto hitCloner = tkbuilder->cloner();
515  for (trackingRecHit_iterator hit = track.recHitsBegin(); hit != track.recHitsEnd(); ++hit) {
516  if ((*hit)->isValid()) {
517  DetId recoid = (*hit)->geographicalId();
518  if (recoid.det() == DetId::Tracker) {
519  if (!(*hit)->hasPositionAndError()) {
520  TrajectoryStateOnSurface predTsos =
522  ->propagate(currTsos, theService->trackingGeometry()->idToDet(recoid)->surface());
523 
524  if (!predTsos.isValid()) {
525  edm::LogError("MissingTransientHit")
526  << "Could not get a tsos on the hit surface. We will miss a tracking hit.";
527  continue;
528  }
529  currTsos = predTsos;
530  auto h = (**hit).cloneForFit(*tkbuilder->geometry()->idToDet((**hit).geographicalId()));
531  result.emplace_back(hitCloner.makeShared(h, predTsos));
532  } else {
533  result.push_back((*hit)->cloneSH());
534  }
535  } else if (recoid.det() == DetId::Muon) {
536  if ((*hit)->geographicalId().subdetId() == 3 && !theRPCInTheFit) {
537  LogDebug(theCategory) << "RPC Rec Hit discarded";
538  continue;
539  }
540  result.push_back(theMuonRecHitBuilder->build(&**hit));
541  }
542  }
543  }
544 
545  return result;
546 }
edm::ESHandle< GlobalTrackingGeometry > trackingGeometry() const
get the tracking geometry
edm::ESHandle< MagneticField > magneticField() const
get the magnetic field
const TransientTrackingRecHitBuilder * theMuonRecHitBuilder
Log< level::Error, false > LogError
const TransientTrackingRecHitBuilder * theTrackerRecHitBuilder
TrajectoryStateOnSurface propagate(STA const &state, SUR const &surface) const
Definition: Propagator.h:50
const GeomDet * idToDet(DetId) const override
constexpr Detector det() const
get the detector field from this detid
Definition: DetId.h:46
virtual RecHitPointer build(const TrackingRecHit *p) const =0
build a tracking rechit from an existing rechit
std::vector< ConstRecHitPointer > ConstRecHitContainer
Definition: DetId.h:17
const Plane & surface() const
The nominal surface of the GeomDet.
Definition: GeomDet.h:37
edm::ESHandle< Propagator > propagator(std::string propagatorName) const
get the propagator
The Signals That Services Can Subscribe To This is based on ActivityRegistry h
Helper function to determine trigger accepts.
Definition: Activities.doc:4
TrajectoryStateOnSurface innerStateOnSurface(const reco::Track &tk, const TrackingGeometry &geom, const MagneticField *field, bool withErr=true)
#define LogDebug(id)

◆ makeTkCandCollection()

virtual std::vector<TrackCand> GlobalTrajectoryBuilderBase::makeTkCandCollection ( const TrackCand )
protectedpure virtual

make a TrackCand collection using tracker Track, Trajectory information

Implemented in L3MuonTrajectoryBuilder, and GlobalMuonTrajectoryBuilder.

◆ printHits()

void GlobalTrajectoryBuilderBase::printHits ( const ConstRecHitContainer hits) const
protected

print all RecHits of a trajectory

Definition at line 374 of file GlobalTrajectoryBuilderBase.cc.

References hfClusterShapes_cfi::hits, LogTrace, mathSSE::sqrt(), and theCategory.

Referenced by ntuplePrintersDiff.TrackingParticlePrinter::__call__(), ntuplePrintersDiff.SeedPrinter::diff(), ntuplePrintersDiff.TrackPrinter::diff(), ntuplePrintersDiff.TrackingParticlePrinter::diff(), ntuplePrintersDiff.SeedPrinter::printSeed(), and ntuplePrintersDiff.TrackPrinter::printTrack().

374  {
375  LogTrace(theCategory) << "Used RecHits: " << hits.size();
376  for (auto&& ir : hits) {
377  if (!ir->isValid()) {
378  LogTrace(theCategory) << "invalid RecHit";
379  continue;
380  }
381 
382  const GlobalPoint& pos = ir->globalPosition();
383 
384  LogTrace(theCategory) << "r = " << sqrt(pos.x() * pos.x() + pos.y() * pos.y()) << " z = " << pos.z()
385  << " dimension = " << ir->dimension() << " " << ir->det()->geographicalId().det() << " "
386  << ir->det()->subDetector();
387  }
388 }
#define LogTrace(id)
T sqrt(T t)
Definition: SSEVec.h:19

◆ selectMuonHits()

ConstRecHitContainer GlobalTrajectoryBuilderBase::selectMuonHits ( const Trajectory ,
const std::vector< int > &   
) const
protected

select muon hits compatible with trajectory; check hits in chambers with showers

◆ selectTrackerHits()

GlobalTrajectoryBuilderBase::ConstRecHitContainer GlobalTrajectoryBuilderBase::selectTrackerHits ( const ConstRecHitContainer all) const
protected

select tracker hits; exclude some tracker hits in the global trajectory

Definition at line 425 of file GlobalTrajectoryBuilderBase.cc.

References python.cmstools::all(), hfClusterShapes_cfi::hits, mps_fire::i, StripSubdetector::TEC, and DetId::Tracker.

Referenced by build().

426  {
427  int nTEC(0);
428 
430  for (auto&& i : all) {
431  if (!i->isValid())
432  continue;
433  if (i->det()->geographicalId().det() == DetId::Tracker &&
434  i->det()->geographicalId().subdetId() == StripSubdetector::TEC) {
435  nTEC++;
436  } else {
437  hits.push_back(i);
438  }
439  if (nTEC > 1)
440  return all;
441  }
442 
443  return hits;
444 }
static constexpr auto TEC
def all(container)
workaround iterator generators for ROOT classes
Definition: cmstools.py:25
TransientTrackingRecHit::ConstRecHitContainer ConstRecHitContainer

◆ service()

const MuonServiceProxy* GlobalTrajectoryBuilderBase::service ( ) const
inlineprotected

Definition at line 122 of file GlobalTrajectoryBuilderBase.h.

References theService.

122 { return theService; }

◆ setEvent()

void GlobalTrajectoryBuilderBase::setEvent ( const edm::Event event)
overridevirtual

pass the Event to the algo at each event

Implements MuonTrajectoryBuilder.

Reimplemented in L3MuonTrajectoryBuilder.

Definition at line 138 of file GlobalTrajectoryBuilderBase.cc.

References edmPickEvents::event, MuonServiceProxy::eventSetup(), edm::EventSetup::getData(), MuonTrackingRegionBuilder::setEvent(), GlobalMuonRefitter::setEvent(), GlobalMuonRefitter::setServices(), TrackTransformer::setServices(), theEvent, theField, theFieldToken, theGlbRefitter, theMSMaker, theMSMakerToken, theMuonRecHitBuilder, theMuonRecHitBuilderToken, theRegionBuilder, theService, theTopo, theTopoToken, theTrackerRecHitBuilder, theTrackerRecHitBuilderToken, and theTrackTransformer.

Referenced by GlobalMuonTrajectoryBuilder::setEvent(), and L3MuonTrajectoryBuilder::setEvent().

138  {
139  theEvent = &event;
140 
143 
146 
149 
150  //Retrieve tracker topology from geometry
152 
155 }
edm::ESGetToken< TrackerTopology, TrackerTopologyRcd > theTopoToken
void setServices(const edm::EventSetup &) override
set the services needed by the TrackTransformer
T const & getData(const ESGetToken< T, R > &iToken) const noexcept(false)
Definition: EventSetup.h:119
const TransientTrackingRecHitBuilder * theMuonRecHitBuilder
void setServices(const edm::EventSetup &)
set the services needed by the TrackTransformer
edm::ESGetToken< MultipleScatteringParametrisationMaker, TrackerMultipleScatteringRecord > theMSMakerToken
const TransientTrackingRecHitBuilder * theTrackerRecHitBuilder
edm::ESGetToken< MagneticField, IdealMagneticFieldRecord > theFieldToken
void setEvent(const edm::Event &, const edm::EventSetup &)
Pass the Event to the algo at each event.
const MultipleScatteringParametrisationMaker * theMSMaker
virtual void setEvent(const edm::Event &)
pass the Event to the algo at each event
edm::ESGetToken< TransientTrackingRecHitBuilder, TransientRecHitRecord > theMuonRecHitBuilderToken
MuonTrackingRegionBuilder * theRegionBuilder
const edm::EventSetup & eventSetup() const
edm::ESGetToken< TransientTrackingRecHitBuilder, TransientRecHitRecord > theTrackerRecHitBuilderToken
Definition: event.py:1

◆ trackMatcher()

GlobalMuonTrackMatcher* GlobalTrajectoryBuilderBase::trackMatcher ( ) const
inlineprotected

◆ trackProbability()

double GlobalTrajectoryBuilderBase::trackProbability ( const Trajectory track) const
protected

calculate chi2 probability (-ln(P))

Definition at line 363 of file GlobalTrajectoryBuilderBase.cc.

References LnChiSquaredProbability(), and HLT_2023v12_cff::track.

Referenced by build().

363  {
364  if (track.ndof() > 0 && track.chiSquared() > 0) {
365  return -LnChiSquaredProbability(track.chiSquared(), track.ndof());
366  } else {
367  return 0.0;
368  }
369 }
float LnChiSquaredProbability(double chiSquared, double nrDOF)

◆ trajectories()

MuonTrajectoryBuilder::TrajectoryContainer GlobalTrajectoryBuilderBase::trajectories ( const TrajectorySeed )
inlineoverridevirtual

dummy implementation, unused in this class

Implements MuonTrajectoryBuilder.

Definition at line 66 of file GlobalTrajectoryBuilderBase.h.

66  {
68  }
MuonCandidate::TrajectoryContainer TrajectoryContainer

Member Data Documentation

◆ theCategory

std::string GlobalTrajectoryBuilderBase::theCategory
protected

◆ theEvent

const edm::Event* GlobalTrajectoryBuilderBase::theEvent
private

Definition at line 164 of file GlobalTrajectoryBuilderBase.h.

Referenced by setEvent().

◆ theField

const MagneticField* GlobalTrajectoryBuilderBase::theField
private

Definition at line 172 of file GlobalTrajectoryBuilderBase.h.

Referenced by defineRegionOfInterest(), and setEvent().

◆ theFieldToken

edm::ESGetToken<MagneticField, IdealMagneticFieldRecord> GlobalTrajectoryBuilderBase::theFieldToken
private

Definition at line 171 of file GlobalTrajectoryBuilderBase.h.

Referenced by GlobalTrajectoryBuilderBase(), and setEvent().

◆ theGlbRefitter

GlobalMuonRefitter* GlobalTrajectoryBuilderBase::theGlbRefitter
private

◆ theLayerMeasurements

MuonDetLayerMeasurements* GlobalTrajectoryBuilderBase::theLayerMeasurements
private

Definition at line 153 of file GlobalTrajectoryBuilderBase.h.

◆ theMSMaker

const MultipleScatteringParametrisationMaker* GlobalTrajectoryBuilderBase::theMSMaker
private

Definition at line 174 of file GlobalTrajectoryBuilderBase.h.

Referenced by defineRegionOfInterest(), and setEvent().

◆ theMSMakerToken

edm::ESGetToken<MultipleScatteringParametrisationMaker, TrackerMultipleScatteringRecord> GlobalTrajectoryBuilderBase::theMSMakerToken
private

Definition at line 173 of file GlobalTrajectoryBuilderBase.h.

Referenced by GlobalTrajectoryBuilderBase(), and setEvent().

◆ theMuonHitsOption

int GlobalTrajectoryBuilderBase::theMuonHitsOption
private

Definition at line 160 of file GlobalTrajectoryBuilderBase.h.

Referenced by build(), and GlobalTrajectoryBuilderBase().

◆ theMuonRecHitBuilder

const TransientTrackingRecHitBuilder* GlobalTrajectoryBuilderBase::theMuonRecHitBuilder
private

Definition at line 168 of file GlobalTrajectoryBuilderBase.h.

Referenced by getTransientRecHits(), and setEvent().

◆ theMuonRecHitBuilderToken

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

Definition at line 167 of file GlobalTrajectoryBuilderBase.h.

Referenced by GlobalTrajectoryBuilderBase(), and setEvent().

◆ thePCut

float GlobalTrajectoryBuilderBase::thePCut
protected

Definition at line 149 of file GlobalTrajectoryBuilderBase.h.

Referenced by build(), and GlobalTrajectoryBuilderBase().

◆ thePtCut

float GlobalTrajectoryBuilderBase::thePtCut
protected

◆ theRefitFlag

bool GlobalTrajectoryBuilderBase::theRefitFlag
private

Definition at line 159 of file GlobalTrajectoryBuilderBase.h.

Referenced by build(), and GlobalTrajectoryBuilderBase().

◆ theRegionBuilder

MuonTrackingRegionBuilder* GlobalTrajectoryBuilderBase::theRegionBuilder
private

◆ theRPCInTheFit

bool GlobalTrajectoryBuilderBase::theRPCInTheFit
private

◆ theService

const MuonServiceProxy* GlobalTrajectoryBuilderBase::theService
private

◆ theTECxScale

float GlobalTrajectoryBuilderBase::theTECxScale
private

Definition at line 161 of file GlobalTrajectoryBuilderBase.h.

Referenced by build(), and GlobalTrajectoryBuilderBase().

◆ theTECyScale

float GlobalTrajectoryBuilderBase::theTECyScale
private

Definition at line 162 of file GlobalTrajectoryBuilderBase.h.

Referenced by build(), and GlobalTrajectoryBuilderBase().

◆ theTopo

const TrackerTopology* GlobalTrajectoryBuilderBase::theTopo
private

Definition at line 170 of file GlobalTrajectoryBuilderBase.h.

Referenced by build(), and setEvent().

◆ theTopoToken

edm::ESGetToken<TrackerTopology, TrackerTopologyRcd> GlobalTrajectoryBuilderBase::theTopoToken
private

Definition at line 169 of file GlobalTrajectoryBuilderBase.h.

Referenced by GlobalTrajectoryBuilderBase(), and setEvent().

◆ theTrackerPropagatorName

std::string GlobalTrajectoryBuilderBase::theTrackerPropagatorName
private

◆ theTrackerRecHitBuilder

const TransientTrackingRecHitBuilder* GlobalTrajectoryBuilderBase::theTrackerRecHitBuilder
private

Definition at line 166 of file GlobalTrajectoryBuilderBase.h.

Referenced by getTransientRecHits(), and setEvent().

◆ theTrackerRecHitBuilderToken

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

Definition at line 165 of file GlobalTrajectoryBuilderBase.h.

Referenced by GlobalTrajectoryBuilderBase(), and setEvent().

◆ theTrackMatcher

GlobalMuonTrackMatcher* GlobalTrajectoryBuilderBase::theTrackMatcher
private

◆ theTrackTransformer

TrackTransformer* GlobalTrajectoryBuilderBase::theTrackTransformer
private