MuonProductionDepthFinder.cc
Go to the documentation of this file.
2 #include <fwk/LocalCoordinateSystem.h>
3 #include <fwk/CoordinateSystemRegistry.h>
4 #include <fwk/CentralConfig.h>
5 #include <fwk/RunController.h>
6 
7 #include <evt/Event.h>
8 #include <evt/ShowerRecData.h>
9 #include <evt/ShowerSRecData.h>
10 #include <evt/ShowerSimData.h>
11 #include <evt/AtmosphereParameters.h>
12 
13 #include <sevt/SEvent.h>
14 #include <sevt/Station.h>
15 #include <sevt/PMTCalibData.h>
16 #include <sevt/PMTRecData.h>
17 #include <sevt/StationRecData.h>
18 #include <sevt/Header.h>
19 
20 #include <det/Detector.h>
21 
22 #include <sdet/SDetector.h>
23 #include <sdet/STimeVariance.h>
24 
25 #include <atm/Atmosphere.h>
26 #include <atm/InclinedAtmosphericProfile.h>
27 
28 #include <utl/MathConstants.h>
29 #include <utl/CoordinateSystemPtr.h>
30 #include <utl/AxialVector.h>
31 #include <utl/Vector.h>
32 #include <utl/Point.h>
33 #include <utl/AugerUnits.h>
34 #include <utl/ReferenceEllipsoid.h>
35 #include <utl/PhysicalConstants.h>
36 #include <utl/UTMPoint.h>
37 #include <utl/TimeStamp.h>
38 #include <utl/Trace.h>
39 #include <utl/ErrorLogger.h>
40 #include <utl/TraceAlgorithm.h>
41 #include <utl/AugerException.h>
42 #include <utl/UTCDateTime.h>
43 
44 #include <iostream>
45 #include <string>
46 #include <cmath>
47 #include <iterator>
48 
49 using namespace fwk;
50 using namespace evt;
51 using namespace sevt;
52 using namespace det;
53 using namespace sdet;
54 using namespace utl;
55 using namespace atm;
56 using namespace std;
57 using namespace MuonProductionDepthFinderGL;
58 
59 
60 double
61 ZToDepth(const double h,
62  const vector<double>& hl,
63  const vector<double>& al, const vector<double>& bl, const vector<double>& cl)
64 {
65  for (unsigned int i = 0; i < 4; ++i)
66  if (hl[i] <= h && h < hl[i+1])
67  return al[i] + bl[i] * exp(-h / cl[i]);
68 
69  const double hTopAtmosphere = al[4] * cl[4] / bl[4];
70  if (hl[4] <= h && h < hTopAtmosphere)
71  return al[4] - bl[4] * (h / cl[4]);
72 
73  return 0;
74 }
75 
76 
77 double
78 DepthToZ(const double x,
79  const vector<double>& hl,
80  const vector<double>& al, const vector<double>& bl, const vector<double>& cl)
81 {
82  vector<double> xl(5);
83  for (unsigned int i = 0; i < 5; ++i)
84  xl[i] = ZToDepth(hl[i], hl, al, bl, cl);
85 
86  for (unsigned int i = 0; i < 4; ++i)
87  if (xl[i] >= x && x > xl[i+1])
88  return -cl[i] * log((x - al[i]) / bl[i]);
89 
90  if (xl[4] >= x && x > 0)
91  return cl[4] * (al[4] - x) / bl[4];
92 
93  return 0;
94 }
95 
96 
97 /*function extracted from AIRES code*/
98 double
99 ZToSlantDepth(const double zcground, const double theta, const double z,
100  const vector<double>& hl,
101  const vector<double>& al, const vector<double>& bl, const vector<double>& cl,
102  const bool curvature)
103 {
104  double zinjection = (al[4] * cl[4]) / bl[4];
105 
106  const double x0 = ZToDepth(zinjection, hl, al, bl, cl);
107 
108  const double cosTheta = cos(theta);
109 
110  const double rEarth = 6371315.*meter; // 6371315<-CORSIKA, AIRES->6370949 (m)
111  const double rEarth2 = 2 * rEarth;
112 
113  // The following parameters were set to optimize calculations whilst
114  // ensuring that the error in Xslant is approximately less than
115  // 0.1 g/cm2 (Xslant > 300 g/cm2).
116 
117  const double coplanemin = 0.996;
118  const double deltax0 = 0.4;
119  const double xquantum = 0.000000000002;
120 
121  // Checking input arguments.
122  if (cosTheta <= 0)
123  cout << "ERROR: you are using an wrong zenith angle (> 90 deg)" << endl;
124 
125  if (cosTheta < coplanemin && curvature) {
126 
127  double zv =
128  sqrt(z*z + 2 * z * (rEarth + zcground) * cosTheta + (rEarth + zcground) * (rEarth + zcground)) - rEarth;
129  const double xvertical = ZToDepth(zv, hl, al, bl, cl);
130  const bool xsign = (x0 > xvertical);
131 
132  double xv;
133  double xvmax;
134  if (xsign) {
135  xv = xvertical;
136  xvmax = x0;
137  } else {
138  xv = x0;
139  xvmax = xvertical;
140  }
141 
142  const double cozen2 = cosTheta * cosTheta;
143  const double xvrfact0 = deltax0 * cozen2;
144  const double xvrfact = 1 + xvrfact0;
145  const double xvqx = max(0.0001 * xvmax, xquantum);
146  const double xvl0 = xvqx / xvrfact0;
147  const double zgrsz2 = 4 * (1 - cozen2) * (zcground + rEarth) * (zcground + rEarth);
148 
149  double xpath = 0;
150  while (xv < xvmax) {
151  const double xvp = xv;
152 
153  if (xv > xvl0) {
154  xv *= xvrfact;
155  } else {
156  xv += xvqx;
157  }
158  if (xv > xvmax)
159  xv = xvmax;
160 
161  const double zvp = zv;
162  zv = DepthToZ(xv, hl, al, bl, cl);
163 
164  const double sizprim2 = zgrsz2 /((zv + zvp + rEarth2) * (zv + zvp + rEarth2));
165  xpath += (xv - xvp) / sqrt(1 - sizprim2);
166  }
167 
168  return xsign ? -xpath : xpath;
169 
170  } else {
171 
172  // Quasi vertical axes are processed with a plane Earth model.
173  const double zv = z * cosTheta + zcground;
174  const double xvertical = ZToDepth(zv, hl, al, bl, cl);
175  return (xvertical - x0) / cosTheta;
176 
177  }
178 
179  return 0;
180 }
181 
182 
183 double
184 FLogP0(double logz)
185 {
186  if (logz < 3.2)
187  logz = 3.2;
188  if (logz > 6)
189  logz = 6;
190 
191  return -0.6085 + logz * (1.955 + logz * (-0.3299 + logz * 0.0186));
192 }
193 
194 
195 double
196 EpsilonRz(const double r, const double z)
197 {
198  const double lgz = log10(z);
199  const double p0 = pow(10, FLogP0(lgz));
200  return p0 / pow(r, 1.1758);
201 }
202 
203 
206 {
207  INFO("MuonProductionDepthFinder::Init()");
208 
209  CentralConfig* const theCentralConfig = CentralConfig::GetInstance();
210  const Branch& topBranch = theCentralConfig->GetTopBranch("MuonProductionDepthFinder");
211  topBranch.GetChild("useConstRadiusCut").GetData(fUseConstRadiusCut);
212  topBranch.GetChild("radiusCut").GetData(fRadiusCut);
213  topBranch.GetChild("signalThreshold").GetData(fSignalThreshold);
214  topBranch.GetChild("timeShift").GetData(fTimeShift);
215  topBranch.GetChild("signalMin").GetData(fSignalMin);
216  topBranch.GetChild("numberOfBins").GetData(fNXmuBins);
217  topBranch.GetChild("xMin").GetData(fXmuMin);
218  topBranch.GetChild("xMax").GetData(fXmuMax);
219  topBranch.GetChild("usePionPathCorrection").GetData(fUsePionPathCorrection);
220 
221  fTblFuncRadiusCut =
223  topBranch.GetChild("tblEnergy").Get<vector<double> >(),
224  topBranch.GetChild("tblRadiusCut").Get<vector<double> >()
225  );
226 
227  return eSuccess;
228 }
229 
230 
232 MuonProductionDepthFinder::Run(Event& event)
233 {
234  INFO("MuonProductionDepthFinder::Run()");
235 
236  if (!(event.HasSEvent() && event.HasRecShower() &&
237  event.GetRecShower().HasSRecShower()))
238  return eContinueLoop;
239 
240  InitCoordinateSys(event, 0, 0, 0, 0);
241  SetMuonProductionDepthHist(event);
242 
243  return eSuccess;
244 }
245 
246 
248 MuonProductionDepthFinder::Finish()
249 {
250  INFO("MuonProductionDepthFinder::Finish()");
251 
252  return eSuccess;
253 }
254 
255 
256 void
257 MuonProductionDepthFinder::InitCoordinateSys(const Event& event,
258  const double dX, const double dY,
259  const double dTheta, const double dPhi)
260 {
261  INFO("MuonProductionDepthFinder::InitCoordSys()");
262 
263  // nothing to do if there is no SEvent
264  const evt::ShowerSRecData& showersrec = event.GetRecShower().GetSRecShower();
265  const utl::Vector& axis = showersrec.GetAxis();
266  const Point originalcore = showersrec.GetCorePosition();
267  fCoreTime = showersrec.GetCoreTime();
268 
269  CoordinateSystemPtr originallocalCS = LocalCoordinateSystem::Create(originalcore);
270 
271  // moving the core
272  const Vector shiftcore(dX, dY, 0, originallocalCS);
273  fCore = originalcore + shiftcore;
274  fCoreTime -= axis * shiftcore / kSpeedOfLight;
275  fLocalCS = LocalCoordinateSystem::Create(fCore);
276 
277  // moving the angle
278  fTheta = axis.GetTheta(originallocalCS) + dTheta;
279  fPhi = axis.GetPhi(originallocalCS) + dPhi;
280 
281  // rotating to showerCS
282  const utl::CoordinateSystemPtr alignedCS =
283  CoordinateSystem::RotationZ(fPhi, fLocalCS);
284  fShowerCS = CoordinateSystem::RotationY(fTheta, alignedCS);
285 
286  if (!fUseConstRadiusCut) {
287  if (showersrec.GetEnergy() < fTblFuncRadiusCut.GetX(0))
288  fRadiusCut = fTblFuncRadiusCut.GetY(0);
289  else if (showersrec.GetEnergy() > fTblFuncRadiusCut.GetX(fTblFuncRadiusCut.GetNPoints() - 1))
290  fRadiusCut = fTblFuncRadiusCut.GetY(fTblFuncRadiusCut.GetNPoints() - 1);
291  else
292  fRadiusCut = fTblFuncRadiusCut.Y(showersrec.GetEnergy());
293  }
294 }
295 
296 
297 void
298 MuonProductionDepthFinder::SetMuonProductionDepthHist(Event& event)
299 {
300  INFO("MuonProductionDepthFinder::SetMuonProductionDepthHist()");
301 
302  const ReferenceEllipsoid& wgs84 =
303  ReferenceEllipsoid::Get(ReferenceEllipsoid::eWGS84);
304 
305  sevt::SEvent& sevent = event.GetSEvent();
306  const det::Detector& detector = det::Detector::GetInstance();
307  const sdet::SDetector& sDetector = detector.GetSDetector();
308 
309  evt::ShowerSRecData& showersrec = event.GetRecShower().GetSRecShower();
310 
311  if (!showersrec.HasMPDHistogram())
312  showersrec.MakeMPDHistogram(fNXmuBins, fXmuMin, fXmuMax);
313 
314  const bool hasSimEvent = event.HasSimShower();
315  if (hasSimEvent) {
316  const evt::ShowerSimData& showerssim = event.GetSimShower();
317  const evt::AtmosphereParameters& atmospherePars = showerssim.GetAtmosphereParameters();
318  fAATM = atmospherePars.GetA();
319  fBATM = atmospherePars.GetB();
320  fCATM = atmospherePars.GetC();
321  fHLAY = atmospherePars.GetLayerAltitudes();
322  } else {
323  const Atmosphere& atmo = Detector::GetInstance().GetAtmosphere();
324  try {
325  atmo.InitSlantProfileModel(fCore, showersrec.GetAxis(), 10*g/cm2);
327  ERROR(e.GetMessage());
328  return;
329  }
330  fSlantDepthProfile = atmo.EvaluateSlantDepthVsDistance();
331  }
332 
333  const double cosZenith = cos(fTheta);
334  const double sinZenith = sin(fTheta);
335 
336  //Loop over stations
337  for (SEvent::StationIterator sIt = sevent.StationsBegin();
338  sIt != sevent.StationsEnd(); ++sIt) {
339 
340  sevt::Station& station = *sIt;
341  const sdet::Station& dStation = sDetector.GetStation(*sIt);
342  const double fadcBinSize = dStation.GetFADCBinSize(); // this is already in ns
343  //for correcting by the track length
344  const double tankHeight = dStation.GetHeight();
345  const double tankRadius = dStation.GetRadius();
346  const double vemCorrection =
347  cosZenith + 2 * tankHeight * sinZenith/(kPi * tankRadius);
348 
349  if (!station.IsCandidate()) // do not work with bad stations
350  continue;
351 
352  bool useItInTheMPD = true;
353  if (station.IsLowGainSaturation()) // do not work with saturated stations
354  useItInTheMPD = false;
355 
356  const Point& sPosition = dStation.GetPosition();
357  const Vector sRelPos = sPosition - fCore;
358 
359  const double delta = sRelPos.GetZ(fShowerCS);
360  const double r = sRelPos.GetRho(fShowerCS);
361  const double r2 = r * r;
362 
363  const TimeStamp fArrivalTimeOfShowerPlane =
364  fCoreTime - TimeInterval(delta/kSpeedOfLight);
365  const double fStartTimeReferredToArrivalOfShowerPlane =
366  (station.GetRecData().GetSignalStartTime() - fArrivalTimeOfShowerPlane).GetInterval();
367 
368  const unsigned int startBin = station.GetRecData().GetSignalStartSlot();
369  const unsigned int endBin = station.GetRecData().GetSignalEndSlot();
370 
371  double zground = wgs84.PointToLatitudeLongitudeHeight(sPosition).get<2>();
372 
373  // only tanks far from the core are used in the reconstruction
374  if (r < fRadiusCut)
375  useItInTheMPD = false;
376 
377  // minimal signal required in a tank for the MPD recontruction
378  if (station.GetRecData().GetTotalSignal() < fSignalMin)
379  useItInTheMPD = false;
380 
381  const int numberOfPMTs = distance(sIt->PMTsBegin(), sIt->PMTsEnd());
382 
383  vector<pair<double, double> > depthSignalVector;
384 
385  for (sevt::Station::PMTIterator pIt = sIt->PMTsBegin();
386  pIt != sIt->PMTsEnd(); ++pIt) {
387  depthSignalVector.clear();
388 
389  if (!pIt->HasRecData())
390  continue;
391 
392  PMTRecData& pmtRec = pIt->GetRecData();
393  /*
394  if component "eDirectLightSubtracted" exist, it is used for the MPD,
395  if not, the standard total component is used
396  */
398  continue;
402 
403  const TraceD& vemtraceTot = pmtRec.GetVEMTrace(sigComp);
404 
405  double peak = 0;
406  for (unsigned int i = startBin; i < endBin; ++i)
407  peak = max(peak, vemtraceTot[i]);
408  /*
409  Signal threshold = 15% of the maximum of the trace
410  */
411  fSignalThreshold = peak * 0.15;
412 
413  for (unsigned int i = startBin; i < endBin; ++i) {
414 
415  const double ct =
416  (fStartTimeReferredToArrivalOfShowerPlane + (i+0.5 - startBin) * fadcBinSize - fTimeShift) *
418 
419  if (ct <= 0)
420  continue;
421 
422  double zmdelta = 0.5 * (r2 / ct - ct);
423  double z = zmdelta + delta;
424  /*
425  Iterative estimation of epsilon(r, z - Delta).
426  This converges quickly and a couple of iterations are sufficient.
427  */
428  for (unsigned int j = 0; j < 2; ++j) {
429  const double epsilon = EpsilonRz(r, zmdelta);
430  const double dcte = ct - epsilon * 0.5 * r2 / (sqrt(r2 + zmdelta * zmdelta));
431  zmdelta = 0.5 * (r2 / dcte - dcte);
432  z = zmdelta + delta;
433  if (zmdelta < 0)
434  break;
435  }
436  if (zmdelta < 0)
437  continue;
438 
439  /*Correction for the pion path: It assumes that only the parent/last pion
440  has transverse momentum (wrt the shower axis).
441  */
442  if (fUsePionPathCorrection) {
443  const double energyPion = 1500.*GeV * pow(r, -0.84); // L.Cazon Ph.D., ISBN 84-9750-467-4
444  const double massPion = 139.57*MeV;
445  const double ctauPion = 7.8045*meter;
446  const double zPion = z / sqrt(r2 + z*z) * ctauPion * energyPion / massPion;
447  z -= zPion;
448  }
449 
450  if (vemtraceTot[i] > fSignalThreshold && z > 0) {
451 
452  if (hasSimEvent) {
453 
454  //For simulated events
455  const bool curvature = false;
456  fSlantDepth = ZToSlantDepth(zground, fTheta, z, fHLAY, fAATM, fBATM, fCATM, curvature);
457 
458  } else {
459 
460  //For real events
461  const double atmMinDistance = fSlantDepthProfile.MinX() + 1*mm;
462  const double atmMaxDistance = fSlantDepthProfile.MaxX() - 1*mm;
463  const double distance = -z;
464  if (distance < atmMinDistance || distance > atmMaxDistance)
465  continue;
466  fSlantDepth = fSlantDepthProfile.Y(distance);
467 
468  }
469 
470  const double signal = vemCorrection * vemtraceTot[i] / numberOfPMTs;
471  if (useItInTheMPD)
472  showersrec.GetMPDHistogram().Fill(fSlantDepth, signal);
473  depthSignalVector.push_back(make_pair(fSlantDepth, signal));
474 
475  }
476  } // loop over the trace
477 
478  if (!depthSignalVector.empty()) {
479  if (!pmtRec.HasMuonProductionDepth())
480  pmtRec.MakeMuonProductionDepth();
481  TabulatedFunctionErrors& mpdProfile = pmtRec.GetMuonProductionDepth();
482  for (unsigned int i = 0, n = depthSignalVector.size(); i < n; ++i) {
483  // estimate of the uncertainty of the depth (preliminary)
484  /*const double h0 = 7270*m;
485  const double rho0 = 1.24e-3 * g/cm3;
486  const double traceBinSize = sdet::Station::GetFADCBinSize();
487  const double deltat = traceBinSize / sqrt(12.);
488  double c = kSpeedOfLight;
489  double x = depthVector[i];
490  double deltaX = (x*h0*2/(cosZenith*r2)*pow(log(x*cosZenith/(h0*rho0)), 2)*c*deltat);*/
491  const double deltaX = 0;
492  mpdProfile.PushBack(depthSignalVector[i].first, deltaX, depthSignalVector[i].second, 0);
493  }
494  }
495  pmtRec.SetIsUsedInGlobalMPD(useItInTheMPD);
496  } // loop over the pmts
497 
498  } // loop over stations
499 }
500 
501 
502 bool
503 MuonProductionDepthFinder::IsContained(const SEvent& sevent)
504  const
505 {
506  const SDetector& sDetector = det::Detector::GetInstance().GetSDetector();
507  for (SEvent::ConstStationIterator sIt = sevent.StationsBegin(),
508  end = sevent.StationsEnd(); sIt != end; ++sIt) {
509  const sevt::Station& station = *sIt;
510  if (!station.IsCandidate())
511  continue;
512  const sdet::Station& dStation = sDetector.GetStation(*sIt);
513  const unsigned int neighbours = dStation.GetCrown(1).size();
514  if (neighbours < 6)
515  return false;
516  }
517  return true;
518 }
void MakeMPDHistogram(const int nBins, const double min, const double max)
Top of the interface to Atmosphere information.
StationIterator StationsEnd()
End of all stations.
Definition: SEvent.h:59
const StationIdCollection & GetCrown(const int level) const
Returns a list of station id&#39;s in the crown. If the argument is 0, it returns the station id...
bool HasMPDHistogram() const
utl::TraceD & GetVEMTrace(const StationConstants::SignalComponent source=StationConstants::eTotal)
Traces calibrated in VEM Peak.
Definition: PMTRecData.h:46
constexpr double mm
Definition: AugerUnits.h:113
const evt::AtmosphereParameters & GetAtmosphereParameters() const
Get the Atmosphere profile used to simulate the shower.
Point object.
Definition: Point.h:32
double FLogP0(double logz)
double GetPhi(const CoordinateSystemPtr &coordinateSystem) const
azimuth (phi) angle in spherical and cylindrical coordinates
Definition: BasicVector.h:254
void InitSlantProfileModel(const utl::Point &core, const utl::Vector &dir, const double deltaX) const
Detector description interface for Station-related data.
utl::Histogram< double > & GetMPDHistogram()
Interface class to access to the SD Reconstruction of a Shower.
double DepthToZ(const double x, const vector< double > &hl, const vector< double > &al, const vector< double > &bl, const vector< double > &cl)
Interface class to access to the SD part of an event.
Definition: SEvent.h:39
double GetTheta(const CoordinateSystemPtr &coordinateSystem) const
zenith (theta) angle in spherical coordinates
Definition: BasicVector.h:248
Class to hold collection (x,y) points and provide interpolation between them.
const std::vector< double > & GetA() const
const double meter
Definition: GalacticUnits.h:29
sevt::StationRecData & GetRecData()
Get station level reconstructed data.
#define INFO(message)
Macro for logging informational messages.
Definition: ErrorLogger.h:161
void Init()
Initialise the registry.
Branch GetChild(const std::string &childName) const
Get child of this Branch by child name.
Definition: Branch.cc:211
const std::vector< double > & GetB() const
boost::filter_iterator< PMTFilter, InternalPMTIterator > PMTIterator
Iterator over station for read/write.
double pow(const double x, const unsigned int i)
utl::TabulatedFunctionErrors & GetMuonProductionDepth()
Definition: PMTRecData.h:227
void Fill(const double x)
Definition: Histogram.h:210
bool IsCandidate() const
Check if the station is a candidate.
A TimeStamp holds GPS second and nanosecond for some event.
Definition: TimeStamp.h:110
utl::Point GetPosition() const
Tank position.
constexpr double MeV
Definition: AugerUnits.h:184
Interface class to access Shower Simulated parameters.
Definition: ShowerSimData.h:49
T Get() const
Definition: Branch.h:271
boost::shared_ptr< const CoordinateTransformer > CoordinateSystemPtr
Shared pointer for coordinate systems.
#define max(a, b)
Class representing a document branch.
Definition: Branch.h:107
class to hold data at Station level
Reference ellipsoids for UTM transformations.
class to hold reconstructed data at PMT level
Definition: PMTRecData.h:38
utl::TimeStamp GetSignalStartTime() const
Start time of the signal.
double ZToDepth(const double h, const vector< double > &hl, const vector< double > &al, const vector< double > &bl, const vector< double > &cl)
double ZToSlantDepth(const double zcground, const double theta, const double z, const vector< double > &hl, const vector< double > &al, const vector< double > &bl, const vector< double > &cl, const bool curvature)
constexpr double kPi
Definition: MathConstants.h:24
const utl::TimeStamp & GetCoreTime() const
time when shower front passes through the core point
double GetTotalSignal() const
Total integrated signal in VEM unit, averaged over pmts.
Top of the hierarchy of the detector description interface.
Definition: Detector.h:81
const sdet::SDetector & GetSDetector() const
Definition: Detector.cc:119
const double second
Definition: GalacticUnits.h:32
Triple PointToLatitudeLongitudeHeight(const Point &thePoint) const
Convert Point to Lat/Long/Height.
unsigned int GetSignalStartSlot() const
Start time of the signal in time slots from beginning of trace.
double GetRadius() const
Radius of the tank (water only)
double GetHeight() const
Height of the tank (water only)
constexpr double g
Definition: AugerUnits.h:200
signal after subtracting direct light (includes all particle sources).
const utl::Vector & GetAxis() 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
unsigned int GetSignalEndSlot() const
End time of the signal in time slots from beginning of trace.
double EpsilonRz(const double r, const double z)
double GetEnergy() const
double GetRho(const CoordinateSystemPtr &coordinateSystem) const
radius r in cylindrical coordinates (distance to z axis)
Definition: BasicVector.h:263
void MakeMuonProductionDepth()
Definition: PMTRecData.h:233
bool IsLowGainSaturation() const
Check which gains are saturated.
constexpr double kSpeedOfLight
A TimeInterval is used to represent time elapsed between two events.
Definition: TimeInterval.h:43
constexpr double GeV
Definition: AugerUnits.h:187
ResultFlag
Flag returned by module methods to the RunController.
Definition: VModule.h:60
double GetFADCBinSize() const
void SetIsUsedInGlobalMPD(const bool is)
Definition: PMTRecData.h:241
static CentralConfig * GetInstance()
Use this the first time you get an instance of central configuration.
StationIterator StationsBegin()
Beginning of all stations.
Definition: SEvent.h:57
const std::vector< double > & GetLayerAltitudes() const
total (shower and background)
execption handling for calculation/access for inclined atmosphere model
Vector object.
Definition: Vector.h:30
Detector description interface for SDetector-related data.
Definition: SDetector.h:42
const utl::Point & GetCorePosition() const
Main configuration utility.
Definition: CentralConfig.h:51
boost::indirect_iterator< InternalStationIterator, Station & > StationIterator
Iterator over all stations.
Definition: SEvent.h:52
utl::CoordinateSystemPtr Get(const std::string &id)
Get a well-known Coordinate System.
double GetZ(const CoordinateSystemPtr &coordinateSystem) const
Definition: BasicVector.h:212
const Station & GetStation(const int stationId) const
Get station by Station Id.
Definition: SDetector.cc:192
static Policy::type Create(const utl::Point &theOrigin)
Create the standard local coordinate system for a Point.
const std::vector< double > & GetC() const
bool HasVEMTrace(const StationConstants::SignalComponent source=StationConstants::eTotal) const
Definition: PMTRecData.h:55
boost::indirect_iterator< InternalConstStationIterator, const Station & > ConstStationIterator
Definition: SEvent.h:54
const atm::ProfileResult & EvaluateSlantDepthVsDistance() const
#define ERROR(message)
Macro for logging error messages.
Definition: ErrorLogger.h:165
bool HasMuonProductionDepth() const
Definition: PMTRecData.h:225
bool HasSEvent() const
const std::string & GetMessage() const
Retrieve the message from the exception.
utl::Branch GetTopBranch(const std::string &id)
Get top branch for moduleConfigLink with given id (XML files)
Class to hold the standard parameters used to specify an atmospheric profile.
constexpr double cm2
Definition: AugerUnits.h:118

, generated on Tue Sep 26 2023.