55 int main(
int argc,
char **argv)
69 JParser<> zap(
"Program to create interpolation tables of the PDF of the arrival time of the Cherenkov light from a shower.");
73 zap[
'e'] =
make_field(epsilon,
"precision for integration") = 1.0e-10;
87 catch(
const exception &error) {
88 FATAL(error.what() << endl);
93 typedef double (JPDF::*fcn)(
const double,
121 typedef JSplineFunction1D_t JFunction1D_t;
122 typedef JMAPLIST<JPolint1FunctionalMap,
123 JPolint1FunctionalMap,
124 JPolint1FunctionalGridMap,
125 JPolint1FunctionalGridMap>::maplist JMapList_t;
126 typedef JPDFTable<JFunction1D_t, JMapList_t> JPDF_t;
128 typedef JPDFTransformer<4, JFunction1D_t::argument_type> JFunction4DTransformer_t;
129 typedef JArray<4, JFunction1D_t::argument_type> JArray_t;
134 NOTICE(
"building multi-dimensional function object <" <<
function <<
">... " << flush);
136 const double ng[] = { pdf_c.getIndexOfRefractionGroup(wmax),
137 pdf_c.getIndexOfRefractionGroup(wmin) };
145 if (zmap.find(
function) == zmap.end()) {
146 FATAL(
"illegal function specifier" << endl);
149 fcn
f = zmap[
function].first;
150 JFunction4DTransformer_t transformer = zmap[
function].second;
182 JQuadrature qeant(-1.0, +1.0, 60,
geanx);
184 for (JQuadrature::const_iterator i = qeant.begin(); i != qeant.end(); ++i)
195 for (
double buffer[] = { 0.0, 0.005, 0.01, 0.015, -1 }, *x = buffer; *x >= 0; ++x) {
200 for (
double x = 0.02; x < 0.99; x += 0.01)
275 const double grid = 7.0;
277 const double alpha = 2.0 * sqrt(1.0 - cos(grid *
PI / 180.0));
282 const double D_m = *
d;
286 const double cd = *c;
288 const unsigned int number_of_theta_points = max(2
u, (
unsigned int) (180.0/(1.4 * grid)));
290 for (
double theta = 0.0; theta <=
PI + epsilon; theta +=
PI/number_of_theta_points) {
292 const unsigned int number_of_phi_points = max(2
u, (
unsigned int) (
PI * sin(theta) / alpha));
294 for (
double phi = 0.0; phi <=
PI + epsilon; phi +=
PI/number_of_phi_points) {
296 JFunction1D_t& f1 = pdf[D_m][cd][theta][phi];
298 const JArray_t array(D_m, cd, theta, phi);
300 double t_old = transformer.getXn(array, *X.begin());
305 const double t = transformer.getXn(array, *x);
306 const double y = (pdf_c.*
f)(D_m, cd, theta, phi, t);
311 WARNING(
"dt < 0 " << *x <<
' ' << D_m <<
' ' << t <<
' ' << y << endl);
335 pdf.transform(transformer);
348 catch(
const JException& error) {
349 FATAL(error.what() << endl);
Utility class to parse command line options.
do echo Generating $dir eval D
const double getPhotocathodeArea()
Photo-cathode area 10 inch PMT.
scattered light from muon
scattered light from EM shower
Optical properties of Antares deep-sea site.
double absorptionLengthFactor
Scaling of absorption and scattering length.
double getScatteringProbability(const double x)
Function to describe light scattering in water.
Empty structure for specification of parser element that is initialised (i.e. does not require input)...
double getMinimalWavelength()
Get minimal wavelength for PDF evaluations.
Various implementations of functional maps.
Optical properties of KM3NeT deep-sea site.
double getMaximalWavelength()
Get maximal wavelength for PDF evaluations.
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
double getQE(const double R, const double mu)
Get QE for given ratio of hit probabilities and expectation value of the number of photo-electrons...
then print_variable DETECTOR INPUT_FILE INTERMEDIATE_FILE check_input_file $DETECTOR $INPUT_FILE check_output_file $INTERMEDIATE_FILE $OUTPUT_FILE JMCEvt f $INPUT_FILE o $INTERMEDIATE_FILE d
double getAmbientPressure()
Get ambient pressure.
direct light from EM shower
General purpose messaging.
Empty structure for specification of parser element that is not initialised (i.e. does require input)...
Auxiliary classes for numerical integration.
double getAbsorptionLength(const double lambda)
Absoption length.
Utility class to parse command line options.
double getScatteringLength(const double lambda)
Scattering length.
static const JGeanx geanx(0.35,-5.40)
Function object for the number of photons from EM-shower as a function of emission angle...
double scatteringLengthFactor
double getAngularAcceptance(const double x)
Angular acceptence of PMT.
int main(int argc, char *argv[])