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;
132 const JDispersion dispersion(P_atm);
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;
163 JCotangent(number_of_points),
180 JCotangent(number_of_points),
188 TH1D h0(
"h0", NULL, 430, -15.0, +200.0);
189 TH1D
h1(
"h1", NULL, 430, -15.0, +200.0);
190 TH1D h2(
"h2", NULL, 430, -15.0, +200.0);
191 TH1D h3(
"h3", NULL, 430, -15.0, +200.0);
192 TH1D ha(
"ha", NULL, 430, -15.0, +200.0);
194 JSplineFunction1S_t
f[4];
195 JSplineFunction1S_t f1;
198 for (
int i = 1; i <=
h1.GetNbinsX(); ++i) {
200 const double t1 =
h1.GetBinCenter(i);
202 const double F1 = pdfMie .getDirectLightFromLED (
D, ct, theta, phi, t1);
203 const double F2 = pdfMie .getScatteredLightFromLED(
D, ct, theta, phi, t1);
204 const double F3 = pdfRayleigh.getScatteredLightFromLED(
D, ct, theta, phi, t1);
207 h0.SetBinContent(i, F1 + F2 + F3);
208 h1.SetBinContent(i, F1);
209 h2.SetBinContent(i, F2);
210 h3.SetBinContent(i, F3);
215 f[3][t1] = F1 + F2 + F3;
217 f1[t1] = F1 + F2 + F3;
222 for (
int i = 3; i !=
sizeof(
f)/
sizeof(
f[0]); ++i) {
226 JQuantiles quantiles(
f[i]);
229 const double lz = l_abs * ls / (l_abs*(1.0-cs) + ls);
231 NOTICE(
"int " << quantiles.getIntegral() *
D*
D *
exp(
D/lz) << endl);
234 DEBUG(
"ct " << ct << endl);
235 DEBUG(
"theta " << theta << endl);
236 DEBUG(
"phi " << phi << endl);
237 DEBUG(
"int " << quantiles.getIntegral() << endl);
238 DEBUG(
"t1 " << quantiles.getX() << endl);
239 DEBUG(
"max " << quantiles.getY() << endl);
240 DEBUG(
"FWHM " << quantiles.getFWHM() << endl);
244 const double Tmin = ha.GetXaxis()->GetXmin();
245 const double Tmax = ha.GetXaxis()->GetXmax();
247 const double V = f1.rbegin()->getIntegral() + R_Hz * 1e-9 * (Tmax - Tmin);
249 for (
int i = 1; i <= ha.GetNbinsX(); ++i) {
251 const double t1 = ha.GetBinCenter(i);
253 JSplineFunction1S_t::result_type p = f1(t1);
255 double v = p.v + R_Hz * 1e-9 * (t1 - Tmin);
256 double y = p.f + R_Hz * 1e-9;
258 const double W =
exp(-v) * y / (1.0 -
exp(-V));
260 ha.SetBinContent(i,W);
Utility class to parse command line options.
double getQE(const double lambda, const bool option)
Get quantum efficiency of PMT.
double rayleigh(const double a, const double x)
Auxiliary method to describe light scattering in water (Rayleigh).
then for HISTOGRAM in h0 h1
Light yield from LED (number of p.e.
then fatal Wrong number of arguments fi set_variable DETECTOR $argv[1] set_variable STRING $argv[2] set_array QUANTILES set_variable FORMULA *[0] exp(-0.5 *(x-[1])*(x-[1])/([2]*[2]))" set_variable MODULE `getModule -a $DETECTOR -L "$STRING 0"` typeset -Z 4 STRING JOpera1D -f hydrophone.root
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
then usage $script< input_file >< detector_file > fi set_variable OUTPUT_DIR set_variable SELECTOR JDAQTimesliceL1 set_variable DEBUG case set_variable DEBUG
double henyey_greenstein(const double g, const double x)
Auxiliary method to describe light scattering in water (Henyey-Greenstein).
do echo Generating $dir eval D
source $JPP_DIR setenv csh $JPP_DIR eval JShellParser o a A
double getAngularAcceptance(const double x)
Angular acceptence of PMT.