1#ifndef __JSIRENE__JVISIBLEENERGYTOOLKIT__
2#define __JSIRENE__JVISIBLEENERGYTOOLKIT__
52 const double R_Earth = R_EARTH_KM * 1e3;
81 if (is_finalstate(track)) {
83 const bool isMuon = is_muon(track);
95 const double Lmuon = gWater.getX(track.
E, MASS_MUON / getSinThetaC());
96 const double Leff = (min(Lmuon, max(intersection.second, 0.0)) -
97 min(Lmuon, max(intersection.first, 0.0)));
102 const double Emidpoint = gWater.getE(track.
E, Lmuon/2.0);
104 const double dEb = gWater.getEb(track.
E, Leff);
105 const double dEc = Leff / geanc();
106 const double dEd = Leff * getDeltaRaysFromMuon(Emidpoint);
108 Evis = dEb + dEc + dEd;
111 can.is_inside(getPosition(track))) {
113 Evis =
pythia(track.
type, getKineticEnergy(track));
145 std::vector<Trk>::const_iterator __end,
152 for (vector<Trk>::const_iterator track = __begin; track != __end; ++track) {
170 std::vector<Trk>::const_iterator __end,
175 Vec Evis(0.0, 0.0, 0.0);
177 for (vector<Trk>::const_iterator track = __begin; track != __end; ++track) {
230 const Trk& leading_lepton = get_leading_lepton(event);
232 if (is_finalstate(leading_lepton)) {
235 for (vector<Trk>::const_iterator track = event.
mc_trks.cbegin(); track != event.
mc_trks.cend(); ++track) {
236 if (is_finalstate(*track) && track->
mother_id == leading_lepton.
id) {
259 Vec Evis(0.0, 0.0, 0.0);
261 const Trk& leading_lepton = get_leading_lepton(event);
263 if (is_finalstate(leading_lepton)) {
266 for (vector<Trk>::const_iterator track = event.
mc_trks.cbegin(); track != event.
mc_trks.cend(); ++track) {
267 if (is_finalstate(*track) && track->
mother_id == leading_lepton.
id) {
Definition of particle types.
Data structure for circle in two dimensions.
Data structure for vector in two dimensions.
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
const JCylinder3D getMaximumContainmentVolume()
Forward function declarations.
double getVisibleEnergyLeadingLepton(const Trk &, const JCylinder3D &)
Vec getVisibleEnergyVectorLeadingLepton(const Evt &event, const JCylinder3D &can=getMaximumContainmentVolume())
Get visible energy vector of the leading lepton of a neutrino interaction.
double getVisibleEnergy(const Trk &, const JCylinder3D &)
Get the visible energy of a track.
static const JPythia pythia
Function object for relative light yield as a function of GEANT particle code.
Vec getVisibleEnergyVector(const Trk &track, const JCylinder3D &can=getMaximumContainmentVolume())
Get the visible energy vector of a track.
const char *const energy_lost_in_can
This file contains converted Fortran code from km3.
bool haveusr(const std::string &key) const
Check availability of user data of the item with given key.
double getusr(const std::string &key) const
Get user data item with given key.
The Evt class respresent a Monte Carlo (MC) event as well as an offline event.
std::vector< Trk > mc_trks
MC: list of MC truth tracks.
static const JPDB & getInstance()
Get particle data book.
The cylinder used for photon tracking.
The Trk class represents a Monte Carlo (MC) particle as well as a reconstructed track/shower.
int type
MC: particle type in PDG encoding.
double E
Energy [GeV] (either MC truth or reconstructed)
int mother_id
MC id of the parent particle.
The Vec class is a straightforward 3-d vector, which also works in pyroot.