CMS 3D CMS Logo

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

#include <DirectMTDNavigation.h>

Public Member Functions

DirectMTDNavigationclone () const
 
std::vector< const DetLayer * > compatibleEndcapLayers (const FreeTrajectoryState &fts, PropagationDirection timeDirection) const
 
std::vector< const DetLayer * > compatibleLayers (const FreeTrajectoryState &fts, PropagationDirection timeDirection) const
 
 DirectMTDNavigation (const edm::ESHandle< MTDDetLayerGeometry > &)
 
 DirectMTDNavigation (const edm::ESHandle< MTDDetLayerGeometry > &, const edm::ParameterSet &)
 
 ~DirectMTDNavigation ()
 

Private Member Functions

bool checkCompatible (const FreeTrajectoryState &fts, const BarrelDetLayer *) const
 
bool checkCompatible (const FreeTrajectoryState &fts, const ForwardDetLayer *) const
 
void inOutBackward (const FreeTrajectoryState &, std::vector< const DetLayer * > &) const
 
void inOutBarrel (const FreeTrajectoryState &, std::vector< const DetLayer * > &) const
 
void inOutForward (const FreeTrajectoryState &, std::vector< const DetLayer * > &) const
 
void outInBackward (const FreeTrajectoryState &, std::vector< const DetLayer * > &) const
 
void outInBarrel (const FreeTrajectoryState &, std::vector< const DetLayer * > &) const
 
void outInForward (const FreeTrajectoryState &, std::vector< const DetLayer * > &) const
 
bool outward (const FreeTrajectoryState &fts) const
 

Private Attributes

float epsilon_
 
bool theBarrelFlag
 
bool theEndcapFlag
 
edm::ESHandle< MTDDetLayerGeometrytheMTDDetLayerGeometry
 

Detailed Description

Definition at line 20 of file DirectMTDNavigation.h.

Constructor & Destructor Documentation

DirectMTDNavigation::DirectMTDNavigation ( const edm::ESHandle< MTDDetLayerGeometry > &  mtdLayout)

Definition at line 19 of file DirectMTDNavigation.cc.

Referenced by clone().

20  : theMTDDetLayerGeometry(mtdLayout), epsilon_(100.), theEndcapFlag(true), theBarrelFlag(true) {}
edm::ESHandle< MTDDetLayerGeometry > theMTDDetLayerGeometry
DirectMTDNavigation::DirectMTDNavigation ( const edm::ESHandle< MTDDetLayerGeometry > &  mtdLayout,
const edm::ParameterSet par 
)

Definition at line 22 of file DirectMTDNavigation.cc.

24  : theMTDDetLayerGeometry(mtdLayout),
25  epsilon_(100.),
26  theEndcapFlag(par.getParameter<bool>("Endcap")),
27  theBarrelFlag(par.getParameter<bool>("Barrel")) {}
T getParameter(std::string const &) const
edm::ESHandle< MTDDetLayerGeometry > theMTDDetLayerGeometry
DirectMTDNavigation::~DirectMTDNavigation ( )
inline

Member Function Documentation

bool DirectMTDNavigation::checkCompatible ( const FreeTrajectoryState fts,
const BarrelDetLayer dl 
) const
private

Definition at line 208 of file DirectMTDNavigation.cc.

References epsilon_, FreeTrajectoryState::momentum(), outward(), PV3DBase< T, PVType, FrameType >::perp(), FreeTrajectoryState::position(), CosmicsPD_Skims::radius, submit::rm, slope, BarrelDetLayer::specificSurface(), PV3DBase< T, PVType, FrameType >::z(), and HLTMuonOfflineAnalyzer_cfi::z0.

Referenced by inOutBackward(), inOutBarrel(), inOutForward(), outInBackward(), outInBarrel(), outInForward(), and ~DirectMTDNavigation().

208  {
209  float z0 = fts.position().z();
210  float r0 = fts.position().perp();
211  float zm = fts.momentum().z();
212  float rm = fts.momentum().perp();
213  float slope = zm / rm;
214  if (!outward(fts))
215  slope = -slope;
216  const BoundCylinder& bc = dl->specificSurface();
217  float radius = bc.radius();
218  float length = bc.bounds().length() / 2.;
219 
220  float z1 = slope * (radius - r0) + z0;
221  return (fabs(z1) <= fabs(length) + epsilon_);
222 }
bool outward(const FreeTrajectoryState &fts) const
T perp() const
Definition: PV3DBase.h:69
static const double slope[3]
virtual const BoundCylinder & specificSurface() const final
Extension of the interface.
T z() const
Definition: PV3DBase.h:61
GlobalVector momentum() const
GlobalPoint position() const
rm
Definition: submit.py:77
bool DirectMTDNavigation::checkCompatible ( const FreeTrajectoryState fts,
const ForwardDetLayer dl 
) const
private

Definition at line 224 of file DirectMTDNavigation.cc.

References epsilon_, FreeTrajectoryState::momentum(), outward(), PV3DBase< T, PVType, FrameType >::perp(), FreeTrajectoryState::position(), diffTwoXMLs::r1, submit::rm, slope, ForwardDetLayer::specificSurface(), z, PV3DBase< T, PVType, FrameType >::z(), and HLTMuonOfflineAnalyzer_cfi::z0.

224  {
225  float z0 = fts.position().z();
226  float r0 = fts.position().perp();
227  float zm = fts.momentum().z();
228  float rm = fts.momentum().perp();
229  float slope = rm / zm;
230 
231  if (!outward(fts))
232  slope = -slope;
233 
234  const BoundDisk& bd = dl->specificSurface();
235 
236  float outRadius = bd.outerRadius();
237  float inRadius = bd.innerRadius();
238  float z = bd.position().z();
239 
240  float r1 = slope * (z - z0) + r0;
241  return (r1 >= inRadius - epsilon_ && r1 <= outRadius + epsilon_);
242 }
bool outward(const FreeTrajectoryState &fts) const
T perp() const
Definition: PV3DBase.h:69
static const double slope[3]
T z() const
Definition: PV3DBase.h:61
GlobalVector momentum() const
GlobalPoint position() const
virtual const BoundDisk & specificSurface() const final
rm
Definition: submit.py:77
DirectMTDNavigation* DirectMTDNavigation::clone ( void  ) const
inline

Definition at line 27 of file DirectMTDNavigation.h.

References DirectMTDNavigation().

27 { return new DirectMTDNavigation(*this); }
DirectMTDNavigation(const edm::ESHandle< MTDDetLayerGeometry > &)
vector< const DetLayer * > DirectMTDNavigation::compatibleEndcapLayers ( const FreeTrajectoryState fts,
PropagationDirection  timeDirection 
) const

Definition at line 93 of file DirectMTDNavigation.cc.

References alongMomentum, inOutForward(), FreeTrajectoryState::momentum(), oppositeToMomentum, outInBackward(), convertSQLitetoXML_cfg::output, groupFilesInBlocks::reverse, and PV3DBase< T, PVType, FrameType >::z().

Referenced by ~DirectMTDNavigation().

94  {
95  float zm = fts.momentum().z();
96 
97  vector<const DetLayer*> output;
98 
99  // collect all endcap layers on 2 sides
100  outInBackward(fts, output);
101  inOutForward(fts, output);
102 
103  // check direction FTS to get a correct order of DetLayers
104  if ((zm > 0 && dir == oppositeToMomentum) || (zm < 0 && dir == alongMomentum))
105  std::reverse(output.begin(), output.end());
106 
107  return output;
108 }
void outInBackward(const FreeTrajectoryState &, std::vector< const DetLayer * > &) const
void inOutForward(const FreeTrajectoryState &, std::vector< const DetLayer * > &) const
T z() const
Definition: PV3DBase.h:61
GlobalVector momentum() const
vector< const DetLayer * > DirectMTDNavigation::compatibleLayers ( const FreeTrajectoryState fts,
PropagationDirection  timeDirection 
) const

Definition at line 30 of file DirectMTDNavigation.cc.

References inOutBackward(), inOutBarrel(), inOutForward(), FreeTrajectoryState::momentum(), oppositeToMomentum, outInBackward(), outInBarrel(), outInForward(), convertSQLitetoXML_cfg::output, outward(), FreeTrajectoryState::position(), groupFilesInBlocks::reverse, theBarrelFlag, theEndcapFlag, PV3DBase< T, PVType, FrameType >::z(), and HLTMuonOfflineAnalyzer_cfi::z0.

Referenced by ~DirectMTDNavigation().

31  {
32  float z0 = fts.position().z();
33  float zm = fts.momentum().z();
34 
35  bool inOut = outward(fts);
36 
37  vector<const DetLayer*> output;
38 
39  // check direction and position of FTS to get a correct order of DetLayers
40 
41  if (inOut) {
42  if ((zm * z0) >= 0) {
43  if (theBarrelFlag)
44  inOutBarrel(fts, output);
45  if (theEndcapFlag) {
46  if (z0 >= 0)
47  inOutForward(fts, output);
48  else
49  inOutBackward(fts, output);
50  }
51  } else {
52  if (theEndcapFlag) {
53  if (z0 >= 0)
54  outInForward(fts, output);
55  else
56  outInBackward(fts, output);
57  }
58  if (theBarrelFlag)
59  inOutBarrel(fts, output);
60  }
61  } else {
62  if ((zm * z0) >= 0) {
63  if (theBarrelFlag)
64  outInBarrel(fts, output);
65  if (theEndcapFlag) {
66  if (z0 >= 0)
67  inOutForward(fts, output);
68  else
69  inOutBackward(fts, output);
70  }
71  } else {
72  if (theEndcapFlag) {
73  if (z0 >= 0)
74  outInForward(fts, output);
75  else
76  outInBackward(fts, output);
77  }
78  if (theBarrelFlag)
79  outInBarrel(fts, output);
80  }
81  }
82 
83  if (dir == oppositeToMomentum)
84  std::reverse(output.begin(), output.end());
85 
86  return output;
87 }
bool outward(const FreeTrajectoryState &fts) const
void outInForward(const FreeTrajectoryState &, std::vector< const DetLayer * > &) const
void outInBackward(const FreeTrajectoryState &, std::vector< const DetLayer * > &) const
void inOutForward(const FreeTrajectoryState &, std::vector< const DetLayer * > &) const
T z() const
Definition: PV3DBase.h:61
GlobalVector momentum() const
GlobalPoint position() const
void inOutBarrel(const FreeTrajectoryState &, std::vector< const DetLayer * > &) const
void outInBarrel(const FreeTrajectoryState &, std::vector< const DetLayer * > &) const
void inOutBackward(const FreeTrajectoryState &, std::vector< const DetLayer * > &) const
void DirectMTDNavigation::inOutBackward ( const FreeTrajectoryState fts,
std::vector< const DetLayer * > &  output 
) const
private

Definition at line 176 of file DirectMTDNavigation.cc.

References MTDDetLayerGeometry::allBackwardLayers(), checkCompatible(), generateEDF::cont, and theMTDDetLayerGeometry.

Referenced by compatibleLayers(), and ~DirectMTDNavigation().

176  {
177  bool cont = false;
178  const vector<const DetLayer*>& backward = theMTDDetLayerGeometry->allBackwardLayers();
179 
180  for (vector<const DetLayer*>::const_iterator iter_E = backward.begin(); iter_E != backward.end(); iter_E++) {
181  if (cont)
182  output.push_back((*iter_E));
183  else if (checkCompatible(fts, dynamic_cast<const ForwardDetLayer*>(*iter_E))) {
184  output.push_back((*iter_E));
185  cont = true;
186  }
187  }
188 }
const std::vector< const DetLayer * > & allBackwardLayers() const
return all endcap layers
bool checkCompatible(const FreeTrajectoryState &fts, const BarrelDetLayer *) const
edm::ESHandle< MTDDetLayerGeometry > theMTDDetLayerGeometry
cont
load Luminosity info ##
Definition: generateEDF.py:629
void DirectMTDNavigation::inOutBarrel ( const FreeTrajectoryState fts,
std::vector< const DetLayer * > &  output 
) const
private

Definition at line 110 of file DirectMTDNavigation.cc.

References MTDDetLayerGeometry::allBarrelLayers(), Reference_intrackfit_cff::barrel, checkCompatible(), generateEDF::cont, and theMTDDetLayerGeometry.

Referenced by compatibleLayers(), and ~DirectMTDNavigation().

110  {
111  bool cont = false;
112  const vector<const DetLayer*>& barrel = theMTDDetLayerGeometry->allBarrelLayers();
113 
114  for (vector<const DetLayer*>::const_iterator iter_B = barrel.begin(); iter_B != barrel.end(); iter_B++) {
115  if (cont)
116  output.push_back((*iter_B));
117  else if (checkCompatible(fts, dynamic_cast<const BarrelDetLayer*>(*iter_B))) {
118  output.push_back((*iter_B));
119  cont = true;
120  }
121  }
122 }
bool checkCompatible(const FreeTrajectoryState &fts, const BarrelDetLayer *) const
edm::ESHandle< MTDDetLayerGeometry > theMTDDetLayerGeometry
const std::vector< const DetLayer * > & allBarrelLayers() const
return all barrel layers
cont
load Luminosity info ##
Definition: generateEDF.py:629
void DirectMTDNavigation::inOutForward ( const FreeTrajectoryState fts,
std::vector< const DetLayer * > &  output 
) const
private

Definition at line 144 of file DirectMTDNavigation.cc.

References MTDDetLayerGeometry::allForwardLayers(), checkCompatible(), generateEDF::cont, and theMTDDetLayerGeometry.

Referenced by compatibleEndcapLayers(), compatibleLayers(), and ~DirectMTDNavigation().

144  {
145  const vector<const DetLayer*>& forward = theMTDDetLayerGeometry->allForwardLayers();
146  bool cont = false;
147  for (vector<const DetLayer*>::const_iterator iter_E = forward.begin(); iter_E != forward.end(); iter_E++) {
148  if (cont)
149  output.push_back((*iter_E));
150  else if (checkCompatible(fts, dynamic_cast<const ForwardDetLayer*>(*iter_E))) {
151  output.push_back((*iter_E));
152  cont = true;
153  }
154  }
155 }
bool checkCompatible(const FreeTrajectoryState &fts, const BarrelDetLayer *) const
edm::ESHandle< MTDDetLayerGeometry > theMTDDetLayerGeometry
const std::vector< const DetLayer * > & allForwardLayers() const
return all endcap layers
cont
load Luminosity info ##
Definition: generateEDF.py:629
void DirectMTDNavigation::outInBackward ( const FreeTrajectoryState fts,
std::vector< const DetLayer * > &  output 
) const
private

Definition at line 190 of file DirectMTDNavigation.cc.

References MTDDetLayerGeometry::allBackwardLayers(), checkCompatible(), generateEDF::cont, and theMTDDetLayerGeometry.

Referenced by compatibleEndcapLayers(), compatibleLayers(), and ~DirectMTDNavigation().

190  {
191  bool cont = false;
192  const vector<const DetLayer*>& backward = theMTDDetLayerGeometry->allBackwardLayers();
193 
194  vector<const DetLayer*>::const_iterator rbegin = backward.end();
195  rbegin--;
196  vector<const DetLayer*>::const_iterator rend = backward.begin();
197  rend--;
198  for (vector<const DetLayer*>::const_iterator iter_E = rbegin; iter_E != rend; iter_E--) {
199  if (cont)
200  output.push_back((*iter_E));
201  else if (checkCompatible(fts, dynamic_cast<const ForwardDetLayer*>(*iter_E))) {
202  output.push_back((*iter_E));
203  cont = true;
204  }
205  }
206 }
const std::vector< const DetLayer * > & allBackwardLayers() const
return all endcap layers
bool checkCompatible(const FreeTrajectoryState &fts, const BarrelDetLayer *) const
edm::ESHandle< MTDDetLayerGeometry > theMTDDetLayerGeometry
cont
load Luminosity info ##
Definition: generateEDF.py:629
void DirectMTDNavigation::outInBarrel ( const FreeTrajectoryState fts,
std::vector< const DetLayer * > &  output 
) const
private

Definition at line 124 of file DirectMTDNavigation.cc.

References MTDDetLayerGeometry::allBarrelLayers(), Reference_intrackfit_cff::barrel, checkCompatible(), generateEDF::cont, and theMTDDetLayerGeometry.

Referenced by compatibleLayers(), and ~DirectMTDNavigation().

124  {
125  // default barrel layers are in out, reverse order
126  const vector<const DetLayer*>& barrel = theMTDDetLayerGeometry->allBarrelLayers();
127 
128  bool cont = false;
129  vector<const DetLayer*>::const_iterator rbegin = barrel.end();
130  rbegin--;
131  vector<const DetLayer*>::const_iterator rend = barrel.begin();
132  rend--;
133 
134  for (vector<const DetLayer*>::const_iterator iter_B = rbegin; iter_B != rend; iter_B--) {
135  if (cont)
136  output.push_back((*iter_B));
137  else if (checkCompatible(fts, dynamic_cast<const BarrelDetLayer*>(*iter_B))) {
138  output.push_back((*iter_B));
139  cont = true;
140  }
141  }
142 }
bool checkCompatible(const FreeTrajectoryState &fts, const BarrelDetLayer *) const
edm::ESHandle< MTDDetLayerGeometry > theMTDDetLayerGeometry
const std::vector< const DetLayer * > & allBarrelLayers() const
return all barrel layers
cont
load Luminosity info ##
Definition: generateEDF.py:629
void DirectMTDNavigation::outInForward ( const FreeTrajectoryState fts,
std::vector< const DetLayer * > &  output 
) const
private

Definition at line 157 of file DirectMTDNavigation.cc.

References MTDDetLayerGeometry::allForwardLayers(), checkCompatible(), generateEDF::cont, and theMTDDetLayerGeometry.

Referenced by compatibleLayers(), and ~DirectMTDNavigation().

157  {
158  // default forward layers are in out, reverse order
159 
160  bool cont = false;
161  const vector<const DetLayer*>& forward = theMTDDetLayerGeometry->allForwardLayers();
162  vector<const DetLayer*>::const_iterator rbegin = forward.end();
163  rbegin--;
164  vector<const DetLayer*>::const_iterator rend = forward.begin();
165  rend--;
166  for (vector<const DetLayer*>::const_iterator iter_E = rbegin; iter_E != rend; iter_E--) {
167  if (cont)
168  output.push_back((*iter_E));
169  else if (checkCompatible(fts, dynamic_cast<const ForwardDetLayer*>(*iter_E))) {
170  output.push_back((*iter_E));
171  cont = true;
172  }
173  }
174 }
bool checkCompatible(const FreeTrajectoryState &fts, const BarrelDetLayer *) const
edm::ESHandle< MTDDetLayerGeometry > theMTDDetLayerGeometry
const std::vector< const DetLayer * > & allForwardLayers() const
return all endcap layers
cont
load Luminosity info ##
Definition: generateEDF.py:629
bool DirectMTDNavigation::outward ( const FreeTrajectoryState fts) const
private

Definition at line 244 of file DirectMTDNavigation.cc.

References FreeTrajectoryState::momentum(), FreeTrajectoryState::position(), PV3DBase< T, PVType, FrameType >::x(), and PV3DBase< T, PVType, FrameType >::y().

Referenced by checkCompatible(), compatibleLayers(), and ~DirectMTDNavigation().

244  {
245  // return (fts.position().basicVector().dot(fts.momentum().basicVector())>0);
246 
247  float x0 = fts.position().x();
248  float y0 = fts.position().y();
249 
250  float xm = fts.momentum().x();
251  float ym = fts.momentum().y();
252 
253  return ((x0 * xm + y0 * ym) > 0);
254 }
T y() const
Definition: PV3DBase.h:60
GlobalVector momentum() const
GlobalPoint position() const
T x() const
Definition: PV3DBase.h:59

Member Data Documentation

float DirectMTDNavigation::epsilon_
private

Definition at line 53 of file DirectMTDNavigation.h.

Referenced by checkCompatible().

bool DirectMTDNavigation::theBarrelFlag
private

Definition at line 55 of file DirectMTDNavigation.h.

Referenced by compatibleLayers().

bool DirectMTDNavigation::theEndcapFlag
private

Definition at line 54 of file DirectMTDNavigation.h.

Referenced by compatibleLayers().

edm::ESHandle<MTDDetLayerGeometry> DirectMTDNavigation::theMTDDetLayerGeometry
private