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();
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;
Utility class to parse command line options.
do echo Generating $dir eval D
int main(int argc, char *argv[])
then for HISTOGRAM in h0 h1
static const JZero zero
Function object to assign zero value.
Auxiliary data structure for floating point format specification.
Various implementations of functional maps.
Numbering scheme for PDF types.
I/O formatting auxiliaries.
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
General purpose messaging.
then for FUNCTION in pdf npe cdf
std::istream & operator>>(std::istream &in, JAANET::JHead &header)
Read header from input.
Utility class to parse command line options.
std::pair< double, double > orientation
then fatal Wrong number of arguments fi set_variable DETECTOR $argv[1] set_variable INPUT_FILE $argv[2] eval JPrintDetector a $DETECTOR O IDENTIFIER eval JPrintDetector a $DETECTOR O SUMMARY source JAcoustics sh $DETECTOR_ID typeset A TRIPODS get_tripods $WORKDIR tripod txt TRIPODS for EMITTER in
Auxiliary data structure for floating point format specification.
then usage $script[input file[working directory[option]]] nWhere option can be E
#define DEBUG(A)
Message macros.