Auxiliary program to determine PDF of L1 hit. 
   35{
   38 
   40 
   41  string         inputFile;
   43  double         E;
   44  double         R;
   45  double         R_Hz;
   47  double         T_ns;
   50 
   51  try { 
   52 
   53    JParser<> zap(
"Auxiliary program to determine PDF of L1 hit.");
 
   54 
   57    zap[
'E'] = 
make_field(E,         
"muon energy [GeV]")          = 1.0;
 
   58    zap[
'R'] = 
make_field(R,         
"distance of approach [m]");
 
   59    zap[
'D'] = 
make_field(dir,       
"(theta, phi) of PMT [rad]");
 
   60    zap[
'T'] = 
make_field(T_ns,      
"time window [ns]")           = 10.0;          
 
   61    zap[
'B'] = 
make_field(R_Hz,      
"background rate [Hz]")       =  0.0;
 
   64 
   65    zap(argc, argv);
   66  }
   67  catch(const exception &error) {
   68    FATAL(error.what() << endl);
 
   69  }
   70 
   76 
   77  JFunction1D_t::JSupervisor supervisor(new JFunction1D_t::JDefaultResult(zero));
   78 
   79  const JPDFType_t pdf_t[] = { DIRECT_LIGHT_FROM_MUON,
 
   80                               SCATTERED_LIGHT_FROM_MUON,
   81                               DIRECT_LIGHT_FROM_DELTARAYS,
   82                               SCATTERED_LIGHT_FROM_DELTARAYS,
   83                               DIRECT_LIGHT_FROM_EMSHOWERS,
   84                               SCATTERED_LIGHT_FROM_EMSHOWERS };
   85 
   86  const int  N = sizeof(pdf_t) / sizeof(pdf_t[0]);
   87 
   88  JPDF_t pdf[N];
   89 
   90  for (int i = 0; i != N; ++i) {
   91 
   92    try {
   93 
   94      const string file_name = getFilename(inputFile, pdf_t[i]);
   95 
   96      NOTICE(
"loading input from file " << file_name << 
"... " << flush);
 
   97 
   98      pdf[i].load(file_name.c_str());
   99 
  101    }
  104    }
  105 
  106    pdf[i].setExceptionHandler(supervisor);
  107  }
  108 
  110 
  112 
  114  }
  115  
  116 
  117  JModule module = getModule<JKM3NeT_t>(1);
 
  118 
  119  module.rotate(JRotation3D(dir));
  120 
  121 
  123 
  125 
  127 
  129 
  130    const double t2 = t1 + T_ns;
  131 
  132    JFunction1D_t::result_type y1;
  133    JFunction1D_t::result_type y2;
  134 
  135    for (int i = 0; i != N; ++i) {
  136 
  137      JFunction1D_t::result_type 
p1;
 
  138      JFunction1D_t::result_type p2;
  139 
  140      
  141 
  142      for (const auto& pmt : module) {
  143        p1 += pdf[i](R, pmt.getTheta(), pmt.getPhi(), t1);
 
  144        p2 += pdf[i](R, pmt.getTheta(), pmt.getPhi(), t2);
  145      }
  146 
  152        p2 *= E;
  153      }
  154 
  156      y2 += p2;
  157    }
  158 
  159    
  160 
  161    y1.f += R_Hz * 1e-9;                                         
  164 
  165    zsp[t1] = y1.f * (1.0 - exp(y1.v - y2.v));                    
  166  } 
  167 
  168  zsp.compile();
  169 
  170  for (int ix = 1; ix <= h0.GetNbinsX(); ++ix) {
  171 
  172    const double t1 = h0.GetBinCenter(ix);
  173 
  174    try {
  175 
  176      const JFunction1D_t::result_type 
result = zsp(t1);
 
  177 
  179 
  180      h0.SetBinContent(ix, W);
  181    }
  182    catch(const exception&) {}
  183  }
  184  
  185  out.Write();
  186  out.Close();
  187}
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
 
Data structure for a composite optical module.
 
Data structure for angles in three dimensions.
 
virtual const char * what() const override
Get error message.
 
Utility class to parse command line options.
 
Multi-dimensional PDF table for arrival time of Cherenkov light.
 
double getDeltaRaysFromMuon(const double E, const JRange< double > T_GeV=JRange< double >(DELTARAY_TMIN, DELTARAY_TMAX))
Equivalent EM-shower energy due to delta-rays per unit muon track length.
 
bool is_deltarays(const int pdf)
Test if given PDF type corresponds to Cherenkov light from delta-rays.
 
bool is_bremsstrahlung(const int pdf)
Test if given PDF type corresponds to Cherenkov light from Bremsstrahlung.
 
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).