91     JParser<> zap(
"Program to histogram event-by-event data of shower light for making PDFs.");
 
  101     if (zap.read(argc, argv) != 0)
 
  104   catch(
const exception &error) {
 
  105     FATAL(error.what() << endl);
 
  111     sort(particles.begin(), particles.end());
 
  112     string prefix_t = 
"";
 
  114       prefix_t += 
to_string((
long long int)*ptype) + 
"_";
 
  116     prefix_t.erase(prefix_t.size() - 1);
 
  117     string::size_type pos_1 = 
outputFile.find(
'%');
 
  130   NOTICE(
"Apply detector offset " << center << endl);
 
  142   const double ng[] = { dispersion.getIndexOfRefractionGroup(wmax),
 
  143                         dispersion.getIndexOfRefractionGroup(wmin) };
 
  156   JMultiHistogram_t h0;   
 
  157   JMultiHistogram_t h1;   
 
  165   for (JQuadrature::const_iterator i = qeant.begin(); i != qeant.end(); ++i) {
 
  174   const double E_b[] = {0.01, 0.2, 0.4, 0.6, 0.8, 1.0, 1.5, 2.0, 3.0, 4.0, 5.0, 6.0, 8.0, 10.0, 12.0, 14.0, 16.0, 18.0, 20.0, 25.0, 30.0, 40.0, 55.0, 70.0, 85.0, 100.0};
 
  176   const double R[]   = {0.0, 1.0, 2.5, 5.0, 7.5, 10.0, 12.5, 15.0, 17.5, 20.0, 25.0, 30.0, 35.0, 40.0, 50.0, 65.0, 80.0};
 
  177   const double Dmax_m = 
R[
sizeof(
R)/
sizeof(
R[0]) - 1]; 
 
  179   for (
int iE = 0; iE != 
sizeof(E_b)/
sizeof(E_b[0]); ++iE) {
 
  181     const double E_m = E_b[iE];
 
  183     for (
int i = 0; i != 
sizeof(
R)/
sizeof(
R[0]); ++i) {
 
  185       const double R_m = 
R[i];
 
  189         const double cd = *
c;
 
  191         const double grid  = 10.0 +  0.0 * R_m/100.0;                    
 
  192         const double alpha = 2.0 * sqrt(1.0 - cos(grid * 
PI / 180.0));   
 
  194         const int    number_of_theta_points = (max(2, (
int) (180.0/(1.4 * grid))));
 
  195         const double theta_step             = 
PI / (number_of_theta_points + 1);
 
  197         for (
double theta = -0.5*theta_step; theta < 
PI + theta_step; theta += theta_step) {      
 
  198           const int    number_of_phi_points = (max(2, (
int) (
PI * sin(theta) / alpha)));
 
  199           const double phi_step             = 
PI / (number_of_phi_points + 1);
 
  201           for (
double phi = -0.5*phi_step; phi < 
PI + phi_step; phi += phi_step) {
 
  203             for (JMultiHistogram_t* p : { &h0, &h1 }) {
 
  204               (*p)[E_m][R_m][cd][theta][phi];
 
  212   double buffer[] = {-15.0,-10.0,-7.5,-5,-4,-3,-2,-1.5,-1.0,-0.5,-0.1, 0.0,0.1, 0.5, 1.0, 1.5, 2.0, 3.0, 4.0, 5.0, 7.5, 10.0, 15.0, 20.0, 30.0, 40.0, 50.0, 60.0, 70.0, 85.0, 100.0 };
 
  213   for (JMultiHistogram_t::super_iterator
 
  214          i1 = h1.super_begin(); i1 != h1.super_end(); ++i1) {
 
  215     for (
int j = 0; 
j != 
sizeof(buffer)/
sizeof(buffer[0]); ++
j) {
 
  216       i1.getValue()[buffer[
j]];
 
  221   long long int h0_fillcount = 0;
 
  222   long long int h1_fillcount = 0;
 
  224   while (inputFile.hasNext()) {
 
  229     const Evt* 
event = inputFile.next();
 
  239         hit_remap.push_back(i->id);
 
  241     } 
else if(fix_bug == 1){
 
  243     } 
else if(fix_bug == 2){
 
  244       bool skipevent = 
false;
 
  250         hit_remap.push_back(i->id);
 
  252       if(skipevent) 
continue;
 
  256     double t0 = (*mc_tracks)[1].t;
 
  262         if(hit->origin >= (
int)(*mc_tracks).size()){
 
  263           std::out_of_range err(
"Hit origin not in tracklist. Avoided segfault");
 
  267         Int_t corr_origin  = hit_remap[hit->origin];
 
  268         Trk curr_track     = (*mc_tracks)[corr_origin]; 
 
  271         JAxis3D axis = pmtRouter.getPMT(hit->pmt_id);           
 
  274         const double E     = curr_track.
E;
 
  277         const double cd    = axis.
getZ()/D_m;
 
  278         const double theta = axis.
getTheta();
 
  279         const double phi   = fabs(axis.
getPhi());
 
  280         const double dt    = 
getTime(*hit) - t1;
 
  281         const double npe   = 
getNPE (*hit);
 
  284           h1.fill(E, D_m, cd, theta, phi, dt, npe);
 
  288       catch(
const exception& error) {
 
  289         std::cout << 
"Fatal error for event: " << inputFile.getCounter() << std::endl;
 
  290         FATAL(error.what() << endl);
 
  297       if(find(particles.begin(), particles.end(), tr->type) == particles.end()){
 
  307       for (JDetector::const_iterator module = 
detector.begin(); module != 
detector.end(); ++module) {
 
  317           for (JModule::const_iterator pmt = module->begin(); pmt != module->end(); ++pmt) {
 
  329     if(h1_fillcount > h0_fillcount){
 
  330       std::cout << 
"WARNING: recorded hits in normalization histogram that were not recorded in normalization histogram. This should not happen." << std::endl;
 
  331       std::cout << 
"h1_fillcount: " << h1_fillcount << 
", h0_fillcount: " << h0_fillcount << std::endl;
 
  336   for (JMultiHistogram_t::super_iterator i = h0.super_begin(); i != h0.super_end(); ++i) {
 
  337     integral+=i.getValue().getIntegral();
 
  339   DEBUG(
"Integral:\t" << integral << endl);
 
  347   for (
const JMultiHistogram_t* p : { &h0, &h1 }) {
 
  352   NOTICE(
"JHistHDE done. " << endl);
 
Router for direct addressing of PMT data in detector data structure. 
 
Utility class to parse command line options. 
 
Data structure for direction in three dimensions. 
 
double getIndexOfRefraction()
Get average index of refraction of water corresponding to group velocity. 
 
Implementation of dispersion for water in deep sea. 
 
double getMinimalWavelength()
Get minimal wavelength for PDF evaluations. 
 
double getTime(const Hit &hit)
Get true time of hit. 
 
double getPhi() const 
Get phi angle. 
 
double E
Energy [GeV] (either MC truth or reconstructed) 
 
void transform(const JAxis3D &axis)
Transform axis to reference frame of given axis. 
 
Head getHeader(const JMultipleFileScanner_t &file_list)
Get Monte Carlo header. 
 
static const double C
Physics constants. 
 
std::vector< Int_t > getHitRemapping(const std::vector< Trk > *tracklist)
 
JVector3D & sub(const JVector3D &vector)
Subtract vector. 
 
double getMaximalWavelength()
Get maximal wavelength for PDF evaluations. 
 
JDirection3D getDirection(const Vec &dir)
Get direction. 
 
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object 
 
double getTheta() const 
Get theta angle. 
 
JPosition3D getPosition(const Vec &pos)
Get position. 
 
double getAmbientPressure()
Get ambient pressure. 
 
static const double PI
Mathematical constants. 
 
double getLength() const 
Get length. 
 
then usage $script[distance] fi case set_variable R
 
Probability density function of photon emission from EM-shower as a function of cosine of the emissio...
 
void load(const std::string &file_name, JDetector &detector)
Load detector from input file. 
 
General purpose class for object reading from a list of file names. 
 
const double getInverseSpeedOfLight()
Get inverse speed of light. 
 
std::string to_string(const T &value)
Convert value to string. 
 
double getNPE(const Hit &hit)
Get true charge of hit. 
 
Data structure for position in three dimensions. 
 
$WORKDIR ev_configure_domsimulator txt echo process $DOM_SIMULATOR $i $SOURCE_HOST[$index] csh c(setenv ROOTSYS $ROOTSYS &&source $JPP_DIR/setenv.csh $JPP_DIR &&($DOM_SIMULATOR\-u\$NAME\$\-H\$SERVER\$\-M\$LOGGER\$\-d $DEBUG</dev/null > &/dev/null &))'
 
Function object for the probability density function of photon emission from EM-shower as a function ...
 
do set_variable DETECTOR_TXT $WORKDIR detector
 
The Trk class represents a Monte Carlo (MC) particle as well as a reconstructed track/shower. 
 
JPosition3D & rotate(const JRotation3D &R)
Rotate. 
 
Binary buffered file output. 
 
double getZ() const 
Get z position. 
 
The Evt class respresent a Monte Carlo (MC) event as well as an offline event. 
 
#define DEBUG(A)
Message macros. 
 
double getAngularAcceptance(const double x)
Angular acceptence of PMT.