50{
   54 
   56  JLimit_t&          numberOfEvents = inputFile.getLimit();
 
   58  string             detectorFile;
   59  Double_t           TMax_ns;
   60  double             R;
   62  ULong_t            seed;
   64 
   69    
   70  try { 
   71 
   73 
   74    JParser<> zap(
"Auxiliary program to determine PMT parameters from OMGsim data.");
 
   75    
   76    zap[
'f'] = 
make_field(inputFile,      
"input file.");
 
   79    zap[
'a'] = 
make_field(detectorFile,   
"detector file.");
 
   80    zap[
'T'] = 
make_field(TMax_ns,        
"time window [ns].")                           = 20.0;
 
   81    zap[
'R'] = 
make_field(R,              
"radioactivity [Bq]");
 
   85     
   86    zap(argc, argv);
   87  }
   88  catch(const exception &error) {
   89    FATAL(error.what() << endl);
 
   90  }
   91 
   92 
   93  gRandom->SetSeed(seed);
   94 
   95 
   97 
   98  try {
  100  }
  103  }
  104 
  106    FATAL(
"Wrong number of modules " << 
detector.size() << endl);
 
  107  }
  108 
  109 
  111 
  113 
  115 
  116  const Int_t    nx   = combinatorics.getNumberOfPairs();
  117  const Double_t 
xmin = -0.5;
 
  118  const Double_t 
xmax = nx - 0.5;
 
  119 
  120  const Double_t ymin = -floor(TMax_ns) + 0.125;
  121  const Double_t ymax = +floor(TMax_ns) - 0.125;
  122  const Int_t    ny   = (Int_t) ((ymax - ymin) / 0.25);
  123 
  125 
  126  h2s.Sumw2();
  127 
  128 
  130 
  131  for (size_t i = 0; i != module.size(); ++i) {
  132    router.put(module[i].getID(), i);
  133  }
  134 
  135  double numberOfPrimaries = 0.0;
  136 
  138 
  139  try {
  140 
  141    STATUS(
"Extracting header data... " << flush);
 
  142 
  144 
  145    const JHead buffer(header);
 
  146 
  148      numberOfPrimaries = buffer.norma.numberOfPrimaries;
  149    else
  151 
  153 
  154  } catch(const exception& error) {
  155    FATAL(error.what() << endl);
 
  156  }
  157 
  158  if (numberOfPrimaries == 0.0) {
  159    FATAL(
"Number of primaries " << numberOfPrimaries << endl); 
 
  160  }
  161 
  162 
  164  
  167 
  169    int    pmt;
  170    double t1;
  171  };
  172  
  174 
  175 
  177 
  179 
  181 
  184    }
  185 
  186    const Evt* evt = inputFile.
next();
 
  187 
  188    if (evt->
mc_hits.size() >= 2u) {
 
  189 
  190      buffer.clear();
  191 
  192      for (
const auto& hit : evt->
mc_hits) {
 
  193 
  194        if (router.has(hit.pmt_id)) {
  195 
  196          const int pmt = router.get(hit.pmt_id);
  197 
  198          input .clear();
  199          output.clear();
  200 
  202 
  204 
  205          for (const auto& hit : output) {
  206            buffer.push_back({pmt, hit.t_ns});
  207          }
  208        }
  209      }
  210 
  211 
  212      for (vector<hit_type>::const_iterator p = buffer.begin(); p != buffer.end(); ++p) {
  213        for (vector<hit_type>::const_iterator q = buffer.begin(); p != q; ++q) {
  214          h2s.Fill((double) combinatorics.getIndex(p->pmt,q->pmt), 
  216        }
  217      }
  218    }
  219  }
  221 
  222 
  223  const double W = R / numberOfPrimaries;
  224 
  225  h2s.Scale(W);
  226 
  227  out << h2s;
  228 
  229  out.Write();
  230  out.Close();
  231}
#define THROW(JException_t, A)
Marco for throwing exception with std::ostream compatible message.
 
#define DEBUG(A)
Message macros.
 
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
 
#define MAKE_CSTRING(A)
Make C-string.
 
Data structure for a composite optical module.
 
Template data structure for PMT I/O.
 
Data structure for PMT parameters.
 
double gainSpread
gain spread [unit]
 
double TTS_ns
transition time spread [ns]
 
JProperties getProperties(const JEquationParameters &equation=JPMTParameters::getEquationParameters())
Get properties of this class.
 
double PunderAmplified
probability of underamplified hit
 
bool slewing
time slewing of analogue signal
 
Utility class to parse parameter values.
 
int getID() const
Get identifier.
 
Utility class to parse command line options.
 
General purpose class for object reading from a list of file names.
 
virtual bool hasNext() override
Check availability of next element.
 
counter_type getCounter() const
Get counter.
 
virtual const pointer_type & next() override
Get next element.
 
static const char *const _2S
Name extension for 2D counts.
 
void load(const std::string &file_name, JDetector &detector)
Load detector from input file.
 
JCalibration getCalibration(const JCalibration &first, const JCalibration &second)
Get calibration to go from first to second calibration.
 
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
 
bool putObject(TDirectory &dir, const TObject &object)
Write object to ROOT directory.
 
Head getHeader(const JMultipleFileScanner_t &file_list)
Get Monte Carlo header.
 
KM3NeT DAQ data structures and auxiliaries.
 
The Evt class respresent a Monte Carlo (MC) event as well as an offline event.
 
std::vector< Hit > mc_hits
MC: list of MC truth hits.
 
The Head class reflects the header of Monte-Carlo event files, which consists of keys (also referred ...
 
Auxiliary class to sort pairs of PMT addresses within optical module.
 
PMT analogue signal processor.
 
Data structure for PMT analogue signal.
 
Empty structure for specification of parser element that is initialised (i.e. does not require input)...
 
Auxiliary class for defining the range of iterations of objects.
 
static counter_type max()
Get maximum counter value.