ATLAS Offline Software
PixelAthClusterMonAlg.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3  */
11 //for Amg::error helper function:
18 
19 
20 PixelAthClusterMonAlg::PixelAthClusterMonAlg(const std::string& name, ISvcLocator* pSvcLocator) :
21  AthMonitorAlgorithm(name, pSvcLocator),
22  m_holeSearchTool("InDet::InDetTrackHoleSearchTool/InDetHoleSearchTool", this),
23  m_trackSelTool("InDet::InDetTrackSelectionTool/TrackSelectionTool", this),
24  m_atlasid(nullptr)
25 {
26  declareProperty("HoleSearchTool", m_holeSearchTool);
27  declareProperty("TrackSelectionTool", m_trackSelTool);
28 
29  declareProperty("doOnline", m_doOnline = false);
30  declareProperty("doLumiBlock", m_doLumiBlock = false);
31  declareProperty("doLowOccupancy", m_doLowOccupancy = false);
32  declareProperty("doHighOccupancy", m_doHighOccupancy = true);
33  declareProperty("doHeavyIonMon", m_doHeavyIonMon = false);
34  declareProperty("doFEPlots", m_doFEPlots = false);
35 }
36 
38 
39 
42  ATH_CHECK(detStore()->retrieve(m_atlasid, "AtlasID"));
43  if (!m_holeSearchTool.empty()) ATH_CHECK(m_holeSearchTool.retrieve());
44  if (!m_trackSelTool.empty()) ATH_CHECK(m_trackSelTool.retrieve());
45 
46  ATH_CHECK(m_tracksKey.initialize());
48  return StatusCode::SUCCESS;
49 }
50 
51 StatusCode PixelAthClusterMonAlg::fillHistograms(const EventContext& ctx) const {
52  using namespace Monitored;
53 
54  int lb = GetEventInfo(ctx)->lumiBlock();
55 
56  //*******************************************************************************
57  //************************** Begin of filling Status Histograms ******************
58  //*******************************************************************************
59 
60 
61  ATH_MSG_DEBUG("Filling Status Monitoring Histograms");
62  float index = 1.0;
63  float nBadMod[PixLayers::COUNT] = {
64  0.
65  };
66  float nDisabledMod[PixLayers::COUNT] = {
67  0.
68  };
69  float nBadAndDisabledMod[PixLayers::COUNT] = {
70  0.
71  };
72  int phiMod(-99);
73  int etaMod(-99);
74  bool copyFEval(false);
75  AccumulatorArrays clusPerEventArray = {{{0}}, {{0}}, {{0}}, {{0}}, {{0}}, {{0}}};
76  VecAccumulator2DMap Map_Of_Modules_Status(*this, "MapOfModulesStatus", true);
77 
78  VecAccumulator2DMap Map_Of_FEs_Status(*this, "MapOfFEsStatus");
79 
82  for (auto idIt = m_pixelid->wafer_begin(); idIt != m_pixelid->wafer_end(); ++idIt) {
83  Identifier waferID = *idIt;
84  IdentifierHash id_hash = m_pixelid->wafer_hash(waferID);
85 
86  int pixlayer = getPixLayersID(m_pixelid->barrel_ec(waferID), m_pixelid->layer_disk(waferID));
87  if (pixlayer == 99) continue;
88  getPhiEtaMod(waferID, phiMod, etaMod, copyFEval);
89 
90  if (isActive( !m_pixelDetElStatusActiveOnly.empty() ? pixel_active.cptr() : nullptr, id_hash) )
91  {
92  if (isGood( !m_pixelDetElStatus.empty() ? pixel_status.cptr() : nullptr, id_hash) ) index = 0;
93  else {
94  index = 1; // active but bad modules
95  if (pixlayer == PixLayers::kIBL) {
96  int iblsublayer = (m_pixelid->eta_module(waferID) > -7 && m_pixelid->eta_module(waferID) < 6) ? PixLayers::kIBL2D : PixLayers::kIBL3D;
97  nBadMod[iblsublayer] += inv_nmod_per_layer[iblsublayer];
98  } else nBadMod[pixlayer] += inv_nmod_per_layer[pixlayer];
99  }
100  }
101  else {
102  index = 2; // inactive (disabled) modules
103  if (pixlayer == PixLayers::kIBL) {
104  int iblsublayer = (m_pixelid->eta_module(waferID) > -7 && m_pixelid->eta_module(waferID) < 6) ? PixLayers::kIBL2D : PixLayers::kIBL3D;
105  nDisabledMod[iblsublayer] += inv_nmod_per_layer[iblsublayer];
106  } else nDisabledMod[pixlayer] += inv_nmod_per_layer[pixlayer];
107  switch (pixlayer) {
108  case PixLayers::kECA:
109  clusPerEventArray.DA[phiMod][etaMod] = -1;
110  break;
111 
112  case PixLayers::kECC:
113  clusPerEventArray.DC[phiMod][etaMod] = -1;
114  break;
115 
116  case PixLayers::kBLayer:
117  clusPerEventArray.B0[phiMod][etaMod] = -1;
118  break;
119 
120  case PixLayers::kLayer1:
121  clusPerEventArray.B1[phiMod][etaMod] = -1;
122  break;
123 
124  case PixLayers::kLayer2:
125  clusPerEventArray.B2[phiMod][etaMod] = -1;
126  break;
127 
128  case PixLayers::kIBL:
129  clusPerEventArray.IBL[phiMod][etaMod] = -1;
130  if (copyFEval) clusPerEventArray.IBL[phiMod][++etaMod] = -1;
131  break;
132  }
133  }
134 
135  Map_Of_Modules_Status.add(pixlayer, waferID, index);
136 
137  // Per FE Status
138  //
139  if (m_doFEPlots) {
140  int nFE = getNumberOfFEs(pixlayer, m_pixelid->eta_module(waferID));
141  for (int iFE = 0; iFE < nFE; iFE++) {
142  Identifier pixelID = m_pixelReadout->getPixelIdfromHash(id_hash, iFE, 1, 1);
143  if (not pixelID.is_valid()) continue;
144  auto [is_active,is_good ] =isChipGood( !m_pixelDetElStatusActiveOnly.empty() ? pixel_active.cptr() : nullptr,
145  !m_pixelDetElStatus.empty() ? pixel_status.cptr() : nullptr,
146  id_hash,
147  iFE);
148  if (is_active)
149  {
150  if (is_good) index = 0;
151  else index = 1;
152  }
153  else index = 2;
154  Map_Of_FEs_Status.add(pixlayer, waferID, iFE, index);
155  }
156  }
157  } // end of pixelid wafer loop
158 
159  fill2DProfLayerAccum(Map_Of_Modules_Status);
160  fill1DProfLumiLayers("BadModulesPerLumi", lb, nBadMod);
161  fill1DProfLumiLayers("DisabledModulesPerLumi", lb, nDisabledMod);
162 
163  for (unsigned int ii = 0; ii < PixLayers::COUNT; ii++) nBadAndDisabledMod[ii] = nBadMod[ii]+nDisabledMod[ii];
164  fill1DProfLumiLayers("BadAndDisabledModulesPerLumi", lb, nBadAndDisabledMod);
165 
166  if (m_doFEPlots) fill2DProfLayerAccum(Map_Of_FEs_Status);
167 
168  //*******************************************************************************
169  //*************************** End of filling Status Histograms ******************
170  //*******************************************************************************
171 
172 
173  //*******************************************************************************
174  //************************** Begin of filling Track Histograms ******************
175  //*******************************************************************************
176 
177 
178  ATH_MSG_DEBUG("Filling Track Monitoring Histograms");
179 
180  VecAccumulator2DMap TSOS_Outlier(*this, "TSOSOutlier");
181  VecAccumulator2DMap TSOS_Outlier_FE(*this, "TSOSOutlierFE");
182  VecAccumulator2DMap TSOS_Hole(*this, "TSOSHole");
183  VecAccumulator2DMap TSOS_Hole_FE(*this, "TSOSHoleFE");
184  VecAccumulator2DMap TSOS_Measurement(*this, "TSOSMeasurement");
185  VecAccumulator2DMap TSOS_Measurement_FE(*this, "TSOSMeasurementFE");
186  VecAccumulator2DMap HolesRatio(*this, "HolesRatio");
187  VecAccumulator2DMap MissHitsRatio(*this, "MissHitsRatio");
188  auto trackGroup = getGroup("Track");
189 
190  auto tracks = SG::makeHandle(m_tracksKey, ctx);
191 
192  if (!(tracks.isValid())) {
193  ATH_MSG_ERROR("PixelMonitoring: Track container " << m_tracksKey.key() << " could not be found.");
194  auto dataread_err = Monitored::Scalar<int>("trkdataread_err", DataReadErrors::ContainerInvalid);
195  fill(trackGroup, dataread_err);
196  return StatusCode::RECOVERABLE;
197  } else {
198  ATH_MSG_DEBUG("PixelMonitoring: Track container " << tracks.name() << " is found.");
199  }
200 
201  int ntracksPerEvent = 0;
202  bool havePixelHits(false);
203  std::vector<std::pair<Identifier, double> > ClusterIDs;
204 
205  auto lbval = Monitored::Scalar<int>("pixclusmontool_lb", lb);
206 
207  for (auto track: *tracks) {
208  if (track == nullptr || track->perigeeParameters() == nullptr || track->trackSummary() == nullptr ||
209  track->trackSummary()->get(Trk::numberOfPixelHits) == 0) {
210  ATH_MSG_DEBUG("PixelMonitoring: Track either invalid or it does not contain pixel hits, continuing...");
211  continue;
212  }
213 
214  int nPixelHits = 0;
215  const Trk::Perigee* measPerigee = static_cast<const Trk::Perigee*>(track->perigeeParameters());
216  bool passJOTrkTightCut = static_cast<bool>(m_trackSelTool->accept(*track));
217  bool pass1hole1GeVptTightCut = (passJOTrkTightCut && (measPerigee->pT() / 1000.0 > 1.0)); // misshit ratios
218  bool pass1hole5GeVptTightCut = (passJOTrkTightCut && (measPerigee->pT() / 1000.0 > 5.0)); // eff vs lumi
219 
220  const Trk::Track* trackWithHoles(track);
221  std::unique_ptr<const Trk::Track> trackWithHolesUnique = nullptr;
222  if (track->trackSummary()->get(Trk::numberOfPixelHoles) > 0) {
223  trackWithHolesUnique.reset(m_holeSearchTool->getTrackWithHoles(*track));
224  trackWithHoles = trackWithHolesUnique.get();
225  }
226  const Trk::TrackStates* trackStates = trackWithHoles->trackStateOnSurfaces();
227  for (auto trackStateOnSurface: *trackStates) {
228  const Trk::MeasurementBase* mesBase = trackStateOnSurface->measurementOnTrack();
229 
230  const Trk::RIO_OnTrack* RIOOnTrack = nullptr;
231  if (mesBase && mesBase->type(Trk::MeasurementBaseType::RIO_OnTrack)) {
232  RIOOnTrack = static_cast<const Trk::RIO_OnTrack*>(mesBase);
233  }
234 
235  if (mesBase && !RIOOnTrack) continue; // skip pseudomeasurements
236  // but not hits, holes,
237  // outliers
238 
239  const Trk::TrackParameters* trkParameters = trackStateOnSurface->trackParameters();
240  Identifier surfaceID;
241  if (mesBase && mesBase->associatedSurface().associatedDetectorElement()) {
242  surfaceID = mesBase->associatedSurface().associatedDetectorElement()->identify();
243  } else { // holes, perigee
244  if (trkParameters) {
245  surfaceID = trkParameters->associatedSurface().associatedDetectorElementIdentifier();
246  } else {
247  ATH_MSG_INFO("PixelMonitoring: pointer of TSOS to track parameters or associated surface is null");
248  continue;
249  }
250  }
251  if (!m_atlasid->is_pixel(surfaceID)) continue;
252  int pixlayer = getPixLayersID(m_pixelid->barrel_ec(surfaceID), m_pixelid->layer_disk(surfaceID));
253  if (pixlayer == 99) continue;
254 
255  float nOutlier = 0.;
256  float nHole = 0.;
257  auto effval = Monitored::Scalar<float>("HitEffAll_val", 0.);
258  auto efflb = Monitored::Scalar<float>("HitEffAll_lb", lb);
259  const InDetDD::SiDetectorElement *sde = dynamic_cast<const InDetDD::SiDetectorElement *>(trkParameters->associatedSurface().associatedDetectorElement());
260  const InDetDD::SiLocalPosition trkLocalPos = trkParameters->localPosition();
261  Identifier locPosID;
262 
263  if (trackStateOnSurface->type(Trk::TrackStateOnSurface::Outlier))
264  {
265  nOutlier = 1.0;
266  const InDet::SiClusterOnTrack *siclus = dynamic_cast<const InDet::SiClusterOnTrack *>(mesBase);
267  if ( mesBase && siclus) {
268  locPosID = siclus->identify();
269  if ( !(locPosID.is_valid()) ) {
270  ATH_MSG_INFO("Pixel Monitoring: got invalid track local position on surface for an outlier.");
271  continue;
272  }
273  TSOS_Outlier.add(pixlayer, locPosID, 1.0);
274  if (!m_doOnline) {
275  TSOS_Outlier_FE.add(pixlayer, locPosID, m_pixelReadout->getFE(locPosID, locPosID), 1.0);
276  }
277  }
278  }
279  else if (trackStateOnSurface->type(Trk::TrackStateOnSurface::Hole))
280  {
281  nHole = 1.0;
282  locPosID = sde->identifierOfPosition(trkLocalPos);
283  if ( !(locPosID.is_valid()) ) {
284  ATH_MSG_INFO("Pixel Monitoring: got invalid track local position on surface for a hole.");
285  continue;
286  }
287  TSOS_Hole.add(pixlayer, locPosID, 1.0);
288  if (!m_doOnline) {
289  TSOS_Hole_FE.add(pixlayer, locPosID, m_pixelReadout->getFE(locPosID, locPosID), 1.0);
290  }
291  }
292  else if (trackStateOnSurface->type(Trk::TrackStateOnSurface::Measurement))
293  {
294  if (not mesBase) continue;
296  dynamic_cast<const InDetDD::SiDetectorElement*>(mesBase->associatedSurface().associatedDetectorElement());
297  const InDet::SiClusterOnTrack* clus = dynamic_cast<const InDet::SiClusterOnTrack*>(mesBase);
298  if (!side || !clus) continue;
299  const InDet::SiCluster* RawDataClus = dynamic_cast<const InDet::SiCluster*>(clus->prepRawData());
300  if (!RawDataClus || !RawDataClus->detectorElement()->isPixel()) continue;
301 
302  nPixelHits++;
303 
304  locPosID = clus->identify();
305  if ( !(locPosID.is_valid()) ) {
306  ATH_MSG_INFO("Pixel Monitoring: got invalid cluster on track ID.");
307  continue;
308  }
309  TSOS_Measurement.add(pixlayer, locPosID, 1.0);
310  if (!m_doOnline) {
311  TSOS_Measurement_FE.add(pixlayer, locPosID, m_pixelReadout->getFE(locPosID, locPosID), 1.0);
312  }
313  effval = 1.;
314 
315  const Trk::AtaPlane* trackAtPlane = dynamic_cast<const Trk::AtaPlane*>(trkParameters);
316  if (trackAtPlane) {
317  const Amg::Vector2D localpos = trackAtPlane->localPosition();
318 
319  // Get local error matrix for hit and track and calc pull
320  const AmgSymMatrix(5) trackErrMat = (*trackAtPlane->covariance());
321  const Amg::MatrixX clusErrMat = clus->localCovariance();
322 
323  double error_sum =
324  sqrt(pow(Amg::error(trackErrMat, Trk::locX), 2) + pow(Amg::error(clusErrMat, Trk::locX), 2));
325  auto resPhi = Monitored::Scalar<float>("res_phi", clus->localParameters()[Trk::locX] - localpos[0]);
326  fill(trackGroup, resPhi);
327  if (error_sum != 0) {
328  auto pullPhi = Monitored::Scalar<float>("pull_phi", resPhi / error_sum);
329  fill(trackGroup, pullPhi);
330  }
331 
332  error_sum = sqrt(pow(Amg::error(trackErrMat, Trk::locY), 2) + pow(Amg::error(clusErrMat, Trk::locY), 2));
333  auto resEta = Monitored::Scalar<float>("res_eta", clus->localParameters()[Trk::locY] - localpos[1]);
334  fill(trackGroup, resEta);
335  if (error_sum != 0) {
336  auto pullEta = Monitored::Scalar<float>("pull_eta", resEta / error_sum);
337  fill(trackGroup, pullEta);
338  }
339  // Filling containers, which hold id's of hits and clusters on track
340  // _and_ incident angle information for later normalization
341 
342  Amg::Vector3D mynormal = side->normal();
343  Amg::Vector3D mytrack = trackAtPlane->momentum();
344  double trknormcomp = mytrack.dot(mynormal);
345 
346  double mytrack_mag = mytrack.mag();
347  double cosalpha = 0.;
348  if (mytrack_mag != 0) cosalpha = std::abs(trknormcomp / mytrack_mag);
349  ClusterIDs.emplace_back(clus->identify(), cosalpha);
350  }
351  } // end of measurement case
352  else continue;
353 
354  if (pass1hole5GeVptTightCut) {
355  if (pixlayer == PixLayers::kIBL) {
356  int iblsublayer = (m_pixelid->eta_module(surfaceID) > -7 && m_pixelid->eta_module(surfaceID) < 6) ? PixLayers::kIBL2D : PixLayers::kIBL3D;
357  fill(pixLayersLabel[iblsublayer], efflb, effval);
358  } else fill(pixLayersLabel[pixlayer], efflb, effval);
359  }
360 
361  if (pass1hole1GeVptTightCut && locPosID.is_valid()) {
362  HolesRatio.add(pixlayer, locPosID, nHole);
363  MissHitsRatio.add(pixlayer, locPosID, nOutlier + nHole);
364  }
365  } // end of TSOS loop
366 
367  ntracksPerEvent++;
368  auto nph = Monitored::Scalar<int>("npixhits_per_track", nPixelHits);
369  auto nphwgt = Monitored::Scalar<float>("npixhits_per_track_wgt", 1.0);
370  fill(trackGroup, lbval, nph, nphwgt);
371 
372  int trkfitndf = track->fitQuality()->numberDoF();
373  double trkfitchi2 = track->fitQuality()->chiSquared();
374  if (trkfitndf != 0) {
375  auto trkChiN = Monitored::Scalar<float>("fit_chi2byndf", trkfitchi2 / trkfitndf);
376  fill(trackGroup, trkChiN);
377  }
378  havePixelHits = havePixelHits || (nPixelHits > 0);
379  } // end of track loop
380 
381  if (!havePixelHits) {
382  auto dataread_err = Monitored::Scalar<int>("trkdataread_err", DataReadErrors::EmptyContainer);
383  fill(trackGroup, dataread_err);
384  }
385 
386  fill2DProfLayerAccum(HolesRatio);
387  fill2DProfLayerAccum(MissHitsRatio);
388  fill2DProfLayerAccum(TSOS_Outlier);
389  fill2DProfLayerAccum(TSOS_Hole);
390  fill2DProfLayerAccum(TSOS_Measurement);
391  if (!m_doOnline) {
392  fill2DProfLayerAccum(TSOS_Outlier_FE);
393  fill2DProfLayerAccum(TSOS_Hole_FE);
394  fill2DProfLayerAccum(TSOS_Measurement_FE);
395  }
396 
397  sort(ClusterIDs.begin(), ClusterIDs.end(),
398  [](const std::pair<Identifier, double>& left, const std::pair<Identifier, double>& right) {
399  return left.first < right.first;
400  });
401 
402  auto nTrks = Monitored::Scalar<int>("ntrks_per_event", ntracksPerEvent);
403  fill(trackGroup, lbval, nTrks);
404 
405  //*******************************************************************************
406  //**************************** End of filling Track Histograms ******************
407  //*******************************************************************************
408 
409  //*******************************************************************************
410  //************************ Begin of filling Cluster Histograms ******************
411  //*******************************************************************************
412 
413  ATH_MSG_DEBUG("Filling Cluster Monitoring Histograms");
414 
415 
416  auto clToTcosAlphaLB = Monitored::Scalar<float>("ClusterToTxCosAlphaOnTrack_lb", lb);
417 
418  VecAccumulator2DMap Cluster_LVL1A_Mod(*this, "ClusterLVL1AMod");
419  VecAccumulator2DMap Cluster_LVL1A_SizeCut(*this, "ClusterLVL1ASizeCut");
420  VecAccumulator2DMap Cluster_LVL1A_Mod_OnTrack(*this, "ClusterLVL1AModOnTrack");
421  VecAccumulator2DMap Cluster_LVL1A_SizeCut_OnTrack(*this, "ClusterLVL1ASizeCutOnTrack");
422  VecAccumulator2DMap ClusterMap_Mon(*this, "ClusterMapMon");
423  VecAccumulator2DMap ClusterMap_Mon_OnTrack(*this, "ClusterMapMonOnTrack");
424  VecAccumulator2DMap Cluster_Size_Map_OnTrack(*this, "ClusterSizeMapOnTrack");
425  VecAccumulator2DMap Cluster_Occupancy(*this, "ClusterOccupancy");
426  VecAccumulator2DMap Cluster_Occupancy_OnTrack(*this, "ClusterOccupancyOnTrack");
427  VecAccumulator2DMap Clus_Occ_SizeCut(*this, "ClusOccSizeCut");
428  VecAccumulator2DMap Clus_Occ_SizeCut_OnTrack(*this, "ClusOccSizeCutOnTrack");
429  VecAccumulator2DMap Cluster_FE_Occupancy(*this, "ClusterFEOccupancy");
430  VecAccumulator2DMap Cluster_FE_Occupancy_OnTrack(*this, "ClusterFEOccupancyOnTrack");
431 
432  auto clusterGroup = getGroup("Cluster");
433  auto clusterGroup_OnTrack = getGroup("Cluster_OnTrack");
434 
435  auto pixel_clcontainer = SG::makeHandle(m_clustersKey, ctx);
436 
437  if (!(pixel_clcontainer.isValid())) {
438  ATH_MSG_ERROR("Pixel Monitoring: Pixel Cluster container " << m_clustersKey.key() << " could not be found.");
439  auto dataread_err = Monitored::Scalar<int>("clsdataread_err", DataReadErrors::ContainerInvalid);
440  fill(clusterGroup, dataread_err);
441  return StatusCode::RECOVERABLE;
442  } else {
443  ATH_MSG_DEBUG("Pixel Monitoring: Pixel Cluster container " << pixel_clcontainer.name() << " is found.");
444  }
445 
446  int nclusters = 0;
447  int nclusters_ontrack = 0;
448  float nclusters_mod[PixLayers::COUNT] = {
449  0.
450  };
451  float nclusters_ontrack_mod[PixLayers::COUNT] = {
452  0.
453  };
454 
455  Identifier clusID;
456  for (auto colNext: *pixel_clcontainer) {
457  const InDet::PixelClusterCollection* ClusterCollection(colNext);
458  if (!ClusterCollection) {
459  ATH_MSG_DEBUG("Pixel Monitoring: Pixel Cluster container is empty.");
460  auto dataread_err = Monitored::Scalar<int>("clsdataread_err", DataReadErrors::CollectionInvalid);
461  fill(clusterGroup, dataread_err);
462  continue;
463  }
464 
465  for (auto p_clus: *ClusterCollection) {
466  clusID = p_clus->identify();
467  int pixlayer = getPixLayersID(m_pixelid->barrel_ec(clusID), m_pixelid->layer_disk(clusID));
468  if (pixlayer == 99) continue;
469  getPhiEtaMod(clusID, phiMod, etaMod, copyFEval);
470 
471  const InDet::PixelCluster& cluster = *p_clus;
472  nclusters++;
473 
474  // begin timing histos
475  //
476  auto clLVL1A = Monitored::Scalar<float>("Cluster_LVL1A_lvl1a", cluster.LVL1A());
477  fill(clusterGroup, clLVL1A);
478  Cluster_LVL1A_Mod.add(pixlayer, clusID, cluster.LVL1A() + 0.00001);
479  if (cluster.rdoList().size() > 1) Cluster_LVL1A_SizeCut.add(pixlayer, clusID, cluster.LVL1A() + 0.00001);
480  if (pixlayer == PixLayers::kIBL) {
481  int iblsublayer = (m_pixelid->eta_module(clusID) > -7 && m_pixelid->eta_module(clusID) < 6) ? PixLayers::kIBL2D : PixLayers::kIBL3D;
482  if (cluster.totalToT() > clusterToTMinCut[iblsublayer]) fill("ClusterLVL1AToTCut_" + pixLayersLabel[iblsublayer], clLVL1A);
483  nclusters_mod[iblsublayer]++;
484  } else {
485  if (cluster.totalToT() > clusterToTMinCut[pixlayer]) fill("ClusterLVL1AToTCut_" + pixLayersLabel[pixlayer], clLVL1A);
486  nclusters_mod[pixlayer]++;
487  }
488  //
489  // end timing histos
490  // begin cluster rate
491  //
492  if (m_doOnline) ClusterMap_Mon.add(pixlayer, clusID);
493  //
494  // end cluster rate
495  // begin cluster occupancy
496  //
497  Cluster_Occupancy.add(pixlayer, clusID);
498  if (m_doFEPlots) {
499  Cluster_FE_Occupancy.add(pixlayer, clusID, m_pixelReadout->getFE(clusID, clusID), 1.0);
500  }
501  if (cluster.rdoList().size() > 1) Clus_Occ_SizeCut.add(pixlayer, clusID);
502  // end cluster occupancy
503 
504  double cosalpha(0.);
505  if (isClusterOnTrack(clusID, ClusterIDs, cosalpha)) {
506  nclusters_ontrack++;
507  switch (pixlayer) {
508  case PixLayers::kECA:
509  clusPerEventArray.DA[phiMod][etaMod]++;
510  break;
511 
512  case PixLayers::kECC:
513  clusPerEventArray.DC[phiMod][etaMod]++;
514  break;
515 
516  case PixLayers::kBLayer:
517  clusPerEventArray.B0[phiMod][etaMod]++;
518  break;
519 
520  case PixLayers::kLayer1:
521  clusPerEventArray.B1[phiMod][etaMod]++;
522  break;
523 
524  case PixLayers::kLayer2:
525  clusPerEventArray.B2[phiMod][etaMod]++;
526  break;
527 
528  case PixLayers::kIBL:
529  clusPerEventArray.IBL[phiMod][etaMod]++;
530  break;
531  }
532  // begin timing histos
533  //
534  clLVL1A = cluster.LVL1A();
535  fill(clusterGroup_OnTrack, clLVL1A);
536  Cluster_LVL1A_Mod_OnTrack.add(pixlayer, clusID, cluster.LVL1A() + 0.00001);
537  if (cluster.rdoList().size() > 1) Cluster_LVL1A_SizeCut_OnTrack.add(pixlayer, clusID,
538  cluster.LVL1A() + 0.00001);
539  //
540  // end timing histos
541  // begin cluster sizes
542  //
543  auto clSize = Monitored::Scalar<float>("ClusterSizeOnTrack_clsize", cluster.rdoList().size());
544  auto clSizeEtaModule = Monitored::Scalar<float>("ClusterSizeOnTrack_em", m_pixelid->eta_module(clusID));
545  if (abs(m_pixelid->barrel_ec(clusID)) != 0) clSizeEtaModule = m_pixelid->layer_disk(clusID) + 1;
546  fill("ClusterGroupsizeVsEtaOnTrack_" + pixBaseLayersLabel[pixlayer], clSizeEtaModule, clSize);
547 
548  Cluster_Size_Map_OnTrack.add(pixlayer, clusID, cluster.rdoList().size());
549  //
550  // end cluster sizes
551  // begin cluster rate
552  //
553  if (m_doOnline) ClusterMap_Mon_OnTrack.add(pixlayer, clusID);
554  //
555  // end cluster rate
556  // begin cluster occupancy
557  //
558  Cluster_Occupancy_OnTrack.add(pixlayer, clusID);
559  if (m_doFEPlots) {
560  Cluster_FE_Occupancy_OnTrack.add(pixlayer, clusID, m_pixelReadout->getFE(clusID, clusID), 1.0);
561  }
562  if (cluster.rdoList().size() > 1) Clus_Occ_SizeCut_OnTrack.add(pixlayer, clusID);
563  //
564  // end cluster occupancy
565  // begin cluster ToT, 1D timing, charge
566  //
567  if (pixlayer == PixLayers::kIBL)
568  {
569  pixlayer = (m_pixelid->eta_module(clusID) > -7 && m_pixelid->eta_module(clusID) < 6) ? PixLayers::kIBL2D : PixLayers::kIBL3D;
570  }
571  if (cluster.totalToT() > clusterToTMinCut[pixlayer]) fill("ClusterLVL1AToTCutOnTrack_" + pixLayersLabel[pixlayer], clLVL1A);
572 
573  auto clToTcosAlpha = Monitored::Scalar<float>("ClusterToTxCosAlphaOnTrack_val", cluster.totalToT() * cosalpha);
574  fill(pixLayersLabel[pixlayer], clToTcosAlphaLB, clToTcosAlpha);
575 
576  if (!m_doOnline) {
577  auto clQcosAlpha = Monitored::Scalar<float>("ClusterQxCosAlphaOnTrack_val", cluster.totalCharge() * cosalpha);
578  fill(pixLayersLabel[pixlayer], clQcosAlpha);
579  }
580  nclusters_ontrack_mod[pixlayer]++;
581  //
582  // end cluster ToT, 1D timing, charge
583  } // end on track
584  } // end cluster collection
585  }
586  fill2DProfLayerAccum(Cluster_LVL1A_Mod);
587  fill2DProfLayerAccum(Cluster_LVL1A_SizeCut);
588  fill2DProfLayerAccum(Cluster_LVL1A_Mod_OnTrack);
589  fill2DProfLayerAccum(Cluster_LVL1A_SizeCut_OnTrack);
590  if (m_doOnline) {
591  fill2DProfLayerAccum(ClusterMap_Mon);
592  fill2DProfLayerAccum(ClusterMap_Mon_OnTrack);
593  }
594  fill2DProfLayerAccum(Cluster_Size_Map_OnTrack);
595  fill2DProfLayerAccum(Cluster_Occupancy);
596  fill2DProfLayerAccum(Cluster_Occupancy_OnTrack);
597  fill2DProfLayerAccum(Clus_Occ_SizeCut);
598  fill2DProfLayerAccum(Clus_Occ_SizeCut_OnTrack);
599  if (m_doFEPlots) {
600  fill2DProfLayerAccum(Cluster_FE_Occupancy);
601  fill2DProfLayerAccum(Cluster_FE_Occupancy_OnTrack);
602  }
603  // begin cluster rates
604  //
605  auto nCls = Monitored::Scalar<int>("ClustersPerEvent_val", nclusters);
606  fill(clusterGroup, lbval, nCls);
607  auto nClsOnTrk = Monitored::Scalar<int>("ClustersPerEventOnTrack_val", nclusters_ontrack);
608  fill(clusterGroup_OnTrack, lbval, nClsOnTrk);
609  for (unsigned int ii = 0; ii < PixLayers::COUNT; ii++) {
610  auto vals = Monitored::Scalar<float>("ClustersPerEvent_val", nclusters_mod[ii]);
611  auto vals_ontrack = Monitored::Scalar<float>("ClustersPerEventOnTrack_val", nclusters_ontrack_mod[ii]);
612  fill(pixLayersLabel[ii], vals, vals_ontrack);
613  }
614 
615  if (nclusters > 0) {
616  auto clsFracOnTrack = Monitored::Scalar<float>("cls_frac_ontrack", (float) nclusters_ontrack / nclusters);
617  fill(clusterGroup_OnTrack, lbval, clsFracOnTrack);
618  } else {
619  auto dataread_err = Monitored::Scalar<int>("clsdataread_err", DataReadErrors::EmptyContainer);
620  fill(clusterGroup, dataread_err);
621  }
622 
623  fill1DProfLumiLayers("ClustersPerLumi", lb, nclusters_mod);
624  fill1DProfLumiLayers("ClustersPerLumiOnTrack", lb, nclusters_ontrack_mod);
625 
626  fillFromArrays("ClusterOccupancyPP0OnTrack", clusPerEventArray);
627 
628  if (ntracksPerEvent > 0) {
629  for (unsigned int ii = 0; ii < PixLayers::COUNT; ii++) nclusters_ontrack_mod[ii] /= ntracksPerEvent;
630  fill1DProfLumiLayers("NumClustersPerTrackPerLumi", lb, nclusters_ontrack_mod);
631  }
632  //
633  // end cluster rate
634  ClusterIDs.clear();
635 
636  //*******************************************************************************
637  //************************** End of filling Cluster Histograms ******************
638  //*******************************************************************************
639 
640  return StatusCode::SUCCESS;
641 }
python.PyKernel.retrieve
def retrieve(aClass, aKey=None)
Definition: PyKernel.py:110
PixelAthClusterMonAlg.h
AtlasDetectorID::is_pixel
bool is_pixel(Identifier id) const
Definition: AtlasDetectorID.h:760
InDetDD::SolidStateDetectorElementBase::identifierOfPosition
Identifier identifierOfPosition(const Amg::Vector2D &localPos) const
Full identifier of the cell for a given position: assumes a raw local position (no Lorentz shift)
Definition: SolidStateDetectorElementBase.cxx:217
Trk::numberOfPixelHits
@ numberOfPixelHits
number of pixel layers on track with absence of hits
Definition: Tracking/TrkEvent/TrkTrackSummary/TrkTrackSummary/TrackSummary.h:57
PixelAthMonitoringBase::getPixLayersID
int getPixLayersID(int ec, int ld) const
helper function to get layers ID
Definition: PixelAthMonitoringBase.cxx:317
PixelAthClusterMonAlg::m_atlasid
const AtlasDetectorID * m_atlasid
Definition: PixelAthClusterMonAlg.h:45
Amg::MatrixX
Eigen::Matrix< double, Eigen::Dynamic, Eigen::Dynamic > MatrixX
Dynamic Matrix - dynamic allocation.
Definition: EventPrimitives.h:29
Trk::Surface::associatedDetectorElement
const TrkDetElementBase * associatedDetectorElement() const
return associated Detector Element
PixelID::wafer_end
const_id_iterator wafer_end(void) const
Definition: PixelID.cxx:925
MeasurementBase.h
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
Trk::locX
@ locX
Definition: ParamDefs.h:43
PixelAthMonitoringBase::m_pixelid
const PixelID * m_pixelid
Definition: PixelAthMonitoringBase.h:142
PixLayers::kBLayer
@ kBLayer
Definition: PixelAthMonitoringBase.h:24
Trk::locY
@ locY
local cartesian
Definition: ParamDefs.h:44
SG::ReadHandle::cptr
const_pointer_type cptr()
Dereference the pointer.
Trk::Track
The ATLAS Track class.
Definition: Tracking/TrkEvent/TrkTrack/TrkTrack/Track.h:73
PixelAthClusterMonAlg::m_doFEPlots
bool m_doFEPlots
Definition: PixelAthClusterMonAlg.h:59
TauGNNUtils::Variables::Track::nPixelHits
bool nPixelHits(const xAOD::TauJet &, const xAOD::TauTrack &track, double &out)
Definition: TauGNNUtils.cxx:542
PixelID::barrel_ec
int barrel_ec(const Identifier &id) const
Values of different levels (failure returns 0)
Definition: PixelID.h:619
Amg::Vector2D
Eigen::Matrix< double, 2, 1 > Vector2D
Definition: GeoPrimitives.h:48
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:70
index
Definition: index.py:1
Trk::ParametersBase::associatedSurface
virtual const Surface & associatedSurface() const override=0
Access to the Surface associated to the Parameters.
AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
Definition: AthCommonDataStore.h:145
Trk::Track::trackStateOnSurfaces
const Trk::TrackStates * trackStateOnSurfaces() const
return a pointer to a const DataVector of const TrackStateOnSurfaces.
Trk::ParametersT
Dummy class used to allow special convertors to be called for surfaces owned by a detector element.
Definition: EMErrorDetail.h:25
PixelAthMonitoringBase::m_pixelDetElStatusActiveOnly
SG::ReadHandleKey< InDet::SiDetectorElementStatus > m_pixelDetElStatusActiveOnly
Optional read handle to get status data to test whether a pixel detector element is active.
Definition: PixelAthMonitoringBase.h:156
pixLayersLabel
const std::string pixLayersLabel[PixLayers::COUNT]
Definition: PixelAthMonitoringBase.h:33
EventPrimitivesHelpers.h
Trk::Surface::associatedDetectorElementIdentifier
Identifier associatedDetectorElementIdentifier() const
return Identifier of the associated Detector Element
conifer::pow
constexpr int pow(int x)
Definition: conifer.h:20
PixLayers::kLayer2
@ kLayer2
Definition: PixelAthMonitoringBase.h:24
PixelAthMonitoringBase::initialize
virtual StatusCode initialize() override
initialize
Definition: PixelAthMonitoringBase.cxx:103
PixelID::wafer_begin
const_id_iterator wafer_begin(void) const
Iterators over full set of ids. Wafer iterator is sorted.
Definition: PixelID.cxx:921
PixelAthMonitoringBase::m_pixelDetElStatus
SG::ReadHandleKey< InDet::SiDetectorElementStatus > m_pixelDetElStatus
Optional read handle to get status data to test whether a pixel detector element is good.
Definition: PixelAthMonitoringBase.h:149
Trk::PrepRawData::rdoList
const std::vector< Identifier > & rdoList() const
return the List of rdo identifiers (pointers)
PixelAthClusterMonAlg::m_tracksKey
SG::ReadHandleKey< TrackCollection > m_tracksKey
Definition: PixelAthClusterMonAlg.h:50
DataReadErrors::CollectionInvalid
@ CollectionInvalid
Definition: PixelAthMonitoringBase.h:30
Trk::RIO_OnTrack
Definition: RIO_OnTrack.h:70
SiClusterOnTrack.h
PixelAthMonitoringBase::m_pixelReadout
ServiceHandle< InDetDD::IPixelReadoutManager > m_pixelReadout
Definition: PixelAthMonitoringBase.h:139
PixelAthClusterMonAlg::m_doHeavyIonMon
bool m_doHeavyIonMon
Definition: PixelAthClusterMonAlg.h:58
PixelAthClusterMonAlg::m_doOnline
bool m_doOnline
Definition: PixelAthClusterMonAlg.h:54
Trk::TrkDetElementBase::identify
virtual Identifier identify() const =0
Identifier.
SG::VarHandleKey::key
const std::string & key() const
Return the StoreGate ID for the referenced object.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:141
SG::VarHandleKey::empty
bool empty() const
Test if the key is blank.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:150
AmgSymMatrix
#define AmgSymMatrix(dim)
Definition: EventPrimitives.h:52
PixelAthMonitoringBase::getPixelDetElStatus
SG::ReadHandle< InDet::SiDetectorElementStatus > getPixelDetElStatus(const SG::ReadHandleKey< InDet::SiDetectorElementStatus > &key, const EventContext &ctx) const
Definition: PixelAthMonitoringBase.h:158
AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::detStore
const ServiceHandle< StoreGateSvc > & detStore() const
The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.
Definition: AthCommonDataStore.h:95
Trk::TrackStateOnSurface::Outlier
@ Outlier
This TSoS contains an outlier, that is, it contains a MeasurementBase/RIO_OnTrack which was not used ...
Definition: TrackStateOnSurface.h:122
TRT::Hit::side
@ side
Definition: HitInfo.h:83
AthMonitorAlgorithm
Base class for Athena Monitoring Algorithms.
Definition: AthMonitorAlgorithm.h:36
PixelAthClusterMonAlgCfg.clusterGroup
dictionary clusterGroup
begin cluster timing
Definition: PixelAthClusterMonAlgCfg.py:196
PixelAthMonitoringBase::fill2DProfLayerAccum
void fill2DProfLayerAccum(const VecAccumulator2DMap &accumulator) const
take VecAccumulator2DMap and fill the corresponding group
Definition: PixelAthMonitoringBase.cxx:119
InDetDD::SiLocalPosition
Definition: SiLocalPosition.h:31
SG::makeHandle
SG::ReadCondHandle< T > makeHandle(const SG::ReadCondHandleKey< T > &key, const EventContext &ctx=Gaudi::Hive::currentContext())
Definition: ReadCondHandle.h:269
PixelAthMonitoringBase::isChipGood
std::tuple< bool, bool > isChipGood(const IdentifierHash &module_hash, unsigned int chip_i) const
Definition: PixelAthMonitoringBase.h:184
AtlasDetectorID.h
This class provides an interface to generate or decode an identifier for the upper levels of the dete...
DataReadErrors::EmptyContainer
@ EmptyContainer
Definition: PixelAthMonitoringBase.h:30
PixelID::wafer_hash
IdentifierHash wafer_hash(Identifier wafer_id) const
wafer hash from id
Definition: PixelID.h:387
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
python.BunchSpacingUtils.lb
lb
Definition: BunchSpacingUtils.py:88
PixelAthClusterMonAlg::m_trackSelTool
ToolHandle< InDet::IInDetTrackSelectionTool > m_trackSelTool
Definition: PixelAthClusterMonAlg.h:43
Trk::TrackStateOnSurface::Hole
@ Hole
A hole on the track - this is defined in the following way.
Definition: TrackStateOnSurface.h:128
Monitored
Generic monitoring tool for athena components.
Definition: GenericMonitoringTool.h:30
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
InDet::PixelCluster::totalToT
int totalToT() const
Definition: InnerDetector/InDetRecEvent/InDetPrepRawData/InDetPrepRawData/PixelCluster.h:205
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
PixelAthClusterMonAlg::PixelAthClusterMonAlg
PixelAthClusterMonAlg(const std::string &name, ISvcLocator *pSvcLocator)
Definition: PixelAthClusterMonAlg.cxx:20
PixelAthMonitoringBase::isActive
bool isActive(const InDet::SiDetectorElementStatus *element_status, const IdentifierHash &module_hash) const
Definition: PixelAthMonitoringBase.h:170
PixelAthClusterMonAlg::m_clustersKey
SG::ReadHandleKey< InDet::PixelClusterContainer > m_clustersKey
Definition: PixelAthClusterMonAlg.h:47
PixLayers::kLayer1
@ kLayer1
Definition: PixelAthMonitoringBase.h:24
PixLayers::kECC
@ kECC
Definition: PixelAthMonitoringBase.h:24
PixelAthMonitoringBase::AccumulatorArrays::DC
int DC[PixMon::kNumModulesDisk][PixMon::kNumLayersDisk]
Definition: PixelAthMonitoringBase.h:125
InDet::PixelCluster::LVL1A
int LVL1A() const
Definition: InnerDetector/InDetRecEvent/InDetPrepRawData/InDetPrepRawData/PixelCluster.h:269
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
Trk::MeasurementBase::type
virtual bool type(MeasurementBaseType::Type type) const =0
Interface method checking the type.
TrackSummary.h
Trk::ParametersBase
Definition: ParametersBase.h:55
AthMonitorAlgorithm::fill
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.
SG::VarHandleKey::initialize
StatusCode initialize(bool used=true)
If this object is used as a property, then this should be called during the initialize phase.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:103
AthMonitorAlgorithm::GetEventInfo
SG::ReadHandle< xAOD::EventInfo > GetEventInfo(const EventContext &) const
Return a ReadHandle for an EventInfo object (get run/event numbers, etc.)
Definition: AthMonitorAlgorithm.cxx:107
DataVector< const Trk::TrackStateOnSurface >
inv_nmod_per_layer
const float inv_nmod_per_layer[PixLayers::COUNT]
Definition: PixelAthMonitoringBase.h:39
InDet::SiCluster::detectorElement
virtual const InDetDD::SiDetectorElement * detectorElement() const override final
return the detector element corresponding to this PRD The pointer will be zero if the det el is not d...
PixLayers::kIBL2D
@ kIBL2D
Definition: PixelAthMonitoringBase.h:24
PixelAthMonitoringBase::fill1DProfLumiLayers
void fill1DProfLumiLayers(const std::string &prof1Dname, int lb, float *weights, int nlayers=PixLayers::COUNT) const
filling 1DProf per-lumi per-layer histograms ["ECA","ECC","BLayer","Layer1","Layer2",...
Definition: PixelAthMonitoringBase.cxx:163
Trk::MeasurementBase::localCovariance
const Amg::MatrixX & localCovariance() const
Interface method to get the localError.
Definition: MeasurementBase.h:138
Trk::numberOfPixelHoles
@ numberOfPixelHoles
number of pixels which have a ganged ambiguity.
Definition: Tracking/TrkEvent/TrkTrackSummary/TrkTrackSummary/TrackSummary.h:59
InDetDD::SiDetectorElement::isPixel
bool isPixel() const
Trk::MeasurementBase
Definition: MeasurementBase.h:58
PixelAthMonitoringBase::isClusterOnTrack
bool isClusterOnTrack(Identifier id, std::vector< std::pair< Identifier, double > > const &ClusterIDs) const
checks if cluster is on track
Definition: PixelAthMonitoringBase.cxx:431
Trk::ParametersCommon::localPosition
Amg::Vector2D localPosition() const
Access method for the local coordinates, local parameter definitions differ for each surface type.
PixelID::layer_disk
int layer_disk(const Identifier &id) const
Definition: PixelID.h:626
DataReadErrors::ContainerInvalid
@ ContainerInvalid
Definition: PixelAthMonitoringBase.h:30
PixelAthMonitoringBase::AccumulatorArrays::DA
int DA[PixMon::kNumModulesDisk][PixMon::kNumLayersDisk]
Definition: PixelAthMonitoringBase.h:124
PixelID::eta_module
int eta_module(const Identifier &id) const
Definition: PixelID.h:651
PixLayers::kIBL3D
@ kIBL3D
Definition: PixelAthMonitoringBase.h:24
PixLayers::COUNT
@ COUNT
Definition: PixelAthMonitoringBase.h:24
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:195
Trk::MeasurementBase::associatedSurface
virtual const Surface & associatedSurface() const =0
Interface method to get the associated Surface.
PixLayers::kIBL
@ kIBL
Definition: PixelAthMonitoringBase.h:24
RIO_OnTrack.h
Amg::error
double error(const Amg::MatrixX &mat, int index)
return diagonal error of the matrix caller should ensure the matrix is symmetric and the index is in ...
Definition: EventPrimitivesHelpers.h:40
PixelAthMonitoringBase::AccumulatorArrays::B1
int B1[PixMon::kNumStavesL1][PixMon::kNumModulesBarrel]
Definition: PixelAthMonitoringBase.h:127
InDetDD::SiDetectorElement
Definition: SiDetectorElement.h:109
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
Trk::RIO_OnTrack::prepRawData
virtual const Trk::PrepRawData * prepRawData() const =0
returns the PrepRawData (also known as RIO) object to which this RIO_OnTrack is associated.
Trk::MeasurementBaseType::RIO_OnTrack
@ RIO_OnTrack
Definition: MeasurementBase.h:49
SiDetectorElement.h
Trk::MeasurementBase::localParameters
const LocalParameters & localParameters() const
Interface method to get the LocalParameters.
Definition: MeasurementBase.h:132
InDet::PixelCluster
Definition: InnerDetector/InDetRecEvent/InDetPrepRawData/InDetPrepRawData/PixelCluster.h:49
PixelAthClusterMonAlg::m_holeSearchTool
ToolHandle< Trk::ITrackHoleSearchTool > m_holeSearchTool
Definition: PixelAthClusterMonAlg.h:42
PixelAthClusterMonAlg::m_doLowOccupancy
bool m_doLowOccupancy
Definition: PixelAthClusterMonAlg.h:56
PixelAthClusterMonAlg::fillHistograms
virtual StatusCode fillHistograms(const EventContext &ctx) const override
adds event to the monitoring histograms
Definition: PixelAthClusterMonAlg.cxx:51
PixelAthMonitoringBase::getPhiEtaMod
void getPhiEtaMod(Identifier &id, int &phiMod, int &etaMod, bool &copyFE) const
helper function to get eta phi coordinates of per-layer arrays
Definition: PixelAthMonitoringBase.cxx:388
PixelAthMonitoringBase::VecAccumulator2DMap
helper class to accumulate points to fill a 2D plot with
Definition: PixelAthMonitoringBase.h:104
PixelAthMonitoringBase::VecAccumulator2DMap::add
void add(const int layer, const Identifier &id, float value=1.0)
helper class to accumulate points to fill a 2D per-module plot with
Definition: PixelAthMonitoringBase.cxx:16
PixelAthMonitoringBase::fillFromArrays
void fillFromArrays(const std::string &namePP0, AccumulatorArrays &pixarrays, const std::string &name2DMap="") const
filling 1DProfile per-pp0(ROD) histograms for ["ECA","ECC","BLayer","Layer1","Layer2",...
Definition: PixelAthMonitoringBase.cxx:209
pixBaseLayersLabel
const std::string pixBaseLayersLabel[PixLayers::NBASELAYERS]
Definition: PixelAthMonitoringBase.h:36
PixelAthMonitoringBase::isGood
bool isGood(const InDet::SiDetectorElementStatus *element_status, const IdentifierHash &module_hash) const
Definition: PixelAthMonitoringBase.h:177
PixelAthClusterMonAlg::initialize
virtual StatusCode initialize() override
initialize
Definition: PixelAthClusterMonAlg.cxx:40
InDet::PixelCluster::totalCharge
float totalCharge() const
Definition: InnerDetector/InDetRecEvent/InDetPrepRawData/InDetPrepRawData/PixelCluster.h:213
Trk::RIO_OnTrack::identify
virtual Identifier identify() const final
return the identifier -extends MeasurementBase
Definition: RIO_OnTrack.h:155
PixelAthMonitoringBase::getNumberOfFEs
int getNumberOfFEs(int pixlayer, int etaMod) const
helper function to get number of FEs per module
Definition: PixelAthMonitoringBase.cxx:372
xAOD::track
@ track
Definition: TrackingPrimitives.h:512
Monitored::Scalar
Declare a monitored scalar variable.
Definition: MonitoredScalar.h:34
fillSCTHists.etaMod
etaMod
Definition: fillSCTHists.py:23
clusterToTMinCut
const int clusterToTMinCut[PixLayers::COUNT]
Definition: PixelAthMonitoringBase.h:42
PixelAthClusterMonAlgCfg.trackGroup
trackGroup
Definition: PixelAthClusterMonAlgCfg.py:116
PixelAthMonitoringBase::AccumulatorArrays::B0
int B0[PixMon::kNumStavesL0][PixMon::kNumModulesBarrel]
Definition: PixelAthMonitoringBase.h:126
PixelAthClusterMonAlg::~PixelAthClusterMonAlg
virtual ~PixelAthClusterMonAlg()
Definition: PixelAthClusterMonAlg.cxx:37
PixelAthClusterMonAlg::m_doHighOccupancy
bool m_doHighOccupancy
Definition: PixelAthClusterMonAlg.h:57
PixLayers::kECA
@ kECA
Definition: PixelAthMonitoringBase.h:24
InDet::SiCluster
Definition: InnerDetector/InDetRecEvent/InDetPrepRawData/InDetPrepRawData/SiCluster.h:40
PixelAthMonitoringBase::AccumulatorArrays
Definition: PixelAthMonitoringBase.h:123
PixelAthMonitoringBase::AccumulatorArrays::B2
int B2[PixMon::kNumStavesL2][PixMon::kNumModulesBarrel]
Definition: PixelAthMonitoringBase.h:128
AthMonitorAlgorithm::getGroup
const ToolHandle< GenericMonitoringTool > & getGroup(const std::string &name) const
Get a specific monitoring tool from the tool handle array.
Definition: AthMonitorAlgorithm.cxx:164
Trk::TrackStateOnSurface::Measurement
@ Measurement
This is a measurement, and will at least contain a Trk::MeasurementBase.
Definition: TrackStateOnSurface.h:101
InDet::PixelClusterCollection
Trk::PrepRawDataCollection< PixelCluster > PixelClusterCollection
Definition: PixelClusterCollection.h:26
PixelAthMonitoringBase::AccumulatorArrays::IBL
int IBL[PixMon::kNumStavesIBL][PixMon::kNumFEsIBL]
Definition: PixelAthMonitoringBase.h:129
PixelAthClusterMonAlg::m_doLumiBlock
bool m_doLumiBlock
Definition: PixelAthClusterMonAlg.h:55
InDet::SiClusterOnTrack
Definition: SiClusterOnTrack.h:39
PlotCalibFromCool.vals
vals
Definition: PlotCalibFromCool.py:474