52 int main(
int argc, 
char **argv)
 
   56   using namespace KM3NETDAQ;
 
   73     JParser<> zap(
"Example program to determine N-fold coincidence rates.");
 
   77     zap[
'n'] = 
make_field(numberOfEvents)      = JLimit::max();
 
   80     zap[
'C'] = 
make_field(selector)            = getROOTClassSelection<JDAQTimesliceTypes_t>();
 
   82     zap[
's'] = 
make_field(summaryFile)         = 
"halibut.txt";
 
   88   catch(
const exception &error) {
 
   89     FATAL(error.what() << endl);
 
  121   JManager_t 
H1(
new TH1D(
"H1[%]", NULL, 100, -TMax_ns, +TMax_ns));
 
  122   JManager_t T1(
new TH1D(
"T1[%]", NULL, 100, 0.0, TMax_s[
M.getLowerLimit()]));
 
  139     STATUS(
"Processing " << *i << endl); 
 
  145     for ( ; ps->hasNext() && counter != inputFile.getLimit(); ++counter) {
 
  147       STATUS(
"event: " << setw(10) << counter << 
'\r'); 
DEBUG(endl);
 
  151       for (JDAQTimeslice::const_iterator frame = timeslice->begin(); frame != timeslice->end(); ++frame) {
 
  153         JSuperFrame2D_t& buffer = JSuperFrame2D_t::demultiplex(*frame, router.
getModule(frame->getModuleID()));
 
  155         for (JSuperFrame2D_t::iterator i = buffer.begin(); i != buffer.end(); ++i) {
 
  159         JSuperFrame1D_t& data = JSuperFrame1D_t::multiplex(buffer);
 
  163         if (data.size() > 1) {
 
  165           TH1D* 
h1 = H1[frame->getModuleID()];
 
  166           TH1D* t1 = T1[frame->getModuleID()];
 
  172             while (++q != data.end() && q->getT() - p->getT() <= TMax_ns ) {}
 
  178               const int    i  = router.
getIndex(frame->getModuleID());
 
  179               const double ts = 
getTimeOfRTS(frame->getFrameIndex()) + p->getT();
 
  181               t1->Fill((ts - t0[i]) * 1.0e-9);      
 
  189                   h1->Fill(JCombinatorics::getSign(__p->getPMT(),__q->getPMT()) * (__q->getT() - __p->getT()), 1.0/W);
 
  204     const double V = (H1->GetXaxis()->GetXmax() - H1->GetXaxis()->GetXmin()) / (
double) H1->GetXaxis()->GetNbins();  
 
  207     for (JManager_t::iterator i = H1.begin(); i != H1.end(); ++i) {
 
  208       i->second->Scale(1.0/(V*W));
 
  211     for (JManager_t::iterator i = T1.begin(); i != T1.end(); ++i) {
 
  212       i->second->Scale(1.0/i->second->GetMaximum());
 
  216   if (summaryFile != 
"") {
 
  218     const double V = (H1->GetXaxis()->GetXmax() - H1->GetXaxis()->GetXmin()) / (
double) H1->GetXaxis()->GetNbins();  
 
  222     const int PRECISION         = (
M.getLowerLimit() > 2 ? 4 : 3);
 
  224     ofstream out(summaryFile.c_str());
 
  226     out << 
"Multiplicity " << 
M                                      << endl;
 
  227     out << 
"-------------------------------------------------------" << endl;
 
  228     out << 
" location  |   Gauss  |   S - B  |   Total  |   slope  " << endl;
 
  229     out << 
"           |   [Hz]   |   [Hz]   |   [Hz]   |   [Hz]   " << endl;
 
  230     out << 
"-------------------------------------------------------" << endl;
 
  234     for (
int string = 1; 
string <= number_of_strings; ++string) {
 
  235       for (
int floor = number_of_floors; floor >= 1; --floor) {
 
  239         out << 
"  " << setw(3) << 
string << 
' ' << setw(2) << floor << 
"  ";
 
  241         TH1D* 
h1 = (H1.find(
id) != H1.end() ? H1[id] : NULL);
 
  242         TH1D* t1 = (T1.find(
id) != T1.end() ? T1[id] : NULL);
 
  246           TF1 f1(
"f1", 
"[0]*exp(-0.5*(x-[1])*(x-[1])/([2]*[2]))/(TMath::Sqrt(2*TMath::Pi())*[2]) + [3]");
 
  248           f1.SetParameter(0, h1->GetMaximum());
 
  249           f1.SetParameter(1, 0.0);
 
  250           f1.SetParameter(2, h1->GetRMS() * 0.25);
 
  251           f1.SetParameter(3, h1->GetMinimum());
 
  253           h1->Fit(&f1, option.c_str(), 
"same");
 
  255           out << 
" | " << 
FIXED(8,PRECISION) <<  f1.GetParameter(0);
 
  256           out << 
" | " << 
FIXED(8,PRECISION) << (h1->GetSumOfWeights() - f1.GetParameter(3) * h1->GetNbinsX()) * V;
 
  257           out << 
" | " << 
FIXED(8,PRECISION) <<  h1->GetSumOfWeights() * V;
 
  259           Q[0].
put( f1.GetParameter(0));
 
  260           Q[1].
put((h1->GetSumOfWeights() - f1.GetParameter(3) * h1->GetNbinsX()) * V);
 
  261           Q[2].
put( h1->GetSumOfWeights() * V);
 
  266           TF1 f1(
"f1", 
"[0]*exp(-[1]*x)");
 
  268           f1.SetParameter(0, t1->GetMaximum());
 
  269           f1.SetParameter(1, 1.0 / t1->GetRMS());
 
  271           t1->Fit(&f1, option.c_str(), 
"same");
 
  273           out << 
" | " << 
FIXED(8,PRECISION) <<  f1.GetParameter(1);
 
  275           Q[3].
put(f1.GetParameter(1));
 
  286       out << 
"-------------------------------------------------------" << endl;
 
  287       out << setw(10) << left << 
" average";
 
  289       for (
int i = 0; i != 
sizeof(Q)/
sizeof(Q[0]); ++i) {
 
Utility class to parse command line options. 
 
int main(int argc, char *argv[])
 
ROOT TTree parameter settings of various packages. 
 
Basic data structure for L0 hit. 
 
const JModule & getModule(const JObjectID &id) const 
Get module parameters. 
 
std::vector< T >::difference_type distance(typename std::vector< T >::const_iterator first, typename PhysicsEvent::const_iterator< T > second)
Specialisation of STL distance. 
 
const int getIndex(const JObjectID &id) const 
Get index of module. 
 
Auxiliary class to select ROOT class based on class name. 
 
Router for direct addressing of module data in detector data structure. 
 
then for HISTOGRAM in h0 h1
 
Long64_t counter_type
Type definition for counter. 
 
Dynamic ROOT object management. 
 
Auxiliary class for a type holder. 
 
Auxiliary data structure for floating point format specification. 
 
double getTimeOfRTS(const JDAQChronometer &chronometer)
Get time of last RTS in ns since start of run for a given chronometer. 
 
Template definition for direct access of elements in ROOT TChain. 
 
Data structure for detector geometry and calibration. 
 
long long int factorial(const long long int n)
Determine factorial. 
 
Auxiliary interface for direct access of elements in ROOT TChain. 
 
1-dimensional frame with time calibrated data from one optical module. 
 
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...
 
I/O formatting auxiliaries. 
 
Logical location of module. 
 
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object 
 
double getFrameTime()
Get frame time duration. 
 
int getNumberOfFloors(const JDetector &detector)
Get number of floors. 
 
Match operator for consecutive hits. 
 
General purpose messaging. 
 
static const JStringCounter getNumberOfStrings
Function object to count unique strings. 
 
Auxiliary class to select JTreeScanner based on ROOT class name. 
 
Scanning of objects from multiple files according a format that follows from the extension of each fi...
 
Direct access to module in detector data structure. 
 
void load(const std::string &file_name, JDetector &detector)
Load detector from input file. 
 
Auxiliary class to define a range between two values. 
 
Utility class to parse command line options. 
 
int getCount(const T &hit)
Get hit count. 
 
2-dimensional frame with time calibrated data from one optical module. 
 
const JLimit & getLimit() const 
Get limit. 
 
do set_variable DETECTOR_TXT $WORKDIR detector
 
then usage $script[input file[working directory[option]]] nWhere option can be N
 
#define DEBUG(A)
Message macros.