ATLAS Offline Software
SCTHitsNoiseMonAlg.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 #include "SCTHitsNoiseMonAlg.h"
6 #include "SCT_NameFormatter.h"
7 
10 #include "InDetIdentifier/SCT_ID.h"
13 
15 #include "StoreGate/ReadHandle.h"
19 
20 #include <string>
21 
22 using namespace SCT_Monitoring;
23 
24 namespace {
25  static const std::string abbreviations[N_REGIONS] = {
26  "ECm", "", "ECp"
27  };
28 
29  enum
30  Pattern {
31  IXX=0, XIX, XXI
32  };
33 
34  // is the timebin in the desired pattern?
35  bool timeBinInPattern(const int tbin, const Pattern xxx) {
36  switch (xxx) {
37  case IXX:
38  return (tbin > 3);
39 
40  break;
41 
42  case XIX:
43  return ((tbin == 2) or (tbin == 3) or (tbin == 6) or (tbin == 7));
44 
45  break;
46 
47  case XXI:
48  return ((tbin == 1) or (tbin == 3) or (tbin == 5) or (tbin == 7));
49 
50  break;
51 
52  default:
53  return false;
54 
55  break;
56  }
57  }
58 }
59 
60 
61 SCTHitsNoiseMonAlg::SCTHitsNoiseMonAlg(const std::string& name, ISvcLocator* pSvcLocator)
62  :AthMonitorAlgorithm(name,pSvcLocator)
63 {
64 }
65 
66 
68 
69  ATH_CHECK(m_dataObjectName.initialize());
71  ATH_CHECK(m_dataObjectName.initialize());
73  ATH_CHECK(m_tracksName.initialize());
74 
76 
77  // Get the helper:
78  ATH_CHECK(detStore()->retrieve(m_pSCTHelper, "SCT_ID"));
79  ATH_CHECK(m_ConfigurationTool.retrieve());
80 
82  ATH_MSG_ERROR("wafer_hash_max()=" << m_pSCTHelper->wafer_hash_max() <<
83  " differs from SCT_Monitoring::N_WAFERS=" << SCT_Monitoring::N_WAFERS);
84  return StatusCode::RECOVERABLE;
85  }
87 }
88 
89 
90 StatusCode SCTHitsNoiseMonAlg::fillHistograms(const EventContext& ctx) const {
93 
94  // If track hits are selected, make the vector of track rdo identifiers
95  std::array<std::unordered_set<Identifier>, N_WAFERS> rdosOnTracks;
96  if (m_doTrackHits) {
97  if (makeVectorOfTrackRDOIdentifiers(rdosOnTracks, ctx).isFailure()) {
98  ATH_MSG_WARNING("Couldn't make vector of track RDO identifiers");
99  }
100  }
101  if (generalHistsandNoise(rdosOnTracks, ctx).isFailure()) {
102  ATH_MSG_WARNING("Error in generalHists");
103  }
104  if (makeSPvsEventNumber().isFailure()) {
105  ATH_MSG_WARNING("Error in makeSPvsEventNumber");
106  }
107 
108  return StatusCode::SUCCESS;
109 }
110 
111 StatusCode SCTHitsNoiseMonAlg::generalHistsandNoise(const std::array<std::unordered_set<Identifier>, N_WAFERS>& rdosOnTracks, const EventContext& ctx) const{
112  static const unsigned int limits[N_REGIONS] = {
114  };
115 
116  const EventIDBase& pEvent{ctx.eventID()};
117  const int lumi_block{static_cast<int>(pEvent.lumi_block())};
118 
120  if (not rdoContainer.isValid()) {
121  ATH_MSG_WARNING("SCT_RDO_Container not valid");
122  return StatusCode::FAILURE;
123  }
124  // Get the space point container
126  if (not spacePointContainer.isValid()) {
127  ATH_MSG_WARNING("SpacePointContainer not valid");
128  return StatusCode::FAILURE;
129  }
130 
131  bool isSelectedTrigger{false};
132  // EDAVIES - have now changed back to using L1_RD0_EMPTY
133  if (m_doTrigger and !m_trigDecTool.empty()) {
135  if (m_trigDecTool->isPassed(m_NOTriggerItem)) {
136  isSelectedTrigger = true;
138  }
139  }
140  }
141  m_events_lb++;
142  if (isSelectedTrigger) {
144  }
145 
146  std::vector<float> occ(N_WAFERS, 0.);
147  std::vector<float> hitOcc(N_WAFERS, 0.);
148 
149  int local_tothits{0};
150 
151  std::vector<int> barrel_local_nhitslayer(N_BARRELSx2, 0);
152  std::vector<int> ECp_local_nhitslayer(N_DISKSx2, 0);
153  std::vector<int> ECm_local_nhitslayer(N_DISKSx2, 0);
154  std::vector<int>* hitsInLayer[N_REGIONS] = {
155  &ECm_local_nhitslayer, &barrel_local_nhitslayer, &ECp_local_nhitslayer
156  };
157  const bool doThisSubsystem[N_REGIONS] = {
159  };
160  // vectors to store data to decrease number of fill() calls for better perfomance
161  std::vector<int> vLumiBlock[N_REGIONS];
162  std::vector<int> vNumberOfHitsFromAllRDOs[N_REGIONS];
163  std::vector<int> vNumberOfHitsFromSPs[N_REGIONS];
164  std::vector<bool> vIsSelectedTriggerHits[N_REGIONS];
165  for (unsigned int jReg{0}; jReg<N_REGIONS; jReg++) {
166  unsigned int size{0};
167  if (jReg==ENDCAP_C_INDEX or jReg==ENDCAP_A_INDEX) size = N_SIDES * N_MOD_ENDCAPS;
168  else if (jReg==BARREL_INDEX) size = N_SIDES * N_MOD_BARREL;
169  vLumiBlock[jReg].reserve(size);
170  vNumberOfHitsFromAllRDOs[jReg].reserve(size);
171  vNumberOfHitsFromSPs[jReg].reserve(size);
172  vIsSelectedTriggerHits[jReg].reserve(size);
173  }
174 
175  std::vector<int> vEtaOnTrack;
176  std::vector<int> vPhiOnTrack;
177  std::vector<float> vSystemIndexOnTrack;
178  std::vector<bool> vDTbinOnTrack;
179 
180  std::vector<int> vEta;
181  std::vector<int> vPhi;
182  std::vector<int> vNumberOfStrips;
183 
184  // Outer Loop on RDO Collection
185  for (const InDetRawDataCollection<SCT_RDORawData>* rdoCollection: *rdoContainer) {
186  // MJW new code- try getting the ID of the collection using the identify() method
187  const Identifier wafer_id{rdoCollection->identify()};
188  const IdentifierHash wafer_hash{rdoCollection->identifyHash()};
189  const Identifier module_id{m_pSCTHelper->module_id(wafer_id)};
190  const IdentifierHash theModuleHash0{m_pSCTHelper->wafer_hash(module_id)}; // This hash is not necessarily for side 0.
191  IdentifierHash theModuleHash1; // This hash is not necessarily for side 1.
192  m_pSCTHelper->get_other_side(theModuleHash0, theModuleHash1);
193  const int barrel_ec{m_pSCTHelper->barrel_ec(wafer_id)};
194  const unsigned int systemIndex{bec2Index(barrel_ec)};
195 
196  const int thisLayerDisk{m_pSCTHelper->layer_disk(wafer_id)};
197  const int thisPhi{m_pSCTHelper->phi_module(wafer_id)};
198  const int thisEta{m_pSCTHelper->eta_module(wafer_id)};
199  const int thisSide{m_pSCTHelper->side(wafer_id)};
200  const int thisElement{(N_SIDES * thisLayerDisk) + thisSide};
201 
202  LayerSideFormatter layerSide{static_cast<unsigned int>(thisElement), systemIndex};
203 
204  int numberOfHitsFromSPs{0};
205  int numberOfHitsFromAllRDOs{0};
206  // Now we want the space point container for this module
207  // We have to compare module IDs- the SP collection is defined for the 'normal' (i.e. no stereo) module side
208  // Define a set of spIDs
209  std::unordered_set<Identifier> mySetOfSPIds;
210  for (int side{0}; side<N_SIDES; side++) {
211  auto spContainerIterator{spacePointContainer->indexFindPtr(side==0 ? theModuleHash0 : theModuleHash1)};
212  if (spContainerIterator==nullptr) continue;
213  for (const Trk::SpacePoint* sp: *spContainerIterator) {
214  const std::vector<Identifier>& rdoList{(thisSide==side ? sp->clusterList().first : sp->clusterList().second)->rdoList()};
215  mySetOfSPIds.insert(rdoList.begin(), rdoList.end());
216  }
217  }
218 
219  vEtaOnTrack.clear();
220  vPhiOnTrack.clear();
221  vEta.clear();
222  vPhi.clear();
223  vNumberOfStrips.clear();
224 
225  // Now we loop over the RDOs in the RDO collection, and add to the NO vector any that are in the mySetOfSPIds
226  for (const SCT_RDORawData* rdo: *rdoCollection) {
227  const int numberOfStrips{rdo->getGroupSize()};
228  (*hitsInLayer[systemIndex])[thisElement] += numberOfStrips;
229  local_tothits += numberOfStrips;
230 
231  if (doThisSubsystem[systemIndex]) {
232  const SCT3_RawData* rdo3{dynamic_cast<const SCT3_RawData*>(rdo)};
233  int tbin{3};
234  if (rdo3) {
235  tbin = rdo3->getTimeBin();
236  }
237  const Identifier strip_id{rdo->identify()};
238  const int firstStrip{m_pSCTHelper->strip(strip_id)};
239  const int limit{firstStrip + numberOfStrips};
240 
241  if (rdosOnTracks[wafer_hash].find(strip_id) != rdosOnTracks[wafer_hash].end()) {
242  for (int ichan{firstStrip}; ichan < limit; ++ichan) {
243  vEtaOnTrack.push_back(thisEta);
244  vPhiOnTrack.push_back(thisPhi);
245  vDTbinOnTrack.push_back((tbin == 2) or (tbin == 3));
246  vSystemIndexOnTrack.push_back(systemIndex);
247  }
248  }
249  vEta.push_back(thisEta);
250  vPhi.push_back(thisPhi);
251  vNumberOfStrips.push_back(numberOfStrips);
252 
253  numberOfHitsFromAllRDOs += numberOfStrips;
254  // Record number of hits in space points if timebin filtering is on hits not in bin X1X are counted as in space
255  // points
256  if (mySetOfSPIds.find(strip_id) != mySetOfSPIds.end()) {
257  numberOfHitsFromSPs += numberOfStrips;
258  } else if (m_doTimeBinFilteringForNoise and (not timeBinInPattern(tbin, XIX))) {
259  numberOfHitsFromSPs += numberOfStrips;
260  }
261  }
262 
263  } // End of Loop on rdoCollection, so end of loop over the RDOs in the RDO container
264  // We can now do the NO calculation for this wafer
265  // For the Time Dependent plots
266 
267  const std::string streamhitmap{"mapsOfHitsOnTracks" + abbreviations[systemIndex] + "_" +
268  "trackhitsmap_" + layerSide.name()};
269 
270  auto etaMapsOfHitsOnTracksAcc{Monitored::Collection("eta_"+streamhitmap, vEtaOnTrack)};
271  auto phiMapsOfHitsOnTracksAcc{Monitored::Collection("phi_"+streamhitmap, vPhiOnTrack)};
272  fill("SCTHitsNoiseMonitor_" + std::to_string(systemIndex), etaMapsOfHitsOnTracksAcc, phiMapsOfHitsOnTracksAcc);
273 
274  const std::string hitmap{"hitsmap" + abbreviations[systemIndex] + "_" + layerSide.name()};
275 
276  auto etahitsmapAcc{Monitored::Collection("eta_"+hitmap, vEta)};
277  auto phihitsmapAcc{Monitored::Collection("phi_"+hitmap, vPhi)};
278  auto numberOfStripsAcc{Monitored::Collection("numberOfStrips_"+hitmap, vNumberOfStrips)};
279  fill("SCTHitsNoiseMonitor_" + std::to_string(systemIndex), etahitsmapAcc, phihitsmapAcc, numberOfStripsAcc);
280 
281  if (m_doOnline){
282  const std::string hitmaprecent{"hitsmaprecent" + abbreviations[systemIndex] + "_" + layerSide.name()};
283  auto etahitsmapRecentAcc{Monitored::Collection("eta_"+hitmaprecent, vEta)};
284  auto phihitsmapRecentAcc{Monitored::Collection("phi_"+hitmaprecent, vPhi)};
285  auto numberOfStripsRecentAcc{Monitored::Collection("numberOfStrips_"+hitmaprecent, vNumberOfStrips)};
286  fill("SCTHitsNoiseMonitor_" + std::to_string(systemIndex), etahitsmapRecentAcc, phihitsmapRecentAcc, numberOfStripsAcc);
287  }
288 
289  if (numberOfHitsFromAllRDOs > 0) {
290  int den{N_STRIPS - numberOfHitsFromSPs};
291  int num{numberOfHitsFromAllRDOs - numberOfHitsFromSPs};
292  if (num < 0) {
293  num = 0;
294  ATH_MSG_WARNING("Too many reconstructed space points for number of real hits");
295  }
296  if (den > 0) {
297  occ[wafer_hash] = static_cast<float>(num) / static_cast<float>(den) * 1.E5;
298  }
299 
300  hitOcc[wafer_hash] = static_cast<float>(numberOfHitsFromAllRDOs) / static_cast<float>(N_STRIPS) * 1.E5;
301 
302  vLumiBlock[systemIndex].push_back(lumi_block);
303  vNumberOfHitsFromAllRDOs[systemIndex].push_back(numberOfHitsFromAllRDOs);
304  vNumberOfHitsFromSPs[systemIndex].push_back(numberOfHitsFromSPs);
305  vIsSelectedTriggerHits[systemIndex].push_back(isSelectedTrigger);
306  // end of hit occupancy
307  }
308  }// End of Loop on RDO container
309 
310  auto Bec_TBinFracAllAcc{Monitored::Collection("Bec_TBinFracAll", vSystemIndexOnTrack)};
311  auto TBin_TBinFracAllAcc{Monitored::Collection("TBin_TBinFracAll", vDTbinOnTrack)};
312  fill("SCTHitsNoiseMonitorGeneral", Bec_TBinFracAllAcc, TBin_TBinFracAllAcc);
313 
314  for (unsigned int jReg{0}; jReg<N_REGIONS; jReg++) {
315  auto lbHitsAcc{Monitored::Collection("LBHits", vLumiBlock[jReg])};
316  auto numberOfHitsFromAllRDOsAcc{Monitored::Collection("numberOfHitsFromAllRDOs", vNumberOfHitsFromAllRDOs[jReg])};
317  auto numberOfHitsFromSPsAcc{Monitored::Collection("numberOfHitsFromSPs", vNumberOfHitsFromSPs[jReg])};
318  auto isSelectedTriggerHitsAcc{Monitored::Collection("isSelectedTriggerHits", vIsSelectedTriggerHits[jReg])};
319  fill("SCTHitsNoiseMonitor_" + std::to_string(jReg), lbHitsAcc, numberOfHitsFromAllRDOsAcc, numberOfHitsFromSPsAcc, isSelectedTriggerHitsAcc);
320  }
321 
322  // Fill Cluster size histogram
324  if (not clusterContainer.isValid()) {
325  ATH_MSG_WARNING("Couldn't retrieve clusters");
326  }
327 
328  std::vector<long unsigned int> vGroupSize;
329  for (const InDet::SCT_ClusterCollection* clusterCollection: *clusterContainer) {
330  for (const InDet::SCT_Cluster* cluster: *clusterCollection) {
331  vGroupSize.push_back(cluster->rdoList().size());
332  }
333  }
334  auto cluSizeAcc{Monitored::Collection("clu_size", vGroupSize)};
335  fill("SCTHitsNoiseMonitorGeneral", cluSizeAcc);
336  auto hitsAcc{Monitored::Scalar<int>("sct_hits", local_tothits)};
337  fill("SCTHitsNoiseMonitorGeneral", hitsAcc);
338 
339  // Fill hit occupancy and noise occupancy plots
340  // vectors for storing the data and then use only one fill call to decrease time
341  std::vector<int> vLB[N_REGIONS_INC_GENERAL];
342  std::vector<float> vNO[N_REGIONS_INC_GENERAL];
343  std::vector<float> vHO[N_REGIONS_INC_GENERAL];
344  std::vector<bool> vIsSelectedTrigger[N_REGIONS_INC_GENERAL];
345  std::vector<std::vector<float>> vNO2D[N_REGIONS];
346  std::vector<std::vector<float>> vHO2D[N_REGIONS];
347  std::vector<std::vector<int>> vEtaNOHO[N_REGIONS];
348  std::vector<std::vector<int>> vPhiNOHO[N_REGIONS];
349  std::vector<std::vector<bool>> vIsSelectedTriggerNOHO[N_REGIONS];
350  for (unsigned int jReg{0}; jReg<N_REGIONS_INC_GENERAL; jReg++) {
351  unsigned int size{N_WAFERS};
352  if (jReg==ENDCAP_C_INDEX or jReg==ENDCAP_A_INDEX) size = N_SIDES * N_MOD_ENDCAPS;
353  else if (jReg==BARREL_INDEX) size = N_SIDES * N_MOD_BARREL;
354  vLB[jReg].reserve(size);
355  vNO[jReg].reserve(size);
356  vHO[jReg].reserve(size);
357  vIsSelectedTrigger[jReg].reserve(size);
358 
359  if (jReg<GENERAL_INDEX) {
360  vNO2D[jReg].resize(limits[jReg], {});
361  vHO2D[jReg].resize(limits[jReg], {});
362  vEtaNOHO[jReg].resize(limits[jReg], {});
363  vPhiNOHO[jReg].resize(limits[jReg], {});
364  vIsSelectedTriggerNOHO[jReg].resize(limits[jReg], {});
365  for (unsigned int element{0}; element< limits[jReg]; ++element) {
366  const int nWafers{getNumModules(jReg, element)*N_SIDES};
367  vNO2D[jReg][element].reserve(nWafers);
368  vHO2D[jReg][element].reserve(nWafers);
369  vEtaNOHO[jReg][element].reserve(nWafers);
370  vPhiNOHO[jReg][element].reserve(nWafers);
371  vIsSelectedTriggerNOHO[jReg][element].reserve(nWafers);
372  }
373  }
374  }
375 
376  for (unsigned int iHash{0}; iHash<N_WAFERS; iHash++) {
377  const IdentifierHash wafer_hash{iHash};
378  if (not m_ConfigurationTool->isGood(wafer_hash)) continue;
379 
380  const Identifier wafer_id{m_pSCTHelper->wafer_id(wafer_hash)};
381  const int barrel_ec{m_pSCTHelper->barrel_ec(wafer_id)};
382  const unsigned int systemIndex{bec2Index(barrel_ec)};
383  vLB[systemIndex].push_back(lumi_block);
384  vNO[systemIndex].push_back(occ[iHash]);
385  vHO[systemIndex].push_back(hitOcc[iHash]);
386  vIsSelectedTrigger[systemIndex].push_back(isSelectedTrigger);
387  vLB[GENERAL_INDEX].push_back(lumi_block);
388  vNO[GENERAL_INDEX].push_back(occ[iHash]);
389  vHO[GENERAL_INDEX].push_back(hitOcc[iHash]);
390  vIsSelectedTrigger[GENERAL_INDEX].push_back(isSelectedTrigger);
391  if (doThisSubsystem[systemIndex]) {
392  const int element{N_SIDES * m_pSCTHelper->layer_disk(wafer_id) + m_pSCTHelper->side(wafer_id)};
393  vNO2D[systemIndex][element].push_back(occ[iHash]);
394  vHO2D[systemIndex][element].push_back(hitOcc[iHash]);
395  vEtaNOHO[systemIndex][element].push_back(m_pSCTHelper->eta_module(wafer_id));
396  vPhiNOHO[systemIndex][element].push_back(m_pSCTHelper->phi_module(wafer_id));
397  vIsSelectedTriggerNOHO[systemIndex][element].push_back(isSelectedTrigger);
398  }
399  }
400 
401  for (unsigned int jReg{0}; jReg<N_REGIONS_INC_GENERAL; jReg++) {
402  std::string monitor;
403  if (jReg==GENERAL_INDEX) monitor = "SCTHitsNoiseMonitorGeneral";
404  else monitor = "SCTHitsNoiseMonitor_" + std::to_string(jReg);
405 
406  auto LBAcc{Monitored::Collection("LB", vLB[jReg])};
407  auto noAcc{Monitored::Collection("NO", vNO[jReg])};
408  auto hoAcc{Monitored::Collection("HO", vHO[jReg])};
409  auto IsSelectedTriggerAcc{Monitored::Collection("IsSelectedTrigger", vIsSelectedTrigger[jReg])};
410  fill(monitor, LBAcc, noAcc, hoAcc, IsSelectedTriggerAcc);
411  }
412 
413  for (unsigned int jReg{0}; jReg<N_REGIONS; ++jReg){
414  for (unsigned int element{0}; element < limits[jReg]; ++element) {
415  LayerSideFormatter layerSide{element, jReg};
416  const std::string occMap{"occupancymap" + abbreviations[jReg] + "_" + layerSide.name()};
417  auto etaEacc{Monitored::Collection("eta_" + occMap, vEtaNOHO[jReg][element])};
418  auto phiAcc{Monitored::Collection("phi_" + occMap, vPhiNOHO[jReg][element])};
419  auto hoAcc{Monitored::Collection("HO_" + occMap, vHO2D[jReg][element])};
420  auto noAcc{Monitored::Collection("NO_" + occMap, vNO2D[jReg][element])};
421  auto isSelectedTriggerAcc{Monitored::Collection("IsSelectedTrigger_"+occMap, vIsSelectedTriggerNOHO[jReg][element])};
422  fill("SCTHitsNoiseMonitor_" + std::to_string(jReg), etaEacc, phiAcc, hoAcc, noAcc, isSelectedTriggerAcc);
423 
424  if (m_doOnline){
425  auto isSelectedTriggerRecentAcc{Monitored::Collection("IsSelectedTriggerRecent_"+occMap, vIsSelectedTriggerNOHO[jReg][element])};
426  fill("SCTHitsNoiseMonitor_" + std::to_string(jReg), etaEacc, phiAcc, hoAcc, noAcc, isSelectedTriggerRecentAcc);
427  }
428 
429  }
430  }
431 
432  return StatusCode::SUCCESS;
433 }
434 
435 
436 StatusCode SCTHitsNoiseMonAlg::makeVectorOfTrackRDOIdentifiers(std::array<std::unordered_set<Identifier>, N_WAFERS>& rdosOnTracks, const EventContext& ctx) const{
437  // Clear the rdosOnTracks vector
438  rdosOnTracks.fill(std::unordered_set<Identifier>());
440  if (not rdoContainer.isValid()) {
441  ATH_MSG_FATAL("Could not find the data object " << m_dataObjectName.key() << " !");
442  return StatusCode::FAILURE;
443  } else {
444  ATH_MSG_DEBUG("Data object " << m_dataObjectName.key() << " found");
445  }
446 
448  if (not tracks.isValid()) {
449  ATH_MSG_FATAL("No tracks for you!");
450  return StatusCode::FAILURE;
451  }
452  // Only do for events with less than some number of tracks
453  if (tracks->size() > m_maxTracks) {
454  ATH_MSG_DEBUG("The event has more than " << m_maxTracks
455  << " tracks. Don't do hits-on-track-hists");
456  return StatusCode::SUCCESS;
457  }
458  // assemble list of rdo ids associated with tracks
459  for (const Trk::Track* track : *tracks) {
460  if (track == nullptr) {
461  ATH_MSG_WARNING("no pointer to track!!!");
462  break;
463  }
464  // Get pointer to track state on surfaces
465  const Trk::TrackStates* trackStates{track->trackStateOnSurfaces()};
466  if (trackStates == nullptr) {
467  ATH_MSG_WARNING("for current track is TrackStateOnSurfaces == Null, no data will be written for this track");
468  } else {// Loop over all track states on surfaces
469  for (const Trk::TrackStateOnSurface* TSOS: *trackStates) {
470  // Get pointer to RIO of right type
471  const InDet::SiClusterOnTrack* clus{dynamic_cast<const InDet::SiClusterOnTrack*>(TSOS->measurementOnTrack())};
472  if (clus) {
473  // Get Pointer to prepRawDataObject
474  const InDet::SiCluster* RawDataClus{dynamic_cast<const InDet::SiCluster*>(clus->prepRawData())};
475  if (RawDataClus == nullptr) {
476  ATH_MSG_WARNING("SiCluster WITHOUT prepRawData!!!!");
477  break;
478  }
479  // if Cluster is in SCT ...
480  if (RawDataClus->detectorElement()->isSCT()) {
481  const std::vector<Identifier>& rdoList{RawDataClus->rdoList()};
482  rdosOnTracks[RawDataClus->detectorElement()->identifyHash()].insert(rdoList.begin(), rdoList.end());
483  }
484  }
485  }
486  }
487  }
488  return StatusCode::SUCCESS;
489 }
490 
492  return StatusCode::SUCCESS;
493 }
SCT_Monitoring::ENDCAP_C_INDEX
@ ENDCAP_C_INDEX
Definition: SCT_MonitoringNumbers.h:19
python.PyKernel.retrieve
def retrieve(aClass, aKey=None)
Definition: PyKernel.py:110
SCT_NameFormatter.h
SCT_CalibAlgs::bec2Index
unsigned int bec2Index(const int bec)
Definition: SCT_CalibUtilities.cxx:60
Trk::SpacePoint
Definition: Tracking/TrkEvent/TrkSpacePoint/TrkSpacePoint/SpacePoint.h:35
SCTHitsNoiseMonAlg::makeSPvsEventNumber
StatusCode makeSPvsEventNumber() const
Definition: SCTHitsNoiseMonAlg.cxx:491
SCTHitsNoiseMonAlg::m_SCTDetEleCollKey
SG::ReadCondHandleKey< InDetDD::SiDetectorElementCollection > m_SCTDetEleCollKey
Definition: SCTHitsNoiseMonAlg.h:97
AthMonitorAlgorithm::dataType
DataType_t dataType() const
Accessor functions for the data type.
Definition: AthMonitorAlgorithm.h:221
SCT_Monitoring::N_REGIONS
@ N_REGIONS
Definition: SCT_MonitoringNumbers.h:19
ATH_MSG_FATAL
#define ATH_MSG_FATAL(x)
Definition: AthMsgStreamMacros.h:34
SCT_ID.h
This is an Identifier helper class for the SCT subdetector. This class is a factory for creating comp...
SCT_Monitoring::N_WAFERS
@ N_WAFERS
Definition: SCT_MonitoringNumbers.h:51
AthMonitorAlgorithm::m_trigDecTool
PublicToolHandle< Trig::TrigDecisionTool > m_trigDecTool
Tool to tell whether a specific trigger is passed.
Definition: AthMonitorAlgorithm.h:340
find
std::string find(const std::string &s)
return a remapped string
Definition: hcg.cxx:135
SCT_ConditionsData::N_REGIONS
@ N_REGIONS
Definition: SCT_ConditionsParameters.h:28
Trk::Track
The ATLAS Track class.
Definition: Tracking/TrkEvent/TrkTrack/TrkTrack/Track.h:73
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:70
SCTHitsNoiseMonAlg::m_maxTracks
UnsignedIntegerProperty m_maxTracks
Definition: SCTHitsNoiseMonAlg.h:85
SCTHitsNoiseMonAlg::m_events_lb
std::atomic< int > m_events_lb
Definition: SCTHitsNoiseMonAlg.h:51
SCT::N_SIDES
constexpr unsigned int N_SIDES
Definition: SCT_ChipUtils.h:16
SCT_Monitoring::LayerSideFormatter::name
std::string name(const std::string &delimiter="_") const
Definition: SCT_NameFormatter.h:72
makeHists.thisPhi
thisPhi
Definition: makeHists.py:127
SCT_Monitoring::N_BARRELSx2
@ N_BARRELSx2
Definition: SCT_MonitoringNumbers.h:43
SCTHitsNoiseMonAlg::fillHistograms
virtual StatusCode fillHistograms(const EventContext &ctx) const override final
adds event to the monitoring histograms
Definition: SCTHitsNoiseMonAlg.cxx:90
SiClusterOnTrack.h
SCT_RDORawData
Definition: SCT_RDORawData.h:24
SCT_ID::barrel_ec
int barrel_ec(const Identifier &id) const
Values of different levels (failure returns 0)
Definition: SCT_ID.h:728
SCT_Monitoring::BARREL_INDEX
@ BARREL_INDEX
Definition: SCT_MonitoringNumbers.h:19
SCT_ID::phi_module
int phi_module(const Identifier &id) const
Definition: SCT_ID.h:740
SCT_Monitoring::N_STRIPS
@ N_STRIPS
Definition: SCT_MonitoringNumbers.h:36
SCT_Monitoring
Definition: SCT_MonitoringNumbers.h:17
SCT_ID::module_id
Identifier module_id(int barrel_ec, int layer_disk, int phi_module, int eta_module) const
For a single crystal.
Definition: SCT_ID.h:416
SCTHitsNoiseMonAlg::m_doNegativeEndcap
BooleanProperty m_doNegativeEndcap
Definition: SCTHitsNoiseMonAlg.h:72
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
Monitored::Collection
ValuesCollection< T > Collection(std::string name, const T &collection)
Declare a monitored (double-convertible) collection.
Definition: MonitoredCollection.h:38
TRT::Hit::side
@ side
Definition: HitInfo.h:83
AthMonitorAlgorithm
Base class for Athena Monitoring Algorithms.
Definition: AthMonitorAlgorithm.h:36
SCT_Monitoring::ENDCAP_A_INDEX
@ ENDCAP_A_INDEX
Definition: SCT_MonitoringNumbers.h:19
SCTHitsNoiseMonAlg::m_doTimeBinFilteringForNoise
BooleanProperty m_doTimeBinFilteringForNoise
Add time-bin filtering to space point NO algorithm.
Definition: SCTHitsNoiseMonAlg.h:77
python.setupRTTAlg.size
int size
Definition: setupRTTAlg.py:39
SCTHitsNoiseMonAlg::initialize
virtual StatusCode initialize() override final
initialize
Definition: SCTHitsNoiseMonAlg.cxx:67
SCT_Monitoring::N_REGIONS_INC_GENERAL
@ N_REGIONS_INC_GENERAL
Definition: SCT_MonitoringNumbers.h:19
SCTHitsNoiseMonAlg::m_SCTSPContainerName
SG::ReadHandleKey< SpacePointContainer > m_SCTSPContainerName
Definition: SCTHitsNoiseMonAlg.h:93
SpacePointCollection.h
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
SCT3_RawData.h
SCT_CalibAlgs::firstStrip
@ firstStrip
Definition: SCT_CalibNumbers.h:10
SCTHitsNoiseMonAlg::m_doOnline
BooleanProperty m_doOnline
Definition: SCTHitsNoiseMonAlg.h:67
SCT3_RawData
Definition: SCT3_RawData.h:24
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
SpacePoint.h
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
SCT_Monitoring::LayerSideFormatter
format an element index (e.g.
Definition: SCT_NameFormatter.h:20
SCTHitsNoiseMonAlg::m_pSCTHelper
const SCT_ID * m_pSCTHelper
SCT Helper class.
Definition: SCTHitsNoiseMonAlg.h:108
InDetRawDataCollection
Definition: InDetRawDataCollection.h:31
SCT_Monitoring::N_MOD_ENDCAPS
@ N_MOD_ENDCAPS
Definition: SCT_MonitoringNumbers.h:49
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
SCTHitsNoiseMonAlg::m_doTrackHits
BooleanProperty m_doTrackHits
Definition: SCTHitsNoiseMonAlg.h:84
SCTHitsNoiseMonAlg::m_clusContainerKey
SG::ReadHandleKey< InDet::SCT_ClusterContainer > m_clusContainerKey
Definition: SCTHitsNoiseMonAlg.h:91
SCT3_RawData::getTimeBin
int getTimeBin() const
Definition: SCT3_RawData.h:92
SCT_ID::wafer_hash
IdentifierHash wafer_hash(const Identifier &wafer_id) const
wafer hash from id - optimized
Definition: SCT_ID.h:492
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
SCT_ID::get_other_side
int get_other_side(const IdentifierHash &id, IdentifierHash &other) const
Wafer hash on other side.
Definition: SCT_ID.cxx:443
InDet::SCT_Cluster
Definition: InnerDetector/InDetRecEvent/InDetPrepRawData/InDetPrepRawData/SCT_Cluster.h:34
DataVector< const Trk::TrackStateOnSurface >
SCTHitsNoiseMonAlg::m_numberOfEventsRecent
std::atomic< int > m_numberOfEventsRecent
Definition: SCTHitsNoiseMonAlg.h:47
AthMonitorAlgorithm::DataType_t::cosmics
@ cosmics
lumiFormat.array
array
Definition: lumiFormat.py:91
trigbs_pickEvents.num
num
Definition: trigbs_pickEvents.py:76
SCT_Monitoring::GENERAL_INDEX
@ GENERAL_INDEX
Definition: SCT_MonitoringNumbers.h:19
Trk::TrackStateOnSurface
represents the track state (measurement, material, fit parameters and quality) at a surface.
Definition: TrackStateOnSurface.h:71
defineDB.ichan
int ichan
Definition: JetTagCalibration/share/defineDB.py:28
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:228
SCT_ID::wafer_hash_max
size_type wafer_hash_max(void) const
Definition: SCT_ID.cxx:645
RIO_OnTrack.h
ActsTrk::to_string
std::string to_string(const DetectorType &type)
Definition: GeometryDefs.h:34
SCT_ID::layer_disk
int layer_disk(const Identifier &id) const
Definition: SCT_ID.h:734
SG::CondHandleKey::initialize
StatusCode initialize(bool used=true)
SCTHitsNoiseMonAlg::m_eventsTrigger_lb
std::atomic< int > m_eventsTrigger_lb
Definition: SCTHitsNoiseMonAlg.h:52
ISCT_ConfigurationConditionsTool.h
AthMonitorAlgorithm::initialize
virtual StatusCode initialize() override
initialize
Definition: AthMonitorAlgorithm.cxx:18
DataVector.h
An STL vector of pointers that by default owns its pointed-to elements.
Trk::Pattern
@ Pattern
Definition: ParametersCommon.h:29
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
SCT_ID::strip
int strip(const Identifier &id) const
Definition: SCT_ID.h:764
SCTHitsNoiseMonAlg::m_dataObjectName
SG::ReadHandleKey< SCT_RDO_Container > m_dataObjectName
Data object name: for the SCT this is "SCT_RDOs".
Definition: SCTHitsNoiseMonAlg.h:95
SCTHitsNoiseMonAlg::m_NOTriggerItem
StringProperty m_NOTriggerItem
Name of the L1 Type to use for filling the extra NO histograms.
Definition: SCTHitsNoiseMonAlg.h:65
SCT_ID::eta_module
int eta_module(const Identifier &id) const
Definition: SCT_ID.h:746
SCT_ClusterContainer.h
SCTHitsNoiseMonAlg::makeVectorOfTrackRDOIdentifiers
StatusCode makeVectorOfTrackRDOIdentifiers(std::array< std::unordered_set< Identifier >, SCT_Monitoring::N_WAFERS > &rdosOnTracks, const EventContext &ctx) const
Definition: SCTHitsNoiseMonAlg.cxx:436
SCTHitsNoiseMonAlg.h
SCT_ID::side
int side(const Identifier &id) const
Definition: SCT_ID.h:752
SCTHitsNoiseMonAlg::m_tracksName
SG::ReadHandleKey< TrackCollection > m_tracksName
Name of the Track collection to use.
Definition: SCTHitsNoiseMonAlg.h:90
SCT_Monitoring::getNumModules
int getNumModules(const int reg, const int layer)
Definition: SCT_MonitoringNumbers.h:99
SCTHitsNoiseMonAlg::SCTHitsNoiseMonAlg
SCTHitsNoiseMonAlg(const std::string &name, ISvcLocator *pSvcLocator)
Definition: SCTHitsNoiseMonAlg.cxx:61
SCTHitsNoiseMonAlg::m_numberOfEventsTrigger
std::atomic< int > m_numberOfEventsTrigger
Definition: SCTHitsNoiseMonAlg.h:45
SCTHitsNoiseMonAlg::m_doPositiveEndcap
BooleanProperty m_doPositiveEndcap
Switch on or off the hitmaps histograms.
Definition: SCTHitsNoiseMonAlg.h:71
xAOD::track
@ track
Definition: TrackingPrimitives.h:512
SCTHitsNoiseMonAlg::m_ConfigurationTool
ToolHandle< ISCT_ConfigurationConditionsTool > m_ConfigurationTool
Definition: SCTHitsNoiseMonAlg.h:101
Monitored::Scalar
Declare a monitored scalar variable.
Definition: MonitoredScalar.h:34
SCTHitsNoiseMonAlg::m_numberOfEvents
std::atomic< int > m_numberOfEvents
Definition: SCTHitsNoiseMonAlg.h:43
ReadHandle.h
Handle class for reading from StoreGate.
SCT_ID::wafer_id
Identifier wafer_id(int barrel_ec, int layer_disk, int phi_module, int eta_module, int side) const
For a single side of module.
Definition: SCT_ID.h:464
SCT_Monitoring::N_MOD_BARREL
@ N_MOD_BARREL
Definition: SCT_MonitoringNumbers.h:49
InDet::SCT_ClusterCollection
Trk::PrepRawDataCollection< SCT_Cluster > SCT_ClusterCollection
Definition: SCT_ClusterCollection.h:26
updateCoolNtuple.limit
int limit
Definition: updateCoolNtuple.py:45
InDet::SiCluster
Definition: InnerDetector/InDetRecEvent/InDetPrepRawData/InDetPrepRawData/SiCluster.h:40
SCTHitsNoiseMonAlg::m_doTrigger
BooleanProperty m_doTrigger
Definition: SCTHitsNoiseMonAlg.h:66
SCT_Monitoring::N_DISKSx2
@ N_DISKSx2
Definition: SCT_MonitoringNumbers.h:44
SCTHitsNoiseMonAlg::generalHistsandNoise
StatusCode generalHistsandNoise(const std::array< std::unordered_set< Identifier >, SCT_Monitoring::N_WAFERS > &rdosOnTracks, const EventContext &ctx) const
Definition: SCTHitsNoiseMonAlg.cxx:111
InDet::SiClusterOnTrack
Definition: SiClusterOnTrack.h:39
Identifier
Definition: IdentifierFieldParser.cxx:14