51 int main(
int argc,
char **argv)
65 JParser<> zap(
"Program to histogram event-by-event data of shower light for making PDFs.");
69 zap[
'n'] =
make_field(numberOfEvents) = JLimit::max();
76 catch(
const exception &error) {
77 FATAL(error.what() << endl);
81 NOTICE(
"Plotting hadronic showers." << endl);
83 NOTICE(
"Plotting EM showers." << endl);
98 NOTICE(
"Apply detector offset " << center << endl);
123 JMultiHistogram_t h0;
124 JMultiHistogram_t
h1;
132 for (JQuadrature::const_iterator i = qeant.begin(); i != qeant.end(); ++i) {
141 const double R[] = {0.0, 2.5, 5.0, 7.5, 10.0, 12.5, 15.0, 17.5, 20.0, 25.0, 30.0, 35.0, 40.0, 50.0, 60.0, 70.0, 80.0};
142 const double Dmax_m = 80.0;
144 for (
int i = 0; i !=
sizeof(
R)/
sizeof(
R[0]); ++i) {
146 const double R_m =
R[i];
150 const double cd = *
c;
152 const double grid = 10.0 + 0.0 * R_m/100.0;
153 const double alpha = 2.0 * sqrt(1.0 - cos(grid *
PI / 180.0));
155 const int number_of_theta_points = max(2, (
int) (180.0/(1.4 * grid)));
156 const double theta_step =
PI / (number_of_theta_points + 1);
158 for (
double theta = -0.5*theta_step; theta <
PI + theta_step; theta += theta_step) {
160 const int number_of_phi_points = max(2, (
int) (
PI * sin(theta) / alpha));
161 const double phi_step =
PI / (number_of_phi_points + 1);
163 for (
double phi = -0.5*phi_step; phi <
PI + phi_step; phi += phi_step) {
165 for (JMultiHistogram_t* p : { &h0, &
h1 }) {
166 (*p)[R_m][cd][theta][phi];
173 double buffer[] = { 0.0, 0.5, 1.0, 1.5, 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 };
175 for (JMultiHistogram_t::super_iterator i1 =
h1.super_begin(); i1 !=
h1.super_end(); ++i1) {
176 for (
int j = 0;
j !=
sizeof(buffer)/
sizeof(buffer[0]); ++
j) {
177 i1.getValue()[buffer[
j]];
181 while (inputFile.hasNext()) {
183 NOTICE(
"event: " << setw(10) << inputFile.getCounter() <<
'\r');
STATUS(endl);
185 const Evt*
event = inputFile.next();
195 WARNING(
"No electron/hadrons found. Perhaps you meant to run this program in hadronic mode." << endl);
220 const double cd = axis.
getZ()/D_m;
221 const double theta = axis.
getTheta();
222 const double phi = fabs(axis.
getPhi());
223 const double dt =
getTime(*hit) - t1;
224 const double npe =
getNPE (*hit);
227 h1.fill(D_m, cd, theta, phi, dt, npe/E);
231 catch(
const exception& error) {
232 FATAL(error.what() << endl);
236 for (JDetector::const_iterator module =
detector.begin(); module !=
detector.end(); ++module) {
246 for (JModule::const_iterator pmt = module->begin(); pmt != module->end(); ++pmt) {
258 for (JMultiHistogram_t::super_iterator i = h0.super_begin(); i != h0.super_end(); ++i) {
259 integral+=i.getValue().getIntegral();
261 DEBUG(
"Integral:\t" << integral << endl);
267 NOTICE(
"Storing, " << flush);
269 for (
const JMultiHistogram_t* p : { &h0, &
h1 }) {
Router for direct addressing of PMT data in detector data structure.
int count_electrons(const Evt &evt)
Count the number of electrons in a given event.
Utility class to parse command line options.
int main(int argc, char *argv[])
ROOT TTree parameter settings of various packages.
Data structure for direction in three dimensions.
double t
track time [ns] (when the particle is at pos )
double getIndexOfRefraction()
Get average index of refraction of water corresponding to group velocity.
Implementation of dispersion for water in deep sea.
Properties of Antares PMT and deep-sea water.
then for HISTOGRAM in h0 h1
const JPMT & getPMT(const JPMTAddress &address) const
Get PMT.
double getMinimalWavelength()
Get minimal wavelength for PDF evaluations.
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)
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.
Head getHeader(const JMultipleFileScanner_t &file_list)
Get Monte Carlo header.
static const double C
Physics constants.
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.
double getMaximalWavelength()
Get maximal wavelength for PDF evaluations.
JDirection3D getDirection(const Vec &dir)
Get direction.
Trk get_hadronic_cascade(const Evt &evt)
Auxiliary function to get average direction and total energy of a hadronic cascade.
const Trk & get_electron(const Evt &evt)
Get first electron from the event tracklist.
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
double getTheta() const
Get theta angle.
JPosition3D getPosition(const Vec &pos)
Get position.
double getAmbientPressure()
Get ambient pressure.
static const double PI
Mathematical constants.
Direct access to PMT in detector data structure.
double getLength() const
Get length.
then usage $script[distance] fi case set_variable R
General purpose messaging.
bool from_hadron(const Hit &hit)
Test whether given hit was produced by a hadronic shower.
Scanning of objects from multiple files according a format that follows from the extension of each fi...
Probability density function of photon emission from EM-shower as a function of cosine of the emissio...
virtual double getIndexOfRefractionGroup(const double lambda) const
Index of refraction for group velocity.
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.
const double getInverseSpeedOfLight()
Get inverse speed of light.
then usage $script< input_file >< detector_file > fi set_variable OUTPUT_DIR set_variable SELECTOR JDAQTimesliceL1 set_variable DEBUG case set_variable DEBUG
double getNPE(const Hit &hit)
Get true charge of hit.
Data structure for position in three dimensions.
const JLimit & getLimit() const
Get limit.
$WORKDIR ev_configure_domsimulator txt echo process $DOM_SIMULATOR $i $SOURCE_HOST[$index] csh c(setenv ROOTSYS $ROOTSYS &&source $JPP_DIR/setenv.csh $JPP_DIR &&($DOM_SIMULATOR\-u\$NAME\$\-H\$SERVER\$\-M\$LOGGER\$\-d $DEBUG</dev/null > &/dev/null &))'
Function object for the probability density function of photon emission from EM-shower as a function ...
bool from_electron(const Hit &hit)
Test whether given hit was produced by an electron.
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.
double getZ() const
Get z position.
The Evt class respresent a Monte Carlo (MC) event as well as an offline event.
int count_hadrons(const Evt &evt)
Count the number of hadrons in a given event (not including neutral pions)
double getAngularAcceptance(const double x)
Angular acceptence of PMT.