UnivTimeKGLogNormal.cc
Go to the documentation of this file.
1 #include "UnivTimeKGConfig.h"
2 
3 #include <tls/UnivTimeKGLogNormal.h>
4 
5 #include <Math/PdfFuncMathCore.h>
6 #include <Math/ProbFuncMathCore.h>
7 #include <Math/QuantFuncMathCore.h>
8 
9 #include <string>
10 #include <cmath>
11 #include <iostream>
12 #include <sstream>
13 
14 using namespace std;
15 
16 
17 namespace UnivTimeKG {
18 
19  /*
20  Implementation of the time model based on the log-normal distribution (GAP 2013-022)
21  */
22 
23  LogNormalTimeModel::LogNormalTimeModel()
24  : m(0), s(0), moff(0), soff(0) { }
25 
26 
28  m(0),
29  s(0),
30  moff(0),
31  soff(0)
32  {
33  nParams = 2;
34  icomp = i;
35 
36  for (int ilnpar = 0; ilnpar <= 1; ++ilnpar) {
37  for (int ipar = 0; ipar <= 1; ++ipar) {
38  std::ostringstream stringStream;
39  std::string baseDir = DATA_DIR; // from settings.h
40  stringStream << baseDir << "/LogNormal/parameters/pars_"
41  << icomp << "_" << ilnpar << "_" << ipar;
42  addInterpolationTable(stringStream.str());
43  }
44  }
45  }
46 
47 
48  double
49  LogNormalTimeModel::getShapeParameter(const unsigned int ipar, const vector<double>& pars, const double DX)
50  {
51  if (ipar == 0) {
52  const double g1 = pars[0];
53  const double g2 = pars[1];
54  return 1e6 * pow((1 + pow((0.888889 + 0.000222222 * DX), 2.0)), (-0.5 * g2)) * pow((4000.0 + DX), (-g1));
55  } else if (ipar == 1) {
56  const double a = pars[2];
57  const double b = pars[3];
58  return a + b * DX;
59  } else {
60  cout << "bad parameter number!" << endl;
61  throw;
62  }
63  }
64 
65 
66  void
67  LogNormalTimeModel::setShapeParameters(const double DX, const double r, const double psi,
68  const double /*theta*/, const double /*lgE*/)
69  {
70  vector<double> params;
71  interpolateParameters(DX, r, psi, params);
72  m = params[0] + moff;
73  s = params[1] + soff;
74  }
75 
76 
77  void
78  LogNormalTimeModel::setParameterOffsets(const double m, const double s)
79  {
80  moff = m;
81  soff = s;
82  }
83 
84 
85  // for testing
86  void
87  LogNormalTimeModel::setShapeParametersDirectly(const double mm, const double ss)
88  {
89  m = mm;
90  s = ss;
91  }
92 
93 
94  double
95  LogNormalTimeModel::pdf(const double t)
96  {
97  if (t > 0)
98  return ROOT::Math::lognormal_pdf(t, m, s, 0);
99  else
100  return 0;
101  }
102 
103 
104  double
105  LogNormalTimeModel::cdf(const double t)
106  {
107  if (t > 0)
108  return ROOT::Math::lognormal_cdf(t, m, s, 0);
109  else
110  return 0;
111  }
112 
113 
114  double
115  LogNormalTimeModel::invcdf(const double quantile)
116  {
117  return ROOT::Math::lognormal_quantile(quantile, m, s);
118  }
119 
120 }
void interpolateParameters(const double DX, const double r, const double psi, std::vector< double > &output)
Definition: UnivTimeKG.cc:184
constexpr double mm
Definition: AugerUnits.h:113
unsigned int nParams
Definition: UnivTimeKG.h:59
void setParameterOffsets(const double m, const double s)
void setShapeParameters(const double DX, const double r, const double psi, const double theta, const double lgE)
double pow(const double x, const unsigned int i)
double getShapeParameter(const unsigned int ipar, const std::vector< double > &pars, const double DX)
constexpr double s
Definition: AugerUnits.h:163
unsigned int icomp
Definition: UnivTimeKG.h:61
void addInterpolationTable(const std::vector< double > &xs, const std::vector< double > &ys, const std::vector< std::vector< double > > &data)
Definition: UnivTimeKG.cc:114
void setShapeParametersDirectly(const double mm, const double ss)
constexpr double m
Definition: AugerUnits.h:121

, generated on Tue Sep 26 2023.