loop over all clusters the begin/end_inclusive_m(M) methods return the begin and end iterator for clusters of multiplicity M or higher
loop over clusters of a given multiplicity the begin/end_m(M) methods return the begin and end iterator for clusters of multiplicity exactly M
   36                                {
   37  const unsigned int max_multiplicity = 31 ;
   38 
   39  
   40  
   41  
   43  string detectorFile ;
   44  double window ;
   45  int maxnslices ;
   47  string ofname ;
   48 
   49  try { 
   51    
   58    zap(argc, argv);
   59  }
   60  catch(const exception &error) {
   61    cerr << error.what() << endl ;
   62    cout << "Use option -h! to display command line options." << endl ;
   63    exit(1) ;
   64  }
   65 
   66  
   67  
   68  
   70  try {
   72  }
   74    cerr << "FATAL ERROR. Could not open detector file '" << detectorFile << "'." << endl ;
   75    exit(1) ;
   76  }
   78 
   79  
   80  
   81  
   82  const int ncolors = 5 ;
   83  const int nice_colors[ncolors] = { kRed, kBlue, kBlack, kViolet, kCyan } ;
   84 
   85  
   86  
   88  for( unsigned int m=0; m<max_multiplicity+1; ++m ) {
   89    char hname[200] ;
   90    sprintf( hname, "hToT_m%u", m ) ;
   91    char htitle[300] ;
   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)   ;
   96  }
   97 
   98  
  100  for( unsigned int m=0; m<max_multiplicity+1; ++m ) {
  101    char hname[200] ;
  102    sprintf( hname, "ht_m%u", m ) ;
  103    char htitle[300] ;
  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)   ;
  112  }
  113 
  114 
  115  
  116  
  117  TH2D hSizeVsMultiplicity("hSizeVsMultiplicity",";cluster size;cluster multiplicity",
  118                           32,-0.5,31.5,
  119                           32,-0.5,31.5 ) ;
  120  hSizeVsMultiplicity.SetOption("colz") ;
  121 
  122  
  123  
  124  
  125  cout << endl ;
  126  cout << "---------- Reading file(s) ----------" << endl ;
  127 
  129 
  131 
  132  unsigned int nTS = 0 ; 
  133  while( scan.hasNext() ) {
  135    if( (int)nTS == maxnslices ) break ;
  136    ++nTS ;
  137 
  139      cout << 
"------ Frame index = " << ts->
getFrameIndex() << endl ;
 
  140    }
  141 
  142    
  143    for(JDAQTimeslice::const_iterator sf = ts->begin() ; sf!=ts->end() ; ++sf ) {
  144      
  145      if( sf->size() == 0 ) continue ;
  146 
  147      int moduleID   = sf->getModuleID() ;
  148      int localID    = moduleRouter.getAddress(moduleID).first ;
  150 
  151      
  152      cluster_builder.reset(*sf,module) ;
  153 
  154      
  156        cout << 
"--- " << 
"S" << module.
getString() << 
"F" << 
module.getFloor() << endl ;
 
  157        cout << setw(10) << "multiplicity"
  158             << setw(20) << "excl. nclusters"
  159             << setw(20) << "incl. nclusters"
  160             << endl ;
  161        for( unsigned int m=2; m<=max_multiplicity; ++m) {
  162          if( cluster_builder.getNclusters(m) != 0 ) {
  163            cout << setw(10) << m 
  164                 << setw(20) << cluster_builder.getNclusters(m) 
  165                 << setw(20) << cluster_builder.getInclusiveNclusters(m)
  166                 << endl ;
  167          }
  168        }
  169      }
  170 
  171
  172
  173
  174
  175
  176      for( vector<JCluster>::const_iterator it=cluster_builder.begin_inclusive_m(0); it!=cluster_builder.end_inclusive_m(0); ++it ) {
  177        hSizeVsMultiplicity.Fill( it->size(), it->getMultiplicity() ) ;
  178      }
  179 
  180
  181
  182
  183
  184
  185      for( unsigned int m=0; m<=max_multiplicity; ++m) {
  186        for( vector<JCluster>::const_iterator it=cluster_builder.begin_m(m); it!=cluster_builder.end_m(m); ++it ) {
  187          
  188          for( JHitL1::const_iterator hit=it->begin(); hit!=it->end(); ++hit ) {
  189            hToT[m]->Fill( hit->getToT() ) ;
  190          }
  191          
  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() ) ;
  197            }
  198          }
  199        }
  200      }
  201 
  202    } 
  203 
  205 
  206  } 
  207 
  208  cout << "Read " << nTS << " time slices." << endl ;
  209 
  210  TFile* f = new TFile( ofname.c_str(), "recreate" ) ;
  211 
  212  hSizeVsMultiplicity.Write() ;
  213 
  214  for( unsigned int m=0; m<=max_multiplicity; ++m) {
  215    if( hToT[m]->GetEntries()>0 ) {
  216      
  217      hToT[m]->Scale( 1.0/hToT[m]->Integral() ) ;
  218      
  219      hToT[m]->Write() ;
  220    }
  221    if( ht[m]->GetEntries()>0 ) {
  222      
  223      ht[m]->Scale( 1.0/ht[m]->Integral() ) ;
  224      
  225      ht[m]->Write() ;
  226    }
  227  }
  228 
  229  f->Close() ;
  230  delete f ;
  231  cout << "Output in '" << ofname << "'." << endl ;
  232 
  233  cout << endl ;
  234}
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
 
int getString() const
Get string number.
 
Router for direct addressing of module data in detector data structure.
 
Data structure for a composite optical module.
 
Local coincidence cluster builder.
 
Utility class to parse command line options.
 
int getFrameIndex() const
Get frame index.
 
void load(const std::string &file_name, JDetector &detector)
Load detector from input file.