36int 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 ;
 
   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() ;
 
  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) {
 
  186        for( vector<JCluster>::const_iterator it=cluster_builder.
begin_m(m); it!=cluster_builder.
end_m(m); ++it ) {
 
  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 ;