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 ;
 
   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 ; 
 
  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 ;
 
  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) {
 
  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() ) ;
 
  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 getFloor() const 
Get floor number. 
 
Data structure for a composite optical module. 
 
Router for direct addressing of module data in detector data structure. 
 
int getFrameIndex() const 
Get frame index. 
 
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object 
 
void load(const JString &file_name, JDetector &detector)
Load detector from input file. 
 
int getString() const 
Get string number. 
 
Local coincidence cluster builder.