90   using namespace KM3NETDAQ;
 
   96   bool               overwriteDetector;
 
   98   int                numberOfTimeslices;
 
  108     JParser<> zap(
"Example program to search for correlations between triggered events and timeslice data.");
 
  110     zap[
'f'] = 
make_field(inputFile,           
"input file.");
 
  112     zap[
'a'] = 
make_field(detectorFile,         
"detector file.");
 
  113     zap[
'A'] = 
make_field(overwriteDetector,    
"overwrite detector file provided through '-a' with module (PMT) status.");
 
  114     zap[
'n'] = 
make_field(numberOfEvents)      = JLimit::max();
 
  116     zap[
'N'] = 
make_field(numberOfTimeslices,  
"time slice difference between triggered event and L1.")    = 100;
 
  117     zap[
'W'] = 
make_field(binWidth_ns,         
"bin width for output histograms." )                        = 10e3;
 
  118     zap[
'D'] = 
make_field(deadTime_us,         
"L1 dead time (us)")                                        = 200.0;
 
  119     zap[
'p'] = 
make_field(Pmin,                
"minimal probability for background to be signal.")         = 1.0e-7;
 
  120     zap[
'C'] = 
make_field(selector,            
"data type selection (default is all).")                    = 
"", getROOTClassSelection<JDAQTimesliceTypes_t>();
 
  126   catch(
const exception& error) {
 
  127     FATAL(error.what() << endl);
 
  143     FATAL(
"Empty detector " << detectorFile << endl);
 
  149   const double BOOST        =  20.0;                                        
 
  150   const double deadTime_ns  =  deadTime_us * 1e3;
 
  152   NOTICE(
"Time window " << 
FIXED(7,1) << TMax_ns << 
" [ns]" << endl);
 
  162   const Double_t 
xmin = -(numberOfTimeslices + 1) * 
getFrameTime() - 0.5*binWidth_ns;
 
  163   const Double_t 
xmax = +(numberOfTimeslices + 1) * 
getFrameTime() + 0.5*binWidth_ns;
 
  164   const Int_t    nx   = (Int_t) ((
xmax - 
xmin) / binWidth_ns);
 
  166   JManager_t manager(
new TH1D(
"M_%", NULL, nx, 
xmin, 
xmax));
 
  174   if (selector == 
"") {
 
  182       FATAL(
"No timeslice data." << endl);
 
  185     NOTICE(
"Selected class " << ps->getClassName() << endl);
 
  191     ps->configure(inputFile);
 
  194   ps->setLimit(inputFile.getLimit());
 
  202     STATUS(
"event: " << setw(10) << 
in.getCounter() << 
'\r'); 
DEBUG(endl);
 
  211       t0 += 
getTime(*hit, router.getPMT(*hit));
 
  217     buffer[
event->getFrameIndex()].push_back(t0);
 
  222   while (ps->hasNext()) {
 
  224     STATUS(
"event: " << setw(10) << ps->getCounter() << 
'\r'); 
DEBUG(endl);
 
  228     map_type::const_iterator p = buffer.lower_bound(timeslice->
getFrameIndex() - numberOfTimeslices);
 
  229     map_type::const_iterator q = buffer.upper_bound(timeslice->
getFrameIndex() + numberOfTimeslices);
 
  231     int number_of_events = 0;
 
  233     for (map_type::const_iterator i = p; i != q; ++i) {
 
  234       number_of_events += i->second.size();
 
  237     if (number_of_events == 0) {
 
  241     for (JDAQTimeslice::const_iterator frame = timeslice->begin(); frame != timeslice->end(); ++frame) {
 
  245       buildL1(*frame, router.getModule(frame->getModuleID()), back_inserter(data));
 
  247       TH1D* h1 = manager[frame->getModuleID()];
 
  249       double t1 = numeric_limits<double>::lowest();
 
  253         const double t2 = *hit + frame->getFrameIndex() * 
getFrameTime();
 
  255         if (t2 > t1 + deadTime_ns) {
 
  257           for (map_type::const_iterator i = p; i != q; ++i) {
 
  258             for (map_type::mapped_type::const_iterator t0 = i->second.begin(); t0 != i->second.end(); ++t0) {
 
  273   TF1 
f1(
"f1", 
"[0]*exp(-0.5*(x-[1])*(x-[1])/([2]*[2])) + [3]");
 
  284   for (JDetector::const_iterator module = 
detector.begin(); module != 
detector.end(); ++module) {
 
  286     if (module->getFloor() != 0) {
 
  288       status[module->getID()] = DEFAULT;
 
  290       JManager_t::iterator p = manager.find(module->getID());
 
  292       if (p == manager.end() || p->second->GetEntries() == 0) { 
 
  294         status[module->getID()] = NODATA;
 
  299       TH1D* h1 = p->second;
 
  305       Double_t 
sigma = 250.0;    
 
  308       for (
int i = 1; i != h1->GetNbinsX(); ++i) {
 
  310         const Double_t 
x = h1->GetBinCenter (i);
 
  311         const Double_t y = h1->GetBinContent(i);
 
  321       ymin /= h1->GetNbinsX();
 
  323       f1.SetParameter(0, ymax);
 
  324       f1.SetParameter(1, x0);
 
  325       if (binWidth_ns < sigma) 
 
  326         f1.SetParameter(2, sigma);
 
  328         f1.FixParameter(2, binWidth_ns/sqrt(12.0));
 
  329       f1.SetParameter(3, ymin);
 
  333       h1->Fit(&
f1, option.c_str(), 
"same", x0 - 5 * 
sigma, x0 + 5 * 
sigma);
 
  337           f1.GetParameter(0)       >= 
f1.GetParameter(3)) {    
 
  339         status[module->getID()] = IN_SYNC;
 
  348       for (Int_t i = 1, ns = -(numberOfTimeslices + 1); i <= h1->GetNbinsX(); ++i) {
 
  350         const Double_t x = h1->GetBinCenter (i);
 
  351         const Double_t y = h1->GetBinContent(i);
 
  353         while (x > (ns + 1) * 
getFrameTime() - BOOST * TMax_ns) {
 
  359         else if (fabs(x - ns * 
getFrameTime()) < BOOST * TMax_ns)
 
  363       NOTICE(
"Module " << setw(8) << module->getID() << endl);
 
  367         const Double_t y = getBackground(i->second, bg[i->first]);
 
  368         const Double_t 
P = TMath::PoissonI(i->second.getTotal(), y);
 
  371           cout << 
"Peak at " << setw(4) << i->first << 
" [frame time] "  
  373                << 
FIXED(7,1) << i->second.getTotal() << 
" / " 
  374                << 
FIXED(7,1) << y                    << 
' '  
  378         if (i->second.getTotal() > y && P < Pmin)
 
  384       if (!(sn.size()         == 1 && 
 
  385             sn.begin()->first == 0)) {
 
  387         ERROR(
"Module " << setw(8) << module->getID() << 
" number of peaks " << sn.size() << endl);
 
  391           ERROR(
"Peak at " << setw(4) << i->first << 
" [frame time] " 
  393                 << 
FIXED(7,1) << i->second.getTotal()                   << 
" / " 
  394                 << 
FIXED(7,1) << getBackground(i->second, bg[i->first]) << endl);
 
  397         status[module->getID()] = (sn.size() == 1 ? OUT_SYNC : 
ERROR);
 
  402   if (overwriteDetector) {
 
  408       if (i->second != IN_SYNC && 
 
  409           i->second != NODATA) {
 
  411         NOTICE(
"Module " << setw(8) << i->first << 
" set out-of-sync." << endl);
 
  417         for (JModule::iterator pmt = module.begin(); pmt != module.end(); ++pmt) {
 
  434     if (i->second == IN_SYNC) {
 
  437     if (i->second != IN_SYNC && 
 
  438         i->second != NODATA) {
 
  443   NOTICE(
"Number of modules out/in sync " << nout << 
'/' << nin << endl);
 
  445   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. 
 
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. 
 
const JPolynome f1(1.0, 2.0, 3.0)
Function. 
 
Auxiliary class for defining the range of iterations of objects. 
 
int getStatus() const 
Get status. 
 
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 
 
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. 
 
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);. 
 
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 JAcoustics sh $DETECTOR_ID source JAcousticsToolkit sh CHECK_EXIT_CODE typeset A EMITTERS get_tripods $WORKDIR tripod txt EMITTERS get_transmitters $WORKDIR transmitter txt EMITTERS for EMITTER in
 
Auxiliary data structure for floating point format specification. 
 
int qaqc
QA/QC file descriptor. 
 
#define DEBUG(A)
Message macros.