59 inline int classify_km3(
const Trk& track,
const Hit& hit)
87 inline int classify_km3sim(
const Trk& track,
const Hit& hit)
103 int main(
int argc,
char **argv)
117 JParser<> zap(
"Program to histogram event-by-event data of muon light for making PDFs.");
121 zap[
'n'] =
make_field(numberOfEvents) = JLimit::max();
127 catch(
const exception &error) {
128 FATAL(error.what() << endl);
169 JMultiHistogram_t h0;
170 JMultiHistogram_t h1;
171 JMultiHistogram_t h2;
173 const double cmin = dispersion.
getKmin (wmax);
181 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 };
183 for (
int i = 0; i !=
sizeof(
R)/
sizeof(
R[0]); ++i) {
185 const double R_m =
R[i];
187 const double grid = 10.0 + 0.0 * R_m/100.0;
188 const double alpha = 2.0 * sqrt(1.0 - cos(grid *
PI / 180.0));
190 const int number_of_theta_points = max(2, (
int) (180.0/(1.4 * grid)));
191 const double theta_step =
PI / (number_of_theta_points + 1);
193 for (
double theta = -0.5*theta_step; theta <
PI + theta_step; theta += theta_step) {
195 const int number_of_phi_points = max(2, (
int) (
PI *
sin(theta) / alpha));
196 const double phi_step =
PI / (number_of_phi_points + 1);
198 for (
double phi = -0.5*phi_step; phi <
PI + phi_step; phi += phi_step) {
200 for (JMultiHistogram_t* p : { &h0, &h1, &h2 }) {
201 (*p)[R_m][theta][phi];
207 for (JMultiHistogram_t::super_iterator
208 i1 = h1.super_begin(),
209 i2 = h2.super_begin(); i1 != h1.super_end(); ++i1, ++i2) {
211 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} ) {
218 while (inputFile.hasNext()) {
220 NOTICE(
"event: " << setw(10) << inputFile.getCounter() <<
'\r');
STATUS(endl);
222 const Evt*
event = inputFile.next();
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 classID = (KM3Sim ? classify_km3sim(*track, *hit) : classify_km3(*track, *hit));
260 h1.fill(R_m, theta, phi, dt, npe);
264 h2.fill(R_m, theta, phi, dt, npe / max(1.0, Evis.
len()));
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 }) {
Router for direct addressing of PMT data in detector data structure.
JVertex3D getVertex(const Trk &track)
Get vertex.
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)...
JWriter & store(const JSerialisable &object)
Write object.
int main(int argc, char *argv[])
ROOT TTree parameter settings of various packages.
Scattered light from muon.
Implementation of dispersion for water in deep sea.
bool is_muon(const Trk &track)
Test whether given track is a (anti-)muon.
Properties of Antares PMT and deep-sea water.
int pmt_id
global PMT identifier as found in evt files
Scattered light from Bremsstrahlung.
static const JGeaneWater gWater
Function object for energy loss of muon in sea water.
Direct light from Bremsstrahlung.
double getTime(const Hit &hit)
Get true time of hit.
double getPhi() const
Get phi angle.
double E
Energy [GeV] (either MC truth or reconstructed)
int origin
track id of the track that created this hit (mc only)
Data structure for detector geometry and calibration.
void transform(const JAxis3D &axis)
Transform axis to reference frame of given axis.
Various implementations of functional maps.
double len() const
Get length.
Head getHeader(const JMultipleFileScanner_t &file_list)
Get Monte Carlo header.
Auxiliary class for defining the range of iterations of objects.
JVector3D & sub(const JVector3D &vector)
Subtract vector.
Properties of KM3NeT PMT and deep-sea water.
The Vec class is a straightforward 3-d vector, which also works in pyroot.
double getMaximalWavelength()
Get maximal wavelength for PDF evaluations.
JDirection3D getDirection(const Vec &dir)
Get direction.
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
double getTheta() const
Get theta angle.
double getAmbientPressure()
Get ambient pressure.
static const double PI
Mathematical constants.
double getY() const
Get y position.
Direct access to PMT in detector data structure.
General purpose messaging.
Template specialisation of JMultipleFileScanner for Monte Carlo header.
Scanning of objects from multiple files according a format that follows from the extension of each fi...
then JCookie sh JDataQuality D $DETECTOR_ID R
const double getSpeedOfLight()
Get speed of light.
void load(const std::string &file_name, JDetector &detector)
Load detector from input file.
General purpose class for object reading from a list of file names.
Utility class to parse command line options.
double getX() const
Get x position.
double getTanThetaC()
Get average tangent of Cherenkov angle of water corresponding to group velocity.
bool is_km3sim(const JHead &header)
Check for detector simulation.
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.
do set_variable DETECTOR_TXT $WORKDIR detector
Vec getVisibleEnergy(const Trk &track, const JCylinder3D &can)
Get the visible energy of a track.
double getT(const JVector3D &pos) const
Get arrival time of Cherenkov light at given position.
The Trk class represents a Monte Carlo (MC) particle as well as a reconstructed track/shower.
JPosition3D & rotate(const JRotation3D &R)
Rotate.
Binary buffered file output.
int type
particle type or parametrisation used for hit (mc only)
double getZ() const
Get z position.
The Evt class respresent a Monte Carlo (MC) event as well as an offline event.
The cylinder used for photon tracking.
double getAngularAcceptance(const double x)
Angular acceptence of PMT.
bool from_muon(const Hit &hit)
Test whether given hit was produced by a muon.