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
 
const StartingLayerFinderfinder () const
 
std::vector< const ForwardDetLayer * > forwardLayers (const FTS &aFts) const
 
 LayerCollector (NavigationSchool const *aSchool, const Propagator *aPropagator, const StartingLayerFinder *aFinder, float dr, float dz)
 
const Propagatorpropagator () const
 
 ~LayerCollector ()
 

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 StartingLayerFindertheStartingLayerFinder
 

Detailed Description

Class collecting all layers of the tracker.

Definition at line 19 of file LayerCollector.h.

Member Typedef Documentation

Definition at line 21 of file LayerCollector.h.

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

Definition at line 23 of file LayerCollector.h.

Definition at line 22 of file LayerCollector.h.

Constructor & Destructor Documentation

LayerCollector::LayerCollector ( NavigationSchool const *  aSchool,
const Propagator aPropagator,
const StartingLayerFinder aFinder,
float  dr,
float  dz 
)
inline

Definition at line 26 of file LayerCollector.h.

31  : theSchool(aSchool), thePropagator(aPropagator), theStartingLayerFinder(aFinder), theDeltaR(dr), theDeltaZ(dz) {}
const Propagator * thePropagator
NavigationSchool const * theSchool
const StartingLayerFinder * theStartingLayerFinder
LayerCollector::~LayerCollector ( )
inline

Definition at line 33 of file LayerCollector.h.

References allLayers(), barrelLayers(), and forwardLayers().

33 {}

Member Function Documentation

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

Definition at line 7 of file LayerCollector.cc.

References GeomDetEnumerators::barrel, PbPb_ZMuSkimMuonDPG_cff::deltaR, GeomDetEnumerators::endcap, HLT_2018_cff::finder, 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(), and ~LayerCollector().

7  {
8  vector<const DetLayer*> myLayers;
9 
10  FTS myFts(aFts.parameters());
11 
12  vector<const DetLayer*> nextLayers = finder()->startingLayers(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 GlobalTrajectoryParameters & parameters() const
float deltaR() const
GlobalPoint globalPosition() const
NavigationSchool const * theSchool
const StartingLayerFinder * finder() const
bool rangesIntersect(const Range &a, const Range &b) const
virtual PropagationDirection propagationDirection() const final
Definition: Propagator.h:139
std::pair< float, float > Range
FreeTrajectoryState const * freeState(bool withErrors=true) const
T z() const
Definition: PV3DBase.h:61
float deltaZ() const
const Propagator * propagator() const
const GlobalTrajectoryParameters & globalParameters() const
std::vector< const DetLayer * > nextLayers(const DetLayer &detLayer, Args &&...args) const
TrajectoryStateOnSurface propagate(STA const &state, SUR const &surface) const
Definition: Propagator.h:50
std::vector< const DetLayer * > startingLayers(const FTS &aFts, float dr, float dz) const
FreeTrajectoryState FTS
vector< const BarrelDetLayer * > LayerCollector::barrelLayers ( const FTS aFts) const

Definition at line 54 of file LayerCollector.cc.

References Vispa.Plugins.EdmBrowser.EdmDataAccessor::all().

Referenced by ~LayerCollector().

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 }
std::vector< const BarrelDetLayer * > barrelLayers(const FTS &aFts) const
std::vector< const DetLayer * > allLayers(const FTS &aFts) const
float LayerCollector::deltaR ( ) const
inline

Definition at line 41 of file LayerCollector.h.

References theDeltaR.

41 { return theDeltaR; }
float LayerCollector::deltaZ ( ) const
inline

Definition at line 42 of file LayerCollector.h.

References theDeltaZ.

42 { return theDeltaZ; }
const StartingLayerFinder* LayerCollector::finder ( ) const
inline

Definition at line 40 of file LayerCollector.h.

References theStartingLayerFinder.

40 { return theStartingLayerFinder; }
const StartingLayerFinder * theStartingLayerFinder
vector< const ForwardDetLayer * > LayerCollector::forwardLayers ( const FTS aFts) const

Definition at line 66 of file LayerCollector.cc.

References Vispa.Plugins.EdmBrowser.EdmDataAccessor::all().

Referenced by ~LayerCollector().

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 }
std::vector< const DetLayer * > allLayers(const FTS &aFts) const
const Propagator* LayerCollector::propagator ( ) const
inline

Definition at line 39 of file LayerCollector.h.

References thePropagator.

39 { return thePropagator; }
const Propagator * thePropagator
bool LayerCollector::rangesIntersect ( const Range a,
const Range b 
) const
inlineprivate

Definition at line 51 of file LayerCollector.h.

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

Member Data Documentation

float LayerCollector::theDeltaR
private

Definition at line 48 of file LayerCollector.h.

Referenced by deltaR().

float LayerCollector::theDeltaZ
private

Definition at line 49 of file LayerCollector.h.

Referenced by deltaZ().

const Propagator* LayerCollector::thePropagator
private

Definition at line 46 of file LayerCollector.h.

Referenced by propagator().

NavigationSchool const* LayerCollector::theSchool
private

Definition at line 45 of file LayerCollector.h.

const StartingLayerFinder* LayerCollector::theStartingLayerFinder
private

Definition at line 47 of file LayerCollector.h.

Referenced by finder().