109   JLimit_t&   numberOfEvents = inputFile.getLimit();
 
  116     JParser<> zap(
"Program to histogram event-by-event data of muon light for making PDFs.");
 
  120     zap[
'n'] = 
make_field(numberOfEvents)      = JLimit::max();
 
  126   catch(
const exception &error) {
 
  127     FATAL(error.what() << endl);
 
  145   NOTICE(
"Apply detector offset " << offset << endl);
 
  167   JMultiHistogram_t h0;   
 
  168   JMultiHistogram_t h1;   
 
  169   JMultiHistogram_t h2;   
 
  171   const double cmin = dispersion.getKmin (wmax);
 
  179   const double R[] = { 0.0, 5.0, 10.0, 20.0, 30.0, 40.0, 50.0, 70.0, 80.0, 90.0, 100.0, 170.0, 250.0 };
 
  181   for (
int i = 0; i != 
sizeof(R)/
sizeof(R[0]); ++i) {
 
  183     const double R_m = R[i];
 
  185     const double grid  = 10.0 +  0.0 * R_m/100.0;                         
 
  186     const double alpha = 2.0 * sqrt(1.0 - cos(grid * 
PI / 180.0));        
 
  188     const int    number_of_theta_points = max(2, (
int) (180.0/(1.4 * grid)));
 
  189     const double theta_step             = 
PI / (number_of_theta_points + 1);
 
  191     for (
double theta = -0.5*theta_step; theta < 
PI + theta_step; theta += theta_step) {
 
  193       const int    number_of_phi_points = max(2, (
int) (
PI * sin(theta) / alpha));
 
  194       const double phi_step             = 
PI / (number_of_phi_points + 1);
 
  196       for (
double phi = -0.5*phi_step; phi < 
PI + phi_step; phi += phi_step) {
 
  198         for (JMultiHistogram_t* p : { &h0, &h1, &h2 }) {
 
  199           (*p)[R_m][theta][phi];
 
  205   for (JMultiHistogram_t::super_iterator 
 
  206          i1 = h1.super_begin(),
 
  207          i2 = h2.super_begin(); i1 != h1.super_end(); ++i1, ++i2) {
 
  209     for (
double x : { 0.0, 1.0, 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, 125.0, 150.0, 200.0, 500.0} ) {
 
  220     const Evt* 
event = inputFile.
next();
 
  243             JAxis3D axis = pmtRouter.getPMT(hit->pmt_id);
 
  249             const double R_m   = axis.
getX();
 
  250             const double theta = axis.
getTheta();
 
  251             const double phi   = fabs(axis.
getPhi());
 
  252             const double dt    = 
getTime(*hit) - t1;
 
  253             const double npe   = 
getNPE (*hit);
 
  255             const int    ID    = (KM3Sim ? classify_km3sim(*track, *hit) : classify(*track, *hit));
 
  260               h1.fill(R_m, theta, phi, dt, npe);                  
 
  264               h2.fill(R_m, theta, phi, dt, npe / max(1.0, Evis)); 
 
  268           catch(
const exception& error) {
 
  269             FATAL(error.what() << endl);
 
  274         for (JDetector::const_iterator module = 
detector.begin(); module != 
detector.end(); ++module) {
 
  284             for (JModule::const_iterator pmt = module->begin(); pmt != module->end(); ++pmt) {
 
  306   for (
const JMultiHistogram_t* p : { &h0, &h1, &h2 }) {
 
double getAngularAcceptance(const double x)
Angular acceptence of PMT.
 
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
 
Router for direct addressing of PMT data in detector data structure.
 
void transform(const JAxis3D &axis)
Transform axis to reference frame of given axis.
 
Data structure for position in three dimensions.
 
JPosition3D & rotate(const JRotation3D &R)
Rotate.
 
const JPosition3D & getPosition() const
Get position.
 
double getY() const
Get y position.
 
double getZ() const
Get z position.
 
JVector3D & sub(const JVector3D &vector)
Subtract vector.
 
double getX() const
Get x position.
 
double getTheta() const
Get theta angle.
 
double getPhi() const
Get phi angle.
 
double getT(const JVector3D &pos) const
Get arrival time of Cherenkov light at given position.
 
Binary buffered file output.
 
Utility class to parse command line options.
 
Implementation of dispersion for water in deep sea.
 
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.
 
bool is_km3sim(const JHead &header)
Check for detector simulation.
 
JVertex3D getVertex(const Trk &track)
Get vertex.
 
double getTime(const Hit &hit)
Get true time of hit.
 
JPosition3D getPosition(const Vec &pos)
Get position.
 
bool is_muon(const Trk &track)
Test whether given track is a (anti-)muon.
 
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.
 
static const double PI
Mathematical constants.
 
static const JGeaneWater gWater
Function object for energy loss of muon in sea water.
 
double getTanThetaC()
Get average tangent of Cherenkov angle of water corresponding to group velocity.
 
const double getSpeedOfLight()
Get speed of light.
 
double getMaximalWavelength()
Get maximal wavelength for PDF evaluations.
 
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
 
double getVisibleEnergy(const Trk &track, const JCylinder3D &can=getMaximumContainmentVolume())
Get the visible energy of a track.
 
Vec getVisibleEnergyVector(const Trk &track, const JCylinder3D &can=getMaximumContainmentVolume())
Get the visible energy vector of a track.
 
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 cylinder used for photon tracking.
 
Auxiliary class for defining the range of iterations of objects.
 
The Vec class is a straightforward 3-d vector, which also works in pyroot.