ShowerRRecData.cc
Go to the documentation of this file.
1 // includes for LameShadowPtr dependencies first
2 #include <evt/ShowerScintillatorRecData.h>
3 #include <evt/ShowerMRecData.h>
4 #include <evt/ShowerUnivRecData.h>
5 #include <AugerEvent.h>
6 #include <cevt/CEvent.h>
7 #include <mevt/MEvent.h>
8 #include <revt/Header.h>
9 #include <revt/EventTrigger.h>
10 #include <revt/REvent.h>
11 #include <sevt/Meteo.h>
12 #include <sevt/EventTrigger.h>
13 
14 #include <sevt/SEvent.h>
15 #include <evt/ShowerRRecData.h>
16 
17 #include <evt/ShowerRecData.h>
18 #include <evt/ShowerSRecData.h>
19 #include <evt/ShowerFRecData.h>
20 #include <evt/ShowerSimData.h>
21 #include <evt/LaserData.h>
22 #include <evt/RadioSimulation.h>
23 
24 #include <fevt/FEvent.h>
25 #include <fevt/FdComponentSelector.h>
26 #include <fevt/Eye.h>
27 #include <fevt/EyeRecData.h>
28 
29 #include <utl/AugerException.h>
30 #include <utl/ErrorLogger.h>
31 #include <utl/TabulatedFunctionErrors.h>
32 #include <utl/Math.h>
33 #include <utl/AnalyticCoordinateTransformator.h>
34 
35 #include <string>
36 
37 #include <utl/LameShadowPtr_imp.h>
39 
40 using namespace std;
41 using namespace utl;
42 using namespace evt;
43 using namespace revt;
44 
45 
47 double
48 ShowerRRecData::GetRadius()
49  const
50 {
51  if (HasParameter(eShowerAxisX) &&
52  HasParameter(eShowerAxisY) &&
53  HasParameter(eShowerAxisZ)) {
54  return
55  AnalyticCoordinateTransformator::GetRadiusFromCartesianCoordinates(
56  GetParameter(eShowerAxisX),
57  GetParameter(eShowerAxisY),
58  GetParameter(eShowerAxisZ)
59  );
60  } else {
61  WARNING("ShowerRRecData::GetRadius(): Parameter eShowerAxis was not set");
62  return std::numeric_limits<double>::quiet_NaN();
63  }
64 }
65 
66 
68 double
69 ShowerRRecData::GetRadiusError()
70  const
71 {
72  if (HasParameter(eShowerAxisX) &&
73  HasParameter(eShowerAxisY) &&
74  HasParameter(eShowerAxisZ) &&
75  HasParameterCovariance(eShowerAxisX, eShowerAxisX) &&
76  HasParameterCovariance(eShowerAxisY, eShowerAxisY) &&
77  HasParameterCovariance(eShowerAxisZ, eShowerAxisZ) &&
78  HasParameterCovariance(eShowerAxisX, eShowerAxisY) &&
79  HasParameterCovariance(eShowerAxisX, eShowerAxisZ) &&
80  HasParameterCovariance(eShowerAxisY, eShowerAxisZ)) {
81  const double covarianceRR =
82  AnalyticCoordinateTransformator::GetSphericalCovarianceFromCartesian(
83  0,
84  0,
85  GetParameter(eShowerAxisX),
86  GetParameter(eShowerAxisY),
87  GetParameter(eShowerAxisZ),
88  GetParameterCovariance(eShowerAxisX, eShowerAxisX),
89  GetParameterCovariance(eShowerAxisY, eShowerAxisY),
90  GetParameterCovariance(eShowerAxisZ, eShowerAxisZ),
91  GetParameterCovariance(eShowerAxisX, eShowerAxisY),
92  GetParameterCovariance(eShowerAxisX, eShowerAxisZ),
93  GetParameterCovariance(eShowerAxisY, eShowerAxisZ)
94  );
95  return sqrt(covarianceRR);
96  } else {
97  WARNING("ShowerRRecData::GetRadiusError(): Parameter or Covariances of eShowerAxis was not set, returning NaN");
98  return std::numeric_limits<double>::quiet_NaN();
99  }
100 }
101 
102 
104 double
105 ShowerRRecData::GetAzimuth()
106  const
107 {
108  if (HasParameter(eShowerAxisX) && HasParameter(eShowerAxisY)) {
109  return AnalyticCoordinateTransformator::GetAzimuthFromCartesianCoordinates(GetParameter(eShowerAxisX), GetParameter(eShowerAxisY));
110  } else {
111  WARNING("ShowerRRecData::GetAzimuth(): Parameter eShowerAxis was not set");
112  return std::numeric_limits<double>::quiet_NaN();
113  }
114 }
115 
116 
118 double
119 ShowerRRecData::GetAzimuthError()
120  const
121 {
122  if (HasParameter(eShowerAxisX) &&
123  HasParameter(eShowerAxisY) &&
124  HasParameter(eShowerAxisZ) &&
125  HasParameterCovariance(eShowerAxisX, eShowerAxisX) &&
126  HasParameterCovariance(eShowerAxisY, eShowerAxisY) &&
127  HasParameterCovariance(eShowerAxisZ, eShowerAxisZ) &&
128  HasParameterCovariance(eShowerAxisX, eShowerAxisY) &&
129  HasParameterCovariance(eShowerAxisX, eShowerAxisZ) &&
130  HasParameterCovariance(eShowerAxisY, eShowerAxisZ)) {
131  const double covariance22 =
132  AnalyticCoordinateTransformator::GetSphericalCovarianceFromCartesian(
133  2,
134  2,
135  GetParameter(eShowerAxisX),
136  GetParameter(eShowerAxisY),
137  GetParameter(eShowerAxisZ),
138  GetParameterCovariance(eShowerAxisX, eShowerAxisX),
139  GetParameterCovariance(eShowerAxisY, eShowerAxisY),
140  GetParameterCovariance(eShowerAxisZ, eShowerAxisZ),
141  GetParameterCovariance(eShowerAxisX, eShowerAxisY),
142  GetParameterCovariance(eShowerAxisX, eShowerAxisZ),
143  GetParameterCovariance(eShowerAxisY, eShowerAxisZ)
144  );
145  return sqrt(covariance22);
146  } else {
147  WARNING("ShowerRRecData::GetAzimuthError(): Parameter or Covariances of eShowerAxis was not set, returning NaN");
148  return std::numeric_limits<double>::quiet_NaN();
149  }
150 }
151 
152 
154 double
155 ShowerRRecData::GetZenith()
156  const
157 {
158  if (HasParameter(eShowerAxisX) && HasParameter(eShowerAxisY) && HasParameter(eShowerAxisZ)) {
159  return
160  AnalyticCoordinateTransformator::GetZenithFromCartesianCoordinates(
161  GetParameter(eShowerAxisX),
162  GetParameter(eShowerAxisY),
163  GetParameter(eShowerAxisZ)
164  );
165  } else {
166  WARNING("ShowerRRecData::GetZenith(): Parameter eShowerAxis was not set");
167  return std::numeric_limits<double>::quiet_NaN();
168  }
169 }
170 
171 
173 double
174 ShowerRRecData::GetZenithError()
175  const
176 {
177  if (HasParameter(eShowerAxisX) &&
178  HasParameter(eShowerAxisY) &&
179  HasParameter(eShowerAxisZ) &&
180  HasParameterCovariance(eShowerAxisX, eShowerAxisX) &&
181  HasParameterCovariance(eShowerAxisY, eShowerAxisY) &&
182  HasParameterCovariance(eShowerAxisZ, eShowerAxisZ) &&
183  HasParameterCovariance(eShowerAxisX, eShowerAxisY) &&
184  HasParameterCovariance(eShowerAxisX, eShowerAxisZ) &&
185  HasParameterCovariance(eShowerAxisY, eShowerAxisZ)) {
186  const double covariance11 =
187  AnalyticCoordinateTransformator::GetSphericalCovarianceFromCartesian(
188  1,
189  1,
190  GetParameter(eShowerAxisX),
191  GetParameter(eShowerAxisY),
192  GetParameter(eShowerAxisZ),
193  GetParameterCovariance(eShowerAxisX, eShowerAxisX),
194  GetParameterCovariance(eShowerAxisY, eShowerAxisY),
195  GetParameterCovariance(eShowerAxisZ, eShowerAxisZ),
196  GetParameterCovariance(eShowerAxisX, eShowerAxisY),
197  GetParameterCovariance(eShowerAxisX, eShowerAxisZ),
198  GetParameterCovariance(eShowerAxisY, eShowerAxisZ)
199  );
200  return sqrt(covariance11);
201  } else {
202  WARNING("ShowerRRecData::GetZenithError(): Parameter or Covariances of eShowerAxis was not set, returning NaN");
203  return std::numeric_limits<double>::quiet_NaN();
204  }
205 }
206 
207 
209 double
210 ShowerRRecData::GetAzimuthPreFit()
211  const
212 {
213  if (HasParameter(ePreFitShowerAxisX) && HasParameter(ePreFitShowerAxisY)) {
214  return
215  AnalyticCoordinateTransformator::GetAzimuthFromCartesianCoordinates(GetParameter(ePreFitShowerAxisX), GetParameter(ePreFitShowerAxisY));
216  } else {
217  WARNING("ShowerRRecData::GetAzimuthPreFit(): Parameter ePreFitShowerAxis was not set");
218  return std::numeric_limits<double>::quiet_NaN();
219  }
220 }
221 
222 
224 double
225 ShowerRRecData::GetAzimuthPreFitError()
226  const
227 {
228  if (HasParameter(ePreFitShowerAxisX) &&
229  HasParameter(ePreFitShowerAxisY) &&
230  HasParameter(ePreFitShowerAxisZ) &&
231  HasParameterCovariance(ePreFitShowerAxisX, ePreFitShowerAxisX) &&
232  HasParameterCovariance(ePreFitShowerAxisY, ePreFitShowerAxisY) &&
233  HasParameterCovariance(ePreFitShowerAxisZ, ePreFitShowerAxisZ) &&
234  HasParameterCovariance(ePreFitShowerAxisX, ePreFitShowerAxisY) &&
235  HasParameterCovariance(ePreFitShowerAxisX, ePreFitShowerAxisZ) &&
236  HasParameterCovariance(ePreFitShowerAxisY, ePreFitShowerAxisZ)) {
237  const double covariance22 =
238  AnalyticCoordinateTransformator::GetSphericalCovarianceFromCartesian(
239  2,
240  2,
241  GetParameter(ePreFitShowerAxisX),
242  GetParameter(ePreFitShowerAxisY),
243  GetParameter(ePreFitShowerAxisZ),
244  GetParameterCovariance(ePreFitShowerAxisX, ePreFitShowerAxisX),
245  GetParameterCovariance(ePreFitShowerAxisY, ePreFitShowerAxisY),
246  GetParameterCovariance(ePreFitShowerAxisZ, ePreFitShowerAxisZ),
247  GetParameterCovariance(ePreFitShowerAxisX, ePreFitShowerAxisY),
248  GetParameterCovariance(ePreFitShowerAxisX, ePreFitShowerAxisZ),
249  GetParameterCovariance(ePreFitShowerAxisY, ePreFitShowerAxisZ)
250  );
251  return sqrt(covariance22);
252  } else {
253  WARNING("ShowerRRecData::GetAzimuthPreFitError(): Parameter or Covariances of ePreFitShowerAxis was not set, returning NaN");
254  return std::numeric_limits<double>::quiet_NaN();
255  }
256 }
257 
258 
260 double
261 ShowerRRecData::GetZenithPreFit()
262  const
263 {
264  if (HasParameter(ePreFitShowerAxisX) && HasParameter(ePreFitShowerAxisY) && HasParameter(ePreFitShowerAxisZ)) {
265  return
266  AnalyticCoordinateTransformator::GetZenithFromCartesianCoordinates(
267  GetParameter(ePreFitShowerAxisX),
268  GetParameter(ePreFitShowerAxisY),
269  GetParameter(ePreFitShowerAxisZ)
270  );
271  } else {
272  WARNING("ShowerRRecData::GetZenithPreFit(): Parameter ePreFitShowerAxis was not set");
273  return std::numeric_limits<double>::quiet_NaN();
274  }
275 }
276 
277 
279 double
280 ShowerRRecData::GetZenithPreFitError()
281  const
282 {
283  if (HasParameter(ePreFitShowerAxisX) &&
284  HasParameter(ePreFitShowerAxisY) &&
285  HasParameter(ePreFitShowerAxisZ) &&
286  HasParameterCovariance(ePreFitShowerAxisX, ePreFitShowerAxisX) &&
287  HasParameterCovariance(ePreFitShowerAxisY, ePreFitShowerAxisY) &&
288  HasParameterCovariance(ePreFitShowerAxisZ, ePreFitShowerAxisZ) &&
289  HasParameterCovariance(ePreFitShowerAxisX, ePreFitShowerAxisY) &&
290  HasParameterCovariance(ePreFitShowerAxisX, ePreFitShowerAxisZ) &&
291  HasParameterCovariance(ePreFitShowerAxisY, ePreFitShowerAxisZ)) {
292  const double covariance11 =
293  AnalyticCoordinateTransformator::GetSphericalCovarianceFromCartesian(
294  1,
295  1,
296  GetParameter(ePreFitShowerAxisX),
297  GetParameter(ePreFitShowerAxisY),
298  GetParameter(ePreFitShowerAxisZ),
299  GetParameterCovariance(ePreFitShowerAxisX, ePreFitShowerAxisX),
300  GetParameterCovariance(ePreFitShowerAxisY, ePreFitShowerAxisY),
301  GetParameterCovariance(ePreFitShowerAxisZ, ePreFitShowerAxisZ),
302  GetParameterCovariance(ePreFitShowerAxisX, ePreFitShowerAxisY),
303  GetParameterCovariance(ePreFitShowerAxisX, ePreFitShowerAxisZ),
304  GetParameterCovariance(ePreFitShowerAxisY, ePreFitShowerAxisZ)
305  );
306  return sqrt(covariance11);
307  } else {
308  WARNING("ShowerRRecData::GetZenithPreFitError(): Parameter or Covariances of ePreFitShowerAxis was not set, returning NaN");
309  return std::numeric_limits<double>::quiet_NaN();
310  }
311 }
312 
313 
315 ShowerRRecData::GetCoordinateOrigin()
316  const
317 {
318  const utl::CoordinateSystemPtr referenceCS = det::Detector::GetInstance().GetReferenceCoordinateSystem();
319  if (HasParameter(revt::eCoordinateOriginX) &&
320  HasParameter(revt::eCoordinateOriginY) &&
321  HasParameter(revt::eCoordinateOriginZ)) {
322  return utl::Point(GetParameter(revt::eCoordinateOriginX),
323  GetParameter(revt::eCoordinateOriginY),
324  GetParameter(revt::eCoordinateOriginZ),
325  referenceCS);
326  } else {
327  WARNING("ShowerRRecData::GetCoordinateOrigin(): Parameter eCoordinateOrigin was not set. Throwing exception...");
328  throw utl::NonExistentComponentException("Tried to get an unset parameter (eCoordinateOriginX/Y/Z) from ParameterStorage.");
329  }
330 }
331 
332 
333 bool
334 ShowerRRecData::HasCorePosition()
335  const
336 {
337  return (HasParameter(revt::eCoreX) &&
338  HasParameter(revt::eCoreY) &&
339  HasParameter(revt::eCoreZ));
340 }
341 
342 
344 ShowerRRecData::GetCorePosition()
345  const
346 {
347  const utl::CoordinateSystemPtr referenceCS = det::Detector::GetInstance().GetReferenceCoordinateSystem();
348  if (HasCorePosition()) {
349  return utl::Point(GetParameter(revt::eCoreX),
350  GetParameter(revt::eCoreY),
351  GetParameter(revt::eCoreZ),
352  referenceCS);
353  } else {
354  WARNING("ShowerRRecData::GetCorePosition(): Parameter eCore was not set. You might want to use GetReferenceCorePosition(). Throwing exception...");
355  throw utl::NonExistentComponentException("Tried to get an unset parameter (eCoreX/Y/Z) from ParameterStorage.");
356  }
357 }
358 
359 
361 ShowerRRecData::GetCoreError()
362  const
363 {
364  const utl::CoordinateSystemPtr referenceCS = det::Detector::GetInstance().GetReferenceCoordinateSystem();
365  if (HasParameterError(revt::eCoreX) &&
366  HasParameterError(revt::eCoreY) &&
367  HasParameterError(revt::eCoreZ)) {
368  return utl::Vector(GetParameterError(revt::eCoreX),
369  GetParameterError(revt::eCoreY),
370  GetParameterError(revt::eCoreZ),
371  referenceCS);
372  } else {
373  WARNING("ShowerRRecData::GetCoreError(): Parameter eCore was not set. Throwing exception...");
374  throw utl::NonExistentComponentException("Tried to get an unset parameter error (eCoreX/Y/Z) from ParameterStorage.");
375  }
376 }
377 
378 
379 double
380 ShowerRRecData::GetCoreCorrelationXY()
381  const
382 {
383  const utl::CoordinateSystemPtr referenceCS = det::Detector::GetInstance().GetReferenceCoordinateSystem();
384  if (HasParameterCovariance(revt::eCoreX, revt::eCoreY)) {
385  return GetParameterCovariance(revt::eCoreX, revt::eCoreY);
386  } else {
387  WARNING("ShowerRRecData::GetCoreError(): Parameter eCore was not set. Throwing exception...");
388  throw utl::NonExistentComponentException("Tried to get an unset parameter correlation (eCoreX/Y) from ParameterStorage.");
389  }
390 }
391 
392 
393 bool
394 ShowerRRecData::HasAxis()
395  const
396 {
397  return (HasParameter(revt::eShowerAxisX) &&
398  HasParameter(revt::eShowerAxisY) &&
399  HasParameter(revt::eShowerAxisZ));
400 }
401 
402 
404 ShowerRRecData::GetAxis()
405  const
406 {
407  const utl::CoordinateSystemPtr fgLocalCS = fwk::LocalCoordinateSystem::Create(GetCoordinateOrigin());
408  if (HasAxis()) {
409  return utl::Vector(GetParameter(revt::eShowerAxisX),
410  GetParameter(revt::eShowerAxisY),
411  GetParameter(revt::eShowerAxisZ),
412  fgLocalCS);
413  } else {
414  WARNING("ShowerRRecData::GetAxis(): Parameter eShowerAxis was not set. You might want to use GetReferenceAxis(). Throwing exception...");
415  throw utl::NonExistentComponentException("Tried to get an unset parameter (eShowerAxisX/Y/Z) from ParameterStorage.");
416  }
417 }
418 
419 
422 ShowerRRecData::GetMagneticFieldVector()
423  const
424 {
425  const utl::CoordinateSystemPtr fgLocalCS = fwk::LocalCoordinateSystem::Create(GetCoordinateOrigin());
426  if (HasParameter(revt::eMagneticFieldVectorX) &&
427  HasParameter(revt::eMagneticFieldVectorY) &&
428  HasParameter(revt::eMagneticFieldVectorZ)) {
429  return utl::Vector(GetParameter(revt::eMagneticFieldVectorX),
430  GetParameter(revt::eMagneticFieldVectorY),
431  GetParameter(revt::eMagneticFieldVectorZ),
432  fgLocalCS);
433  } else {
434  WARNING("ShowerRRecData::GetMagneticFieldVector(): Parameter eMagneticFieldVector was not set. Throwing exception...");
435  throw utl::NonExistentComponentException("Tried to get an unset parameter (eMagneticFieldVectorX/Y/Z) from ParameterStorage.");
436  }
437 }
438 
439 
440 bool
441 ShowerRRecData::HasReferenceCorePosition(const Event& event)
442  const
443 {
444  if (ShowerRRecData::fReferenceCoreFlag == ShowerRRecData::eUseSDReferenceCore) {
445  if (!event.GetRecShower().HasSRecShower()) {
446  ERROR("No SRecShower available but SD reference core specified in the settings.");
448  } else {
449  return true; // There is no logic to ask SRecShower yet implemented...
450  }
451  } else if (ShowerRRecData::fReferenceCoreFlag == ShowerRRecData::eUseFDReferenceCore) {
452  if (!event.HasFEvent()) {
453  ERROR("No FEvent available but FD reference Core specified in the settings!");
455  } else {
456  const fevt::FEvent& fdEvent = event.GetFEvent();
458  eyeIter != fdEvent.EyesEnd(fevt::ComponentSelector::eHasData); ++eyeIter) {
459  if (eyeIter->GetId() != fWhichEye)
460  continue; // continue until selected eye
461  const fevt::Eye& eye = *eyeIter;
462  if (!eye.HasRecData() || !eye.GetRecData().HasFRecShower()) {
463  ERROR("Eye has no RecData or FRecShower but FD reference Core specified in the settings!");
465  } else {
466  return true; // There is no logic to ask FRecShower yet implemented...
467  }
468  }
469  }
470  } else if (ShowerRRecData::fReferenceCoreFlag == ShowerRRecData::eUseMCReferenceCore) {
471  if (!event.HasSimShower()) {
472  ERROR("No SimShower available but MC reference core specified in the settings.");
474  } else {
475  return event.GetSimShower().HasPosition();
476  }
477  } else if (ShowerRRecData::fReferenceCoreFlag == ShowerRRecData::eUseRDReferenceCore) {
478  if (HasParameter(revt::eCoreX) &&
479  HasParameter(revt::eCoreY) &&
480  HasParameter(revt::eCoreZ)) {
481  return true;
482  } else {
483  return false;
484  }
485  } else if (ShowerRRecData::fReferenceCoreFlag == ShowerRRecData::eUseRDCoordinateOrigin) {
486  return true; // is checked in getter function anyway
487  } else if (ShowerRRecData::fReferenceCoreFlag == ShowerRRecData::eUseExternalReferenceCore) {
488  if (HasParameter(revt::eExternalCoreX) &&
489  HasParameter(revt::eExternalCoreY) &&
490  HasParameter(revt::eExternalCoreZ)) {
491  return true;
492  } else {
493  return false;
494  }
495  }
496  ERROR("unknown reference core"); //this should never happen
497  throw utl::NonExistentComponentException("invalid reference core specified");
498 }
499 
500 
501 bool
502 ShowerRRecData::HasReferenceAxis(const Event& event)
503  const
504 {
505  if (ShowerRRecData::fReferenceAxisFlag == ShowerRRecData::eUseSDReferenceAxis) {
506  if (!event.GetRecShower().HasSRecShower()) {
507  ERROR("No SRecShower available but SD reference core specified in the settings.");
509  } else {
510  return true; // There is no logic to ask SRecShower yet implemented...
511  }
512  } else if (ShowerRRecData::fReferenceAxisFlag == ShowerRRecData::eUseFDReferenceAxis) {
513  if (!event.HasFEvent()) {
514  ERROR("No FEvent available but FD reference Core specified in the settings!");
516  } else {
517  const fevt::FEvent& fdEvent = event.GetFEvent();
519  eyeIter != fdEvent.EyesEnd(fevt::ComponentSelector::eHasData); ++eyeIter) {
520  if (eyeIter->GetId() != fWhichEye)
521  continue; // continue until selected eye
522  const fevt::Eye& eye = *eyeIter;
523  if (!eye.HasRecData() || !eye.GetRecData().HasFRecShower()) {
524  ERROR("Eye has no RecData or FRecShower but FD reference Core specified in the settings!");
526  } else {
527  return true; // There is no logic to ask FRecShower yet implemented...
528  }
529  }
530  }
531  } else if (ShowerRRecData::fReferenceAxisFlag == ShowerRRecData::eUseMCReferenceAxis) {
532  if (!event.HasSimShower()) {
533  ERROR("No SimShower available but MC reference core specified in the settings.");
535  } else {
536  return event.GetSimShower().HasDirection();
537  }
538  } else if (ShowerRRecData::fReferenceAxisFlag == ShowerRRecData::eUseRDReferenceAxis) {
539  if (HasParameter(revt::eShowerAxisX) &&
540  HasParameter(revt::eShowerAxisY) &&
541  HasParameter(revt::eShowerAxisZ)) {
542  return true;
543  } else {
544  return false;
545  }
546  } else if (ShowerRRecData::fReferenceAxisFlag == ShowerRRecData::eUseExternalReferenceAxis) {
547  if (HasParameter(revt::eExternalShowerAxisX) &&
548  HasParameter(revt::eExternalShowerAxisY) &&
549  HasParameter(revt::eExternalShowerAxisZ)) {
550  return true;
551  } else {
552  return false;
553  }
554  }
555  ERROR("unknown reference direction"); //this should never happen
556  throw utl::NonExistentComponentException("invalid reference direction specified");
557 }
558 
559 
563 ShowerRRecData::GetReferenceCorePosition(const Event& event)
564  const
565 {
566  // set reference core/direction
567  if (ShowerRRecData::fReferenceCoreFlag == ShowerRRecData::eUseSDReferenceCore) {
568  if (!event.GetRecShower().HasSRecShower()) {
569  ERROR("No SRecShower available but SD reference core specified in the settings.");
571  } else {
572  const ShowerSRecData& showersrec = event.GetRecShower().GetSRecShower();
573  return showersrec.GetCorePosition();
574  }
575  } else if (ShowerRRecData::fReferenceCoreFlag == ShowerRRecData::eUseFDReferenceCore) {
576  if (!event.HasFEvent()) {
577  ERROR("No FEvent available but FD reference Core specified in the settings!");
579  } else {
580  const fevt::FEvent& fdEvent = event.GetFEvent();
582  eyeIter != fdEvent.EyesEnd(fevt::ComponentSelector::eHasData); ++eyeIter) {
583  if (eyeIter->GetId() != fWhichEye)
584  continue; // continue until selected eye
585  const fevt::Eye& eye = *eyeIter;
586  if (!eye.HasRecData() || !eye.GetRecData().HasFRecShower()) {
587  ERROR("Eye has no RecData or FRecShower but FD reference Core specified in the settings!");
589  } else {
590  const ShowerFRecData& showerfrec = eye.GetRecData().GetFRecShower();
591  return showerfrec.GetCorePosition();
592  }
593  }
594  }
595  } else if (ShowerRRecData::fReferenceCoreFlag == ShowerRRecData::eUseMCReferenceCore) {
596  if (!event.HasSimShower()) {
597  ERROR("No SimShower available but MC reference core specified in the settings.");
599  } else {
600  return event.GetSimShower().GetPosition();
601  }
602  } else if (ShowerRRecData::fReferenceCoreFlag == ShowerRRecData::eUseRDReferenceCore) {
603  const ShowerRRecData& showerrrec = event.GetRecShower().GetRRecShower();
604  return showerrrec.GetCorePosition();
605  } else if (ShowerRRecData::fReferenceCoreFlag == ShowerRRecData::eUseRDCoordinateOrigin) {
606  const ShowerRRecData& showerrrec = event.GetRecShower().GetRRecShower();
607  return showerrrec.GetCoordinateOrigin();
608  } else if (ShowerRRecData::fReferenceCoreFlag == ShowerRRecData::eUseExternalReferenceCore) {
609  const utl::CoordinateSystemPtr referenceCS = det::Detector::GetInstance().GetReferenceCoordinateSystem();
610  if (HasParameter(revt::eExternalCoreX) &&
611  HasParameter(revt::eExternalCoreY) &&
612  HasParameter(revt::eExternalCoreZ)) {
613  return utl::Point(GetParameter(revt::eExternalCoreX),
614  GetParameter(revt::eExternalCoreY),
615  GetParameter(revt::eExternalCoreZ),
616  referenceCS);
617  } else {
618  WARNING("ShowerRRecData::GetCorePosition(): Parameter eExternalCore was not set. Throwing exception...");
619  throw utl::NonExistentComponentException("Tried to get an unset parameter (eExternalCoreX/Y/Z) from ParameterStorage.");
620  }
621  }
622  ERROR("unknown reference core"); //this should never happen
623  throw utl::NonExistentComponentException("invalid reference core specified");
624 }
625 
626 
628 ShowerRRecData::GetReferenceCoreError(const Event& event)
629  const
630 {
631  // set reference core/direction
632  if (ShowerRRecData::fReferenceCoreFlag == ShowerRRecData::eUseSDReferenceCore) {
633  if (!event.GetRecShower().HasSRecShower()) {
634  ERROR("No SRecShower available but SD reference core specified in the settings.");
636  } else {
637  const ShowerSRecData& showersrec = event.GetRecShower().GetSRecShower();
638  return showersrec.GetCoreError();
639  }
640  } else if (ShowerRRecData::fReferenceCoreFlag == ShowerRRecData::eUseFDReferenceCore) {
641  if (!event.HasFEvent()) {
642  ERROR("No FEvent available but FD reference Core specified in the settings!");
644  } else {
645  const fevt::FEvent& fdEvent = event.GetFEvent();
647  eyeIter != fdEvent.EyesEnd(fevt::ComponentSelector::eHasData); ++eyeIter) {
648  if (eyeIter->GetId() != fWhichEye)
649  continue; // continue until selected eye
650  const fevt::Eye& eye = *eyeIter;
651  if (!eye.HasRecData() || !eye.GetRecData().HasFRecShower()) {
652  ERROR("Eye has no RecData or FRecShower but FD reference Core specified in the settings!");
654  } else {
655  const ShowerFRecData& showerfrec = eye.GetRecData().GetFRecShower();
656  return showerfrec.GetCoreError();
657  }
658  }
659  }
660  } else if (ShowerRRecData::fReferenceCoreFlag == ShowerRRecData::eUseMCReferenceCore) {
661  if (!event.HasSimShower()) {
662  ERROR("No SimShower available but MC reference core specified in the settings.");
664  } else {
665  ERROR("MC is specified as reference core position, no error for this setting.");
666  return utl::Vector();
667  }
668  } else if (ShowerRRecData::fReferenceCoreFlag == ShowerRRecData::eUseRDReferenceCore) {
669  ERROR("RD is specified as reference core position, no error for this setting.");
670  return utl::Vector(); // No CoreError
671  } else if (ShowerRRecData::fReferenceCoreFlag == ShowerRRecData::eUseRDCoordinateOrigin) {
672  ERROR("RDCoordinateOrigin is specified as reference core position, no error for this setting.");
673  return utl::Vector(); // No CoreError
674  } else if (ShowerRRecData::fReferenceCoreFlag == ShowerRRecData::eUseExternalReferenceCore) {
675  WARNING("External is specified as reference core position, no error for this setting.");
676  return utl::Vector(); // No CoreError
677  }
678  ERROR("unknown reference core"); //this should never happen
679  throw utl::NonExistentComponentException("invalid reference core specified");
680 }
681 
682 double
683 ShowerRRecData::GetReferenceCoreErrorCorrelationXY(const Event& event)
684 const
685 {
686  if (ShowerRRecData::fReferenceCoreFlag == ShowerRRecData::eUseSDReferenceCore) {
687  if (!event.GetRecShower().HasSRecShower()) {
688  ERROR("No SRecShower available but SD reference core specified in the settings.");
690  } else {
691  const ShowerSRecData& showersrec = event.GetRecShower().GetSRecShower();
692  return showersrec.GetCorrelationXY();
693  }
694  } else if (ShowerRRecData::fReferenceCoreFlag == ShowerRRecData::eUseFDReferenceCore) {
695  if (!event.HasFEvent()) {
696  ERROR("No FEvent available but FD reference Core specified in the settings!");
698  } else {
699  const fevt::FEvent& fdEvent = event.GetFEvent();
701  eyeIter != fdEvent.EyesEnd(fevt::ComponentSelector::eHasData); ++eyeIter) {
702  if (eyeIter->GetId() != fWhichEye)
703  continue; // continue until selected eye
704  const fevt::Eye& eye = *eyeIter;
705  if (!eye.HasRecData() || !eye.GetRecData().HasFRecShower()) {
706  ERROR("Eye has no RecData or FRecShower but FD reference Core specified in the settings!");
708  } else {
709  const ShowerFRecData& showerfrec = eye.GetRecData().GetFRecShower();
710  return showerfrec.GetCorrelationXY();
711  }
712  }
713  }
714  } else if (ShowerRRecData::fReferenceCoreFlag == ShowerRRecData::eUseMCReferenceCore) {
715  if (!event.HasSimShower()) {
716  ERROR("No SimShower available but MC reference core specified in the settings.");
718  } else {
719  ERROR("MC is specified as reference core position, no ReferenceCoreErrorCorrelationXY for this setting.");
720  return 0;
721  }
722  } else if (ShowerRRecData::fReferenceCoreFlag == ShowerRRecData::eUseRDReferenceCore) {
723  ERROR("RD is specified as reference core position, no ReferenceCoreErrorCorrelationXY for this setting.");
724  return 0;
725  } else if (ShowerRRecData::fReferenceCoreFlag == ShowerRRecData::eUseRDCoordinateOrigin) {
726  ERROR("RDCoordinateOrigin is specified as reference core position, no ReferenceCoreErrorCorrelationXY for this setting.");
727  return 0;
728  } else if (ShowerRRecData::fReferenceCoreFlag == ShowerRRecData::eUseExternalReferenceCore) {
729  WARNING("External is specified as reference core position, no ReferenceCoreErrorCorrelationXY for this setting.");
730  return 0;
731  }
732  ERROR("unknown reference core"); //this should never happen
733  throw utl::NonExistentComponentException("invalid reference core specified");
734 }
735 
736 
738 ShowerRRecData::GetReferenceAxis(const Event& event)
739  const
740 {
741  if (ShowerRRecData::fReferenceAxisFlag == ShowerRRecData::eUseSDReferenceAxis) {
742  if (!event.GetRecShower().HasSRecShower()) {
743  ERROR("No SRecShower available but SD reference direction specified in the settings.");
745  } else {
746  const ShowerSRecData& showersrec = event.GetRecShower().GetSRecShower();
747  return showersrec.GetAxis();
748  }
749  } else if (ShowerRRecData::fReferenceAxisFlag == ShowerRRecData::eUseFDReferenceAxis) {
750  if (!event.HasFEvent()) {
751  ERROR("No FEvent available but FD reference direction specified in the settings!");
753  } else {
754  const fevt::FEvent& fdEvent = event.GetFEvent();
756  eyeIter != fdEvent.EyesEnd(fevt::ComponentSelector::eHasData); ++eyeIter) {
757  if (eyeIter->GetId() != fWhichEye)
758  continue; // continue until selected eye
759  const fevt::Eye& eye = *eyeIter;
760  if (!eye.HasRecData() || !eye.GetRecData().HasFRecShower()) {
761  ERROR("Eye has no RecData or FRecShower but FD reference direction specified in the settings!");
763  } else {
764  const ShowerFRecData& showerfrec = eye.GetRecData().GetFRecShower();
765  return showerfrec.GetAxis();
766  }
767  }
768  }
769  } else if (ShowerRRecData::fReferenceAxisFlag == ShowerRRecData::eUseMCReferenceAxis) {
770  if (!event.HasSimShower()) {
771  ERROR("No SimShower available but MC reference direction specified in the settings.");
773  } else {
774  return -1 * event.GetSimShower().GetDirection(); // MC direction is defined as velocity direction of the particles
775  }
776  } else if (ShowerRRecData::fReferenceAxisFlag == ShowerRRecData::eUseRDReferenceAxis) {
777  const ShowerRRecData& showerrrec = event.GetRecShower().GetRRecShower();
778  return showerrrec.GetAxis();
779  } else if (ShowerRRecData::fReferenceAxisFlag == ShowerRRecData::eUseExternalReferenceAxis) {
780  const utl::CoordinateSystemPtr fgLocalCS = fwk::LocalCoordinateSystem::Create(GetCoordinateOrigin());
781  if (HasParameter(revt::eExternalShowerAxisX) &&
782  HasParameter(revt::eExternalShowerAxisY) &&
783  HasParameter(revt::eExternalShowerAxisZ)) {
784  return utl::Vector(GetParameter(revt::eExternalShowerAxisX),
785  GetParameter(revt::eExternalShowerAxisY),
786  GetParameter(revt::eExternalShowerAxisZ),
787  fgLocalCS);
788  } else {
789  WARNING("ShowerRRecData::GetReferenceAxis(): Parameter eExternalShowerAxis was not set. Throwing exception...");
790  throw utl::NonExistentComponentException("Tried to get an unset parameter (eExternalShowerAxisX/Y/Z) from ParameterStorage.");
791  }
792  }
793  ERROR("unknown reference direction"); //this should never happen
794  throw utl::NonExistentComponentException("invalid reference direction specified");
795 }
const utl::Vector & GetCoreError() const
Shower core as reconstructed by the FD or FD eye.
double GetCorrelationXY() const
#define LAMESHADOWPTR_INST(_T_...)
utl::Vector GetAxis() const
Returns vector of the shower axis.
Point object.
Definition: Point.h:32
bool HasRecData() const
Definition: FEvent/Eye.h:116
Fluorescence Detector Eye Event.
Definition: FEvent/Eye.h:29
Interface class to access to the SD Reconstruction of a Shower.
boost::filter_iterator< ComponentSelector, ConstAllEyeIterator > ConstEyeIterator
Definition: FEvent.h:56
bool HasFEvent() const
ShowerRecData & GetRecShower()
Interface class to access to the RD Reconstruction of a Shower.
bool HasSimShower() const
double GetCorrelationXY() const
core xy correlation (MU: in which coordinate system???)
EyeIterator EyesEnd(const ComponentSelector::Status status)
Definition: FEvent.h:66
const utl::Vector & GetCoreError() const
Base class for exceptions trying to access non-existing components.
boost::shared_ptr< const CoordinateTransformer > CoordinateSystemPtr
Shared pointer for coordinate systems.
utl::Point GetCoordinateOrigin() const
bool HasFRecShower() const
Check if reconstructed shower info has been allocated.
Definition: EyeRecData.h:330
evt::ShowerFRecData & GetFRecShower()
Reconstructed shower info for this eye.
Definition: EyeRecData.h:323
EyeIterator EyesBegin(const ComponentSelector::Status status)
Definition: FEvent.h:58
const utl::Vector & GetAxis() const
#define WARNING(message)
Macro for logging warning messages.
Definition: ErrorLogger.h:163
Top of Fluorescence Detector event hierarchy.
Definition: FEvent.h:33
Vector object.
Definition: Vector.h:30
Interface class to access to Fluorescence reconstruction of a Shower.
const utl::Point & GetCorePosition() const
utl::Point GetCorePosition() const
returns pointer of the position vector of the core in the reference coor system
static Policy::type Create(const utl::Point &theOrigin)
Create the standard local coordinate system for a Point.
#define ERROR(message)
Macro for logging error messages.
Definition: ErrorLogger.h:165
const utl::Point & GetCorePosition() const
Shower core as reconstructed by the FD or FD eye.
bool HasSRecShower() const
fevt::EyeRecData & GetRecData()
Reconstructed data for this eye.
Definition: FEvent/Eye.cc:130
const utl::Vector & GetAxis() const
Shower Axis as reconstructed by the FD or FD eye.

, generated on Tue Sep 26 2023.