13 #include "TProfile2D.h" 
   97   template<
class function_type,         
 
  112       const string file_name = 
getFilename(file_descriptor, this->type);
 
  114       STATUS(
"loading input from file " << file_name << 
"... " << flush);
 
  117         function.load(file_name.c_str());
 
  129     function_type 
function;
 
  130     integral_type integral;
 
  134   typedef JCDFHelper<JCDF4D_t, JCDF1D_t>  JCDF_t;    
 
  135   typedef JCDFHelper<JCDF5D_t, JCDF2D_t>  JCDG_t;    
 
  144   inline JVersor3Z getRandomDirection(
const double t2)
 
  146     const double tv  = sqrt(gRandom->Exp(1.0) * t2);
 
  147     const double phi = gRandom->Uniform(-
PI, +
PI);
 
  195 int main(
int argc, 
char **argv)
 
  200   string         fileDescriptor;
 
  228     JParser<> zap(
"Main program to simulate detector response to muons and showers.");
 
  231     zap[
'F'] = 
make_field(fileDescriptor,    
"file name descriptor for CDF tables");
 
  236     zap[
's'] = 
make_field(writeEMShowers,    
"store generated EM showers in event");
 
  237     zap[
'k'] = 
make_field(keep,              
"keep position of tracks");
 
  238     zap[
'N'] = 
make_field(numberOfHits,      
"minimum number of hits to output event") = 1;
 
  239     zap[
'U'] = 
make_field(factor,            
"scaling factor applied to light yields") = 1.0;
 
  245   catch(
const exception &error) {
 
  246     FATAL(error.what() << endl);
 
  250   gRandom->SetSeed(seed);
 
  253   const JMeta meta(argc, argv);
 
  255   const double Zbed = 0.0;                             
 
  269   double maximal_road_width = 0.0;                     
 
  270   double maximal_distance   = 0.0;                     
 
  272   for (
size_t i = 0; i != CDF.size(); ++i) {
 
  274     DEBUG(
"Range CDF["<< CDF[i].type << 
"] " << CDF[i].
function.intensity.getXmax() << 
" m" << endl);
 
  276     maximal_road_width = max(maximal_road_width, CDF[i].
function.intensity.getXmax());
 
  279   for (
size_t i = 0; i != CDG.size(); ++i) {
 
  281     DEBUG(
"Range CDG["<< CDG[i].type << 
"] " << CDG[i].
function.intensity.getXmax() << 
" m" << endl);
 
  284       maximal_road_width = max(maximal_road_width, CDG[i].
function.intensity.getXmax());
 
  287     maximal_distance   = max(maximal_distance,   CDG[i].
function.intensity.getXmax());
 
  290   NOTICE(
"Maximal road width [m] " << maximal_road_width << endl);
 
  291   NOTICE(
"Maximal distance   [m] " << maximal_distance   << endl);
 
  294   if (detectorFile == 
"" || inputFile.empty()) {
 
  295     STATUS(
"Nothing to be done." << endl);
 
  303     STATUS(
"Load detector... " << flush);
 
  315   for (JDetector::iterator module = 
detector.begin(); module != 
detector.end(); ) {
 
  316     if (!module->empty())
 
  327     STATUS(
"Setting up radiation tables... " << flush);
 
  331     const JRadiation hydrogen ( 1.0,  1.0, 40, 0.01, 0.1, 0.1);
 
  332     const JRadiation oxygen   ( 8.0, 16.0, 40, 0.01, 0.1, 0.1);
 
  333     const JRadiation chlorine (17.0, 35.5, 40, 0.01, 0.1, 0.1);
 
  334     const JRadiation sodium   (11.0, 23.0, 40, 0.01, 0.1, 0.1);
 
  336     const JRadiation calcium  (20.0, 40.0, 40, 0.01, 0.1, 0.1);
 
  337     const JRadiation magnesium(12.0, 24.3, 40, 0.01, 0.1, 0.1);
 
  338     const JRadiation potassium(19.0, 39.0, 40, 0.01, 0.1, 0.1);
 
  339     const JRadiation sulphur  (16.0, 32.0, 40, 0.01, 0.1, 0.1);
 
  408     header = inputFile.getHeader();
 
  410     JHead buffer(header);
 
  412     center = get<Vec>(buffer);
 
  424     buffer.
detector.rbegin()->filename = detectorFile;
 
  441     center += 
Vec(circle.getX(), circle.getY(), 0.0);
 
  443     copy(buffer, header);
 
  450     NOTICE(
"Offset applied to true tracks is: " << center << endl);
 
  452     NOTICE(
"No offset applied to true tracks." << endl);
 
  458   if (cylinder.getZmin() < Zbed) {
 
  459     cylinder.setZmin(Zbed);
 
  462   NOTICE(
"Light generation volume: " << cylinder << endl);
 
  464   TH1D       job(
"job", NULL, 400,  0.5, 400.5);
 
  465   TProfile   cpu(
"cpu", NULL,  16,  0.0,   8.0);
 
  466   TProfile2D rms(
"rms", NULL,  16,  0.0,   8.0, 201, -0.5, 200.5);
 
  467   TProfile2D rad(
"rad", NULL,  16,  0.0,   8.0, 201, -0.5, 200.5);
 
  487     STATUS(
"event: " << setw(10) << 
in.getCounter() << 
'\r'); 
DEBUG(endl);
 
  491     Evt* evt = 
in.next(); 
 
  495         track->pos += center;
 
  501     event.mc_hits.clear();
 
  510       if (!track->is_finalstate()) {
 
  526         double Zmin = intersection.first;
 
  527         double Zmax = intersection.second;
 
  533         JVertex vertex(0.0, track->t, track->E);                        
 
  535         if (track->pos.z < Zbed) {                                      
 
  537           if (track->dir.z > 0.0)
 
  538             vertex.
step(
gRock, (Zbed - track->pos.z) / track->dir.z); 
 
  543         if (vertex.
getZ() < Zmin) {                                     
 
  553         const JDetectorSubset_t subdetector(
detector, 
getAxis(*track), maximal_road_width);
 
  555         if (subdetector.empty()) {
 
  565           const int N = radiation.size();
 
  570           for (
int i = 0; i != 
N; ++i) {
 
  571             ls += li[i] = radiation[i]->getInverseInteractionLength(vertex.
getE());
 
  576           for (
size_t i = 0; i != ionization.size(); ++i) {
 
  577             As += ionization[i]->getA(vertex.
getE());
 
  580           double step  = gRandom->Exp(1.0) / ls;                        
 
  592           rms.Fill(
log10(vertex.
getE()), (Double_t) 0, ts*ts);
 
  596           vertex.
step(As, min(step,range));                             
 
  604               double y  = gRandom->Uniform(ls);
 
  606               for (
int i = 0; i != 
N; ++i) {
 
  612                   Es = radiation[i]->getEnergyOfShower(vertex.
getE());  
 
  613                   ts = radiation[i]->getThetaRMS(vertex.
getE(), Es);    
 
  617                   rms.Fill(
log10(vertex.
getE()), (Double_t) radiation[i]->getID(), ts*ts);
 
  618                   rad.Fill(
log10(vertex.
getE()), (Double_t) radiation[i]->getID(), Es);
 
  626           vertex.
applyEloss(getRandomDirection(T2), Es);
 
  628           muon.push_back(vertex);
 
  637           muon.push_back(vertex);
 
  646         if (trk != event.
mc_trks.end()) {
 
  647           trk->len = (muon.rbegin()->getZ() < Zmax ? +1 : -1) * (muon.rbegin()->getZ() - muon.begin()->getZ());
 
  651         for (JDetector::const_iterator module = subdetector.begin(); module != subdetector.end(); ++module) {
 
  653           const double z0 = muon.begin()->getZ();
 
  654           const double t0 = muon.begin()->getT();
 
  655           const double Z  = module->getZ() - module->getX() / 
getTanThetaC();
 
  657           if (Z >= muon.begin()->getZ() && Z <= muon.rbegin()->getZ()) {
 
  660             const double    R   = hypot(module->getX() - pos.
getX(), 
 
  661                                         module->getY() - pos.
getY());
 
  663             for (
size_t i = 0; i != CDF.size(); ++i) {
 
  665               if (R < CDF[i].integral.getXmax()) {
 
  675                   const double NPE = CDF[i].integral.getNPE(R) * module->size() * factor * W;
 
  676                   const int    N   = gRandom->Poisson(NPE); 
 
  682                     for (JModule::const_iterator pmt = module->begin(); pmt != module->end(); ++pmt) {
 
  684                       const double R     = hypot(pmt->getX() - pos.
getX(), 
 
  685                                                  pmt->getY() - pos.
getY());
 
  686                       const double theta = pi.
constrain(pmt->getTheta());
 
  687                       const double phi   = pi.
constrain(fabs(pmt->getPhi()));
 
  689                       npe.push_back(CDF[i].
function.
getNPE(R, theta, phi) * factor * W);
 
  694                     for (JModule::const_iterator pmt = module->begin(); pmt != module->end(); ++pmt) {
 
  696                       const double R     = hypot(pmt->getX() - pos.
getX(), 
 
  697                                                  pmt->getY() - pos.
getY());
 
  698                       const double Z     = pmt->getZ() - z0;
 
  699                       const double theta = pi.
constrain(pmt->getTheta());
 
  700                       const double phi   = pi.
constrain(fabs(pmt->getPhi()));
 
  704                       job.Fill((
double) (100 + CDF[i].type), (
double) n0);
 
  708                         const double t1 = CDF[i].function.getTime(R, theta, phi, gRandom->Rndm());
 
  711                         mc_hits.push_back(
JHit_t(mc_hits.size() + 1,
 
  723                       job.Fill((
double) (300 + CDF[i].type));
 
  727                 catch(
const exception& error) {
 
  728                   job.Fill((
double) (200 + CDF[i].type));
 
  735         for (JTrack::const_iterator vertex = muon.begin(); vertex != muon.end(); ++vertex) {
 
  737           const double Es = vertex->
getEs();
 
  741             const double z0 = vertex->
getZ();
 
  742             const double t0 = vertex->
getT();
 
  745             int origin = track->id;
 
  747             if (writeEMShowers) {
 
  748               origin = 
event.mc_trks.size() + 1;
 
  751             int number_of_hits = 0;
 
  753             JDetectorSubset_t::range_type 
range = subdetector.getRange(z0 - maximal_distance,
 
  754                                                                        z0 + maximal_distance);
 
  756             for (JDetector::const_iterator module = range.begin(); module != range.end(); ++module) {
 
  758               const double R  = hypot(module->getX() - vertex->
getX(),
 
  759                                       module->getY() - vertex->
getY());
 
  760               const double Z  = module->getZ() - z0 - 
DZ;
 
  761               const double D  = sqrt(R*R + Z*Z);
 
  762               const double cd = Z / 
D; 
 
  764               for (
size_t i = 0; i != CDG.size(); ++i) {
 
  766                 if (D < CDG[i].integral.getXmax()) {
 
  770                     const double NPE = CDG[i].integral.getNPE(D, cd) * Es * module->size() * factor;
 
  771                     const int    N   = gRandom->Poisson(NPE); 
 
  777                       for (JModule::const_iterator pmt = module->begin(); pmt != module->end(); ++pmt) {
 
  779                         const double R     = hypot(pmt->getX() - vertex->
getX(), 
 
  780                                                    pmt->getY() - vertex->
getY());
 
  781                         const double Z     = pmt->getZ() - z0 - 
DZ;
 
  782                         const double D     = sqrt(R*R + Z*Z);
 
  783                         const double cd    = Z / 
D; 
 
  784                         const double theta = pi.
constrain(pmt->getTheta());
 
  785                         const double phi   = pi.
constrain(fabs(pmt->getPhi()));
 
  787                         npe.push_back(CDG[i].
function.
getNPE(D, cd, theta, phi) * Es * factor);
 
  792                       for (JModule::const_iterator pmt = module->begin(); pmt != module->end(); ++pmt) {
 
  794                         const double R     = hypot(pmt->getX() - vertex->
getX(), 
 
  795                                                    pmt->getY() - vertex->
getY());
 
  796                         const double theta = pi.
constrain(pmt->getTheta());
 
  797                         const double phi   = pi.
constrain(fabs(pmt->getPhi()));
 
  801                         job.Fill((
double) (100 + CDG[i].type), (
double) n0);
 
  806                           const double Z  = pmt->getZ() - z0 - dz;
 
  807                           const double D  = sqrt(R*R + Z*Z);
 
  808                           const double cd = Z / 
D; 
 
  810                           const double t1 = CDG[i].function.getTime(D, cd, theta, phi, gRandom->Rndm());
 
  813                           mc_hits.push_back(
JHit_t(mc_hits.size() + 1,
 
  822                           number_of_hits += n1;
 
  827                         job.Fill((
double) (300 + CDG[i].type));
 
  831                   catch(
const exception& error) {
 
  832                     job.Fill((
double) (200 + CDG[i].type));
 
  838             if (writeEMShowers && number_of_hits != 0) {
 
  840               event.mc_trks.push_back(
JTrk_t(origin,
 
  843                                              track->pos + track->dir * vertex->
getZ(),
 
  851       } 
else if (track->len > 0.0) {
 
  859         const double z0 = 0.0;
 
  860         const double z1 = z0 + track->len;
 
  861         const double t0 = track->t;
 
  862         const double E  = track->E;
 
  868         for (JDetector::const_iterator module = 
detector.begin(); module != 
detector.end(); ++module) {
 
  872           const double R  = pos.
getX();
 
  877               R > maximal_road_width) {
 
  881           for (
size_t i = 0; i != CDF.size(); ++i) {
 
  893             if (R < CDF[i].integral.getXmax()) {
 
  897                 const double NPE = CDF[i].integral.getNPE(R) * module->size() * factor * W;
 
  898                 const int    N   = gRandom->Poisson(NPE); 
 
  908                   for (JModule::const_iterator pmt = buffer.begin(); pmt != buffer.end(); ++pmt) {
 
  910                     const double R     = pmt->getX();
 
  911                     const double theta = pi.
constrain(pmt->getTheta());
 
  912                     const double phi   = pi.
constrain(fabs(pmt->getPhi()));
 
  914                     npe.push_back(CDF[i].
function.
getNPE(R, theta, phi) * factor * W);
 
  919                   for (JModule::const_iterator pmt = buffer.begin(); pmt != buffer.end(); ++pmt) {
 
  921                     const double R     = pmt->getX();
 
  922                     const double Z     = pmt->getZ() - z0;
 
  923                     const double theta = pi.
constrain(pmt->getTheta());
 
  924                     const double phi   = pi.
constrain(fabs(pmt->getPhi()));
 
  928                     job.Fill((
double) (120 + CDF[i].type), (
double) n0);
 
  932                       const double t1 = CDF[i].function.getTime(R, theta, phi, gRandom->Rndm());
 
  935                       mc_hits.push_back(
JHit_t(mc_hits.size() + 1,
 
  947                     job.Fill((
double) (320 + CDF[i].type));
 
  951               catch(
const exception& error) {
 
  952                 job.Fill((
double) (220 + CDF[i].type));
 
  959         if (!buffer.empty()) {
 
  978           catch(
const exception& error) {
 
  979             ERROR(error.what() << endl);
 
  982           E = 
pythia(track->type, E);
 
  986             const double z0 = 0.0;
 
  987             const double t0 = track->t;
 
  994             for (JDetector::const_iterator module = 
detector.begin(); module != 
detector.end(); ++module) {
 
  998               const double R  = pos.
getX();
 
  999               const double Z  = pos.
getZ() - z0 - 
DZ;
 
 1000               const double D  = sqrt(R*R + Z*Z);
 
 1001               const double cd = Z / 
D; 
 
 1003               for (
size_t i = 0; i != CDG.size(); ++i) {
 
 1005                 if (D < CDG[i].integral.getXmax()) {
 
 1009                     const double NPE = CDG[i].integral.getNPE(D, cd) * E * module->size() * factor;
 
 1010                     const int    N   = gRandom->Poisson(NPE); 
 
 1020                       for (JModule::const_iterator pmt = buffer.begin(); pmt != buffer.end(); ++pmt) {
 
 1022                         const double R     = pmt->getX();
 
 1023                         const double Z     = pmt->getZ() - z0 - 
DZ;
 
 1024                         const double D     = sqrt(R*R + Z*Z);
 
 1025                         const double cd    = Z / 
D; 
 
 1026                         const double theta = pi.
constrain(pmt->getTheta());
 
 1027                         const double phi   = pi.
constrain(fabs(pmt->getPhi()));
 
 1029                         npe.push_back(CDG[i].
function.
getNPE(D, cd, theta, phi) * E * factor);
 
 1034                       for (JModule::const_iterator pmt = buffer.begin(); pmt != buffer.end(); ++pmt) {
 
 1036                         const double theta = pi.
constrain(pmt->getTheta());
 
 1037                         const double phi   = pi.
constrain(fabs(pmt->getPhi()));
 
 1041                         job.Fill((
double) (140 + CDG[i].type), (
double) n0);
 
 1046                           const double Z  = pmt->getZ() - z0 - dz;
 
 1047                           const double D  = sqrt(R*R + Z*Z);
 
 1048                           const double cd = Z / 
D;
 
 1050                           const double t1 = CDG[i].function.getTime(D, cd, theta, phi, gRandom->Rndm());
 
 1053                           mc_hits.push_back(
JHit_t(mc_hits.size() + 1,
 
 1065                         job.Fill((
double) (340 + CDG[i].type));
 
 1069                   catch(
const exception& error) {
 
 1070                     job.Fill((
double) (240 + CDG[i].type));
 
 1076             if (!buffer.empty()) {
 
 1087     if (!mc_hits.empty()) {
 
 1091       event.mc_hits.resize(mc_hits.size());
 
 1093       copy(mc_hits.begin(), mc_hits.end(), 
event.mc_hits.begin());
 
 1102     if (event.
mc_hits.size() >= numberOfHits) {
 
const char *const energy_lost_in_can
 
Data structure for vector in two dimensions. 
 
Utility class to parse command line options. 
 
Custom class for CDF table in 2 dimensions. 
 
Multi-dimensional CDF table for arrival time of Cherenkov light. 
 
JPredicate< JResult_t T::*, JComparison::eq > make_predicate(JResult_t T::*member, const JResult_t value)
Helper method to create predicate for data member. 
 
int main(int argc, char *argv[])
 
static const uint32_t K[64]
 
ROOT TTree parameter settings of various packages. 
 
static const JRadiationSource_t EErad_t
 
double getT() const 
Get time. 
 
double getE() const 
Get muon energy. 
 
JVertex & step(const double ds)
Step using default ionisation energy loss. 
 
Data structure for a composite optical module. 
 
void merge(const double Tmax_ns)
Merge hits on same PMT that are within given time window. 
 
Auxiliary class to set-up Trk. 
 
JTransformation3D getTransformation(const Trk &track)
Get transformation. 
 
std::vector< T >::difference_type distance(typename std::vector< T >::const_iterator first, typename PhysicsEvent::const_iterator< T > second)
Specialisation of STL distance. 
 
Data structure for circle in two dimensions. 
 
#define gmake_property(A)
macro to convert (template) parameter to JPropertiesElement object 
 
double safetyFactor
safety factor for average CDF integral of optical module 
 
Generator for simulation. 
 
double getIndexOfRefraction()
Get average index of refraction of water corresponding to group velocity. 
 
scattered light from EM shower 
 
bool has_neutrino(const Evt &evt)
Test whether given event has an incoming neutrino. 
 
This file contains converted Fortran code from km3. 
 
bool is_muon(const Trk &track)
Test whether given track is a (anti-)muon. 
 
Implementation for calculation of ionization constant. 
 
Recording of objects on file according a format that follows from the file name extension. 
 
JHitType_t getHitType(const JPDFType_t pdf, const bool shower=false)
Get hit type corresponding to given PDF type. 
 
Auxiliary class for PMT parameters including threshold. 
 
double getDeltaRaysFromTau(const double E)
Equivalent EM-shower energy due to delta-rays per unit tau track length. 
 
Utility class to parse parameter values. 
 
static double O()
Estimated mass fractions of chemical elements in sea water. 
 
then JShowerPostfit f $INPUT_FILE o $OUTPUT_FILE N
 
*fatal Wrong number of arguments esac JCookie sh typeset Z DETECTOR typeset Z SOURCE_RUN typeset Z TARGET_RUN set_variable PARAMETERS_FILE $WORKDIR parameters
 
Jpp environment information. 
 
Empty structure for specification of parser element that is initialised (i.e. does not require input)...
 
static const JGeane_t gRock(2.67e-1 *0.9 *DENSITY_ROCK, 3.40e-4 *1.2 *DENSITY_ROCK)
Function object for energy loss of muon in rock. 
 
static const JGeaneWater gWater
Function object for energy loss of muon in sea water. 
 
static counter_type max()
Get maximum counter value. 
 
static const double DENSITY_SEA_WATER
Fixed environment values. 
 
Muon radiative cross sections. 
 
std::vector< JAANET::simul > simul
 
static const JPythia pythia
Function object for relative light yield as a function of GEANT particle code. 
 
double getTime(const Hit &hit)
Get true time of hit. 
 
double getY() const 
Get y position. 
 
Data structure for detector geometry and calibration. 
 
static const char *const APPLICATION_JSIRENE
detector simulation 
 
Utility class to parse parameter values. 
 
Fast implementation of class JRadiation. 
 
Implementation for calculation of inverse interaction length and shower energy. 
 
Various implementations of functional maps. 
 
Auxiliary data structure for list of hits with hit merging capability. 
 
static const JPDB & getInstance()
Get particle data book. 
 
Numbering scheme for PDF types. 
 
bool is_neutrino(const Trk &track)
Test whether given track is a neutrino. 
 
static const double C
Physics constants. 
 
struct JSIRENE::@63 getNumberOfPhotoElectrons
Auxiliary data structure for determination of number of photo-electrons. 
 
Auxiliary class to extract a subset of optical modules from a detector. 
 
scattered light from muon 
 
Auxiliary class for defining the range of iterations of objects. 
 
double getThetaMCS(const double E, const double x, const double X0, const double M, const double Q)
Get multiple Coulomb scattering angle. 
 
Implementation for calculation of inverse interaction length and shower energy due to deep-inelastic ...
 
The Vec class is a straightforward 3-d vector, which also works in pyroot. 
 
void push(T JHead::*pd)
Push given data member to Head. 
 
I/O formatting auxiliaries. 
 
std::string getGITVersion(const std::string &tag)
Get GIT version for given GIT tag. 
 
double getKineticEnergy(const double E, const double m)
Get kinetic energy of particle with given mass. 
 
Auxiliary class for the calculation of the muon radiative cross sections. 
 
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object 
 
set_variable E_E log10(E_{fit}/E_{#mu})"
 
static const JGeanz geanz(1.85, 0.62, 0.54)
Function object for longitudinal EM-shower profile. 
 
double getX() const 
Get x position. 
 
JAxis3D getAxis(const Trk &track)
Get axis. 
 
double getE(const double z) const 
Get muon energy at given position along trajectory. 
 
Auxiliary class for CPU timing and usage. 
 
JPosition3D getPosition(const Vec &pos)
Get position. 
 
scattered light from delta-rays 
 
direct light from EM shower 
 
static const double PI
Mathematical constants. 
 
void addMargin(const double D)
Add (safety) margin. 
 
double getY() const 
Get y position. 
 
static const JRadiationSource_t Brems_t
 
General purpose messaging. 
 
double getEs() const 
Get shower energy. 
 
Detector subset with binary search functionality. 
 
Detector subset without binary search functionality. 
 
Vertex of energy loss of muon. 
 
const JVersor3Z & getDirection() const 
Get direction. 
 
The Head class reflects the header of Monte-Carlo event files, which consists of keys (also referred ...
 
Scanning of objects from multiple files according a format that follows from the extension of each fi...
 
const char * getDate()
Get current date conform ISO-8601 standard. 
 
Custom class for CDF table in 1 dimension. 
 
direct light from delta-rays 
 
z range($ZMAX-$ZMIN)< $MINIMAL_DZ." fi fi typeset -Z 4 STRING typeset -Z 2 FLOOR JPlot1D -f $
 
void applyEloss(const JVersor3Z &Ts, const double Es)
Apply shower energy loss. 
 
then JCookie sh JDataQuality D $DETECTOR_ID R
 
virtual const char * what() const override
Get error message. 
 
std::vector< JAANET::detector > detector
 
void load(const std::string &file_name, JDetector &detector)
Load detector from input file. 
 
double getMaximum(const double E) const 
Get depth of shower maximum. 
 
General purpose class for object reading from a list of file names. 
 
JVector2D getPosition(const double z) const 
Get muon position at given position along trajectory. 
 
Utility class to parse command line options. 
 
std::vector< Hit > mc_hits
MC: list of MC truth hits. 
 
bool is_scattered(const int pdf)
Test if given PDF type corresponds to scattered light. 
 
void transform(const JRotation3D &R, const JVector3D &pos)
Transformation of geometry (see method JGEOMETRY3D::JPosition3D::transform(const JRotation3D&, const JVector3D&)). 
 
bool is_deltarays(const int pdf)
Test if given PDF type corresponds to Cherenkov light from delta-rays. 
 
Auxiliary class to set-up Hit. 
 
double getX() const 
Get x position. 
 
double getDeltaRaysFromMuon(const double E)
Equivalent EM-shower energy due to delta-rays per unit muon track length. 
 
void copy(const Head &from, JHead &to)
Copy header from from to to. 
 
Auxiliary data structure to list files in directory. 
 
std::string getFilename(const std::string &file_name)
Get file name part, i.e. part after last JEEP::PATHNAME_SEPARATOR if any. 
 
double getTanThetaC()
Get average tangent of Cherenkov angle of water corresponding to group velocity. 
 
double getNPE(const Hit &hit)
Get true charge of hit. 
 
do set_variable MODULE getModule a $WORKDIR detector_a datx L $STRING JEditDetector a $WORKDIR detector_a datx M $MODULE setz o $WORKDIR detector_a datx JEditDetector a $WORKDIR detector_b datx M $MODULE setz o $WORKDIR detector_b datx done echo Output stored at $WORKDIR detector_a datx and $WORKDIR tripod_a txt JDrawDetector2D a $WORKDIR detector_a datx a $WORKDIR detector_b datx L BL o detector $FORMAT $BATCH JDrawDetector2D T $WORKDIR tripod_a txt T $WORKDIR tripod_b txt L BL o tripod $FORMAT $BATCH JCompareDetector a $WORKDIR detector_a datx b $WORKDIR detector_b datx o $WORKDIR abc root &dev null for KEY in X Y Z
 
Data structure for position in three dimensions. 
 
const JLimit & getLimit() const 
Get limit. 
 
Longitudinal emission profile EM-shower. 
 
double getLength(const double E, const double P, const double eps=1.0e-3) const 
Get shower length for a given integrated probability. 
 
const Trk & get_neutrino(const Evt &evt)
Get incoming neutrino. 
 
do set_variable DETECTOR_TXT $WORKDIR detector
 
bool is_tau(const Trk &track)
Test whether given track is a (anti-)tau. 
 
static const JRadiationSource_t GNrad_t
 
double getRange() const 
Get visible range of muon using default ionisation energy loss. 
 
JAANET::coord_origin coord_origin
 
Data structure for normalised vector in positive z-direction. 
 
then fatal Wrong number of arguments fi set_variable DETECTOR $argv[1] set_variable INPUT_FILE $argv[2] eval JPrintDetector a $DETECTOR O IDENTIFIER eval JPrintDetector a $DETECTOR O SUMMARY JAcoustics sh $DETECTOR_ID source JAcousticsToolkit sh CHECK_EXIT_CODE typeset A EMITTERS get_tripods $WORKDIR tripod txt EMITTERS get_transmitters $WORKDIR transmitter txt EMITTERS for EMITTER in
 
do echo Generating $dir eval D
 
Vec coord_origin() const 
Get coordinate origin. 
 
int numberOfBins
number of bins for average CDF integral of optical module 
 
double getZ() const 
Get z position. 
 
std::vector< Trk > mc_trks
MC: list of MC truth tracks. 
 
The Evt class respresent a Monte Carlo (MC) event as well as an offline event. 
 
#define DEBUG(A)
Message macros.