ATLAS Offline Software
SCTHitEffMonAlg.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 "SCTHitEffMonAlg.h"
6 
7 // Athena
12 #include "StoreGate/ReadHandle.h"
13 
14 // InDet
16 #include "InDetIdentifier/SCT_ID.h"
17 #include "InDetIdentifier/TRT_ID.h"
19 // Conditions
23 
25 
26 // Track
27 #include "TrkSurfaces/Surface.h"
30 #include "TrkTrack/Track.h"
32 
33 // SCT
34 #include "SCT_NameFormatter.h"
36 
37 // std and STL includes
38 #include <algorithm>
39 #include <array>
40 #include <cmath>
41 #include <limits> // std::numeric_limits
42 #include <memory>
43 #include <sstream>
44 
45 // #include "TRandom.h" // Only for Testing
46 
47 using namespace SCT_Monitoring;
48 
49 namespace {// anonymous namespace for functions at file scope
50  static const bool testOffline{false};
51 
52  template< typename T > Identifier
53  surfaceOnTrackIdentifier(const T& tsos, const bool useTrackParameters = true) {
54  Identifier result; // default constructor produces invalid value
55  const Trk::MeasurementBase* mesb{tsos->measurementOnTrack()};
56 
57  if (mesb and mesb->associatedSurface().associatedDetectorElement()) {
58  result = mesb->associatedSurface().associatedDetectorElement()->identify();
59  } else if (useTrackParameters and tsos->trackParameters()) {
60  result = tsos->trackParameters()->associatedSurface().associatedDetectorElementIdentifier();
61  }
62  return result;
63  }
64 
65  constexpr double radianDegrees{180. / M_PI};
66 
67  static const double stripWidth{79.95e-3}; // in mm
68 
69  static const std::array < std::string, N_REGIONS > regionNames = {
70  "SCTHitEffMonitorEC", "SCTHitEffMonitorB", "SCTHitEffMonitorEA"
71  };
72 
73 }// namespace end
74 
75 SCTHitEffMonAlg::SCTHitEffMonAlg(const std::string& name, ISvcLocator* pSvcLocator)
76  :AthMonitorAlgorithm(name,pSvcLocator) {
77 }
78 
80  ATH_MSG_INFO("Initializing SCTHitEffMonAlg");
81 
82  ATH_CHECK(detStore()->retrieve(m_sctId, "SCT_ID"));
83  ATH_CHECK(detStore()->retrieve(m_pixelId, "PixelID"));
84  ATH_CHECK(detStore()->retrieve(m_trtId, "TRT_ID"));
85 
87  ATH_MSG_INFO("Retrieved pull calculator tool " << m_residualPullCalculator);
88 
89  ATH_CHECK(m_holeSearchTool.retrieve());
90  ATH_MSG_INFO("Retrieved hole search tool " << m_holeSearchTool);
91 
92  ATH_CHECK(m_rotcreator.retrieve());
93 
94  ATH_MSG_INFO("Retrieved tool " << m_rotcreator);
96  ATH_CHECK(m_configConditions.retrieve());
97 
98  m_path = (m_useIDGlobal) ? ("/InDetGlobal/") : ("");
99  ATH_MSG_INFO("End");
100 
101  if ((m_minSCTHits == -1) and (m_minTRTHits == -1) and (m_minOtherHits == -1)) {
102  if (m_isCosmic) {
103  m_minTRTHits = 45;
104  m_minSCTHits = 7;
105  m_minOtherHits = 5;
106  } else {
107  m_minTRTHits = 30;
108  m_minSCTHits = 4;
109  m_minOtherHits = 3;
110  }
111  }
112 
114  ATH_CHECK( m_TrackName.initialize() );
116 
119 
121 }
122 
123 
124 int SCTHitEffMonAlg::becIdxLayer2Index(const int becIdx, const int layer) const {
125  switch( becIdx ) {
127  return layer;
132  default:
133  return -1;
134  }
135 }
136 
137 int SCTHitEffMonAlg::getWaferIndex(const int barrel_ec, const int layer_disk, const int side) const {
138  int waferIndex = -1;
139  if (barrel_ec == BARREL) {
140  // corresponds to the waferIndex of B3 side0
141  waferIndex = 0;
142  } else if (barrel_ec == ENDCAP_A) {
143  // corresponds to the waferIndex of EA0 side0
144  waferIndex = N_BARRELS*N_SIDES;
145  } else if (barrel_ec == ENDCAP_C) {
146  // corresponds to the waferIndex of EC0 side0
147  waferIndex = N_BARRELS*N_SIDES + N_ENDCAPS*N_SIDES;
148  } else {
149  ATH_MSG_WARNING("The barrel_bc index" << barrel_ec << " is not defined.");
150  return waferIndex;
151  }
152  return waferIndex + layer_disk * N_SIDES + side;
153 }
154 
155 double SCTHitEffMonAlg::getResidual(const Identifier& surfaceID,
156  const Trk::TrackParameters* trkParam,
157  const InDet::SCT_ClusterContainer* p_sctclcontainer) const {
158  double trackHitResidual{-999.};
159 
160  if (trkParam==nullptr) {
161  ATH_MSG_WARNING("Not track parameters found. Returning default residual value.");
162  return trackHitResidual;
163  }
164  IdentifierHash idh{m_sctId->wafer_hash(surfaceID)};
165  auto containerIterator{p_sctclcontainer->indexFindPtr(idh)};
166  if (containerIterator != nullptr) {
167  for (const InDet::SCT_Cluster* cluster: *containerIterator) {
168  if ((cluster==nullptr) or (cluster->detectorElement()==nullptr)) {
169  ATH_MSG_WARNING("nullptr to RIO or detElement");
170  continue;
171  }
172  if (surfaceID == m_sctId->wafer_id(cluster->detectorElement()->identify())) {
173  const Trk::PrepRawData* rioo{dynamic_cast<const Trk::PrepRawData *>(cluster)};
174  std::unique_ptr<const Trk::RIO_OnTrack> rio{m_rotcreator->correct(*rioo, *trkParam)};
175  if (not m_residualPullCalculator.empty()) {
176  std::optional<Trk::ResidualPull> residualPull{m_residualPullCalculator->residualPull(rio.get(), trkParam,
178  if (not residualPull) continue;
179  if (std::abs(residualPull->residual()[Trk::loc1]) < std::abs(trackHitResidual)) {
180  trackHitResidual = residualPull->residual()[Trk::loc1];
181  }
182  }
183  }
184  }
185  }
186  return trackHitResidual;
187 }
188 
191  const Identifier id,
192  const InDetDD::SiDetectorElementCollection* elements,
193  double& theta,
194  double& phi) const {
195  phi = 90.;
196  theta = 90.;
197 
198  const Identifier waferId{m_sctId->wafer_id(id)};
199  const IdentifierHash waferHash{m_sctId->wafer_hash(waferId)};
200  const InDetDD::SiDetectorElement* element{elements->getDetectorElement(waferHash)};
201  if (not element) {
202  ATH_MSG_VERBOSE("findAnglesToWaferSurface: failed to find detector element for id = " << m_sctId->print_to_string(id));
203  return StatusCode::FAILURE;
204  }
205  double pNormal{mom.dot(element->normal())};
206  double pEta{mom.dot(element->etaAxis())};
207  double pPhi{mom.dot(element->phiAxis())};
208  if (pPhi < 0.) {
209  phi = -90.;
210  }
211  if (pEta < 0.) {
212  theta = -90.;
213  }
214  if (pNormal != 0.) {
215  phi = std::atan(pPhi / pNormal) * radianDegrees;
216  theta = std::atan(pEta / pNormal) * radianDegrees;
217  }
218  return StatusCode::SUCCESS;
219 }
220 
221 int SCTHitEffMonAlg::previousChip(double xl, int side, bool swap) const {
222  double xLeftEdge{xl + N_STRIPS / 2. * stripWidth}; // xl defined wrt center of module, convert to edge of module
223  int chipPos{static_cast<int>(xLeftEdge / (stripWidth * N_STRIPS) * N_CHIPS)};
224 
225  if (side == 0) {
226  chipPos = swap ? 5 - chipPos : chipPos;
227  } else {
228  chipPos = swap ? 11 - chipPos : 6 + chipPos;
229  }
230  return chipPos;
231 }
232 
233 StatusCode SCTHitEffMonAlg::failCut(bool value, const std::string & name) const {
234  if (value) {
235  ATH_MSG_VERBOSE("Passed " << name);
236  return StatusCode::FAILURE;
237  }
238  ATH_MSG_VERBOSE("Failed " << name);
239  return StatusCode::SUCCESS;
240 }
241 
242 StatusCode SCTHitEffMonAlg::fillHistograms(const EventContext& ctx) const {
243  ATH_MSG_VERBOSE("SCTHitEffMonTool::fillHistograms()");
244 
245  const std::map<Identifier, unsigned int>* badChips{nullptr};
246  if (m_vetoBadChips) {
247  badChips = m_configConditions->badChips(ctx);
248  }
249 
250  double timecor{-20.};
251  if (m_useTRTPhase or m_isCosmic) {
252  SG::ReadHandle<ComTime> theComTime{m_comTimeName, ctx};
253  if (theComTime.isValid()) {
254  timecor = theComTime->getTime();
255  ATH_MSG_VERBOSE("Retrieved ComTime object with name " << m_comTimeName.key() << " found: Time = " << timecor);
256  } else {
257  timecor = -18.;
258  ATH_MSG_WARNING("ComTime object not found with name " << m_comTimeName.key());
259  }
260  }
261  // If we are going to use TRT phase in anger, need run-dependent corrections.
262  const EventIDBase& pEvent{ctx.eventID()};
263  unsigned BCID{pEvent.bunch_crossing_id()};
265  if (!bcidHdl.isValid()) {
266  ATH_MSG_ERROR( "Unable to retrieve BunchCrossing conditions object" );
267  return StatusCode::FAILURE;
268  }
269  const BunchCrossingCondData* bcData{*bcidHdl};
271 
273  const AtlasFieldCacheCondObj* fieldCondObj{*fieldHandle};
274  if (fieldCondObj==nullptr) {
275  ATH_MSG_ERROR("AtlasFieldCacheCondObj cannot be retrieved.");
276  return StatusCode::RECOVERABLE;
277  }
278  MagField::AtlasFieldCache fieldCache;
279  fieldCondObj->getInitializedCache(fieldCache);
280  const bool solenoidOn{fieldCache.solenoidOn()};
281 
282  // ---- First try if m_tracksName is a TrackCollection
284  if (not tracks.isValid()) {
285  ATH_MSG_WARNING("Tracks not found: " << tracks << " / " << m_TrackName.key());
286  return StatusCode::SUCCESS;
287  } else {
288  ATH_MSG_VERBOSE("Successfully retrieved " << m_TrackName.key() << " : " << tracks->size() << " items");
289  }
290 
292  if (not p_sctclcontainer.isValid()) {
293  ATH_MSG_WARNING("SCT clusters container not found: " << m_sctContainerName.key());
294  return StatusCode::SUCCESS;
295  }
296 
297  // cut on number of tracks (skip this cut for online)
299  if (failCut(tracks->size() <= m_maxTracks, "# of tracks cut")) {
300  return StatusCode::SUCCESS;
301  }
302  }
303 
305  const InDetDD::SiDetectorElementCollection* elements{sctDetEle.retrieve()};
306  if (elements==nullptr) {
307  ATH_MSG_FATAL(m_SCTDetEleCollKey.fullKey() << " could not be retrieved in fillHistograms()");
308  return StatusCode::FAILURE;
309  }
310 
311 
312  // Loop over track collection to count tracks
313  for (const Trk::Track* pthisTrack: *tracks) {
314  if (pthisTrack==nullptr) {
315  continue;
316  }
317  if (failCut(pthisTrack and pthisTrack->trackParameters() and pthisTrack->trackParameters()->size(),
318  "track cut: presence")) {
319  continue;
320  }
321 
322  if (m_insideOutOnly and failCut(pthisTrack->info().patternRecoInfo(Trk::TrackInfo::SiSPSeededFinder),
323  "track cut: inside-out only")) {
324  continue;
325  }
326  if (pthisTrack->perigeeParameters() == nullptr) {
327  continue;
328  }
329  const Trk::Perigee* perigee{pthisTrack->perigeeParameters()};
330  const AmgVector(5)& perigeeParameters{perigee->parameters()};
331  const double d0{perigeeParameters[Trk::d0]};
332  const double z0{perigeeParameters[Trk::z0]};
333  const double perigeeTheta{perigeeParameters[Trk::theta]};
334 
335  if (solenoidOn and failCut(perigee->pT() >= m_minPt, "track cut: Min Pt")) {
336  continue;
337  }
338  if (not m_isCosmic and failCut(std::abs(d0) <= m_maxD0, "track cut: max D0")) {
339  continue;
340  }
341  if (m_maxZ0sinTheta and failCut(std::abs(z0 * sin(perigeeTheta)) <= m_maxZ0sinTheta, "track cut: Max Z0sinTheta")) {
342  continue;
343  }
344  }
345 
346  // Loop over original track collection
347  for (const Trk::Track* pthisTrack: *tracks) {
348 
349  // First, go through all cuts in this block
350  ATH_MSG_VERBOSE("Starting new track");
351  if (pthisTrack==nullptr) {
352  continue;
353  }
354  if (failCut(pthisTrack and pthisTrack->trackParameters() and pthisTrack->trackParameters()->size(),
355  "track cut: presence")) {
356  continue;
357  }
358 
359  if (m_insideOutOnly and failCut(pthisTrack->info().patternRecoInfo(Trk::TrackInfo::SiSPSeededFinder),
360  "track cut: inside-out only")) {
361  continue;
362  }
363  if (pthisTrack->perigeeParameters() == nullptr) {
364  continue;
365  }
366  const Trk::Perigee* perigee{pthisTrack->perigeeParameters()};
367  const AmgVector(5)& perigeeParameters{perigee->parameters()};
368  const double d0{perigeeParameters[Trk::d0]};
369  const double z0{perigeeParameters[Trk::z0]};
370  const double perigeeTheta{perigeeParameters[Trk::theta]};
371 
372  if (failCut(perigee->pT() >= m_minPt, "track cut: Min Pt")) {
373  continue;
374  }
375  if (not m_isCosmic and failCut(std::abs(d0) <= m_maxD0, "track cut: max D0")) {
376  continue;
377  }
378  if (m_maxZ0sinTheta and failCut(std::abs(z0 * sin(perigeeTheta)) <= m_maxZ0sinTheta, "track cut: Max Z0sinTheta")) {
379  continue;
380  }
381 
382  const Trk::TrackSummary* summary{pthisTrack->trackSummary()};
383 
384  if (summary and (summary->get(Trk::numberOfSCTHits) < 1)) {
385  continue;
386  }
387 
388  std::unique_ptr<const Trk::Track> trackWithHoles(m_holeSearchTool->getTrackWithHoles(*pthisTrack));
389  if (not trackWithHoles) {
390  ATH_MSG_WARNING("trackWithHoles pointer is invalid");
391  continue;
392  }
393  ATH_MSG_VERBOSE("Found " << trackWithHoles->trackStateOnSurfaces()->size() << " states on track");
394 
395  int NHits[N_REGIONS] = {
396  0, 0, 0
397  };
398  int pixelNHits{0};
399  int pixelNHoles{0};
400  int trtNHits{0};
401 
402  int sctNHitsPerRegion[N_LAYERS_TOTAL*N_SIDES] = {0};
403  int sctNHolesPerRegion[N_LAYERS_TOTAL*N_SIDES] = {0};
404  // Above two variables hold the number of hits for each SCT disk / layer.
405  // [N_LAYERS_TOTAL*N_SIDES(= 44)] indicates the waferIndex defined as below.
406  // 0- 7: B3 side0, B3 side1, B4 side0, ... B6 side1
407  // 8-25: EA0 side0, EA1 side1, ... EA8 side1
408  // 26-43: EC0 side0, EC1 side1, ... EC8 side1
409 
410  std::map < Identifier, double > mapOfTrackHitResiduals;
413  double zpos{0.};
414  float layerSide{-1};
415  float min_layerSide{999.};
416  float max_layerSide{-1.};
417  Identifier surfaceID;
418 
419  // Loop over all TSOS (track state on surface) on track to check number of hits / holes on Pixel, SCT and TRT
420  for (const Trk::TrackStateOnSurface* tsos: *(trackWithHoles->trackStateOnSurfaces())) {
421  surfaceID = surfaceOnTrackIdentifier(tsos);
422 
423  if (not surfaceID.is_valid()) {
424  continue;
425  }
426 
427  // Check waferIndex; if the default value of -1 is kept, the corresponding TSOS is not associated with SCT.
428  int waferIndex = -1;
429  // Calculate waferIndex
430  if (m_sctId->is_sct(surfaceID)) {
431  waferIndex = getWaferIndex(m_sctId->barrel_ec(surfaceID),
432  m_sctId->layer_disk(surfaceID),
433  m_sctId->side(surfaceID));
434  }
435 
437  if (m_pixelId->is_pixel(surfaceID)) {
438  pixelNHits++;
439  }
440  if (m_trtId->is_trt(surfaceID)) {
441  trtNHits++;
442  }
443  if (m_sctId->is_sct(surfaceID)) {
444  NHits[bec2Index(m_sctId->barrel_ec(surfaceID))]++;
445  mapOfTrackHitResiduals[surfaceID] = getResidual(surfaceID, tsos->trackParameters(), &*p_sctclcontainer);
446  sctNHitsPerRegion[waferIndex]++;
447  }
448  } else if (tsos->type(Trk::TrackStateOnSurface::Hole)) {
449  if (m_pixelId->is_pixel(surfaceID)) {
450  pixelNHoles++;
451  } else if (m_sctId->is_sct(surfaceID)) {
452  sctNHolesPerRegion[waferIndex]++;
453  }
454  }
455 
456  if (tsos->type(Trk::TrackStateOnSurface::Measurement)) { // Determine zmin and zmax taking multiple
457  // hits/side into account
458  if (m_isCosmic) { // If this is cosmics use z, bad method but ok...
459  if (tsos->trackParameters()) {
460  zpos = tsos->trackParameters()->position().z();
461  zmax = std::max(zpos, zmax);
462  zmin = std::min(zpos, zmin);
463  } else {
464  ATH_MSG_WARNING("No track parameter found. Zmin and Zmax not recalculated.");
465  }
466  } else { // else use layer/side number : better but does not work for cosmics
467  if (m_sctId->is_sct(surfaceID)) {
468  layerSide = (m_sctId->barrel_ec(surfaceID) != 0) * N_BARRELS +
469  static_cast<float>(m_sctId->layer_disk(surfaceID)) + (static_cast<float>(m_sctId->side(surfaceID)) == 0) * 0.5;
470  min_layerSide = std::min(min_layerSide, layerSide);
471  max_layerSide = std::max(max_layerSide, layerSide);
472  } else if (m_pixelId->is_pixel(surfaceID)) {
473  min_layerSide = -1;
474  } else if (m_trtId->is_trt(surfaceID)) {
475  max_layerSide = N_BARRELS + N_ENDCAPS + 1;
476  }
477  }
478  }
479  }
480 
481  int sctNHits{NHits[ENDCAP_C_INDEX] + NHits[BARREL_INDEX] + NHits[ENDCAP_A_INDEX]};
482  std::vector<bool> layersCrossedByTrack[N_REGIONS];
483  std::vector<int> nHolesOnLayer[N_REGIONS];
484  std::vector<int> nHolesDistOnLayer[N_REGIONS];
485  for (int i{0}; i < N_REGIONS; ++i) {
486  nHolesDistOnLayer[i].resize(n_layers[i] * 2, 0);
487  nHolesOnLayer[i].resize(n_layers[i] * 2, 0);
488  layersCrossedByTrack[i].resize(n_layers[i] * 2, false);
489  }
490 
491  // Loop over all TSOS again; this time, to extract SCT-related hits and holes.
492  for (const Trk::TrackStateOnSurface* tsos: *(trackWithHoles->trackStateOnSurfaces())) {
493  ATH_MSG_VERBOSE("Starting new hit");
494  surfaceID = surfaceOnTrackIdentifier(tsos);
495 
496  if (failCut(m_sctId->is_sct(surfaceID), "hit cut: is in SCT")) {
497  continue;
498  }
499 
500 
501  int side{m_sctId->side(surfaceID)};
502  int layer{m_sctId->layer_disk(surfaceID)};
503  int bec{m_sctId->barrel_ec(surfaceID)};
504  unsigned int isub{bec2Index(bec)};
505  ATH_MSG_VERBOSE("New SCT candidate: " << m_sctId->print_to_string(surfaceID));
506 
507  int waferIndex = getWaferIndex(bec, layer, side);
508 
509  Int_t sctNHitsExceptThisWafer{0};
510  Int_t sctNHolesExceptThisWafer{0};
511 
512  for (Int_t i=0; i<N_LAYERS_TOTAL*N_SIDES; i++) {
513  if (i != waferIndex) {
514  sctNHitsExceptThisWafer += sctNHitsPerRegion[i];
515  sctNHolesExceptThisWafer += sctNHolesPerRegion[i];
516  }
517  }
518 
519  // The track is required to satisfy:
520  // - Number of Si hits to be >= 8
521  // - Number of Si holes to be <= 1
522  // without counting on this TSOS object. (avoid tracking bias.)
523  if ((unsigned int)(sctNHitsExceptThisWafer + pixelNHits) < m_minSiHits) {
524  ATH_MSG_VERBOSE("This track is rejected due to the number of hits: " << sctNHitsExceptThisWafer * pixelNHits);
525  continue;
526  }
527  if ((unsigned int)(sctNHolesExceptThisWafer + pixelNHoles) > m_maxSiHoles) {
528  ATH_MSG_VERBOSE("This track is rejected due to the number of holes: " << sctNHolesExceptThisWafer * pixelNHoles);
529  continue;
530  }
531 
532  std::string etaPhiSuffix = "_" + std::to_string(layer) + "_" + std::to_string(side);
533  const int detIndex{becIdxLayer2Index(isub, layer)};
534  if (detIndex == -1) {
535  ATH_MSG_WARNING("The detector region (barrel, endcap A, endcap C) could not be determined");
536  continue;
537  }
538  float eff{0.};
539  IdentifierHash sideHash{m_sctId->wafer_hash(surfaceID)};
540  Identifier module_id{m_sctId->module_id(surfaceID)};
541  float layerPlusHalfSide{static_cast<float>(layer) + static_cast<float>(side) * 0.5f};
542  float dedicated_layerPlusHalfSide{static_cast<float>(layer) + static_cast<float>((side + 1) % 2) * 0.5f};
543  const Trk::TrackParameters* trkParamOnSurface{tsos->trackParameters()};
544  double trackHitResidual{getResidual(surfaceID, trkParamOnSurface, &*p_sctclcontainer)};
545 
546  float distCut{m_effdistcut};
547 
549  eff = 1.;
550  } else if (tsos->type(Trk::TrackStateOnSurface::Hole) and (std::abs(trackHitResidual) < distCut)) {
551  eff = 1.;
552  }
553 
554  bool otherFaceFound{false};
555  IdentifierHash otherSideHash;
556  Identifier otherSideSurfaceID;
557  IdContext context{m_sctId->wafer_context()};
558  m_sctId->get_other_side(sideHash, otherSideHash);
559  m_sctId->get_id(otherSideHash, otherSideSurfaceID, &context);
560  otherFaceFound = mapOfTrackHitResiduals.find(otherSideSurfaceID) != mapOfTrackHitResiduals.end();
561 
562  int nOther{sctNHits};
564  --nOther;
565  }
566 
567  // Get the track phi; we may cut on it.
568  double phiUp{90.};
569  double theta{90.};
570  if (trkParamOnSurface and (not findAnglesToWaferSurface(trkParamOnSurface->momentum(), surfaceID, elements, theta, phiUp))) {
571  ATH_MSG_WARNING("Error from findAngles");
572  }
573 
574  if (m_useSCTorTRT) {
575  if (failCut(trtNHits >= m_minTRTHits or
576  sctNHits >= m_minSCTHits, "track cut: min TRT or SCT hits")) {
577  continue;
578  }
579  } else {
580  if (failCut(trtNHits >= m_minTRTHits, "track cut: min TRT hits")) {
581  continue;
582  }
583  if (failCut(sctNHits >= m_minSCTHits, "track cut: min SCT hits")) {
584  continue;
585  }
586  if (failCut(pixelNHits >= m_minPixelHits, "track cut: min Pixel hits")) {
587  continue;
588  }
589  }
590 
591  if (failCut(nOther >= m_minOtherHits, "track cut: minOtherHits")) {
592  continue;
593  }
594 
595  ATH_MSG_DEBUG("Use TRT phase " << m_useTRTPhase << " is cosmic? " << m_isCosmic << " timecor " << timecor);
596  if (m_useTRTPhase or m_isCosmic) {
597  if (timecor == 0) {
598  continue;
599  }
600  static const double tmin{-15.};
601  static const double tmax{10.};
602  if (failCut((timecor >= tmin) and (timecor <= tmax), "track cut: timing cut")) {
603  continue;
604  }
605  ATH_MSG_DEBUG(timecor << " " << tmin << " " << tmax);
606  }
607 
608  bool enclosingHits{true};
609  if (m_isCosmic) {
610  if (tsos->trackParameters()) {
611  zpos = tsos->trackParameters()->position().z();
612  enclosingHits = ((zpos > zmin) and (zpos < zmax));
613  } else {
614  ATH_MSG_WARNING("No track parameters found. Cannot determine whether it is an enclosed hit.");
615  enclosingHits = false;
616  }
617  } else {
618  layerSide = (m_sctId->barrel_ec(surfaceID) != 0) * N_BARRELS
619  + static_cast<float>(m_sctId->layer_disk(surfaceID))
620  + (static_cast<float>(m_sctId->side(surfaceID)) == 0) * 0.5;
621  enclosingHits = ((layerSide > min_layerSide) and (layerSide < max_layerSide));
622  }
623 
624  if (m_requireEnclosingHits and
625  (not (layerPlusHalfSide == 0.5)) and
626  (not ((isub == 1) and (layerPlusHalfSide == 3))) and
627  (not (layerPlusHalfSide == 8))) {
628  if (failCut(enclosingHits, "hit cut: enclosing hits")) {
629  continue;
630  }
631  }
632 
633  // Now fill with the local z
634  double chi2{trackWithHoles->fitQuality()->chiSquared()};
635  int ndf{trackWithHoles->fitQuality()->numberDoF()};
636  double chi2_div_ndf{ndf > 0. ? chi2 / ndf : -1.};
637 
638  if (failCut(std::abs(phiUp) <= m_maxPhiAngle, "hit cut: incidence angle")) {
639  continue;
640  }
641 
642  if (failCut((ndf > 0) and (chi2_div_ndf <= m_maxChi2), "track cut: chi2 cut")) {
643  continue;
644  }
645 
646  if (m_requireOtherFace and failCut(otherFaceFound, "hit cut: other face found")) {
647  continue;
648  }
649 
650  if (not trkParamOnSurface) continue;
651  double xl{trkParamOnSurface->localPosition()[0]};
652  double yl{trkParamOnSurface->localPosition()[1]};
653 
654  // Check guard ring
655  bool insideGuardRing{true};
656  if (isub == BARREL_INDEX) {
657  const float xGuard{m_effdistcut};
658  static const float yGuard{3.};
659  if (xl < -30.7 + xGuard) {
660  insideGuardRing = false;
661  }
662  if (xl > 30.7 - xGuard) {
663  insideGuardRing = false;
664  }
665 
666  static const double yend{63.960 + 0.03 - 1.}; // The far sensitive end
667  static const double ydead{2.06 / 2.}; // the near sensitive end
668  if (yl > yend - yGuard) {
669  insideGuardRing = false;
670  }
671  if (yl < -yend + yGuard) {
672  insideGuardRing = false;
673  }
674  if ((yl < ydead + yGuard) and (yl > -ydead - yGuard)) {
675  insideGuardRing = false;
676  }
677  } else {
678  // No guard ring for the endcaps for now...just set true.
679  insideGuardRing = true;
680  }
681 
682  if (m_requireGuardRing and failCut(insideGuardRing, "hit cut: inside guard ring")) {
683  continue;
684  }
685 
686  // Check bad chips
687  if (m_vetoBadChips) {
688  bool nearBadChip{false};
689  IdentifierHash waferHash{m_sctId->wafer_hash(surfaceID)};
690  const InDetDD::SiDetectorElement* pElement{elements->getDetectorElement(waferHash)};
691  bool swap{(pElement->swapPhiReadoutDirection()) ? true : false};
692  int chipPos{previousChip(xl, side, swap)};
693  unsigned int status{0};
694  std::map<Identifier, unsigned int>::const_iterator badChip{badChips->find(module_id)};
695  if (badChip != badChips->end()) {
696  status = (*badChip).second;
697  // Veto if either of closest two chips is dead
698  const bool nearBadChipDead{(status & (1 << chipPos)) != 0};
699  const bool nextBadChipDead{(status & (1 << (chipPos + 1))) != 0};
700  const bool isNotEndChip{(chipPos != 5) and (chipPos != 11)}; // cant have a 'next' if its the end chip on that
701  // side
702  // nearBadChip = status & (1 << chipPos) or
703  // (chipPos != 5 and chipPos != 11 and status & (1 << (chipPos + 1)));
704  // clarify logic:
705  nearBadChip = nearBadChipDead or (isNotEndChip and nextBadChipDead);
706  }
707  if (failCut(not nearBadChip, "hit cut: not near bad chip")) {
708  continue;
709  }
710  }
711  ATH_MSG_VERBOSE("Candidate passed all cuts");
712 
713  const int ieta{m_sctId->eta_module(surfaceID)};
714  const int iphi{m_sctId->phi_module(surfaceID)};
715 
716  auto effAcc{Monitored::Scalar<float>("eff", eff)};
717  auto ineffAcc{Monitored::Scalar<float>("ineff", (testOffline ? 1. : 1.-eff))};
718  auto ietaAcc{Monitored::Scalar<int>("ieta"+etaPhiSuffix, ieta)};
719  auto iphiAcc{Monitored::Scalar<int>("iphi"+etaPhiSuffix, iphi)};
720  auto layerAcc{Monitored::Scalar<float>("layerPlusHalfSide", dedicated_layerPlusHalfSide)};
721  auto lumiAcc{Monitored::Scalar<int>("LumiBlock", ctx.eventID().lumi_block())};
722  auto isubAcc{Monitored::Scalar<int>("isub", isub)};
723  auto sideHashAcc{Monitored::Scalar<int>("sideHash", sideHash)};
724  auto isFirstBCIDAcc{Monitored::Scalar<bool>("isFirstBCID", (BCIDpos <= 0))};
725 
726  //fill the histograms
727  fill(regionNames[isub].data(), effAcc, ineffAcc, ietaAcc, iphiAcc, layerAcc, lumiAcc, isFirstBCIDAcc);
728  fill("SCTHitEffMonitor", effAcc, lumiAcc, isubAcc, sideHashAcc, isFirstBCIDAcc);
729 
730  if (testOffline) {
731  ATH_MSG_INFO("Filling " << detIndex << ", " << side << " eta " << ieta << " phi " << iphi);
732  }
733  } // End of loop over hits/holes
734  }
735  ATH_MSG_VERBOSE("finished loop over tracks = " << tracks->size());
736 
737  return StatusCode::SUCCESS;
738 }
739 
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
PixelID.h
This is an Identifier helper class for the Pixel subdetector. This class is a factory for creating co...
AtlasDetectorID::is_pixel
bool is_pixel(Identifier id) const
Definition: AtlasDetectorID.h:760
covarianceTool.ndf
ndf
Definition: covarianceTool.py:678
SCT_NameFormatter.h
SCT_CalibAlgs::bec2Index
unsigned int bec2Index(const int bec)
Definition: SCT_CalibUtilities.cxx:60
SCTHitEffMonAlg::m_maxPhiAngle
FloatProperty m_maxPhiAngle
Definition: SCTHitEffMonAlg.h:98
SCT_ClusterOnTrack.h
SCTHitEffMonAlg::becIdxLayer2Index
int becIdxLayer2Index(const int becIdx, const int layer) const
Definition: SCTHitEffMonAlg.cxx:124
data
char data[hepevt_bytes_allocation_ATLAS]
Definition: HepEvt.cxx:11
AthMonitorAlgorithm::environment
Environment_t environment() const
Accessor functions for the environment.
Definition: AthMonitorAlgorithm.h:205
python.CaloRecoConfig.f
f
Definition: CaloRecoConfig.py:127
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...
SCTHitEffMonAlg::m_path
std::string m_path
Definition: SCTHitEffMonAlg.h:72
BunchCrossingCondData
Definition: BunchCrossingCondData.h:23
get_generator_info.result
result
Definition: get_generator_info.py:21
max
#define max(a, b)
Definition: cfImp.cxx:41
perigeeParameters
Definition: ExtrapolatorComparisonTest.h:42
TrackParameters.h
MeasurementBase.h
phi
Scalar phi() const
phi method
Definition: AmgMatrixBasePlugin.h:64
InDetDD::SiDetectorElementCollection
Definition: SiDetectorElementCollection.h:30
SG::ReadCondHandle
Definition: ReadCondHandle.h:44
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
SCT_ConditionsData::N_REGIONS
@ N_REGIONS
Definition: SCT_ConditionsParameters.h:28
Surface.h
Trk::Track
The ATLAS Track class.
Definition: Tracking/TrkEvent/TrkTrack/TrkTrack/Track.h:73
SCTHitEffMonAlg::m_maxTracks
UnsignedIntegerProperty m_maxTracks
Definition: SCTHitEffMonAlg.h:104
AtlasFieldCacheCondObj
Definition: AtlasFieldCacheCondObj.h:19
SCTHitEffMonAlg::m_rotcreator
ToolHandle< Trk::IRIO_OnTrackCreator > m_rotcreator
Definition: SCTHitEffMonAlg.h:82
ParticleGun_SamplingFraction.bec
int bec
Definition: ParticleGun_SamplingFraction.py:89
SCTHitEffMonAlg::m_useIDGlobal
BooleanProperty m_useIDGlobal
Definition: SCTHitEffMonAlg.h:116
AtlasDetectorID::is_sct
bool is_sct(Identifier id) const
Definition: AtlasDetectorID.h:770
SCTHitEffMonAlg::m_requireEnclosingHits
BooleanProperty m_requireEnclosingHits
Definition: SCTHitEffMonAlg.h:112
PixelAthClusterMonAlgCfg.zmin
zmin
Definition: PixelAthClusterMonAlgCfg.py:176
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:70
Trk::ParametersT
Dummy class used to allow special convertors to be called for surfaces owned by a detector element.
Definition: EMErrorDetail.h:25
SCT_Monitoring::N_ENDCAPS
@ N_ENDCAPS
Definition: SCT_MonitoringNumbers.h:46
SCTHitEffMonAlg::m_maxD0
FloatProperty m_maxD0
Definition: SCTHitEffMonAlg.h:100
SCTHitEffMonAlg::getResidual
double getResidual(const Identifier &surfaceID, const Trk::TrackParameters *trkParam, const InDet::SCT_ClusterContainer *p_sctclcontainer) const
Definition: SCTHitEffMonAlg.cxx:155
theta
Scalar theta() const
theta method
Definition: AmgMatrixBasePlugin.h:71
SCTHitEffMonAlg::m_maxZ0sinTheta
FloatProperty m_maxZ0sinTheta
Definition: SCTHitEffMonAlg.h:103
Trk::ResidualPull::Unbiased
@ Unbiased
RP with track state that has measurement not included.
Definition: ResidualPull.h:57
SCT::N_SIDES
constexpr unsigned int N_SIDES
Definition: SCT_ChipUtils.h:16
TRT_ID.h
This is an Identifier helper class for the TRT subdetector. This class is a factory for creating comp...
SCTHitEffMonAlg::m_insideOutOnly
BooleanProperty m_insideOutOnly
Definition: SCTHitEffMonAlg.h:108
SCTHitEffMonAlg::failCut
StatusCode failCut(bool value, const std::string &name) const
Definition: SCTHitEffMonAlg.cxx:233
SCTHitEffMonAlg::m_requireGuardRing
BooleanProperty m_requireGuardRing
Definition: SCTHitEffMonAlg.h:114
M_PI
#define M_PI
Definition: ActiveFraction.h:11
SG::ReadCondHandle::isValid
bool isValid()
Definition: ReadCondHandle.h:206
Trk::z0
@ z0
Definition: ParamDefs.h:70
athena.value
value
Definition: athena.py:122
InDet::SCT_ClusterContainer
Trk::PrepRawDataContainer< SCT_ClusterCollection > SCT_ClusterContainer
Definition: SCT_ClusterContainer.h:27
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
AtlasDetectorID::is_trt
bool is_trt(Identifier id) const
Definition: AtlasDetectorID.h:782
SCT_ID::phi_module
int phi_module(const Identifier &id) const
Definition: SCT_ID.h:740
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
SG::VarHandleKey::key
const std::string & key() const
Return the StoreGate ID for the referenced object.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:141
SCT_Monitoring::N_STRIPS
@ N_STRIPS
Definition: SCT_MonitoringNumbers.h:36
SCTHitEffMonAlg::m_trtId
const TRT_ID * m_trtId
Definition: SCTHitEffMonAlg.h:89
SCTHitEffMonAlg::m_requireOtherFace
BooleanProperty m_requireOtherFace
Definition: SCTHitEffMonAlg.h:113
SCTHitEffMonAlg::m_residualPullCalculator
ToolHandle< Trk::IResidualPullCalculator > m_residualPullCalculator
Definition: SCTHitEffMonAlg.h:81
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
ReadCondHandle.h
drawFromPickle.atan
atan
Definition: drawFromPickle.py:36
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
SCT_ID::get_id
virtual int get_id(const IdentifierHash &hash_id, Identifier &id, const IdContext *context=0) const override final
Create compact id from hash id (return == 0 for OK)
Definition: SCT_ID.cxx:666
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
SCTHitEffMonAlg::m_effdistcut
FloatProperty m_effdistcut
Definition: SCTHitEffMonAlg.h:102
TRT::Hit::side
@ side
Definition: HitInfo.h:83
Track.h
AthMonitorAlgorithm
Base class for Athena Monitoring Algorithms.
Definition: AthMonitorAlgorithm.h:36
SCT_Monitoring::ENDCAP_A_INDEX
@ ENDCAP_A_INDEX
Definition: SCT_MonitoringNumbers.h:19
SCTHitEffMonAlg::m_isCosmic
BooleanProperty m_isCosmic
Definition: SCTHitEffMonAlg.h:109
PixelByteStreamErrors::BCID
@ BCID
Definition: PixelByteStreamErrors.h:13
SCTHitEffMonAlg::m_minSCTHits
IntegerProperty m_minSCTHits
Definition: SCTHitEffMonAlg.h:92
SCT_Monitoring::N_BARRELS
@ N_BARRELS
Definition: SCT_MonitoringNumbers.h:43
SCTHitEffMonAlg::m_pixelId
const PixelID * m_pixelId
Definition: SCTHitEffMonAlg.h:87
ParticleGun_EoverP_Config.mom
mom
Definition: ParticleGun_EoverP_Config.py:63
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
SCTHitEffMonAlg::initialize
virtual StatusCode initialize() override final
initialize
Definition: SCTHitEffMonAlg.cxx:79
SCTHitEffMonAlg::m_SCTDetEleCollKey
SG::ReadCondHandleKey< InDetDD::SiDetectorElementCollection > m_SCTDetEleCollKey
Definition: SCTHitEffMonAlg.h:77
SCT3_RawData.h
Trk::TrackStateOnSurface::Hole
@ Hole
A hole on the track - this is defined in the following way.
Definition: TrackStateOnSurface.h:128
lumiFormat.i
int i
Definition: lumiFormat.py:92
Trk::theta
@ theta
Definition: ParamDefs.h:72
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
Trk::numberOfSCTHits
@ numberOfSCTHits
number of SCT holes
Definition: Tracking/TrkEvent/TrkTrackSummary/TrkTrackSummary/TrackSummary.h:71
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
AmgVector
AmgVector(4) T2BSTrackFilterTool
Definition: T2BSTrackFilterTool.cxx:114
TRT::Hit::layer
@ layer
Definition: HitInfo.h:79
BunchCrossingCondData::BunchCrossings
@ BunchCrossings
Distance in units of 25 nanoseconds.
Definition: BunchCrossingCondData.h:132
chi2
double chi2(TH1 *h0, TH1 *h1)
Definition: comparitor.cxx:522
AtlasFieldCache.h
TRT::Track::d0
@ d0
Definition: InnerDetector/InDetCalibEvent/TRT_CalibData/TRT_CalibData/TrackInfo.h:62
PixelAthClusterMonAlgCfg.zmax
zmax
Definition: PixelAthClusterMonAlgCfg.py:176
SCTHitEffMonAlg::m_sctId
const SCT_ID * m_sctId
Definition: SCTHitEffMonAlg.h:88
SCTHitEffMonAlg::m_holeSearchTool
ToolHandle< Trk::ITrackHoleSearchTool > m_holeSearchTool
Definition: SCTHitEffMonAlg.h:83
AthenaMonManager.h
InDetHierarchy.h
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
SCT_ID::wafer_context
IdContext wafer_context(void) const
Definition: SCT_ID.h:705
SCT_ID::wafer_hash
IdentifierHash wafer_hash(const Identifier &wafer_id) const
wafer hash from id - optimized
Definition: SCT_ID.h:492
SCTHitEffMonAlg::findAnglesToWaferSurface
StatusCode findAnglesToWaferSurface(const Amg::Vector3D &mom, const Identifier id, const InDetDD::SiDetectorElementCollection *elements, double &theta, double &phi) const
Definition: SCTHitEffMonAlg.cxx:190
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.
SCT_Monitoring::N_LAYERS_TOTAL
@ N_LAYERS_TOTAL
Definition: SCT_MonitoringNumbers.h:45
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
SH::MetaObject::swap
void swap(MetaObject &a, MetaObject &b)
standard swap
SCTHitEffMonAlg::m_fieldCondObjInputKey
SG::ReadCondHandleKey< AtlasFieldCacheCondObj > m_fieldCondObjInputKey
Definition: SCTHitEffMonAlg.h:79
SCTHitEffMonAlg.h
TRT::Track::z0
@ z0
Definition: InnerDetector/InDetCalibEvent/TRT_CalibData/TRT_CalibData/TrackInfo.h:63
SCT_ID::get_other_side
int get_other_side(const IdentifierHash &id, IdentifierHash &other) const
Wafer hash on other side.
Definition: SCT_ID.cxx:435
SCT_Monitoring::ENDCAP_A
@ ENDCAP_A
Definition: SCT_MonitoringNumbers.h:21
InDet::SCT_Cluster
Definition: InnerDetector/InDetRecEvent/InDetPrepRawData/InDetPrepRawData/SCT_Cluster.h:34
WriteCalibToCool.swap
swap
Definition: WriteCalibToCool.py:94
SCTHitEffMonAlg::m_useSCTorTRT
BooleanProperty m_useSCTorTRT
Definition: SCTHitEffMonAlg.h:111
MagField::AtlasFieldCache::solenoidOn
bool solenoidOn() const
status of the magnets
SCTHitEffMonAlg::m_minTRTHits
IntegerProperty m_minTRTHits
Definition: SCTHitEffMonAlg.h:93
min
#define min(a, b)
Definition: cfImp.cxx:40
BunchCrossingCondData::distanceFromFront
int distanceFromFront(const bcid_type bcid, const BunchDistanceType type=NanoSec) const
The distance of the specific bunch crossing from the front of the train.
Definition: BunchCrossingCondData.cxx:35
Trk::PrepRawData
Definition: PrepRawData.h:62
Trk::MeasurementBase
Definition: MeasurementBase.h:58
AtlasDetectorID::print_to_string
std::string print_to_string(Identifier id, const IdContext *context=0) const
or provide the printout in string form
Definition: AtlasDetectorID.cxx:655
AthMonitorAlgorithm::Environment_t::online
@ online
SCTHitEffMonAlg::m_comTimeName
SG::ReadHandleKey< ComTime > m_comTimeName
Definition: SCTHitEffMonAlg.h:76
SCTHitEffMonAlg::m_minPixelHits
IntegerProperty m_minPixelHits
Definition: SCTHitEffMonAlg.h:96
Trk::TrackStateOnSurface
represents the track state (measurement, material, fit parameters and quality) at a surface.
Definition: TrackStateOnSurface.h:71
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:195
Trk::d0
@ d0
Definition: ParamDefs.h:69
ActsTrk::to_string
std::string to_string(const DetectorType &type)
Definition: GeometryDefs.h:34
IdentifierHash.h
SCTHitEffMonAlg::m_vetoBadChips
BooleanProperty m_vetoBadChips
Definition: SCTHitEffMonAlg.h:115
SCTHitEffMonAlg::m_sctContainerName
SG::ReadHandleKey< InDet::SCT_ClusterContainer > m_sctContainerName
Definition: SCTHitEffMonAlg.h:74
errorcheck.h
Helpers for checking error return status codes and reporting errors.
SCTHitEffMonAlg::previousChip
int previousChip(double xl, int side, bool swap) const
Definition: SCTHitEffMonAlg.cxx:221
SCT_ID::layer_disk
int layer_disk(const Identifier &id) const
Definition: SCT_ID.h:734
SCT_Monitoring::ENDCAP_C
@ ENDCAP_C
Definition: SCT_MonitoringNumbers.h:21
InDetDD::SiDetectorElement
Definition: SiDetectorElement.h:109
SG::CondHandleKey::initialize
StatusCode initialize(bool used=true)
SCTHitEffMonAlg::m_minOtherHits
IntegerProperty m_minOtherHits
Definition: SCTHitEffMonAlg.h:94
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
SCTHitEffMonAlg::getWaferIndex
int getWaferIndex(const int barrel_bc, const int layer_disk, const int side) const
Definition: SCTHitEffMonAlg.cxx:137
SiDetectorElement.h
ISCT_ConfigurationConditionsTool.h
AthMonitorAlgorithm::initialize
virtual StatusCode initialize() override
initialize
Definition: AthMonitorAlgorithm.cxx:18
Trk::TrackInfo::SiSPSeededFinder
@ SiSPSeededFinder
Tracks from SiSPSeedFinder.
Definition: Tracking/TrkEvent/TrkTrack/TrkTrack/TrackInfo.h:102
SCT_Monitoring::N_CHIPS
@ N_CHIPS
Definition: SCT_MonitoringNumbers.h:37
SCTHitEffMonAlg::m_bunchCrossingKey
SG::ReadCondHandleKey< BunchCrossingCondData > m_bunchCrossingKey
Definition: SCTHitEffMonAlg.h:78
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
SCT_Monitoring::N_DISKS
@ N_DISKS
Definition: SCT_MonitoringNumbers.h:44
SCTHitEffMonAlg::SCTHitEffMonAlg
SCTHitEffMonAlg(const std::string &name, ISvcLocator *pSvcLocator)
Definition: SCTHitEffMonAlg.cxx:75
SCT_ID::eta_module
int eta_module(const Identifier &id) const
Definition: SCT_ID.h:746
MagField::AtlasFieldCache
Local cache for magnetic field (based on MagFieldServices/AtlasFieldSvcTLS.h)
Definition: AtlasFieldCache.h:43
SCTHitEffMonAlg::fillHistograms
virtual StatusCode fillHistograms(const EventContext &ctx) const override final
adds event to the monitoring histograms
Definition: SCTHitEffMonAlg.cxx:242
SCTHitEffMonAlg::m_useTRTPhase
BooleanProperty m_useTRTPhase
Definition: SCTHitEffMonAlg.h:110
BARREL
@ BARREL
Definition: TRTRadiatorParameters.h:10
SCTHitEffMonAlg::m_minPt
FloatProperty m_minPt
Definition: SCTHitEffMonAlg.h:101
SCTHitEffMonAlg::m_maxSiHoles
UnsignedIntegerProperty m_maxSiHoles
Definition: SCTHitEffMonAlg.h:106
SCT_ID::side
int side(const Identifier &id) const
Definition: SCT_ID.h:752
dqt_zlumi_alleff_HIST.eff
int eff
Definition: dqt_zlumi_alleff_HIST.py:113
merge.status
status
Definition: merge.py:17
SCTHitEffMonAlg::m_TrackName
SG::ReadHandleKey< TrackCollection > m_TrackName
Definition: SCTHitEffMonAlg.h:75
drawFromPickle.sin
sin
Definition: drawFromPickle.py:36
Monitored::Scalar
Declare a monitored scalar variable.
Definition: MonitoredScalar.h:34
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
Trk::loc1
@ loc1
Definition: ParamDefs.h:40
IdContext
class IdContext
Definition: IdContext.h:34
InDetDD::SiDetectorElementCollection::getDetectorElement
const SiDetectorElement * getDetectorElement(const IdentifierHash &hash) const
Definition: SiDetectorElementCollection.cxx:15
Trk::TrackStateOnSurface::Measurement
@ Measurement
This is a measurement, and will at least contain a Trk::MeasurementBase.
Definition: TrackStateOnSurface.h:101
SCTHitEffMonAlg::m_maxChi2
FloatProperty m_maxChi2
Definition: SCTHitEffMonAlg.h:99
SCTHitEffMonAlg::m_minSiHits
UnsignedIntegerProperty m_minSiHits
Definition: SCTHitEffMonAlg.h:105
SCTHitEffMonAlg::m_configConditions
ToolHandle< ISCT_ConfigurationConditionsTool > m_configConditions
Definition: SCTHitEffMonAlg.h:84
SCT_Monitoring::summary
@ summary
Definition: SCT_MonitoringNumbers.h:65