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:
20 
21 
22 PixelAthClusterMonAlg::PixelAthClusterMonAlg(const std::string& name, ISvcLocator* pSvcLocator) :
23  AthMonitorAlgorithm(name, pSvcLocator),
24  m_holeSearchTool("InDet::InDetTrackHoleSearchTool/InDetHoleSearchTool", this),
25  m_trackSelTool("InDet::InDetTrackSelectionTool/TrackSelectionTool", this),
26  m_atlasid(nullptr)
27 {
28  declareProperty("HoleSearchTool", m_holeSearchTool);
29  declareProperty("TrackSelectionTool", m_trackSelTool);
30 
31  declareProperty("doOnline", m_doOnline = false);
32  declareProperty("doLumiBlock", m_doLumiBlock = false);
33  declareProperty("doLowOccupancy", m_doLowOccupancy = false);
34  declareProperty("doHighOccupancy", m_doHighOccupancy = true);
35  declareProperty("doHeavyIonMon", m_doHeavyIonMon = false);
36  declareProperty("doFEPlots", m_doFEPlots = false);
37 }
38 
40 
41 
44  ATH_CHECK(detStore()->retrieve(m_atlasid, "AtlasID"));
45  if (!m_holeSearchTool.empty()) ATH_CHECK(m_holeSearchTool.retrieve());
46  if (!m_trackSelTool.empty()) ATH_CHECK(m_trackSelTool.retrieve());
47 
48  ATH_CHECK(m_tracksKey.initialize());
50  ATH_CHECK( m_testPixelLayerTool.retrieve( DisableTool{m_testPixelLayerTool.empty()} ) );
51  return StatusCode::SUCCESS;
52 }
53 
54 StatusCode PixelAthClusterMonAlg::fillHistograms(const EventContext& ctx) const {
55  using namespace Monitored;
56 
57  int lb = GetEventInfo(ctx)->lumiBlock();
58 
59  //*******************************************************************************
60  //************************** Begin of filling Status Histograms ******************
61  //*******************************************************************************
62 
63 
64  ATH_MSG_DEBUG("Filling Status Monitoring Histograms");
65  float index = 1.0;
66  float nBadMod[PixLayers::COUNT] = {
67  0.
68  };
69  float nDisabledMod[PixLayers::COUNT] = {
70  0.
71  };
72  float nBadAndDisabledMod[PixLayers::COUNT] = {
73  0.
74  };
75  int phiMod(-99);
76  int etaMod(-99);
77  bool copyFEval(false);
78  AccumulatorArrays clusPerEventArray = {{{0}}, {{0}}, {{0}}, {{0}}, {{0}}, {{0}}};
79  VecAccumulator2DMap Map_Of_Modules_Status(*this, "MapOfModulesStatus", true);
80 
81  VecAccumulator2DMap Map_Of_FEs_Status(*this, "MapOfFEsStatus");
82 
85  for (auto idIt = m_pixelid->wafer_begin(); idIt != m_pixelid->wafer_end(); ++idIt) {
86  Identifier waferID = *idIt;
87  IdentifierHash id_hash = m_pixelid->wafer_hash(waferID);
88 
89  int pixlayer = getPixLayersID(m_pixelid->barrel_ec(waferID), m_pixelid->layer_disk(waferID));
90  if (pixlayer == 99) continue;
91  getPhiEtaMod(waferID, phiMod, etaMod, copyFEval);
92 
93  if (isActive( !m_pixelDetElStatusActiveOnly.empty() ? pixel_active.cptr() : nullptr, id_hash) )
94  {
95  if (isGood( !m_pixelDetElStatus.empty() ? pixel_status.cptr() : nullptr, id_hash) ) index = 0;
96  else {
97  index = 1; // active but bad modules
98  if (pixlayer == PixLayers::kIBL) {
99  int iblsublayer = (m_pixelid->eta_module(waferID) > -7 && m_pixelid->eta_module(waferID) < 6) ? PixLayers::kIBL2D : PixLayers::kIBL3D;
100  nBadMod[iblsublayer] += inv_nmod_per_layer[iblsublayer];
101  } else nBadMod[pixlayer] += inv_nmod_per_layer[pixlayer];
102  }
103  }
104  else {
105  index = 2; // inactive (disabled) modules
106  if (pixlayer == PixLayers::kIBL) {
107  int iblsublayer = (m_pixelid->eta_module(waferID) > -7 && m_pixelid->eta_module(waferID) < 6) ? PixLayers::kIBL2D : PixLayers::kIBL3D;
108  nDisabledMod[iblsublayer] += inv_nmod_per_layer[iblsublayer];
109  } else nDisabledMod[pixlayer] += inv_nmod_per_layer[pixlayer];
110  switch (pixlayer) {
111  case PixLayers::kECA:
112  clusPerEventArray.DA[phiMod][etaMod] = -1;
113  break;
114 
115  case PixLayers::kECC:
116  clusPerEventArray.DC[phiMod][etaMod] = -1;
117  break;
118 
119  case PixLayers::kBLayer:
120  clusPerEventArray.B0[phiMod][etaMod] = -1;
121  break;
122 
123  case PixLayers::kLayer1:
124  clusPerEventArray.B1[phiMod][etaMod] = -1;
125  break;
126 
127  case PixLayers::kLayer2:
128  clusPerEventArray.B2[phiMod][etaMod] = -1;
129  break;
130 
131  case PixLayers::kIBL:
132  clusPerEventArray.IBL[phiMod][etaMod] = -1;
133  if (copyFEval) clusPerEventArray.IBL[phiMod][++etaMod] = -1;
134  break;
135  }
136  }
137 
138  Map_Of_Modules_Status.add(pixlayer, waferID, index);
139 
140  // Per FE Status
141  //
142  if (m_doFEPlots) {
143  int nFE = getNumberOfFEs(pixlayer, m_pixelid->eta_module(waferID));
144  for (int iFE = 0; iFE < nFE; iFE++) {
145  Identifier pixelID = m_pixelReadout->getPixelIdfromHash(id_hash, iFE, 1, 1);
146  if (not pixelID.is_valid()) continue;
147  auto [is_active,is_good ] =isChipGood( !m_pixelDetElStatusActiveOnly.empty() ? pixel_active.cptr() : nullptr,
148  !m_pixelDetElStatus.empty() ? pixel_status.cptr() : nullptr,
149  id_hash,
150  iFE);
151  if (is_active)
152  {
153  if (is_good) index = 0;
154  else index = 1;
155  }
156  else index = 2;
157  Map_Of_FEs_Status.add(pixlayer, waferID, iFE, index);
158  }
159  }
160  } // end of pixelid wafer loop
161 
162  fill2DProfLayerAccum(Map_Of_Modules_Status);
163  fill1DProfLumiLayers("BadModulesPerLumi", lb, nBadMod);
164  fill1DProfLumiLayers("DisabledModulesPerLumi", lb, nDisabledMod);
165 
166  for (unsigned int ii = 0; ii < PixLayers::COUNT; ii++) nBadAndDisabledMod[ii] = nBadMod[ii]+nDisabledMod[ii];
167  fill1DProfLumiLayers("BadAndDisabledModulesPerLumi", lb, nBadAndDisabledMod);
168 
169  if (m_doFEPlots) fill2DProfLayerAccum(Map_Of_FEs_Status);
170 
171  //*******************************************************************************
172  //*************************** End of filling Status Histograms ******************
173  //*******************************************************************************
174 
175 
176  //*******************************************************************************
177  //************************** Begin of filling Track Histograms ******************
178  //*******************************************************************************
179 
180 
181  ATH_MSG_DEBUG("Filling Track Monitoring Histograms");
182 
183  VecAccumulator2DMap TSOS_Outlier(*this, "TSOSOutlier");
184  VecAccumulator2DMap TSOS_Outlier_FE(*this, "TSOSOutlierFE");
185  VecAccumulator2DMap TSOS_Hole(*this, "TSOSHole");
186  VecAccumulator2DMap TSOS_Hole_FE(*this, "TSOSHoleFE");
187  VecAccumulator2DMap TSOS_Measurement(*this, "TSOSMeasurement");
188  VecAccumulator2DMap TSOS_Measurement_FE(*this, "TSOSMeasurementFE");
189  VecAccumulator2DMap HolesRatio(*this, "HolesRatio");
190  VecAccumulator2DMap MissIBLhit(*this, "MissIBLhit");
191  VecAccumulator2DMap MissIBLpresentBLhit(*this, "MissIBLpresentBLhit");
192  VecAccumulator2DMap MissHitsRatio(*this, "MissHitsRatio");
193  auto trackGroup = getGroup("Track");
194 
195  auto tracks = SG::makeHandle(m_tracksKey, ctx);
196 
197  if (!(tracks.isValid())) {
198  ATH_MSG_ERROR("PixelMonitoring: Track container " << m_tracksKey.key() << " could not be found.");
199  auto dataread_err = Monitored::Scalar<int>("trkdataread_err", DataReadErrors::ContainerInvalid);
200  fill(trackGroup, dataread_err);
201  return StatusCode::RECOVERABLE;
202  } else {
203  ATH_MSG_DEBUG("PixelMonitoring: Track container " << tracks.name() << " is found.");
204  }
205 
206  int ntracksPerEvent = 0;
207  bool havePixelHits(false);
208  std::vector<std::pair<Identifier, double> > ClusterIDs;
209 
210  auto lbval = Monitored::Scalar<int>("pixclusmontool_lb", lb);
211 
212  for (auto track: *tracks) {
213  if (track == nullptr || track->perigeeParameters() == nullptr || track->trackSummary() == nullptr ||
214  track->trackSummary()->get(Trk::numberOfPixelHits) == 0) {
215  ATH_MSG_DEBUG("PixelMonitoring: Track either invalid or it does not contain pixel hits, continuing...");
216  continue;
217  }
218 
219  int nPixelHits = 0;
220  const Trk::Perigee* measPerigee = static_cast<const Trk::Perigee*>(track->perigeeParameters());
221  bool passJOTrkTightCut = static_cast<bool>(m_trackSelTool->accept(*track));
222  bool pass1hole1GeVptTightCut = (passJOTrkTightCut && (measPerigee->pT() / 1000.0 > 1.0)); // misshit ratios
223  bool pass1hole5GeVptTightCut = (passJOTrkTightCut && (measPerigee->pT() / 1000.0 > 5.0)); // eff vs lumi
224 
225  if(measPerigee->pT()<1000.) continue; // Remove problematic low-pt tracks
226 
227  const Trk::Track* trackWithHoles(track);
228  std::unique_ptr<const Trk::Track> trackWithHolesUnique = nullptr;
229  if (track->trackSummary()->get(Trk::numberOfPixelHoles) > 0) {
230  trackWithHolesUnique.reset(m_holeSearchTool->getTrackWithHoles(*track));
231  trackWithHoles = trackWithHolesUnique.get();
232  }
233  const Trk::TrackStates* trackStates = trackWithHoles->trackStateOnSurfaces();
234  for (auto trackStateOnSurface: *trackStates) {
235  const Trk::MeasurementBase* mesBase = trackStateOnSurface->measurementOnTrack();
236 
237  const Trk::RIO_OnTrack* RIOOnTrack = nullptr;
238  if (mesBase && mesBase->type(Trk::MeasurementBaseType::RIO_OnTrack)) {
239  RIOOnTrack = static_cast<const Trk::RIO_OnTrack*>(mesBase);
240  }
241 
242  if (mesBase && !RIOOnTrack) continue; // skip pseudomeasurements
243  // but not hits, holes,
244  // outliers
245 
246  const Trk::TrackParameters* trkParameters = trackStateOnSurface->trackParameters();
247  Identifier surfaceID;
248  if (mesBase && mesBase->associatedSurface().associatedDetectorElement()) {
249  surfaceID = mesBase->associatedSurface().associatedDetectorElement()->identify();
250  } else { // holes, perigee
251  if (trkParameters) {
252  surfaceID = trkParameters->associatedSurface().associatedDetectorElementIdentifier();
253  } else {
254  ATH_MSG_INFO("PixelMonitoring: pointer of TSOS to track parameters or associated surface is null");
255  continue;
256  }
257  }
258  if (!m_atlasid->is_pixel(surfaceID)) continue;
259  int pixlayer = getPixLayersID(m_pixelid->barrel_ec(surfaceID), m_pixelid->layer_disk(surfaceID));
260  if (pixlayer == 99) continue;
261 
262  float nOutlier = 0.;
263  float nHole = 0.;
264  auto effval = Monitored::Scalar<float>("HitEffAll_val", 0.);
265  auto efflb = Monitored::Scalar<float>("HitEffAll_lb", lb);
266  const InDetDD::SiDetectorElement *sde = dynamic_cast<const InDetDD::SiDetectorElement *>(trkParameters->associatedSurface().associatedDetectorElement());
267  const InDetDD::SiLocalPosition trkLocalPos = trkParameters->localPosition();
268  Identifier locPosID;
269 
270  if (trackStateOnSurface->type(Trk::TrackStateOnSurface::Outlier))
271  {
272  nOutlier = 1.0;
273  const InDet::SiClusterOnTrack *siclus = dynamic_cast<const InDet::SiClusterOnTrack *>(mesBase);
274  if ( mesBase && siclus) {
275  locPosID = siclus->identify();
276  if ( !(locPosID.is_valid()) ) {
277  ATH_MSG_INFO("Pixel Monitoring: got invalid track local position on surface for an outlier.");
278  continue;
279  }
280  TSOS_Outlier.add(pixlayer, locPosID, 1.0);
281  if (!m_doOnline) {
282  TSOS_Outlier_FE.add(pixlayer, locPosID, m_pixelReadout->getFE(locPosID, locPosID), 1.0);
283  }
284  }
285  }
286  else if (trackStateOnSurface->type(Trk::TrackStateOnSurface::Hole))
287  {
288  nHole = 1.0;
289  locPosID = sde->identifierOfPosition(trkLocalPos);
290  if ( !(locPosID.is_valid()) ) {
291  ATH_MSG_INFO("Pixel Monitoring: got invalid track local position on surface for a hole.");
292  continue;
293  }
294  TSOS_Hole.add(pixlayer, locPosID, 1.0);
295  if (!m_doOnline) {
296  TSOS_Hole_FE.add(pixlayer, locPosID, m_pixelReadout->getFE(locPosID, locPosID), 1.0);
297  }
298  }
299  else if (trackStateOnSurface->type(Trk::TrackStateOnSurface::Measurement))
300  {
301  if (not mesBase) continue;
303  dynamic_cast<const InDetDD::SiDetectorElement*>(mesBase->associatedSurface().associatedDetectorElement());
304  const InDet::SiClusterOnTrack* clus = dynamic_cast<const InDet::SiClusterOnTrack*>(mesBase);
305  if (!side || !clus) continue;
306  const InDet::SiCluster* RawDataClus = dynamic_cast<const InDet::SiCluster*>(clus->prepRawData());
307  if (!RawDataClus || !RawDataClus->detectorElement()->isPixel()) continue;
308 
309  nPixelHits++;
310 
311  locPosID = clus->identify();
312  if ( !(locPosID.is_valid()) ) {
313  ATH_MSG_INFO("Pixel Monitoring: got invalid cluster on track ID.");
314  continue;
315  }
316  TSOS_Measurement.add(pixlayer, locPosID, 1.0);
317  if (!m_doOnline) {
318  TSOS_Measurement_FE.add(pixlayer, locPosID, m_pixelReadout->getFE(locPosID, locPosID), 1.0);
319  }
320  effval = 1.;
321 
322  const Trk::AtaPlane* trackAtPlane = dynamic_cast<const Trk::AtaPlane*>(trkParameters);
323  if (trackAtPlane) {
324  const Amg::Vector2D localpos = trackAtPlane->localPosition();
325 
326  // Get local error matrix for hit and track and calc pull
327  const AmgSymMatrix(5) trackErrMat = (*trackAtPlane->covariance());
328  const Amg::MatrixX clusErrMat = clus->localCovariance();
329 
330  double error_sum =
331  sqrt(pow(Amg::error(trackErrMat, Trk::locX), 2) + pow(Amg::error(clusErrMat, Trk::locX), 2));
332  auto resPhi = Monitored::Scalar<float>("res_phi", clus->localParameters()[Trk::locX] - localpos[0]);
333  fill(trackGroup, resPhi);
334  if (error_sum != 0) {
335  auto pullPhi = Monitored::Scalar<float>("pull_phi", resPhi / error_sum);
336  fill(trackGroup, pullPhi);
337  }
338 
339  error_sum = sqrt(pow(Amg::error(trackErrMat, Trk::locY), 2) + pow(Amg::error(clusErrMat, Trk::locY), 2));
340  auto resEta = Monitored::Scalar<float>("res_eta", clus->localParameters()[Trk::locY] - localpos[1]);
341  fill(trackGroup, resEta);
342  if (error_sum != 0) {
343  auto pullEta = Monitored::Scalar<float>("pull_eta", resEta / error_sum);
344  fill(trackGroup, pullEta);
345  }
346  // Filling containers, which hold id's of hits and clusters on track
347  // _and_ incident angle information for later normalization
348 
349  Amg::Vector3D mynormal = side->normal();
350  Amg::Vector3D mytrack = trackAtPlane->momentum();
351  double trknormcomp = mytrack.dot(mynormal);
352 
353  double mytrack_mag = mytrack.mag();
354  double cosalpha = 0.;
355  if (mytrack_mag != 0) cosalpha = std::abs(trknormcomp / mytrack_mag);
356  ClusterIDs.emplace_back(clus->identify(), cosalpha);
357  }
358  } // end of measurement case
359  else continue;
360 
361  if (pass1hole5GeVptTightCut) {
362  if (pixlayer == PixLayers::kIBL) {
363  int iblsublayer = (m_pixelid->eta_module(surfaceID) > -7 && m_pixelid->eta_module(surfaceID) < 6) ? PixLayers::kIBL2D : PixLayers::kIBL3D;
364  fill(pixLayersLabel[iblsublayer], efflb, effval);
365  } else fill(pixLayersLabel[pixlayer], efflb, effval);
366  }
367 
368  if (pass1hole1GeVptTightCut && locPosID.is_valid()) {
369  HolesRatio.add(pixlayer, locPosID, nHole);
370  MissHitsRatio.add(pixlayer, locPosID, nOutlier + nHole);
371  }
372  } // end of TSOS loop
373 
374  auto etanoibl = Monitored::Scalar<float>("eta_noibl", measPerigee->momentum().eta());
375  auto phinoibl = Monitored::Scalar<float>("phi_noibl", measPerigee->momentum().phi());
376  auto missibl = Monitored::Scalar<float>("missIBLhit", 0.);
377  bool expectIBLHit = m_testPixelLayerTool->expectHitInInnermostPixelLayer(measPerigee);
378  int nIBLHits=0, nBLHits=0;
379  const Trk::TrackSummary *trksumm = track->trackSummary();
380  if (trksumm){
381  nIBLHits = trksumm->get(Trk::numberOfInnermostPixelLayerHits);
383  }
384  if(expectIBLHit && nIBLHits==0 && pass1hole1GeVptTightCut){
385  std::vector<InDet::TrackStateOnPixelLayerInfo> trackStateIBLlayer;
386  if(m_testPixelLayerTool->getTrackStateOnInnermostPixelLayerInfo(measPerigee, trackStateIBLlayer)){
387  Identifier posid_prev;
388  for (auto &tstate : trackStateIBLlayer){
389  Identifier posid = tstate.pixelId();
390  if(posid==posid_prev)continue;
391  MissIBLhit.add(PixLayers::kIBL, posid, 1.);
392  if(nBLHits>0)MissIBLpresentBLhit.add(PixLayers::kIBL, posid, 1.);
393  missibl=1.;
394  fill(trackGroup,etanoibl,phinoibl,missibl);
395  posid_prev=posid;
396  }
397  }
398  } else if(expectIBLHit && pass1hole1GeVptTightCut) fill(trackGroup,etanoibl,phinoibl,missibl);
399 
400  ntracksPerEvent++;
401  auto nph = Monitored::Scalar<int>("npixhits_per_track", nPixelHits);
402  auto nphwgt = Monitored::Scalar<float>("npixhits_per_track_wgt", 1.0);
403  fill(trackGroup, lbval, nph, nphwgt);
404 
405  int trkfitndf = track->fitQuality()->numberDoF();
406  double trkfitchi2 = track->fitQuality()->chiSquared();
407  if (trkfitndf != 0) {
408  auto trkChiN = Monitored::Scalar<float>("fit_chi2byndf", trkfitchi2 / trkfitndf);
409  fill(trackGroup, trkChiN);
410  }
411  havePixelHits = havePixelHits || (nPixelHits > 0);
412  } // end of track loop
413 
414  if (!havePixelHits) {
415  auto dataread_err = Monitored::Scalar<int>("trkdataread_err", DataReadErrors::EmptyContainer);
416  fill(trackGroup, dataread_err);
417  }
418 
419  fill2DProfLayerAccum(HolesRatio);
420  fill2DProfLayerAccum(MissIBLhit);
421  fill2DProfLayerAccum(MissIBLpresentBLhit);
422  fill2DProfLayerAccum(MissHitsRatio);
423  fill2DProfLayerAccum(TSOS_Outlier);
424  fill2DProfLayerAccum(TSOS_Hole);
425  fill2DProfLayerAccum(TSOS_Measurement);
426  if (!m_doOnline) {
427  fill2DProfLayerAccum(TSOS_Outlier_FE);
428  fill2DProfLayerAccum(TSOS_Hole_FE);
429  fill2DProfLayerAccum(TSOS_Measurement_FE);
430  }
431 
432  sort(ClusterIDs.begin(), ClusterIDs.end(),
433  [](const std::pair<Identifier, double>& left, const std::pair<Identifier, double>& right) {
434  return left.first < right.first;
435  });
436 
437  auto nTrks = Monitored::Scalar<int>("ntrks_per_event", ntracksPerEvent);
438  fill(trackGroup, lbval, nTrks);
439 
440  //*******************************************************************************
441  //**************************** End of filling Track Histograms ******************
442  //*******************************************************************************
443 
444  //*******************************************************************************
445  //************************ Begin of filling Cluster Histograms ******************
446  //*******************************************************************************
447 
448  ATH_MSG_DEBUG("Filling Cluster Monitoring Histograms");
449 
450 
451  auto clToTcosAlphaLB = Monitored::Scalar<float>("ClusterToTxCosAlphaOnTrack_lb", lb);
452 
453  VecAccumulator2DMap Cluster_LVL1A_Mod(*this, "ClusterLVL1AMod");
454  VecAccumulator2DMap Cluster_LVL1A_SizeCut(*this, "ClusterLVL1ASizeCut");
455  VecAccumulator2DMap Cluster_LVL1A_Mod_OnTrack(*this, "ClusterLVL1AModOnTrack");
456  VecAccumulator2DMap Cluster_LVL1A_SizeCut_OnTrack(*this, "ClusterLVL1ASizeCutOnTrack");
457  VecAccumulator2DMap ClusterMap_Mon(*this, "ClusterMapMon");
458  VecAccumulator2DMap ClusterMap_Mon_OnTrack(*this, "ClusterMapMonOnTrack");
459  VecAccumulator2DMap Cluster_Size_Map_OnTrack(*this, "ClusterSizeMapOnTrack");
460  VecAccumulator2DMap Cluster_Occupancy(*this, "ClusterOccupancy");
461  VecAccumulator2DMap Cluster_Occupancy_OnTrack(*this, "ClusterOccupancyOnTrack");
462  VecAccumulator2DMap Clus_Occ_SizeCut(*this, "ClusOccSizeCut");
463  VecAccumulator2DMap Clus_Occ_SizeCut_OnTrack(*this, "ClusOccSizeCutOnTrack");
464  VecAccumulator2DMap Cluster_FE_Occupancy(*this, "ClusterFEOccupancy");
465  VecAccumulator2DMap Cluster_FE_Occupancy_OnTrack(*this, "ClusterFEOccupancyOnTrack");
466 
467  auto clusterGroup = getGroup("Cluster");
468  auto clusterGroup_OnTrack = getGroup("Cluster_OnTrack");
469 
470  auto pixel_clcontainer = SG::makeHandle(m_clustersKey, ctx);
471 
472  if (!(pixel_clcontainer.isValid())) {
473  ATH_MSG_ERROR("Pixel Monitoring: Pixel Cluster container " << m_clustersKey.key() << " could not be found.");
474  auto dataread_err = Monitored::Scalar<int>("clsdataread_err", DataReadErrors::ContainerInvalid);
475  fill(clusterGroup, dataread_err);
476  return StatusCode::RECOVERABLE;
477  } else {
478  ATH_MSG_DEBUG("Pixel Monitoring: Pixel Cluster container " << pixel_clcontainer.name() << " is found.");
479  }
480 
481  int nclusters = 0;
482  int nclusters_ontrack = 0;
483  float nclusters_mod[PixLayers::COUNT] = {
484  0.
485  };
486  float nclusters_ontrack_mod[PixLayers::COUNT] = {
487  0.
488  };
489 
490  Identifier clusID;
491  for (auto colNext: *pixel_clcontainer) {
492  const InDet::PixelClusterCollection* ClusterCollection(colNext);
493  if (!ClusterCollection) {
494  ATH_MSG_DEBUG("Pixel Monitoring: Pixel Cluster container is empty.");
495  auto dataread_err = Monitored::Scalar<int>("clsdataread_err", DataReadErrors::CollectionInvalid);
496  fill(clusterGroup, dataread_err);
497  continue;
498  }
499 
500  for (auto p_clus: *ClusterCollection) {
501  clusID = p_clus->identify();
502  int pixlayer = getPixLayersID(m_pixelid->barrel_ec(clusID), m_pixelid->layer_disk(clusID));
503  if (pixlayer == 99) continue;
504  getPhiEtaMod(clusID, phiMod, etaMod, copyFEval);
505 
506  const InDet::PixelCluster& cluster = *p_clus;
507  nclusters++;
508 
509  // begin timing histos
510  //
511  auto clLVL1A = Monitored::Scalar<float>("Cluster_LVL1A_lvl1a", cluster.LVL1A());
512  fill(clusterGroup, clLVL1A);
513  Cluster_LVL1A_Mod.add(pixlayer, clusID, cluster.LVL1A() + 0.00001);
514  if (cluster.rdoList().size() > 1) Cluster_LVL1A_SizeCut.add(pixlayer, clusID, cluster.LVL1A() + 0.00001);
515  if (pixlayer == PixLayers::kIBL) {
516  int iblsublayer = (m_pixelid->eta_module(clusID) > -7 && m_pixelid->eta_module(clusID) < 6) ? PixLayers::kIBL2D : PixLayers::kIBL3D;
517  if (cluster.totalToT() > clusterToTMinCut[iblsublayer]) fill("ClusterLVL1AToTCut_" + pixLayersLabel[iblsublayer], clLVL1A);
518  nclusters_mod[iblsublayer]++;
519  } else {
520  if (cluster.totalToT() > clusterToTMinCut[pixlayer]) fill("ClusterLVL1AToTCut_" + pixLayersLabel[pixlayer], clLVL1A);
521  nclusters_mod[pixlayer]++;
522  }
523  //
524  // end timing histos
525  // begin cluster rate
526  //
527  if (m_doOnline) ClusterMap_Mon.add(pixlayer, clusID);
528  //
529  // end cluster rate
530  // begin cluster occupancy
531  //
532  Cluster_Occupancy.add(pixlayer, clusID);
533  if (m_doFEPlots) {
534  Cluster_FE_Occupancy.add(pixlayer, clusID, m_pixelReadout->getFE(clusID, clusID), 1.0);
535  }
536  if (cluster.rdoList().size() > 1) Clus_Occ_SizeCut.add(pixlayer, clusID);
537  // end cluster occupancy
538 
539  double cosalpha(0.);
540  if (isClusterOnTrack(clusID, ClusterIDs, cosalpha)) {
541  nclusters_ontrack++;
542  switch (pixlayer) {
543  case PixLayers::kECA:
544  clusPerEventArray.DA[phiMod][etaMod]++;
545  break;
546 
547  case PixLayers::kECC:
548  clusPerEventArray.DC[phiMod][etaMod]++;
549  break;
550 
551  case PixLayers::kBLayer:
552  clusPerEventArray.B0[phiMod][etaMod]++;
553  break;
554 
555  case PixLayers::kLayer1:
556  clusPerEventArray.B1[phiMod][etaMod]++;
557  break;
558 
559  case PixLayers::kLayer2:
560  clusPerEventArray.B2[phiMod][etaMod]++;
561  break;
562 
563  case PixLayers::kIBL:
564  clusPerEventArray.IBL[phiMod][etaMod]++;
565  break;
566  }
567  // begin timing histos
568  //
569  clLVL1A = cluster.LVL1A();
570  fill(clusterGroup_OnTrack, clLVL1A);
571  Cluster_LVL1A_Mod_OnTrack.add(pixlayer, clusID, cluster.LVL1A() + 0.00001);
572  if (cluster.rdoList().size() > 1) Cluster_LVL1A_SizeCut_OnTrack.add(pixlayer, clusID,
573  cluster.LVL1A() + 0.00001);
574  //
575  // end timing histos
576  // begin cluster sizes
577  //
578  auto clSize = Monitored::Scalar<float>("ClusterSizeOnTrack_clsize", cluster.rdoList().size());
579  auto clSizeEtaModule = Monitored::Scalar<float>("ClusterSizeOnTrack_em", m_pixelid->eta_module(clusID));
580  if (abs(m_pixelid->barrel_ec(clusID)) != 0) clSizeEtaModule = m_pixelid->layer_disk(clusID) + 1;
581  fill("ClusterGroupsizeVsEtaOnTrack_" + pixBaseLayersLabel[pixlayer], clSizeEtaModule, clSize);
582 
583  Cluster_Size_Map_OnTrack.add(pixlayer, clusID, cluster.rdoList().size());
584  //
585  // end cluster sizes
586  // begin cluster rate
587  //
588  if (m_doOnline) ClusterMap_Mon_OnTrack.add(pixlayer, clusID);
589  //
590  // end cluster rate
591  // begin cluster occupancy
592  //
593  Cluster_Occupancy_OnTrack.add(pixlayer, clusID);
594  if (m_doFEPlots) {
595  Cluster_FE_Occupancy_OnTrack.add(pixlayer, clusID, m_pixelReadout->getFE(clusID, clusID), 1.0);
596  }
597  if (cluster.rdoList().size() > 1) Clus_Occ_SizeCut_OnTrack.add(pixlayer, clusID);
598  //
599  // end cluster occupancy
600  // begin cluster ToT, 1D timing, charge
601  //
602  if (pixlayer == PixLayers::kIBL)
603  {
604  pixlayer = (m_pixelid->eta_module(clusID) > -7 && m_pixelid->eta_module(clusID) < 6) ? PixLayers::kIBL2D : PixLayers::kIBL3D;
605  }
606  if (cluster.totalToT() > clusterToTMinCut[pixlayer]) fill("ClusterLVL1AToTCutOnTrack_" + pixLayersLabel[pixlayer], clLVL1A);
607 
608  auto clToTcosAlpha = Monitored::Scalar<float>("ClusterToTxCosAlphaOnTrack_val", cluster.totalToT() * cosalpha);
609  fill(pixLayersLabel[pixlayer], clToTcosAlphaLB, clToTcosAlpha);
610 
611  if (!m_doOnline) {
612  auto clQcosAlpha = Monitored::Scalar<float>("ClusterQxCosAlphaOnTrack_val", cluster.totalCharge() * cosalpha);
613  fill(pixLayersLabel[pixlayer], clQcosAlpha);
614  }
615  nclusters_ontrack_mod[pixlayer]++;
616  //
617  // end cluster ToT, 1D timing, charge
618  } // end on track
619  } // end cluster collection
620  }
621  fill2DProfLayerAccum(Cluster_LVL1A_Mod);
622  fill2DProfLayerAccum(Cluster_LVL1A_SizeCut);
623  fill2DProfLayerAccum(Cluster_LVL1A_Mod_OnTrack);
624  fill2DProfLayerAccum(Cluster_LVL1A_SizeCut_OnTrack);
625  if (m_doOnline) {
626  fill2DProfLayerAccum(ClusterMap_Mon);
627  fill2DProfLayerAccum(ClusterMap_Mon_OnTrack);
628  }
629  fill2DProfLayerAccum(Cluster_Size_Map_OnTrack);
630  fill2DProfLayerAccum(Cluster_Occupancy);
631  fill2DProfLayerAccum(Cluster_Occupancy_OnTrack);
632  fill2DProfLayerAccum(Clus_Occ_SizeCut);
633  fill2DProfLayerAccum(Clus_Occ_SizeCut_OnTrack);
634  if (m_doFEPlots) {
635  fill2DProfLayerAccum(Cluster_FE_Occupancy);
636  fill2DProfLayerAccum(Cluster_FE_Occupancy_OnTrack);
637  }
638  // begin cluster rates
639  //
640  auto nCls = Monitored::Scalar<int>("ClustersPerEvent_val", nclusters);
641  fill(clusterGroup, lbval, nCls);
642  auto nClsOnTrk = Monitored::Scalar<int>("ClustersPerEventOnTrack_val", nclusters_ontrack);
643  fill(clusterGroup_OnTrack, lbval, nClsOnTrk);
644  for (unsigned int ii = 0; ii < PixLayers::COUNT; ii++) {
645  auto vals = Monitored::Scalar<float>("ClustersPerEvent_val", nclusters_mod[ii]);
646  auto vals_ontrack = Monitored::Scalar<float>("ClustersPerEventOnTrack_val", nclusters_ontrack_mod[ii]);
647  fill(pixLayersLabel[ii], vals, vals_ontrack);
648  }
649 
650  if (nclusters > 0) {
651  auto clsFracOnTrack = Monitored::Scalar<float>("cls_frac_ontrack", (float) nclusters_ontrack / nclusters);
652  fill(clusterGroup_OnTrack, lbval, clsFracOnTrack);
653  } else {
654  auto dataread_err = Monitored::Scalar<int>("clsdataread_err", DataReadErrors::EmptyContainer);
655  fill(clusterGroup, dataread_err);
656  }
657 
658  fill1DProfLumiLayers("ClustersPerLumi", lb, nclusters_mod);
659  fill1DProfLumiLayers("ClustersPerLumiOnTrack", lb, nclusters_ontrack_mod);
660 
661  fillFromArrays("ClusterOccupancyPP0OnTrack", clusPerEventArray);
662 
663  if (ntracksPerEvent > 0) {
664  for (unsigned int ii = 0; ii < PixLayers::COUNT; ii++) nclusters_ontrack_mod[ii] /= ntracksPerEvent;
665  fill1DProfLumiLayers("NumClustersPerTrackPerLumi", lb, nclusters_ontrack_mod);
666  }
667  //
668  // end cluster rate
669  ClusterIDs.clear();
670 
671  //*******************************************************************************
672  //************************** End of filling Cluster Histograms ******************
673  //*******************************************************************************
674 
675  return StatusCode::SUCCESS;
676 }
677 
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:27
Trk::Surface::associatedDetectorElement
const TrkDetElementBase * associatedDetectorElement() const
return associated Detector Element
PixelID::wafer_end
const_id_iterator wafer_end(void) const
Definition: PixelID.cxx:844
Trk::numberOfInnermostPixelLayerHits
@ numberOfInnermostPixelLayerHits
these are the hits in the 1st pixel layer
Definition: Tracking/TrkEvent/TrkTrackSummary/TrkTrackSummary/TrackSummary.h:53
MeasurementBase.h
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
Trk::locX
@ locX
Definition: ParamDefs.h:37
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:38
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:62
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
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:840
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
Trk::numberOfNextToInnermostPixelLayerHits
@ numberOfNextToInnermostPixelLayerHits
these are the pixel hits, including the b-layer
Definition: Tracking/TrkEvent/TrkTrackSummary/TrkTrackSummary/TrackSummary.h:55
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:61
PixelAthClusterMonAlg::m_doOnline
bool m_doOnline
Definition: PixelAthClusterMonAlg.h:57
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
IDTPM::nPixelHits
float nPixelHits(const U &p)
Definition: TrackParametersHelper.h:354
AmgSymMatrix
#define AmgSymMatrix(dim)
Definition: EventPrimitives.h:50
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:211
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:270
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
TrackStateOnPixelLayerInfo.h
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:22
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
PixelAthClusterMonAlg::m_testPixelLayerTool
ToolHandle< InDet::IInDetTestPixelLayerTool > m_testPixelLayerTool
tool to calculate expected hit information in innermost layers
Definition: PixelAthClusterMonAlg.h:55
Trk::TrackSummary
A summary of the information contained by a track.
Definition: Tracking/TrkEvent/TrkTrackSummary/TrkTrackSummary/TrackSummary.h:287
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:228
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:59
PixelAthClusterMonAlg::fillHistograms
virtual StatusCode fillHistograms(const EventContext &ctx) const override
adds event to the monitoring histograms
Definition: PixelAthClusterMonAlg.cxx:54
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
Trk::RIO_OnTrack::identify
Identifier identify() const
return the identifier -extends MeasurementBase
Definition: RIO_OnTrack.h:152
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:42
InDet::PixelCluster::totalCharge
float totalCharge() const
Definition: InnerDetector/InDetRecEvent/InDetPrepRawData/InDetPrepRawData/PixelCluster.h:213
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
Trk::TrackSummary::get
int get(const SummaryType &type) const
returns the summary information for the passed SummaryType.
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
InDetTestPixelLayerTool.h
pow
constexpr int pow(int base, int exp) noexcept
Definition: ap_fixedTest.cxx:15
PixelAthClusterMonAlgCfg.trackGroup
trackGroup
Definition: PixelAthClusterMonAlgCfg.py:124
PixelAthMonitoringBase::AccumulatorArrays::B0
int B0[PixMon::kNumStavesL0][PixMon::kNumModulesBarrel]
Definition: PixelAthMonitoringBase.h:126
PixelAthClusterMonAlg::~PixelAthClusterMonAlg
virtual ~PixelAthClusterMonAlg()
Definition: PixelAthClusterMonAlg.cxx:39
PixelAthClusterMonAlg::m_doHighOccupancy
bool m_doHighOccupancy
Definition: PixelAthClusterMonAlg.h:60
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:58
InDet::SiClusterOnTrack
Definition: SiClusterOnTrack.h:39
PlotCalibFromCool.vals
vals
Definition: PlotCalibFromCool.py:474
Identifier
Definition: IdentifierFieldParser.cxx:14