CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
MaterialAccountingStep.h
Go to the documentation of this file.
1 #ifndef MaterialAccountingStep_h
2 #define MaterialAccountingStep_h
3 
4 #include <utility>
6 
7 // struct to keep material accounting informations on a per-step basis
8 // TODO split segment info (in, out) into separate child class
10 public:
12 
13  MaterialAccountingStep(double position, double radlen, double loss, const GlobalPoint& in, const GlobalPoint& out)
14  : m_length(position), m_radiationLengths(radlen), m_energyLoss(loss), m_in(in), m_out(out) {}
15 
16  void clear(void) {
17  m_length = 0.;
18  m_radiationLengths = 0.;
19  m_energyLoss = 0.;
20  m_in = GlobalPoint();
21  m_out = GlobalPoint();
22  }
23 
24 private:
25  double m_length;
27  double m_energyLoss;
30 
31 public:
32  double length(void) const { return m_length; }
33 
34  double radiationLengths(void) const { return m_radiationLengths; }
35 
36  double energyLoss(void) const { return m_energyLoss; }
37 
38  const GlobalPoint& in(void) const { return m_in; }
39 
40  const GlobalPoint& out(void) const { return m_out; }
41 
43  std::pair<MaterialAccountingStep, MaterialAccountingStep> split(double fraction) const {
44  // no check is done to ensure that 0 <= f <= 1 !
45  GlobalPoint limit(m_in.x() * fraction + m_out.x() * (1. - fraction),
46  m_in.y() * fraction + m_out.y() * (1. - fraction),
47  m_in.z() * fraction + m_out.z() * (1. - fraction));
48 
50  fraction * m_length, fraction * m_radiationLengths, fraction * m_energyLoss, m_in, limit);
51 
53  (1 - fraction) * m_length, (1 - fraction) * m_radiationLengths, (1 - fraction) * m_energyLoss, limit, m_out);
54  return std::make_pair(part1, part2);
55  }
56 
59  m_length = step.m_length;
62  m_in = step.m_in;
63  m_out = step.m_out;
64  return *this;
65  }
66 
69  m_length += step.m_length;
71  m_energyLoss += step.m_energyLoss;
72 
73  // assume that perp2 is 0 only for uninitialized steps
74  if ((m_in.perp2() == 0.0) or (step.m_in.perp2() < m_in.perp2()))
75  m_in = step.m_in;
76 
77  if ((m_out.perp2() == 0.0) or (step.m_out.perp2() > m_out.perp2()))
78  m_out = step.m_out;
79 
80  return *this;
81  }
82 
85  m_length -= step.m_length;
87  m_energyLoss -= step.m_energyLoss;
88 
89  // can anything more sensible be done for m_in and/or m_out ?
90  if ((step.m_in.perp2() <= m_in.perp2()) and (step.m_out.perp2() >= m_in.perp2()))
91  m_in = step.m_out;
92 
93  if ((step.m_out.perp2() >= m_out.perp2()) and (step.m_in.perp2() <= m_out.perp2()))
94  m_out = step.m_in;
95 
96  return *this;
97  }
98 
101  m_length *= step.m_length;
103  m_energyLoss *= step.m_energyLoss;
104  return *this;
105  }
106 
109  m_length *= x;
111  m_energyLoss *= x;
112  return *this;
113  }
114 
117  m_length /= x;
119  m_energyLoss /= x;
120  return *this;
121  }
122 };
123 
126  step += y;
127  return step;
128 }
129 
132  step -= y;
133  return step;
134 }
135 
138  step *= y;
139  return step;
140 }
141 
144  step *= y;
145  return step;
146 }
147 
150  step *= y;
151  return step;
152 }
153 
156  step /= y;
157  return step;
158 }
159 
160 #endif // MaterialAccountingStep_h
MaterialAccountingStep & operator=(const MaterialAccountingStep &step)
assignement operator
The Signals That Services Can Subscribe To This is based on ActivityRegistry and is current per Services can connect to the signals distributed by the ActivityRegistry in order to monitor the activity of the application Each possible callback has some defined which we here list in angle e< void, edm::EventIDconst &, edm::Timestampconst & > We also list in braces which AR_WATCH_USING_METHOD_ is used for those or
Definition: Activities.doc:12
MatrixMeschach operator+(const MatrixMeschach &mat1, const MatrixMeschach &mat2)
MatrixMeschach operator-(const MatrixMeschach &mat1, const MatrixMeschach &mat2)
double length(void) const
Global3DPoint GlobalPoint
Definition: GlobalPoint.h:10
T y() const
Definition: PV3DBase.h:60
double radiationLengths(void) const
MaterialAccountingStep & operator*=(const MaterialAccountingStep &step)
multiply two steps, usefull to implement (co)variance
T perp2() const
Definition: PV3DBase.h:68
MaterialAccountingStep & operator*=(double x)
multiply by a scalar
double energyLoss(void) const
T z() const
Definition: PV3DBase.h:61
uint16_t const *__restrict__ x
Definition: gpuClustering.h:43
MaterialAccountingStep & operator+=(const MaterialAccountingStep &step)
add a step
T1 operator/(const Phi< T1, Range > &a, const Phi< T1, Range > &b)
Division.
Definition: Phi.h:176
MaterialAccountingStep & operator/=(double x)
divide by a scalar
std::pair< MaterialAccountingStep, MaterialAccountingStep > split(double fraction) const
split the step (0..1) in (0..f) + (f..1) using linear interpolation
const GlobalPoint & out(void) const
MaterialAccountingStep & operator-=(const MaterialAccountingStep &step)
subtract a step
static int position[264][3]
Definition: ReadPGInfo.cc:289
MaterialAccountingStep(double position, double radlen, double loss, const GlobalPoint &in, const GlobalPoint &out)
const GlobalPoint & in(void) const
MatrixMeschach operator*(const MatrixMeschach &mat1, const MatrixMeschach &mat2)
step
Definition: StallMonitor.cc:98
T x() const
Definition: PV3DBase.h:59