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
36 {
37 const unsigned int max_multiplicity = 31 ;
38
39
40
41
43 string detectorFile ;
44 double window ;
45 int maxnslices ;
47 string ofname ;
48
49 try {
51
58 zap(argc, argv);
59 }
60 catch(const exception &error) {
61 cerr << error.what() << endl ;
62 cout << "Use option -h! to display command line options." << endl ;
63 exit(1) ;
64 }
65
66
67
68
70 try {
72 }
74 cerr << "FATAL ERROR. Could not open detector file '" << detectorFile << "'." << endl ;
75 exit(1) ;
76 }
78
79
80
81
82 const int ncolors = 5 ;
83 const int nice_colors[ncolors] = { kRed, kBlue, kBlack, kViolet, kCyan } ;
84
85
86
88 for( unsigned int m=0; m<max_multiplicity+1; ++m ) {
89 char hname[200] ;
90 sprintf( hname, "hToT_m%u", m ) ;
91 char htitle[300] ;
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) ;
96 }
97
98
100 for( unsigned int m=0; m<max_multiplicity+1; ++m ) {
101 char hname[200] ;
102 sprintf( hname, "ht_m%u", m ) ;
103 char htitle[300] ;
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) ;
112 }
113
114
115
116
117 TH2D hSizeVsMultiplicity("hSizeVsMultiplicity",";cluster size;cluster multiplicity",
118 32,-0.5,31.5,
119 32,-0.5,31.5 ) ;
120 hSizeVsMultiplicity.SetOption("colz") ;
121
122
123
124
125 cout << endl ;
126 cout << "---------- Reading file(s) ----------" << endl ;
127
129
131
132 unsigned int nTS = 0 ;
133 while( scan.hasNext() ) {
135 if( (int)nTS == maxnslices ) break ;
136 ++nTS ;
137
139 cout <<
"------ Frame index = " << ts->
getFrameIndex() << endl ;
140 }
141
142
143 for(JDAQTimeslice::const_iterator sf = ts->begin() ; sf!=ts->end() ; ++sf ) {
144
145 if( sf->size() == 0 ) continue ;
146
147 int moduleID = sf->getModuleID() ;
148 int localID = moduleRouter.getAddress(moduleID).first ;
150
151
152 cluster_builder.reset(*sf,module) ;
153
154
156 cout <<
"--- " <<
"S" << module.
getString() <<
"F" <<
module.getFloor() << endl ;
157 cout << setw(10) << "multiplicity"
158 << setw(20) << "excl. nclusters"
159 << setw(20) << "incl. nclusters"
160 << endl ;
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)
166 << endl ;
167 }
168 }
169 }
170
171
172
173
174
175
176 for( vector<JCluster>::const_iterator it=cluster_builder.begin_inclusive_m(0); it!=cluster_builder.end_inclusive_m(0); ++it ) {
177 hSizeVsMultiplicity.Fill( it->size(), it->getMultiplicity() ) ;
178 }
179
180
181
182
183
184
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 ) {
187
188 for( JHitL1::const_iterator hit=it->begin(); hit!=it->end(); ++hit ) {
189 hToT[m]->Fill( hit->getToT() ) ;
190 }
191
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() ) ;
197 }
198 }
199 }
200 }
201
202 }
203
205
206 }
207
208 cout << "Read " << nTS << " time slices." << endl ;
209
210 TFile* f = new TFile( ofname.c_str(), "recreate" ) ;
211
212 hSizeVsMultiplicity.Write() ;
213
214 for( unsigned int m=0; m<=max_multiplicity; ++m) {
215 if( hToT[m]->GetEntries()>0 ) {
216
217 hToT[m]->Scale( 1.0/hToT[m]->Integral() ) ;
218
219 hToT[m]->Write() ;
220 }
221 if( ht[m]->GetEntries()>0 ) {
222
223 ht[m]->Scale( 1.0/ht[m]->Integral() ) ;
224
225 ht[m]->Write() ;
226 }
227 }
228
229 f->Close() ;
230 delete f ;
231 cout << "Output in '" << ofname << "'." << endl ;
232
233 cout << endl ;
234}
#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.