30 using namespace KM3NETDAQ ; 
 
   32 using namespace JDETECTOR ;
 
   33 using namespace JTRIGGER ;
 
   34 using namespace JMONITOR ;
 
   36 int main(
int argc, 
char **argv) {
 
   37   const unsigned int max_multiplicity = 31 ;
 
   60   catch(
const exception &error) {
 
   61     cerr << error.what() << endl ;
 
   62     cout << 
"Use option -h! to display command line options." << endl ;
 
   71     load(detectorFile, detector);
 
   74     cerr << 
"FATAL ERROR. Could not open detector file '" << detectorFile << 
"'." << endl ;
 
   82   const int ncolors = 5 ;
 
   83   const int nice_colors[ncolors] = { kRed, kBlue, kBlack, kViolet, kCyan } ;
 
   88   for( 
unsigned int m=0; m<max_multiplicity+1; ++m ) {
 
   90     sprintf( hname, 
"hToT_m%u", m ) ;
 
   92     sprintf( htitle, 
"Exclusive %u-fold coincidence clusters;ToT [ns];a.u. (normalized)", m ) ;
 
   93     hToT[m] = 
new TH1D( hname, htitle, 256, -0.5, 255.5 ) ;
 
   94     hToT[m]->SetLineColor( nice_colors[m%ncolors] ) ;
 
   95     hToT[m]->SetLineWidth(2)   ;
 
  100   for( 
unsigned int m=0; m<max_multiplicity+1; ++m ) {
 
  102     sprintf( hname, 
"ht_m%u", m ) ;
 
  104     sprintf( htitle, 
"Exclusive %u-fold coincidence clusters;Time after first hits [ns];a.u. (normalized)", m ) ;
 
  105     const int margin = 5 ; 
 
  106     double xmin = -margin ;
 
  107     double xmax = ceil(window) + margin ;
 
  108     int nbins = (int) round(xmax-xmin) ;
 
  109     ht[m] = 
new TH1D( hname, htitle, nbins, xmin, xmax ) ;
 
  110     ht[m]->SetLineColor( nice_colors[m%ncolors] ) ;
 
  111     ht[m]->SetLineWidth(2)   ;
 
  117   TH2D hSizeVsMultiplicity(
"hSizeVsMultiplicity",
";cluster size;cluster multiplicity",
 
  120   hSizeVsMultiplicity.SetOption(
"colz") ;
 
  126   cout << 
"---------- Reading file(s) ----------" << endl ;
 
  132   unsigned int nTS = 0 ; 
 
  135     if( (
int)nTS == maxnslices ) break ;
 
  139       cout << 
"------ Frame index = " << ts->
getFrameIndex() << endl ;
 
  143     for(JDAQTimeslice::const_iterator sf = ts->begin() ; sf!=ts->end() ; ++sf ) {
 
  145       if( sf->size() == 0 ) 
continue ;
 
  147       int moduleID   = sf->getModuleID() ;
 
  149       JModule module = detector[localID] ;
 
  152       cluster_builder.
reset(*sf,module) ;
 
  156         cout << 
"--- " << 
"S" << module.
getString() << 
"F" << module.
getFloor() << endl ;
 
  157         cout << setw(10) << 
"multiplicity" 
  158              << setw(20) << 
"excl. nclusters" 
  159              << setw(20) << 
"incl. nclusters" 
  161         for( 
unsigned int m=2; m<=max_multiplicity; ++m) {
 
  163             cout << setw(10) << m 
 
  177         hSizeVsMultiplicity.Fill( it->size(), it->getMultiplicity() ) ;
 
  185       for( 
unsigned int m=0; m<=max_multiplicity; ++m) {
 
  188           for( JHitL1::const_iterator hit=it->begin(); hit!=it->end(); ++hit ) {
 
  189             hToT[m]->Fill( hit->getToT() ) ;
 
  192           if( it->size() > 1 ) {
 
  193             JHitL1::const_iterator first_hit = it->begin() ;
 
  194             JHitL1::const_iterator hit(first_hit) ;
 
  195             for( ++hit; hit!=it->end(); ++hit ) {
 
  196               ht[m]->Fill( hit->getT() - first_hit->getT() ) ;
 
  204     if( verbose ) cout << endl ;
 
  208   cout << 
"Read " << nTS << 
" time slices." << endl ;
 
  210   TFile* 
f = 
new TFile( ofname.c_str(), 
"recreate" ) ;
 
  212   hSizeVsMultiplicity.Write() ;
 
  214   for( 
unsigned int m=0; m<=max_multiplicity; ++m) {
 
  215     if( hToT[m]->GetEntries()>0 ) {
 
  217       hToT[m]->Scale( 1.0/hToT[m]->Integral() ) ;
 
  221     if( ht[m]->GetEntries()>0 ) {
 
  223       ht[m]->Scale( 1.0/ht[m]->Integral() ) ;
 
  231   cout << 
"Output in '" << ofname << 
"'." << endl ;
 
Utility class to parse command line options. 
 
int main(int argc, char *argv[])
 
ROOT TTree parameter settings of various packages. 
 
int getFloor() const 
Get floor number. 
 
Data structure for a composite optical module. 
 
unsigned int getInclusiveNclusters(const unsigned int multiplicity) const 
return the number of clusters with at least the given multiplicity 
 
Router for direct addressing of module data in detector data structure. 
 
void reset(const JDAQSuperFrame &frame, const JModule &module)
This is a way to re-use the allocated memory. 
 
Data structure for detector geometry and calibration. 
 
vector< JCluster >::const_iterator end_m(unsigned int multiplicity) const 
returns end iterator for clusters with exactly the given multiplicity 
 
int getFrameIndex() const 
Get frame index. 
 
int first
index of module in detector data structure 
 
virtual bool hasNext() override
Check availability of next element. 
 
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object 
 
vector< JCluster >::const_iterator end_inclusive_m(unsigned int multiplicity) const 
returns end iterator for clusters with at least the given multiplicity 
 
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. 
 
int getString() const 
Get string number. 
 
void load(const std::string &file_name, JDetector &detector)
Load detector from input file. 
 
Utility class to parse command line options. 
 
unsigned int getNclusters(const unsigned int multiplicity) const 
return the number of clusters with exactly the given multiplicity 
 
const JModuleAddress & getAddress(const JObjectID &id) const 
Get address of module. 
 
virtual const pointer_type & next() override
Get next element. 
 
vector< JCluster >::const_iterator begin_inclusive_m(unsigned int multiplicity) const 
returns begin iterator for clusters with at least the given multiplicity 
 
do set_variable DETECTOR_TXT $WORKDIR detector
 
KM3NeT DAQ constants, bit handling, etc. 
 
Local coincidence cluster builder. 
 
vector< JCluster >::const_iterator begin_m(unsigned int multiplicity) const 
returns begin iterator for clusters with exactly the given multiplicity