102 int number_of_points;
108 double absorptionLength;
109 double scatteringLength;
114 JParser<> zap(
"Example program to draw PDF from LED beacon.");
120 zap[
'A'] =
make_field(absorptionLength) = 50.0;
121 zap[
'S'] =
make_field(scatteringLength) = 50.0;
130 catch(
const exception &error) {
131 FATAL(error.what() << endl);
135 const double theta = dir.first;
136 const double phi = dir.second;
142 const double P_atm = 240.0;
143 const double tmin = -10.0;
144 const double tmax = +10.0;
145 const double A = 440e-4;
146 const double R_Hz = 0.0e3;
148 const JDispersion dispersion(P_atm);
151 const double lm = scatteringLength / 0.83;
152 const double lr = scatteringLength / 0.17;
154 const double cs = 0.83 * 0.92;
156 const double l_abs = absorptionLength;
157 const double ls = scatteringLength;
158 const double l_att = l_abs * lr / (l_abs + lr);
163 cout <<
"Rayleigh scattering length " << lr <<
" m" << endl;
164 cout <<
"Mie scattering length " << lm <<
" m" << endl;
165 cout <<
"Absorption length " << l_abs <<
" m" << endl;
179 JCotangent(number_of_points),
196 JCotangent(number_of_points),
204 TH1D h0(
"h0", NULL, 430, -15.0, +200.0);
205 TH1D
h1(
"h1", NULL, 430, -15.0, +200.0);
206 TH1D h2(
"h2", NULL, 430, -15.0, +200.0);
207 TH1D h3(
"h3", NULL, 430, -15.0, +200.0);
208 TH1D ha(
"ha", NULL, 430, -15.0, +200.0);
210 JSplineFunction1S_t
f[4];
211 JSplineFunction1S_t f1;
214 for (
int i = 1; i <=
h1.GetNbinsX(); ++i) {
216 const double t1 =
h1.GetBinCenter(i);
218 const double F1 = pdfMie .getDirectLightFromLED (
D, ct, theta, phi, t1);
219 const double F2 = pdfMie .getScatteredLightFromLED(
D, ct, theta, phi, t1);
220 const double F3 = pdfRayleigh.getScatteredLightFromLED(
D, ct, theta, phi, t1);
223 h0.SetBinContent(i, F1 + F2 + F3);
224 h1.SetBinContent(i, F1);
225 h2.SetBinContent(i, F2);
226 h3.SetBinContent(i, F3);
231 f[3][t1] = F1 + F2 + F3;
233 f1[t1] = F1 + F2 + F3;
238 for (
int i = 3; i !=
sizeof(
f)/
sizeof(
f[0]); ++i) {
242 JQuantiles quantiles(
f[i]);
245 const double lz = l_abs * ls / (l_abs*(1.0-cs) + ls);
247 NOTICE(
"int " << quantiles.getIntegral() *
D*
D *
exp(
D/lz) << endl);
250 DEBUG(
"ct " << ct << endl);
251 DEBUG(
"theta " << theta << endl);
252 DEBUG(
"phi " << phi << endl);
253 DEBUG(
"int " << quantiles.getIntegral() << endl);
254 DEBUG(
"t1 " << quantiles.getX() << endl);
255 DEBUG(
"max " << quantiles.getY() << endl);
256 DEBUG(
"FWHM " << quantiles.getFWHM() << endl);
260 const double Tmin = ha.GetXaxis()->GetXmin();
261 const double Tmax = ha.GetXaxis()->GetXmax();
263 const double V = f1.rbegin()->getIntegral() + R_Hz * 1e-9 * (Tmax - Tmin);
265 for (
int i = 1; i <= ha.GetNbinsX(); ++i) {
267 const double t1 = ha.GetBinCenter(i);
269 JSplineFunction1S_t::result_type p = f1(t1);
271 double v = p.v + R_Hz * 1e-9 * (t1 - Tmin);
272 double y = p.f + R_Hz * 1e-9;
274 const double W =
exp(-v) * y / (1.0 -
exp(-V));
276 ha.SetBinContent(i,W);
Utility class to parse command line options.
do echo Generating $dir eval D
double rayleigh(const double ct)
double getQE(const double lambda, const bool option)
Quantum efficiency of 10-inch Hamamatsu PMT.
then for HISTOGRAM in h0 h1
Light yield from LED (number of p.e.
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
double henyey_greenstein(const double ct)
source $JPP_DIR setenv csh $JPP_DIR eval JShellParser o a A
#define DEBUG(A)
Message macros.
then set_variable FORMULA *[0] exp(-0.5 *(x-[1])*(x-[1])/([2]*[2]))" set_variable OUTPUT_FILE histogram.root JHistogram1D -o $WORKDIR/$OUTPUT_FILE -F "$FORMULA" -
double getAngularAcceptance(const double x)
Angular acceptence of PMT.