67     return std::max(bg.getTotal(), 1.0) * (double) sn.getCount() / (double) bg.getCount();
 
   88 int main(
int argc, 
char **argv)
 
   95   JLimit_t&          numberOfEvents = inputFile.getLimit();
 
   98   bool               overwriteDetector;
 
  100   int                numberOfTimeslices;
 
  110     JParser<> zap(
"Example program to search for correlations between triggered events and timeslice data.");
 
  112     zap[
'f'] = 
make_field(inputFile,           
"input file.");
 
  114     zap[
'a'] = 
make_field(detectorFile,         
"detector file.");
 
  115     zap[
'A'] = 
make_field(overwriteDetector,    
"overwrite detector file provided through '-a' with module (PMT) status.");
 
  116     zap[
'n'] = 
make_field(numberOfEvents)      = JLimit::max();
 
  117     zap[
'T'] = 
make_field(TMaxLocal_ns,        
"time window for local coincidences (L1),")                 = 20.0;
 
  118     zap[
'N'] = 
make_field(numberOfTimeslices,  
"time slice difference between triggered event and L1.")    = 100;
 
  119     zap[
'W'] = 
make_field(binWidth_ns,         
"bin width for output histograms." )                        = 10e3;
 
  120     zap[
'D'] = 
make_field(deadTime_us,         
"L1 dead time (us)")                                        = 200.0;
 
  121     zap[
'p'] = 
make_field(Pmin,                
"minimal probability for background to be signal.")         = 1.0e-7;
 
  122     zap[
'C'] = 
make_field(selector,            
"data type selection (default is all).")                    = 
"", getROOTClassSelection<JDAQTimesliceTypes_t>();
 
  128   catch(
const exception& error) {
 
  129     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     if (in.getCounter()%1000 == 0) {
 
  203       STATUS(
"event: " << setw(10) << in.getCounter() << 
'\r'); 
DEBUG(endl);
 
  214       if (router.
hasModule(hit->getModuleID())) {
 
  223     buffer[
event->getFrameIndex()].push_back(t0);
 
  228   while (ps->hasNext()) {
 
  230     if (ps->getCounter()%1000 == 0) {
 
  231       STATUS(
"event: " << setw(10) << ps->getCounter() << 
'\r'); 
DEBUG(endl);
 
  236     map_type::const_iterator p = buffer.lower_bound(timeslice->
getFrameIndex() - numberOfTimeslices);
 
  237     map_type::const_iterator q = buffer.upper_bound(timeslice->
getFrameIndex() + numberOfTimeslices);
 
  239     int number_of_events = 0;
 
  241     for (map_type::const_iterator i = p; i != q; ++i) {
 
  242       number_of_events += i->second.size();
 
  245     if (number_of_events == 0) {
 
  249     for (JDAQTimeslice::const_iterator frame = timeslice->begin(); frame != timeslice->end(); ++frame) {
 
  251       if (router.
hasModule(frame->getModuleID())) {
 
  255         buildL1(*frame, router.
getModule(frame->getModuleID()), back_inserter(
data));
 
  257         TH1D*  h1 = manager[frame->getModuleID()];
 
  259         double t1 = numeric_limits<double>::lowest();
 
  263           const double t2 = *hit + frame->getFrameIndex() * 
getFrameTime();
 
  265           if (t2 > t1 + deadTime_ns) {
 
  267             for (map_type::const_iterator i = p; i != q; ++i) {
 
  268               for (map_type::mapped_type::const_iterator t0 = i->second.begin(); t0 != i->second.end(); ++t0) {
 
  284   TF1 
f1(
"f1", 
"[0]*exp(-0.5*(x-[1])*(x-[1])/([2]*[2])) + [3]");
 
  295   for (JDetector::const_iterator module = 
detector.begin(); module != 
detector.end(); ++module) {
 
  297     if (module->getFloor() != 0) {
 
  299       status[module->getID()] = DEFAULT;
 
  301       JManager_t::iterator p = manager.find(module->getID());
 
  303       if (p == manager.end() || p->second->GetEntries() == 0) { 
 
  305         status[module->getID()] = NODATA;
 
  310       TH1D* h1 = p->second;
 
  316       Double_t 
sigma = 250.0;    
 
  319       for (
int i = 1; i != h1->GetNbinsX(); ++i) {
 
  321         const Double_t 
x = h1->GetBinCenter (i);
 
  322         const Double_t 
y = h1->GetBinContent(i);
 
  332       ymin /= h1->GetNbinsX();
 
  334       f1.SetParameter(0, ymax);
 
  335       f1.SetParameter(1, x0);
 
  336       if (binWidth_ns < 
sigma) 
 
  339         f1.FixParameter(2, binWidth_ns/sqrt(12.0));
 
  340       f1.SetParameter(3, ymin);
 
  342       for (Int_t i = 0; i != 
f1.GetNpar(); ++i) {
 
  343         f1.SetParError(i, 0.0);
 
  348       h1->Fit(&
f1, option.c_str(), 
"same", x0 - 5 * 
sigma, x0 + 5 * 
sigma);
 
  351           f1.GetParameter(0)       >= 
f1.GetParameter(3)) {    
 
  353         status[module->getID()] = IN_SYNC;
 
  362              << setw(10)    << module->getID()    << 
' ' 
  363              << 
FIXED(15,3) << 
f1.GetParameter(1) << 
' ' 
  364              << 
FIXED(12,3) << 
f1.GetParameter(0) << 
' ' 
  365              << 
FIXED(12,3) << 
f1.GetParameter(3) << 
' ' 
  366              << 
FIXED(12,3) << fm                 << 
' ' 
  367              << status[module->getID()] << endl);
 
  374       for (Int_t i = 1, 
ns = -(numberOfTimeslices + 1); i <= h1->GetNbinsX(); ++i) {
 
  376         const Double_t 
x = h1->GetBinCenter (i);
 
  377         const Double_t 
y = h1->GetBinContent(i);
 
  391         const Double_t 
y = getBackground(i->second, bg[i->first]);
 
  392         const Double_t P = TMath::PoissonI(i->second.getTotal(), 
y);
 
  394         if (
debug >= 
debug_t || status[module->getID()] != IN_SYNC) {
 
  395           cout << 
"Module/peak " << setw(10) << module->getID() << 
' ' 
  396                << setw(4) << i->first << 
' ' 
  403                << 
FIXED(7,1) << i->second.getTotal() << 
" / " 
  406                << (i->second.getTotal() > 
y && P < Pmin && i->first != 0 ? 
"***" : 
"") << endl;
 
  409         if (i->second.getTotal() > 
y && P < Pmin)
 
  415       if (!(sn.size()         == 1 && 
 
  416             sn.begin()->first == 0)) {
 
  418         status[module->getID()] = (sn.size() == 1 ? OUT_SYNC : 
ERROR);
 
  420         ERROR(
"Module/error " 
  421               << setw(10)    << module->getID()    << 
' ' 
  422               << 
"number of peaks " << sn.size()   << 
' ' 
  423               << 
"peak " << (sn.size() == 1 ? 
MAKE_CSTRING(sn.begin()->first) : 
"?") << 
' '  
  424               << status[module->getID()] << endl);
 
  429   if (overwriteDetector) {
 
  435       if (i->second != IN_SYNC && 
 
  436           i->second != NODATA) {
 
  438         NOTICE(
"Module " << setw(8) << i->first << 
" set out-of-sync." << endl);
 
  444         for (JModule::iterator pmt = module.begin(); pmt != module.end(); ++pmt) {
 
  461     if (i->second == IN_SYNC) {
 
  464     if (i->second != IN_SYNC && 
 
  465         i->second != NODATA) {
 
  470   NOTICE(
"Number of modules out/in sync " << nout << 
'/' << nin << endl);
 
  472   QAQC(nin << 
' ' << nout << endl);
 
Direct access to PMT data in detector data structure for DAQ hits.
 
KM3NeT DAQ constants, bit handling, etc.
 
Data structure for detector geometry and calibration.
 
Dynamic ROOT object management.
 
General purpose messaging.
 
#define DEBUG(A)
Message macros.
 
#define QAQC(A)
QA/QC output macro.
 
int qaqc
QA/QC file descriptor.
 
Utility class to parse command line options.
 
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
 
I/O formatting auxiliaries.
 
#define MAKE_CSTRING(A)
Make C-string.
 
Scanning of objects from a single file according a format that follows from the extension of each fil...
 
ROOT TTree parameter settings of various packages.
 
int main(int argc, char **argv)
 
Simple wrapper around JModuleRouter class for direct addressing of PMT data in detector data structur...
 
const JModule & getModule(const JDAQKeyHit &hit) const
Get module parameters.
 
const JPMT & getPMT(const JDAQKeyHit &hit) const
Get PMT parameters.
 
const JModuleAddress & getAddress(const JObjectID &id) const
Get address of module.
 
bool hasModule(const JObjectID &id) const
Has module.
 
Data structure for a composite optical module.
 
Auxialiary class to assert type conversion.
 
The template JSinglePointer class can be used to hold a pointer to an object.
 
Utility class to parse command line options.
 
Auxiliary class to manage set of compatible ROOT objects (e.g. histograms) using unique keys.
 
Template definition for direct access of elements in ROOT TChain.
 
int getFrameIndex() const
Get frame index.
 
JTriggerCounter_t next()
Increment trigger counter.
 
static const int MODULE_OUT_OF_SYNC
Enable (disable) synchronous signal from this module if this status bit is 0 (1);.
 
const JPolynome f1(1.0, 2.0, 3.0)
Function.
 
double getTime(const Hit &hit)
Get true time of hit.
 
void load(const std::string &file_name, JDetector &detector)
Load detector from input file.
 
void store(const std::string &file_name, const JDetector &detector)
Store detector to output file.
 
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
 
KM3NeT DAQ data structures and auxiliaries.
 
double getFrameTime()
Get frame time duration.
 
double getMaximalTime(const double R_Hz)
Get maximal time for given rate.
 
std::map< int, range_type > map_type
 
static const int OUT_OF_SYNC
Enable (disable) synchronous signal from this PMT if this status bit is 0 (1);.
 
Auxiliary data structure for floating point format specification.
 
Auxiliary data structure to unify weights of acoustics data according to the number of pings per emit...
 
int getStatus() const
Get status.
 
Auxiliary class for a type holder.
 
Auxiliary class to select ROOT class based on class name.
 
Auxiliary class to select JTreeScanner based on ROOT class name.
 
Auxiliary class for defining the range of iterations of objects.
 
Auxiliary data structure for L1 build parameters.
 
Auxiliary data structure for floating point format specification.