92 double absorptionLength;
93 double scatteringLength;
98 JParser<> zap(
"Example program to draw PDF from LED beacon.");
104 zap[
'A'] =
make_field(absorptionLength) = 50.0;
105 zap[
'S'] =
make_field(scatteringLength) = 50.0;
114 catch(
const exception &error) {
115 FATAL(error.what() << endl);
119 const double theta = dir.first;
120 const double phi = dir.second;
126 const double P_atm = 240.0;
127 const double tmin = -10.0;
128 const double tmax = +10.0;
129 const double A = 440e-4;
130 const double R_Hz = 0.0e3;
135 const double lm = scatteringLength / 0.83;
136 const double lr = scatteringLength / 0.17;
138 const double cs = 0.83 * 0.92;
140 const double l_abs = absorptionLength;
141 const double ls = scatteringLength;
142 const double l_att = l_abs * lr / (l_abs + lr);
147 cout <<
"Rayleigh scattering length " << lr <<
" m" << endl;
148 cout <<
"Mie scattering length " << lm <<
" m" << endl;
149 cout <<
"Absorption length " << l_abs <<
" m" << endl;
187 TH1D h0(
"h0", NULL, 430, -15.0, +200.0);
188 TH1D h1(
"h1", NULL, 430, -15.0, +200.0);
189 TH1D h2(
"h2", NULL, 430, -15.0, +200.0);
190 TH1D h3(
"h3", NULL, 430, -15.0, +200.0);
191 TH1D ha(
"ha", NULL, 430, -15.0, +200.0);
197 for (
int i = 1; i <= h1.GetNbinsX(); ++i) {
199 const double t1 = h1.GetBinCenter(i);
201 const double F1 = pdfMie .getDirectLightFromLED (D, ct, theta, phi, t1);
202 const double F2 = pdfMie .getScatteredLightFromLED(D, ct, theta, phi, t1);
203 const double F3 = pdfRayleigh.getScatteredLightFromLED(D, ct, theta, phi, t1);
206 h0.SetBinContent(i,
F1 + F2 + F3);
207 h1.SetBinContent(i,
F1);
208 h2.SetBinContent(i, F2);
209 h3.SetBinContent(i, F3);
214 f[3][t1] =
F1 + F2 + F3;
216 f1[t1] =
F1 + F2 + F3;
221 for (
int i = 3; i !=
sizeof(f)/
sizeof(f[0]); ++i) {
228 const double lz = l_abs *
ls / (l_abs*(1.0-cs) +
ls);
230 NOTICE(
"int " << quantiles.getIntegral() * D*D * exp(D/lz) << endl);
232 DEBUG(
"D " << D << endl);
233 DEBUG(
"ct " << ct << endl);
234 DEBUG(
"theta " << theta << endl);
235 DEBUG(
"phi " << phi << endl);
236 DEBUG(
"int " << quantiles.getIntegral() << endl);
237 DEBUG(
"t1 " << quantiles.getX() << endl);
238 DEBUG(
"max " << quantiles.getY() << endl);
239 DEBUG(
"FWHM " << quantiles.getFWHM() << endl);
243 const double Tmin = ha.GetXaxis()->GetXmin();
244 const double Tmax = ha.GetXaxis()->GetXmax();
246 const double V =
f1.rbegin()->
getIntegral() + R_Hz * 1e-9 * (Tmax - Tmin);
248 for (
int i = 1; i <= ha.GetNbinsX(); ++i) {
250 const double t1 = ha.GetBinCenter(i);
252 JSplineFunction1S_t::result_type p =
f1(t1);
254 double v = p.v + R_Hz * 1e-9 * (t1 - Tmin);
255 double y = p.f + R_Hz * 1e-9;
257 const double W = exp(-
v) *
y / (1.0 - exp(-V));
259 ha.SetBinContent(i,W);
double getAngularAcceptance(const double x)
Angular acceptence of PMT.
#define DEBUG(A)
Message macros.
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
Utility class to parse command line options.
Implementation of dispersion for water in deep sea.
Probability Density Functions of the time response of a PMT (C-like interface)
Light yield from LED (number of p.e.
double getQE(const double lambda, const bool option)
Get quantum efficiency of PMT.
const JPolynome F1
Integral.
const JPolynome f1(1.0, 2.0, 3.0)
Function.
double henyey_greenstein(const double g, const double x)
Auxiliary method to describe light scattering in water (Henyey-Greenstein).
double rayleigh(const double a, const double x)
Auxiliary method to describe light scattering in water (Rayleigh).
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
double getIntegral(const double x) const
Integral value.
Auxiliary data structure to list files in directory.