CMS 3D CMS Logo

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

#include <LayerCollector.h>

Public Member Functions

std::vector< const DetLayer * > allLayers (const FTS &aFts) const
 
std::vector< const BarrelDetLayer * > barrelLayers (const FTS &aFts) const
 
float deltaR () const
 
float deltaZ () const
 
std::vector< const ForwardDetLayer * > forwardLayers (const FTS &aFts) const
 
 LayerCollector (NavigationSchool const *aSchool, const Propagator *aPropagator, const MeasurementTracker *tracker, float dr, float dz)
 
const Propagatorpropagator () const
 

Private Types

typedef FreeTrajectoryState FTS
 
typedef std::pair< float, float > Range
 
typedef TrajectoryStateOnSurface TSOS
 

Private Member Functions

bool rangesIntersect (const Range &a, const Range &b) const
 

Private Attributes

float theDeltaR
 
float theDeltaZ
 
const PropagatorthePropagator
 
NavigationSchool const * theSchool
 
const StartingLayerFinder theStartingLayerFinder
 

Detailed Description

Class collecting all layers of the tracker.

Definition at line 19 of file LayerCollector.h.

Member Typedef Documentation

◆ FTS

Definition at line 21 of file LayerCollector.h.

◆ Range

typedef std::pair<float, float> LayerCollector::Range
private

Definition at line 23 of file LayerCollector.h.

◆ TSOS

Definition at line 22 of file LayerCollector.h.

Constructor & Destructor Documentation

◆ LayerCollector()

LayerCollector::LayerCollector ( NavigationSchool const *  aSchool,
const Propagator aPropagator,
const MeasurementTracker tracker,
float  dr,
float  dz 
)
inline

Definition at line 26 of file LayerCollector.h.

References PbPb_ZMuSkimMuonDPG_cff::tracker.

31  : theSchool(aSchool),
32  thePropagator(aPropagator),
33  theStartingLayerFinder{*aPropagator, *tracker},
34  theDeltaR(dr),
35  theDeltaZ(dz) {}
const StartingLayerFinder theStartingLayerFinder
const Propagator * thePropagator
NavigationSchool const * theSchool

Member Function Documentation

◆ allLayers()

vector< const DetLayer * > LayerCollector::allLayers ( const FTS aFts) const

Definition at line 7 of file LayerCollector.cc.

References GeomDetEnumerators::barrel, PbPb_ZMuSkimMuonDPG_cff::deltaR, l1tTrackerHTMiss_cfi::deltaZ, GeomDetEnumerators::endcap, TrajectoryStateOnSurface::freeState(), TrajectoryStateOnSurface::globalParameters(), TrajectoryStateOnSurface::globalPosition(), TrajectoryStateOnSurface::isValid(), FreeTrajectoryState::parameters(), PV3DBase< T, PVType, FrameType >::perp(), TrackCandidateProducer_cfi::propagator, rangesIntersect(), and PV3DBase< T, PVType, FrameType >::z().

Referenced by ConversionSeedFinder::findLayers().

7  {
8  vector<const DetLayer*> myLayers;
9 
10  FTS myFts(aFts.parameters());
11 
12  vector<const DetLayer*> nextLayers = theStartingLayerFinder(myFts, deltaR(), deltaZ());
13 
14  vector<const DetLayer*> dummy;
15 
16  bool inside = true;
17  while (inside) {
18  inside = false;
19  for (vector<const DetLayer*>::iterator ilay = nextLayers.begin(); ilay != nextLayers.end(); ilay++) {
20  TSOS pTsos = propagator()->propagate(myFts, (**ilay).surface());
21 
22  if (pTsos.isValid()) {
23  inside = true;
24 
25  if ((**ilay).location() == GeomDetEnumerators::barrel) {
26  Range barrZRange((**ilay).position().z() - 0.5 * ((**ilay).surface().bounds().length()),
27  (**ilay).position().z() + 0.5 * ((**ilay).surface().bounds().length()));
28  Range trajZRange(pTsos.globalPosition().z() - deltaZ(), pTsos.globalPosition().z() + deltaZ());
29 
30  if (rangesIntersect(trajZRange, barrZRange))
31  myLayers.push_back(*ilay);
32 
33  } else if ((**ilay).location() == GeomDetEnumerators::endcap) {
34  const ForwardDetLayer* fwd = dynamic_cast<const ForwardDetLayer*>(*ilay);
35  Range fwdRRange((*fwd).specificSurface().innerRadius(), (*fwd).specificSurface().outerRadius());
36  Range trajRRange(pTsos.globalPosition().perp() - deltaR(), pTsos.globalPosition().perp() + deltaR());
37 
38  if (rangesIntersect(trajRRange, fwdRRange))
39  myLayers.push_back(*ilay);
40  }
41 
42  myFts = FTS(pTsos.globalParameters());
43 
44  nextLayers = theSchool->nextLayers(**ilay, *pTsos.freeState(), propagator()->propagationDirection());
45 
46  break;
47  }
48  }
49  }
50 
51  return myLayers;
52 }
T perp() const
Definition: PV3DBase.h:69
const StartingLayerFinder theStartingLayerFinder
T z() const
Definition: PV3DBase.h:61
const GlobalTrajectoryParameters & globalParameters() const
virtual PropagationDirection propagationDirection() const final
Definition: Propagator.h:139
NavigationSchool const * theSchool
TrajectoryStateOnSurface propagate(STA const &state, SUR const &surface) const
Definition: Propagator.h:50
const GlobalTrajectoryParameters & parameters() const
GlobalPoint globalPosition() const
std::pair< float, float > Range
std::vector< const DetLayer * > nextLayers(const DetLayer &detLayer, Args &&... args) const
float deltaZ() const
float deltaR() const
bool rangesIntersect(const Range &a, const Range &b) const
FreeTrajectoryState const * freeState(bool withErrors=true) const
const Propagator * propagator() const
FreeTrajectoryState FTS

◆ barrelLayers()

vector< const BarrelDetLayer * > LayerCollector::barrelLayers ( const FTS aFts) const

Definition at line 54 of file LayerCollector.cc.

References python.cmstools::all().

54  {
55  vector<const DetLayer*> all = allLayers(aFts);
56  vector<const BarrelDetLayer*> barrelLayers;
57 
58  for (vector<const DetLayer*>::iterator ilay = all.begin(); ilay != all.end(); ilay++) {
59  if (const BarrelDetLayer* myBarrel = dynamic_cast<const BarrelDetLayer*>(*ilay))
60  barrelLayers.push_back(myBarrel);
61  }
62 
63  return barrelLayers;
64 }
def all(container)
workaround iterator generators for ROOT classes
Definition: cmstools.py:25
std::vector< const DetLayer * > allLayers(const FTS &aFts) const
std::vector< const BarrelDetLayer * > barrelLayers(const FTS &aFts) const

◆ deltaR()

float LayerCollector::deltaR ( ) const
inline

Definition at line 42 of file LayerCollector.h.

References theDeltaR.

42 { return theDeltaR; }

◆ deltaZ()

float LayerCollector::deltaZ ( ) const
inline

Definition at line 43 of file LayerCollector.h.

References theDeltaZ.

43 { return theDeltaZ; }

◆ forwardLayers()

vector< const ForwardDetLayer * > LayerCollector::forwardLayers ( const FTS aFts) const

Definition at line 66 of file LayerCollector.cc.

References python.cmstools::all().

66  {
67  vector<const DetLayer*> all = allLayers(aFts);
68  vector<const ForwardDetLayer*> fwdLayers;
69 
70  for (vector<const DetLayer*>::iterator ilay = all.begin(); ilay != all.end(); ilay++) {
71  if (const ForwardDetLayer* myFwd = dynamic_cast<const ForwardDetLayer*>(*ilay))
72  fwdLayers.push_back(myFwd);
73  }
74 
75  return fwdLayers;
76 }
def all(container)
workaround iterator generators for ROOT classes
Definition: cmstools.py:25
std::vector< const DetLayer * > allLayers(const FTS &aFts) const

◆ propagator()

const Propagator* LayerCollector::propagator ( ) const
inline

Definition at line 41 of file LayerCollector.h.

References thePropagator.

41 { return thePropagator; }
const Propagator * thePropagator

◆ rangesIntersect()

bool LayerCollector::rangesIntersect ( const Range a,
const Range b 
) const
inlineprivate

Definition at line 52 of file LayerCollector.h.

References a, and b.

52  {
53  if (a.first > b.second || b.first > a.second)
54  return false;
55  else
56  return true;
57  }
double b
Definition: hdecay.h:118
double a
Definition: hdecay.h:119

Member Data Documentation

◆ theDeltaR

float LayerCollector::theDeltaR
private

Definition at line 49 of file LayerCollector.h.

Referenced by deltaR().

◆ theDeltaZ

float LayerCollector::theDeltaZ
private

Definition at line 50 of file LayerCollector.h.

Referenced by deltaZ().

◆ thePropagator

const Propagator* LayerCollector::thePropagator
private

Definition at line 47 of file LayerCollector.h.

Referenced by propagator().

◆ theSchool

NavigationSchool const* LayerCollector::theSchool
private

Definition at line 46 of file LayerCollector.h.

◆ theStartingLayerFinder

const StartingLayerFinder LayerCollector::theStartingLayerFinder
private

Definition at line 48 of file LayerCollector.h.