FdCherenkovFinder.cc
Go to the documentation of this file.
1 
11 #include <utl/ErrorLogger.h>
12 #include <utl/Vector.h>
13 #include <utl/MathConstants.h>
14 #include <utl/PhysicalConstants.h>
15 #include <utl/PhysicalFunctions.h>
16 #include <utl/TabulatedFunction.h>
17 #include <utl/TabulatedFunctionErrors.h>
18 #include <utl/MultiTabulatedFunction.h>
19 #include <utl/ReferenceEllipsoid.h>
20 #include <utl/Reader.h>
21 
22 #include <evt/Event.h>
23 #include <evt/ShowerRecData.h>
24 #include <evt/ShowerFRecData.h>
25 
26 #include <fevt/FEvent.h>
27 #include <fevt/Eye.h>
28 #include <fevt/Telescope.h>
29 #include <fevt/EyeRecData.h>
30 
31 #include <det/Detector.h>
32 #include <atm/Atmosphere.h>
33 #include <atm/ScatteringResult.h>
34 #include <atm/AttenuationResult.h>
35 #include <atm/ProfileResult.h>
36 
37 #include <fdet/FDetector.h>
38 #include <fdet/Eye.h>
39 #include <fdet/Telescope.h>
40 #include <fdet/Pixel.h>
41 #include <fdet/Channel.h>
42 
43 #include <utl/Vector.h>
44 #include <utl/Point.h>
45 
46 #include <fwk/CentralConfig.h>
47 #include <fwk/CoordinateSystemRegistry.h>
48 #include <fwk/LocalCoordinateSystem.h>
49 
50 #include "FdCherenkovFinder.h"
51 
52 using namespace FdCherenkovFinderOG;
53 using namespace fwk;
54 using namespace utl;
55 using namespace evt;
56 using namespace fevt;
57 using namespace det;
58 using namespace fdet;
59 using namespace std;
60 using namespace atm;
61 
62 
64 
66  return eSuccess;
67 }
68 
70 
72 
73  Branch topB =
74  cc->GetTopBranch("FdCherenkovFinder");
75 
76  topB.GetChild("x0FOV").GetData(fX0);
77  topB.GetChild("xMaxFOV").GetData(fXMax);
78  topB.GetChild("stepX").GetData(fStep);
79  topB.GetChild("size").GetData(fSize);
80 
81  fIter = 0;
82 
83  return eSuccess;
84 
85 }// end of Init
86 
87 
89 {
90  if (!event.HasFEvent())
91  return eSuccess;
92 
93  FEvent::EyeIterator eyeIter;
94 
95  for(eyeIter= event.GetFEvent().EyesBegin();
96  eyeIter != event.GetFEvent().EyesEnd();
97  ++eyeIter) { // loop on showers
98 
99  fevt::Eye& eye = *eyeIter;
100 
101  if (!eye.HasRecData()) continue;
102  fevt::EyeRecData& eyerecdata = eye.GetRecData();
103 
104  if (!eyerecdata.HasFRecShower()) continue; // check added on May 6, 2005 (MAM)
105  if (!eyerecdata.GetFRecShower().HasLongitudinalProfile() )continue;
106  if (eyerecdata.GetFRecShower().GetLongitudinalProfile().
107  GetNPoints()<1 ) continue;
108  if (!eyerecdata.GetFRecShower().HasGHParameters() )continue;
109  // GH fit failed !
110  if (eyerecdata.GetFRecShower().GetGHParameters().GetXMax() < 0) continue;
111  if (!eyerecdata.HasLightFlux(fevt::FdConstants::eTotal) )continue;
112  if (!eyerecdata.HasLightFlux(fevt::FdConstants::eFluorTotal) )continue;
113 
114  fRecShower = &eyerecdata.GetFRecShower();
115 
116  // Loop control
117  if(fIter >= 10)
118  fIter = 0;
119 
120  fAxis = fRecShower->GetAxis();
121  fCore = fRecShower->GetCorePosition();
122 
123 
124  CoordinateSystemPtr eyeCS = det::Detector::GetInstance().GetFDetector()
125  .GetEye(eye).GetEyeCoordinateSystem();
126 
127  fEyePos = det::Detector::GetInstance().GetFDetector().GetEye(eye)
128  .GetPosition();
129 
130 
131  fT0 = eye.GetRecData().GetTZero();
132  fChi0 = eye.GetRecData().GetChiZero();
133  fRp = eye.GetRecData().GetRp();
134 
135  Vector vertical(0,0,1,eyeCS);
136  Vector sdp = eye.GetRecData().GetSDP();
137  Vector horizontalInSDP = cross(sdp,vertical);
138  horizontalInSDP.Normalize();
139  fCoreDistance = fRp/sin(kPi - fChi0);
140 
141  fCoreEyeVec = fCoreDistance*horizontalInSDP;
142  fCore = fEyePos + fCoreEyeVec;
143 
144  // Note: Since the measured efficiency is really a telescope property (albeit
145  // currently the same for all telescopes), this shouldn't simply grab the
146  // efficiency of the first telescope. --Steffen 18.5.09
147  fEfficiencyCalibration =
148  det::Detector::GetInstance().GetFDetector().GetEye(eye).GetTelescope(1).GetMeasuredRelativeEfficiency();
149 
150  fWavelength.resize(fEfficiencyCalibration.GetNPoints());
151 
152  std::copy( fEfficiencyCalibration.XBegin(),
153  fEfficiencyCalibration.XEnd(),
154  fWavelength.begin()) ;
155 
156  CherenkovFinderAtAperture(eye);
157 
158  } // end of loop over eyes
159 
160  ++fIter;
161 
162  return eSuccess;
163 
164 } // end of Run
165 
166 
169 
170  const ReferenceEllipsoid& wgs84 =
171  ReferenceEllipsoid::Get (ReferenceEllipsoid::eWGS84);
172 
173 
176 
177  TabulatedFunctionErrors& directCherenkovFlux =
179 
180  directCherenkovFlux.Clear();
181 
184 
185  TabulatedFunctionErrors& rayScattCherenkovFlux =
187 
188  rayScattCherenkovFlux.Clear();
189 
192 
193  TabulatedFunctionErrors& mieScattCherenkovFlux =
195 
196  mieScattCherenkovFlux.Clear();
197 
198 
199  TabulatedFunction& longitudinalProfile =
200  fRecShower->GetLongitudinalProfile() ;
201 
202  double ghXMax = fRecShower->GetGHParameters().GetXMax();
203 
204  if (ghXMax < 0) return eSuccess;
205 
206  const Atmosphere& atm = det::Detector::GetInstance().GetAtmosphere();
208  double atmHeightMin = dvh.MinX();
209  double atmHeightMax = dvh.MaxX();
210 
211  vector<double> cherenkovAtTrack = InitialCherenkov(eye);
212  const TabulatedFunctionErrors& lightFlux =
214 
215 
216  CoordinateSystemPtr siteCS =
217  det::Detector::GetInstance().GetSiteCoordinateSystem();
218 
219  int n = 0;
220 
221  double dirCkv = 0.0;
222  double rayScattCkv = 0.0;
223  double mieScattCkv = 0.0;
224 
225  vector<double> vecDirCkv(fWavelength.size());
226  vector<double> vecRayScattCkv(fWavelength.size());
227  vector<double> vecMieScattCkv(fWavelength.size());
228 
229  const double lambdaRef =
230  det::Detector::GetInstance().GetFDetector().GetReferenceLambda();
231  const double epsilonRef = fEfficiencyCalibration.Y(lambdaRef);
232 
234 
235  // loop on light profile at diaphragm
236  for(iter = lightFlux.Begin(); iter != lightFlux.End(); ++iter) {
237 
238  double time = iter->X();
239  double dtime = iter->XErr();
240 
241  double chiAv = fChi0 - 2.* atan(kSpeedOfLight/fRp*(time - fT0));
242  double l = fCoreEyeVec.GetMag()*sin(chiAv)/sin(fChi0 - chiAv);
243 
244  double time1 = time/ns - dtime/ns;
245  double chi1 = fChi0 - 2.0*atan(kSpeedOfLight/fRp*(time1 - fT0));
246  double l1 = fCoreEyeVec.GetMag()*sin(chi1)/sin(fChi0 - chi1);
247 
248  double time2 = time/ns + dtime/ns;
249  double chi2 = fChi0 - 2.0*atan(kSpeedOfLight/fRp *(time2 - fT0));
250  double l2 = fCoreEyeVec.GetMag()*sin(chi2)/sin(fChi0 - chi2);
251 
252  // Vector detector-shower at t=time
253  Vector chiAvVec = fCoreEyeVec + l*fAxis;
254 
255  Point pos1 = fCore + l1*fAxis;
256  Point pos2 = fCore + l2*fAxis;
257 
258  double pos1_z = (wgs84.PointToLatitudeLongitudeHeight(pos1)).get<2>();
259  double pos2_z = (wgs84.PointToLatitudeLongitudeHeight(pos2)).get<2>();
260  if ((pos1_z>atmHeightMax || pos1_z<atmHeightMin) ||
261  (pos2_z>atmHeightMax || pos2_z<atmHeightMin)) {
262  directCherenkovFlux.PushBack(time,0,0,0);
263  rayScattCherenkovFlux.PushBack(time,0,0,0);
264  mieScattCherenkovFlux.PushBack(time,0,0,0);
265  continue;
266  }
267 
268  // Average position along the track.
269  double xpos = (pos1.GetX(siteCS) + pos2.GetX(siteCS))/2.0;
270  double ypos = (pos1.GetY(siteCS) + pos2.GetY(siteCS))/2.0;
271  double zpos = (pos1.GetZ(siteCS) + pos2.GetZ(siteCS))/2.0;
272 
273  Point avepos(xpos,ypos,zpos,siteCS);
274 
275  double xMax = fXMax;
276 
277  if(fIter != 0)
278  xMax = ghXMax;
279 
280  const double slantDepth = longitudinalProfile.GetX(n);
281  const double showerAge = ShowerAge(slantDepth, xMax);
282 
283  // Rayleigh attenuation in a atmospheric depth bin along the track
284  AttenuationResult rAttenuation =
285  atm.EvaluateRayleighAttenuation(pos1,pos2,fWavelength);
286 
287  const utl::TabulatedFunctionErrors& rayleighAtt =
288  rAttenuation.GetTransmissionFactor();
289 
290  // Mie attenuation in a atmospheric depth bin along the track
291  AttenuationResult mAttenuation =
292  atm.EvaluateMieAttenuation(pos1,pos2,fWavelength);
293 
294  const utl::TabulatedFunctionErrors& mieAtt =
295  mAttenuation.GetTransmissionFactor();
296 
297  // Integrated Cherenkov at track.
298  const TabulatedFunction CherenkovProd =
299  atm.EvaluateCherenkovPhotons(pos1,pos2,showerAge);
300 
301  for(unsigned int w = 0; w < fWavelength.size(); w++) {
302 
303  cherenkovAtTrack[w] *= mieAtt.GetY(w)*rayleighAtt.GetY(w);
304  if (longitudinalProfile.GetY(n)>0.0)
305  cherenkovAtTrack[w] += CherenkovProd.GetY(w)*longitudinalProfile.GetY(n);
306 
307  }
308 
309  // Distance between average point to the eye.
310  double disteye = (avepos - fEyePos).GetMag();
311 
312  // Emisson angle from the average point to the eye.
313  double angle = fChi0 - chiAv;
314 
315  const utl::TabulatedFunction directCherenkov =
316  atm.EvaluateCherenkovDirect(pos1,pos2,fEyePos,showerAge);
317 
318 
319  // Rayleigh and Mie Attenuation in a atmospheric depth bin from shower
320  // track to eye
321  AttenuationResult rAttTrackEye =
322  atm.EvaluateRayleighAttenuation(avepos,fEyePos,fWavelength);
323 
324  const utl::TabulatedFunctionErrors& rayleighAttTrackEye =
325  rAttTrackEye.GetTransmissionFactor();
326 
327  AttenuationResult mAttTrackEye =
328  atm.EvaluateMieAttenuation(avepos,fEyePos,fWavelength);
329 
330  const utl::TabulatedFunctionErrors& mieAttTrackEye =
331  mAttTrackEye.GetTransmissionFactor();
332 
333  dirCkv = 0.0;
334 
335  for(unsigned int i=0; i<fWavelength.size(); i++) {
336 
337  vecDirCkv[i] = 0.0;
338  if(longitudinalProfile.GetY(n)>0.0) {
339 
340  vecDirCkv[i] = directCherenkov.GetY(i)*longitudinalProfile.GetY(n);
341  vecDirCkv[i] *= mieAttTrackEye.GetY(i)*rayleighAttTrackEye.GetY(i);
342 
343  dirCkv += vecDirCkv[i]*fEfficiencyCalibration[i].Y()/epsilonRef;
344  }
345 
346  }
347 
348 
349  // Evaluate Scattering Mie and Rayleigh from shower track to eye
350  ScatteringResult rScattering =
351  atm.EvaluateRayleighScattering(pos1,pos2,angle,disteye,fWavelength);
352 
353  const utl::TabulatedFunctionErrors& rayleighScattTrackEye =
354  rScattering.GetScatteringFactor();
355 
356  ScatteringResult mScattering =
357  atm.EvaluateMieScattering(pos1,pos2,angle,disteye,fWavelength);
358 
359  const utl::TabulatedFunctionErrors& mieScattTrackEye =
360  mScattering.GetScatteringFactor();
361 
362  // Scatttered Cherenkov light
363  rayScattCkv = 0.0;
364  mieScattCkv = 0.0;
365 
366  for(unsigned int i=0; i<fWavelength.size(); i++) {
367 
368  vecRayScattCkv[i] = 0.0;
369  vecMieScattCkv[i] = 0.0;
370 
371  vecRayScattCkv[i] = cherenkovAtTrack[i]
372  *rayleighScattTrackEye.GetY(i);
373  vecMieScattCkv[i] = cherenkovAtTrack[i]
374  *mieScattTrackEye.GetY(i);
375 
376  vecRayScattCkv[i] *= mieAttTrackEye.GetY(i)
377  *rayleighAttTrackEye.GetY(i);
378  vecMieScattCkv[i] *= mieAttTrackEye.GetY(i)
379  *rayleighAttTrackEye.GetY(i);
380 
381  rayScattCkv += vecRayScattCkv[i]
382  *fEfficiencyCalibration[i].Y()/epsilonRef;
383  mieScattCkv += vecMieScattCkv[i]
384  *fEfficiencyCalibration[i].Y()/epsilonRef;
385 
386  }
387 
388  directCherenkovFlux.PushBack(time,0,dirCkv,0);
389  rayScattCherenkovFlux.PushBack(time,0,rayScattCkv,0);
390  mieScattCherenkovFlux.PushBack(time,0,mieScattCkv,0);
391 
392  n++;
393 
394  } // end loop on light profile
395 
396  return eSuccess;
397 }
398 
399 
400 //BRD 28/4/05 new algorithm for calculating l1 and l2
401 vector<double>
403  const
404 {
405  const TabulatedFunction& longitudinalProfile =
406  fRecShower->GetLongitudinalProfile() ;
407 
408  const Atmosphere& atm = det::Detector::GetInstance().GetAtmosphere();
409 
410  cout << "- " << longitudinalProfile.GetNPoints() << endl;
411 
412  double xInit = longitudinalProfile.GetX(0);
413  double sizeInit = longitudinalProfile.GetY(0);
414 
415  cout << "-- " << xInit << " " << sizeInit << endl;
416 
417  double ghXMax = fRecShower->GetGHParameters().GetXMax();
418 
419  int xBin = int((xInit - fX0)/fStep);
420  if (xBin<0) xBin=0;
421 
422  double x1 = 0.0;
423  double x2 = 0.0;
424  double xMed = 0.0;
425  double xMax = 0.0;
426  double size = 0.0;
427  double normSize = 0.0;
428 
429  vector<double> cherenkov;
430  for(unsigned int w=0; w<fWavelength.size(); w++)
431  cherenkov.push_back(0.);
432 
433  CoordinateSystemPtr coreCS=
435 
436  ReferenceEllipsoid wgs84(ReferenceEllipsoid::Get(ReferenceEllipsoid::eWGS84));
437 
438 
439  double cosZenithAngle = fAxis.GetCosTheta(coreCS);
440 
442  double atmDepthMin = hvd.MinX();
443  double atmDepthMax = hvd.MaxX();
444 
445  for(int i=0; i<xBin; i++) {
446 
447  //slant depths
448  x1 = fX0 + (double(i) - 1.0)*fStep;
449  x2 = fX0 + double(i)*fStep;
450 
451  xMed = (x1 + x2)*0.5;
452 
453  size = GaisserHillas(xMed,fX0,fXMax,fSize,kLambdaGH);
454  normSize = GaisserHillas(xInit,fX0,fXMax,fSize,kLambdaGH);
455  size *= sizeInit/normSize;
456 
457  xMax = fXMax;
458 
459  if(fIter)
460  xMax = ghXMax;
461 
462  double depth1=x1*cosZenithAngle;
463  double depth2=x2*cosZenithAngle;
464  if( depth1<atmDepthMin || depth1>atmDepthMax ||
465  depth2<atmDepthMin || depth2>atmDepthMax ) {
466  continue;
467  }
468 
469 
470  double h1 = hvd.Y(depth1);
471  double h2 = hvd.Y(depth2);
472 
473  //for defined heights within the molecular profile model
474  if (h1 !=0. && h2 !=0.) {
475 
476  //vertical height above core
477 
478  h1 -= (wgs84.PointToLatitudeLongitudeHeight(fCore)).get<2>();
479  h2 -= (wgs84.PointToLatitudeLongitudeHeight(fCore)).get<2>();
480 
481  double l1 = h1/cosZenithAngle;
482  double l2 = h2/cosZenithAngle;
483 
484 
485  Point pos1 = fCore + l1*fAxis;
486  Point pos2 = fCore + l2*fAxis;
487 
488  const double showerAge = ShowerAge(xMed, xMax);
489 
490  TabulatedFunction cherenkovProd =
491  atm.EvaluateCherenkovPhotons(pos1,pos2,showerAge);
492 
493 
494  // Rayleigh Attenuation
495  AttenuationResult rAttenuation =
496  atm.EvaluateRayleighAttenuation(pos1,pos2,fWavelength);
497 
498  const utl::TabulatedFunctionErrors& rayleighAtt =
499  rAttenuation.GetTransmissionFactor();
500 
501  // Mie Attenuation
502  AttenuationResult mAttenuation =
503  atm.EvaluateMieAttenuation(pos1,pos2,fWavelength);
504 
505  const utl::TabulatedFunctionErrors& mieAtt =
506  mAttenuation.GetTransmissionFactor();
507 
508  for(unsigned int w=0; w<fWavelength.size(); w++) {
509 
510  cherenkov.at(w) *= mieAtt.GetY(w)*rayleighAtt.GetY(w);
511  cherenkov.at(w) += cherenkovProd.GetY(w)*size;
512  }
513  } // for defined heights
514 
515  }
516 
517  return cherenkov;
518 
519 } // end of InitialCherenkov
520 
521 
522 // Configure (x)emacs for this file ...
523 // Local Variables:
524 // mode:c++
525 // compile-command: "make -C .. -k"
526 // End:
AxialVector cross(const Vector &l, const Vector &r)
vector cross product
Definition: OperationsAV.h:32
unsigned int GetNPoints() const
Top of the interface to Atmosphere information.
bool HasLightFlux(const FdConstants::LightSource source=FdConstants::eTotal) const
Check that light profile for source /par source is present.
Definition: EyeRecData.h:297
void Normalize()
Definition: Vector.h:64
Point object.
Definition: Point.h:32
atm::AttenuationResult EvaluateMieAttenuation(const utl::Point &xInit, const utl::Point &xFinal, const std::vector< double > &wLength) const
bool HasRecData() const
Definition: FEvent/Eye.h:116
Fluorescence Detector Eye Event.
Definition: FEvent/Eye.h:29
const utl::TabulatedFunctionErrors & GetTransmissionFactor() const
Transmission factor.
bool HasFEvent() const
double GetChiZero() const
Definition: EyeRecData.h:85
Class to hold collection (x,y) points and provide interpolation between them.
fRp(t.GetRp())
boost::filter_iterator< ComponentSelector, AllEyeIterator > EyeIterator
selective Eye iterators
Definition: FEvent.h:55
Branch GetChild(const std::string &childName) const
Get child of this Branch by child name.
Definition: Branch.cc:211
double Y(const double x) const
Get the Y value (coordinate) for given X (ordinate)
Class holding the output of the ScatteringResult function.
const int dtime
Definition: XbAlgo.h:7
fwk::VModule::ResultFlag Finish()
Finish: invoked at end of the run (NOT end of the event)
boost::shared_ptr< const CoordinateTransformer > CoordinateSystemPtr
Shared pointer for coordinate systems.
double X() const
Definition: PairErr.h:25
Class representing a document branch.
Definition: Branch.h:107
Reference ellipsoids for UTM transformations.
bool HasLongitudinalProfile() const
double GetX(const CoordinateSystemPtr &coordinateSystem) const
Definition: BasicVector.h:206
const double ns
Class describing the Atmospheric profile.
Definition: ProfileResult.h:25
const utl::TabulatedFunction & EvaluateCherenkovDirect(const utl::Point &xA, const utl::Point &xB, const utl::Point &xEye, const double showerAge) const
constexpr double kPi
Definition: MathConstants.h:24
atm::AttenuationResult EvaluateRayleighAttenuation(const utl::Point &xInit, const utl::Point &xFinal, const std::vector< double > &wLength) const
Compute Rayleigh attenuation between points.
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
Triple PointToLatitudeLongitudeHeight(const Point &thePoint) const
Convert Point to Lat/Long/Height.
const atm::ProfileResult & EvaluateDepthVsHeight() const
Tabulated function giving Y=depth as a function of X=height.
atm::ScatteringResult EvaluateRayleighScattering(const utl::Point &xA, const utl::Point &xB, const double angle, const double distance, const std::vector< double > &xLength) const
std::vector< double > InitialCherenkov(fevt::Eye &eye) const
void PushBack(const double x, const double xErr, const double y, const double yErr)
void GetData(bool &b) const
Overloads of the GetData member template function.
Definition: Branch.cc:644
Eye-specific shower reconstruction data.
Definition: EyeRecData.h:65
const double & GetY(const unsigned int idx) const
const utl::AxialVector & GetSDP() const
Definition: EyeRecData.h:75
double GaisserHillas(const double x, const double x0, const double xMax, const double nMax, const double lambda)
Calculate the Gaisser-Hillas function.
fevt::FEvent & GetFEvent()
fwk::VModule::ResultFlag CherenkovFinderAtAperture(fevt::Eye &eye)
bool HasGHParameters() const
const utl::TabulatedFunctionErrors & GetScatteringFactor() const
Scattering factor.
double GetY(const CoordinateSystemPtr &coordinateSystem) const
Definition: BasicVector.h:209
constexpr double kSpeedOfLight
fwk::VModule::ResultFlag Run(evt::Event &event)
Run: invoked once per event.
double MinX() const
Return the minimum value for X (ordinate) stored in the profile.
ResultFlag
Flag returned by module methods to the RunController.
Definition: VModule.h:60
utl::TabulatedFunctionErrors & GetLongitudinalProfile()
retrieve longitudinal profile information (size vs depth)
double XErr() const
Definition: PairErr.h:28
constexpr double kLambdaGH
double GetRp() const
Definition: EyeRecData.h:87
double ShowerAge(const double slantDepth, const double showerMax)
General definition of shower age.
static CentralConfig * GetInstance()
Use this the first time you get an instance of central configuration.
const utl::TabulatedFunction & EvaluateCherenkovPhotons(const utl::Point &xA, const utl::Point &xB, const double showerAge) const
Vector object.
Definition: Vector.h:30
const double & GetX(const unsigned int idx) const
Main configuration utility.
Definition: CentralConfig.h:51
utl::CoordinateSystemPtr Get(const std::string &id)
Get a well-known Coordinate System.
double GetTZero() const
Definition: EyeRecData.h:83
const atm::ProfileResult & EvaluateHeightVsDepth() const
Tabulated function giving Y=height as a function of X=depth.
utl::TabulatedFunctionErrors & GetLightFlux(const FdConstants::LightSource source=fevt::FdConstants::eTotal)
Light flux at diaphragm, photons/m^2 versus time in ns.
Definition: EyeRecData.h:286
double GetZ(const CoordinateSystemPtr &coordinateSystem) const
Definition: BasicVector.h:212
fwk::VModule::ResultFlag Init()
Initialize: invoked at beginning of run (NOT beginning of event)
double Y(const double x) const
Get or interpolate the Y value that corresponds to parameter x.
static Policy::type Create(const utl::Point &theOrigin)
Create the standard local coordinate system for a Point.
void MakeLightFlux(const FdConstants::LightSource source=FdConstants::eTotal)
Definition: EyeRecData.h:293
utl::Branch GetTopBranch(const std::string &id)
Get top branch for moduleConfigLink with given id (XML files)
Class describing the Atmospheric attenuation.
double MaxX() const
Return the maximum value for X (ordinate) stored in the profile.
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.
atm::ScatteringResult EvaluateMieScattering(const utl::Point &xA, const utl::Point &xB, const double angle, const double distance, const std::vector< double > &xLength) const

, generated on Tue Sep 26 2023.