CMS 3D CMS Logo

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

#include <MuRodBarrelLayer.h>

Inheritance diagram for MuRodBarrelLayer:
RodBarrelLayer

Public Member Functions

const std::vector< const GeomDet * > & basicComponents () const override
 
std::vector< DetWithStatecompatibleDets (const TrajectoryStateOnSurface &startingState, const Propagator &prop, const MeasurementEstimator &est) const override
 
const std::vector< const GeometricSearchDet * > & components () const override
 
std::vector< DetGroupgroupedCompatibleDets (const TrajectoryStateOnSurface &startingState, const Propagator &prop, const MeasurementEstimator &est) const override
 
 MuRodBarrelLayer (std::vector< const DetRod * > &rods)
 Constructor, takes ownership of pointers. More...
 
virtual const std::vector< const DetRod * > & rods () const
 Return the vector of rods. More...
 
SubDetector subDetector () const override
 
 ~MuRodBarrelLayer () override
 

Private Member Functions

float xError (const TrajectoryStateOnSurface &tsos, const MeasurementEstimator &est) const
 

Private Attributes

bool isOverlapping
 
std::vector< const GeomDet * > theBasicComps
 
BaseBinFinder< double > * theBinFinder
 
std::vector< const GeometricSearchDet * > theComponents
 
std::vector< const DetRod * > theRods
 

Detailed Description

A cylinder composed of rods. Represents barrel muon DT/RPC stations.

Author
N. Amapane - INFN Torino

Definition at line 17 of file MuRodBarrelLayer.h.

Constructor & Destructor Documentation

◆ MuRodBarrelLayer()

MuRodBarrelLayer::MuRodBarrelLayer ( std::vector< const DetRod * > &  rods)

Constructor, takes ownership of pointers.

Definition at line 25 of file MuRodBarrelLayer.cc.

26  : RodBarrelLayer(false), theRods(rods), theBinFinder(nullptr), isOverlapping(false) {
27  // Sort rods in phi
29 
30  theComponents.reserve(theRods.size());
31  std::copy(theRods.begin(), theRods.end(), back_inserter(theComponents));
32 
33  const std::string metname = "Muon|RecoMuon|RecoMuonDetLayers|MuRodBarrelLayer";
34 
35  // Cache chamber pointers (the basic components_)
36  for (vector<const DetRod*>::const_iterator it = rods.begin(); it != rods.end(); it++) {
37  vector<const GeomDet*> tmp2 = (*it)->basicComponents();
38  theBasicComps.insert(theBasicComps.end(), tmp2.begin(), tmp2.end());
39  }
40 
41  // Initialize the binfinder
43  isOverlapping = bf.isPhiOverlapping();
44 
45  if (bf.isPhiPeriodic()) {
46  theBinFinder = new PeriodicBinFinderInPhi<double>(theRods.front()->position().phi(), theRods.size());
47  } else {
49  }
50 
51  // Compute the layer's surface and bounds (from the components())
53 
54  LogTrace(metname) << "Constructing MuRodBarrelLayer: " << basicComponents().size() << " Dets " << theRods.size()
55  << " Rods "
56  << " R: " << specificSurface().radius() << " Per.: " << bf.isPhiPeriodic()
57  << " Overl.: " << isOverlapping;
58 }

References basicComponents(), filterCSVwithJSON::copy, BarrelDetLayer::initialize(), isOverlapping, PhiBorderFinder::isPhiOverlapping(), PhiBorderFinder::isPhiPeriodic(), LogTrace, metname, precomputed_value_sort(), rods(), AlCaHLTBitMon_QueryRunRegistry::string, theBasicComps, theBinFinder, theComponents, and theRods.

◆ ~MuRodBarrelLayer()

MuRodBarrelLayer::~MuRodBarrelLayer ( )
override

Definition at line 60 of file MuRodBarrelLayer.cc.

60  {
61  delete theBinFinder;
62  for (vector<const DetRod*>::iterator i = theRods.begin(); i < theRods.end(); i++) {
63  delete *i;
64  }
65 }

References mps_fire::i, theBinFinder, and theRods.

Member Function Documentation

◆ basicComponents()

const std::vector<const GeomDet*>& MuRodBarrelLayer::basicComponents ( ) const
inlineoverride

Definition at line 26 of file MuRodBarrelLayer.h.

26 { return theBasicComps; }

References theBasicComps.

Referenced by MuRodBarrelLayer().

◆ compatibleDets()

vector< GeometricSearchDet::DetWithState > MuRodBarrelLayer::compatibleDets ( const TrajectoryStateOnSurface startingState,
const Propagator prop,
const MeasurementEstimator est 
) const
override

Definition at line 67 of file MuRodBarrelLayer.cc.

69  {
70  const std::string metname = "Muon|RecoMuon|RecoMuonDetLayers|MuRodBarrelLayer";
71  vector<DetWithState> result;
72 
73  LogTrace(metname) << "MuRodBarrelLayer::compatibleDets, Cyl R: " << specificSurface().radius()
74  << " TSOS at R= " << startingState.globalPosition().perp()
75  << " phi= " << startingState.globalPosition().phi();
76 
77  pair<bool, TrajectoryStateOnSurface> compat = compatible(startingState, prop, est);
78  if (!compat.first) {
79  LogTrace(metname) << " MuRodBarrelLayer::compatibleDets: not compatible"
80  << " (should not have been selected!)";
81  return vector<DetWithState>();
82  }
83 
84  TrajectoryStateOnSurface& tsos = compat.second;
85 
86  LogTrace(metname) << " MuRodBarrelLayer::compatibleDets, reached layer at: " << tsos.globalPosition()
87  << " R = " << tsos.globalPosition().perp() << " phi = " << tsos.globalPosition().phi();
88 
89  int closest = theBinFinder->binIndex(tsos.globalPosition().phi());
90  const DetRod* closestRod = theRods[closest];
91 
92  // Check the closest rod
93  LogTrace(metname) << " MuRodBarrelLayer::compatibleDets, closestRod: " << closest
94  << " phi : " << closestRod->surface().position().phi()
95  << " FTS phi: " << tsos.globalPosition().phi();
96 
97  result = closestRod->compatibleDets(tsos, prop, est);
98 
99  int nclosest = result.size(); // Debug counter
100 
101  bool checknext = false;
102  double dist;
103 
104  if (!result.empty()) {
105  // Check if the track go outside closest rod, then look for closest.
106  TrajectoryStateOnSurface& predictedState = result.front().second;
107  float xErr = xError(predictedState, est);
108  float halfWid = closestRod->surface().bounds().width() / 2.;
109  dist = predictedState.localPosition().x();
110 
111  // If the layer is overlapping, additionally reduce halfWid by 10%
112  // to account for overlap.
113  // FIXME: should we account for the real amount of overlap?
114  if (isOverlapping)
115  halfWid *= 0.9;
116 
117  if (fabs(dist) + xErr > halfWid) {
118  checknext = true;
119  }
120  } else { // Rod is not compatible
121  //FIXME: Usually next cannot be either. Implement proper logic.
122  // (in general at least one rod should be when this method is called by
123  // compatibleDets() which calls compatible())
124  checknext = true;
125 
126  // Look for the next-to closest in phi.
127  // Note Geom::Phi, subtraction is pi-border-safe
128  if (tsos.globalPosition().phi() - closestRod->surface().position().phi() > 0.) {
129  dist = -1.;
130  } else {
131  dist = +1.;
132  }
133 
134  LogTrace(metname) << " MuRodBarrelLayer::fastCompatibleDets, none on closest rod!";
135  }
136 
137  if (checknext) {
138  int next;
139  if (dist < 0.)
140  next = closest + 1;
141  else
142  next = closest - 1;
143 
144  next = theBinFinder->binIndex(next); // Bin Periodicity
145  const DetRod* nextRod = theRods[next];
146 
147  LogTrace(metname) << " MuRodBarrelLayer::fastCompatibleDets, next-to closest"
148  << " rod: " << next << " dist " << dist << " phi : " << nextRod->surface().position().phi()
149  << " FTS phi: " << tsos.globalPosition().phi();
150 
151  vector<DetWithState> nextRodDets = nextRod->compatibleDets(tsos, prop, est);
152  result.insert(result.end(), nextRodDets.begin(), nextRodDets.end());
153  }
154 
155  LogTrace(metname) << " MuRodBarrelLayer::fastCompatibleDets: found: " << result.size()
156  << " on closest: " << nclosest << " # checked rods: " << 1 + int(checknext);
157 
158  return result;
159 }

References BaseBinFinder< T >::binIndex(), Surface::bounds(), GeometricSearchDet::compatibleDets(), TrajectoryStateOnSurface::globalPosition(), createfilelist::int, isOverlapping, TrajectoryStateOnSurface::localPosition(), LogTrace, metname, GetRecoTauVFromDQM_MC_cff::next, PV3DBase< T, PVType, FrameType >::perp(), PV3DBase< T, PVType, FrameType >::phi(), GloballyPositioned< T >::position(), mps_fire::result, AlCaHLTBitMon_QueryRunRegistry::string, DetRod::surface(), theBinFinder, theRods, Bounds::width(), PV3DBase< T, PVType, FrameType >::x(), and xError().

◆ components()

const vector< const GeometricSearchDet * > & MuRodBarrelLayer::components ( ) const
override

Definition at line 171 of file MuRodBarrelLayer.cc.

171 { return theComponents; }

References theComponents.

◆ groupedCompatibleDets()

vector< DetGroup > MuRodBarrelLayer::groupedCompatibleDets ( const TrajectoryStateOnSurface startingState,
const Propagator prop,
const MeasurementEstimator est 
) const
override

Definition at line 161 of file MuRodBarrelLayer.cc.

163  {
164  // FIXME should return only 1 group
165  cout << "dummy implementation of MuRodBarrelLayer::groupedCompatibleDets()" << endl;
166  return vector<DetGroup>();
167 }

References gather_cfg::cout.

◆ rods()

virtual const std::vector<const DetRod*>& MuRodBarrelLayer::rods ( ) const
inlinevirtual

Return the vector of rods.

Definition at line 44 of file MuRodBarrelLayer.h.

44 { return theRods; }

References theRods.

Referenced by MuRodBarrelLayer().

◆ subDetector()

GeomDetEnumerators::SubDetector MuRodBarrelLayer::subDetector ( ) const
override

Definition at line 169 of file MuRodBarrelLayer.cc.

169 { return theBasicComps.front()->subDetector(); }

References theBasicComps.

◆ xError()

float MuRodBarrelLayer::xError ( const TrajectoryStateOnSurface tsos,
const MeasurementEstimator est 
) const
private

Definition at line 173 of file MuRodBarrelLayer.cc.

173  {
174  const float nSigmas = 3.f;
175  if (tsos.hasError()) {
176  return nSigmas * sqrt(tsos.localError().positionError().xx());
177  } else
178  return nSigmas * 0.5;
179 }

References TrajectoryStateOnSurface::hasError(), TrajectoryStateOnSurface::localError(), LocalTrajectoryError::positionError(), mathSSE::sqrt(), and LocalError::xx().

Referenced by compatibleDets().

Member Data Documentation

◆ isOverlapping

bool MuRodBarrelLayer::isOverlapping
private

Definition at line 53 of file MuRodBarrelLayer.h.

Referenced by compatibleDets(), and MuRodBarrelLayer().

◆ theBasicComps

std::vector<const GeomDet*> MuRodBarrelLayer::theBasicComps
private

Definition at line 51 of file MuRodBarrelLayer.h.

Referenced by basicComponents(), MuRodBarrelLayer(), and subDetector().

◆ theBinFinder

BaseBinFinder<double>* MuRodBarrelLayer::theBinFinder
private

Definition at line 52 of file MuRodBarrelLayer.h.

Referenced by compatibleDets(), MuRodBarrelLayer(), and ~MuRodBarrelLayer().

◆ theComponents

std::vector<const GeometricSearchDet*> MuRodBarrelLayer::theComponents
private

Definition at line 50 of file MuRodBarrelLayer.h.

Referenced by components(), and MuRodBarrelLayer().

◆ theRods

std::vector<const DetRod*> MuRodBarrelLayer::theRods
private

Definition at line 49 of file MuRodBarrelLayer.h.

Referenced by compatibleDets(), MuRodBarrelLayer(), rods(), and ~MuRodBarrelLayer().

MuRodBarrelLayer::xError
float xError(const TrajectoryStateOnSurface &tsos, const MeasurementEstimator &est) const
Definition: MuRodBarrelLayer.cc:173
MuRodBarrelLayer::theComponents
std::vector< const GeometricSearchDet * > theComponents
Definition: MuRodBarrelLayer.h:50
mps_fire.i
i
Definition: mps_fire.py:355
Bounds::width
virtual float width() const =0
PhiBorderFinder
Definition: PhiBorderFinder.h:27
filterCSVwithJSON.copy
copy
Definition: filterCSVwithJSON.py:36
LocalTrajectoryError::positionError
LocalError positionError() const
Definition: LocalTrajectoryError.h:81
PV3DBase::x
T x() const
Definition: PV3DBase.h:59
TrajectoryStateOnSurface::globalPosition
GlobalPoint globalPosition() const
Definition: TrajectoryStateOnSurface.h:65
gather_cfg.cout
cout
Definition: gather_cfg.py:144
MuRodBarrelLayer::theRods
std::vector< const DetRod * > theRods
Definition: MuRodBarrelLayer.h:49
BarrelDetLayer::initialize
virtual void initialize()
Definition: BarrelDetLayer.cc:18
GeometricSearchDet::compatibleDets
virtual std::vector< DetWithState > compatibleDets(const TrajectoryStateOnSurface &startingState, const Propagator &prop, const MeasurementEstimator &est) const
Definition: GeometricSearchDet.cc:35
TrajectoryStateOnSurface
Definition: TrajectoryStateOnSurface.h:16
LocalError::xx
float xx() const
Definition: LocalError.h:22
TrajectoryStateOnSurface::hasError
bool hasError() const
Definition: TrajectoryStateOnSurface.h:56
DetRod
Definition: DetRod.h:13
mathSSE::sqrt
T sqrt(T t)
Definition: SSEVec.h:19
Surface::bounds
const Bounds & bounds() const
Definition: Surface.h:87
AlCaHLTBitMon_QueryRunRegistry.string
string
Definition: AlCaHLTBitMon_QueryRunRegistry.py:256
MuRodBarrelLayer::rods
virtual const std::vector< const DetRod * > & rods() const
Return the vector of rods.
Definition: MuRodBarrelLayer.h:44
RodBarrelLayer
BarrelDetLayer RodBarrelLayer
Definition: RodBarrelLayer.h:13
TrajectoryStateOnSurface::localPosition
LocalPoint localPosition() const
Definition: TrajectoryStateOnSurface.h:74
DetRod::surface
const BoundSurface & surface() const final
The surface of the GeometricSearchDet.
Definition: DetRod.h:19
createfilelist.int
int
Definition: createfilelist.py:10
MuRodBarrelLayer::basicComponents
const std::vector< const GeomDet * > & basicComponents() const override
Definition: MuRodBarrelLayer.h:26
geomsort::ExtractPhi
Definition: GeometricSorting.h:45
GloballyPositioned::position
const PositionType & position() const
Definition: GloballyPositioned.h:36
MuRodBarrelLayer::theBasicComps
std::vector< const GeomDet * > theBasicComps
Definition: MuRodBarrelLayer.h:51
PeriodicBinFinderInPhi
Definition: MagBLayer.h:22
GeneralBinFinderInPhi
Definition: GeneralBinFinderInPhi.h:18
MuRodBarrelLayer::theBinFinder
BaseBinFinder< double > * theBinFinder
Definition: MuRodBarrelLayer.h:52
mps_fire.result
result
Definition: mps_fire.py:303
LogTrace
#define LogTrace(id)
Definition: MessageLogger.h:671
precomputed_value_sort
void precomputed_value_sort(RandomAccessIterator begin, RandomAccessIterator end, const Extractor &extr, const Compare &comp)
Definition: precomputed_value_sort.h:17
TrajectoryStateOnSurface::localError
const LocalTrajectoryError & localError() const
Definition: TrajectoryStateOnSurface.h:77
PV3DBase::perp
T perp() const
Definition: PV3DBase.h:69
PV3DBase::phi
Geom::Phi< T > phi() const
Definition: PV3DBase.h:66
MuRodBarrelLayer::isOverlapping
bool isOverlapping
Definition: MuRodBarrelLayer.h:53
BaseBinFinder::binIndex
virtual int binIndex(T pos) const =0
Return the index of bin at given position.
GetRecoTauVFromDQM_MC_cff.next
next
Definition: GetRecoTauVFromDQM_MC_cff.py:31
metname
const std::string metname
Definition: MuonSeedOrcaPatternRecognition.cc:43