76   using namespace KM3NETDAQ;
 
   82   bool               overwriteDetector;
 
   84   int                numberOfTimeslices;
 
   93     JParser<> zap(
"Example program to search for correlations between triggered events and timeslice data.");
 
   95     zap[
'f'] = 
make_field(inputFile,           
"input file.");
 
   97     zap[
'a'] = 
make_field(detectorFile,         
"detector file.");
 
   98     zap[
'A'] = 
make_field(overwriteDetector,    
"overwrite detector file provided through '-a' with module (PMT) status.");
 
   99     zap[
'n'] = 
make_field(numberOfEvents)      = JLimit::max();
 
  101     zap[
'N'] = 
make_field(numberOfTimeslices,  
"time slice difference between triggered event and L1.")    = 100;
 
  102     zap[
'W'] = 
make_field(binWidth_ns,         
"bin width for output histograms." )                        = 10e3;
 
  103     zap[
'p'] = 
make_field(Pmin,                
"minimal probability for background to be signal.")         = 1.0e-7;
 
  104     zap[
'C'] = 
make_field(selector,            
"data type selection (default is all).")                    = 
"", getROOTClassSelection<JDAQTimesliceTypes_t>();
 
  110   catch(
const exception& error) {
 
  111     FATAL(error.what() << endl);
 
  127     FATAL(
"Empty detector " << detectorFile << endl);
 
  142   const Double_t xmin = -(numberOfTimeslices + 1) * 
getFrameTime() - 0.5*binWidth_ns;
 
  143   const Double_t xmax = +(numberOfTimeslices + 1) * 
getFrameTime() + 0.5*binWidth_ns;
 
  144   const Int_t    nx   = (Int_t) ((xmax - xmin) / binWidth_ns);
 
  146   JManager_t manager(
new TH1D(
"M_%", NULL, nx, xmin, xmax));
 
  154   if (selector == 
"") {
 
  162       FATAL(
"No timeslice data." << endl);
 
  165     NOTICE(
"Selected class " << ps->getClassName() << endl);
 
  171     ps->configure(inputFile);
 
  174   ps->setLimit(inputFile.getLimit());
 
  182     STATUS(
"event: " << setw(10) << 
in.getCounter() << 
'\r'); 
DEBUG(endl);
 
  191       t0 += 
getTime(*hit, router.getPMT(*hit));
 
  197     buffer[
event->getFrameIndex()].push_back(t0);
 
  202   while (ps->hasNext()) {
 
  204     STATUS(
"event: " << setw(10) << ps->getCounter() << 
'\r'); 
DEBUG(endl);
 
  208     map_type::const_iterator p = buffer.lower_bound(timeslice->
getFrameIndex() - numberOfTimeslices);
 
  209     map_type::const_iterator q = buffer.upper_bound(timeslice->
getFrameIndex() + numberOfTimeslices);
 
  211     int number_of_events = 0;
 
  213     for (map_type::const_iterator i = p; i != q; ++i) {
 
  214       number_of_events += i->second.size();
 
  217     if (number_of_events == 0) {
 
  221     for (JDAQTimeslice::const_iterator frame = timeslice->begin(); frame != timeslice->end(); ++frame) {
 
  225       buildL1(*frame, router.getModule(frame->getModuleID()), back_inserter(data));
 
  227       TH1D* 
h1 = manager[frame->getModuleID()];
 
  231         const double t1 = *hit + frame->getFrameIndex() * 
getFrameTime();
 
  233         for (map_type::const_iterator i = p; i != q; ++i) {
 
  234           for (map_type::mapped_type::const_iterator 
j = i->second.begin(); 
j != i->second.end(); ++
j) {
 
  236             const double t0 = *
j;
 
  249   TF1 f1(
"f1", 
"[0]*exp(-0.5*(x-[1])*(x-[1])/([2]*[2])) + [3]");
 
  260   for (JDetector::const_iterator module = 
detector.begin(); module != 
detector.end(); ++module) {
 
  262     if (module->getFloor() != 0) {
 
  264       status[module->getID()] = DEFAULT;
 
  266       JManager_t::iterator p = manager.find(module->getID());
 
  268       if (p == manager.end() || p->second->GetEntries() == 0) { 
 
  270         status[module->getID()] = NODATA;
 
  275       TH1D* h1 = p->second;
 
  281       Double_t sigma = 250.0;    
 
  284       for (
int i = 1; i != h1->GetNbinsX(); ++i) {
 
  286         const Double_t 
x = h1->GetBinCenter (i);
 
  287         const Double_t y = h1->GetBinContent(i);
 
  297       ymin /= h1->GetNbinsX();
 
  299       f1.SetParameter(0, ymax);
 
  300       f1.SetParameter(1, x0);
 
  301       if (binWidth_ns < sigma) 
 
  302         f1.SetParameter(2, sigma);
 
  304         f1.FixParameter(2, binWidth_ns/sqrt(12.0));
 
  305       f1.SetParameter(3, ymin);
 
  309       h1->Fit(&f1, option.c_str(), 
"same", x0 - 5 * sigma, x0 + 5 * sigma);
 
  313           f1.GetParameter(0)       >= f1.GetParameter(3)) {    
 
  315         status[module->getID()] = IN_SYNC;
 
  324       for (Int_t i = 1, ns = -(numberOfTimeslices + 1); i <= h1->GetNbinsX(); ++i) {
 
  326         const Double_t x = h1->GetBinCenter (i);
 
  327         const Double_t y = h1->GetBinContent(i);
 
  329         while (x > (ns + 1) * 
getFrameTime() - TMax_ns) { ++ns; }
 
  333         else if (fabs(x - ns * 
getFrameTime()) < 10.0 * TMax_ns)
 
  337       DEBUG(
"Module " << setw(8) << module->getID() << endl);
 
  341         const Double_t y = bg[i->first].getTotal() * max(i->second.getCount(), (
long long int) 1) / bg[i->first].getCount();
 
  342         const Double_t 
P = TMath::PoissonI(i->second.getTotal(), y);
 
  344         DEBUG(
"Peak at " << setw(4) << i->first << 
" [frame time] "  
  346               << 
FIXED(7,1) << i->second.getTotal() << 
" / " 
  347               << 
FIXED(7,1) << y                    << 
' '  
  350         if (i->second.getTotal() > y && P < Pmin)
 
  356       if (!(sn.size()         == 1 && 
 
  357             sn.begin()->first == 0)) {
 
  359         ERROR(
"Module " << setw(8) << module->getID() << 
" number of peaks " << sn.size() << endl);
 
  362           ERROR(
"Peak at " << setw(4) << i->first << 
" [frame time] " 
  364                 << 
FIXED(7,1) << i->second.getTotal()                                                     << 
" / " 
  365                 << 
FIXED(7,1) << bg[i->first].getTotal() * i->second.getCount() / bg[i->first].getCount() << endl);
 
  368         status[module->getID()] = (sn.size() == 1 ? OUT_SYNC : 
ERROR);
 
  373   if (overwriteDetector) {
 
  379       if (i->second != IN_SYNC && 
 
  380           i->second != NODATA) {
 
  382         NOTICE(
"Module " << setw(8) << i->first << 
" set out-of-sync." << endl);
 
  388         for (JModule::iterator pmt = module.begin(); pmt != module.end(); ++pmt) {
 
  405     if (i->second == IN_SYNC) {
 
  408     if (i->second != IN_SYNC && 
 
  409         i->second != NODATA) {
 
  414   NOTICE(
"Number of modules out/in sync " << nout << 
'/' << nin << endl);
 
  416   QAQC(nin << 
' ' << nout << endl);
 
Utility class to parse command line options. 
 
Data structure for a composite optical module. 
 
Auxiliary class to select ROOT class based on class name. 
 
then for HISTOGRAM in h0 h1
 
Auxialiary class to assert type conversion. 
 
Auxiliary class for a type holder. 
 
Auxiliary data structure for floating point format specification. 
 
double getTime(const Hit &hit)
Get true time of hit. 
 
Template definition for direct access of elements in ROOT TChain. 
 
Simple wrapper around JModuleRouter class for direct addressing of PMT data in detector data structur...
 
int getFrameIndex() const 
Get frame index. 
 
The template JSinglePointer class can be used to hold a pointer to an object. 
 
Auxiliary class for defining the range of iterations of objects. 
 
Auxiliary class to manage set of compatible ROOT objects (e.g. histograms) using unique keys...
 
void set(const int bit)
Set PMT status. 
 
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object 
 
double getFrameTime()
Get frame time duration. 
 
void store(const std::string &file_name, const JDetector &detector)
Store detector to output file. 
 
double getMaximalTime(const double R_Hz)
Get maximal time for given rate. 
 
Auxiliary class to select JTreeScanner based on ROOT class name. 
 
const JStatus & getStatus() const 
Get status. 
 
void load(const std::string &file_name, JDetector &detector)
Load detector from input file. 
 
#define QAQC(A)
QA/QC output macro. 
 
static const int OUT_OF_SYNC
Enable (disable) synchronous signal from this PMT if this status bit is 0 (1);. 
 
then usage $script< input_file >< detector_file > fi set_variable OUTPUT_DIR set_variable SELECTOR JDAQTimesliceL1 set_variable DEBUG case set_variable DEBUG
 
static const int MODULE_OUT_OF_SYNC
Enable (disable) synchronous signal from this module if this status bit is 0 (1);. 
 
Auxiliary data structure for L1 build parameters. 
 
const JLimit & getLimit() const 
Get limit. 
 
do set_variable DETECTOR_TXT $WORKDIR detector
 
then fatal Wrong number of arguments fi set_variable DETECTOR $argv[1] set_variable INPUT_FILE $argv[2] eval JPrintDetector a $DETECTOR O IDENTIFIER eval JPrintDetector a $DETECTOR O SUMMARY source JAcoustics sh $DETECTOR_ID CHECK_EXIT_CODE typeset A TRIPODS get_tripods $WORKDIR tripod txt TRIPODS for EMITTER in
 
Auxiliary data structure for floating point format specification. 
 
int qaqc
QA/QC file descriptor.