65     return std::max(bg.getTotal(), 1.0) * (double) sn.getCount() / (double) bg.getCount();
 
   86 int main(
int argc, 
char **argv)
 
   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);
 
  141     FATAL(
"Empty detector " << detectorFile << endl);
 
  147   const double BOOST        =  20.0;                                        
 
  148   const double deadTime_ns  =  deadTime_us * 1e3;
 
  150   NOTICE(
"Time window " << 
FIXED(7,1) << TMax_ns << 
" [ns]" << endl);
 
  160   const Double_t 
xmin = -(numberOfTimeslices + 1) * 
getFrameTime() - 0.5*binWidth_ns;
 
  161   const Double_t 
xmax = +(numberOfTimeslices + 1) * 
getFrameTime() + 0.5*binWidth_ns;
 
  162   const Int_t    nx   = (Int_t) ((
xmax - 
xmin) / binWidth_ns);
 
  164   JManager_t manager(
new TH1D(
"M_%", NULL, nx, 
xmin, 
xmax));
 
  172   if (selector == 
"") {
 
  180       FATAL(
"No timeslice data." << endl);
 
  183     NOTICE(
"Selected class " << ps->getClassName() << endl);
 
  189     ps->configure(inputFile);
 
  192   ps->setLimit(inputFile.getLimit());
 
  200     STATUS(
"event: " << setw(10) << 
in.getCounter() << 
'\r'); 
DEBUG(endl);
 
  215     buffer[
event->getFrameIndex()].push_back(t0);
 
  220   while (ps->hasNext()) {
 
  222     STATUS(
"event: " << setw(10) << ps->getCounter() << 
'\r'); 
DEBUG(endl);
 
  226     map_type::const_iterator p = buffer.lower_bound(timeslice->
getFrameIndex() - numberOfTimeslices);
 
  227     map_type::const_iterator q = buffer.upper_bound(timeslice->
getFrameIndex() + numberOfTimeslices);
 
  229     int number_of_events = 0;
 
  231     for (map_type::const_iterator 
i = p; 
i != q; ++
i) {
 
  232       number_of_events += 
i->second.size();
 
  235     if (number_of_events == 0) {
 
  239     for (JDAQTimeslice::const_iterator frame = timeslice->begin(); frame != timeslice->end(); ++frame) {
 
  243       buildL1(*frame, router.
getModule(frame->getModuleID()), back_inserter(
data));
 
  245       TH1D* h1 = manager[frame->getModuleID()];
 
  247       double t1 = numeric_limits<double>::lowest();
 
  251         const double t2 = *hit + frame->getFrameIndex() * 
getFrameTime();
 
  253         if (t2 > t1 + deadTime_ns) {
 
  255           for (map_type::const_iterator 
i = p; 
i != q; ++
i) {
 
  256             for (map_type::mapped_type::const_iterator t0 = 
i->second.begin(); t0 != 
i->second.end(); ++t0) {
 
  271   TF1 
f1(
"f1", 
"[0]*exp(-0.5*(x-[1])*(x-[1])/([2]*[2])) + [3]");
 
  282   for (JDetector::const_iterator module = 
detector.begin(); module != 
detector.end(); ++module) {
 
  284     if (module->getFloor() != 0) {
 
  286       status[module->getID()] = DEFAULT;
 
  288       JManager_t::iterator p = manager.find(module->getID());
 
  290       if (p == manager.end() || p->second->GetEntries() == 0) { 
 
  292         status[module->getID()] = NODATA;
 
  297       TH1D* h1 = p->second;
 
  303       Double_t 
sigma = 250.0;    
 
  306       for (
int i = 1; 
i != h1->GetNbinsX(); ++
i) {
 
  308         const Double_t 
x = h1->GetBinCenter (
i);
 
  309         const Double_t 
y = h1->GetBinContent(
i);
 
  319       ymin /= h1->GetNbinsX();
 
  321       f1.SetParameter(0, ymax);
 
  322       f1.SetParameter(1, x0);
 
  323       if (binWidth_ns < sigma) 
 
  324         f1.SetParameter(2, sigma);
 
  326         f1.FixParameter(2, binWidth_ns/sqrt(12.0));
 
  327       f1.SetParameter(3, ymin);
 
  331       h1->Fit(&f1, option.c_str(), 
"same", x0 - 5 * 
sigma, x0 + 5 * 
sigma);
 
  335           f1.GetParameter(0)       >= f1.GetParameter(3)) {    
 
  337         status[module->getID()] = IN_SYNC;
 
  346       for (Int_t 
i = 1, 
ns = -(numberOfTimeslices + 1); 
i <= h1->GetNbinsX(); ++
i) {
 
  348         const Double_t 
x = h1->GetBinCenter (
i);
 
  349         const Double_t 
y = h1->GetBinContent(
i);
 
  363         const Double_t 
y = getBackground(
i->second, bg[
i->first]);
 
  364         const Double_t 
P = TMath::PoissonI(
i->second.getTotal(), 
y);
 
  366         STATUS(
"Module " << setw(10) << module->getID() 
 
  368                << setw(4) << 
i->first << 
" [frame time] "  
  370                << 
FIXED(7,1) << 
i->second.getTotal() << 
" / " 
  371                << 
FIXED(7,1) << y                    << 
' '  
  374         if (
i->second.getTotal() > y && P < Pmin)
 
  380       if (!(sn.size()         == 1 && 
 
  381             sn.begin()->first == 0)) {
 
  383         ERROR(
"Module " << setw(8) << module->getID() << 
" number of peaks " << sn.size() << endl);
 
  387           ERROR(
"Peak at " << setw(4) << 
i->first << 
" [frame time] " 
  389                 << 
FIXED(7,1) << 
i->second.getTotal()                   << 
" / " 
  390                 << 
FIXED(7,1) << getBackground(
i->second, bg[
i->first]) << endl);
 
  393         status[module->getID()] = (sn.size() == 1 ? OUT_SYNC : 
ERROR);
 
  398   if (overwriteDetector) {
 
  404       if (
i->second != IN_SYNC && 
 
  405           i->second != NODATA) {
 
  407         NOTICE(
"Module " << setw(8) << 
i->first << 
" set out-of-sync." << endl);
 
  413         for (JModule::iterator pmt = module.begin(); pmt != module.end(); ++pmt) {
 
  430     if (
i->second == IN_SYNC) {
 
  433     if (
i->second != IN_SYNC && 
 
  434         i->second != NODATA) {
 
  439   NOTICE(
"Number of modules out/in sync " << nout << 
'/' << nin << endl);
 
  441   QAQC(nin << 
' ' << nout << endl);
 
Utility class to parse command line options. 
 
Direct access to PMT data in detector data structure for DAQ hits. 
 
int main(int argc, char *argv[])
 
ROOT TTree parameter settings of various packages. 
 
Data structure for a composite optical module. 
 
Auxiliary data structure to unify weights of acoustics data according to the number of pings per emit...
 
Auxiliary class to select ROOT class based on class name. 
 
Auxialiary class to assert type conversion. 
 
const JModule & getModule(const JDAQKeyHit &hit) const 
Get module parameters. 
 
Dynamic ROOT object management. 
 
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. 
 
Data structure for detector geometry and calibration. 
 
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. 
 
Scanning of objects from a single file according a format that follows from the extension of each fil...
 
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...
 
I/O formatting auxiliaries. 
 
#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. 
 
General purpose messaging. 
 
Auxiliary class to select JTreeScanner based on ROOT class name. 
 
void load(const std::string &file_name, JDetector &detector)
Load detector from input file. 
 
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
 
Utility class to parse command line options. 
 
#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);. 
 
const JModuleAddress & getAddress(const JObjectID &id) const 
Get address of module. 
 
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. 
 
std::map< int, range_type > map_type
 
do set_variable DETECTOR_TXT $WORKDIR detector
 
KM3NeT DAQ constants, bit handling, etc. 
 
const JPMT & getPMT(const JDAQKeyHit &hit) const 
Get PMT parameters. 
 
Auxiliary data structure for floating point format specification. 
 
int qaqc
QA/QC file descriptor. 
 
#define DEBUG(A)
Message macros.