62 JParser<> zap(
"Example program to verify Monte Carlo data.");
65 zap[
'n'] =
make_field(numberOfEvents) = JLimit::max();
74 catch(
const exception &error) {
75 FATAL(error.what() << endl);
81 if (detectorFile !=
"") {
97 NOTICE(
"Apply detector offset " << center << endl);
105 for ( ;
x < -10.0;
x += 5.0) {
X.push_back(
x); }
106 for ( ;
x < +20.0;
x += 1.0) {
X.push_back(
x); }
107 for ( ;
x < +50.0;
x += 2.0) {
X.push_back(
x); }
108 for ( ;
x < +100.0;
x += 5.0) {
X.push_back(
x); }
109 for ( ;
x < +250.0;
x += 10.0) {
X.push_back(
x); }
110 for ( ;
x < +500.0;
x += 25.0) {
X.push_back(
x); }
111 for ( ;
x < +900.0;
x += 50.0) {
X.push_back(
x); }
117 size_t number_of_events = 0;
119 while (inputFile.hasNext()) {
121 STATUS(
"event: " << setw(10) << inputFile.getCounter() <<
'\r');
DEBUG(endl);
123 const Evt*
event = inputFile.next();
125 if (!event->mc_hits.empty()) {
129 size_t number_of_muons = 0;
133 number_of_muons += 1;
137 if (!M(number_of_muons)) {
141 if (event->mc_hits.size() < L_cut)
continue;
145 npe[hit->type] += hit->a;
147 const double t1 =
getTime(*hit);
150 event->mc_trks.end(),
153 if (track != event->mc_trks.end() &&
is_muon(*track)) {
157 if (router.hasPMT(hit->pmt_id)) {
159 const JPMT& pmt = router.getPMT(hit->pmt_id);
160 const double t0 = muon.
getT(pmt);
162 H1[pmt.
getID()]->Fill(t1 - t0, hit->a);
164 H1->Fill(t1 - t0, hit->a);
171 if (number_of_events != 0) {
173 const double W = 1.0 / (double) number_of_events;
184 cout <<
"photon-electron statistics" << endl;
186 for (
const auto&
i : npe) {
187 cout << setw(3) <<
i.first <<
' ' << setw(6) <<
i.second << endl;
Router for direct addressing of PMT data in detector data structure.
Utility class to parse command line options.
JPredicate< JResult_t T::*, JComparison::eq > make_predicate(JResult_t T::*member, const JResult_t value)
Helper method to create predicate for data member.
JTrack3E getTrack(const Trk &track)
Get track.
bool is_muon(const Trk &track)
Test whether given track is a (anti-)muon.
double getTime(const Hit &hit)
Get true time of hit.
Head getHeader(const JMultipleFileScanner_t &file_list)
Get Monte Carlo header.
Auxiliary class for defining the range of iterations of objects.
Type definition of range.
Auxiliary class to manage set of compatible ROOT objects (e.g. histograms) using unique keys...
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
int getID() const
Get identifier.
void convertToPDF(TH1 &h1, const std::string &option="NW", const double factor=1.0)
Convert 1D histogram to PDF.
Data structure for PMT geometry, calibration and status.
double getT(const JVector3D &pos) const
Get arrival time of Cherenkov light at given position.
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.
no fit printf nominal n $STRING awk v X
Data structure for position in three dimensions.
const JLimit & getLimit() const
Get limit.
do set_variable DETECTOR_TXT $WORKDIR detector
The Evt class respresent a Monte Carlo (MC) event as well as an offline event.
#define DEBUG(A)
Message macros.