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
   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 ;
 
   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 ; 
 
  133   while( scan.hasNext() ) {
 
  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() ;
 
  148       int localID    = moduleRouter.getAddress(moduleID).first ;
 
  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) {
 
  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)
 
  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() ) ;
 
  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 ;
 
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
 
int getFloor() const
Get floor number.
 
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.