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
38 {
39 const unsigned int max_multiplicity = 31 ;
40
41
42
43
45 string detectorFile ;
46 double window ;
47 int maxnslices ;
49 string ofname ;
50
51 try {
53
60 zap(argc, argv);
61 }
62 catch(const exception &error) {
63 cerr << error.what() << endl ;
64 cout << "Use option -h! to display command line options." << endl ;
65 exit(1) ;
66 }
67
68
69
70
72 try {
74 }
76 cerr << "FATAL ERROR. Could not open detector file '" << detectorFile << "'." << endl ;
77 exit(1) ;
78 }
80
81
82
83
84 const int ncolors = 5 ;
85 const int nice_colors[ncolors] = { kRed, kBlue, kBlack, kViolet, kCyan } ;
86
87
88
90 for( unsigned int m=0; m<max_multiplicity+1; ++m ) {
91 char hname[200] ;
92 sprintf( hname, "hToT_m%u", m ) ;
93 char htitle[300] ;
94 sprintf( htitle, "Exclusive %u-fold coincidence clusters;ToT [ns];a.u. (normalized)", m ) ;
95 hToT[m] = new TH1D( hname, htitle, 256, -0.5, 255.5 ) ;
96 hToT[m]->SetLineColor( nice_colors[m%ncolors] ) ;
97 hToT[m]->SetLineWidth(2) ;
98 }
99
100
102 for( unsigned int m=0; m<max_multiplicity+1; ++m ) {
103 char hname[200] ;
104 sprintf( hname, "ht_m%u", m ) ;
105 char htitle[300] ;
106 sprintf( htitle, "Exclusive %u-fold coincidence clusters;Time after first hits [ns];a.u. (normalized)", m ) ;
107 const int margin = 5 ;
108 double xmin = -margin ;
109 double xmax = ceil(window) + margin ;
110 int nbins = (int) round(xmax-xmin) ;
111 ht[m] = new TH1D( hname, htitle, nbins, xmin, xmax ) ;
112 ht[m]->SetLineColor( nice_colors[m%ncolors] ) ;
113 ht[m]->SetLineWidth(2) ;
114 }
115
116
117
118
119 TH2D hSizeVsMultiplicity("hSizeVsMultiplicity",";cluster size;cluster multiplicity",
120 32,-0.5,31.5,
121 32,-0.5,31.5 ) ;
122 hSizeVsMultiplicity.SetOption("colz") ;
123
124
125
126
127 cout << endl ;
128 cout << "---------- Reading file(s) ----------" << endl ;
129
131
133
134 unsigned int nTS = 0 ;
135 while( scan.hasNext() ) {
137 if( (int)nTS == maxnslices ) break ;
138 ++nTS ;
139
141 cout <<
"------ Frame index = " << ts->
getFrameIndex() << endl ;
142 }
143
144
145 for(JDAQTimeslice::const_iterator sf = ts->begin() ; sf!=ts->end() ; ++sf ) {
146
147 if( sf->size() == 0 ) continue ;
148
149 int moduleID = sf->getModuleID() ;
150 int localID = moduleRouter.getAddress(moduleID).first ;
152
153
154 cluster_builder.reset(*sf,module) ;
155
156
158 cout <<
"--- " <<
"S" << module.
getString() <<
"F" <<
module.getFloor() << endl ;
159 cout << setw(10) << "multiplicity"
160 << setw(20) << "excl. nclusters"
161 << setw(20) << "incl. nclusters"
162 << endl ;
163 for( unsigned int m=2; m<=max_multiplicity; ++m) {
164 if( cluster_builder.getNclusters(m) != 0 ) {
165 cout << setw(10) << m
166 << setw(20) << cluster_builder.getNclusters(m)
167 << setw(20) << cluster_builder.getInclusiveNclusters(m)
168 << endl ;
169 }
170 }
171 }
172
173
174
175
176
177
178 for( vector<JCluster>::const_iterator it=cluster_builder.begin_inclusive_m(0); it!=cluster_builder.end_inclusive_m(0); ++it ) {
179 hSizeVsMultiplicity.Fill( it->size(), it->getMultiplicity() ) ;
180 }
181
182
183
184
185
186
187 for( unsigned int m=0; m<=max_multiplicity; ++m) {
188 for( vector<JCluster>::const_iterator it=cluster_builder.begin_m(m); it!=cluster_builder.end_m(m); ++it ) {
189
190 for( JHitL1::const_iterator hit=it->begin(); hit!=it->end(); ++hit ) {
191 hToT[m]->Fill( hit->getToT() ) ;
192 }
193
194 if( it->size() > 1 ) {
195 JHitL1::const_iterator first_hit = it->begin() ;
196 JHitL1::const_iterator hit(first_hit) ;
197 for( ++hit; hit!=it->end(); ++hit ) {
198 ht[m]->Fill( hit->getT() - first_hit->getT() ) ;
199 }
200 }
201 }
202 }
203
204 }
205
207
208 }
209
210 cout << "Read " << nTS << " time slices." << endl ;
211
212 TFile* f = new TFile( ofname.c_str(), "recreate" ) ;
213
214 hSizeVsMultiplicity.Write() ;
215
216 for( unsigned int m=0; m<=max_multiplicity; ++m) {
217 if( hToT[m]->GetEntries()>0 ) {
218
219 hToT[m]->Scale( 1.0/hToT[m]->Integral() ) ;
220
221 hToT[m]->Write() ;
222 }
223 if( ht[m]->GetEntries()>0 ) {
224
225 ht[m]->Scale( 1.0/ht[m]->Integral() ) ;
226
227 ht[m]->Write() ;
228 }
229 }
230
231 f->Close() ;
232 delete f ;
233 cout << "Output in '" << ofname << "'." << endl ;
234
235 cout << endl ;
236}
#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.