39 int main(
int argc, 
char **argv)
 
   44   typedef JAbstractHistogram<Double_t> JHistogram_t;
 
   58     JParser<> zap(
"Program to plot PDF of Cherenkov light from EM-shower using interpolation tables.");
 
   63     zap[
'D'] = 
make_field(dir,       
"(theta, phi) of PMT [rad]");
 
   64     zap[
'x'] = 
make_field(x,         
"histogram x-binning")        = JHistogram_t();
 
   65     zap[
'y'] = 
make_field(y,         
"histogram y-binning")        = JHistogram_t();
 
   66     zap[
'E'] = 
make_field(E,         
"Energy [GeV]")               = 1.0;
 
   72   catch(
const exception &error) {
 
   73     FATAL(error.what() << endl);
 
   77   const double theta = dir.first;
 
   78   const double phi   = dir.second;
 
   80   typedef JSplineFunction1S_t                                     JFunction1D_t;
 
   82     JMapList<JPolint1FunctionalMap,
 
   83     JMapList<JPolint1FunctionalMap,
 
   84     JMapList<JPolint1FunctionalGridMap,
 
   85     JMapList<JPolint1FunctionalGridMap> > > >                     JMapList_t;
 
   86   typedef JPDFTable<JFunction1D_t,  JMapList_t>                   JPDF_t;
 
   87   typedef JNPETable<double, double, JMapList_t>                   JNPE_t;
 
   88   typedef JCDFTable<JFunction1D_t,  JMapList_t>                   JCDF_t;
 
   90   JDistance<double>::precision = 1.0e-10;
 
   98     NOTICE(
"loading input from file " << pdfFile << 
"... " << flush);
 
  100     pdf.load(pdfFile.c_str());
 
  102     pdf.setExceptionHandler(
new JFunction1D_t::JDefaultResult(
JMATH::zero));
 
  108     NOTICE(
"loading input from file " << cdfFile << 
"... " << flush);
 
  110     cdf.load(cdfFile.c_str());
 
  114   catch(
const JException& error) {
 
  115     FATAL(error.what() << endl);
 
  118   if (!x.is_valid()) { x = JHistogram_t(250,  0.0, 250.0); }
 
  119   if (!y.is_valid()) { y = JHistogram_t(200, -1.0,  +1.0); }
 
  121   TH2D h0(
"pdf", NULL, x.getNumberOfBins(), x.getLowerLimit(), x.getUpperLimit(), y.getNumberOfBins(), y.getLowerLimit(), y.getUpperLimit());
 
  122   TH2D h1(
"npe", NULL, x.getNumberOfBins(), x.getLowerLimit(), x.getUpperLimit(), y.getNumberOfBins(), y.getLowerLimit(), y.getUpperLimit());
 
  123   TH2D h2(
"cdf", NULL, x.getNumberOfBins(), x.getLowerLimit(), x.getUpperLimit(), y.getNumberOfBins(), y.getLowerLimit(), y.getUpperLimit());
 
  125   for (
int i = 1; i <= h0.GetNbinsX(); ++i) {
 
  126     for (
int j = 1; 
j <= h0.GetNbinsY(); ++
j) {
 
  128       const double D  = h0.GetXaxis()->GetBinCenter(i);
 
  129       const double cd = h0.GetYaxis()->GetBinCenter(
j);
 
  133         const double y0 = 
get_integral(pdf(D, cd, theta, phi, 1.0e3));
 
  134         const double y1 = npe             (D, cd, theta, phi);
 
  135         const double y2 = cdf.getNPE      (D, cd, theta, phi);
 
  138               << 
FIXED(5,1)       << D  << 
' '  
  139               << 
FIXED(5,1)       << cd << 
' ' 
  144         h0.SetBinContent(i, 
j, E * y0);
 
  145         h1.SetBinContent(i, 
j, E * y1);
 
  146         h2.SetBinContent(i, 
j, E * y2);
 
  148       catch(
const exception& error) {
 
  158     out << h0 << h1 << h2;