1 #ifndef __JPHYSICS__JLED__ 
    2 #define __JPHYSICS__JLED__ 
   54                                    const double dt) 
const = 0;
 
   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;                                
 
  183         const double xmax = std::min(
tmax, t_ns);
 
  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;
 
  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 
  342       return led->getLightFromLED(ct, phi, dt);
 
  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 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 ls
Scattering length.
 
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.
 
static const double PI
Mathematical constants.
 
Auxiliary methods for light properties of deep-sea water.
 
JTOOLS::JElement3D< double, double > JElement3D_t
 
JTOOLS::JElement2D< double, double > JElement2D_t
 
static const double C
Physics constants.
 
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).