Jpp test-rotations-new
the software that should make you happy
Loading...
Searching...
No Matches
JDrawLED.cc File Reference

Example program to draw PDF from LED beacon. More...

#include <string>
#include <iostream>
#include <iomanip>
#include "TROOT.h"
#include "TFile.h"
#include "TH1D.h"
#include "Jeep/JParser.hh"
#include "Jeep/JMessage.hh"
#include "JPhysics/JLED.hh"
#include "JPhysics/JPDFToolkit.hh"
#include "JPhysics/Antares.hh"
#include "JPhysics/KM3NeT.hh"
#include "JTools/JSpline.hh"
#include "JTools/JQuantiles.hh"
#include "JTools/JToolsToolkit.hh"

Go to the source code of this file.

Classes

class  LED
 Light yield from LED (number of p.e. More...
 

Typedefs

typedef std::pair< double, double > orientation
 

Functions

std::istream & operator>> (std::istream &in, orientation &x)
 
std::ostream & operator<< (std::ostream &out, const orientation &x)
 
double getAngularAcceptance (const double x)
 Angular acceptence of PMT.
 
int main (int argc, char **argv)
 

Detailed Description

Example program to draw PDF from LED beacon.

Author
mdejong

Definition in file JDrawLED.cc.

Typedef Documentation

◆ orientation

typedef std::pair<double,double> orientation

Definition at line 22 of file JDrawLED.cc.

Function Documentation

◆ operator>>()

std::istream & operator>> ( std::istream & in,
orientation & x )

Definition at line 24 of file JDrawLED.cc.

24{ return in >> x.first >> x.second; }

◆ operator<<()

std::ostream & operator<< ( std::ostream & out,
const orientation & x )

Definition at line 25 of file JDrawLED.cc.

25{ return out << x.first << ' ' << x.second; }

◆ getAngularAcceptance()

double getAngularAcceptance ( const double x)
inline

Angular acceptence of PMT.

Parameters
xcosine of angle of incidence
Returns
probability

Definition at line 68 of file JDrawLED.cc.

69{
71}
double getAngularAcceptance(const double x)
Get angular acceptance of PMT.
Definition Antares.hh:281

◆ main()

int main ( int argc,
char ** argv )

Definition at line 80 of file JDrawLED.cc.

81{
82 using namespace std;
83
84 string outputFile;
86 int number_of_points;
87 double epsilon;
88 double D;
89 double ct;
90 orientation dir;
91 double wavelength;
92 double absorptionLength;
93 double scatteringLength;
94 int debug;
95
96 try {
97
98 JParser<> zap("Example program to draw PDF from LED beacon.");
99
100 zap['o'] = make_field(outputFile) = "led.root";
101 zap['n'] = make_field(numberOfPoints) = 25;
102 zap['N'] = make_field(number_of_points) = 25;
103 zap['e'] = make_field(epsilon) = 1.0e-10;
104 zap['A'] = make_field(absorptionLength) = 50.0;
105 zap['S'] = make_field(scatteringLength) = 50.0;
106 zap['R'] = make_field(D);
107 zap['c'] = make_field(ct);
108 zap['D'] = make_field(dir);
109 zap['w'] = make_field(wavelength) = 470;
110 zap['d'] = make_field(debug) = 2;
111
112 zap(argc, argv);
113 }
114 catch(const exception &error) {
115 FATAL(error.what() << endl);
116 }
117
118
119 const double theta = dir.first;
120 const double phi = dir.second;
121
122 using namespace JPP;
123
124 // set global parameters
125
126 const double P_atm = 240.0; // ambient pressure [Atm]
127 const double tmin = -10.0; // minimal time of emission [ns]
128 const double tmax = +10.0; // maximal time of emission [ns]
129 const double A = 440e-4; // ANTARES photo-cathode area [m2]
130 const double R_Hz = 0.0e3; // singles rate [Hz]
131
132 const JDispersion dispersion(P_atm);
133
134 //const double ng = dispersion.getIndexOfRefractionGroup(wavelength);
135 const double lm = scatteringLength / 0.83;
136 const double lr = scatteringLength / 0.17;
137
138 const double cs = 0.83 * 0.92; // average cosine scattering angle
139
140 const double l_abs = absorptionLength;
141 const double ls = scatteringLength;
142 const double l_att = l_abs * lr / (l_abs + lr);
143
144
145 LED* led = new LED();
146
147 cout << "Rayleigh scattering length " << lr << " m" << endl;
148 cout << "Mie scattering length " << lm << " m" << endl;
149 cout << "Absorption length " << l_abs << " m" << endl;
150
151 const JLED_C
152 pdfMie(A,
153 led,
154 ANTARES::getQE,
156 l_abs,
157 lm,
158 henyey_greenstein,
159 P_atm,
160 wavelength,
161 tmin,
162 tmax,
163 JCotangent(number_of_points),
165 epsilon);
166
167
168 const JLED_C
169 pdfRayleigh(A,
170 led,
171 ANTARES::getQE,
173 l_att,
174 lr,
175 rayleigh,
176 P_atm,
177 wavelength,
178 tmin,
179 tmax,
180 JCotangent(number_of_points),
182 epsilon);
183
184
185 TFile out(outputFile.c_str(), "recreate");
186
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);
192
195
196
197 for (int i = 1; i <= h1.GetNbinsX(); ++i) {
198
199 const double t1 = h1.GetBinCenter(i);
200
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);
204
205
206 h0.SetBinContent(i, F1 + F2 + F3);
207 h1.SetBinContent(i, F1);
208 h2.SetBinContent(i, F2);
209 h3.SetBinContent(i, F3);
210
211 f[0][t1] = F1;
212 f[1][t1] = F2;
213 f[2][t1] = F3;
214 f[3][t1] = F1 + F2 + F3;
215
216 f1[t1] = F1 + F2 + F3;
217 }
218
219 f1.compile();
220
221 for (int i = 3; i != sizeof(f)/sizeof(f[0]); ++i) {
222
223 f[i].compile();
224
225 JQuantiles quantiles(f[i]);
226
227
228 const double lz = l_abs * ls / (l_abs*(1.0-cs) + ls);
229
230 NOTICE("int " << quantiles.getIntegral() * D*D * exp(D/lz) << endl);
231
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);
240 }
241
242
243 const double Tmin = ha.GetXaxis()->GetXmin();
244 const double Tmax = ha.GetXaxis()->GetXmax();
245
246 const double V = f1.rbegin()->getIntegral() + R_Hz * 1e-9 * (Tmax - Tmin); // integral [Tmin,Tmax]
247
248 for (int i = 1; i <= ha.GetNbinsX(); ++i) {
249
250 const double t1 = ha.GetBinCenter(i);
251
252 JSplineFunction1S_t::result_type p = f1(t1);
253
254 double v = p.v + R_Hz * 1e-9 * (t1 - Tmin);
255 double y = p.f + R_Hz * 1e-9; // function value
256
257 const double W = exp(-v) * y / (1.0 - exp(-V));
258
259 ha.SetBinContent(i,W);
260 }
261
262 delete led;
263
264 out.Write();
265 out.Close();
266}
string outputFile
double getAngularAcceptance(const double x)
Angular acceptence of PMT.
Definition JDrawLED.cc:68
#define DEBUG(A)
Message macros.
Definition JMessage.hh:62
#define NOTICE(A)
Definition JMessage.hh:64
#define FATAL(A)
Definition JMessage.hh:67
int debug
debug level
Definition JSirene.cc:72
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
Definition JParser.hh:2142
int numberOfPoints
Definition JResultPDF.cc:22
Utility class to parse command line options.
Definition JParser.hh:1698
Implementation of dispersion for water in deep sea.
Probability Density Functions of the time response of a PMT (C-like interface)
Definition JLED.hh:278
Numerical integrator for .
Quantile calculator for a given function.
Light yield from LED (number of p.e.
Definition JDrawLED.cc:31
const JPolynome F1
Integral.
const JPolynome f1(1.0, 2.0, 3.0)
Function.
const double epsilon
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
double getIntegral(const double x) const
Integral value.
Definition JPolynome.hh:276
Auxiliary data structure to list files in directory.
Type definition of a spline interpolation method based on a JCollection with JResultPDF result type.