1#ifndef __JSIRENE__JSIRENETOOLKIT__
2#define __JSIRENE__JSIRENETOOLKIT__
77 ns.resize(npe.size());
78 vs.resize(npe.size());
85 for (
size_t i = 1; i != npe.size(); ++i) {
87 vs[i] =
vs[i-1] + npe[i];
90 for (
int i = N; i != 0; --i) {
92 const double x = gRandom->Rndm() * NPE;
94 if (x < *
vs.rbegin()) {
101 for (
size_t i = 0; i != npe.size(); ++i) {
102 ns[i] = gRandom->Poisson(npe[i]);
122 static const size_t NPE = 20;
126 const size_t n = (size_t) (NPE * log10((
double) npe / (
double) NPE));
158 case DIRECT_LIGHT_FROM_MUON:
159 return HIT_TYPE_MUON_DIRECT;
161 case SCATTERED_LIGHT_FROM_MUON:
162 return HIT_TYPE_MUON_SCATTERED;
164 case DIRECT_LIGHT_FROM_DELTARAYS:
165 return HIT_TYPE_DELTARAYS_DIRECT;
167 case SCATTERED_LIGHT_FROM_DELTARAYS:
168 return HIT_TYPE_DELTARAYS_SCATTERED;
170 case DIRECT_LIGHT_FROM_EMSHOWER:
171 return (shower ? HIT_TYPE_SHOWER_DIRECT : HIT_TYPE_BREMSSTRAHLUNG_DIRECT );
173 case SCATTERED_LIGHT_FROM_EMSHOWER:
174 return (shower ? HIT_TYPE_SHOWER_SCATTERED : HIT_TYPE_BREMSSTRAHLUNG_SCATTERED);
177 return HIT_TYPE_UNKNOWN;
266 double getE(
const double z)
const
268 if (!this->empty()) {
272 if (p != this->end() && p != this->begin()) {
276 return p->getE() - (z - p->getZ()) * gWater.getA();
294 const double precision = 1.0e-2;
296 if (!this->empty()) {
300 if (p == this->end()) {
304 if (p == this->begin()) {
313 pos = p->getPosition();
317 pos -= p->getPosition();
319 const double u = (pos.
getZ() > precision ? (z - p->getZ()) / pos.
getZ() : 0.0);
322 p->getY() + u * pos.
getY());
383 static const double Ethreshold = MASS_MUON / getSinThetaC();
385 if (
__E > Ethreshold)
386 return (
__E - Ethreshold) / a;
428 return step(gWater.getA(), ds);
445 __t += ds / getSpeedOfLight();
464 __t += ds / getSpeedOfLight();
Numbering scheme for PDF types.
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 vector in two dimensions.
Data structure for position in three dimensions.
Data structure for vector in three dimensions.
double getY() const
Get y position.
double getZ() const
Get z position.
double getX() const
Get x position.
Data structure for normalised vector in positive z-direction.
JVersor3Z & add(const JVersor3Z &value)
Addition operator.
double getDZ() const
Get z direction.
double getDY() const
Get y direction.
double getDX() const
Get x direction.
Interface for muon energy loss.
Extensions to Evt data format.
JHitType_t
Enumeration of hit types based on km3 codes.
JComparator< JResult_t T::*, JComparison::lt > make_comparator(JResult_t T::*member)
Helper method to create comparator between values of data member.
Auxiliary methods for light properties of deep-sea water.
static const double MASS_MUON
muon mass [GeV]
static const JGeaneWater gWater
Function object for energy loss of muon in sea water.
double getSinThetaC()
Get average sine of Cherenkov angle of water corresponding to group velocity.
const double getSpeedOfLight()
Get speed of light.
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
JHitType_t getHitType(const JPDFType_t pdf, const bool shower=false)
Get hit type corresponding to given PDF type.
const struct JSIRENE::number_of_photo_electrons_type getNumberOfPhotoElectrons
Point along muon trajectory.
double getE() const
Get muon energy.
JPoint(const double z, const double t, const double E)
Constructor.
JPoint()
Default constructor.
double getEs() const
Get shower energy.
JVector2D getPosition(const double z) const
Get muon position at given position along trajectory.
JTrack(const JPoint &point)
Constructor.
double getE(const double z) const
Get muon energy at given position along trajectory.
Vertex of energy loss of muon.
double getRange(const JGeane &geane) const
Get range of muon using given energy loss function.
JVertex & step(const double ds)
Step using default ionisation energy loss.
double getRange() const
Get visible range of muon using default ionisation energy loss.
JVertex & step(const double a, const double ds)
Step using given ionisation energy loss.
double getRange(double a) const
Get visible range of muon using given ionisation energy loss.
void applyEloss(const JVersor3Z &Ts, const double Es)
Apply shower energy loss.
JVertex(const double z, const double t, const double E)
Constructor.
JVertex & step(const JGeane &geane, const double ds)
Step using given energy loss function.
JVertex()
Default constructor.
Auxiliary data structure for determination of number of photo-electrons.
const std::vector< size_t > & operator()(const double NPE, const int N, const std::vector< double > &npe, const bool option) const
Get numbers of photo-electrons for PMTs given the expectation values of the number of photo-electrons...
size_t operator()(const size_t npe) const
Get number of photo-electrons of a hit given number of photo-electrons on PMT.