100     JParser<> zap(
"Auxiliary program to verify processing of Monte Carlo events.");
 
  102     zap[
'f'] = 
make_field(inputFile,           
"input file (output of detector simulation)");
 
  103     zap[
'n'] = 
make_field(numberOfEvents)                     = JLimit::max();
 
  104     zap[
'a'] = 
make_field(detectorFileA,       
"detector used for converion from Monte Carlo truth to raw data.");
 
  105     zap[
'b'] = 
make_field(detectorFileB,       
"detector used for conversion of raw data to calibrated data.")     = 
"";
 
  113   catch(
const exception &error) {
 
  114     FATAL(error.what() << endl);
 
  119   if (detectorFileB == 
"") {
 
  120     detectorFileB = detectorFileA;
 
  128     load(detectorFileA, detectorA);
 
  129     load(detectorFileB, detectorB);
 
  135   NOTICE(
"Number of modules in detector A <" << detectorFileA << 
">: " << setw(4) << detectorA.size() << endl);
 
  136   NOTICE(
"Number of modules in detector B <" << detectorFileB << 
">: " << setw(4) << detectorB.size() << endl);
 
  138   JPMTParametersMap::Throw(
true);
 
  140   if (!pmtParameters.is_valid()) {
 
  141     FATAL(
"Invalid PMT parameters " << pmtParameters << endl);
 
  144   if (pmtParameters.getQE() != 1.0) {
 
  146     NOTICE(
"Correct background rates with global efficiency " << pmtParameters.getQE() << endl);
 
  148     rates_Hz.correct(pmtParameters.getQE());
 
  150     NOTICE(
"Back ground rates: " << rates_Hz << endl);
 
  159   DEBUG(
"PMT parameters:" << endl << pmtParameters << endl); 
 
  170   const JPosition3D center = get<JPosition3D>(header);
 
  172   NOTICE(
"Apply detector offset from Monte Carlo run header (" << center << 
")" << endl);
 
  184   while (inputFile.hasNext()) {
 
  186     STATUS(
"event: " << setw(10) << inputFile.getCounter() << 
'\r');
 
  188     Evt* 
event = inputFile.next();
 
  190     if (!event->mc_hits.empty()) {
 
  196       if (!pmtRouter.hasPMT(hit->pmt_id)) {
 
  198         miss[hit->pmt_id].put(
getNPE(*hit));
 
  205       if (!moduleRouter.hasModule(pmt.
getID())) {
 
  207         lost[pmt].put(
getNPE(*hit));
 
  212       const double t0 = 
getTime(*hit);
 
  213       const double t1 = 
putTime(t0, pmtRouter   .getPMT(hit->pmt_id));
 
  214       const double t2 = 
getTime(t1, moduleRouter.getPMT(pmt));
 
  216       if (fabs(t2 - t0) > 
parameters.TMaxLocal_ns) {
 
  217         slip[pmt].put(
getNPE(*hit));
 
  223       npe[pmt][0].put(
getNPE(*hit));
 
  224       npe[pmt][1].put(
getNPE(*hit) * P);
 
  225       npe[pmt][2].put(
getNPE(*hit) * P * data.
QE);
 
  231   NOTICE(
"Number of PMTs absent in detector A:               " << setw(6) << miss.size() << endl);
 
  234     DEBUG(setw(5) << i->first << 
' ' << 
FIXED(8,0) << i->second.getTotal() << endl);
 
  237   NOTICE(
"Number of PMTs absent in detector B:               " << setw(6) << lost.size() << endl);
 
  240     DEBUG(setw(8) << i->first.getModuleID() << 
"[" << setw(2) << i->first.getPMTAddress() << 
"] " << 
FIXED(8,0) << i->second.getTotal() << endl);
 
  243   NOTICE(
"Number of PMTs with t0 detector A - B > " << 
FIXED(4,1) << 
parameters.TMaxLocal_ns << 
" [ns]: " << setw(6) << slip.size() << endl);
 
  246     DEBUG(setw(8) << i->first.getModuleID() << 
"[" << setw(2) << i->first.getPMTAddress() << 
"] " << 
FIXED(8,0) << i->second.getTotal() << endl);
 
  250   NOTICE(
"Number of true photo-electrons, passed threshold and survived QE." << endl);
 
  256     DEBUG(setw(8) << p->first.getModuleID() << 
"[" << setw(2) << p->first.getPMTAddress() << 
"]");
 
  258     for (
size_t i = 0; i != p->second.size(); ++i) {
 
  259       DEBUG(
' ' << 
FIXED(8,0) << p->second[i].getTotal());
 
  263     for (
size_t i = 0; i != p->second.size(); ++i) {
 
  264       total[i].put(p->second[i].getTotal());
 
  268   NOTICE(setw(12) << 
"total");
 
  270   for (
size_t i = 0; i != total.size(); ++i) {
 
  276   NOTICE(
"Time range of hits [ns]: " << QT.getMin() << 
" - " << QT.getMax() << endl);
 
Router for direct addressing of PMT data in detector data structure. 
 
Utility class to parse command line options. 
 
Router for direct addressing of module data in detector data structure. 
 
const JPMTParameters & getPMTParameters() const 
Get PMT parameters. 
 
*fatal Wrong number of arguments esac JCookie sh typeset Z DETECTOR typeset Z SOURCE_RUN typeset Z TARGET_RUN set_variable PARAMETERS_FILE $WORKDIR parameters
 
Empty structure for specification of parser element that is initialised (i.e. does not require input)...
 
Auxiliary data structure for floating point format specification. 
 
double getTime(const Hit &hit)
Get true time of hit. 
 
JTimeRange getTimeRange(const Evt &event)
Get time range (i.e. time between earliest and latest hit) of Monte Carlo event. 
 
Head getHeader(const JMultipleFileScanner_t &file_list)
Get Monte Carlo header. 
 
Auxiliary class for defining the range of iterations of objects. 
 
double putTime(const T &t1, const JCalibration &cal)
Get de-calibrated time. 
 
double getMaximalDistance(const JDetector &detector)
Get maximal distance between modules in detector. 
 
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object 
 
int getID() const 
Get identifier. 
 
Auxiliary class for map of PMT parameters. 
 
The Head class reflects the header of Monte-Carlo event files, which consists of keys (also referred ...
 
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. 
 
double getSurvivalProbability(const JPMTParameters ¶meters)
Get model dependent probability that a one photo-electron hit survives the simulation of the PMT assu...
 
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. 
 
Data structure for PMT parameters. 
 
double QE
relative quantum efficiency 
 
Auxiliary class for K40 rates. 
 
The Evt class respresent a Monte Carlo (MC) event as well as an offline event.