CMS 3D CMS Logo

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

#include <MTDRingForwardLayer.h>

Inheritance diagram for MTDRingForwardLayer:
RingedForwardLayer

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
 
 MTDRingForwardLayer (const std::vector< const ForwardDetRing * > &rings)
 Constructor, takes ownership of pointers. More...
 
virtual const std::vector< const ForwardDetRing * > & rings () const
 Return the vector of rings. More...
 
SubDetector subDetector () const override
 
 ~MTDRingForwardLayer () override
 

Private Attributes

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

Detailed Description

A plane composed of disks (MTDRingForwardDisk). Represents ETL.

Author
L. Gray - FNAL

Definition at line 18 of file MTDRingForwardLayer.h.

Constructor & Destructor Documentation

MTDRingForwardLayer::MTDRingForwardLayer ( const std::vector< const ForwardDetRing * > &  rings)

Constructor, takes ownership of pointers.

Definition at line 24 of file MTDRingForwardLayer.cc.

References basicComponents(), isOverlapping, RBorderFinder::isROverlapping(), RBorderFinder::isRPeriodic(), LogTrace, SiStripPI::max, metname, min(), makeMuonMisalignmentScenario::rot, AlCaHLTBitMon_QueryRunRegistry::string, theBasicComps, theBinFinder, and theRings.

25  : RingedForwardLayer(false),
26  theRings(rings),
27  theComponents(theRings.begin(), theRings.end()),
28  theBinFinder(nullptr),
29  isOverlapping(false) {
30  const std::string metname = "MTD|RecoMTD|RecoMTDDetLayers|MTDRingForwardLayer";
31 
32  // Initial values for R and Z bounds
33  float theRmin = rings.front()->basicComponents().front()->position().perp();
34  float theRmax = theRmin;
35  float theZmin = rings.front()->position().z();
36  float theZmax = theZmin;
37 
38  // Cache chamber pointers (the basic components_)
39  // and find extension in R and Z
40  for (vector<const ForwardDetRing*>::const_iterator it = rings.begin(); it != rings.end(); it++) {
41  vector<const GeomDet*> tmp2 = (*it)->basicComponents();
42  theBasicComps.insert(theBasicComps.end(), tmp2.begin(), tmp2.end());
43 
44  theRmin = min(theRmin, (*it)->specificSurface().innerRadius());
45  theRmax = max(theRmax, (*it)->specificSurface().outerRadius());
46  float halfThick = (*it)->surface().bounds().thickness() / 2.;
47  float zCenter = (*it)->surface().position().z();
48  theZmin = min(theZmin, zCenter - halfThick);
49  theZmax = max(theZmax, zCenter + halfThick);
50  }
51 
53  isOverlapping = bf.isROverlapping();
55 
56  // Build surface
57 
58  float zPos = (theZmax + theZmin) / 2.;
59  PositionType pos(0., 0., zPos);
61 
62  setSurface(new BoundDisk(pos, rot, new SimpleDiskBounds(theRmin, theRmax, theZmin - zPos, theZmax - zPos)));
63 
64  LogTrace(metname) << "Constructing MTDRingForwardLayer: " << basicComponents().size() << " Dets " << theRings.size()
65  << " Rings "
66  << " Z: " << specificSurface().position().z() << " R1: " << specificSurface().innerRadius()
67  << " R2: " << specificSurface().outerRadius() << " Per.: " << bf.isRPeriodic()
68  << " Overl.: " << bf.isROverlapping();
69 }
TkRotation< Scalar > RotationType
Definition: Definitions.h:27
virtual const std::vector< const ForwardDetRing * > & rings() const
Return the vector of rings.
const std::vector< const GeomDet * > & basicComponents() const override
ForwardDetLayer RingedForwardLayer
const std::string metname
std::vector< const ForwardDetRing * > theRings
Point3DBase< Scalar, GlobalTag > PositionType
Definition: Definitions.h:28
BaseBinFinder< double > * theBinFinder
T min(T a, T b)
Definition: MathUtil.h:58
#define LogTrace(id)
std::vector< const GeometricSearchDet * > theComponents
Disk BoundDisk
Definition: BoundDisk.h:54
std::vector< const GeomDet * > theBasicComps
MTDRingForwardLayer::~MTDRingForwardLayer ( )
override

Definition at line 71 of file MTDRingForwardLayer.cc.

References mps_fire::i, theBinFinder, and theRings.

71  {
72  delete theBinFinder;
73  for (vector<const ForwardDetRing*>::iterator i = theRings.begin(); i < theRings.end(); i++) {
74  delete *i;
75  }
76 }
std::vector< const ForwardDetRing * > theRings
BaseBinFinder< double > * theBinFinder

Member Function Documentation

const std::vector<const GeomDet*>& MTDRingForwardLayer::basicComponents ( ) const
inlineoverride
vector< GeometricSearchDet::DetWithState > MTDRingForwardLayer::compatibleDets ( const TrajectoryStateOnSurface startingState,
const Propagator prop,
const MeasurementEstimator est 
) const
override

Definition at line 78 of file MTDRingForwardLayer.cc.

References BaseBinFinder< T >::binIndex(), GeometricSearchDet::compatibleDets(), TrajectoryStateOnSurface::globalPosition(), TrajectoryStateOnSurface::hasError(), TrajectoryStateOnSurface::localError(), LogTrace, metname, PV3DBase< T, PVType, FrameType >::perp(), LocalTrajectoryError::positionError(), mps_fire::result, ForwardDetRing::specificSurface(), mathSSE::sqrt(), AlCaHLTBitMon_QueryRunRegistry::string, theBinFinder, theRings, toLocal(), LocalError::xx(), and LocalError::yy().

Referenced by basicComponents(), and MTDRingForwardDoubleLayer::groupedCompatibleDets().

79  {
80  const std::string metname = "MTD|RecoMTD|RecoMTDDetLayers|MTDRingForwardLayer";
81  vector<DetWithState> result;
82 
83  LogTrace(metname) << "MTDRingForwardLayer::compatibleDets,"
84  << " R1 " << specificSurface().innerRadius() << " R2: " << specificSurface().outerRadius()
85  << " FTS at R: " << startingState.globalPosition().perp();
86 
87  pair<bool, TrajectoryStateOnSurface> compat = compatible(startingState, prop, est);
88 
89  if (!compat.first) {
90  LogTrace(metname) << " MTDRingForwardLayer::compatibleDets: not compatible"
91  << " (should not have been selected!)";
92  return result;
93  }
94 
95  TrajectoryStateOnSurface& tsos = compat.second;
96 
97  int closest = theBinFinder->binIndex(tsos.globalPosition().perp());
98  const ForwardDetRing* closestRing = theRings[closest];
99 
100  // Check the closest ring
101 
102  LogTrace(metname) << " MTDRingForwardLayer::fastCompatibleDets, closestRing: " << closest << " R1 "
103  << closestRing->specificSurface().innerRadius()
104  << " R2: " << closestRing->specificSurface().outerRadius()
105  << " FTS R: " << tsos.globalPosition().perp();
106  if (tsos.hasError()) {
107  LogTrace(metname) << " sR: " << sqrt(tsos.localError().positionError().yy())
108  << " sX: " << sqrt(tsos.localError().positionError().xx());
109  }
110  LogTrace(metname) << endl;
111 
112  result = closestRing->compatibleDets(tsos, prop, est);
113 
114 #ifdef EDM_ML_DEBUG
115  int nclosest = result.size();
116  int nnextdet = 0; // MDEBUG counters
117 #endif
118 
119  //FIXME: if closest is not compatible next cannot be either?
120 
121  // Use state on layer surface. Note that local coordinates and errors
122  // are the same on the layer and on all rings surfaces, since
123  // all BoundDisks are centered in 0,0 and have the same rotation.
124  // CAVEAT: if the rings are not at the same Z, the local position and error
125  // will be "Z-projected" to the rings. This is a fairly good approximation.
126  // However in this case additional propagation will be done when calling
127  // compatibleDets.
128  GlobalPoint startPos = tsos.globalPosition();
129  LocalPoint nextPos(surface().toLocal(startPos));
130 
131  for (unsigned int idet = closest + 1; idet < theRings.size(); idet++) {
132  bool inside = false;
133  if (tsos.hasError()) {
134  inside = theRings[idet]->specificSurface().bounds().inside(nextPos, tsos.localError().positionError());
135  } else {
136  inside = theRings[idet]->specificSurface().bounds().inside(nextPos);
137  }
138  if (inside) {
139  LogTrace(metname) << " MTDRingForwardLayer::fastCompatibleDets:NextRing" << idet << " R1 "
140  << theRings[idet]->specificSurface().innerRadius()
141  << " R2: " << theRings[idet]->specificSurface().outerRadius() << " FTS R " << nextPos.perp();
142 #ifdef EDM_ML_DEBUG
143  nnextdet++;
144 #endif
145  vector<DetWithState> nextRodDets = theRings[idet]->compatibleDets(tsos, prop, est);
146  if (!nextRodDets.empty()) {
147  result.insert(result.end(), nextRodDets.begin(), nextRodDets.end());
148  } else {
149  break;
150  }
151  }
152  }
153 
154  for (int idet = closest - 1; idet >= 0; idet--) {
155  bool inside = false;
156  if (tsos.hasError()) {
157  inside = theRings[idet]->specificSurface().bounds().inside(nextPos, tsos.localError().positionError());
158  } else {
159  inside = theRings[idet]->specificSurface().bounds().inside(nextPos);
160  }
161  if (inside) {
162  LogTrace(metname) << " MTDRingForwardLayer::fastCompatibleDets:PreviousRing:" << idet << " R1 "
163  << theRings[idet]->specificSurface().innerRadius()
164  << " R2: " << theRings[idet]->specificSurface().outerRadius() << " FTS R " << nextPos.perp();
165 #ifdef EDM_ML_DEBUG
166  nnextdet++;
167 #endif
168  vector<DetWithState> nextRodDets = theRings[idet]->compatibleDets(tsos, prop, est);
169  if (!nextRodDets.empty()) {
170  result.insert(result.end(), nextRodDets.begin(), nextRodDets.end());
171  } else {
172  break;
173  }
174  }
175  }
176 
177 #ifdef EDM_ML_DEBUG
178  LogTrace(metname) << " MTDRingForwardLayer::fastCompatibleDets: found: " << result.size()
179  << " on closest: " << nclosest << " # checked rings: " << 1 + nnextdet;
180 #endif
181 
182  return result;
183 }
float xx() const
Definition: LocalError.h:22
T perp() const
Definition: PV3DBase.h:69
virtual int binIndex(T pos) const =0
Return the index of bin at given position.
const std::string metname
std::vector< const ForwardDetRing * > theRings
GlobalPoint globalPosition() const
LocalVector toLocal(const reco::Track::Vector &v, const Surface &s)
LocalError positionError() const
virtual std::vector< DetWithState > compatibleDets(const TrajectoryStateOnSurface &startingState, const Propagator &prop, const MeasurementEstimator &est) const
float yy() const
Definition: LocalError.h:24
T sqrt(T t)
Definition: SSEVec.h:19
BaseBinFinder< double > * theBinFinder
const LocalTrajectoryError & localError() const
#define LogTrace(id)
const BoundDisk & specificSurface() const
Return the ring surface as a BoundDisk.
const vector< const GeometricSearchDet * > & MTDRingForwardLayer::components ( ) const
override

Definition at line 197 of file MTDRingForwardLayer.cc.

References theComponents.

Referenced by basicComponents().

197 { return theComponents; }
std::vector< const GeometricSearchDet * > theComponents
vector< DetGroup > MTDRingForwardLayer::groupedCompatibleDets ( const TrajectoryStateOnSurface startingState,
const Propagator prop,
const MeasurementEstimator est 
) const
override

Definition at line 185 of file MTDRingForwardLayer.cc.

References gather_cfg::cout.

Referenced by basicComponents().

187  {
188  // FIXME should return only 1 group
189  cout << "dummy implementation of MTDRingForwardLayer::groupedCompatibleDets()" << endl;
190  return vector<DetGroup>();
191 }
virtual const std::vector<const ForwardDetRing*>& MTDRingForwardLayer::rings ( ) const
inlinevirtual

Return the vector of rings.

Definition at line 45 of file MTDRingForwardLayer.h.

References theRings.

Referenced by MTDRingForwardDoubleLayer::isCrack().

45 { return theRings; }
std::vector< const ForwardDetRing * > theRings
GeomDetEnumerators::SubDetector MTDRingForwardLayer::subDetector ( ) const
override

Definition at line 193 of file MTDRingForwardLayer.cc.

References theBasicComps.

Referenced by basicComponents(), and MTDRingForwardDoubleLayer::subDetector().

193  {
194  return theBasicComps.front()->subDetector();
195 }
std::vector< const GeomDet * > theBasicComps

Member Data Documentation

bool MTDRingForwardLayer::isOverlapping
private

Definition at line 52 of file MTDRingForwardLayer.h.

Referenced by MTDRingForwardLayer().

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

Definition at line 50 of file MTDRingForwardLayer.h.

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

BaseBinFinder<double>* MTDRingForwardLayer::theBinFinder
private

Definition at line 51 of file MTDRingForwardLayer.h.

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

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

Definition at line 49 of file MTDRingForwardLayer.h.

Referenced by components().

std::vector<const ForwardDetRing*> MTDRingForwardLayer::theRings
private