1#ifndef __JPHYSICS__JLED__
2#define __JPHYSICS__JLED__
54 const double dt)
const = 0;
83 const double epsilon = 1e-12) :
92 for (
double x = 0.5*dp; x < PI; x += dp) {
112 const double t_ns)
const
114 const double sd = sqrt((1.0 + cd)*(1.0 - cd));
115 const double d = D_m;
119 const double px = sin(theta)*cos(phi);
121 const double pz = cos(theta);
123 const double ct = sd*px + cd*pz;
130 const double V = exp(-d/l_abs) * exp(-d/ls);
131 const double W = A/(d*d);
151 const double t_ns)
const
161 const double sd = sqrt((1.0 + cd)*(1.0 - cd));
162 const double l = D_m;
168 const double px = sin(theta)*cos(phi);
169 const double py = sin(theta)*sin(phi);
170 const double pz = cos(theta);
172 const double qx = cd*px + 0 - sd*pz;
173 const double qy = 1*py;
174 const double qz = sd*px + 0 + cd*pz;
180 const double Jc = 1.0 / ls;
182 const double xmin =
tmin;
183 const double xmax = std::min(
tmax, t_ns);
191 const double t = 0.5 * (xmax + xmin) + i->getX() * 0.5 * (xmax - xmin);
192 const double dt = i->getY() * 0.5 * (xmax - xmin);
204 const double t = i->getX();
205 const double dt = i->getY();
207 const double d = l + C*(t_ns - t)/ng;
208 const double V = exp(-d/l_abs);
212 const double cb = j->getX();
213 const double dc = j->getY();
215 const double sb = sqrt((1.0 + cb)*(1.0 - cb));
217 const double v = 0.5 * (d + l) * (d - l) / (d - l*cb);
218 const double u = d - v;
220 if (u <= 0)
continue;
221 if (v <= 0)
continue;
223 const double cts = (l*cb - v) / u;
225 const double W = min(A/(v*v), 2.0*PI);
227 const double Jd = ng * (1.0 - cts) / C;
229 const double ca = (l - v*cb) / u;
230 const double sa = v*sb / u;
232 for (std::vector<JElement3D_t>::const_iterator k =
phi_engine.begin(); k !=
phi_engine.end(); ++k) {
234 const double cp = k->getX();
235 const double sp = k->getY();
236 const double dp = k->getZ();
238 const double dom = dc * dp * v*v / (u*u);
240 const double ct0 = cd*ca - sd*sa*cp;
241 const double ph0 = atan2(sa*sp, cd*sa*cp + sd*ca);
243 const double vx = -sb*cp * qx;
244 const double vy = -sb*sp * qy;
245 const double vz = cb * qz;
251 value += qe * dt * dom * Ja * Jc * U * V * W / Jd;
303 double (*QE) (
const double),
304 double (*Pmt) (
const double),
307 double (*Km3) (
const double),
313 const double Tmin_ns,
314 const double Tmax_ns,
317 const double epsilon = 1e-12) :
340 const double dt)
const override
363 virtual double getQE(
const double lambda)
const override
434 double (*
qe)(
const double lambda);
452 double (*
pmt)(
const double ct);
460 double (*
km3)(
const double ct);
The elements in a collection are sorted according to their abscissa values and a given distance opera...
Auxiliary classes for numerical integration.
Interface for emission profile from LED.
virtual ~JAbstractLED()
Virtual destructor.
virtual double getLightFromLED(const double ct, const double phi, const double dt) const =0
Light yield from LED (number of p.e.
virtual double getAbsorptionLength(const double lambda) const =0
Absorption length.
virtual double getScatteringLength(const double lambda) const =0
Scattering length.
virtual double getScatteringProbability(const double ct) const =0
Model specific function to describe light scattering in water (integral over full solid angle normali...
virtual double getPhotocathodeArea() const =0
Photo-cathode area of PMT.
virtual double getQE(const double lambda) const =0
Quantum efficiency of PMT (incl.
virtual double getAngularAcceptance(const double ct) const =0
Angular acceptence of PMT.
Light dispersion inteface.
virtual double getIndexOfRefractionGroup(const double lambda) const
Index of refraction for group velocity.
Implementation of dispersion for water in deep sea.
Probability Density Functions of the time response of a PMT (C-like interface)
double(* qe)(const double lambda)
Quantum efficiency of PMT (incl.
double l_abs
Absorption length.
virtual double getAbsorptionLength(const double lambda) const override
Absorption length.
virtual double getScatteringLength(const double lambda) const override
Scattering length.
double(* pmt)(const double ct)
Angular acceptance of PMT.
double ls
Scattering length.
double(* km3)(const double ct)
Model specific function to describe light scattering in water.
virtual double getAngularAcceptance(const double ct) const override
Angular acceptance of PMT.
virtual double getLightFromLED(const double ct, const double phi, const double dt) const override
Light yield from LED (number of p.e.
const double A
photo-cathode area [m2]
const JAbstractLED * led
Pointer to interface for emission profile from LED.
JLED_C(const double Area, const JAbstractLED *LED, double(*QE)(const double), double(*Pmt)(const double), const double L_abs, const double L_s, double(*Km3)(const double), const double P_atm, const double wavelength, const double Tmin_ns, const double Tmax_ns, const JQuadrature &engine=JCotangent(20), const int numberOfPoints=20, const double epsilon=1e-12)
Constructor.
virtual double getScatteringProbability(const double ct) const override
Model specific function to describe light scattering in water (integral over full solid angle normali...
virtual double getQE(const double lambda) const override
Quantum efficiency of PMT (incl.
virtual double getPhotocathodeArea() const override
Photo-cathode area of PMT.
Probability Density Functions of the time response of a PMT.
JLED(const double lambda, const double Tmin_ns, const double Tmax_ns, const JQuadrature &engine=JCotangent(20), const int numberOfPoints=20, const double epsilon=1e-12)
Constructor.
double getDirectLightFromLED(const double D_m, const double cd, const double theta, const double phi, const double t_ns) const
Probability density function for direct light from LED.
double getScatteredLightFromLED(const double D_m, const double cd, const double theta, const double phi, const double t_ns) const
Probability density function for scattered light from LED.
std::vector< JElement3D_t > phi_engine
Light yield from LED (number of p.e.
Auxiliary methods for light properties of deep-sea water.
JTOOLS::JElement3D< double, double > JElement3D_t
JTOOLS::JElement2D< double, double > JElement2D_t
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).