Belle II Software development
PhotonState Class Reference

State of the Cerenkov photon in the quartz optics. More...

#include <PhotonState.h>

Public Types

enum  EType {
  c_Undefined = 0 ,
  c_BarSegment = 1 ,
  c_MirrorSegment = 2 ,
  c_Prism = 3
}
 enumerator for the type of quartz segments More...
 

Public Member Functions

 PhotonState ()
 Default constructor.
 
 PhotonState (const ROOT::Math::XYZPoint &position, const ROOT::Math::XYZVector &direction)
 Constructor with position and direction vectors.
 
 PhotonState (const ROOT::Math::XYZPoint &position, double kx, double ky, double kz)
 Constructor with position vector and direction components.
 
 PhotonState (const ROOT::Math::XYZPoint &position, const ROOT::Math::XYZVector &trackDir, double thc, double fic)
 Constructor with position, track direction and cerenkov angles.
 
PhotonStateflipKy ()
 Changes sign of direction y component.
 
ROOT::Math::XYZPoint getPosition () const
 Returns position as 3D vector.
 
double getX () const
 Returns position in x.
 
double getY () const
 Returns position in y.
 
double getZ () const
 Returns position in z.
 
double getUnfoldedX (double x) const
 Unfolds the position in x.
 
double getUnfoldedY (double y) const
 Unfolds the position in y.
 
double getXD () const
 Returns detection position x in unfolded prism.
 
double getYD () const
 Returns detection position y in unfolded prism.
 
double getZD () const
 Returns detection position z in unfolded prism.
 
ROOT::Math::XYZVector getDirection () const
 Returns direction as 3D unit vector.
 
double getKx () const
 Returns direction in x.
 
double getKy () const
 Returns direction in y.
 
double getKz () const
 Returns direction in z.
 
double getPropagationLen () const
 Returns total propagation length since initial position.
 
int getNx () const
 Returns number of reflections in x at last propagation step.
 
int getNy () const
 Returns number of reflections in y at last propagation step.
 
double getA () const
 Returns width (dimension in x) of the quartz segment at last propagation step.
 
double getB () const
 Returns thickness (dimension in y) of the quartz segment at last propagation step.
 
EType getSegmentType () const
 Returns the type of the quartz segment at last propagation.
 
bool getPropagationStatus () const
 Returns propagation status.
 
bool getTotalReflStatus (double cosTotal) const
 Returns total internal reflection status.
 
bool isInside (const RaytracerBase::BarSegment &bar) const
 Checks if photon is inside the bar segment (including surface).
 
bool isInside (const RaytracerBase::BarSegment &bar, const RaytracerBase::Mirror &mirror) const
 Checks if photon is inside the mirror segment (including surface).
 
bool isInside (const RaytracerBase::Prism &prism) const
 Checks if photon is inside the prism (including surface).
 
void propagate (const RaytracerBase::BarSegment &bar)
 Propagate photon to the exit of bar segment.
 
void propagateSemiLinear (const RaytracerBase::BarSegment &bar, const RaytracerBase::Mirror &mirror)
 Propagate photon to the mirror and reflect it using semi-linear mirror optics.
 
void propagateExact (const RaytracerBase::BarSegment &bar, const RaytracerBase::Mirror &mirror)
 Propagate photon to the mirror and reflect it using exact mirror optics.
 
void propagate (const RaytracerBase::Prism &prism)
 Propagate photon in the prism to the detector plane.
 

Static Public Member Functions

static void setMaxPropagationLen (double maxLen)
 Sets maximal allowed propagation length.
 

Private Attributes

double m_x = 0
 position in x
 
double m_y = 0
 position in y
 
double m_z = 0
 position in z
 
double m_kx = 0
 direction in x
 
double m_ky = 0
 direction in y
 
double m_kz = 0
 direction in z
 
double m_propLen = 0
 propagation length since initial position
 
int m_nx = 0
 signed number of reflections in x at last propagation step
 
int m_ny = 0
 signed number of reflections in y at last propagation step
 
double m_cosx = 0
 maximal cosine of impact angle to surface in x
 
double m_cosy = 0
 maximal cosine of impact angle to surface in y
 
double m_A = 0
 width of the quartz segment (dimension in x) for unfolding
 
double m_B = 0
 thickness of the quartz segment (dimension in y) for unfolding
 
double m_y0 = 0
 origin in y for unfolding
 
double m_yD = 0
 unfolded prism detection position in y
 
double m_zD = 0
 unfolded prism detection position in z
 
EType m_type = c_Undefined
 quartz segment type at last propagation step
 
bool m_status = false
 propagation status
 

Static Private Attributes

static double s_maxLen = 10000
 maximal allowed propagation length
 

Detailed Description

State of the Cerenkov photon in the quartz optics.

Definition at line 27 of file PhotonState.h.

Member Enumeration Documentation

◆ EType

enum EType

enumerator for the type of quartz segments

Enumerator
c_Undefined 

undefined

c_BarSegment 

bar segment

c_MirrorSegment 

mirror segment

c_Prism 

prism

Definition at line 34 of file PhotonState.h.

34 {
35 c_Undefined = 0,
36 c_BarSegment = 1,
37 c_MirrorSegment = 2,
38 c_Prism = 3
39 };

Constructor & Destructor Documentation

◆ PhotonState() [1/4]

PhotonState ( )
inline

Default constructor.

Definition at line 44 of file PhotonState.h.

45 {}

◆ PhotonState() [2/4]

PhotonState ( const ROOT::Math::XYZPoint & position,
const ROOT::Math::XYZVector & direction )

Constructor with position and direction vectors.

Parameters
positioninitial photon position (must be inside quartz)
directioninitial direction vector (must be unit vector)

Definition at line 26 of file PhotonState.cc.

26 :
27 m_x(position.X()), m_y(position.Y()), m_z(position.Z()),
28 m_kx(direction.X()), m_ky(direction.Y()), m_kz(direction.Z()),
29 m_status(true)
30 {}

◆ PhotonState() [3/4]

PhotonState ( const ROOT::Math::XYZPoint & position,
double kx,
double ky,
double kz )

Constructor with position vector and direction components.

Parameters
positioninitial photon position (must be inside quartz)
kxinitial direction x-component (must be unit vector)
kyinitial direction y-component (must be unit vector)
kzinitial direction z-component (must be unit vector)

Definition at line 33 of file PhotonState.cc.

33 :
34 m_x(position.X()), m_y(position.Y()), m_z(position.Z()),
35 m_kx(kx), m_ky(ky), m_kz(kz),
36 m_status(true)
37 {}

◆ PhotonState() [4/4]

PhotonState ( const ROOT::Math::XYZPoint & position,
const ROOT::Math::XYZVector & trackDir,
double thc,
double fic )

Constructor with position, track direction and cerenkov angles.

Parameters
positioninitial photon position (must be inside quartz)
trackDirtrack direction vector (must be unit vector)
thcCerenkov (polar) angle
ficCerenkov azimuthal angle

Definition at line 39 of file PhotonState.cc.

40 :
41 m_x(position.X()), m_y(position.Y()), m_z(position.Z()),
42 m_status(true)
43 {
44 ROOT::Math::XYZVector dir(cos(fic) * sin(thc), sin(fic) * sin(thc), cos(thc));
45 func::rotateUz(dir, trackDir);
46 m_kx = dir.X();
47 m_ky = dir.Y();
48 m_kz = dir.Z();
49 }

Member Function Documentation

◆ flipKy()

PhotonState & flipKy ( )
inline

Changes sign of direction y component.

Definition at line 75 of file PhotonState.h.

75{m_ky = -m_ky; return *this;}

◆ getA()

double getA ( ) const
inline

Returns width (dimension in x) of the quartz segment at last propagation step.

Returns
width

Definition at line 185 of file PhotonState.h.

185{return m_A;}

◆ getB()

double getB ( ) const
inline

Returns thickness (dimension in y) of the quartz segment at last propagation step.

For prism it is the size of exit window.

Returns
thickness

Definition at line 192 of file PhotonState.h.

192{return m_B;}

◆ getDirection()

ROOT::Math::XYZVector getDirection ( ) const
inline

Returns direction as 3D unit vector.

Returns
direction

Definition at line 143 of file PhotonState.h.

143{return ROOT::Math::XYZVector(m_kx, m_ky, m_kz);}

◆ getKx()

double getKx ( ) const
inline

Returns direction in x.

Returns
direction in x

Definition at line 149 of file PhotonState.h.

149{return m_kx;}

◆ getKy()

double getKy ( ) const
inline

Returns direction in y.

Returns
direction in y

Definition at line 155 of file PhotonState.h.

155{return m_ky;}

◆ getKz()

double getKz ( ) const
inline

Returns direction in z.

Returns
direction in z

Definition at line 161 of file PhotonState.h.

161{return m_kz;}

◆ getNx()

int getNx ( ) const
inline

Returns number of reflections in x at last propagation step.

Returns
signed number of reflections

Definition at line 173 of file PhotonState.h.

173{return m_nx;}

◆ getNy()

int getNy ( ) const
inline

Returns number of reflections in y at last propagation step.

Returns
signed number of reflections

Definition at line 179 of file PhotonState.h.

179{return m_ny;}

◆ getPosition()

ROOT::Math::XYZPoint getPosition ( ) const
inline

Returns position as 3D vector.

Returns
position

Definition at line 87 of file PhotonState.h.

87{return ROOT::Math::XYZPoint(m_x, m_y, m_z);}

◆ getPropagationLen()

double getPropagationLen ( ) const
inline

Returns total propagation length since initial position.

Returns
propagation length

Definition at line 167 of file PhotonState.h.

167{return m_propLen;}

◆ getPropagationStatus()

bool getPropagationStatus ( ) const
inline

Returns propagation status.

Returns
true on success

Definition at line 204 of file PhotonState.h.

204{return m_status;}

◆ getSegmentType()

EType getSegmentType ( ) const
inline

Returns the type of the quartz segment at last propagation.

Returns
type quartz segment type

Definition at line 198 of file PhotonState.h.

198{return m_type;}

◆ getTotalReflStatus()

bool getTotalReflStatus ( double cosTotal) const
inline

Returns total internal reflection status.

Parameters
cosTotalcosine of total reflection angle
Returns
true if totally reflected

Definition at line 211 of file PhotonState.h.

212 {
213 return ((m_nx == 0 or m_cosx < cosTotal) and (m_ny == 0 or m_cosy < cosTotal));
214 }

◆ getUnfoldedX()

double getUnfoldedX ( double x) const
inline

Unfolds the position in x.

Parameters
xposition to unfold
Returns
unfolded position

Definition at line 112 of file PhotonState.h.

112{return func::unfold(x, m_nx, m_A);}

◆ getUnfoldedY()

double getUnfoldedY ( double y) const
inline

Unfolds the position in y.

Parameters
yposition to unfold
Returns
unfolded position

Definition at line 119 of file PhotonState.h.

119{return (func::unfold(y - m_y0, m_ny, m_B) + m_y0);}

◆ getX()

double getX ( ) const
inline

Returns position in x.

Returns
position in x

Definition at line 93 of file PhotonState.h.

93{return m_x;}

◆ getXD()

double getXD ( ) const
inline

Returns detection position x in unfolded prism.

Returns
detection position x in unfolded prism

Definition at line 125 of file PhotonState.h.

125{return getUnfoldedX(m_x);}

◆ getY()

double getY ( ) const
inline

Returns position in y.

Returns
position in y

Definition at line 99 of file PhotonState.h.

99{return m_y;}

◆ getYD()

double getYD ( ) const
inline

Returns detection position y in unfolded prism.

Returns
detection position y in unfolded prism

Definition at line 131 of file PhotonState.h.

131{return m_yD;}

◆ getZ()

double getZ ( ) const
inline

Returns position in z.

Returns
position in z

Definition at line 105 of file PhotonState.h.

105{return m_z;}

◆ getZD()

double getZD ( ) const
inline

Returns detection position z in unfolded prism.

Returns
detection position z in unfolded prism

Definition at line 137 of file PhotonState.h.

137{return m_zD;}

◆ isInside() [1/3]

bool isInside ( const RaytracerBase::BarSegment & bar) const

Checks if photon is inside the bar segment (including surface).

Parameters
barbar segment data
Returns
true if inside

Definition at line 51 of file PhotonState.cc.

52 {
53 if (std::abs(m_x) > bar.A / 2) return false;
54 if (std::abs(m_y) > bar.B / 2) return false;
55 if (m_z < bar.zL or m_z > bar.zR) return false;
56 return true;
57 }

◆ isInside() [2/3]

bool isInside ( const RaytracerBase::BarSegment & bar,
const RaytracerBase::Mirror & mirror ) const

Checks if photon is inside the mirror segment (including surface).

Parameters
barbar segment data
mirrorspherical mirror data
Returns
true if inside

Definition at line 60 of file PhotonState.cc.

61 {
62 if (std::abs(m_x) > bar.A / 2) return false;
63 if (std::abs(m_y) > bar.B / 2) return false;
64 if (m_z < bar.zL) return false;
65 double Rsq = pow(m_x - mirror.xc, 2) + pow(m_y - mirror.yc, 2) + pow(m_z - mirror.zc, 2);
66 if (Rsq > pow(mirror.R, 2)) return false;
67 return true;
68 }

◆ isInside() [3/3]

bool isInside ( const RaytracerBase::Prism & prism) const

Checks if photon is inside the prism (including surface).

Parameters
prismprism data
Returns
true if inside

Definition at line 71 of file PhotonState.cc.

72 {
73 if (std::abs(m_x) > prism.A / 2) return false;
74 if (m_z < prism.zL or m_z > prism.zR) return false;
75 if (m_y > prism.yUp or m_y < prism.yDown) return false;
76 double y = prism.yDown + (prism.yDown + prism.B / 2) / (prism.zFlat - prism.zR) * (m_z - prism.zFlat);
77 if (m_y < y) return false;
78 return true;
79 }

◆ propagate() [1/2]

void propagate ( const RaytracerBase::BarSegment & bar)

Propagate photon to the exit of bar segment.

The state is not reliable if propagation fails.

Parameters
barbar segment data

Definition at line 82 of file PhotonState.cc.

83 {
84 if (not m_status) return;
85
86 // local copies: stores to the data members would otherwise be assumed to alias bar
87 const double A = bar.A;
88 const double B = bar.B;
89 double x = m_x;
90 double y = m_y;
91 double kx = m_kx;
92 double ky = m_ky;
93
94 m_cosx = std::abs(kx);
95 m_cosy = std::abs(ky);
96 m_A = A;
97 m_B = B;
98 m_type = c_BarSegment;
99
100 double z = bar.zR;
101 if (m_kz < 0) z = bar.zL;
102 if (z == m_z) return;
103
104 m_status = false;
105
106 double len = (z - m_z) / m_kz;
107 if (len < 0 or len > s_maxLen) return;
108
109 func::fold(x + len * kx, A, x, kx, m_nx);
110 func::fold(y + len * ky, B, y, ky, m_ny);
111
112 m_propLen += len;
113 m_x = x;
114 m_y = y;
115 m_kx = kx;
116 m_ky = ky;
117 m_z = z;
118
119 m_status = true;
120 }

◆ propagate() [2/2]

void propagate ( const RaytracerBase::Prism & prism)

Propagate photon in the prism to the detector plane.

The state is not reliable if propagation fails.

Parameters
prismprism data

Definition at line 260 of file PhotonState.cc.

261 {
262 if (not m_status) return;
263
264 m_status = false;
265
266 // Work on local copies of the state and of the prism geometry. Writing to the data members
267 // inside the loop below would force the compiler to re-load the window data on every
268 // iteration (a double stored through 'this' may alias the doubles of the unfolded windows).
269
270 double x = m_x;
271 double y = m_y;
272 double z = m_z;
273 double kx = m_kx;
274 double ky = m_ky;
275 double kz = m_kz;
276 double propLen = m_propLen;
277 double cosy = m_cosy;
278
279 const double prismA = prism.A;
280 const double yUp = prism.yUp;
281 const double yDown = prism.yDown;
282 const double zR = prism.zR;
283 const double zFlat = prism.zFlat;
284 const double zDet = prism.zD;
285
286 m_cosx = std::abs(kx);
287 m_A = prismA;
288 m_B = yUp - yDown;
289 m_y0 = (yUp + yDown) / 2;
290 m_type = c_Prism;
291
292 if (kz > 0) {
293 if (z >= zR or std::abs(ky / kz) < std::abs(prism.slope)) return;
294 if (std::abs(y + ky / kz * (zR - z)) < prism.B / 2) return;
295 }
296 const double ky_in = ky;
297 const double kz_in = kz;
298
299 double yD = y;
300 double zD = z;
301
302 if (z > zFlat) {
303
304 int step = 1;
305 int ii = 0;
306 if (ky < 0) {
307 step = -1;
308 ii = 1;
309 y = std::min(y, yUp);
310 }
311
312 const auto* windows = prism.unfoldedWindows.data();
313 const unsigned numWindows = prism.unfoldedWindows.size();
314 const int k0 = prism.k0;
315
316 bool found = false;
317 unsigned k = k0;
318 while (k < numWindows) {
319 const auto& win = windows[k];
320 double s = ky * win.sz - kz * win.sy;
321 if (s != 0) {
322 double len = ((win.y0 - y) * win.sz - (win.z0 - z) * win.sy) / s;
323 yD = y + len * ky;
324 zD = z + len * kz;
325 double yu = yD - win.y0;
326 double zu = zD - win.z0;
327 double yw = yu * win.sy + zu * win.sz;
328 if (yw >= yDown and yw <= yUp) {
329 if (len < 0 or len > s_maxLen) return;
330 double kyNew = ky * win.sy + kz * win.sz;
331 double kzNew = kz * win.sy - ky * win.sz;
332 int ny = k - k0;
333 x += len * kx;
334 y = yw;
335 ky = kyNew;
336 m_ny = ny;
337 z = zFlat;
338 kz = ny % 2 == 0 ? kzNew : -kzNew;
339 propLen += len;
340 found = true;
341 break;
342 }
343 cosy = std::max(cosy, std::abs(ky_in * win.nsy[ii] + kz_in * win.nsz[ii]));
344 }
345 k += step;
346 ii ^= 1;
347 }
348
349 if (not found) {
350 B2DEBUG(20, "TOP::PhotonState::propagate: unfolded prism window not found"
351 << LogVar("yUp", prism.yUp) << LogVar("yDown", prism.yDown) << LogVar("zR", prism.zR)
352 << LogVar("y", y) << LogVar("z", z)
353 << LogVar("ky", ky_in) << LogVar("kz", kz_in));
354 return;
355 }
356 }
357
358 double len = (zDet - z) / kz;
359 if (len < 0 or len > s_maxLen) return;
360
361 func::fold(x + len * kx, prismA, x, kx, m_nx);
362 y += len * ky;
363 z = zDet;
364 propLen += len;
365 yD += len * ky_in;
366 zD += len * kz_in;
367
368 m_x = x;
369 m_y = y;
370 m_z = z;
371 m_kx = kx;
372 m_ky = ky;
373 m_kz = kz;
374 m_propLen = propLen;
375 m_yD = yD;
376 m_zD = zD;
377 m_cosy = cosy;
378
379 m_status = true;
380 }

◆ propagateExact()

void propagateExact ( const RaytracerBase::BarSegment & bar,
const RaytracerBase::Mirror & mirror )

Propagate photon to the mirror and reflect it using exact mirror optics.

The state is not reliable if propagation fails.

Parameters
barmirror segment data
mirrorspherical mirror data

Definition at line 189 of file PhotonState.cc.

190 {
191 if (not m_status) return;
192
193 m_cosx = std::abs(m_kx);
194 m_cosy = std::abs(m_ky);
195 m_A = bar.A;
196 m_B = bar.B;
197 m_type = c_MirrorSegment;
198
199 m_status = false;
200
201 if (m_kz < 0) return;
202
203 double len = 0;
204 if (m_z < mirror.zb) {
205 len = (mirror.zb - m_z) / m_kz;
206 if (len > s_maxLen) return;
207 }
208
209 double xm = m_x + len * m_kx;
210 int nx = func::lround(xm / bar.A);
211 double ym = m_y + len * m_ky;
212 int ny = func::lround(ym / bar.B);
213 int i = 0;
214 while (true) {
215 double xc = func::unfold(mirror.xc, nx, bar.A);
216 double yc = func::unfold(mirror.yc, ny, bar.B);
217 double x = m_x - xc;
218 double y = m_y - yc;
219 double z = m_z - mirror.zc;
220 double rdir = x * m_kx + y * m_ky + z * m_kz;
221 double rr = x * x + y * y + z * z;
222 double D = rdir * rdir + (mirror.R * mirror.R - rr);
223 if (D < 0) return;
224 D = sqrt(D);
225 len = (D - rdir);
226 if (len < 0 or len > s_maxLen) return;
227 double xmm = m_x + len * m_kx;
228 int nxx = func::lround(xmm / bar.A);
229 double ymm = m_y + len * m_ky;
230 int nyy = func::lround(ymm / bar.B);
231 if (nxx == nx and nyy == ny) break;
232 i++;
233 if (i == 10) {
234 if (std::abs(xmm - xm) < 0.001 and std::abs(ymm - ym) < 0.001) break;
235 B2DEBUG(20, "TOP::PhotonState::propagateExact: not converging");
236 return;
237 }
238 nx = nxx;
239 ny = nyy;
240 }
241
242 m_propLen += len;
243
244 func::fold(m_x + len * m_kx, bar.A, m_x, m_kx, m_nx);
245 func::fold(m_y + len * m_ky, bar.B, m_y, m_ky, m_ny);
246 m_z += len * m_kz;
247
248 double normX = (m_x - mirror.xc) / mirror.R;
249 double normY = (m_y - mirror.yc) / mirror.R;
250 double normZ = (m_z - mirror.zc) / mirror.R;
251 double s = 2 * (m_kx * normX + m_ky * normY + m_kz * normZ);
252 m_kx -= s * normX;
253 m_ky -= s * normY;
254 m_kz -= s * normZ;
255
256 m_status = true;
257 }
double sqrt(double a)
sqrt for double
Definition beamHelpers.h:28

◆ propagateSemiLinear()

void propagateSemiLinear ( const RaytracerBase::BarSegment & bar,
const RaytracerBase::Mirror & mirror )

Propagate photon to the mirror and reflect it using semi-linear mirror optics.

The state is not reliable if propagation fails.

Semi-linear: mirror surface approximated with a cylinder along y-axis and using linear optics approximation in y for the photon reflection. Useful to get rid of some of the discontinuities in the TOP image at given wavelength, which are anyway smeared-out by the dispersion and other processes.

Parameters
barmirror segment data
mirrorspherical mirror data

Definition at line 123 of file PhotonState.cc.

124 {
125 if (not m_status) return;
126
127 m_cosx = std::abs(m_kx);
128 m_cosy = std::abs(m_ky);
129 m_A = bar.A;
130 m_B = bar.B;
131 m_type = c_MirrorSegment;
132
133 m_status = false;
134
135 if (m_kz < 0) return;
136
137 double len = 0;
138 if (m_z < mirror.zb) {
139 len = (mirror.zb - m_z) / m_kz;
140 if (len > s_maxLen) return;
141 }
142
143 double xm = m_x + len * m_kx;
144 int nx = func::lround(xm / bar.A);
145 double ss = m_kx * m_kx + m_kz * m_kz;
146 if (ss == 0) return;
147 int i = 0;
148 while (true) {
149 double xc = func::unfold(mirror.xc, nx, bar.A);
150 double x = m_x - xc;
151 double z = m_z - mirror.zc;
152 double rdir = x * m_kx + z * m_kz;
153 double rr = x * x + z * z;
154 double D = rdir * rdir + (mirror.R * mirror.R - rr) * ss;
155 if (D < 0) return;
156 D = sqrt(D);
157 len = (D - rdir) / ss;
158 if (len < 0 or len > s_maxLen) return;
159 double xmm = m_x + len * m_kx;
160 int nxx = func::lround(xmm / bar.A);
161 if (nxx == nx) break;
162 i++;
163 if (i == 10) {
164 if (std::abs(xmm - xm) < 0.001) break;
165 B2DEBUG(20, "TOP::PhotonState::propagateSemiLinear: not converging");
166 return;
167 }
168 nx = nxx;
169 xm = xmm;
170 }
171
172 m_propLen += len;
173
174 func::fold(m_x + len * m_kx, bar.A, m_x, m_kx, m_nx);
175 func::fold(m_y + len * m_ky, bar.B, m_y, m_ky, m_ny);
176 m_y = mirror.yc;
177 m_z += len * m_kz;
178
179 double normX = (m_x - mirror.xc) / mirror.R;
180 double normZ = (m_z - mirror.zc) / mirror.R;
181 double s = 2 * (m_kx * normX + m_kz * normZ);
182 m_kx -= s * normX;
183 m_kz -= s * normZ;
184
185 m_status = true;
186 }

◆ setMaxPropagationLen()

static void setMaxPropagationLen ( double maxLen)
inlinestatic

Sets maximal allowed propagation length.

Parameters
maxLenmaximal allowed propagation length

Definition at line 81 of file PhotonState.h.

81{s_maxLen = maxLen;}

Member Data Documentation

◆ m_A

double m_A = 0
private

width of the quartz segment (dimension in x) for unfolding

Definition at line 286 of file PhotonState.h.

◆ m_B

double m_B = 0
private

thickness of the quartz segment (dimension in y) for unfolding

Definition at line 287 of file PhotonState.h.

◆ m_cosx

double m_cosx = 0
private

maximal cosine of impact angle to surface in x

Definition at line 284 of file PhotonState.h.

◆ m_cosy

double m_cosy = 0
private

maximal cosine of impact angle to surface in y

Definition at line 285 of file PhotonState.h.

◆ m_kx

double m_kx = 0
private

direction in x

Definition at line 278 of file PhotonState.h.

◆ m_ky

double m_ky = 0
private

direction in y

Definition at line 279 of file PhotonState.h.

◆ m_kz

double m_kz = 0
private

direction in z

Definition at line 280 of file PhotonState.h.

◆ m_nx

int m_nx = 0
private

signed number of reflections in x at last propagation step

Definition at line 282 of file PhotonState.h.

◆ m_ny

int m_ny = 0
private

signed number of reflections in y at last propagation step

Definition at line 283 of file PhotonState.h.

◆ m_propLen

double m_propLen = 0
private

propagation length since initial position

Definition at line 281 of file PhotonState.h.

◆ m_status

bool m_status = false
private

propagation status

Definition at line 292 of file PhotonState.h.

◆ m_type

EType m_type = c_Undefined
private

quartz segment type at last propagation step

Definition at line 291 of file PhotonState.h.

◆ m_x

double m_x = 0
private

position in x

Definition at line 275 of file PhotonState.h.

◆ m_y

double m_y = 0
private

position in y

Definition at line 276 of file PhotonState.h.

◆ m_y0

double m_y0 = 0
private

origin in y for unfolding

Definition at line 288 of file PhotonState.h.

◆ m_yD

double m_yD = 0
private

unfolded prism detection position in y

Definition at line 289 of file PhotonState.h.

◆ m_z

double m_z = 0
private

position in z

Definition at line 277 of file PhotonState.h.

◆ m_zD

double m_zD = 0
private

unfolded prism detection position in z

Definition at line 290 of file PhotonState.h.

◆ s_maxLen

double s_maxLen = 10000
staticprivate

maximal allowed propagation length

Definition at line 294 of file PhotonState.h.


The documentation for this class was generated from the following files: