Jpp
Public Types | Public Member Functions | Public Attributes | Protected Member Functions | Static Protected Member Functions | Protected Attributes | Private Types | Private Member Functions | List of all members
JPHYSICS::JPDF_C Class Referenceabstract

Probability Density Functions of the time response of a PMT with an implementation of the JAbstractPMT and JAbstractMedium interfaces via C-like methods. More...

#include <JPDF.hh>

Inheritance diagram for JPHYSICS::JPDF_C:
JPHYSICS::JAbstractPDF JPHYSICS::JPDF JPHYSICS::JDispersion JTOOLS::JGaussLegendre JPHYSICS::JDispersionInterface JPHYSICS::JAbstractPMT JPHYSICS::JAbstractMedium JPHYSICS::JDispersionInterface JTOOLS::JQuadrature JTOOLS::JCollection< JElement2D_t > std::vector< JElement_t, JAllocator_t > JTOOLS::JMappableCollection< JKey_t, JValue_t > JTOOLS::JAbstractCollection< JAbscissa_t > JMATH::JMath< JFirst_t, JSecond_t >

Public Types

typedef JElement2D_t ::abscissa_type abscissa_type
 
typedef JElement2D_t ::ordinate_type ordinate_type
 
typedef JElement2D_t value_type
 
typedef JDistance< typename JElement2D_t ::abscissa_typedistance_type
 
typedef JCollection< JElement2D_t, JDistance< typename JElement2D_t ::abscissa_type > > collection_type
 
typedef std::vector< value_typecontainer_type
 
typedef container_type::const_iterator const_iterator
 
typedef container_type::const_reverse_iterator const_reverse_iterator
 
typedef container_type::iterator iterator
 
typedef container_type::reverse_iterator reverse_iterator
 
typedef JCollectionElementTransformer< value_typetransformer_type
 
typedef std::pair< const_iterator, bool > pair_type
 
typedef JKey_t key_type
 
typedef JValue_t mapped_type
 

Public Member Functions

 JPDF_C (const double Apmt, double(*pF_qe)(const double), double(*pF_pmt)(const double), double(*pF_l_abs)(const double), double(*pF_ls)(const double), double(*pF_ps)(const double), const double P_atm, const double Wmin, const double Wmax, const int numberOfPoints=20, const double epsilon=1e-12)
 Constructor. More...
 
virtual double getPhotocathodeArea () const
 Photo-cathode area of PMT. More...
 
virtual double getQE (const double lambda) const
 Quantum efficiency of PMT (incl. More...
 
virtual double getAngularAcceptance (const double ct) const
 Angular acceptence of PMT (normalised to one at cos() = -1). More...
 
virtual double getAbsorptionLength (const double lambda) const
 Absorption length. More...
 
virtual double getScatteringLength (const double lambda) const
 Scattering length. More...
 
virtual double getScatteringProbability (const double ct) const
 Model specific function to describe light scattering in water (integral over full solid angle normalised to one). More...
 
double getNumberOfPhotons () const
 Number of Cherenkov photons per unit track length. More...
 
double getDirectLightFromMuon (const double R_m, const double theta, const double phi) const
 Number of photo-electrons from direct Cherenkov light from muon. More...
 
double getDirectLightFromMuon (const double R_m, const double theta, const double phi, const double t_ns) const
 Probability density function for direct light from muon. More...
 
double getScatteredLightFromMuon (const double R_m, const double theta, const double phi, const double t_ns) const
 Probability density function for scattered light from muon. More...
 
double getScatteredLightFromMuon (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 muon. More...
 
double getDirectLightFromEMshowers (const double R_m, const double theta, const double phi, const double t_ns) const
 Probability density function for direct light from EM-showers. More...
 
double getScatteredLightFromEMshowers (const double R_m, const double theta, const double phi, const double t_ns) const
 Probability density function for scattered light from EM-showers. More...
 
double getDirectLightFromEMshower (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 EM-shower. More...
 
double getDirectLightFromEMshower (const double E, 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 EM-shower. More...
 
double getScatteredLightFromEMshower (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 EM-shower. More...
 
double getScatteredLightFromEMshower (const double E, 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 EM-shower. More...
 
double getDirectLightFromDeltaRays (const double R_m, const double theta, const double phi, const double t_ns) const
 Probability density function for direct light from delta-rays. More...
 
double getScatteredLightFromDeltaRays (const double R_m, const double theta, const double phi, const double t_ns) const
 Probability density function for direct light from delta-rays. More...
 
double getLightFromMuon (const int type, const double E_GeV, const double R_m, const double theta, const double phi, const double t_ns) const
 Probability density function for light from muon. More...
 
double getLightFromMuon (const double E_GeV, const double R_m, const double theta, const double phi, const double t_ns) const
 Probability density function for light from muon. More...
 
double getLightFromEMshower (const int type, const double D_m, const double cd, const double theta, const double phi, const double t_ns) const
 Probability density function for light from EM-shower. More...
 
double getLightFromEMshower (const double D_m, const double cd, const double theta, const double phi, const double t_ns) const
 Probability density function for light from EM-shower. More...
 
double getLightFromEMshower (const int type, const double E_GeV, const double D_m, const double cd, const double theta, const double phi, const double t_ns) const
 Probability density function for light from EM-shower. More...
 
double getLightFromEMshower (const double E_GeV, const double D_m, const double cd, const double theta, const double phi, const double t_ns) const
 Probability density function for light from EM-shower. More...
 
virtual void clear ()
 Clear. More...
 
virtual ordinate_typeget (typename JClass< abscissa_type >::argument_type x)
 Get ordinate value. More...
 
virtual mapped_typeget (typename JClass< key_type >::argument_type key)=0
 Get mapped value. More...
 
virtual int getSize () const
 Get number of elements. More...
 
virtual abscissa_type getX (int index) const
 Get abscissa value. More...
 
virtual abscissa_type getXmin () const
 Get minimal abscissa value. More...
 
virtual abscissa_type getXmax () const
 Get maximal abscissa value. More...
 
const ordinate_typegetY (int index) const
 Get ordinate value. More...
 
ordinate_typegetY (int index)
 Get ordinate value. More...
 
void transform (const transformer_type &transformer)
 Transform collection. More...
 
void sort ()
 Sort elements. More...
 
const_iterator lower_bound (typename JClass< abscissa_type >::argument_type x) const
 Get first position of element i, where x >= i->getX(). More...
 
iterator lower_bound (typename JClass< abscissa_type >::argument_type x)
 Get first position of element i, where x >= i->getX(). More...
 
pair_type insert (const value_type &element)
 Insert element. More...
 
void configure (const JAbstractCollection< abscissa_type > &bounds)
 Configure collection. More...
 
void configure (const JAbstractCollection< abscissa_type > &bounds, typename JClass< ordinate_type >::argument_type value)
 Configure collection. More...
 
void configure (const JAbstractCollection< abscissa_type > &bounds, const JFunction1D_t &function)
 Configure collection. More...
 
bool is_compatible (const JCollection &collection) const
 Test whether collections are compatible. More...
 
JCollectionnegate ()
 Negate collection. More...
 
JCollectionadd (const JCollection &collection)
 Add collection. More...
 
JCollectionadd (typename JClass< ordinate_type >::argument_type value)
 Add offset. More...
 
JCollectionadd (const JFunction1D_t &function)
 Add function. More...
 
JCollectionsub (const JCollection &collection)
 Subtract collection. More...
 
JCollectionsub (typename JClass< ordinate_type >::argument_type value)
 Subtract offset. More...
 
JCollectionsub (const JFunction1D_t &function)
 Subtract function. More...
 
JCollectionmul (const double value)
 Scale contents. More...
 
JFirst_t & mul (const JSecond_t &object)
 Multiply with object. More...
 
JCollectiondiv (const double value)
 Scale contents. More...
 
const JComparatorgetComparator () const
 Get comparator. More...
 
mapped_typeoperator[] (typename JClass< key_type >::argument_type key)
 Get mapped value. More...
 
void put (typename JClass< key_type > ::argument_type key, typename JClass< mapped_type >::argument_type value)
 Put pair-wise element (key,value) into collection. More...
 
bool is_equal (const JAbstractCollection &collection) const
 Test whether abstract collections are equal. More...
 
virtual double getIndexOfRefractionPhase (const double lambda) const =0
 Index of refraction for phase velocity. More...
 
virtual double getIndexOfRefractionPhase (const double lambda) const
 Index of refraction (phase velocity). More...
 
virtual double getDispersionPhase (const double lambda) const =0
 Dispersion of light for phase velocity. More...
 
virtual double getDispersionPhase (const double lambda) const
 Dispersion of light for phase velocity. More...
 
virtual double getIndexOfRefractionGroup (const double lambda) const
 Index of refraction for group velocity. More...
 
virtual double getDispersionGroup (const double lambda) const =0
 Dispersion of light for group velocity. More...
 
virtual double getDispersionGroup (const double lambda) const
 Dispersion of light for group velocity. More...
 
double getKappa (const double lambda) const
 Get effective index of refraction for muon light. More...
 
double getKmin (const double lambda) const
 Get smallest index of refraction for Bremsstrahlung light (i.e. More...
 

Public Attributes

JDistance< typename JElement2D_t ::abscissa_typegetDistance
 Function object for distance evaluation. More...
 
const double P
 Dispersion parameters (x = 1/lambda) More...
 
const double a0
 offset More...
 
const double a1
 dn/dP More...
 
const double a2
 d^1n/(dx)^1 More...
 
const double a3
 d^2n/(dx)^2 More...
 
const double a4
 d^3n/(dx)^3
More...
 

Protected Member Functions

virtual double getWavelength (const double n, const double eps=1.0e-10) const
 Determine wavelength for a given index of refraction corresponding to the group velocity. More...
 
virtual double getWavelength (const double n, const double w, const double eps) const
 Determine wavelength for a given index of refraction corresponding to the group velocity. More...
 
virtual double getInverseAttenuationLength (const double l_abs, const double ls, const double cts) const
 Get the inverse of the attenuation length. More...
 
void resize (typename container_type::size_type size)
 Resize collection. More...
 

Static Protected Member Functions

static double getRmin ()
 minimal distance of approach of muon to PMT [m] More...
 

Protected Attributes

const double A
 photo-cathode area [m2] More...
 
double(* qe )(const double lambda)
 Quantum efficiency of PMT (incl. More...
 
double(* l_abs )(const double lambda)
 Absorption length. More...
 
double(* ls )(const double lambda)
 Scattering length. More...
 
double(* pmt )(const double ct)
 Angular acceptence of PMT (normalised to one at cos() = -1) More...
 
double(* ps )(const double ct)
 Model specific function to describe light scattering in water. More...
 
const double wmin
 Integration limits. More...
 
const double wmax
 maximal wavelength for integration [nm] More...
 
std::vector< element_typephd
 fast evaluation of phi integral More...
 
JComparator compare
 Function object for comparison. More...
 

Private Types

typedef JTOOLS::JElement2D< double, double > element_type
 

Private Member Functions

void erase ()
 
void push_back ()
 
void pop_back ()
 

Detailed Description

Probability Density Functions of the time response of a PMT with an implementation of the JAbstractPMT and JAbstractMedium interfaces via C-like methods.

Definition at line 2007 of file JPDF.hh.

Member Typedef Documentation

◆ element_type

typedef JTOOLS::JElement2D<double, double> JPHYSICS::JPDF::element_type
privateinherited

Definition at line 283 of file JPDF.hh.

◆ abscissa_type

Definition at line 80 of file JCollection.hh.

◆ ordinate_type

Definition at line 81 of file JCollection.hh.

◆ value_type

Definition at line 82 of file JCollection.hh.

◆ distance_type

Definition at line 83 of file JCollection.hh.

◆ collection_type

Definition at line 85 of file JCollection.hh.

◆ container_type

Definition at line 87 of file JCollection.hh.

◆ const_iterator

typedef container_type::const_iterator JTOOLS::JCollection< JElement2D_t , JDistance<typename JElement2D_t ::abscissa_type> >::const_iterator
inherited

Definition at line 89 of file JCollection.hh.

◆ const_reverse_iterator

typedef container_type::const_reverse_iterator JTOOLS::JCollection< JElement2D_t , JDistance<typename JElement2D_t ::abscissa_type> >::const_reverse_iterator
inherited

Definition at line 90 of file JCollection.hh.

◆ iterator

typedef container_type::iterator JTOOLS::JCollection< JElement2D_t , JDistance<typename JElement2D_t ::abscissa_type> >::iterator
inherited

Definition at line 91 of file JCollection.hh.

◆ reverse_iterator

typedef container_type::reverse_iterator JTOOLS::JCollection< JElement2D_t , JDistance<typename JElement2D_t ::abscissa_type> >::reverse_iterator
inherited

Definition at line 92 of file JCollection.hh.

◆ transformer_type

Definition at line 94 of file JCollection.hh.

◆ pair_type

Definition at line 95 of file JCollection.hh.

◆ key_type

template<class JKey_t, class JValue_t>
typedef JKey_t JTOOLS::JMappableCollection< JKey_t, JValue_t >::key_type
inherited

Definition at line 33 of file JMappableCollection.hh.

◆ mapped_type

template<class JKey_t, class JValue_t>
typedef JValue_t JTOOLS::JMappableCollection< JKey_t, JValue_t >::mapped_type
inherited

Definition at line 34 of file JMappableCollection.hh.

Constructor & Destructor Documentation

◆ JPDF_C()

JPHYSICS::JPDF_C::JPDF_C ( const double  Apmt,
double(*)(const double)  pF_qe,
double(*)(const double)  pF_pmt,
double(*)(const double)  pF_l_abs,
double(*)(const double)  pF_ls,
double(*)(const double)  pF_ps,
const double  P_atm,
const double  Wmin,
const double  Wmax,
const int  numberOfPoints = 20,
const double  epsilon = 1e-12 
)
inline

Constructor.

Parameters
Apmtphoto-cathode area [m^2]
pF_qepointer to function for quantum efficiency of PMT
pF_pmtpointer to function for angular acceptence of PMT
pF_l_abspointer to function for absorption length [m]
pF_lspointer to function for scattering length [m]
pF_pspointer to model specific function to describe light scattering in water
P_atmambient pressure [atm]
Wminminimal wavelength for integration [nm]
Wmaxmaximal wavelength for integration [nm]
numberOfPointsnumber of points for integration
epsilonprecision of points for integration

Definition at line 2026 of file JPDF.hh.

2042  :
2043  JAbstractPDF(P_atm, Wmin, Wmax, numberOfPoints, epsilon),
2044  A (Apmt),
2045  qe (pF_qe),
2046  l_abs(pF_l_abs),
2047  ls (pF_ls),
2048  pmt (pF_pmt),
2049  ps (pF_ps)
2050  {}

Member Function Documentation

◆ getPhotocathodeArea()

virtual double JPHYSICS::JPDF_C::getPhotocathodeArea ( ) const
inlinevirtual

Photo-cathode area of PMT.

Returns
photo-cathode area [m^2]

Implements JPHYSICS::JAbstractPMT.

Definition at line 2058 of file JPDF.hh.

2059  {
2060  return A;
2061  }

◆ getQE()

virtual double JPHYSICS::JPDF_C::getQE ( const double  lambda) const
inlinevirtual

Quantum efficiency of PMT (incl.

absorption in glass, gel, etc.).

Parameters
lambdawavelenth [nm]
Returns
QE

Implements JPHYSICS::JAbstractPMT.

Definition at line 2070 of file JPDF.hh.

2071  {
2072  return qe(lambda);
2073  }

◆ getAngularAcceptance()

virtual double JPHYSICS::JPDF_C::getAngularAcceptance ( const double  ct) const
inlinevirtual

Angular acceptence of PMT (normalised to one at cos() = -1).

Parameters
ctcosine angle of incidence
Returns
relative efficiency

Implements JPHYSICS::JAbstractPMT.

Definition at line 2082 of file JPDF.hh.

2083  {
2084  return pmt(ct);
2085  }

◆ getAbsorptionLength()

virtual double JPHYSICS::JPDF_C::getAbsorptionLength ( const double  lambda) const
inlinevirtual

Absorption length.

Parameters
lambdawavelenth [nm]
Returns
absorption length [m]

Implements JPHYSICS::JAbstractMedium.

Definition at line 2094 of file JPDF.hh.

2095  {
2096  return l_abs(lambda);
2097  }

◆ getScatteringLength()

virtual double JPHYSICS::JPDF_C::getScatteringLength ( const double  lambda) const
inlinevirtual

Scattering length.

Parameters
lambdawavelenth [nm]
Returns
scattering length [m]

Implements JPHYSICS::JAbstractMedium.

Definition at line 2106 of file JPDF.hh.

2107  {
2108  return ls(lambda);
2109  }

◆ getScatteringProbability()

virtual double JPHYSICS::JPDF_C::getScatteringProbability ( const double  ct) const
inlinevirtual

Model specific function to describe light scattering in water (integral over full solid angle normalised to one).

Parameters
ctcosine scattering angle
Returns
probability

Implements JPHYSICS::JAbstractMedium.

Definition at line 2119 of file JPDF.hh.

2120  {
2121  return ps(ct);
2122  }

◆ getNumberOfPhotons()

double JPHYSICS::JPDF::getNumberOfPhotons ( ) const
inlineinherited

Number of Cherenkov photons per unit track length.

Returns
number of photons per unit track length [m^-1]

Definition at line 324 of file JPDF.hh.

325  {
326  double value = 0.0;
327 
328  const double xmin = 1.0 / wmax;
329  const double xmax = 1.0 / wmin;
330 
331  for (const_iterator i = begin(); i != end(); ++i) {
332 
333  const double x = 0.5 * (xmax + xmin) + i->getX() * 0.5 * (xmax - xmin);
334  const double dx = i->getY() * 0.5 * (xmax - xmin);
335 
336  const double w = 1.0 / x;
337  const double dw = dx * w*w;
338 
339  const double n = getIndexOfRefractionPhase(w);
340 
341  value += cherenkov(w,n) * dw;
342  }
343 
344  return value;
345  }

◆ getDirectLightFromMuon() [1/2]

double JPHYSICS::JPDF::getDirectLightFromMuon ( const double  R_m,
const double  theta,
const double  phi 
) const
inlineinherited

Number of photo-electrons from direct Cherenkov light from muon.

Parameters
R_mdistance between muon and PMT [m]
thetazenith angle orientation PMT [rad]
phiazimuth angle orientation PMT [rad]
Returns
P [npe]

Definition at line 356 of file JPDF.hh.

359  {
360  using namespace JTOOLS;
361 
362  double value = 0;
363 
364  const double R = std::max(R_m, getRmin());
365  const double A = getPhotocathodeArea();
366 
367  const double px = sin(theta)*cos(phi);
368  const double pz = cos(theta);
369 
370  for (const_iterator m = begin(); m != end(); ++m) {
371 
372  const double w = 0.5 * (wmax + wmin) + m->getX() * 0.5 * (wmax - wmin);
373  const double dw = m->getY() * 0.5 * (wmax - wmin);
374 
375  const double n = getIndexOfRefractionPhase(w);
376 
377  const double l_abs = getAbsorptionLength(w);
378  const double ls = getScatteringLength(w);
379 
380  const double npe = cherenkov(w,n) * dw * getQE(w);
381 
382  const double ct0 = 1.0 / n;
383  const double st0 = sqrt((1.0 + ct0)*(1.0 - ct0));
384 
385  const double d = R / st0; // distance traveled by photon
386  const double ct = st0*px + ct0*pz; // cosine angle of incidence on PMT
387 
388  const double U = getAngularAcceptance(ct); // PMT angular acceptance
389  const double V = exp(-d/l_abs) * exp(-d/ls); // absorption & scattering
390  const double W = A / (2.0*PI*R*st0); // solid angle
391 
392  value += npe * U * V * W;
393  }
394 
395  return value;
396  }

◆ getDirectLightFromMuon() [2/2]

double JPHYSICS::JPDF::getDirectLightFromMuon ( const double  R_m,
const double  theta,
const double  phi,
const double  t_ns 
) const
inlineinherited

Probability density function for direct light from muon.

Parameters
R_mdistance between muon and PMT [m]
thetazenith angle orientation PMT [rad]
phiazimuth angle orientation PMT [rad]
t_nstime difference relative to direct Cherenkov light [ns]
Returns
dP/dt [npe/ns]

Definition at line 408 of file JPDF.hh.

412  {
413  using namespace JTOOLS;
414 
415  static const int N = 100; // maximal number of iterations
416  static const double eps = 1.0e-6; // precision index of refraction
417 
418  const double R = std::max(R_m, getRmin());
419  const double t = R * getTanThetaC() / C + t_ns; // time [ns]
420  const double a = C*t/R; // target value
421  const double A = getPhotocathodeArea();
422 
423  const double px = sin(theta)*cos(phi);
424  const double pz = cos(theta);
425 
426  // check validity range for index of refraction
427 
428  for (double buffer[] = { wmin, wmax, 0.0 }, *p = buffer; *p != 0.0; ++p) {
429 
430  const double n = getIndexOfRefractionPhase(*p);
431  const double ng = getIndexOfRefractionGroup(*p);
432 
433  const double ct0 = 1.0 / n;
434  const double st0 = sqrt((1.0 + ct0)*(1.0 - ct0));
435 
436  const double b = (ng - ct0) / st0; // running value
437 
438  if (*p == wmin && b < a) { return 0.0; }
439  if (*p == wmax && b > a) { return 0.0; }
440  }
441 
442 
443  double umin = wmin;
444  double umax = wmax;
445 
446  for (int i = 0; i != N; ++i) { // binary search for wavelength
447 
448  const double w = 0.5 * (umin + umax);
449 
450  const double n = getIndexOfRefractionPhase(w);
451  const double ng = getIndexOfRefractionGroup(w);
452 
453  const double ct0 = 1.0 / n;
454  const double st0 = sqrt((1.0 + ct0)*(1.0 - ct0));
455 
456  const double b = (ng - ct0) / st0; // running value
457 
458  if (fabs(b-a) < a*eps) {
459 
460  const double np = getDispersionPhase(w);
461  const double ngp = getDispersionGroup(w);
462 
463  const double l_abs = getAbsorptionLength(w);
464  const double ls = getScatteringLength(w);
465 
466  const double d = R / st0; // distance traveled by photon
467  const double ct = st0*px + ct0*pz; // cosine angle of incidence on PMT
468 
469  const double i3 = ct0*ct0*ct0 / (st0*st0*st0);
470 
471  const double U = getAngularAcceptance(ct); // PMT angular acceptance
472  const double V = exp(-d/l_abs - d/ls); // absorption & scattering
473  const double W = A / (2.0*PI*R*st0); // solid angle
474 
475  const double Ja = R * (ngp/st0 + np*(n-ng)*i3) / C; // dt/dlambda
476 
477  return cherenkov(w,n) * getQE(w) * U * V * W / fabs(Ja);
478  }
479 
480  if (b > a)
481  umin = w;
482  else
483  umax = w;
484  }
485 
486  return 0.0;
487  }

◆ getScatteredLightFromMuon() [1/2]

double JPHYSICS::JPDF::getScatteredLightFromMuon ( const double  R_m,
const double  theta,
const double  phi,
const double  t_ns 
) const
inlineinherited

Probability density function for scattered light from muon.

Parameters
R_mdistance between muon and PMT [m]
thetazenith angle orientation PMT [rad]
phiazimuth angle orientation PMT [rad]
t_nstime difference relative to direct Cherenkov light [ns]
Returns
dP/dt [npe/ns]

Definition at line 499 of file JPDF.hh.

503  {
504  using namespace JTOOLS;
505 
506  static const double eps = 1.0e-10;
507 
508  double value = 0;
509 
510  const double R = std::max(R_m, getRmin());
511  const double t = R * getTanThetaC() / C + t_ns; // time [ns]
512  const double A = getPhotocathodeArea();
513 
514  const double px = sin(theta)*cos(phi);
515  const double py = sin(theta)*sin(phi);
516  const double pz = cos(theta);
517 
518  const double n0 = getIndexOfRefractionGroup(wmax);
519  const double n1 = getIndexOfRefractionGroup(wmin);
520  const double ni = sqrt(R*R + C*t*C*t) / R; // maximal index of refraction
521 
522  if (n0 >= ni) return value;
523 
524  const double nj = std::min(ni,n1);
525 
526  double w = wmax;
527 
528  for (const_iterator i = begin(); i != end(); ++i) {
529 
530  const double ng = 0.5 * (nj + n0) + i->getX() * 0.5 * (nj - n0);
531  const double dn = i->getY() * 0.5 * (nj - n0);
532 
533  w = getWavelength(ng, w, 1.0e-5);
534 
535  const double dw = dn / fabs(getDispersionGroup(w));
536 
537  const double n = getIndexOfRefractionPhase(w);
538 
539  const double l_abs = getAbsorptionLength(w);
540  const double ls = getScatteringLength(w);
541 
542  const double npe = cherenkov(w,n) * dw * getQE(w);
543 
544  if (npe <= 0) { continue; }
545 
546  const double Jc = 1.0 / ls; // dN/dx
547 
548  const double ct0 = 1.0 / n; // photon direction before scattering
549  const double st0 = sqrt((1.0 + ct0)*(1.0 - ct0));
550 
551  JRoot rz(R, ng, t); // square root
552 
553  if (!rz.is_valid) { continue; }
554 
555  const double zmin = rz.first;
556  const double zmax = rz.second;
557 
558  const double zap = 1.0 / l_abs;
559 
560  const double xmin = exp(zap*zmax);
561  const double xmax = exp(zap*zmin);
562 
563  for (const_iterator j = begin(); j != end(); ++j) {
564 
565  const double x = 0.5 * (xmax + xmin) + j->getX() * 0.5 * (xmax - xmin);
566  const double dx = j->getY() * 0.5 * (xmax - xmin);
567 
568  const double z = log(x) / zap;
569  const double dz = -dx / (zap*x);
570 
571  const double D = sqrt(z*z + R*R);
572  const double cd = -z / D;
573  const double sd = R / D;
574 
575  const double d = (C*t - z) / ng; // photon path
576 
577  //const double V = exp(-d/l_abs); // absorption
578 
579  const double cta = cd*ct0 + sd*st0;
580  const double dca = d - 0.5*(d+D)*(d-D) / (d - D*cta);
581  const double tip = -log(D*D/(dca*dca) + eps) / PI;
582 
583  const double ymin = exp(tip*PI);
584  const double ymax = 1.0;
585 
586  for (const_iterator k = begin(); k != end(); ++k) {
587 
588  const double y = 0.5 * (ymax + ymin) + k->getX() * 0.5 * (ymax - ymin);
589  const double dy = k->getY() * 0.5 * (ymax - ymin);
590 
591  const double phi = log(y) / tip;
592  const double dp = -dy / (tip*y);
593 
594  const double cp0 = cos(phi);
595  const double sp0 = sin(phi);
596 
597  const double u = (R*R + z*z - d*d) / (2*R*st0*cp0 - 2*z*ct0 - 2*d);
598  const double v = d - u;
599 
600  if (u <= 0) { continue; }
601  if (v <= 0) { continue; }
602 
603  const double vi = 1.0 / v;
604  const double cts = (R*st0*cp0 - z*ct0 - u)*vi; // cosine scattering angle
605 
606  const double V = exp(-d*getInverseAttenuationLength(l_abs, ls, cts));
607 
608  if (cts < 0.0 && v * sqrt((1.0 + cts) * (1.0 - cts)) < MODULE_RADIUS_M) { continue; }
609 
610  const double vx = R - u*st0*cp0;
611  const double vy = - u*st0*sp0;
612  const double vz = -z - u*ct0;
613 
614  const double ct[] = { // cosine angle of incidence on PMT
615  (vx*px + vy*py + vz*pz) * vi,
616  (vx*px - vy*py + vz*pz) * vi
617  };
618 
619  const double U =
620  getAngularAcceptance(ct[0]) +
621  getAngularAcceptance(ct[1]); // PMT angular acceptance
622  const double W = std::min(A*vi*vi, 2.0*PI); // solid angle
623 
624  const double Ja = getScatteringProbability(cts); // d^2P/dcos/dphi
625  const double Jd = ng * (1.0 - cts) / C; // dt/du
626 
627  value += (npe * dz * dp / (2*PI)) * U * V * W * Ja * Jc / fabs(Jd);
628  }
629  }
630  }
631 
632  return value;
633  }

◆ getScatteredLightFromMuon() [2/2]

double JPHYSICS::JPDF::getScatteredLightFromMuon ( const double  D_m,
const double  cd,
const double  theta,
const double  phi,
const double  t_ns 
) const
inlineinherited

Probability density function for scattered light from muon.

Parameters
D_mdistance between track segment and PMT [m]
cdcosine angle muon direction and track segment - PMT position
thetazenith angle orientation PMT [rad]
phiazimuth angle orientation PMT [rad]
t_nstime difference relative to direct Cherenkov light [ns]
Returns
d^2P/dt/dx [npe/ns/m]

Definition at line 881 of file JPDF.hh.

886  {
887  using namespace JTOOLS;
888 
889  static const double eps = 1.0e-10;
890 
891  double value = 0;
892 
893  const double sd = sqrt((1.0 + cd)*(1.0 - cd));
894  const double D = std::max(D_m, getRmin());
895  const double R = sd * D; // minimal distance of approach [m]
896  const double Z = -cd * D; // photon emission point
897  const double L = D;
898  const double t = D * getIndexOfRefraction() / C + t_ns; // time [ns]
899  const double A = getPhotocathodeArea();
900 
901  const double px = sin(theta)*cos(phi);
902  const double py = sin(theta)*sin(phi);
903  const double pz = cos(theta);
904 
905  const double n0 = getIndexOfRefractionGroup(wmax);
906  const double n1 = getIndexOfRefractionGroup(wmin);
907 
908  const double ni = C*t / L; // maximal index of refraction
909 
910  if (n0 >= ni) {
911  return value;
912  }
913 
914  const double nj = std::min(ni,n1);
915 
916  double w = wmax;
917 
918  for (const_iterator i = begin(); i != end(); ++i) {
919 
920  const double ng = 0.5 * (nj + n0) + i->getX() * 0.5 * (nj - n0);
921  const double dn = i->getY() * 0.5 * (nj - n0);
922 
923  w = getWavelength(ng, w, 1.0e-5);
924 
925  const double dw = dn / fabs(getDispersionGroup(w));
926 
927  const double n = getIndexOfRefractionPhase(w);
928 
929  const double l_abs = getAbsorptionLength(w);
930  const double ls = getScatteringLength(w);
931 
932  const double npe = cherenkov(w,n) * dw * getQE(w);
933 
934  if (npe <= 0) { continue; }
935 
936  const double Jc = 1.0 / ls; // dN/dx
937 
938  const double ct0 = 1.0 / n; // photon direction before scattering
939  const double st0 = sqrt((1.0 + ct0)*(1.0 - ct0));
940 
941  const double d = C*t / ng; // photon path
942 
943  //const double V = exp(-d/l_abs); // absorption
944 
945  const double cta = cd*ct0 + sd*st0;
946  const double dca = d - 0.5*(d+L)*(d-L) / (d - L*cta);
947  const double tip = -log(L*L/(dca*dca) + eps) / PI;
948 
949  const double ymin = exp(tip*PI);
950  const double ymax = 1.0;
951 
952  for (const_iterator j = begin(); j != end(); ++j) {
953 
954  const double y = 0.5 * (ymax + ymin) + j->getX() * 0.5 * (ymax - ymin);
955  const double dy = j->getY() * 0.5 * (ymax - ymin);
956 
957  const double phi = log(y) / tip;
958  const double dp = -dy / (tip*y);
959 
960  const double cp0 = cos(phi);
961  const double sp0 = sin(phi);
962 
963  const double u = (R*R + Z*Z - d*d) / (2*R*st0*cp0 - 2*Z*ct0 - 2*d);
964  const double v = d - u;
965 
966  if (u <= 0) { continue; }
967  if (v <= 0) { continue; }
968 
969  const double vi = 1.0 / v;
970  const double cts = (R*st0*cp0 - Z*ct0 - u)*vi; // cosine scattering angle
971 
972  const double V = exp(-d*getInverseAttenuationLength(l_abs, ls, cts));
973 
974  if (cts < 0.0 && v * sqrt((1.0 + cts) * (1.0 - cts)) < MODULE_RADIUS_M) { continue; }
975 
976  const double vx = R - u*st0*cp0;
977  const double vy = - u*st0*sp0;
978  const double vz = -Z - u*ct0;
979 
980  const double ct[] = { // cosine angle of incidence on PMT
981  (vx*px + vy*py + vz*pz) * vi,
982  (vx*px - vy*py + vz*pz) * vi
983  };
984 
985  const double U =
986  getAngularAcceptance(ct[0]) +
987  getAngularAcceptance(ct[1]); // PMT angular acceptance
988  const double W = std::min(A*vi*vi, 2.0*PI); // solid angle
989 
990  const double Ja = getScatteringProbability(cts); // d^2P/dcos/dphi
991  const double Jd = ng * (1.0 - cts) / C; // dt/du
992 
993  value += (npe * dp / (2*PI)) * U * V * W * Ja * Jc / fabs(Jd);
994  }
995  }
996 
997  return value;
998  }

◆ getDirectLightFromEMshowers()

double JPHYSICS::JPDF::getDirectLightFromEMshowers ( const double  R_m,
const double  theta,
const double  phi,
const double  t_ns 
) const
inlineinherited

Probability density function for direct light from EM-showers.

Parameters
R_mdistance between muon and PMT [m]
thetazenith angle orientation PMT [rad]
phiazimuth angle orientation PMT [rad]
t_nstime difference relative to direct Cherenkov light [ns]
Returns
dP/dt [npe/ns/GeV]

Definition at line 645 of file JPDF.hh.

649  {
650  using namespace JTOOLS;
651 
652  double value = 0;
653 
654  const double R = std::max(R_m, getRmin());
655  const double t = R * getTanThetaC() / C + t_ns; // time [ns]
656  const double A = getPhotocathodeArea();
657  const double D = 2.0*sqrt(A/PI);
658 
659  const double px = sin(theta)*cos(phi);
660  //const double py = sin(theta)*sin(phi);
661  const double pz = cos(theta);
662 
663  const double n0 = getIndexOfRefractionGroup(wmax);
664  const double n1 = getIndexOfRefractionGroup(wmin);
665  const double ni = sqrt(R*R + C*t*C*t) / R; // maximal index of refraction
666 
667  if (n0 >= ni) return value;
668 
669  const double nj = std::min(n1, ni);
670 
671  double w = wmax;
672 
673  for (const_iterator i = begin(); i != end(); ++i) {
674 
675  const double ng = 0.5 * (nj + n0) + i->getX() * 0.5 * (nj - n0);
676  const double dn = i->getY() * 0.5 * (nj - n0);
677 
678  w = getWavelength(ng, w, 1.0e-5);
679 
680  const double dw = dn / fabs(getDispersionGroup(w));
681 
682  const double n = getIndexOfRefractionPhase(w);
683 
684  const double l_abs = getAbsorptionLength(w);
685  const double ls = getScatteringLength(w);
686 
687  const double npe = cherenkov(w,n) * dw * getQE(w);
688 
689  JRoot rz(R, ng, t); // square root
690 
691  if (!rz.is_valid) { continue; }
692 
693  for (int j = 0; j != 2; ++j) {
694 
695  const double z = rz[j];
696 
697  if (C*t <= z) continue;
698 
699  const double d = sqrt(z*z + R*R); // distance traveled by photon
700 
701  const double ct0 = -z / d;
702  const double st0 = R / d;
703 
704  const double dz = D / st0; // average track length
705 
706  const double ct = st0*px + ct0*pz; // cosine angle of incidence on PMT
707 
708  const double U = getAngularAcceptance(ct); // PMT angular acceptance
709  const double V = exp(-d/l_abs - d/ls); // absorption & scattering
710  const double W = A/(d*d); // solid angle
711 
712  const double Ja = geant(n,ct0); // d^2N/dcos/dphi
713  const double Jd = (1.0 - ng*ct0) / C; // d t/ dz
714  const double Je = ng*st0*st0*st0 / (R*C); // d^2t/(dz)^2
715 
716  value += gWater() * npe * U * V * W * Ja / (fabs(Jd) + 0.5*Je*dz);
717  }
718  }
719 
720  return value;
721  }

◆ getScatteredLightFromEMshowers()

double JPHYSICS::JPDF::getScatteredLightFromEMshowers ( const double  R_m,
const double  theta,
const double  phi,
const double  t_ns 
) const
inlineinherited

Probability density function for scattered light from EM-showers.

Parameters
R_mdistance between muon and PMT [m]
thetazenith angle orientation PMT [rad]
phiazimuth angle orientation PMT [rad]
t_nstime difference relative to direct Cherenkov light [ns]
Returns
dP/dt [npe/ns/GeV]

Definition at line 733 of file JPDF.hh.

737  {
738  using namespace JTOOLS;
739 
740  double value = 0;
741 
742  const double R = std::max(R_m, getRmin());
743  const double t = R * getTanThetaC() / C + t_ns; // time [ns]
744  const double A = getPhotocathodeArea();
745 
746  const double px = sin(theta)*cos(phi);
747  const double py = sin(theta)*sin(phi);
748  const double pz = cos(theta);
749 
750  const double n0 = getIndexOfRefractionGroup(wmax);
751  const double n1 = getIndexOfRefractionGroup(wmin);
752  const double ni = sqrt(R*R + C*t*C*t) / R; // maximal index of refraction
753 
754  if (n0 >= ni) return value;
755 
756  const double nj = std::min(ni,n1);
757 
758  double w = wmax;
759 
760  for (const_iterator i = begin(); i != end(); ++i) {
761 
762  const double ng = 0.5 * (nj + n0) + i->getX() * 0.5 * (nj - n0);
763  const double dn = i->getY() * 0.5 * (nj - n0);
764 
765  w = getWavelength(ng, w, 1.0e-5);
766 
767  const double dw = dn / fabs(getDispersionGroup(w));
768 
769  const double n = getIndexOfRefractionPhase(w);
770 
771  const double l_abs = getAbsorptionLength(w);
772  const double ls = getScatteringLength(w);
773 
774  const double npe = cherenkov(w,n) * dw * getQE(w);
775 
776  if (npe <= 0) { continue; }
777 
778  const double Jc = 1.0 / ls; // dN/dx
779 
780  JRoot rz(R, ng, t); // square root
781 
782  if (!rz.is_valid) { continue; }
783 
784  const double zmin = rz.first;
785  const double zmax = rz.second;
786 
787  const double zap = 1.0 / l_abs;
788 
789  const double xmin = exp(zap*zmax);
790  const double xmax = exp(zap*zmin);
791 
792  for (const_iterator j = begin(); j != end(); ++j) {
793 
794  const double x = 0.5 * (xmax + xmin) + j->getX() * 0.5 * (xmax - xmin);
795  const double dx = j->getY() * 0.5 * (xmax - xmin);
796 
797  const double z = log(x) / zap;
798  const double dz = -dx / (zap*x);
799 
800  const double D = sqrt(z*z + R*R);
801  const double cd = -z / D;
802  const double sd = R / D;
803 
804  const double qx = cd*px + 0 - sd*pz;
805  const double qy = 1*py;
806  const double qz = sd*px + 0 + cd*pz;
807 
808  const double d = (C*t - z) / ng; // photon path
809 
810  //const double V = exp(-d/l_abs); // absorption
811 
812  const double ds = 2.0 / (size() + 1);
813 
814  for (double sb = 0.5*ds; sb < 1.0 - 0.25*ds; sb += ds) {
815 
816  for (int buffer[] = { -1, +1, 0}, *k = buffer; *k != 0; ++k) {
817 
818  const double cb = (*k) * sqrt((1.0 + sb)*(1.0 - sb));
819  const double dcb = (*k) * ds*sb/cb;
820 
821  const double v = 0.5 * (d + D) * (d - D) / (d - D*cb);
822  const double u = d - v;
823 
824  if (u <= 0) { continue; }
825  if (v <= 0) { continue; }
826 
827  const double cts = (D*cb - v) / u; // cosine scattering angle
828 
829  const double V = exp(-d*getInverseAttenuationLength(l_abs, ls, cts));
830 
831  if (cts < 0.0 && v * sqrt((1.0 + cts) * (1.0 - cts)) < MODULE_RADIUS_M) { continue; }
832 
833  const double W = std::min(A/(v*v), 2.0*PI); // solid angle
834  const double Ja = getScatteringProbability(cts); // d^2P/dcos/dphi
835  const double Jd = ng * (1.0 - cts) / C; // dt/du
836 
837  const double ca = (D - v*cb) / u;
838  const double sa = v*sb / u;
839 
840  const double dp = PI / phd.size();
841  const double dom = dcb*dp * v*v / (u*u);
842 
843  for (const_iterator l = phd.begin(); l != phd.end(); ++l) {
844 
845  const double cp = l->getX();
846  const double sp = l->getY();
847 
848  const double ct0 = cd*ca - sd*sa*cp;
849 
850  const double vx = sb*cp * qx;
851  const double vy = sb*sp * qy;
852  const double vz = cb * qz;
853 
854  const double U =
855  getAngularAcceptance(vx + vy + vz) +
856  getAngularAcceptance(vx - vy + vz); // PMT angular acceptance
857 
858  const double Jb = geant(n,ct0); // d^2N/dcos/dphi
859 
860  value += dom * gWater() * npe * dz * U * V * W * Ja * Jb * Jc / fabs(Jd);
861  }
862  }
863  }
864  }
865  }
866 
867  return value;
868  }

◆ getDirectLightFromEMshower() [1/2]

double JPHYSICS::JPDF::getDirectLightFromEMshower ( const double  D_m,
const double  cd,
const double  theta,
const double  phi,
const double  t_ns 
) const
inlineinherited

Probability density function for direct light from EM-shower.

Parameters
D_mdistance between EM-shower and PMT [m]
cdcosine angle EM-shower direction and EM-shower - PMT position
thetazenith angle orientation PMT [rad]
phiazimuth angle orientation PMT [rad]
t_nstime difference relative to direct Cherenkov light [ns]
Returns
d^2P/dt/dE [npe/ns/GeV]

Definition at line 1011 of file JPDF.hh.

1016  {
1017  using namespace JTOOLS;
1018 
1019  const double ct0 = cd;
1020  const double st0 = sqrt((1.0 + ct0)*(1.0 - ct0));
1021 
1022  const double D = std::max(D_m, getRmin());
1023  const double t = D * getIndexOfRefraction() / C + t_ns; // time [ns]
1024  const double A = getPhotocathodeArea();
1025 
1026  const double px = sin(theta)*cos(phi);
1027  const double pz = cos(theta);
1028 
1029  const double n0 = getIndexOfRefractionGroup(wmax);
1030  const double n1 = getIndexOfRefractionGroup(wmin);
1031  const double ng = C*t/D; // index of refraction
1032 
1033  if (n0 >= ng) { return 0.0; }
1034  if (n1 <= ng) { return 0.0; }
1035 
1036  const double w = getWavelength(ng);
1037  const double n = getIndexOfRefractionPhase(w);
1038 
1039  const double l_abs = getAbsorptionLength(w);
1040  const double ls = getScatteringLength(w);
1041 
1042  const double npe = cherenkov(w,n) * getQE(w);
1043 
1044  const double ct = st0*px + ct0*pz; // cosine angle of incidence on PMT
1045 
1046  const double U = getAngularAcceptance(ct); // PMT angular acceptance
1047  const double V = exp(-D/l_abs - D/ls); // absorption & scattering
1048  const double W = A/(D*D); // solid angle
1049 
1050  const double ngp = getDispersionGroup(w);
1051 
1052  const double Ja = D * ngp / C; // dt/dlambda
1053  const double Jb = geant(n,ct0); // d^2N/dcos/dphi
1054 
1055  return npe * geanc() * U * V * W * Jb / fabs(Ja);
1056  }

◆ getDirectLightFromEMshower() [2/2]

double JPHYSICS::JPDF::getDirectLightFromEMshower ( const double  E,
const double  D_m,
const double  cd,
const double  theta,
const double  phi,
const double  t_ns 
) const
inlineinherited

Probability density function for direct light from EM-shower.

Parameters
EEM-shower energy [GeV]
D_mdistance between EM-shower and PMT [m]
cdcosine angle EM-shower direction and EM-shower - PMT position
thetazenith angle orientation PMT [rad]
phiazimuth angle orientation PMT [rad]
t_nstime difference relative to direct Cherenkov light [ns]
Returns
dP/dt [npe/ns]

Definition at line 1207 of file JPDF.hh.

1213  {
1214  using namespace JTOOLS;
1215 
1216  double value = 0;
1217 
1218  const double sd = sqrt((1.0 + cd)*(1.0 - cd));
1219  const double D = std::max(D_m, getRmin());
1220  const double R = D * sd; // minimal distance of approach [m]
1221  const double Z = -D * cd;
1222  const double t = D * getIndexOfRefraction() / C + t_ns; // time [ns]
1223 
1224  const double n0 = getIndexOfRefractionGroup(wmax);
1225  const double n1 = getIndexOfRefractionGroup(wmin);
1226 
1227  double zmin = 0.0; // minimal shower length [m]
1228  double zmax = geanz.getLength(E, 1.0); // maximal shower length [m]
1229 
1230  const double d = sqrt((Z+zmax)*(Z+zmax) + R*R);
1231 
1232  if (C*t > std::max(n1*D, zmax + n1*d)) {
1233  return value;
1234  }
1235 
1236  if (C*t < n0*D) {
1237 
1238  JRoot rz(R, n0, t + Z/C); // square root
1239 
1240  if (!rz.is_valid) {
1241  return value;
1242  }
1243 
1244  if (rz.second > Z) { zmin = rz.second - Z; }
1245  if (rz.first > Z) { zmin = rz.first - Z; }
1246  }
1247 
1248  if (C*t > n1*D) {
1249 
1250  JRoot rz(R, n1, t + Z/C); // square root
1251 
1252  if (!rz.is_valid) {
1253  return value;
1254  }
1255 
1256  if (rz.second > Z) { zmin = rz.second - Z; }
1257  if (rz.first > Z) { zmin = rz.first - Z; }
1258  }
1259 
1260  if (C*t < zmax + n0*d) {
1261 
1262  JRoot rz(R, n0, t + Z/C); // square root
1263 
1264  if (!rz.is_valid) {
1265  return value;
1266  }
1267 
1268  if (rz.first > Z) { zmax = rz.first - Z; }
1269  if (rz.second > Z) { zmax = rz.second - Z; }
1270  }
1271 
1272  if (zmin < 0.0) {
1273  zmin = 0.0;
1274  }
1275 
1276  if (zmax > zmin) {
1277 
1278  const double ymin = geanz.getIntegral(E, zmin);
1279  const double ymax = geanz.getIntegral(E, zmax);
1280  const double dy = (ymax - ymin) / size();
1281 
1282  if (dy > 2*std::numeric_limits<double>::epsilon()) {
1283 
1284  for (double y = ymin + 0.5*dy; y < ymax; y += dy) {
1285 
1286  const double z = Z + geanz.getLength(E, y);
1287  const double d = sqrt(R*R + z*z);
1288  const double t1 = t + (Z - z) / C - d * getIndexOfRefraction() / C;
1289 
1290  value += dy * E * getDirectLightFromEMshower(d, -z/d, theta, phi, t1);
1291  }
1292 
1293  }
1294  }
1295 
1296  return value;
1297  }

◆ getScatteredLightFromEMshower() [1/2]

double JPHYSICS::JPDF::getScatteredLightFromEMshower ( const double  D_m,
const double  cd,
const double  theta,
const double  phi,
const double  t_ns 
) const
inlineinherited

Probability density function for scattered light from EM-shower.

Parameters
D_mdistance between EM-shower and PMT [m]
cdcosine angle EM-shower direction and EM-shower - PMT position
thetazenith angle orientation PMT [rad]
phiazimuth angle orientation PMT [rad]
t_nstime difference relative to direct Cherenkov light [ns]
Returns
d^2P/dt/dE [npe/ns/GeV]

Definition at line 1069 of file JPDF.hh.

1074  {
1075  using namespace JTOOLS;
1076 
1077  double value = 0;
1078 
1079  const double sd = sqrt((1.0 + cd)*(1.0 - cd));
1080  const double D = std::max(D_m, getRmin());
1081  const double L = D;
1082  const double t = D * getIndexOfRefraction() / C + t_ns; // time [ns]
1083 
1084  const double A = getPhotocathodeArea();
1085 
1086  const double px = sin(theta)*cos(phi);
1087  const double py = sin(theta)*sin(phi);
1088  const double pz = cos(theta);
1089 
1090  const double qx = cd*px + 0 - sd*pz;
1091  const double qy = 1*py;
1092  const double qz = sd*px + 0 + cd*pz;
1093 
1094  const double n0 = getIndexOfRefractionGroup(wmax);
1095  const double n1 = getIndexOfRefractionGroup(wmin);
1096 
1097  const double ni = C*t / L; // maximal index of refraction
1098 
1099  if (n0 >= ni) {
1100  return value;
1101  }
1102 
1103  const double nj = std::min(ni,n1);
1104 
1105  double w = wmax;
1106 
1107  for (const_iterator i = begin(); i != end(); ++i) {
1108 
1109  const double ng = 0.5 * (nj + n0) + i->getX() * 0.5 * (nj - n0);
1110  const double dn = i->getY() * 0.5 * (nj - n0);
1111 
1112  w = getWavelength(ng, w, 1.0e-5);
1113 
1114  const double dw = dn / fabs(getDispersionGroup(w));
1115 
1116  const double n = getIndexOfRefractionPhase(w);
1117 
1118  const double l_abs = getAbsorptionLength(w);
1119  const double ls = getScatteringLength(w);
1120 
1121  const double npe = cherenkov(w,n) * dw * getQE(w);
1122 
1123  if (npe <= 0) { continue; }
1124 
1125  const double Jc = 1.0 / ls; // dN/dx
1126 
1127  const double d = C*t / ng; // photon path
1128 
1129  //const double V = exp(-d/l_abs); // absorption
1130 
1131  const double ds = 2.0 / (size() + 1);
1132 
1133  for (double sb = 0.5*ds; sb < 1.0 - 0.25*ds; sb += ds) {
1134 
1135  for (int buffer[] = { -1, +1, 0}, *k = buffer; *k != 0; ++k) {
1136 
1137  const double cb = (*k) * sqrt((1.0 + sb)*(1.0 - sb));
1138  const double dcb = (*k) * ds*sb/cb;
1139 
1140  const double v = 0.5 * (d + L) * (d - L) / (d - L*cb);
1141  const double u = d - v;
1142 
1143  if (u <= 0) { continue; }
1144  if (v <= 0) { continue; }
1145 
1146  const double cts = (L*cb - v) / u; // cosine scattering angle
1147 
1148  const double V = exp(-d*getInverseAttenuationLength(l_abs, ls, cts));
1149 
1150  if (cts < 0.0 && v * sqrt((1.0 + cts) * (1.0 - cts)) < MODULE_RADIUS_M) { continue; }
1151 
1152  const double W = std::min(A/(v*v), 2.0*PI); // solid angle
1153  const double Ja = getScatteringProbability(cts); // d^2P/dcos/dphi
1154  const double Jd = ng * (1.0 - cts) / C; // dt/du
1155 
1156  const double ca = (L - v*cb) / u;
1157  const double sa = v*sb / u;
1158 
1159  const double dp = PI / phd.size();
1160  const double dom = dcb*dp * v*v / (u*u);
1161  const double dos = sqrt(dom);
1162 
1163  for (const_iterator l = phd.begin(); l != phd.end(); ++l) {
1164 
1165  const double cp = l->getX();
1166  const double sp = l->getY();
1167 
1168  const double ct0 = cd*ca - sd*sa*cp;
1169 
1170  const double vx = -sb*cp * qx;
1171  const double vy = -sb*sp * qy;
1172  const double vz = cb * qz;
1173 
1174  const double U =
1175  getAngularAcceptance(vx + vy + vz) +
1176  getAngularAcceptance(vx - vy + vz); // PMT angular acceptance
1177 
1178  //const double Jb = geant(n,ct0); // d^2N/dcos/dphi
1179 
1180  //value += npe * geanc() * dom * U * V * W * Ja * Jb * Jc / fabs(Jd);
1181 
1182  const double Jb = geant(n,
1183  ct0 - 0.5*dos,
1184  ct0 + 0.5*dos); // dN/dphi
1185 
1186  value += npe * geanc() * dos * U * V * W * Ja * Jb * Jc / fabs(Jd);
1187  }
1188  }
1189  }
1190  }
1191 
1192  return value;
1193  }

◆ getScatteredLightFromEMshower() [2/2]

double JPHYSICS::JPDF::getScatteredLightFromEMshower ( const double  E,
const double  D_m,
const double  cd,
const double  theta,
const double  phi,
const double  t_ns 
) const
inlineinherited

Probability density function for scattered light from EM-shower.

Parameters
EEM-shower energy [GeV]
D_mdistance between EM-shower and PMT [m]
cdcosine angle EM-shower direction and EM-shower - PMT position
thetazenith angle orientation PMT [rad]
phiazimuth angle orientation PMT [rad]
t_nstime difference relative to direct Cherenkov light [ns]
Returns
dP/dt [npe/ns]

Definition at line 1311 of file JPDF.hh.

1317  {
1318  using namespace JTOOLS;
1319 
1320  double value = 0;
1321 
1322  const double sd = sqrt((1.0 + cd)*(1.0 - cd));
1323  const double D = std::max(D_m, getRmin());
1324  const double R = D * sd; // minimal distance of approach [m]
1325  const double Z = -D * cd;
1326  const double t = D * getIndexOfRefraction() / C + t_ns; // time [ns]
1327 
1328  const double n0 = getIndexOfRefractionGroup(wmax);
1329 
1330  double zmin = 0.0; // minimal shower length [m]
1331  double zmax = geanz.getLength(E, 1.0); // maximal shower length [m]
1332 
1333  const double d = sqrt((Z+zmax)*(Z+zmax) + R*R);
1334 
1335  if (C*t < n0*D) {
1336 
1337  JRoot rz(R, n0, t + Z/C); // square root
1338 
1339  if (!rz.is_valid) {
1340  return value;
1341  }
1342 
1343  if (rz.second > Z) { zmin = rz.second - Z; }
1344  if (rz.first > Z) { zmin = rz.first - Z; }
1345  }
1346 
1347  if (C*t < zmax + n0*d) {
1348 
1349  JRoot rz(R, n0, t + Z/C); // square root
1350 
1351  if (!rz.is_valid) {
1352  return value;
1353  }
1354 
1355  if (rz.first > Z) { zmax = rz.first - Z; }
1356  if (rz.second > Z) { zmax = rz.second - Z; }
1357  }
1358 
1359  const double ymin = geanz.getIntegral(E, zmin);
1360  const double ymax = geanz.getIntegral(E, zmax);
1361  const double dy = (ymax - ymin) / size();
1362 
1363  if (dy > 2*std::numeric_limits<double>::epsilon()) {
1364 
1365  for (double y = ymin + 0.5*dy; y < ymax; y += dy) {
1366 
1367  const double z = Z + geanz.getLength(E, y);
1368  const double d = sqrt(R*R + z*z);
1369  const double t1 = t + (Z - z) / C - d * getIndexOfRefraction() / C;
1370 
1371  value += dy * E * getScatteredLightFromEMshower(d, -z/d, theta, phi, t1);
1372  }
1373  }
1374 
1375  return value;
1376  }

◆ getDirectLightFromDeltaRays()

double JPHYSICS::JPDF::getDirectLightFromDeltaRays ( const double  R_m,
const double  theta,
const double  phi,
const double  t_ns 
) const
inlineinherited

Probability density function for direct light from delta-rays.

Parameters
R_mdistance between muon and PMT [m]
thetazenith angle orientation PMT [rad]
phiazimuth angle orientation PMT [rad]
t_nstime difference relative to direct Cherenkov light [ns]
Returns
d^2P/dt/dE [npe/ns x m/GeV]

Definition at line 1388 of file JPDF.hh.

1392  {
1393  using namespace JTOOLS;
1394 
1395  double value = 0;
1396 
1397  const double R = std::max(R_m, getRmin());
1398  const double t = R * getTanThetaC() / C + t_ns; // time [ns]
1399  const double A = getPhotocathodeArea();
1400  const double D = 2.0*sqrt(A/PI);
1401 
1402  const double px = sin(theta)*cos(phi);
1403  const double pz = cos(theta);
1404 
1405  const double n0 = getIndexOfRefractionGroup(wmax);
1406  const double n1 = getIndexOfRefractionGroup(wmin);
1407  const double ni = sqrt(R*R + C*t*C*t) / R; // maximal index of refraction
1408 
1409  if (n0 >= ni) return value;
1410 
1411  const double nj = std::min(n1, ni);
1412 
1413  double w = wmax;
1414 
1415  for (const_iterator i = begin(); i != end(); ++i) {
1416 
1417  const double ng = 0.5 * (nj + n0) + i->getX() * 0.5 * (nj - n0);
1418  const double dn = i->getY() * 0.5 * (nj - n0);
1419 
1420  w = getWavelength(ng, w, 1.0e-5);
1421 
1422  const double dw = dn / fabs(getDispersionGroup(w));
1423 
1424  const double n = getIndexOfRefractionPhase(w);
1425 
1426  const double l_abs = getAbsorptionLength(w);
1427  const double ls = getScatteringLength(w);
1428 
1429  const double npe = cherenkov(w,n) * dw * getQE(w);
1430 
1431  JRoot rz(R, ng, t); // square root
1432 
1433  if (!rz.is_valid) { continue; }
1434 
1435  for (int j = 0; j != 2; ++j) {
1436 
1437  const double z = rz[j];
1438 
1439  if (C*t <= z) continue;
1440 
1441  const double d = sqrt(z*z + R*R); // distance traveled by photon
1442 
1443  const double ct0 = -z / d;
1444  const double st0 = R / d;
1445 
1446  const double dz = D / st0; // average track length
1447  const double ct = st0*px + ct0*pz; // cosine angle of incidence on PMT
1448 
1449  const double U = getAngularAcceptance(ct); // PMT angular acceptance
1450  const double V = exp(-d/l_abs - d/ls); // absorption & scattering
1451  const double W = A/(d*d); // solid angle
1452 
1453  const double Ja = 1.0/(4*PI); // d^2N/dcos/dphi
1454  const double Jd = (1.0 - ng*ct0) / C; // d t/ dz
1455  const double Je = ng*st0*st0*st0 / (R*C); // d^2t/(dz)^2
1456 
1457  value += npe * geanc() * U * V * W * Ja / (fabs(Jd) + 0.5*Je*dz);
1458  }
1459  }
1460 
1461  return value;
1462  }

◆ getScatteredLightFromDeltaRays()

double JPHYSICS::JPDF::getScatteredLightFromDeltaRays ( const double  R_m,
const double  theta,
const double  phi,
const double  t_ns 
) const
inlineinherited

Probability density function for direct light from delta-rays.

Parameters
R_mdistance between muon and PMT [m]
thetazenith angle orientation PMT [rad]
phiazimuth angle orientation PMT [rad]
t_nstime difference relative to direct Cherenkov light [ns]
Returns
d^2P/dt/dx [npe/ns x m/GeV]

Definition at line 1474 of file JPDF.hh.

1478  {
1479  using namespace JTOOLS;
1480 
1481  double value = 0;
1482 
1483  const double R = std::max(R_m, getRmin());
1484  const double t = R * getTanThetaC() / C + t_ns; // time [ns]
1485  const double A = getPhotocathodeArea();
1486 
1487  const double px = sin(theta)*cos(phi);
1488  const double py = sin(theta)*sin(phi);
1489  const double pz = cos(theta);
1490 
1491  const double n0 = getIndexOfRefractionGroup(wmax);
1492  const double n1 = getIndexOfRefractionGroup(wmin);
1493  const double ni = sqrt(R*R + C*t*C*t) / R; // maximal index of refraction
1494 
1495  if (n0 >= ni) return value;
1496 
1497  const double nj = std::min(ni,n1);
1498 
1499  double w = wmax;
1500 
1501  for (const_iterator i = begin(); i != end(); ++i) {
1502 
1503  const double ng = 0.5 * (nj + n0) + i->getX() * 0.5 * (nj - n0);
1504  const double dn = i->getY() * 0.5 * (nj - n0);
1505 
1506  w = getWavelength(ng, w, 1.0e-5);
1507 
1508  const double dw = dn / fabs(getDispersionGroup(w));
1509 
1510  const double n = getIndexOfRefractionPhase(w);
1511 
1512  const double l_abs = getAbsorptionLength(w);
1513  const double ls = getScatteringLength(w);
1514 
1515  const double npe = cherenkov(w,n) * dw * getQE(w);
1516 
1517  if (npe <= 0) { continue; }
1518 
1519  const double Jc = 1.0 / ls; // dN/dx
1520 
1521  JRoot rz(R, ng, t); // square root
1522 
1523  if (!rz.is_valid) { continue; }
1524 
1525  const double zmin = rz.first;
1526  const double zmax = rz.second;
1527 
1528  const double zap = 1.0 / l_abs;
1529 
1530  const double xmin = exp(zap*zmax);
1531  const double xmax = exp(zap*zmin);
1532 
1533  for (const_iterator j = begin(); j != end(); ++j) {
1534 
1535  const double x = 0.5 * (xmax + xmin) + j->getX() * 0.5 * (xmax - xmin);
1536  const double dx = j->getY() * 0.5 * (xmax - xmin);
1537 
1538  const double z = log(x) / zap;
1539  const double dz = -dx / (zap*x);
1540 
1541  const double D = sqrt(z*z + R*R);
1542  const double cd = -z / D;
1543  const double sd = R / D;
1544 
1545  const double qx = cd*px + 0 - sd*pz;
1546  const double qy = 1*py;
1547  const double qz = sd*px + 0 + cd*pz;
1548 
1549  const double d = (C*t - z) / ng; // photon path
1550 
1551  //const double V = exp(-d/l_abs); // absorption
1552 
1553  const double ds = 2.0 / (size() + 1);
1554 
1555  for (double sb = 0.5*ds; sb < 1.0 - 0.25*ds; sb += ds) {
1556 
1557  for (int buffer[] = { -1, +1, 0}, *k = buffer; *k != 0; ++k) {
1558 
1559  const double cb = (*k) * sqrt((1.0 + sb)*(1.0 - sb));
1560  const double dcb = (*k) * ds*sb/cb;
1561 
1562  const double v = 0.5 * (d + D) * (d - D) / (d - D*cb);
1563  const double u = d - v;
1564 
1565  if (u <= 0) { continue; }
1566  if (v <= 0) { continue; }
1567 
1568  const double cts = (D*cb - v) / u; // cosine scattering angle
1569 
1570  const double V = exp(-d*getInverseAttenuationLength(l_abs, ls, cts));
1571 
1572  if (cts < 0.0 && v * sqrt((1.0 + cts) * (1.0 - cts)) < MODULE_RADIUS_M) { continue; }
1573 
1574  const double W = std::min(A/(v*v), 2.0*PI); // solid angle
1575  const double Ja = getScatteringProbability(cts); // d^2P/dcos/dphi
1576  const double Jd = ng * (1.0 - cts) / C; // dt/du
1577 
1578  const double dp = PI / phd.size();
1579  const double dom = dcb*dp * v*v / (u*u);
1580 
1581  for (const_iterator l = phd.begin(); l != phd.end(); ++l) {
1582 
1583  const double cp = l->getX();
1584  const double sp = l->getY();
1585 
1586  const double vx = sb*cp * qx;
1587  const double vy = sb*sp * qy;
1588  const double vz = cb * qz;
1589 
1590  const double U =
1591  getAngularAcceptance(vx + vy + vz) +
1592  getAngularAcceptance(vx - vy + vz); // PMT angular acceptance
1593 
1594  const double Jb = 1.0/(4*PI); // d^2N/dcos/dphi
1595 
1596  value += dom * npe * geanc() * dz * U * V * W * Ja * Jb * Jc / fabs(Jd);
1597  }
1598  }
1599  }
1600  }
1601  }
1602 
1603  return value;
1604  }

◆ getLightFromMuon() [1/2]

double JPHYSICS::JPDF::getLightFromMuon ( const int  type,
const double  E_GeV,
const double  R_m,
const double  theta,
const double  phi,
const double  t_ns 
) const
inlineinherited

Probability density function for light from muon.

Parameters
typePDF type
E_GeVmuon energy [GeV]
R_mdistance between muon and PMT [m]
thetazenith angle orientation PMT [rad]
phiazimuth angle orientation PMT [rad]
t_nstime difference relative to direct Cherenkov light [ns]
Returns
d^2P/dt/dx [npe/ns]

Definition at line 1618 of file JPDF.hh.

1624  {
1625  switch (type) {
1626 
1628  return getDirectLightFromMuon (R_m, theta, phi, t_ns);
1629 
1631  return getScatteredLightFromMuon (R_m, theta, phi, t_ns);
1632 
1634  return getDirectLightFromEMshowers (R_m, theta, phi, t_ns) * E_GeV;
1635 
1637  return getScatteredLightFromEMshowers(R_m, theta, phi, t_ns) * E_GeV;
1638 
1640  return getDirectLightFromDeltaRays (R_m, theta, phi, t_ns) * getDeltaRaysFromMuon(E_GeV);
1641 
1643  return getScatteredLightFromDeltaRays(R_m, theta, phi, t_ns) * getDeltaRaysFromMuon(E_GeV);
1644 
1645  default:
1646  return 0.0;
1647  }
1648  }

◆ getLightFromMuon() [2/2]

double JPHYSICS::JPDF::getLightFromMuon ( const double  E_GeV,
const double  R_m,
const double  theta,
const double  phi,
const double  t_ns 
) const
inlineinherited

Probability density function for light from muon.

Parameters
E_GeVmuon energy [GeV]
R_mdistance between muon and PMT [m]
thetazenith angle orientation PMT [rad]
phiazimuth angle orientation PMT [rad]
t_nstime difference relative to direct Cherenkov light [ns]
Returns
d^2P/dt/dx [npe/ns]

Definition at line 1661 of file JPDF.hh.

1666  {
1667  return (getDirectLightFromMuon (R_m, theta, phi, t_ns) +
1668  getScatteredLightFromMuon (R_m, theta, phi, t_ns) +
1669  getDirectLightFromEMshowers (R_m, theta, phi, t_ns) * E_GeV +
1670  getScatteredLightFromEMshowers(R_m, theta, phi, t_ns) * E_GeV +
1671  getDirectLightFromDeltaRays (R_m, theta, phi, t_ns) * getDeltaRaysFromMuon(E_GeV) +
1672  getScatteredLightFromDeltaRays(R_m, theta, phi, t_ns) * getDeltaRaysFromMuon(E_GeV));
1673  }

◆ getLightFromEMshower() [1/4]

double JPHYSICS::JPDF::getLightFromEMshower ( const int  type,
const double  D_m,
const double  cd,
const double  theta,
const double  phi,
const double  t_ns 
) const
inlineinherited

Probability density function for light from EM-shower.

Parameters
typePDF type
D_mdistance between EM-shower and PMT [m]
cdcosine angle EM-shower direction and EM-shower - PMT position
thetazenith angle orientation PMT [rad]
phiazimuth angle orientation PMT [rad]
t_nstime difference relative to direct Cherenkov light [ns]
Returns
d^2P/dt/dE [npe/ns/GeV]

Definition at line 1687 of file JPDF.hh.

1693  {
1694  switch (type) {
1695 
1697  return getDirectLightFromEMshower (D_m, cd, theta, phi, t_ns);
1698 
1700  return getScatteredLightFromEMshower(D_m, cd, theta, phi, t_ns);
1701 
1702  default:
1703  return 0.0;
1704  }
1705  }

◆ getLightFromEMshower() [2/4]

double JPHYSICS::JPDF::getLightFromEMshower ( const double  D_m,
const double  cd,
const double  theta,
const double  phi,
const double  t_ns 
) const
inlineinherited

Probability density function for light from EM-shower.

Parameters
D_mdistance between EM-shower and PMT [m]
cdcosine angle EM-shower direction and EM-shower - PMT position
thetazenith angle orientation PMT [rad]
phiazimuth angle orientation PMT [rad]
t_nstime difference relative to direct Cherenkov light [ns]
Returns
d^2P/dt/dE [npe/ns/GeV]

Definition at line 1718 of file JPDF.hh.

1723  {
1724  return (getDirectLightFromEMshower (D_m, cd, theta, phi, t_ns) +
1725  getScatteredLightFromEMshower(D_m, cd, theta, phi, t_ns));
1726  }

◆ getLightFromEMshower() [3/4]

double JPHYSICS::JPDF::getLightFromEMshower ( const int  type,
const double  E_GeV,
const double  D_m,
const double  cd,
const double  theta,
const double  phi,
const double  t_ns 
) const
inlineinherited

Probability density function for light from EM-shower.

Parameters
E_GeVEM-shower energy [GeV]
typePDF type
D_mdistance between EM-shower and PMT [m]
cdcosine angle EM-shower direction and EM-shower - PMT position
thetazenith angle orientation PMT [rad]
phiazimuth angle orientation PMT [rad]
t_nstime difference relative to direct Cherenkov light [ns]
Returns
d^2P/dt/dE [npe/ns/GeV]

Definition at line 1741 of file JPDF.hh.

1748  {
1749  switch (type) {
1750 
1752  return getDirectLightFromEMshower (E_GeV, D_m, cd, theta, phi, t_ns);
1753 
1755  return getScatteredLightFromEMshower(E_GeV, D_m, cd, theta, phi, t_ns);
1756 
1757  default:
1758  return 0.0;
1759  }
1760  }

◆ getLightFromEMshower() [4/4]

double JPHYSICS::JPDF::getLightFromEMshower ( const double  E_GeV,
const double  D_m,
const double  cd,
const double  theta,
const double  phi,
const double  t_ns 
) const
inlineinherited

Probability density function for light from EM-shower.

Parameters
E_GeVEM-shower energy [GeV]
D_mdistance between EM-shower and PMT [m]
cdcosine angle EM-shower direction and EM-shower - PMT position
thetazenith angle orientation PMT [rad]
phiazimuth angle orientation PMT [rad]
t_nstime difference relative to direct Cherenkov light [ns]
Returns
d^2P/dt/dE [npe/ns/GeV]

Definition at line 1774 of file JPDF.hh.

1780  {
1781  return (getDirectLightFromEMshower (E_GeV, D_m, cd, theta, phi, t_ns) +
1782  getScatteredLightFromEMshower(E_GeV, D_m, cd, theta, phi, t_ns));
1783  }

◆ getWavelength() [1/2]

virtual double JPHYSICS::JPDF::getWavelength ( const double  n,
const double  eps = 1.0e-10 
) const
inlineprotectedvirtualinherited

Determine wavelength for a given index of refraction corresponding to the group velocity.

Parameters
nindex of refraction
epsprecision index of refraction
Returns
wavelength [nm]

Definition at line 1862 of file JPDF.hh.

1864  {
1865  //return getWavelength(n, 0.5*(wmin + wmax), eps);
1866 
1867  double vmin = wmin;
1868  double vmax = wmax;
1869 
1870  for (int i = 0; i != 1000; ++i) {
1871 
1872  const double v = 0.5 * (vmin + vmax);
1873  const double y = getIndexOfRefractionGroup(v);
1874 
1875  if (fabs(y - n) < eps) {
1876  return v;
1877  }
1878 
1879  if (y < n)
1880  vmax = v;
1881  else
1882  vmin = v;
1883  }
1884 
1885  return 0.5 * (vmin + vmax);
1886  }

◆ getWavelength() [2/2]

virtual double JPHYSICS::JPDF::getWavelength ( const double  n,
const double  w,
const double  eps 
) const
inlineprotectedvirtualinherited

Determine wavelength for a given index of refraction corresponding to the group velocity.

The estimate of the wavelength is made by successive linear extrapolations. The procedure starts from the given wavelength and terminates if the index of refraction is equal to the target value within the given precision.

Parameters
nindex of refraction
wstart value wavelength [nm]
epsprecision index of refraction
Returns
return value wavelength [nm]

Definition at line 1900 of file JPDF.hh.

1903  {
1904  double v = w;
1905 
1906  // determine wavelength by linear extrapolation
1907 
1908  for ( ; ; ) {
1909 
1910  const double y = getIndexOfRefractionGroup(v);
1911 
1912  if (fabs(y - n) < eps) {
1913  break;
1914  }
1915 
1916  v += (n - y) / getDispersionGroup(v);
1917  }
1918 
1919  return v;
1920  }

◆ getRmin()

static double JPHYSICS::JPDF::getRmin ( )
inlinestaticprotectedinherited

minimal distance of approach of muon to PMT [m]

Definition at line 1923 of file JPDF.hh.

◆ getInverseAttenuationLength()

virtual double JPHYSICS::JPDF::getInverseAttenuationLength ( const double  l_abs,
const double  ls,
const double  cts 
) const
inlineprotectedvirtualinherited

Get the inverse of the attenuation length.

Parameters
l_absabsorption length [m]
lsscattering length [m]
ctscosine scattering angle
Returns
inverse attenuation length [m^-1]

Definition at line 1934 of file JPDF.hh.

1935  {
1937 
1938  if (f1.empty()) {
1939 
1940  const int nx = 100000;
1941  const double xmin = -1.0;
1942  const double xmax = +1.0;
1943 
1944  const double dx = (xmax - xmin) / (nx - 1);
1945 
1946  for (double x = xmin, W = 0.0; x < xmax; x += dx) {
1947 
1948  f1[x] = W;
1949 
1950  W += 2*PI * dx * getScatteringProbability(x + 0.5*dx);
1951  }
1952 
1953  f1[xmin] = 0.0;
1954  f1[xmax] = 1.0;
1955 
1956  f1.compile();
1957  }
1958 
1959  return 1.0/l_abs + f1(cts)/ls;
1960  }

◆ clear()

virtual void JTOOLS::JCollection< JElement2D_t , JDistance<typename JElement2D_t ::abscissa_type> >::clear ( )
inlinevirtualinherited

Clear.

Implements JTOOLS::JMappableCollection< JKey_t, JValue_t >.

Definition at line 148 of file JCollection.hh.

149  {
150  container_type::clear();
151  }

◆ get() [1/2]

virtual ordinate_type& JTOOLS::JCollection< JElement2D_t , JDistance<typename JElement2D_t ::abscissa_type> >::get ( typename JClass< abscissa_type >::argument_type  x)
inlinevirtualinherited

Get ordinate value.

Parameters
xabscissa value
Returns
ordinate value

Definition at line 160 of file JCollection.hh.

161  {
162  iterator i = this->lower_bound(x);
163 
164  if (i == this->end() || this->getDistance(x, i->getX()) > distance_type::precision) {
165  i = container_type::insert(i, value_type(x, ordinate_type()));
166  }
167 
168  return i->getY();
169  }

◆ get() [2/2]

template<class JKey_t, class JValue_t>
virtual mapped_type& JTOOLS::JMappableCollection< JKey_t, JValue_t >::get ( typename JClass< key_type >::argument_type  key)
pure virtualinherited

◆ getSize()

virtual int JTOOLS::JCollection< JElement2D_t , JDistance<typename JElement2D_t ::abscissa_type> >::getSize ( ) const
inlinevirtualinherited

Get number of elements.

Returns
number of elements

Implements JTOOLS::JAbstractCollection< JAbscissa_t >.

Definition at line 177 of file JCollection.hh.

178  {
179  return (int) this->size();
180  }

◆ getX()

virtual abscissa_type JTOOLS::JCollection< JElement2D_t , JDistance<typename JElement2D_t ::abscissa_type> >::getX ( int  index) const
inlinevirtualinherited

Get abscissa value.

Parameters
indexindex
Returns
abscissa value

Implements JTOOLS::JAbstractCollection< JAbscissa_t >.

Definition at line 189 of file JCollection.hh.

190  {
191  return this->at(index).getX();
192  }

◆ getXmin()

virtual abscissa_type JTOOLS::JCollection< JElement2D_t , JDistance<typename JElement2D_t ::abscissa_type> >::getXmin ( ) const
inlinevirtualinherited

Get minimal abscissa value.

Returns
abscissa value

Implements JTOOLS::JAbstractCollection< JAbscissa_t >.

Definition at line 200 of file JCollection.hh.

201  {
202  return this->begin()->getX();
203  }

◆ getXmax()

virtual abscissa_type JTOOLS::JCollection< JElement2D_t , JDistance<typename JElement2D_t ::abscissa_type> >::getXmax ( ) const
inlinevirtualinherited

Get maximal abscissa value.

Returns
abscissa value

Implements JTOOLS::JAbstractCollection< JAbscissa_t >.

Definition at line 211 of file JCollection.hh.

212  {
213  return this->rbegin()->getX();
214  }

◆ getY() [1/2]

const ordinate_type& JTOOLS::JCollection< JElement2D_t , JDistance<typename JElement2D_t ::abscissa_type> >::getY ( int  index) const
inlineinherited

Get ordinate value.

Parameters
indexindex
Returns
ordinate value

Definition at line 224 of file JCollection.hh.

225  {
226  return this->at(index).getY();
227  }

◆ getY() [2/2]

ordinate_type& JTOOLS::JCollection< JElement2D_t , JDistance<typename JElement2D_t ::abscissa_type> >::getY ( int  index)
inlineinherited

Get ordinate value.

Parameters
indexindex
Returns
ordinate value

Definition at line 236 of file JCollection.hh.

237  {
238  return this->at(index).getY();
239  }

◆ transform()

void JTOOLS::JCollection< JElement2D_t , JDistance<typename JElement2D_t ::abscissa_type> >::transform ( const transformer_type transformer)
inlineinherited

Transform collection.

Parameters
transformerelement transformer

Definition at line 247 of file JCollection.hh.

248  {
249  collection_type buffer;
250 
251  this->swap(buffer);
252 
253  for (const_iterator i = buffer.begin(); i != buffer.end(); ++i) {
254  this->insert(transformer(*i));
255  }
256  }

◆ sort()

void JTOOLS::JCollection< JElement2D_t , JDistance<typename JElement2D_t ::abscissa_type> >::sort ( )
inlineinherited

Sort elements.

Definition at line 262 of file JCollection.hh.

263  {
264  std::sort(this->begin(), this->end(), compare);
265  }

◆ lower_bound() [1/2]

const_iterator JTOOLS::JCollection< JElement2D_t , JDistance<typename JElement2D_t ::abscissa_type> >::lower_bound ( typename JClass< abscissa_type >::argument_type  x) const
inlineinherited

Get first position of element i, where x >= i->getX().

Parameters
xabscissa value
Returns
position of corresponding element

Definition at line 274 of file JCollection.hh.

275  {
276  return std::lower_bound(this->begin(), this->end(), x, compare);
277  }

◆ lower_bound() [2/2]

iterator JTOOLS::JCollection< JElement2D_t , JDistance<typename JElement2D_t ::abscissa_type> >::lower_bound ( typename JClass< abscissa_type >::argument_type  x)
inlineinherited

Get first position of element i, where x >= i->getX().

Parameters
xabscissa value
Returns
position of corresponding element

Definition at line 286 of file JCollection.hh.

287  {
288  return std::lower_bound(this->begin(), this->end(), x, compare);
289  }

◆ insert()

pair_type JTOOLS::JCollection< JElement2D_t , JDistance<typename JElement2D_t ::abscissa_type> >::insert ( const value_type element)
inlineinherited

Insert element.

Parameters
elementelement
Returns
(iterator, status), where status is true if inserted; else false

Definition at line 298 of file JCollection.hh.

299  {
300  iterator i = this->lower_bound(element.getX());
301 
302  if (i == this->end() || this->getDistance(element.getX(), i->getX()) > 0.0)
303  return pair_type(container_type::insert(i, element), true);
304  else
305  return pair_type(this->end(), false);
306  }

◆ configure() [1/3]

void JTOOLS::JCollection< JElement2D_t , JDistance<typename JElement2D_t ::abscissa_type> >::configure ( const JAbstractCollection< abscissa_type > &  bounds)
inlineinherited

Configure collection.

Parameters
boundsabscissa values

Definition at line 314 of file JCollection.hh.

315  {
316  configure(bounds, JMATH::getZero<ordinate_type>());
317  }

◆ configure() [2/3]

void JTOOLS::JCollection< JElement2D_t , JDistance<typename JElement2D_t ::abscissa_type> >::configure ( const JAbstractCollection< abscissa_type > &  bounds,
typename JClass< ordinate_type >::argument_type  value 
)
inlineinherited

Configure collection.

Parameters
boundsabscissa values
valueordinate value

Definition at line 326 of file JCollection.hh.

328  {
329  this->resize(bounds.getSize());
330 
331  for (iterator i = this->begin(); i != this->end(); ++i) {
332 
333  const abscissa_type x = bounds.getX(std::distance(this->begin(),i));
334 
335  *i = value_type(x,value);
336  }
337  }

◆ configure() [3/3]

void JTOOLS::JCollection< JElement2D_t , JDistance<typename JElement2D_t ::abscissa_type> >::configure ( const JAbstractCollection< abscissa_type > &  bounds,
const JFunction1D_t &  function 
)
inlineinherited

Configure collection.

Parameters
boundsabscissa values
functionfunction

Definition at line 347 of file JCollection.hh.

349  {
350  using namespace JLANG;
351 
352  collection_type* out = (is_identical(*this, function) ? new collection_type() : this);
353 
354  for (int i = 0; i != bounds.getSize(); ++i) {
355 
356  const abscissa_type x = bounds.getX(i);
357 
358  out->put(x, function(x));
359  }
360 
361  if (is_identical(*this, function)) {
362 
363  this->swap(*out);
364 
365  delete out;
366  }
367  }

◆ is_compatible()

bool JTOOLS::JCollection< JElement2D_t , JDistance<typename JElement2D_t ::abscissa_type> >::is_compatible ( const JCollection< JElement2D_t > &  collection) const
inlineinherited

Test whether collections are compatible.

Parameters
collectioncollection
Returns
true if collections are compatible; else false

Definition at line 376 of file JCollection.hh.

377  {
378  if (this->empty() || collection.empty()) {
379 
380  return true;
381 
382  } else {
383 
384  const double precision = JDistance<abscissa_type>::precision;
385 
386  const_iterator p = this->begin();
387  const_iterator q = collection.begin();
388 
389  if (getDistance(p->getX(), q->getX()) > precision) {
390 
391  do {
392  ++p;
393  } while (p != this->end() && getDistance(p->getX(), q->getX()) > precision);
394 
395  } else if (getDistance(q->getX(), p->getX()) > precision) {
396 
397  do {
398  ++q;
399  } while (q != collection.end() && getDistance(q->getX(), p->getX()) > precision);
400  }
401 
402  for ( ; p != this->end() && q != collection.end(); ++p, ++q) {
403  if (fabs(getDistance(p->getX(), q->getX())) > precision) {
404  return false;
405  }
406  }
407 
408  return true;
409  }
410  }

◆ negate()

JCollection& JTOOLS::JCollection< JElement2D_t , JDistance<typename JElement2D_t ::abscissa_type> >::negate ( )
inlineinherited

Negate collection.

Returns
this collection

Definition at line 418 of file JCollection.hh.

419  {
420  for (iterator i = this->begin(); i != this->end(); ++i) {
421  i->getY() = -i->getY();
422  }
423 
424  return *this;
425  }

◆ add() [1/3]

JCollection& JTOOLS::JCollection< JElement2D_t , JDistance<typename JElement2D_t ::abscissa_type> >::add ( const JCollection< JElement2D_t > &  collection)
inlineinherited

Add collection.

Parameters
collectioncollection
Returns
this collection

Definition at line 434 of file JCollection.hh.

435  {
436  if (!collection.empty()) {
437 
438  if (this->empty()) {
439 
440  for (const_iterator i = collection.begin(); i != collection.end(); ++i) {
441  this->put(i->getX(), +i->getY());
442  }
443 
444  } else if (this->is_compatible(collection)) {
445 
446  const double precision = JDistance<abscissa_type>::precision;
447 
448  iterator p = this->begin();
449  const_iterator q = collection.begin();
450 
451  if (getDistance(p->getX(), q->getX()) > precision) {
452 
453  do {
454  ++p;
455  } while (p != this->end() && getDistance(p->getX(), q->getX()) > precision);
456 
457  } else if (getDistance(q->getX(), p->getX()) > precision) {
458 
459  do {
460  ++q;
461  } while (q != collection.end() && getDistance(q->getX(), p->getX()) > precision);
462  }
463 
464  const_iterator i = q;
465 
466  for ( ; p != this->end() && i != collection.end(); ++p, ++i) {
467  p->getY() += i->getY();
468  }
469 
470  for ( ; i != collection.end(); ++i) {
471  this->put(i->getX(), +i->getY());
472  }
473 
474  for (i = collection.begin(); i != q; ++i) {
475  this->put(i->getX(), +i->getY());
476  }
477  }
478  }
479 
480  return *this;
481  }

◆ add() [2/3]

JCollection& JTOOLS::JCollection< JElement2D_t , JDistance<typename JElement2D_t ::abscissa_type> >::add ( typename JClass< ordinate_type >::argument_type  value)
inlineinherited

Add offset.

Parameters
valueoffset
Returns
this collection

Definition at line 582 of file JCollection.hh.

583  {
584  for (iterator i = this->begin(); i != this->end(); ++i) {
585  i->getY() += value;
586  }
587 
588  return *this;
589  }

◆ add() [3/3]

JCollection& JTOOLS::JCollection< JElement2D_t , JDistance<typename JElement2D_t ::abscissa_type> >::add ( const JFunction1D_t &  function)
inlineinherited

Add function.

Parameters
functionfunction
Returns
this collection

Definition at line 615 of file JCollection.hh.

616  {
617  for (iterator i = this->begin(); i != this->end(); ++i) {
618  i->getY() += function(i->getX());
619  }
620 
621  return *this;
622  }

◆ sub() [1/3]

JCollection& JTOOLS::JCollection< JElement2D_t , JDistance<typename JElement2D_t ::abscissa_type> >::sub ( const JCollection< JElement2D_t > &  collection)
inlineinherited

Subtract collection.

Parameters
collectioncollection
Returns
this collection

Definition at line 490 of file JCollection.hh.

491  {
492  if (!collection.empty()) {
493 
494  if (this->empty()) {
495 
496  for (const_iterator i = collection.begin(); i != collection.end(); ++i) {
497  this->put(i->getX(), -i->getY());
498  }
499 
500  } else if (this->is_compatible(collection)) {
501 
502  const double precision = JDistance<abscissa_type>::precision;
503 
504  iterator p = this->begin();
505  const_iterator q = collection.begin();
506 
507  if (getDistance(p->getX(), q->getX()) > precision) {
508 
509  do {
510  ++p;
511  } while (p != this->end() && getDistance(p->getX(), q->getX()) > precision);
512 
513  } else if (getDistance(q->getX(), p->getX()) > precision) {
514 
515  do {
516  ++q;
517  } while (q != collection.end() && getDistance(q->getX(), p->getX()) > precision);
518  }
519 
520  const_iterator i = q;
521 
522  for ( ; p != this->end() && i != collection.end(); ++p, ++i) {
523  p->getY() -= i->getY();
524  }
525 
526  for ( ; i != collection.end(); ++i) {
527  this->put(i->getX(), -i->getY());
528  }
529 
530  for (i = collection.begin(); i != q; ++i) {
531  this->put(i->getX(), -i->getY());
532  }
533 
534  } else {
535 
536  throw JException("JCollection::add() collections incompatible.");
537  }
538  }
539 
540  return *this;
541  }

◆ sub() [2/3]

JCollection& JTOOLS::JCollection< JElement2D_t , JDistance<typename JElement2D_t ::abscissa_type> >::sub ( typename JClass< ordinate_type >::argument_type  value)
inlineinherited

Subtract offset.

Parameters
valueoffset
Returns
this collection

Definition at line 598 of file JCollection.hh.

599  {
600  for (iterator i = this->begin(); i != this->end(); ++i) {
601  i->getY() -= value;
602  }
603 
604  return *this;
605  }

◆ sub() [3/3]

JCollection& JTOOLS::JCollection< JElement2D_t , JDistance<typename JElement2D_t ::abscissa_type> >::sub ( const JFunction1D_t &  function)
inlineinherited

Subtract function.

Parameters
functionfunction
Returns
this collection

Definition at line 632 of file JCollection.hh.

633  {
634  for (iterator i = this->begin(); i != this->end(); ++i) {
635  i->getY() -= function(i->getX());
636  }
637 
638  return *this;
639  }

◆ mul() [1/2]

JCollection& JTOOLS::JCollection< JElement2D_t , JDistance<typename JElement2D_t ::abscissa_type> >::mul ( const double  value)
inlineinherited

Scale contents.

Parameters
valuemultiplication factor
Returns
this collection

Definition at line 550 of file JCollection.hh.

551  {
552  for (iterator i = this->begin(); i != this->end(); ++i) {
553  i->getY() *= value;
554  }
555 
556  return *this;
557  }

◆ mul() [2/2]

template<class JFirst_t, class JSecond_t>
JFirst_t& JMATH::JMath< JFirst_t, JSecond_t >::mul ( const JSecond_t &  object)
inlineinherited

Multiply with object.

Parameters
objectobject
Returns
result object

Definition at line 273 of file JMath.hh.

274  {
275  return static_cast<JFirst_t&>(*this) = JCalculator<JFirst_t>::calculator.mul(static_cast<const JFirst_t&>(*this), object);
276  }

◆ div()

JCollection& JTOOLS::JCollection< JElement2D_t , JDistance<typename JElement2D_t ::abscissa_type> >::div ( const double  value)
inlineinherited

Scale contents.

Parameters
valuedivision factor
Returns
this collection

Definition at line 566 of file JCollection.hh.

567  {
568  for (iterator i = this->begin(); i != this->end(); ++i) {
569  i->getY() /= value;
570  }
571 
572  return *this;
573  }

◆ getComparator()

const JComparator& JTOOLS::JCollection< JElement2D_t , JDistance<typename JElement2D_t ::abscissa_type> >::getComparator ( ) const
inlineinherited

Get comparator.

Returns
comparator

Definition at line 745 of file JCollection.hh.

746  {
747  return compare;
748  }

◆ resize()

void JTOOLS::JCollection< JElement2D_t , JDistance<typename JElement2D_t ::abscissa_type> >::resize ( typename container_type::size_type  size)
inlineprotectedinherited

Resize collection.

Parameters
sizesize

Definition at line 769 of file JCollection.hh.

770  {
771  container_type::resize(size);
772  }

◆ erase()

void JTOOLS::JCollection< JElement2D_t , JDistance<typename JElement2D_t ::abscissa_type> >::erase ( )
privateinherited

◆ push_back()

void JTOOLS::JCollection< JElement2D_t , JDistance<typename JElement2D_t ::abscissa_type> >::push_back ( )
privateinherited

◆ pop_back()

void JTOOLS::JCollection< JElement2D_t , JDistance<typename JElement2D_t ::abscissa_type> >::pop_back ( )
privateinherited

◆ operator[]()

template<class JKey_t, class JValue_t>
mapped_type& JTOOLS::JMappableCollection< JKey_t, JValue_t >::operator[] ( typename JClass< key_type >::argument_type  key)
inlineinherited

Get mapped value.

Parameters
keykey
Returns
value

Definition at line 64 of file JMappableCollection.hh.

65  {
66  return get(key);
67  }

◆ put()

template<class JKey_t, class JValue_t>
void JTOOLS::JMappableCollection< JKey_t, JValue_t >::put ( typename JClass< key_type > ::argument_type  key,
typename JClass< mapped_type >::argument_type  value 
)
inlineinherited

Put pair-wise element (key,value) into collection.

Parameters
keykey
valuevalue

Definition at line 76 of file JMappableCollection.hh.

78  {
79  get(key) = value;
80  }

◆ is_equal()

template<class JAbscissa_t>
bool JTOOLS::JAbstractCollection< JAbscissa_t >::is_equal ( const JAbstractCollection< JAbscissa_t > &  collection) const
inlineinherited

Test whether abstract collections are equal.

Parameters
collectionabstract collection
Returns
true if collections are equals; else false

Definition at line 69 of file JAbstractCollection.hh.

70  {
71  if (this->getSize() == collection.getSize()) {
72 
73  for (int i = 0; i != this->getSize(); ++i) {
74 
75  if (this->getX(i) != collection.getX(i)) {
76  return false;
77  }
78  }
79 
80  return true;
81  }
82 
83  return false;
84  }

◆ getIndexOfRefractionPhase() [1/2]

virtual double JPHYSICS::JDispersionInterface::getIndexOfRefractionPhase ( const double  lambda) const
pure virtualinherited

Index of refraction for phase velocity.

Parameters
lambdawavelenth [nm]
Returns
index of refraction

Implemented in JPHYSICS::JDispersion.

◆ getIndexOfRefractionPhase() [2/2]

virtual double JPHYSICS::JDispersion::getIndexOfRefractionPhase ( const double  lambda) const
inlinevirtualinherited

Index of refraction (phase velocity).

Parameters
lambdawavelenth [nm]
Returns
index of refraction

Implements JPHYSICS::JDispersionInterface.

Definition at line 51 of file JDispersion.hh.

52  {
53  const double x = 1.0 / lambda;
54 
55  return a0 + a1*P + x*(a2 + x*(a3 + x*a4));
56  }

◆ getDispersionPhase() [1/2]

virtual double JPHYSICS::JDispersionInterface::getDispersionPhase ( const double  lambda) const
pure virtualinherited

Dispersion of light for phase velocity.

Parameters
lambdawavelength of light [nm]
Returns
dn/dlambda

Implemented in JPHYSICS::JDispersion.

◆ getDispersionPhase() [2/2]

virtual double JPHYSICS::JDispersion::getDispersionPhase ( const double  lambda) const
inlinevirtualinherited

Dispersion of light for phase velocity.

Parameters
lambdawavelength of light [nm]
Returns
dn/dlambda

Implements JPHYSICS::JDispersionInterface.

Definition at line 65 of file JDispersion.hh.

66  {
67  const double x = 1.0 / lambda;
68 
69  return -x*x*(a2 + x*(2.0*a3 + x*3.0*a4));
70  }

◆ getIndexOfRefractionGroup()

virtual double JPHYSICS::JDispersionInterface::getIndexOfRefractionGroup ( const double  lambda) const
inlinevirtualinherited

Index of refraction for group velocity.

Parameters
lambdawavelenth [nm]
Returns
index of refraction

Definition at line 52 of file JDispersionInterface.hh.

53  {
54  const double n = getIndexOfRefractionPhase(lambda);
55  const double y = getDispersionPhase(lambda);
56 
57  return n / (1.0 + y*lambda/n);
58  }

◆ getDispersionGroup() [1/2]

virtual double JPHYSICS::JDispersionInterface::getDispersionGroup ( const double  lambda) const
pure virtualinherited

Dispersion of light for group velocity.

Parameters
lambdawavelength of light [nm]
Returns
dn/dlambda

Implemented in JPHYSICS::JDispersion.

◆ getDispersionGroup() [2/2]

virtual double JPHYSICS::JDispersion::getDispersionGroup ( const double  lambda) const
inlinevirtualinherited

Dispersion of light for group velocity.

Parameters
lambdawavelength of light [nm]
Returns
dn/dlambda

Implements JPHYSICS::JDispersionInterface.

Definition at line 79 of file JDispersion.hh.

80  {
81  const double x = 1.0 / lambda;
82 
83  const double n = getIndexOfRefractionPhase(lambda);
84  const double np = getDispersionPhase(lambda);
85  const double npp = x*x*x*(2.0*a2 + x*(6.0*a3 + x*12.0*a4));
86  const double ng = n / (1.0 + np*lambda/n);
87 
88  return ng*ng * (2*np*np - n*npp) * lambda / (n*n*n);
89  }

◆ getKappa()

double JPHYSICS::JDispersionInterface::getKappa ( const double  lambda) const
inlineinherited

Get effective index of refraction for muon light.

Parameters
lambdawavelength of light [nm]
Returns
index of refraction

Definition at line 76 of file JDispersionInterface.hh.

77  {
78  const double n = getIndexOfRefractionPhase(lambda);
79  const double ng = getIndexOfRefractionGroup(lambda);
80 
81  return (ng * n - 1.0) / sqrt(n*n - 1.0);
82  }

◆ getKmin()

double JPHYSICS::JDispersionInterface::getKmin ( const double  lambda) const
inlineinherited

Get smallest index of refraction for Bremsstrahlung light (i.e.

point at which dt/dz = 0).

Parameters
lambdawavelength of light [nm]
Returns
index of refraction

Definition at line 91 of file JDispersionInterface.hh.

92  {
93  const double ng = getIndexOfRefractionGroup(lambda);
94 
95  return sqrt(ng*ng - 1.0);
96  }

Member Data Documentation

◆ A

const double JPHYSICS::JPDF_C::A
protected

photo-cathode area [m2]

Definition at line 2128 of file JPDF.hh.

◆ qe

double(* JPHYSICS::JPDF_C::qe) (const double lambda)
protected

Quantum efficiency of PMT (incl.

absorption in glass, gel, etc.)

Parameters
lambdawavelenth [nm]
Returns
QE

Definition at line 2136 of file JPDF.hh.

◆ l_abs

double(* JPHYSICS::JPDF_C::l_abs) (const double lambda)
protected

Absorption length.

Parameters
lambdawavelenth [nm]
Returns
absorption length [m]

Definition at line 2144 of file JPDF.hh.

◆ ls

double(* JPHYSICS::JPDF_C::ls) (const double lambda)
protected

Scattering length.

Parameters
lambdawavelenth [nm]
Returns
scattering length [m]

Definition at line 2152 of file JPDF.hh.

◆ pmt

double(* JPHYSICS::JPDF_C::pmt) (const double ct)
protected

Angular acceptence of PMT (normalised to one at cos() = -1)

Parameters
ctcosine angle of incidence
Returns
relative efficiency

Definition at line 2160 of file JPDF.hh.

◆ ps

double(* JPHYSICS::JPDF_C::ps) (const double ct)
protected

Model specific function to describe light scattering in water.

Parameters
ctcosine scattering angle
Returns
probability

Definition at line 2168 of file JPDF.hh.

◆ wmin

const double JPHYSICS::JPDF::wmin
protectedinherited

Integration limits.

minimal wavelength for integration [nm]

Definition at line 1967 of file JPDF.hh.

◆ wmax

const double JPHYSICS::JPDF::wmax
protectedinherited

maximal wavelength for integration [nm]

Definition at line 1968 of file JPDF.hh.

◆ phd

std::vector<element_type> JPHYSICS::JPDF::phd
protectedinherited

fast evaluation of phi integral

Definition at line 1970 of file JPDF.hh.

◆ getDistance

Function object for distance evaluation.

Definition at line 754 of file JCollection.hh.

◆ compare

JComparator JTOOLS::JCollection< JElement2D_t , JDistance<typename JElement2D_t ::abscissa_type> >::compare
protectedinherited

Function object for comparison.

Definition at line 761 of file JCollection.hh.

◆ P

const double JPHYSICS::JDispersion::P
inherited

Dispersion parameters (x = 1/lambda)

ambient pressure [atm]

Definition at line 95 of file JDispersion.hh.

◆ a0

const double JPHYSICS::JDispersion::a0
inherited

offset

Definition at line 96 of file JDispersion.hh.

◆ a1

const double JPHYSICS::JDispersion::a1
inherited

dn/dP

Definition at line 97 of file JDispersion.hh.

◆ a2

const double JPHYSICS::JDispersion::a2
inherited

d^1n/(dx)^1

Definition at line 98 of file JDispersion.hh.

◆ a3

const double JPHYSICS::JDispersion::a3
inherited

d^2n/(dx)^2

Definition at line 99 of file JDispersion.hh.

◆ a4

const double JPHYSICS::JDispersion::a4
inherited

d^3n/(dx)^3

Definition at line 100 of file JDispersion.hh.


The documentation for this class was generated from the following file:
JPHYSICS::MODULE_RADIUS_M
static double MODULE_RADIUS_M
Radius of optical module [m].
Definition: JPDF.hh:39
JPHYSICS::JDispersion::a2
const double a2
d^1n/(dx)^1
Definition: JDispersion.hh:98
JPHYSICS::DIRECT_LIGHT_FROM_DELTARAYS
direct light from delta-rays
Definition: JPDFTypes.hh:35
JPHYSICS::JPDF_C::pmt
double(* pmt)(const double ct)
Angular acceptence of PMT (normalised to one at cos() = -1)
Definition: JPDF.hh:2160
JPHYSICS::JDispersion::a3
const double a3
d^2n/(dx)^2
Definition: JDispersion.hh:99
JPHYSICS::JPDF::wmax
const double wmax
maximal wavelength for integration [nm]
Definition: JPDF.hh:1968
JTOOLS::JCollection< JElement2D_t >::compare
JComparator compare
Function object for comparison.
Definition: JCollection.hh:761
JPHYSICS::JDispersionInterface::getDispersionGroup
virtual double getDispersionGroup(const double lambda) const =0
Dispersion of light for group velocity.
JPHYSICS::JPDF_C::ls
double(* ls)(const double lambda)
Scattering length.
Definition: JPDF.hh:2152
JTOOLS::w
data_type w[N+1][M+1]
Definition: JPolint.hh:708
JPHYSICS::gWater
static const JGeaneWater gWater
Function object for energy loss of muon in sea water.
Definition: JGeane.hh:328
JPHYSICS::JAbstractMedium::getAbsorptionLength
virtual double getAbsorptionLength(const double lambda) const =0
Absorption length.
JTOOLS::JCollection< JElement2D_t >::value_type
JElement2D_t value_type
Definition: JCollection.hh:82
numberOfPoints
int numberOfPoints
Definition: JResultPDF.cc:22
JPHYSICS::JPDF_C::qe
double(* qe)(const double lambda)
Quantum efficiency of PMT (incl.
Definition: JPDF.hh:2136
JPHYSICS::JPDF_C::l_abs
double(* l_abs)(const double lambda)
Absorption length.
Definition: JPDF.hh:2144
JPHYSICS::JAbstractMedium::getScatteringProbability
virtual double getScatteringProbability(const double ct) const =0
Model specific function to describe light scattering in water (integral over full solid angle normali...
JPHYSICS::JDispersion::a4
const double a4
d^3n/(dx)^3
Definition: JDispersion.hh:100
JPHYSICS::JPDF::wmin
const double wmin
Integration limits.
Definition: JPDF.hh:1967
JTOOLS::u
double u[N+1]
Definition: JPolint.hh:706
JPHYSICS::JPDF::getDirectLightFromDeltaRays
double getDirectLightFromDeltaRays(const double R_m, const double theta, const double phi, const double t_ns) const
Probability density function for direct light from delta-rays.
Definition: JPDF.hh:1388
JPHYSICS::JPDF::getRmin
static double getRmin()
minimal distance of approach of muon to PMT [m]
Definition: JPDF.hh:1923
JTOOLS::n
const int n
Definition: JPolint.hh:628
JPHYSICS::DIRECT_LIGHT_FROM_EMSHOWER
direct light from EM shower
Definition: JPDFTypes.hh:40
JTOOLS::JCollection< JElement2D_t >::iterator
container_type::iterator iterator
Definition: JCollection.hh:91
JTOOLS::JCollection< JElement2D_t >::lower_bound
const_iterator lower_bound(typename JClass< abscissa_type >::argument_type x) const
Get first position of element i, where x >= i->getX().
Definition: JCollection.hh:274
JPHYSICS::JAbstractPMT::getAngularAcceptance
virtual double getAngularAcceptance(const double ct) const =0
Angular acceptence of PMT.
JTOOLS::j
int j
Definition: JPolint.hh:634
JTOOLS::JCollection< JElement2D_t >::getDistance
JDistance< typename JElement2D_t ::abscissa_type > getDistance
Function object for distance evaluation.
Definition: JCollection.hh:754
JPHYSICS::JAbstractPMT::getQE
virtual double getQE(const double lambda) const =0
Quantum efficiency of PMT (incl.
distance
std::vector< T >::difference_type distance(typename std::vector< T >::const_iterator first, typename PhysicsEvent::const_iterator< T > second)
Specialisation of STL distance.
Definition: PhysicsEvent.hh:434
JPHYSICS::JDispersion::getIndexOfRefractionPhase
virtual double getIndexOfRefractionPhase(const double lambda) const
Index of refraction (phase velocity).
Definition: JDispersion.hh:51
JPHYSICS::getDeltaRaysFromMuon
double getDeltaRaysFromMuon(const double E)
Equivalent EM-shower energy due to delta-rays per unit muon track length.
Definition: JPDFToolkit.hh:81
JTOOLS::JMappableCollection::put
void put(typename JClass< key_type > ::argument_type key, typename JClass< mapped_type >::argument_type value)
Put pair-wise element (key,value) into collection.
Definition: JMappableCollection.hh:76
JTOOLS::C
static const double C
Speed of light in vacuum [m/ns].
Definition: JConstants.hh:22
JPHYSICS::JGeanz::getIntegral
double getIntegral(const double E, const double z) const
Integral of PDF (starting from 0).
Definition: JGeanz.hh:95
JTOOLS::JMappableCollection::get
virtual mapped_type & get(typename JClass< key_type >::argument_type key)=0
Get mapped value.
JTOOLS::JAbstractCollection::getX
virtual abscissa_type getX(int index) const =0
Get abscissa value.
JPHYSICS::JDispersion::P
const double P
Dispersion parameters (x = 1/lambda)
Definition: JDispersion.hh:95
JPHYSICS::JAbstractPMT::getPhotocathodeArea
virtual double getPhotocathodeArea() const =0
Photo-cathode area of PMT.
JPHYSICS::JDispersion::a1
const double a1
dn/dP
Definition: JDispersion.hh:97
JPHYSICS::geanc
double geanc()
Equivalent muon track length per unit shower energy.
Definition: JGeane.hh:31
JPHYSICS::JDispersion::getDispersionPhase
virtual double getDispersionPhase(const double lambda) const
Dispersion of light for phase velocity.
Definition: JDispersion.hh:65
JPHYSICS::JPDF::getWavelength
virtual double getWavelength(const double n, const double eps=1.0e-10) const
Determine wavelength for a given index of refraction corresponding to the group velocity.
Definition: JPDF.hh:1862
JPHYSICS::JPDF::getScatteredLightFromEMshowers
double getScatteredLightFromEMshowers(const double R_m, const double theta, const double phi, const double t_ns) const
Probability density function for scattered light from EM-showers.
Definition: JPDF.hh:733
JTOOLS::getIndexOfRefraction
double getIndexOfRefraction()
Get average index of refraction of water.
Definition: JConstants.hh:111
JTOOLS::JCollection< JElement2D_t >::resize
void resize(typename container_type::size_type size)
Resize collection.
Definition: JCollection.hh:769
JPHYSICS::SCATTERED_LIGHT_FROM_EMSHOWER
scattered light from EM shower
Definition: JPDFTypes.hh:41
JPHYSICS::SCATTERED_LIGHT_FROM_EMSHOWERS
scattered light from EM showers
Definition: JPDFTypes.hh:33
JTOOLS::JCollection< JElement2D_t >::insert
pair_type insert(const value_type &element)
Insert element.
Definition: JCollection.hh:298
JPHYSICS::JPDF::getScatteredLightFromMuon
double getScatteredLightFromMuon(const double R_m, const double theta, const double phi, const double t_ns) const
Probability density function for scattered light from muon.
Definition: JPDF.hh:499
JPHYSICS::JAbstractMedium::getScatteringLength
virtual double getScatteringLength(const double lambda) const =0
Scattering length.
JPHYSICS::JPDF::getDirectLightFromEMshower
double getDirectLightFromEMshower(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 EM-shower.
Definition: JPDF.hh:1011
JPHYSICS::JPDF::getScatteredLightFromDeltaRays
double getScatteredLightFromDeltaRays(const double R_m, const double theta, const double phi, const double t_ns) const
Probability density function for direct light from delta-rays.
Definition: JPDF.hh:1474
JPHYSICS::JDispersion::a0
const double a0
offset
Definition: JDispersion.hh:96
JTOOLS::v
data_type v[N+1][M+1]
Definition: JPolint.hh:707
JTOOLS::getTanThetaC
double getTanThetaC()
Get average tangent of Cherenkov angle of water.
Definition: JConstants.hh:133
JTOOLS::JCollection< JElement2D_t >::ordinate_type
JElement2D_t ::ordinate_type ordinate_type
Definition: JCollection.hh:81
JPHYSICS::JPDF_C::A
const double A
photo-cathode area [m2]
Definition: JPDF.hh:2128
JTOOLS::JAbstractCollection::getSize
virtual int getSize() const =0
Get number of elements.
JPHYSICS::JDispersionInterface::getIndexOfRefractionPhase
virtual double getIndexOfRefractionPhase(const double lambda) const =0
Index of refraction for phase velocity.
JPHYSICS::JGeanz::getLength
double getLength(const double E, const double P, const double eps=1.0e-3) const
Get shower length for a given integrated probability.
Definition: JGeanz.hh:122
JPHYSICS::JDispersionInterface::getIndexOfRefractionGroup
virtual double getIndexOfRefractionGroup(const double lambda) const
Index of refraction for group velocity.
Definition: JDispersionInterface.hh:52
JPHYSICS::JPDF::phd
std::vector< element_type > phd
fast evaluation of phi integral
Definition: JPDF.hh:1970
JTOOLS::JCollection< JElement2D_t >::abscissa_type
JElement2D_t ::abscissa_type abscissa_type
Definition: JCollection.hh:80
JPHYSICS::JPDF::getScatteredLightFromEMshower
double getScatteredLightFromEMshower(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 EM-shower.
Definition: JPDF.hh:1069
JTOOLS::PI
static const double PI
Constants.
Definition: JConstants.hh:20
JTOOLS::JDistance
Template class for distance evaluation.
Definition: JDistance.hh:24
JPHYSICS::JPDF::getInverseAttenuationLength
virtual double getInverseAttenuationLength(const double l_abs, const double ls, const double cts) const
Get the inverse of the attenuation length.
Definition: JPDF.hh:1934
JTOOLS::JCollection< JElement2D_t >::is_compatible
bool is_compatible(const JCollection &collection) const
Test whether collections are compatible.
Definition: JCollection.hh:376
JPHYSICS::geant
static const JGeant geant(geanx, 0.0001)
Function object for the number of photons from EM-shower as a function of emission angle.
JPHYSICS::JPDF::getDirectLightFromEMshowers
double getDirectLightFromEMshowers(const double R_m, const double theta, const double phi, const double t_ns) const
Probability density function for direct light from EM-showers.
Definition: JPDF.hh:645
JMATH::JCalculator
Auxiliary class for arithmetic operations on objects.
Definition: JCalculator.hh:18
JTOOLS::JGridPolint1Function1D_t
Type definition of a 1st degree polynomial interpolation based on a JGridCollection with result type ...
Definition: JFunction1D_t.hh:292
JPHYSICS::DIRECT_LIGHT_FROM_MUON
direct light from muon
Definition: JPDFTypes.hh:29
JPHYSICS::cherenkov
double cherenkov(const double lambda, const double n)
Number of Cherenkov photons per unit track length and per unit wavelength.
Definition: JPDFToolkit.hh:62
JPHYSICS::JPDF::getDirectLightFromMuon
double getDirectLightFromMuon(const double R_m, const double theta, const double phi) const
Number of photo-electrons from direct Cherenkov light from muon.
Definition: JPDF.hh:356
JTOOLS
Auxiliary classes and methods for multi-dimensional interpolations and histograms.
Definition: JAbstractCollection.hh:9
JPHYSICS::JAbstractPDF::JAbstractPDF
JAbstractPDF(const double P_atm, const double Wmin, const double Wmax, const int numberOfPoints=20, const double epsilon=1e-12)
Constructor.
Definition: JPDF.hh:1992
JLANG
Auxiliary classes and methods for language specific functionality.
Definition: JAbstractClass.hh:10
JPHYSICS::DIRECT_LIGHT_FROM_EMSHOWERS
direct light from EM showers
Definition: JPDFTypes.hh:32
JTOOLS::JCollection< JElement2D_t >::const_iterator
container_type::const_iterator const_iterator
Definition: JCollection.hh:89
JTOOLS::JCollection< JElement2D_t >::pair_type
std::pair< const_iterator, bool > pair_type
Definition: JCollection.hh:95
JPHYSICS::SCATTERED_LIGHT_FROM_DELTARAYS
scattered light from delta-rays
Definition: JPDFTypes.hh:36
JPHYSICS::JPDF_C::ps
double(* ps)(const double ct)
Model specific function to describe light scattering in water.
Definition: JPDF.hh:2168
JTOOLS::JCollection< JElement2D_t >::configure
void configure(const JAbstractCollection< abscissa_type > &bounds)
Configure collection.
Definition: JCollection.hh:314
JTOOLS::JCollection< JElement2D_t >::collection_type
JCollection< JElement2D_t, JDistance< typename JElement2D_t ::abscissa_type > > collection_type
Definition: JCollection.hh:85
JLANG::JException
General exception.
Definition: JException.hh:23
JLANG::is_identical
bool is_identical(JFirst_t &first, JSecond_t &second)
Check if two objects are indentical.
Definition: JLangToolkit.hh:46
JPHYSICS::JDispersionInterface::getDispersionPhase
virtual double getDispersionPhase(const double lambda) const =0
Dispersion of light for phase velocity.
JPHYSICS::geanz
static const JGeanz geanz(1.85, 0.62, 0.54)
Function object for longitudinal EM-shower profile.
JPHYSICS::SCATTERED_LIGHT_FROM_MUON
scattered light from muon
Definition: JPDFTypes.hh:30