ATLAS Offline Software
ClusterMakerTool.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 //***************************************************************************
6 //
7 // Implementation for ClusterMaker
8 //
9 //****************************************************************************
10 
11 #include "CLHEP/Units/SystemOfUnits.h"
12 #include "CLHEP/Matrix/SymMatrix.h"
13 #include "GaudiKernel/ToolHandle.h"
14 #include "GaudiKernel/ServiceHandle.h"
22 
25 
27 
29 
30 #include <memory>
31 
33 using CLHEP::micrometer;
34 
35 namespace {
36 
37 inline double square(const double x){
38  return x*x;
39 }
40 constexpr double ONE_TWELFTH = 1./12.;
41 
42 // Some methods below can be parameterized on the pixel cluster type,
43 // The following functions allow using a function parameter for common
44 // operations.
45 // [ Omegax = TOT1/(TOT1+TOT2), where TOT1 and TOT2 are the sum of the
46 // charges of the first and last row of the cluster respectively
47 // Omegay: similar definition with columns rather than rows ]
48 InDet::PixelCluster newInDetpixelCluster(const Identifier& RDOId,
49  const Amg::Vector2D& locpos,
50  const Amg::Vector3D& globpos,
51  std::vector<Identifier>&& rdoList,
52  const int lvl1a,
53  std::vector<int>&& totList,
54  std::vector<float>&& chargeList,
55  const InDet::SiWidth& width,
56  const InDetDD::SiDetectorElement* detEl,
57  Amg::MatrixX&& locErrMat,
58  const float omegax,
59  const float omegay,
60  bool split,
61  float splitProb1,
62  float splitProb2)
63 {
64  return InDet::PixelCluster(RDOId,
65  locpos,
66  globpos,
67  std::move(rdoList),
68  lvl1a,
69  std::move(totList),
70  std::move(chargeList),
71  width,
72  detEl,
73  std::move(locErrMat),
74  omegax,
75  omegay,
76  split,
77  splitProb1,
78  splitProb2);
79 }
80 
81 // Function-like class to add an xAOD::PixelCluster to an
82 // xAOD::PixelClusterContainer. This is needed because the
83 // PixelCluster object needs an aux store for the setMeasurement call
84 // to not crash
85 class AddNewxAODpixelCluster {
86 public:
87  explicit AddNewxAODpixelCluster(xAOD::PixelCluster& cluster)
88  : m_cluster(&cluster) {}
89 
90  xAOD::PixelCluster* operator()(const Identifier& /*RDOId*/,
91  const Amg::Vector2D& locpos,
92  const Amg::Vector3D& globpos,
93  const std::vector<Identifier>& rdoList,
94  const int lvl1a,
95  const std::vector<int>& totList,
96  const std::vector<float>& chargeList,
97  const InDet::SiWidth& width,
98  const InDetDD::SiDetectorElement* detEl,
99  const Amg::MatrixX& locErrMat,
100  bool split,
101  float splitProb1,
102  float splitProb2) {
103  IdentifierHash idHash = detEl->identifyHash();
104 
105  Eigen::Matrix<float,2,1> localPosition(locpos.x(), locpos.y());
106  Eigen::Matrix<float,2,2> localCovariance = Eigen::Matrix<float,2,2>::Zero();
107  localCovariance(0, 0) = locErrMat(0, 0);
108  localCovariance(1, 1) = locErrMat(1, 1);
109 
110  m_cluster->setMeasurement<2>(idHash, localPosition, localCovariance);
111  m_cluster->setRDOlist(rdoList);
112  m_cluster->globalPosition() = globpos.cast<float>();
113  m_cluster->setToTlist(totList);
114  m_cluster->setTotalToT( xAOD::xAODInDetMeasurement::Utilities::computeTotalToT(totList) );
115  m_cluster->setChargelist(chargeList);
116  m_cluster->setTotalCharge( xAOD::xAODInDetMeasurement::Utilities::computeTotalCharge(chargeList) );
117  m_cluster->setLVL1A(lvl1a);
118  m_cluster->setChannelsInPhiEta(width.colRow()[0], width.colRow()[1]);
119  m_cluster->setWidthInEta(static_cast<float>(width.widthPhiRZ()[1]));
120  m_cluster->setIsSplit(split);
121  m_cluster->setSplitProbabilities(splitProb1, splitProb2);
122 
123  return m_cluster;
124  }
125 
126 private:
127  xAOD::PixelCluster *m_cluster;
128 };
129 
130 
131 }
132 
133 
134 namespace InDet {
135 
136 // using namespace Trk;
137 
138 // Constructor with parameters:
140  const std::string& n,
141  const IInterface* p) :
142  AthAlgTool(t,n,p)
143 {
144  declareInterface<ClusterMakerTool>(this);
145 }
146 
147 //================ Initialisation =============================================
148 
150  // Code entered here will be executed once at program start.
151 
152  ATH_MSG_DEBUG ( name() << " initialize()" );
153 
154  if (not m_pixelReadout.empty()) {
155  ATH_CHECK(m_pixelReadout.retrieve());
156  }
157 
158  if (not m_pixelLorentzAngleTool.empty()) {
160  } else {
161  m_pixelLorentzAngleTool.disable();
162  }
163  if (not m_sctLorentzAngleTool.empty()) {
164  ATH_CHECK(m_sctLorentzAngleTool.retrieve());
165  } else {
166  m_sctLorentzAngleTool.disable();
167  }
168 
169 
170  return StatusCode::SUCCESS;
171 }
172 
173 
174 // Compute the pixel cluster global position, and the error associated
175 // to the position.
176 // Called by the pixel clustering tools
177 //
178 // Input parameters
179 // - the cluster Identifier
180 // - the position in local reference frame
181 // - the list of identifiers of the Raw Data Objects belonging to the cluster
182 // - the width of the cluster
183 // - the module the cluster belongs to
184 // - wheter the cluster contains ganged pixels
185 // - the error strategy, currently
186 // 0: cluster width/sqrt(12.)
187 // 1: pixel pitch/sqrt(12.)
188 // 2: parametrized as a function ofpseudorapidity and cluster size
189 // (default)
190 // 10: CTB parametrization (as a function of module and cluster size)
191 // no magnetic field
192 // - const reference to a PixelID helper class
193 
194 template <typename ClusterType, typename IdentifierVec, typename ToTList>
196  const Identifier& clusterID,
197  const Amg::Vector2D& localPos,
198  IdentifierVec&& rdoList,
199  const int lvl1a,
200  ToTList&& totList,
201  const SiWidth& width,
202  const InDetDD::SiDetectorElement* element,
203  bool ganged,
204  int errorStrategy,
205  const PixelID& pixelID,
206  bool split,
207  double splitProb1,
208  double splitProb2,
209  const PixelChargeCalibCondData *calibData,
210  const PixelOfflineCalibData *offlineCalibData,
211  const EventContext& ctx,
212  xAOD::PixelCluster* cluster) const{
213 
214  ATH_MSG_VERBOSE("ClusterMakerTool called, number ");
215  if ( errorStrategy==2 && m_forceErrorStrategy1B ) errorStrategy=1;
216 
217  // Fill vector of charges and compute charge balance
218  const InDetDD::PixelModuleDesign* design = (dynamic_cast<const InDetDD::PixelModuleDesign*>(&element->design()));
219  if (not design){
220  throw std::runtime_error( "Dynamic cast failed for design in ClusterMakerTool.cxx");
221  }
222  int rowMin = design->rows();
223  int rowMax = 0;
224  int colMin = design->columns();
225  int colMax = 0;
226  float qRowMin = 0; float qRowMax = 0;
227  float qColMin = 0; float qColMax = 0;
228  std::vector<float> chargeList;
229  int nRDO=rdoList.size();
230  if (calibData) {
231  chargeList.reserve(nRDO);
232  for (int i=0; i<nRDO; i++) {
233  Identifier pixid=rdoList[i];
234  int ToT=totList[i];
235 
236  float charge = ToT;
237  Identifier moduleID = pixelID.wafer_id(pixid);
238  IdentifierHash moduleHash = pixelID.wafer_hash(moduleID); // wafer hash
239  unsigned int FE = m_pixelReadout->getFE(pixid, moduleID);
240  InDetDD::PixelDiodeType type = m_pixelReadout->getDiodeType(pixid);
241  charge = calibData->getCharge(type, moduleHash, FE, ToT);
242  if (design->getReadoutTechnology() != InDetDD::PixelReadoutTechnology::RD53 && (moduleHash<12 || moduleHash>2035)) {
243  charge = ToT/8.0*(8000.0-1200.0)+1200.0;
244  }
245  chargeList.push_back(charge);
246  }
247  }
248 
249  for (int i=0; i<nRDO; i++) {
250  Identifier pixid=rdoList[i];
251  int ToT=totList[i];
252 
253  float charge = ToT;
254  if (calibData) { charge=chargeList[i]; }
255 
256  // std::cout << "tot, charge = " << ToT << " " << charge << std::endl;
257  int row = pixelID.phi_index(pixid);
258  int col = pixelID.eta_index(pixid);
259  if (row == rowMin) qRowMin += charge;
260  if (row < rowMin){
261  rowMin = row;
262  qRowMin = charge;
263  }
264 
265  if (row == rowMax) qRowMax += charge;
266  if (row > rowMax){
267  rowMax = row;
268  qRowMax = charge;
269  }
270  if (col == colMin) qColMin += charge;
271  if (col < colMin){
272  colMin = col;
273  qColMin = charge;
274  }
275 
276  if (col == colMax) qColMax += charge;
277  if (col > colMax){
278  colMax = col;
279  qColMax = charge;
280  }
281  }
282 
283  Identifier newClusterID = pixelID.pixel_id(pixelID.wafer_id(clusterID),rowMin,colMin);
284  // Compute omega for charge interpolation correction (if required)
285  // Two pixels may have charge=0 (very rarely, hopefully)
286  float omegax = -1;
287  float omegay = -1;
288  if(qRowMin+qRowMax > 0) omegax = qRowMax/float(qRowMin+qRowMax);
289  if(qColMin+qColMax > 0) omegay = qColMax/float(qColMin+qColMax);
290 
291  ATH_MSG_VERBOSE("omega = " << omegax << " " << omegay);
292 
293 // ask for Lorentz correction, get global position
294  double shift = m_pixelLorentzAngleTool->getLorentzShift(element->identifyHash(), ctx);
295  Amg::Vector2D locpos(localPos[Trk::locX]+shift, localPos[Trk::locY]);
296 // find global position of element
297  const Amg::Transform3D& T = element->surface().transform();
298  double Ax[3] = {T(0,0),T(1,0),T(2,0)};
299  double Ay[3] = {T(0,1),T(1,1),T(2,1)};
300  double R [3] = {T(0,3),T(1,3),T(2,3)};
301 
302  const Amg::Vector2D& M = locpos;
303  Amg::Vector3D globalPos(M[0]*Ax[0]+M[1]*Ay[0]+R[0],M[0]*Ax[1]+M[1]*Ay[1]+R[1],M[0]*Ax[2]+M[1]*Ay[2]+R[2]);
304 
305  // error matrix
306  const Amg::Vector2D& colRow = width.colRow();// made ref to avoid
307  // unnecessary copy EJWM
308  auto errorMatrix = Amg::MatrixX(2,2);
309  errorMatrix.setIdentity();
310 
311  // switches are more readable **OPT**
312  // actually they're slower as well (so I'm told) so perhaps
313  // this should be re-written at some point EJWM
314  double eta = std::abs(globalPos.eta());
315  double zPitch = width.z()/colRow.y();
316 
317  const AtlasDetectorID* aid = element->getIdHelper();
318 
320  throw std::runtime_error( "Wrong helper type in ClusterMakerTool.cxx.");
321  }
322  const PixelID* pid = static_cast<const PixelID*>(aid);
323  int layer = pid->layer_disk(clusterID);
324  int phimod = pid->phi_module(clusterID);
325  switch (errorStrategy){
326  case 0:
327  errorMatrix.fillSymmetric(0,0,square(width.phiR())*ONE_TWELFTH);
328  errorMatrix.fillSymmetric(1,1,square(width.z())*ONE_TWELFTH);
329  break;
330  case 1:
331  errorMatrix.fillSymmetric(0,0,square(width.phiR()/colRow.x())*ONE_TWELFTH);
332  errorMatrix.fillSymmetric(1,1,square(width.z()/colRow.y())*ONE_TWELFTH);
333  break;
334  case 2:
335  // use parameterization only if the cluster does not
336  // contain long pixels or ganged pixels
337  // Also require calibration service is available....
338  if (!ganged && zPitch>399*micrometer && zPitch<401*micrometer) {
339  if (offlineCalibData) {
340  if (element->isBarrel()) {
341  int ibin = offlineCalibData->getPixelClusterErrorData()->getBarrelBin(eta,int(colRow.y()),int(colRow.x()));
342  double phiError = offlineCalibData->getPixelClusterErrorData()->getPixelBarrelPhiError(ibin);
343  double etaError = offlineCalibData->getPixelClusterErrorData()->getPixelBarrelEtaError(ibin);
344  errorMatrix.fillSymmetric(0,0,pow(phiError,2));
345  errorMatrix.fillSymmetric(1,1,pow(etaError,2));
346  }
347  else {
348  int ibin = offlineCalibData->getPixelClusterErrorData()->getEndcapBin(int(colRow.y()),int(colRow.x()));
349  double phiError = offlineCalibData->getPixelClusterErrorData()->getPixelEndcapPhiError(ibin);
350  double etaError = offlineCalibData->getPixelClusterErrorData()->getPixelEndcapRError(ibin);
351  errorMatrix.fillSymmetric(0,0,square(phiError));
352  errorMatrix.fillSymmetric(1,1,square(etaError));
353  }
354  }
355  }else{// cluster with ganged and/or long pixels
356  errorMatrix.fillSymmetric(0,0,square(width.phiR()/colRow.x())*ONE_TWELFTH);
357  errorMatrix.fillSymmetric(1,1,square(zPitch)*ONE_TWELFTH);
358  }
359  break;
360 
361  case 10:
362  errorMatrix.fillSymmetric(0,0,square( getPixelCTBPhiError(layer,phimod,int(colRow.x()))));
363  errorMatrix.fillSymmetric(1,1,square(width.z()/colRow.y())*ONE_TWELFTH);
364  break;
365 
366  default:
367  errorMatrix.fillSymmetric(0,0,square(width.phiR()/colRow.x())*ONE_TWELFTH);
368  errorMatrix.fillSymmetric(1,1,square(width.z()/colRow.y())*ONE_TWELFTH);
369  break;
370  }
371 
372  //1) We want to move always for the Trk::PixelCluster
373  //2) We forward the rdoList and chargeList that could have be passed
374  // different ways.
375  //
376  static_assert(std::is_same_v<ClusterType, PixelCluster> ||
377  std::is_same_v<std::remove_pointer_t<ClusterType>,
379  "Not an InDet::PixelCluster or xAOD::PixelCluster");
381  return newInDetpixelCluster(newClusterID, locpos,
382  globalPos,
383  std::forward<IdentifierVec>(rdoList),
384  lvl1a,
385  std::forward<ToTList>(totList),
386  std::move(chargeList),
387  width,
388  element,
389  std::move(errorMatrix),
390  omegax,
391  omegay,
392  split,
393  splitProb1,
394  splitProb2);
395  } else{
396  return AddNewxAODpixelCluster(*cluster)(newClusterID,
397  locpos,
398  globalPos,
399  std::forward<IdentifierVec>(rdoList),
400  lvl1a,
401  std::forward<ToTList>(totList),
402  chargeList,
403  width,
404  element,
405  errorMatrix,
406  split,
407  splitProb1,
408  splitProb2);
409  }
410 }
411 
413  const Identifier& clusterID,
414  const Amg::Vector2D& localPos,
415  std::vector<Identifier>&& rdoList,
416  const int lvl1a,
417  std::vector<int>&& totList,
418  const SiWidth& width,
419  const InDetDD::SiDetectorElement* element,
420  bool ganged,
421  int errorStrategy,
422  const PixelID& pixelID,
423  bool split,
424  double splitProb1,
425  double splitProb2,
426  const PixelChargeCalibCondData *calibData,
427  const PixelOfflineCalibData *offlineCalibData,
428  const EventContext& ctx) const
429 {
430  return makePixelCluster<PixelCluster>(
431  clusterID,
432  localPos,
433  std::move(rdoList),
434  lvl1a,
435  std::move(totList),
436  width,
437  element,
438  ganged,
439  errorStrategy,
440  pixelID,
441  split,
442  splitProb1,
443  splitProb2,
444  calibData,
445  offlineCalibData,
446  ctx);
447 }
448 
450  xAOD::PixelCluster& cluster,
451  const Amg::Vector2D& localPos,
452  const std::vector<Identifier>& rdoList,
453  const int lvl1a,
454  const std::vector<int>& totList,
455  const SiWidth& width,
456  const InDetDD::SiDetectorElement* element,
457  bool ganged,
458  int errorStrategy,
459  const PixelID& pixelID,
460  bool split,
461  double splitProb1,
462  double splitProb2,
463  const PixelChargeCalibCondData *calibData,
464  const PixelOfflineCalibData *offlineCalibData,
465  const EventContext& ctx) const
466 {
467  return makePixelCluster<xAOD::PixelCluster*>(
468  Identifier(),
469  localPos,
470  rdoList,
471  lvl1a,
472  totList,
473  width,
474  element,
475  ganged,
476  errorStrategy,
477  pixelID,
478  split,
479  splitProb1,
480  splitProb2,
481  calibData,
482  offlineCalibData,
483  ctx,
484  &cluster);
485 }
486 
487 // Computes global position and errors for SCT cluster.
488 // Called by SCT Clustering tools
489 //
490 // Input parameters
491 // - the cluster Identifier
492 // - the position in local reference frame
493 // - the list of identifiers of the Raw Data Objects belonging to the cluster
494 // - the width of the cluster
495 // - the module the cluster belongs to
496 // - the error strategy, currently
497 // 0: Cluster Width/sqrt(12.)
498 // 1: Set to a different values for one and two-strip clusters (def.)
499 // The scale factors were derived by the study reported on 25th September 2006.
500 // https://indico.cern.ch/event/430391/contributions/1066157/attachments/929942/1317007/SCTSoft_25Sept06_clusters.pdf
501 
504  const Amg::Vector2D& localPos,
505  std::vector<Identifier>&& rdoList,
506  const SiWidth& width,
507  const InDetDD::SiDetectorElement* element,
508  int errorStrategy) const
509 {
510 
511  double shift =
512  m_sctLorentzAngleTool->getLorentzShift(element->identifyHash(), Gaudi::Hive::currentContext());
513  Amg::Vector2D locpos(localPos[Trk::locX] + shift, localPos[Trk::locY]);
514 
515  // error matrix
516  const Amg::Vector2D& colRow = width.colRow(); // made ref to avoid
517  // unnecessary copy EJWM
518 
519  auto errorMatrix = Amg::MatrixX(2,2);
520  errorMatrix.setIdentity();
521 
522  // switches are more readable **OPT**
523  // actually they're slower as well (so I'm told) so perhaps
524  // this should be re-written at some point EJWM
525 
526  switch (errorStrategy){
527  case 0:
528  errorMatrix.fillSymmetric(0,0,square(width.phiR())*ONE_TWELFTH);
529  errorMatrix.fillSymmetric(1,1,square(width.z())*ONE_TWELFTH);
530  break;
531  case 1:
532  // mat(1,1) = pow(width.phiR()/colRow.x(),2)/12;
533  // single strip - resolution close to pitch/sqrt(12)
534  // two-strip hits: better resolution, approx. 40% lower
535  if(colRow.x() == 1){
536  errorMatrix.fillSymmetric(0,0,square(1.05*width.phiR())*ONE_TWELFTH);
537  }
538  else if(colRow.x() == 2){
539  errorMatrix.fillSymmetric(0,0,square(0.27*width.phiR())*ONE_TWELFTH);
540  }
541  else{
542  errorMatrix.fillSymmetric(0,0,square(width.phiR())*ONE_TWELFTH);
543  }
544  errorMatrix.fillSymmetric(1,1,square(width.z()/colRow.y())*ONE_TWELFTH);
545  break;
546  default:
547  // single strip - resolution close to pitch/sqrt(12)
548  // two-strip hits: better resolution, approx. 40% lower
549  if(colRow.x() == 1){
550  errorMatrix.fillSymmetric(0,0,square(width.phiR())*ONE_TWELFTH);
551  }
552  else if(colRow.x() == 2){
553  errorMatrix.fillSymmetric(0,0,square(0.27*width.phiR())*ONE_TWELFTH);
554  }
555  else{
556  errorMatrix.fillSymmetric(0,0,square(width.phiR())*ONE_TWELFTH);
557  }
558  errorMatrix.fillSymmetric(1,1,square(width.z()/colRow.y())*ONE_TWELFTH);
559  break;
560  }
561 
562  auto designShape = element->design().shape();
563  // rotation for endcap SCT
564  if(designShape == InDetDD::Trapezoid || designShape == InDetDD::Annulus) {
565  double sn = element->sinStereoLocal(localPos);
566  double sn2 = sn*sn;
567  double cs2 = 1.-sn2;
568  double w = element->phiPitch(localPos)/element->phiPitch();
569  double v0 = (errorMatrix)(0,0)*w*w;
570  double v1 = (errorMatrix)(1,1);
571  errorMatrix.fillSymmetric(0,0,cs2*v0+sn2*v1);
572  errorMatrix.fillSymmetric(0,1,sn*sqrt(cs2)*(v0-v1));
573  errorMatrix.fillSymmetric(1,1,sn2*v0+cs2*v1);
574  } //else if (designShape == InDetDD::PolarAnnulus) {// Polar rotation for endcap}
575 
576  return SCT_Cluster(clusterID, locpos, std::move(rdoList), width, element, std::move(errorMatrix));
577 
578 }
579 
580 //---------------------------------------------------------------------------
581 // CTB parameterization, B field off
583  int phiClusterSize) const{
584 
585  double sigmaL0Phi1[3] = { 8.2*micrometer, 9.7*micrometer, 14.6*micrometer};
586  double sigmaL1Phi1[3] = {14.6*micrometer, 9.3*micrometer, 14.6*micrometer};
587  double sigmaL2Phi1[3] = {14.6*micrometer, 8.6*micrometer, 14.6*micrometer};
588  double sigmaL0Phi0[3] = {14.6*micrometer, 13.4*micrometer, 13.0*micrometer};
589  double sigmaL1Phi0[3] = {14.6*micrometer, 8.5*micrometer, 11.0*micrometer};
590  double sigmaL2Phi0[3] = {14.6*micrometer, 11.6*micrometer, 9.3*micrometer};
591 
592  if(phiClusterSize > 3) return 14.6*micrometer;
593 
594  if(layer == 0 && phi == 0) return sigmaL0Phi0[phiClusterSize-1];
595  if(layer == 1 && phi == 0) return sigmaL1Phi0[phiClusterSize-1];
596  if(layer == 2 && phi == 0) return sigmaL2Phi0[phiClusterSize-1];
597  if(layer == 0 && phi == 1) return sigmaL0Phi1[phiClusterSize-1];
598  if(layer == 1 && phi == 1) return sigmaL1Phi1[phiClusterSize-1];
599  if(layer == 2 && phi == 1) return sigmaL2Phi1[phiClusterSize-1];
600 
601  // shouldn't really happen...
602  ATH_MSG_WARNING("Unexpected layer and phi numbers: layer = "
603  << layer << " and phi = " << phi);
604  return 14.6*micrometer;
605 
606 }
607 
608 }
PixelID.h
This is an Identifier helper class for the Pixel subdetector. This class is a factory for creating co...
InDet::ClusterMakerTool::xAODpixelCluster
xAOD::PixelCluster * xAODpixelCluster(xAOD::PixelCluster &cluster, const Amg::Vector2D &localPos, const std::vector< Identifier > &rdoList, const int lvl1a, const std::vector< int > &totList, const SiWidth &width, const InDetDD::SiDetectorElement *element, bool ganged, int errorStrategy, const PixelID &pixelID, bool split, double splitProb1, double splitProb2, const PixelChargeCalibCondData *calibData, const PixelCalib::PixelOfflineCalibData *offlineCalibData, const EventContext &ctx) const
Definition: ClusterMakerTool.cxx:449
SiWidth.h
PixelID::phi_index
int phi_index(const Identifier &id) const
Definition: PixelID.h:654
Amg::MatrixX
Eigen::Matrix< double, Eigen::Dynamic, Eigen::Dynamic > MatrixX
Dynamic Matrix - dynamic allocation.
Definition: EventPrimitives.h:27
Trk::locX
@ locX
Definition: ParamDefs.h:37
InDetDD::PixelModuleDesign
Definition: PixelModuleDesign.h:45
Trk::locY
@ locY
local cartesian
Definition: ParamDefs.h:38
AtlasDetectorID::HelperType::Pixel
@ Pixel
PixelCalib::PixelClusterErrorData::getPixelBarrelEtaError
float getPixelBarrelEtaError(int ibin) const
Definition: PixelClusterErrorData.cxx:89
PixelCluster.h
Amg::Vector2D
Eigen::Matrix< double, 2, 1 > Vector2D
Definition: GeoPrimitives.h:48
InDet
Primary Vertex Finder.
Definition: VP1ErrorUtils.h:36
InDetDD::DetectorDesign::shape
virtual DetectorShape shape() const
Shape of element.
Definition: DetectorDesign.cxx:96
PixelCalib::PixelOfflineCalibData::getPixelClusterErrorData
PixelClusterErrorData * getPixelClusterErrorData()
Definition: PixelOfflineCalibData.h:97
InDetDD::PixelDiodeType
PixelDiodeType
Definition: PixelReadoutDefinitions.h:28
xAOD::xAODInDetMeasurement::Utilities::computeTotalToT
int computeTotalToT(const SG::AuxElement &cluster)
Definition: Event/xAOD/xAODInDetMeasurement/Root/Utilities.cxx:22
InDetDD::SolidStateDetectorElementBase::surface
Trk::Surface & surface()
Element Surface.
keylayer_zslicemap.row
row
Definition: keylayer_zslicemap.py:155
athena.value
value
Definition: athena.py:124
read_hist_ntuple.t
t
Definition: read_hist_ntuple.py:5
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
InDet::ClusterMakerTool::ClusterMakerTool
ClusterMakerTool(const std::string &type, const std::string &name, const IInterface *parent)
Definition: ClusterMakerTool.cxx:139
x
#define x
SCT_Cluster.h
python.CaloAddPedShiftConfig.type
type
Definition: CaloAddPedShiftConfig.py:42
InDetDD::SolidStateDetectorElementBase::identifyHash
virtual IdentifierHash identifyHash() const override final
identifier hash (inline)
PixelID::wafer_id
Identifier wafer_id(int barrel_ec, int layer_disk, int phi_module, int eta_module) const
For a single crystal.
Definition: PixelID.h:360
PixelCalib::PixelClusterErrorData::getPixelEndcapPhiError
float getPixelEndcapPhiError(int ibin) const
Definition: PixelClusterErrorData.cxx:71
InDetDD::SolidStateDetectorElementBase::getIdHelper
const AtlasDetectorID * getIdHelper() const
Returns the id helper (inline)
InDet::ClusterMakerTool::pixelCluster
PixelCluster pixelCluster(const Identifier &clusterID, const Amg::Vector2D &localPos, std::vector< Identifier > &&rdoList, const int lvl1a, std::vector< int > &&totList, const SiWidth &width, const InDetDD::SiDetectorElement *element, bool ganged, int errorStrategy, const PixelID &pixelID, bool split, double splitProb1, double splitProb2, const PixelChargeCalibCondData *calibData, const PixelCalib::PixelOfflineCalibData *offlineCalibData, const EventContext &ctx) const
Definition: ClusterMakerTool.cxx:412
InDetDD::PixelReadoutTechnology::RD53
@ RD53
PixelCalib::PixelClusterErrorData::getPixelBarrelPhiError
float getPixelBarrelPhiError(int ibin) const
Definition: PixelClusterErrorData.cxx:83
AtlasDetectorID.h
This class provides an interface to generate or decode an identifier for the upper levels of the dete...
InDetDD::SiDetectorElement::phiPitch
double phiPitch() const
Pitch (inline methods)
python.utils.AtlRunQueryDQUtils.p
p
Definition: AtlRunQueryDQUtils.py:209
InDet::ClusterMakerTool::m_pixelReadout
ServiceHandle< InDetDD::IPixelReadoutManager > m_pixelReadout
Definition: ClusterMakerTool.h:168
PixelID::wafer_hash
IdentifierHash wafer_hash(Identifier wafer_id) const
wafer hash from id
Definition: PixelID.h:383
InDet::ClusterMakerTool::initialize
StatusCode initialize()
Definition: ClusterMakerTool.cxx:149
ClusterMakerTool.h
parseMapping.v0
def v0
Definition: parseMapping.py:149
lumiFormat.i
int i
Definition: lumiFormat.py:85
CaloSwCorrections.phimod
def phimod(flags, cells_name, *args, **kw)
Definition: CaloSwCorrections.py:203
beamspotman.n
n
Definition: beamspotman.py:729
python.SystemOfUnits.micrometer
float micrometer
Definition: SystemOfUnits.py:80
PixelCalib::PixelOfflineCalibData
Definition: PixelOfflineCalibData.h:31
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
InDetDD::Annulus
@ Annulus
Definition: DetectorDesign.h:42
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
TRT::Hit::layer
@ layer
Definition: HitInfo.h:79
PixelChargeCalibCondData
Definition: PixelChargeCalibCondData.h:24
Amg::Transform3D
Eigen::Affine3d Transform3D
Definition: GeoPrimitives.h:46
ParticleGun_EoverP_Config.pid
pid
Definition: ParticleGun_EoverP_Config.py:62
PixelID::eta_index
int eta_index(const Identifier &id) const
Definition: PixelID.h:660
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
PixelCalib::PixelClusterErrorData::getPixelEndcapRError
float getPixelEndcapRError(int ibin) const
Definition: PixelClusterErrorData.cxx:77
InDet::SCT_Cluster
Definition: InnerDetector/InDetRecEvent/InDetPrepRawData/InDetPrepRawData/SCT_Cluster.h:34
SiLocalPosition.h
xAOD::xAODInDetMeasurement::Utilities::computeTotalCharge
float computeTotalCharge(const SG::AuxElement &cluster)
Definition: Event/xAOD/xAODInDetMeasurement/Root/Utilities.cxx:9
AtlasDetectorID::helper
virtual HelperType helper() const
Type of helper, defaulted to 'Unimplemented'.
Definition: AtlasDetectorID.h:96
EventPrimitives.h
Utilities.h
InDet::ClusterMakerTool::makePixelCluster
ClusterType makePixelCluster(const Identifier &clusterID, const Amg::Vector2D &localPos, IdentifierVec &&rdoList, const int lvl1a, ToTList &&totList, const SiWidth &width, const InDetDD::SiDetectorElement *element, bool ganged, int errorStrategy, const PixelID &pixelID, bool split, double splitProb1, double splitProb2, const PixelChargeCalibCondData *calibData, const PixelCalib::PixelOfflineCalibData *offlineCalibData, const EventContext &ctx, xAOD::PixelCluster *cluster=nullptr) const
Definition: ClusterMakerTool.cxx:195
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:240
IDTPM::etaError
float etaError(const U &p)
Definition: TrackParametersHelper.h:222
PixelCalib::PixelClusterErrorData::getBarrelBin
int getBarrelBin(double eta, int etaClusterSize, int phiClusterSize) const
Definition: PixelClusterErrorData.cxx:150
charge
double charge(const T &p)
Definition: AtlasPID.h:986
InDetDD::SiDetectorElement
Definition: SiDetectorElement.h:109
InDetDD::SiDetectorElement::isBarrel
bool isBarrel() const
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
InDet::ClusterMakerTool::sctCluster
SCT_Cluster sctCluster(const Identifier &clusterID, const Amg::Vector2D &localPos, std::vector< Identifier > &&rdoList, const SiWidth &width, const InDetDD::SiDetectorElement *element, int errorStrategy) const
Definition: ClusterMakerTool.cxx:503
SiDetectorElement.h
InDet::PixelCluster
Definition: InnerDetector/InDetRecEvent/InDetPrepRawData/InDetPrepRawData/PixelCluster.h:49
PixelCalib::PixelClusterErrorData::getEndcapBin
int getEndcapBin(int etaClusterSize, int phiClusterSize) const
Definition: PixelClusterErrorData.cxx:165
InDet::ClusterMakerTool::getPixelCTBPhiError
double getPixelCTBPhiError(int layer, int phi, int PhiClusterSize) const
Definition: ClusterMakerTool.cxx:582
xAOD::PixelCluster_v1
Definition: PixelCluster_v1.h:17
python.CaloAddPedShiftConfig.int
int
Definition: CaloAddPedShiftConfig.py:45
Base_Fragment.width
width
Definition: Sherpa_i/share/common/Base_Fragment.py:59
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
PixelModuleDesign.h
PixelID::pixel_id
Identifier pixel_id(int barrel_ec, int layer_disk, int phi_module, int eta_module, int phi_index, int eta_index) const
For an individual pixel.
Definition: PixelID.h:428
InDetDD::SiDetectorElement::sinStereoLocal
double sinStereoLocal(const Amg::Vector2D &localPos) const
Angle of strip in local frame with respect to the etaAxis.
Definition: SiDetectorElement.cxx:288
InDet::SiWidth
Definition: SiWidth.h:25
ActsTrk::ONE_TWELFTH
constexpr double ONE_TWELFTH
Definition: StripClusteringTool.cxx:20
PixelChargeCalibCondData::getCharge
float getCharge(InDetDD::PixelDiodeType type, unsigned int moduleHash, unsigned int FE, float ToT) const
Definition: PixelChargeCalibCondData.cxx:223
AthAlgTool
Definition: AthAlgTool.h:26
IdentifierHash
This is a "hash" representation of an Identifier. This encodes a 32 bit index which can be used to lo...
Definition: IdentifierHash.h:25
python.IoTestsLib.w
def w
Definition: IoTestsLib.py:198
InDetDD::SiDetectorElement::design
virtual const SiDetectorDesign & design() const override final
access to the local description (inline):
InDet::ClusterMakerTool::m_pixelLorentzAngleTool
ToolHandle< ISiLorentzAngleTool > m_pixelLorentzAngleTool
Definition: ClusterMakerTool.h:171
columnar::operator()
decltype(auto) operator()(ObjectId< CI, CM > id) const noexcept
Definition: ColumnAccessor.h:173
PixelID
Definition: PixelID.h:67
pow
constexpr int pow(int base, int exp) noexcept
Definition: ap_fixedTest.cxx:15
InDet::ClusterMakerTool::m_sctLorentzAngleTool
ToolHandle< ISiLorentzAngleTool > m_sctLorentzAngleTool
Definition: ClusterMakerTool.h:174
Trk::Surface::transform
const Amg::Transform3D & transform() const
Returns HepGeom::Transform3D by reference.
Trk::split
@ split
Definition: LayerMaterialProperties.h:38
AtlasDetectorID
This class provides an interface to generate or decode an identifier for the upper levels of the dete...
Definition: AtlasDetectorID.h:57
InDet::ClusterMakerTool::m_forceErrorStrategy1B
bool m_forceErrorStrategy1B
Definition: ClusterMakerTool.h:176
InDetDD::Trapezoid
@ Trapezoid
Definition: DetectorDesign.h:42
generate::Zero
void Zero(TH1D *hin)
Definition: generate.cxx:32
python.LArMinBiasAlgConfig.float
float
Definition: LArMinBiasAlgConfig.py:65
Identifier
Definition: IdentifierFieldParser.cxx:14