ATLAS Offline Software
ClusterMakerTool.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 //***************************************************************************
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  const float omegax,
101  const float omegay,
102  bool split,
103  float splitProb1,
104  float splitProb2) {
105  IdentifierHash idHash = detEl->identifyHash();
106 
107  Eigen::Matrix<float,2,1> localPosition(locpos.x(), locpos.y());
108  Eigen::Matrix<float,2,2> localCovariance = Eigen::Matrix<float,2,2>::Zero();
109  localCovariance(0, 0) = locErrMat(0, 0);
110  localCovariance(1, 1) = locErrMat(1, 1);
111 
112  m_cluster->setMeasurement<2>(idHash, localPosition, localCovariance);
113  m_cluster->setRDOlist(rdoList);
114  m_cluster->globalPosition() = globpos.cast<float>();
115  m_cluster->setToTlist(totList);
116  m_cluster->setTotalToT( xAOD::xAODInDetMeasurement::Utilities::computeTotalToT(totList) );
117  m_cluster->setChargelist(chargeList);
118  m_cluster->setTotalCharge( xAOD::xAODInDetMeasurement::Utilities::computeTotalCharge(chargeList) );
119  m_cluster->setLVL1A(lvl1a);
120  m_cluster->setChannelsInPhiEta(width.colRow()[0], width.colRow()[1]);
121  m_cluster->setWidthInEta(static_cast<float>(width.widthPhiRZ()[1]));
122  m_cluster->setOmegas(omegax, omegay);
123  m_cluster->setIsSplit(split);
124  m_cluster->setSplitProbabilities(splitProb1, splitProb2);
125 
126  return m_cluster;
127  }
128 
129 private:
130  xAOD::PixelCluster *m_cluster;
131 };
132 
133 
134 }
135 
136 
137 namespace InDet {
138 
139 // using namespace Trk;
140 
141 // Constructor with parameters:
143  const std::string& n,
144  const IInterface* p) :
145  AthAlgTool(t,n,p)
146 {
147  declareInterface<ClusterMakerTool>(this);
148 }
149 
150 //================ Initialisation =============================================
151 
153  // Code entered here will be executed once at program start.
154 
155  ATH_MSG_DEBUG ( name() << " initialize()" );
156 
157  if (not m_pixelReadout.empty()) {
158  ATH_CHECK(m_pixelReadout.retrieve());
159  }
160 
161  if (not m_pixelLorentzAngleTool.empty()) {
163  } else {
164  m_pixelLorentzAngleTool.disable();
165  }
166  if (not m_sctLorentzAngleTool.empty()) {
167  ATH_CHECK(m_sctLorentzAngleTool.retrieve());
168  } else {
169  m_sctLorentzAngleTool.disable();
170  }
171 
172 
173  return StatusCode::SUCCESS;
174 }
175 
176 
177 // Compute the pixel cluster global position, and the error associated
178 // to the position.
179 // Called by the pixel clustering tools
180 //
181 // Input parameters
182 // - the cluster Identifier
183 // - the position in local reference frame
184 // - the list of identifiers of the Raw Data Objects belonging to the cluster
185 // - the width of the cluster
186 // - the module the cluster belongs to
187 // - wheter the cluster contains ganged pixels
188 // - the error strategy, currently
189 // 0: cluster width/sqrt(12.)
190 // 1: pixel pitch/sqrt(12.)
191 // 2: parametrized as a function ofpseudorapidity and cluster size
192 // (default)
193 // 10: CTB parametrization (as a function of module and cluster size)
194 // no magnetic field
195 // - const reference to a PixelID helper class
196 
197 template <typename ClusterType, typename IdentifierVec, typename ToTList>
199  const Identifier& clusterID,
200  const Amg::Vector2D& localPos,
201  IdentifierVec&& rdoList,
202  const int lvl1a,
203  ToTList&& totList,
204  const SiWidth& width,
205  const InDetDD::SiDetectorElement* element,
206  bool ganged,
207  int errorStrategy,
208  const PixelID& pixelID,
209  bool split,
210  double splitProb1,
211  double splitProb2,
212  const PixelChargeCalibCondData *calibData,
213  const PixelOfflineCalibData *offlineCalibData,
214  const EventContext& ctx,
215  xAOD::PixelCluster* cluster) const{
216 
217  ATH_MSG_VERBOSE("ClusterMakerTool called, number ");
218  if ( errorStrategy==2 && m_forceErrorStrategy1B ) errorStrategy=1;
219 
220  // Fill vector of charges and compute charge balance
221  const InDetDD::PixelModuleDesign* design = (dynamic_cast<const InDetDD::PixelModuleDesign*>(&element->design()));
222  if (not design){
223  throw std::runtime_error( "Dynamic cast failed for design in ClusterMakerTool.cxx");
224  }
225  int rowMin = design->rows();
226  int rowMax = 0;
227  int colMin = design->columns();
228  int colMax = 0;
229  float qRowMin = 0; float qRowMax = 0;
230  float qColMin = 0; float qColMax = 0;
231  std::vector<float> chargeList;
232  int nRDO=rdoList.size();
233  if (calibData) {
234  chargeList.reserve(nRDO);
235  for (int i=0; i<nRDO; i++) {
236  Identifier pixid=rdoList[i];
237  int ToT=totList[i];
238 
239  float charge = ToT;
240  Identifier moduleID = pixelID.wafer_id(pixid);
241  IdentifierHash moduleHash = pixelID.wafer_hash(moduleID); // wafer hash
242  unsigned int FE = m_pixelReadout->getFE(pixid, moduleID);
243  InDetDD::PixelDiodeType type = m_pixelReadout->getDiodeType(pixid);
244  charge = calibData->getCharge(type, moduleHash, FE, ToT);
245  if (design->getReadoutTechnology() != InDetDD::PixelReadoutTechnology::RD53 && (moduleHash<12 || moduleHash>2035)) {
246  charge = ToT/8.0*(8000.0-1200.0)+1200.0;
247  }
248  chargeList.push_back(charge);
249  }
250  }
251 
252  for (int i=0; i<nRDO; i++) {
253  Identifier pixid=rdoList[i];
254  int ToT=totList[i];
255 
256  float charge = ToT;
257  if (calibData) { charge=chargeList[i]; }
258 
259  // std::cout << "tot, charge = " << ToT << " " << charge << std::endl;
260  int row = pixelID.phi_index(pixid);
261  int col = pixelID.eta_index(pixid);
262  if (row == rowMin) qRowMin += charge;
263  if (row < rowMin){
264  rowMin = row;
265  qRowMin = charge;
266  }
267 
268  if (row == rowMax) qRowMax += charge;
269  if (row > rowMax){
270  rowMax = row;
271  qRowMax = charge;
272  }
273  if (col == colMin) qColMin += charge;
274  if (col < colMin){
275  colMin = col;
276  qColMin = charge;
277  }
278 
279  if (col == colMax) qColMax += charge;
280  if (col > colMax){
281  colMax = col;
282  qColMax = charge;
283  }
284  }
285 
286  Identifier newClusterID = pixelID.pixel_id(pixelID.wafer_id(clusterID),rowMin,colMin);
287  // Compute omega for charge interpolation correction (if required)
288  // Two pixels may have charge=0 (very rarely, hopefully)
289  float omegax = -1;
290  float omegay = -1;
291  if(qRowMin+qRowMax > 0) omegax = qRowMax/float(qRowMin+qRowMax);
292  if(qColMin+qColMax > 0) omegay = qColMax/float(qColMin+qColMax);
293 
294  ATH_MSG_VERBOSE("omega = " << omegax << " " << omegay);
295 
296 // ask for Lorentz correction, get global position
297  double shift = m_pixelLorentzAngleTool->getLorentzShift(element->identifyHash(), ctx);
298  Amg::Vector2D locpos(localPos[Trk::locX]+shift, localPos[Trk::locY]);
299 // find global position of element
300  const Amg::Transform3D& T = element->surface().transform();
301  double Ax[3] = {T(0,0),T(1,0),T(2,0)};
302  double Ay[3] = {T(0,1),T(1,1),T(2,1)};
303  double R [3] = {T(0,3),T(1,3),T(2,3)};
304 
305  const Amg::Vector2D& M = locpos;
306  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]);
307 
308  // error matrix
309  const Amg::Vector2D& colRow = width.colRow();// made ref to avoid
310  // unnecessary copy EJWM
311  auto errorMatrix = Amg::MatrixX(2,2);
312  errorMatrix.setIdentity();
313 
314  // switches are more readable **OPT**
315  // actually they're slower as well (so I'm told) so perhaps
316  // this should be re-written at some point EJWM
317  double eta = std::abs(globalPos.eta());
318  double zPitch = width.z()/colRow.y();
319 
320  const AtlasDetectorID* aid = element->getIdHelper();
321 
323  throw std::runtime_error( "Wrong helper type in ClusterMakerTool.cxx.");
324  }
325  const PixelID* pid = static_cast<const PixelID*>(aid);
326  int layer = pid->layer_disk(clusterID);
327  int phimod = pid->phi_module(clusterID);
328  switch (errorStrategy){
329  case 0:
330  errorMatrix.fillSymmetric(0,0,square(width.phiR())*ONE_TWELFTH);
331  errorMatrix.fillSymmetric(1,1,square(width.z())*ONE_TWELFTH);
332  break;
333  case 1:
334  errorMatrix.fillSymmetric(0,0,square(width.phiR()/colRow.x())*ONE_TWELFTH);
335  errorMatrix.fillSymmetric(1,1,square(width.z()/colRow.y())*ONE_TWELFTH);
336  break;
337  case 2:
338  // use parameterization only if the cluster does not
339  // contain long pixels or ganged pixels
340  // Also require calibration service is available....
341  if (!ganged && zPitch>399*micrometer && zPitch<401*micrometer) {
342  if (offlineCalibData) {
343  if (element->isBarrel()) {
344  int ibin = offlineCalibData->getPixelClusterErrorData()->getBarrelBin(eta,int(colRow.y()),int(colRow.x()));
345  double phiError = offlineCalibData->getPixelClusterErrorData()->getPixelBarrelPhiError(ibin);
346  double etaError = offlineCalibData->getPixelClusterErrorData()->getPixelBarrelEtaError(ibin);
347  errorMatrix.fillSymmetric(0,0,pow(phiError,2));
348  errorMatrix.fillSymmetric(1,1,pow(etaError,2));
349  }
350  else {
351  int ibin = offlineCalibData->getPixelClusterErrorData()->getEndcapBin(int(colRow.y()),int(colRow.x()));
352  double phiError = offlineCalibData->getPixelClusterErrorData()->getPixelEndcapPhiError(ibin);
353  double etaError = offlineCalibData->getPixelClusterErrorData()->getPixelEndcapRError(ibin);
354  errorMatrix.fillSymmetric(0,0,square(phiError));
355  errorMatrix.fillSymmetric(1,1,square(etaError));
356  }
357  }
358  }else{// cluster with ganged and/or long pixels
359  errorMatrix.fillSymmetric(0,0,square(width.phiR()/colRow.x())*ONE_TWELFTH);
360  errorMatrix.fillSymmetric(1,1,square(zPitch)*ONE_TWELFTH);
361  }
362  break;
363 
364  case 10:
365  errorMatrix.fillSymmetric(0,0,square( getPixelCTBPhiError(layer,phimod,int(colRow.x()))));
366  errorMatrix.fillSymmetric(1,1,square(width.z()/colRow.y())*ONE_TWELFTH);
367  break;
368 
369  default:
370  errorMatrix.fillSymmetric(0,0,square(width.phiR()/colRow.x())*ONE_TWELFTH);
371  errorMatrix.fillSymmetric(1,1,square(width.z()/colRow.y())*ONE_TWELFTH);
372  break;
373  }
374 
375  //1) We want to move always for the Trk::PixelCluster
376  //2) We forward the rdoList and chargeList that could have be passed
377  // different ways.
378  //
379  static_assert(std::is_same_v<ClusterType, PixelCluster> ||
380  std::is_same_v<std::remove_pointer_t<ClusterType>,
382  "Not an InDet::PixelCluster or xAOD::PixelCluster");
384  return newInDetpixelCluster(newClusterID, locpos,
385  globalPos,
386  std::forward<IdentifierVec>(rdoList),
387  lvl1a,
388  std::forward<ToTList>(totList),
389  std::move(chargeList),
390  width,
391  element,
392  std::move(errorMatrix),
393  omegax,
394  omegay,
395  split,
396  splitProb1,
397  splitProb2);
398  } else{
399  return AddNewxAODpixelCluster(*cluster)(newClusterID,
400  locpos,
401  globalPos,
402  std::forward<IdentifierVec>(rdoList),
403  lvl1a,
404  std::forward<ToTList>(totList),
405  chargeList,
406  width,
407  element,
408  errorMatrix,
409  omegax,
410  omegay,
411  split,
412  splitProb1,
413  splitProb2);
414  }
415 }
416 
418  const Identifier& clusterID,
419  const Amg::Vector2D& localPos,
420  std::vector<Identifier>&& rdoList,
421  const int lvl1a,
422  std::vector<int>&& totList,
423  const SiWidth& width,
424  const InDetDD::SiDetectorElement* element,
425  bool ganged,
426  int errorStrategy,
427  const PixelID& pixelID,
428  bool split,
429  double splitProb1,
430  double splitProb2,
431  const PixelChargeCalibCondData *calibData,
432  const PixelOfflineCalibData *offlineCalibData,
433  const EventContext& ctx) const
434 {
435  return makePixelCluster<PixelCluster>(
436  clusterID,
437  localPos,
438  std::move(rdoList),
439  lvl1a,
440  std::move(totList),
441  width,
442  element,
443  ganged,
444  errorStrategy,
445  pixelID,
446  split,
447  splitProb1,
448  splitProb2,
449  calibData,
450  offlineCalibData,
451  ctx);
452 }
453 
455  xAOD::PixelCluster& cluster,
456  const Amg::Vector2D& localPos,
457  const std::vector<Identifier>& rdoList,
458  const int lvl1a,
459  const std::vector<int>& totList,
460  const SiWidth& width,
461  const InDetDD::SiDetectorElement* element,
462  bool ganged,
463  int errorStrategy,
464  const PixelID& pixelID,
465  bool split,
466  double splitProb1,
467  double splitProb2,
468  const PixelChargeCalibCondData *calibData,
469  const PixelOfflineCalibData *offlineCalibData,
470  const EventContext& ctx) const
471 {
472  return makePixelCluster<xAOD::PixelCluster*>(
473  Identifier(),
474  localPos,
475  rdoList,
476  lvl1a,
477  totList,
478  width,
479  element,
480  ganged,
481  errorStrategy,
482  pixelID,
483  split,
484  splitProb1,
485  splitProb2,
486  calibData,
487  offlineCalibData,
488  ctx,
489  &cluster);
490 }
491 
492 // Computes global position and errors for SCT cluster.
493 // Called by SCT Clustering tools
494 //
495 // Input parameters
496 // - the cluster Identifier
497 // - the position in local reference frame
498 // - the list of identifiers of the Raw Data Objects belonging to the cluster
499 // - the width of the cluster
500 // - the module the cluster belongs to
501 // - the error strategy, currently
502 // 0: Cluster Width/sqrt(12.)
503 // 1: Set to a different values for one and two-strip clusters (def.)
504 // The scale factors were derived by the study reported on 25th September 2006.
505 // https://indico.cern.ch/event/430391/contributions/1066157/attachments/929942/1317007/SCTSoft_25Sept06_clusters.pdf
506 
509  const Amg::Vector2D& localPos,
510  std::vector<Identifier>&& rdoList,
511  const SiWidth& width,
512  const InDetDD::SiDetectorElement* element,
513  int errorStrategy) const
514 {
515 
516  double shift =
517  m_sctLorentzAngleTool->getLorentzShift(element->identifyHash(), Gaudi::Hive::currentContext());
518  Amg::Vector2D locpos(localPos[Trk::locX] + shift, localPos[Trk::locY]);
519 
520  // error matrix
521  const Amg::Vector2D& colRow = width.colRow(); // made ref to avoid
522  // unnecessary copy EJWM
523 
524  auto errorMatrix = Amg::MatrixX(2,2);
525  errorMatrix.setIdentity();
526 
527  // switches are more readable **OPT**
528  // actually they're slower as well (so I'm told) so perhaps
529  // this should be re-written at some point EJWM
530 
531  switch (errorStrategy){
532  case 0:
533  errorMatrix.fillSymmetric(0,0,square(width.phiR())*ONE_TWELFTH);
534  errorMatrix.fillSymmetric(1,1,square(width.z())*ONE_TWELFTH);
535  break;
536  case 1:
537  // mat(1,1) = pow(width.phiR()/colRow.x(),2)/12;
538  // single strip - resolution close to pitch/sqrt(12)
539  // two-strip hits: better resolution, approx. 40% lower
540  if(colRow.x() == 1){
541  errorMatrix.fillSymmetric(0,0,square(1.05*width.phiR())*ONE_TWELFTH);
542  }
543  else if(colRow.x() == 2){
544  errorMatrix.fillSymmetric(0,0,square(0.27*width.phiR())*ONE_TWELFTH);
545  }
546  else{
547  errorMatrix.fillSymmetric(0,0,square(width.phiR())*ONE_TWELFTH);
548  }
549  errorMatrix.fillSymmetric(1,1,square(width.z()/colRow.y())*ONE_TWELFTH);
550  break;
551  default:
552  // single strip - resolution close to pitch/sqrt(12)
553  // two-strip hits: better resolution, approx. 40% lower
554  if(colRow.x() == 1){
555  errorMatrix.fillSymmetric(0,0,square(width.phiR())*ONE_TWELFTH);
556  }
557  else if(colRow.x() == 2){
558  errorMatrix.fillSymmetric(0,0,square(0.27*width.phiR())*ONE_TWELFTH);
559  }
560  else{
561  errorMatrix.fillSymmetric(0,0,square(width.phiR())*ONE_TWELFTH);
562  }
563  errorMatrix.fillSymmetric(1,1,square(width.z()/colRow.y())*ONE_TWELFTH);
564  break;
565  }
566 
567  auto designShape = element->design().shape();
568  // rotation for endcap SCT
569  if(designShape == InDetDD::Trapezoid || designShape == InDetDD::Annulus) {
570  double sn = element->sinStereoLocal(localPos);
571  double sn2 = sn*sn;
572  double cs2 = 1.-sn2;
573  double w = element->phiPitch(localPos)/element->phiPitch();
574  double v0 = (errorMatrix)(0,0)*w*w;
575  double v1 = (errorMatrix)(1,1);
576  errorMatrix.fillSymmetric(0,0,cs2*v0+sn2*v1);
577  errorMatrix.fillSymmetric(0,1,sn*sqrt(cs2)*(v0-v1));
578  errorMatrix.fillSymmetric(1,1,sn2*v0+cs2*v1);
579  } //else if (designShape == InDetDD::PolarAnnulus) {// Polar rotation for endcap}
580 
581  return SCT_Cluster(clusterID, locpos, std::move(rdoList), width, element, std::move(errorMatrix));
582 
583 }
584 
585 //---------------------------------------------------------------------------
586 // CTB parameterization, B field off
588  int phiClusterSize) const{
589 
590  double sigmaL0Phi1[3] = { 8.2*micrometer, 9.7*micrometer, 14.6*micrometer};
591  double sigmaL1Phi1[3] = {14.6*micrometer, 9.3*micrometer, 14.6*micrometer};
592  double sigmaL2Phi1[3] = {14.6*micrometer, 8.6*micrometer, 14.6*micrometer};
593  double sigmaL0Phi0[3] = {14.6*micrometer, 13.4*micrometer, 13.0*micrometer};
594  double sigmaL1Phi0[3] = {14.6*micrometer, 8.5*micrometer, 11.0*micrometer};
595  double sigmaL2Phi0[3] = {14.6*micrometer, 11.6*micrometer, 9.3*micrometer};
596 
597  if(phiClusterSize > 3) return 14.6*micrometer;
598 
599  if(layer == 0 && phi == 0) return sigmaL0Phi0[phiClusterSize-1];
600  if(layer == 1 && phi == 0) return sigmaL1Phi0[phiClusterSize-1];
601  if(layer == 2 && phi == 0) return sigmaL2Phi0[phiClusterSize-1];
602  if(layer == 0 && phi == 1) return sigmaL0Phi1[phiClusterSize-1];
603  if(layer == 1 && phi == 1) return sigmaL1Phi1[phiClusterSize-1];
604  if(layer == 2 && phi == 1) return sigmaL2Phi1[phiClusterSize-1];
605 
606  // shouldn't really happen...
607  ATH_MSG_WARNING("Unexpected layer and phi numbers: layer = "
608  << layer << " and phi = " << phi);
609  return 14.6*micrometer;
610 
611 }
612 
613 }
PixelID.h
This is an Identifier helper class for the Pixel subdetector. This class is a factory for creating co...
query_example.row
row
Definition: query_example.py:24
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:454
SiWidth.h
PixelID::phi_index
int phi_index(const Identifier &id) const
Definition: PixelID.h:658
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:48
Trk::locY
@ locY
local cartesian
Definition: ParamDefs.h:38
CaloCellPos2Ntuple.int
int
Definition: CaloCellPos2Ntuple.py:24
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
conifer::pow
constexpr int pow(int x)
Definition: conifer.h:20
PixelCalib::PixelOfflineCalibData::getPixelClusterErrorData
PixelClusterErrorData * getPixelClusterErrorData()
Definition: PixelOfflineCalibData.h:97
InDetDD::PixelDiodeType
PixelDiodeType
Definition: PixelReadoutDefinitions.h:25
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.
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:142
x
#define x
SCT_Cluster.h
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:364
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:417
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:210
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:387
InDet::ClusterMakerTool::initialize
StatusCode initialize()
Definition: ClusterMakerTool.cxx:152
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:731
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:664
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
PixelCalib::PixelClusterErrorData::getPixelEndcapRError
float getPixelEndcapRError(int ibin) const
Definition: PixelClusterErrorData.cxx:77
python.SystemOfUnits.micrometer
int micrometer
Definition: SystemOfUnits.py:71
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:95
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:198
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:221
IDTPM::etaError
float etaError(const U &p)
Definition: TrackParametersHelper.h:220
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:538
InDetDD::SiDetectorElement
Definition: SiDetectorElement.h:109
InDetDD::SiDetectorElement::isBarrel
bool isBarrel() const
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
query_example.col
col
Definition: query_example.py:7
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:508
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:587
xAOD::PixelCluster_v1
Definition: PixelCluster_v1.h:17
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
python.CaloScaleNoiseConfig.type
type
Definition: CaloScaleNoiseConfig.py:78
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:432
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:17
PixelChargeCalibCondData::getCharge
float getCharge(InDetDD::PixelDiodeType type, unsigned int moduleHash, unsigned int FE, float ToT) const
Definition: PixelChargeCalibCondData.cxx:192
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:200
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
PixelID
Definition: PixelID.h:67
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.
readCCLHist.float
float
Definition: readCCLHist.py:83
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
Identifier
Definition: IdentifierFieldParser.cxx:14