172 {
173 std::ostringstream sout;
174
175 std::vector<MuonTrackStatisticsTool::TrackCounters*>::const_iterator counter_it =
m_allCounters.begin();
176 std::vector<MuonTrackStatisticsTool::TrackCounters*>::const_iterator counter_itEnd =
m_allCounters.end();
177 std::vector<MuonTrackStatisticsTool::TruthTrackCounters*>::const_iterator truthcounter_it_start =
m_allTruthCounters.begin();
178 std::vector<MuonTrackStatisticsTool::TruthTrackCounters*>::const_iterator truthcounter_itEnd =
m_allTruthCounters.end();
179 std::vector<MuonTrackStatisticsTool::TruthTrackCounters*>::const_iterator truthcounter_it =
m_allTruthCounters.begin();
180
181 double trksPerEvent;
182 double hitsPerTrk;
183 double etaPerTrk;
184 double tetaPerTrk;
185 double phiPerTrk;
186 double scatPerTrk;
187 double holePerTrk;
188 double chi2PerTrk;
189
190 for (; counter_it != counter_itEnd; ++counter_it) {
191 if ((*counter_it)->nEvents != 0 && (*counter_it)->nTracks != 0) {
192 trksPerEvent = (
double)(*counter_it)->nTracks / (*counter_it)->nEvents;
193 hitsPerTrk = (
double)(*counter_it)->nHits / (*counter_it)->nTracks;
194 etaPerTrk = (
double)(*counter_it)->nEtaHits / (*counter_it)->nTracks;
195 tetaPerTrk = (
double)(*counter_it)->nEtaTrig / (*counter_it)->nTracks;
196 phiPerTrk = (
double)(*counter_it)->nPhiHits / (*counter_it)->nTracks;
197 scatPerTrk = (
double)(*counter_it)->nScatter / (*counter_it)->nTracks;
198 holePerTrk = (
double)(*counter_it)->nHoles / (*counter_it)->nTracks;
199 chi2PerTrk = (*counter_it)->summedchi2 / (*counter_it)->nTracks;
200
201 } else {
202 trksPerEvent = 0.;
203 hitsPerTrk = 0.;
204 etaPerTrk = 0.;
205 tetaPerTrk = 0.;
206 phiPerTrk = 0.;
207 scatPerTrk = 0.;
208 holePerTrk = 0.;
209 chi2PerTrk = 0.;
210 }
211
212 int TruthTrackCounter = -1;
213 double trksPerTrtrk = -1;
214
216 for (truthcounter_it = truthcounter_it_start; truthcounter_it != truthcounter_itEnd; ++truthcounter_it) {
219 TruthTrackCounter = (*truthcounter_it)->nTracks;
220 ATH_MSG_INFO(
"MuonTrackStatisticsTool - Found matching TruthCollection for: " << (*counter_it)->trackLocation);
221 }
222 }
223
224 if (TruthTrackCounter == 0 && (*counter_it)->nTracks == 0) {
225 trksPerTrtrk = 1;
226 } else if (TruthTrackCounter == 0 && (*counter_it)->nTracks != 0) {
227 trksPerTrtrk = -1;
228 } else {
229 trksPerTrtrk = (
double)(*counter_it)->nTracks / (
double)TruthTrackCounter;
230 }
231 }
232
234 ATH_MSG_INFO(
"MuonTrackStatisticsTool - Could not find matching TruthCollection for: " << (*counter_it)->trackLocation);
235 sout.precision(4);
236 sout << std::endl;
237 sout << ">>>> MuonTrackStatisticsAlg Summary: Track Container = " << (*counter_it)->trackLocation << std::endl;
238 sout << "----------------------------------------------------------------------------------------------------------------------"
239 "-------------"
240 << std::endl;
241 sout << "|| Events || Tracks || Trk/Evt || Hit/Trk || Eta/Trk ||"
242 << " TrigEta/T || Phi/Trk || Scat/Tk || Hole/Tk || Ch2/dof/T || Trks/TruthT ||" << std::endl;
243
244 sout << "|| " << std::setw(7) << (*counter_it)->nEvents << " || " << std::setw(7) << (*counter_it)->nTracks << " || "
245 << std::setw(7) << trksPerEvent << " || " << std::setw(7) << hitsPerTrk << " || " << std::setw(7) << etaPerTrk << " || "
246 << std::setw(9) << tetaPerTrk << " || " << std::setw(7) << phiPerTrk << " || " << std::setw(7) << scatPerTrk << " || "
247 << std::setw(7) << holePerTrk << " || " << std::setw(9) << chi2PerTrk << " || " << std::setw(11) << "NOT DEFINED"
248 << " || " << std::endl;
249 sout << "----------------------------------------------------------------------------------------------------------------------"
250 "-------------"
251 << std::endl;
252 sout << std::endl << std::endl;
253 }
else if (trksPerTrtrk < 0 && !
m_doTruth) {
254 sout.precision(4);
255 sout << std::endl;
256 sout << ">>>> MuonTrackStatisticsAlg Summary: Track Container = " << (*counter_it)->trackLocation << std::endl;
257 sout << "--------------------------------------------------------------------------------------------------------------------"
258 << std::endl;
259 sout << "|| Events || Tracks || Trk/Evt || Hit/Trk || Eta/Trk ||"
260 << " TrigEta/T || Phi/Trk || Scat/Tk || Hole/Tk || Ch2/dof/T ||" << std::endl;
261
262 sout << "|| " << std::setw(7) << (*counter_it)->nEvents << " || " << std::setw(7) << (*counter_it)->nTracks << " || "
263 << std::setw(7) << trksPerEvent << " || " << std::setw(7) << hitsPerTrk << " || " << std::setw(7) << etaPerTrk << " || "
264 << std::setw(9) << tetaPerTrk << " || " << std::setw(7) << phiPerTrk << " || " << std::setw(7) << scatPerTrk << " || "
265 << std::setw(7) << holePerTrk << " || " << std::setw(9) << chi2PerTrk << " || " << std::endl;
266 sout << "--------------------------------------------------------------------------------------------------------------------"
267 << std::endl;
268 sout << std::endl << std::endl;
269 } else {
270 sout.precision(4);
271 sout << std::endl;
272 sout << ">>>> MuonTrackStatisticsAlg Summary: Track Container = " << (*counter_it)->trackLocation << std::endl;
273 sout << "----------------------------------------------------------------------------------------------------------------------"
274 "-------------"
275 << std::endl;
276 sout << "|| Events || Tracks || Trk/Evt || Hit/Trk || Eta/Trk ||"
277 << " TrigEta/T || Phi/Trk || Scat/Tk || Hole/Tk || Ch2/dof/T || Trks/TruthT ||" << std::endl;
278
279 sout << "|| " << std::setw(7) << (*counter_it)->nEvents << " || " << std::setw(7) << (*counter_it)->nTracks << " || "
280 << std::setw(7) << trksPerEvent << " || " << std::setw(7) << hitsPerTrk << " || " << std::setw(7) << etaPerTrk << " || "
281 << std::setw(9) << tetaPerTrk << " || " << std::setw(7) << phiPerTrk << " || " << std::setw(7) << scatPerTrk << " || "
282 << std::setw(7) << holePerTrk << " || " << std::setw(9) << chi2PerTrk << " || " << std::setw(11) << trksPerTrtrk << " || "
283 << std::endl;
284 sout << "----------------------------------------------------------------------------------------------------------------------"
285 "-------------"
286 << std::endl;
287 sout << std::endl << std::endl;
288 }
289 }
290
292 for (truthcounter_it = truthcounter_it_start; truthcounter_it != truthcounter_itEnd; ++truthcounter_it) {
293 double TruthTrksPerEvent;
294 double PIXELhitsPerTrk;
295 double SCThitsPerTrk;
296 double TRThitsPerTrk;
297 double MDThitsPerTrk;
298 double RPChitsPerTrk;
299 double TGChitsPerTrk;
300 double CSChitsPerTrk;
301
302 sout << std::endl;
303 sout << ">>>> MuonTrackStatisticsAlg Summary: Track Container = " << (*truthcounter_it)->trackLocation << std::endl;
304 for (
unsigned int i = 0;
i < 3;
i++) {
305 if ((*truthcounter_it)->nEvents != 0 && (*truthcounter_it)->nTracks != 0) {
306 TruthTrksPerEvent = (
double)(*truthcounter_it)->nTracks / (*truthcounter_it)->nEvents;
307 PIXELhitsPerTrk = (
double)(*truthcounter_it)->nPIXELhits[i] / (*truthcounter_it)->nTracks;
308 SCThitsPerTrk = (
double)(*truthcounter_it)->nSCThits[i] / (*truthcounter_it)->nTracks;
309 TRThitsPerTrk = (
double)(*truthcounter_it)->nTRThits[i] / (*truthcounter_it)->nTracks;
310 MDThitsPerTrk = (
double)(*truthcounter_it)->nMDThits[i] / (*truthcounter_it)->nTracks;
311 RPChitsPerTrk = (
double)(*truthcounter_it)->nRPChits[i] / (*truthcounter_it)->nTracks;
312 TGChitsPerTrk = (
double)(*truthcounter_it)->nTGChits[i] / (*truthcounter_it)->nTracks;
313 CSChitsPerTrk = (
double)(*truthcounter_it)->nCSChits[i] / (*truthcounter_it)->nTracks;
314
315 } else {
316 TruthTrksPerEvent = 0;
317 PIXELhitsPerTrk = 0;
318 SCThitsPerTrk = 0;
319 TRThitsPerTrk = 0;
320 MDThitsPerTrk = 0;
321 RPChitsPerTrk = 0;
322 TGChitsPerTrk = 0;
323 CSChitsPerTrk = 0;
324 }
325
326 sout.precision(4);
327 sout << "------------------------------------------------------------------------------------------------------------------"
328 "----------------------------"
329 << std::endl;
330 if (i == 0)
331 sout << "-------------------------------------------------------->>>> SubDetStat is COMMON "
332 "<<<<--------------------------------------------------------"
333 << std::endl;
334 else if (i == 1)
335 sout << "-------------------------------------------------------->>>> SubDetStat is ONTRUTH "
336 "<<<<-------------------------------------------------------"
337 << std::endl;
338 else if (i == 2)
339 sout << "-------------------------------------------------------->>>> SubDetStat is ONTRACK "
340 "<<<<-------------------------------------------------------"
341 << std::endl;
342 sout << "------------------------------------------------------------------------------------------------------------------"
343 "----------------------------"
344 << std::endl;
345 sout << "|| Events || Tracks || Trk/Evt || PIXELhits/Trk || SCThits/Trk ||"
346 << " TRThits/Trk || MDThits/Trk || RPChits/Trk || TGChits/Trk || CSChits/Trk ||" << std::endl;
347
348 sout << "|| " << std::setw(7) << (*truthcounter_it)->nEvents << " || " << std::setw(7) << (*truthcounter_it)->nTracks
349 << " || " << std::setw(7) << TruthTrksPerEvent << " || " << std::setw(13) << PIXELhitsPerTrk << " || " << std::setw(11)
350 << SCThitsPerTrk << " || " << std::setw(11) << TRThitsPerTrk << " || " << std::setw(11) << MDThitsPerTrk << " || "
351 << std::setw(11) << RPChitsPerTrk << " || " << std::setw(11) << TGChitsPerTrk << " || " << std::setw(11)
352 << CSChitsPerTrk << " || " << std::endl;
353 }
354
355 sout << "----------------------------------------------------------------------------------------------------------------------"
356 "------------------------"
357 << std::endl;
358 sout << std::endl << std::endl;
359 }
360 }
361 return sout.str();
362}