ATLAS Offline Software
Loading...
Searching...
No Matches
AFPSiLayerAlgorithm.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
3*
4*
5* AFPSiLayerAlgorithm
6*
7*
8*/
9
13
14
15namespace {
16 constexpr int reorganizePlanes(const int station, const int layer)
17 {
18 bool reverse = station == 0 || station == 1;
19 return station * 4 + (reverse ? 3 - layer : layer);
20 }
21}
22
23
24AFPSiLayerAlgorithm::AFPSiLayerAlgorithm( const std::string& name, ISvcLocator* pSvcLocator )
25:AthMonitorAlgorithm(name,pSvcLocator)
26, m_afpHitContainerKey("AFPSiHitContainer")
27{
28 declareProperty("AFPSiHitContainer", m_afpHitContainerKey);
29}
30
31
33
34
36
37 using namespace Monitored;
38
41
42
43 // We must declare to the framework in initialize what SG objects we are going to use:
44 SG::ReadHandleKey<xAOD::AFPSiHitContainer> afpHitContainerKey("AFPSiHits");
45 ATH_CHECK(m_afpHitContainerKey.initialize());
46
47 ATH_MSG_INFO( "BunchCrossingKey initialization (SiT)" );
48 ATH_CHECK(m_bunchCrossingKey.initialize());
49 ATH_MSG_INFO( "initialization completed (SiT)" );
51}
52
53StatusCode AFPSiLayerAlgorithm::fillHistograms( const EventContext& ctx ) const {
54 using namespace Monitored;
55
56 auto bcidAll = Monitored::Scalar<int>("bcidAll", 0);
57 auto bcidFront = Monitored::Scalar<int>("bcidFront", 0);
58 auto bcidMiddle = Monitored::Scalar<int>("bcidMiddle", 0);
59 auto bcidEnd = Monitored::Scalar<int>("bcidEnd", 0);
60
61 auto numberOfEventsPerLumiblockFront = Monitored::Scalar<int>("numberOfEventsPerLumiblockFront", 0);
62 auto numberOfEventsPerLumiblockMiddle = Monitored::Scalar<int>("numberOfEventsPerLumiblockMiddle", 0);
63 auto numberOfEventsPerLumiblockEnd = Monitored::Scalar<int>("numberOfEventsPerLumiblockEnd", 0);
64
66 numberOfEventsPerLumiblockFront = eventInfo->lumiBlock();
67 numberOfEventsPerLumiblockMiddle = eventInfo->lumiBlock();
68 numberOfEventsPerLumiblockEnd = eventInfo->lumiBlock();
69
70 // BCX handler
71 const unsigned int bcid = eventInfo->bcid();
72 const unsigned int run_number = eventInfo->runNumber();
74 if (!bcidHdl.isValid()) {
75 ATH_MSG_ERROR( "Unable to retrieve BunchCrossing conditions object (SiT)" );
76 }
77 const BunchCrossingCondData* bcData{*bcidHdl};
78
79 int bx_diff = int(run_number) >= 521800 ? 2 : 1;
80 // Classifying bunches by position in train (Front, Middle, End)
81 enum { FRONT, MIDDLE, END, NPOS } position = NPOS;
82 if(bcData->isFilled(bcid))
83 {
84 bcidAll = bcid;
85 fill("AFPSiLayerTool", bcidAll);
86 if(!bcData->isFilled(bcid-bx_diff))
87 {
88 position = FRONT;
89 bcidFront = bcid;
90 fill("AFPSiLayerTool", bcidFront);
91 fill("AFPSiLayerTool", numberOfEventsPerLumiblockFront);
92 }
93 else
94 {
95 if(bcData->isFilled(bcid+bx_diff))
96 {
97 position = MIDDLE;
98 bcidMiddle = bcid;
99 fill("AFPSiLayerTool", bcidMiddle);
100 fill("AFPSiLayerTool", numberOfEventsPerLumiblockMiddle);
101 }
102 else
103 {
104 position = END;
105 bcidEnd = bcid;
106 fill("AFPSiLayerTool", bcidEnd);
107 fill("AFPSiLayerTool", numberOfEventsPerLumiblockEnd);
108 }
109 }
110 }
111
112
113 // Declare the quantities which should be monitored:
114 auto lb = Monitored::Scalar<int>("lb", 0);
115 auto muPerBX = Monitored::Scalar<float>("muPerBX", 0.0);
116 //auto run = Monitored::Scalar<int>("run",0);
117
118 auto nSiHits = Monitored::Scalar<int>("nSiHits", 1);
119
120 auto pixelRowIDChip = Monitored::Scalar<int>("pixelRowIDChip", 0);
121 auto pixelColIDChip = Monitored::Scalar<int>("pixelColIDChip", 0);
122
123 auto timeOverThreshold = Monitored::Scalar<int>("timeOverThreshold", 0);
124
125 auto clusterX = Monitored::Scalar<float>("clusterX", 0.0);
126 auto clusterY = Monitored::Scalar<float>("clusterY", 0.0);
127 auto clustersInPlanes = Monitored::Scalar<int>("clustersInPlanes", 0);
128
129 auto trackX = Monitored::Scalar<float>("trackX", 0.0);
130 auto trackY = Monitored::Scalar<float>("trackY", 0.0);
131
132 auto planeHits = Monitored::Scalar<int>("planeHits", 0);
133
134 auto numberOfHitsPerStation = Monitored::Scalar<int>("numberOfHitsPerStation", 0);
135
136 auto lbEvents = Monitored::Scalar<int>("lbEvents", 0);
137 auto lbHits = Monitored::Scalar<int>("lbHits", 0);
138 auto lbEventsStations = Monitored::Scalar<int>("lbEventsStations", 0);
139 auto lbEventsStationsAll = Monitored::Scalar<int>("lbEventsStationsAll", 0);
140
141 auto planes = Monitored::Scalar<int>("planes", 0);
142
143 auto eventsPerStation = Monitored::Scalar<int>("eventsPerStation", 0);
144
145 auto clusterToT = Monitored::Scalar<int>("clusterToT", 0);
146
147 lb = eventInfo->lumiBlock();
148 lbEvents = eventInfo->lumiBlock();
149 //muPerBX = lbAverageInteractionsPerCrossing(ctx);
150 muPerBX = lbInteractionsPerCrossing(ctx);
151 if (muPerBX == 0.0) {
152 ATH_MSG_DEBUG("AverageInteractionsPerCrossing is 0, forcing to 1.0");
153 muPerBX=1.0;
154 }
155 fill("AFPSiLayerTool", lb, muPerBX);
156 fill("AFPSiLayerTool", lbEvents);
157
158
160 if(! afpHitContainer.isValid())
161 {
162 ATH_MSG_WARNING("evtStore() does not contain hits collection with name " << m_afpHitContainerKey);
163 return StatusCode::SUCCESS;
164 }
165
166 ATH_CHECK( afpHitContainer.initialize() );
167
168 nSiHits = afpHitContainer->size();
169 fill("AFPSiLayerTool", lb, nSiHits);
170
171 int eventsInStations[4] = {};
172 int numberOfHitsPerPlane[4][4] = {};
173
174 for(const xAOD::AFPSiHit *hitsItr: *afpHitContainer)
175 {
176 lb = eventInfo->lumiBlock();
177 lbHits = eventInfo->lumiBlock();
178 lbEventsStations = eventInfo->lumiBlock();
179 lbEventsStationsAll = eventInfo->lumiBlock();
180 pixelRowIDChip = hitsItr->pixelRowIDChip();
181 pixelColIDChip = hitsItr->pixelColIDChip();
182 timeOverThreshold = hitsItr->timeOverThreshold();
183
184
185 if (hitsItr->stationID()<4 && hitsItr->stationID()>=0 && hitsItr->pixelLayerID()<4 && hitsItr->pixelLayerID()>=0)
186 {
187 ++eventsInStations[hitsItr->stationID()];
188
189 fill(m_tools[m_StationPlaneGroup.at(m_stationnames.at(hitsItr->stationID())).at(m_pixlayers.at(hitsItr->pixelLayerID()))], pixelRowIDChip, pixelColIDChip);
190 fill(m_tools[m_StationPlaneGroup.at(m_stationnames.at(hitsItr->stationID())).at(m_pixlayers.at(hitsItr->pixelLayerID()))], pixelRowIDChip);
191 fill(m_tools[m_StationPlaneGroup.at(m_stationnames.at(hitsItr->stationID())).at(m_pixlayers.at(hitsItr->pixelLayerID()))], pixelColIDChip);
192 fill(m_tools[m_StationPlaneGroup.at(m_stationnames.at(hitsItr->stationID())).at(m_pixlayers.at(hitsItr->pixelLayerID()))], timeOverThreshold);
193
194 planeHits = hitsItr->pixelLayerID();
195 fill(m_tools[m_StationGroup.at(m_stationnames.at(hitsItr->stationID()))], planeHits);
196
197 ++numberOfHitsPerPlane[hitsItr->stationID()][hitsItr->pixelLayerID()];
198 numberOfHitsPerStation = hitsItr->stationID();
199 fill("AFPSiLayerTool", numberOfHitsPerStation);
200
201 fill("AFPSiLayerTool", lbHits);
202 }
203 else ATH_MSG_WARNING("Unrecognised station index: " << hitsItr->stationID());
204 }
205
206 auto hitsPerPlaneProfile = Monitored::Scalar<float>("hitsPerPlaneProfile", 0.0);
207 auto lbhitsPerPlaneProfile = Monitored::Scalar<int>("lbhitsPerPlaneProfile", 0);
208 auto hitsPerPlaneEventsMu = Monitored::Scalar<float>("hitsPerPlaneEventsMu", 0.0);
209 auto hitPerPlaneEventMuIndex = Monitored::Scalar<int>("hitPerPlaneEventMuIndex", 0);
210
211 lbhitsPerPlaneProfile = eventInfo->lumiBlock();
212 for(int i_station = 0; i_station < 4; i_station++)
213 for(int j_layer = 0; j_layer < 4; j_layer++)
214 {
215 hitsPerPlaneProfile = numberOfHitsPerPlane[i_station][j_layer]/muPerBX;
216 fill(m_tools[m_StationPlaneGroup.at(m_stationnames.at(i_station)).at(m_pixlayers.at(j_layer))], lbhitsPerPlaneProfile, hitsPerPlaneProfile);
217 if (muPerBX != 0.0) {
218 hitsPerPlaneEventsMu = numberOfHitsPerPlane[i_station][j_layer] / muPerBX;
219 }
220 hitPerPlaneEventMuIndex = reorganizePlanes(i_station, j_layer);
221 fill("AFPSiLayerTool", hitPerPlaneEventMuIndex, hitsPerPlaneEventsMu);
222 }
223
224 bool noEventsInStations = true;
225 for(int i=0; i<4; i++)
226 {
227 if(eventsInStations[i]>0) {
228 fill(m_tools[m_StationGroup.at(m_stationnames.at(i))], lbEventsStations);
229
230 eventsPerStation = i * 4;
231 fill("AFPSiLayerTool", eventsPerStation);
232 ++eventsPerStation;
233 fill("AFPSiLayerTool", eventsPerStation);
234 ++eventsPerStation;
235 fill("AFPSiLayerTool", eventsPerStation);
236 ++eventsPerStation;
237 fill("AFPSiLayerTool", eventsPerStation);
238
239 noEventsInStations = false;
240 }
241 }
242 if(!noEventsInStations)
243 {
244 fill("AFPSiLayerTool", lbEventsStationsAll);
245 }
246
247 // Filling of cluster and track 2D histograms
248 AFPMon::AFPFastReco fast(afpHitContainer.get());
249 fast.reco();
250
251 // Track histograms:
252 unsigned int totalTracksAll[4] = {};
253 unsigned int totalTracksFront[4] = {};
254 unsigned int totalTracksMiddle[4] = {};
255 unsigned int totalTracksEnd[4] = {};
256
257 for (const auto& track : fast.tracks())
258 {
259 trackX = track.x * 1.0;
260 trackY = track.y * 1.0;
261 fill(m_tools[m_StationGroup.at(m_stationnames.at(track.station))], trackY, trackX);
262
263 if (position == FRONT)
264 {
265 ++totalTracksFront[track.station];
266 ++totalTracksAll[track.station];
267 }
268 else if (position == MIDDLE)
269 {
270 ++totalTracksMiddle[track.station];
271 ++totalTracksAll[track.station];
272 }
273 else if (position == END)
274 {
275 ++totalTracksEnd[track.station];
276 ++totalTracksAll[track.station];
277 }
278 }
279
280 auto lbTracksAll = Monitored::Scalar<int>("lbTracksAll", 0);
281 auto lbTracksFront = Monitored::Scalar<int>("lbTracksFront", 0);
282 auto lbTracksMiddle = Monitored::Scalar<int>("lbTracksMiddle", 0);
283 auto lbTracksEnd = Monitored::Scalar<int>("lbTracksEnd", 0);
284
285 auto Total_tracks_All_profile = Monitored::Scalar<float>("Total_tracks_All_profile", 0.0);
286 auto Total_tracks_Front_profile = Monitored::Scalar<float>("Total_tracks_Front_profile", 0.0);
287 auto Total_tracks_Middle_profile = Monitored::Scalar<float>("Total_tracks_Middle_profile", 0.0);
288 auto Total_tracks_End_profile = Monitored::Scalar<float>("Total_tracks_End_profile", 0.0);
289
290 lbTracksAll = eventInfo->lumiBlock();
291 lbTracksFront = eventInfo->lumiBlock();
292 lbTracksMiddle = eventInfo->lumiBlock();
293 lbTracksEnd = eventInfo->lumiBlock();
294
295 for(int i = 0; i < 4; i++)
296 {
297 Total_tracks_All_profile = totalTracksAll[i] / muPerBX;
298 fill(m_tools[m_StationGroup.at(m_stationnames.at(i))], lbTracksAll, Total_tracks_All_profile);
299 totalTracksAll[i] = 0;
300
301 Total_tracks_Front_profile = totalTracksFront[i] / muPerBX;
302 if (position == FRONT)
303 fill(m_tools[m_StationGroup.at(m_stationnames.at(i))], lbTracksFront, Total_tracks_Front_profile);
304 totalTracksFront[i] = 0;
305
306 Total_tracks_Middle_profile = totalTracksMiddle[i] / muPerBX;
307 if (position == MIDDLE)
308 fill(m_tools[m_StationGroup.at(m_stationnames.at(i))], lbTracksMiddle, Total_tracks_Middle_profile);
309 totalTracksMiddle[i] = 0;
310
311 Total_tracks_End_profile = totalTracksEnd[i] / muPerBX;
312 if (position == END)
313 fill(m_tools[m_StationGroup.at(m_stationnames.at(i))], lbTracksEnd, Total_tracks_End_profile);
314 totalTracksEnd[i] = 0;
315 }
316
317 // Cluster histograms
318 unsigned int totalClustersAll[4][4] = {};
319 unsigned int totalClustersFront[4][4] = {};
320 unsigned int totalClustersMiddle[4][4] = {};
321 unsigned int totalClustersEnd[4][4] = {};
322
323 auto clustersPerPlaneAllPP = Monitored::Scalar<float>("clustersPerPlaneAllPP", 0.0);
324 auto clustersPerPlaneFrontPP = Monitored::Scalar<float>("clustersPerPlaneFrontPP", 0.0);
325 auto clustersPerPlaneMiddlePP = Monitored::Scalar<float>("clustersPerPlaneMiddlePP", 0.0);
326 auto clustersPerPlaneEndPP = Monitored::Scalar<float>("clustersPerPlaneEndPP", 0.0);
327
328 auto lbClustersPerPlanesAll = Monitored::Scalar<int>("lbClustersPerPlanesAll", 0);
329 auto lbClustersPerPlanesFront = Monitored::Scalar<int>("lbClustersPerPlanesFront", 0);
330 auto lbClustersPerPlanesMiddle = Monitored::Scalar<int>("lbClustersPerPlanesMiddle", 0);
331 auto lbClustersPerPlanesEnd = Monitored::Scalar<int>("lbClustersPerPlanesEnd", 0);
332
333 lbClustersPerPlanesAll = eventInfo->lumiBlock();
334 lbClustersPerPlanesFront = eventInfo->lumiBlock();
335 lbClustersPerPlanesMiddle = eventInfo->lumiBlock();
336 lbClustersPerPlanesEnd = eventInfo->lumiBlock();
337
338 for(const auto& cluster : fast.clusters())
339 {
340 clusterX = cluster.x * 1.0;
341 clusterY = cluster.y * 1.0;
342 fill(m_tools[m_StationPlaneGroup.at(m_stationnames.at(cluster.station)).at(m_pixlayers.at(cluster.layer))], clusterY, clusterX);
343 if (cluster.station == 0 || cluster.station == 1)
344 {
345 clustersInPlanes = reorganizePlanes(cluster.station, cluster.layer);
346 }
347 else
348 {
349 clustersInPlanes = (cluster.station*4)+cluster.layer;
350 }
351 fill("AFPSiLayerTool", clustersInPlanes);
352
353 clusterToT = cluster.sumToT;
354 fill(m_tools[m_StationPlaneGroup.at(m_stationnames.at(cluster.station)).at(m_pixlayers.at(cluster.layer))], clusterToT);
355
356 if (position == FRONT)
357 {
358 ++totalClustersFront[cluster.station][cluster.layer];
359 ++totalClustersAll[cluster.station][cluster.layer];
360 }
361 else if (position == MIDDLE)
362 {
363 ++totalClustersMiddle[cluster.station][cluster.layer];
364 ++totalClustersAll[cluster.station][cluster.layer];
365 }
366 else if (position == END)
367 {
368 ++totalClustersEnd[cluster.station][cluster.layer];
369 ++totalClustersAll[cluster.station][cluster.layer];
370 }
371 }
372
373 for(int i_station = 0; i_station < 4; i_station++)
374 for(int j_layer = 0; j_layer < 4; j_layer++)
375 {
376 clustersPerPlaneAllPP = totalClustersAll[i_station][j_layer] / muPerBX;
377 fill(m_tools[m_StationPlaneGroup.at(m_stationnames.at(i_station)).at(m_pixlayers.at(j_layer))], lbClustersPerPlanesAll, clustersPerPlaneAllPP);
378 totalClustersAll[i_station][j_layer] = 0;
379
380 clustersPerPlaneFrontPP = totalClustersFront[i_station][j_layer] / muPerBX;
381 if (position == FRONT)
382 fill(m_tools[m_StationPlaneGroup.at(m_stationnames.at(i_station)).at(m_pixlayers.at(j_layer))], lbClustersPerPlanesFront, clustersPerPlaneFrontPP);
383 totalClustersFront[i_station][j_layer] = 0;
384
385 clustersPerPlaneMiddlePP = totalClustersMiddle[i_station][j_layer] / muPerBX;
386 if (position == MIDDLE)
387 fill(m_tools[m_StationPlaneGroup.at(m_stationnames.at(i_station)).at(m_pixlayers.at(j_layer))], lbClustersPerPlanesMiddle, clustersPerPlaneMiddlePP);
388 totalClustersMiddle[i_station][j_layer] = 0;
389
390 clustersPerPlaneEndPP = totalClustersEnd[i_station][j_layer] / muPerBX;
391 if (position == END)
392 fill(m_tools[m_StationPlaneGroup.at(m_stationnames.at(i_station)).at(m_pixlayers.at(j_layer))], lbClustersPerPlanesEnd, clustersPerPlaneEndPP);
393 totalClustersEnd[i_station][j_layer] = 0;
394 }
395
396 return(fillHistogramsPlaneEff(*afpHitContainer));
397} // end of fillHistograms
398
400 using namespace Monitored;
401
402 // Define 2D histograms for tries and successes
403 Monitored::Scalar<bool> sit_plane_eff_passed("sit_plane_eff_passed", false);
404 Monitored::Scalar<float> sit_plane_eff_triedX("sit_plane_eff_triedX", 0.0);
405 Monitored::Scalar<float> sit_plane_eff_triedY("sit_plane_eff_triedY", 0.0);
406
407 auto triesX = Monitored::Scalar<float>("triesX", 0.0);
408 auto triesY = Monitored::Scalar<float>("triesY", 0.0);
409
410 auto successX = Monitored::Scalar<float>("successX", 0.0);
411 auto successY = Monitored::Scalar<float>("successY", 0.0);
412
413
414 auto clusterXLocal = Monitored::Scalar<float>("clusterXLocal", 0.0);
415 auto clusterYLocal = Monitored::Scalar<float>("clusterYLocal", 0.0);
416
417 auto clusterXTag = Monitored::Scalar<float>("clusterXTag", 0.0);
418 auto clusterYTag = Monitored::Scalar<float>("clusterYTag", 0.0);
419
420 AFPMon::AFPFastReco fast(&afpHitContainer);
421 fast.reco();
422
423 int min_hits[4] = {2, 3, 3, 3};
424 int numStations = 4;
425 int numPlanes = 4;
426
427 // Count clusters per station and plane
428 std::vector<std::vector<int>> nclusters_planes(numStations, std::vector<int>(numPlanes, 0));
429 for (const auto& cluster : fast.clusters()) {
430 ++nclusters_planes[cluster.station][cluster.layer];
431 }
432
433 // Count planes with clusters at each station
434 std::vector<std::vector<int>> nclusters_other_planes(numStations, std::vector<int>(numPlanes, 0));
435 for (int iStation = 0; iStation < numStations; ++iStation) {
436 for (int iPlane = 0; iPlane < numPlanes; ++iPlane) {
437 for (int ip = 0; ip < numPlanes; ++ip) {
438 if (iPlane != ip && nclusters_planes[iStation][ip] > 0) {
439 ++nclusters_other_planes[iStation][iPlane];
440 }
441 }
442 }
443 }
444
445 // Precomputed tag planes
446 std::array<std::set<int>, 4> precomputed_tag_planes = {
447 std::set<int>{1, 2, 3},
448 std::set<int>{0, 1, 2, 3},
449 std::set<int>{0, 1, 2, 3},
450 std::set<int>{0, 1, 2, 3}
451 };
452
453 // Precomputed clusters by Stations and Planes
454 using ClusterType = std::decay_t<decltype(*fast.clusters().begin())>;
455 std::vector<std::vector<std::vector<ClusterType>>> clusters_by_station_layer(numStations,
456 std::vector<std::vector<ClusterType>>(numPlanes));
457
458 for (const auto& cluster : fast.clusters()) {
459 clusters_by_station_layer[cluster.station][cluster.layer].push_back(cluster);
460 }
461
462 for (int iStation = 0; iStation < numStations; ++iStation) {
463 for (int iPlane = 0; iPlane < numPlanes; ++iPlane) {
464 // Skip if no enough hits in other planes
465 if (nclusters_other_planes[iStation][iPlane] < min_hits[iStation]) {continue;}
466
467 std::set<int> tag_planes = precomputed_tag_planes[iStation];
468 tag_planes.erase(iPlane);
469
470 std::vector<int> v_tag_planes(tag_planes.begin(), tag_planes.end());
471 int seed = v_tag_planes[0]; // Take first plane as a seed
472
473 // Iterate only stations coresponding to the given Station and Layer
474 for (const auto& cluster : clusters_by_station_layer[iStation][seed]) {
475 int found_in_other_tag_planes = 0;
476
477 // Check other tag planes using lookup
478 for (size_t i = 1; i < v_tag_planes.size(); ++i) {
479 int tag_plane = v_tag_planes[i];
480 bool found = false;
481
482 for (const auto& clusterTag : clusters_by_station_layer[iStation][tag_plane]) {
483 if (std::fabs(cluster.x - clusterTag.x) < 2.0 && std::fabs(cluster.y - clusterTag.y) < 2.0) {
484 found = true;
485 ++found_in_other_tag_planes;
486 break;
487 }
488 }
489 // if not found in current tag plane
490 if (!found) {break;}
491 }
492
493 // Check if valid tag
494 if (found_in_other_tag_planes == static_cast<int>(v_tag_planes.size()) - 1) {
495 sit_plane_eff_triedX = cluster.x;
496 sit_plane_eff_triedY = cluster.y;
497
498 // Check probe plane
499 for (const auto& clusterTag : clusters_by_station_layer[iStation][iPlane]) {
500 if (std::fabs(cluster.x - clusterTag.x) < 2.0 && std::fabs(cluster.y - clusterTag.y) < 2.0) {
501 sit_plane_eff_passed = true;
502 break;
503 }
504 }
505
506 fill(m_tools[m_StationPlaneGroup.at(m_stationnames.at(iStation)).at(m_pixlayers.at(iPlane))],
507 sit_plane_eff_passed, sit_plane_eff_triedY, sit_plane_eff_triedX);
508 sit_plane_eff_passed = false;
509 }
510 }
511 }
512 }
513 return StatusCode::SUCCESS;
514}
515
516
Definitions of AFP stations identification numbers.
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_ERROR(x)
#define ATH_MSG_INFO(x)
#define ATH_MSG_WARNING(x)
#define ATH_MSG_DEBUG(x)
Property holding a SG store/key/clid from which a ReadHandle is made.
SG::ReadCondHandleKey< BunchCrossingCondData > m_bunchCrossingKey
std::map< std::string, int > m_StationGroup
virtual StatusCode fillHistogramsPlaneEff(const xAOD::AFPSiHitContainer &) const
SG::ReadHandleKey< xAOD::AFPSiHitContainer > m_afpHitContainerKey
std::vector< std::string > m_stationnames
virtual StatusCode fillHistograms(const EventContext &ctx) const override
adds event to the monitoring histograms
std::vector< std::string > m_pixlayers
virtual StatusCode initialize() override
initialize
AFPSiLayerAlgorithm(const std::string &name, ISvcLocator *pSvcLocator)
std::map< std::string, std::map< std::string, int > > m_StationPlaneGroup
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)
virtual StatusCode initialize() override
initialize
SG::ReadHandle< xAOD::EventInfo > GetEventInfo(const EventContext &) const
Return a ReadHandle for an EventInfo object (get run/event numbers, etc.).
AthMonitorAlgorithm(const std::string &name, ISvcLocator *pSvcLocator)
Constructor.
ToolHandleArray< GenericMonitoringTool > m_tools
Array of Generic Monitoring Tools.
bool isFilled(const bcid_type bcid) const
The simplest query: Is the bunch crossing filled or not?
Declare a monitored scalar variable.
Property holding a SG store/key/clid from which a ReadHandle is made.
virtual bool isValid() override final
Can the handle be successfully dereferenced?
const_pointer_type get() const
Dereference the pointer, but don't cache anything.
StatusCode initialize(bool used=true)
Verify that the handle has been configured properly.
double timeOverThreshold(unsigned int m_word)
int lb
Definition globals.cxx:23
void fill(const ToolHandle< GenericMonitoringTool > &groupHandle, std::vector< std::reference_wrapper< Monitored::IMonitoredVariable > > &&variables) const
Fills a vector of variables to a group by reference.
virtual float lbInteractionsPerCrossing(const EventContext &ctx) const
Calculate instantaneous number of interactions, i.e.
Generic monitoring tool for athena components.
std::vector< V > buildToolMap(const ToolHandleArray< GenericMonitoringTool > &tools, const std::string &baseName, int nHist)
Builds an array of indices (base case).
@ layer
Definition HitInfo.h:79
AFPSiHit_v2 AFPSiHit
Definition AFPSiHit.h:12
AFPSiHitContainer_v2 AFPSiHitContainer