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
int getString() const
Get string number.
void load(const std::string &file_name, JDetector &detector)
Load detector from input file.
do set_variable DETECTOR_TXT $WORKDIR detector
Local coincidence cluster builder.