59  inline int classify(
const Trk& track, 
const Hit& hit)
 
   86  inline int classify_km3sim(
const Trk& track, 
const Hit& hit)
 
  109  JLimit_t&   numberOfEvents = inputFile.getLimit();
 
  116    JParser<> zap(
"Program to histogram event-by-event data of muon light for making PDFs.");
 
  126  catch(
const exception &error) {
 
  127    FATAL(error.what() << endl);
 
  145  NOTICE(
"Apply detector offset " << offset << endl);
 
  153  const double P_atm = NAMESPACE::getAmbientPressure();
 
  167  JMultiHistogram_t h0;   
 
  168  JMultiHistogram_t h1;   
 
  169  JMultiHistogram_t h2;   
 
  171  const double cmin = dispersion.
getKmin (wmax);
 
  173  h1.transformer.reset(
new JFunction3DTransformer_t(35.0, 2, cmin, 0.0,  NAMESPACE::getAngularAcceptance, 0.10));
 
  174  h2.transformer.reset(
new JFunction3DTransformer_t(35.0, 2, cmin, 0.0,  NAMESPACE::getAngularAcceptance, 0.10));
 
  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();
 
  222    for (vector<Trk>::const_iterator track = event->mc_trks.begin(); track != event->mc_trks.end(); ++track) {
 
  239        for (vector<Hit>::const_iterator hit = event->mc_hits.begin(); hit != event->mc_hits.end(); ++hit) {
 
  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) {
 
  290              if (Z(axis.
getZ() - axis.
getX()/getTanThetaC())) {
 
  306  for (
const JMultiHistogram_t* p : { &h0, &h1, &h2 }) {
 
 
Properties of Antares PMT and deep-sea water.
 
Data structure for detector geometry and calibration.
 
Various implementations of functional maps.
 
int main(int argc, char **argv)
 
General purpose messaging.
 
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
 
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 position in three dimensions.
 
JPosition3D & rotate(const JRotation3D &R)
Rotate.
 
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.
 
JWriter & store(const JSerialisable &object)
Write object.
 
Utility class to parse command line options.
 
double getKmin(const double lambda) const
Get smallest index of refraction for Bremsstrahlung light (i.e. point at which dt/dz = 0).
 
Implementation of dispersion for water in deep sea.
 
General purpose class for object reading from a list of file names.
 
virtual bool hasNext() override
Check availability of next element.
 
counter_type getCounter() const
Get counter.
 
virtual const pointer_type & next() override
Get next element.
 
JDirection3D getDirection(const Vec &dir)
Get direction.
 
bool is_km3sim(const JHead &header)
Check for detector simulation.
 
bool from_muon(const Hit &hit)
Test whether given hit was produced by a muon.
 
JVertex3D getVertex(const Trk &track)
Get vertex.
 
JPosition3D getPosition(const Vec &pos)
Get position.
 
bool is_muon(const Trk &track)
Test whether given track is a (anti-)muon.
 
@ HIT_TYPE_MUON_DIRECT
Direct light from muon.
 
@ HIT_TYPE_MUON_SCATTERED
Scattered light from muon.
 
@ HIT_TYPE_BREMSSTRAHLUNG_SCATTERED
Scattered light from Bremsstrahlung.
 
@ HIT_TYPE_BREMSSTRAHLUNG_DIRECT
Direct light from Bremsstrahlung.
 
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 JGeaneWater gWater
Function object for energy loss of muon in sea water.
 
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 &, const JCylinder3D &)
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.
 
const char * getTime()
Get current local time conform ISO-8601 standard.
 
The Evt class respresent a Monte Carlo (MC) event as well as an offline event.
 
int pmt_id
global PMT identifier as found in evt files
 
int origin
track id of the track that created this hit (mc only)
 
int type
particle type or parametrisation used for hit (mc only)
 
The cylinder used for photon tracking.
 
Auxiliary class for defining the range of iterations of objects.
 
static counter_type max()
Get maximum counter value.
 
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.