70     hit_remapping.push_back(i->id);
 
   76 int main(
int argc, 
char **argv)
 
   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(
'%');
 
  132   NOTICE(
"Apply detector offset " << offset << endl);
 
  158   JMultiHistogram_t h0;   
 
  159   JMultiHistogram_t h1;   
 
  167   for (JQuadrature::const_iterator i = qeant.begin(); i != qeant.end(); ++i) {
 
  176   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};
 
  178   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};
 
  179   const double Dmax_m = R[
sizeof(R)/
sizeof(R[0]) - 1]; 
 
  181   for (
int iE = 0; iE != 
sizeof(E_b)/
sizeof(E_b[0]); ++iE) {
 
  183     const double E_m = E_b[iE];
 
  185     for (
int i = 0; i != 
sizeof(R)/
sizeof(R[0]); ++i) {
 
  187       const double R_m = R[i];
 
  191         const double cd = *c;
 
  193         const double grid  = 10.0 +  0.0 * R_m/100.0;                    
 
  194         const double alpha = 2.0 * sqrt(1.0 - cos(grid * 
PI / 180.0));   
 
  196         const int    number_of_theta_points = (max(2, (
int) (180.0/(1.4 * grid))));
 
  197         const double theta_step             = 
PI / (number_of_theta_points + 1);
 
  199         for (
double theta = -0.5*theta_step; theta < 
PI + theta_step; theta += theta_step) {      
 
  200           const int    number_of_phi_points = (max(2, (
int) (
PI * sin(theta) / alpha)));
 
  201           const double phi_step             = 
PI / (number_of_phi_points + 1);
 
  203           for (
double phi = -0.5*phi_step; phi < 
PI + phi_step; phi += phi_step) {
 
  205             for (JMultiHistogram_t* p : { &h0, &h1 }) {
 
  206               (*p)[E_m][R_m][cd][theta][phi];
 
  214   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 };
 
  215   for (JMultiHistogram_t::super_iterator
 
  216          i1 = h1.super_begin(); i1 != h1.super_end(); ++i1) {
 
  217     for (
int j = 0; 
j != 
sizeof(buffer)/
sizeof(buffer[0]); ++
j) {
 
  218       i1.getValue()[buffer[
j]];
 
  223   long long int h0_fillcount = 0;
 
  224   long long int h1_fillcount = 0;
 
  231     const Evt* 
event = inputFile.
next();
 
  241         hit_remap.push_back(i->id);
 
  243     } 
else if(fix_bug == 1){
 
  245     } 
else if(fix_bug == 2){
 
  246       bool skipevent = 
false;
 
  252         hit_remap.push_back(i->id);
 
  254       if(skipevent) 
continue;
 
  258     double t0 = (*mc_tracks)[1].t;
 
  264         if(hit->origin >= (
int)(*mc_tracks).size()){
 
  265           std::out_of_range err(
"Hit origin not in tracklist. Avoided segfault");
 
  269         Int_t corr_origin  = hit_remap[hit->origin];
 
  270         Trk curr_track     = (*mc_tracks)[corr_origin]; 
 
  276         const double E     = curr_track.
E;
 
  279         const double cd    = axis.
getZ()/D_m;
 
  280         const double theta = axis.
getTheta();
 
  281         const double phi   = fabs(axis.
getPhi());
 
  282         const double dt    = 
getTime(*hit) - t1;
 
  283         const double npe   = 
getNPE (*hit);
 
  286           h1.fill(E, D_m, cd, theta, phi, dt, npe);
 
  290       catch(
const exception& error) {
 
  291         std::cout << 
"Fatal error for event: " << inputFile.
getCounter() << std::endl;
 
  292         FATAL(error.what() << endl);
 
  299       if(find(particles.begin(), particles.end(), tr->type) == particles.end()){
 
  309       for (JDetector::const_iterator module = 
detector.begin(); module != 
detector.end(); ++module) {
 
  319           for (JModule::const_iterator pmt = module->begin(); pmt != module->end(); ++pmt) {
 
  331     if(h1_fillcount > h0_fillcount){
 
  332       std::cout << 
"WARNING: recorded hits in normalization histogram that were not recorded in normalization histogram. This should not happen." << std::endl;
 
  333       std::cout << 
"h1_fillcount: " << h1_fillcount << 
", h0_fillcount: " << h0_fillcount << std::endl;
 
  338   for (JMultiHistogram_t::super_iterator i = h0.super_begin(); i != h0.super_end(); ++i) {
 
  339     integral+=i.getValue().getIntegral();
 
  341   DEBUG(
"Integral:\t" << integral << endl);
 
  349   for (
const JMultiHistogram_t* p : { &h0, &h1 }) {
 
  354   NOTICE(
"JHistHDE done. " << endl);
 
Properties of Antares PMT and deep-sea water.
 
Data structure for detector geometry and calibration.
 
double getAngularAcceptance(const double x)
Angular acceptence of PMT.
 
Various implementations of functional maps.
 
std::vector< Int_t > getHitRemapping(const std::vector< Trk > *tracklist)
 
int main(int argc, char **argv)
 
General purpose messaging.
 
#define DEBUG(A)
Message macros.
 
Scanning of objects from multiple files according a format that follows from the extension of each fi...
 
Direct access to PMT in detector data structure.
 
Utility class to parse command line options.
 
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
 
Definition of particle types.
 
ROOT TTree parameter settings of various packages.
 
Properties of KM3NeT PMT and deep-sea water.
 
Router for direct addressing of PMT data in detector data structure.
 
const JPMT & getPMT(const JPMTAddress &address) const
Get PMT.
 
void transform(const JAxis3D &axis)
Transform axis to reference frame of given axis.
 
Data structure for direction in three dimensions.
 
Data structure for position in three dimensions.
 
JPosition3D & rotate(const JRotation3D &R)
Rotate.
 
const JPosition3D & getPosition() const
Get position.
 
double getLength() const
Get length.
 
double getZ() const
Get z position.
 
JVector3D & sub(const JVector3D &vector)
Subtract vector.
 
double getTheta() const
Get theta angle.
 
double getPhi() const
Get phi angle.
 
Binary buffered file output.
 
JWriter & store(const JSerialisable &object)
Write object.
 
Utility class to parse command line options.
 
int read(const int argc, const char *const argv[])
Parse the program's command line options.
 
virtual double getIndexOfRefractionGroup(const double lambda) const
Index of refraction for group velocity.
 
Implementation of dispersion for water in deep sea.
 
Function object for the probability density function of photon emission from EM-shower as a function ...
 
Probability density function of photon emission from EM-shower as a function of cosine of the emissio...
 
Template specialisation of JMultipleFileScanner for Monte Carlo header.
 
virtual bool hasNext() override
Check availability of next element.
 
counter_type getCounter() const
Get counter.
 
virtual const pointer_type & next() override
Get next element.
 
double getAmbientPressure()
Get ambient pressure.
 
JDirection3D getDirection(const Vec &dir)
Get direction.
 
double getTime(const Hit &hit)
Get true time of hit.
 
JPosition3D getPosition(const Vec &pos)
Get position.
 
double getNPE(const Hit &hit)
Get true charge of hit.
 
Vec getOffset(const JHead &header)
Get offset.
 
void load(const std::string &file_name, JDetector &detector)
Load detector from input file.
 
std::string to_string(const T &value)
Convert value to string.
 
static const double PI
Mathematical constants.
 
double getIndexOfRefraction()
Get average index of refraction of water corresponding to group velocity.
 
double getMinimalWavelength()
Get minimal wavelength for PDF evaluations.
 
const double getInverseSpeedOfLight()
Get inverse speed of light.
 
double getMaximalWavelength()
Get maximal wavelength for PDF evaluations.
 
static const double C
Physics constants.
 
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
 
Head getHeader(const JMultipleFileScanner_t &file_list)
Get Monte Carlo header.
 
The Evt class respresent a Monte Carlo (MC) event as well as an offline event.
 
The Trk class represents a Monte Carlo (MC) particle as well as a reconstructed track/shower.
 
double E
Energy [GeV] (either MC truth or reconstructed)
 
The Vec class is a straightforward 3-d vector, which also works in pyroot.