50{
   53 
   55 
   58  double        epsilon;
   59  double        E;
   60  double        R;
   61  double        z;
   66 
   67  try { 
   68 
   70 
   72  
   73    JParser<> zap(
"Auxiliary program to draw PDF of Cherenkov light from muon.");
 
   74 
   78    zap[
'e'] = 
make_field(epsilon,                
"precision for integration")  = 1.0e-10;
 
   81    zap[
'E'] = 
make_field(E,                      
"muon energy at vertex [GeV]")= 1.0;
 
   82    zap[
'R'] = 
make_field(R,                      
"distance of approach [m]");
 
   83    zap[
'z'] = 
make_field(z,                      
"PMT z-position [m]");
 
   84    zap[
'D'] = 
make_field(dir,                    
"(theta, phi) of PMT [rad]");
 
   88 
   89    zap(argc, argv);
   90  }
   91  catch(const exception &error) {
   92    FATAL(error.what() << endl);
 
   93  }
   94  
   95 
   97    pdf(NAMESPACE::getPhotocathodeArea(),
   98        NAMESPACE::getQE,
   99        NAMESPACE::getAngularAcceptance,
  102        NAMESPACE::getScatteringProbability,
  103        NAMESPACE::getAmbientPressure(),
  107        epsilon);
  108 
  109  const double z_emission = z - R/getTanThetaC(); 
  110  const double E_emission  = gWater.getE(E, z_emission ); 
  111 
  113 
  114    for (double dt; cin >> dt; ) {
  115 
  116      for (vector<int>::const_iterator F = function.begin(); F != function.end(); ++F) {
  117 
  118        cout << setw(2)         << *F             << ' '
  120             << 
FIXED(5,1)      << R              << 
' ' 
  121             << 
FIXED(5,1)      << z              << 
' ' 
  124             << 
FIXED(5,1)      << dt             << 
' ' 
  125             << 
SCIENTIFIC(9,3) << pdf.getLightFromMuon(*F, E_emission, R, dir.
getTheta(), dir.
getPhi(), dt) * E_emission << endl;
 
  126      }
  127    }
  128 
  129    return 0;
  130  }
  131  
  132 
  134 
  135  const double t0   =  0.0;                                   
  136 
  138 
  139    if (function.size() == 1 && function[0] == DIRECT_LIGHT_FROM_MUON) {
  140 
  142 
  144 
  145    } else {
  146 
  148 
  150    }
  151  }
  152 
  154 
  156      
  157  if ( E_emission >= MASS_MUON* (1/SIN_THETA_C_WATER ) ) { 
  158 
  159    if (z_emission >= 0 && z_emission <= gWater(E)) { 
  160      for (int i = 1; i <= h0.GetNbinsX(); ++i) {
  161 
  162        const double dt = h0.GetBinCenter(i) - t0;
  163 
  164        double value = 0.0;
  165 
  166        for (vector<int>::const_iterator F = function.begin(); F != function.end(); ++F) {
  167          value += pdf.getLightFromMuon(*F, E_emission, R, dir.
getTheta(), dir.
getPhi(), dt);
 
  168        }
  169 
  170        h0.SetBinContent(i, value);
  171 
  172        f1[dt] = value;
  173      }
  174    }
  175  }
  176 
  178  f1.compile();
  179 
  180  try {
  181 
  182    const double T_ns = 5;  
  183 
  185 
  186    const double t1 = quantiles.getX();
  187    const double y  = f1(t1 + T_ns).v - f1(t1 - T_ns).v;
 
  188 
  189    DEBUG(
"E     "     << E                       << endl);
 
  190    DEBUG(
"E_emission" << E_emission              << endl);
 
  191    DEBUG(
"R     "     << R                       << endl);
 
  192    DEBUG(
"z     "     << z                       << endl);
 
  195    DEBUG(
"int   "     << quantiles.getIntegral() << endl);
 
  196    DEBUG(
"t1    "     << t1                      << endl);
 
  197    DEBUG(
"max   "     << quantiles.getY()        << endl);
 
  198    DEBUG(
"FWHM  "     << quantiles.getFWHM()     << endl);
 
  199    DEBUG(
"int[] "     << y                       << endl);
 
  200  }
  201  catch(const exception&) {}
  202 
  203  out.Write();
  204  out.Close();
  205}
double getAbsorptionLength(const double lambda)
 
double getScatteringLength(const double lambda)
 
#define DEBUG(A)
Message macros.
 
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
 
#define gmake_property(A)
macros to convert (template) parameter to JPropertiesElement object
 
Utility class to parse parameter values.
 
Data structure for angles in three dimensions.
 
double getTheta() const
Get theta angle.
 
double getPhi() const
Get phi angle.
 
Utility class to parse command line options.
 
Probability Density Functions of the time response of a PMT with an implementation of the JAbstractPM...
 
static const JZero zero
Function object to assign zero value.
 
static double MODULE_RADIUS_M
Radius of optical module [m].
 
double getMinimalWavelength()
Get minimal wavelength for PDF evaluations.
 
double getMaximalWavelength()
Get maximal wavelength for PDF evaluations.
 
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
 
Auxiliary data structure for floating point format specification.
 
Empty structure for specification of parser element that is initialised (i.e. does not require input)...
 
Auxiliary data structure for floating point format specification.