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  xAOD::PixelCluster* cluster) const{
215 
216  ATH_MSG_VERBOSE("ClusterMakerTool called, number ");
217  if ( errorStrategy==2 && m_forceErrorStrategy1B ) errorStrategy=1;
218 
219  // Fill vector of charges and compute charge balance
220  const InDetDD::PixelModuleDesign* design = (dynamic_cast<const InDetDD::PixelModuleDesign*>(&element->design()));
221  if (not design){
222  throw std::runtime_error( "Dynamic cast failed for design in ClusterMakerTool.cxx");
223  }
224  int rowMin = design->rows();
225  int rowMax = 0;
226  int colMin = design->columns();
227  int colMax = 0;
228  float qRowMin = 0; float qRowMax = 0;
229  float qColMin = 0; float qColMax = 0;
230  std::vector<float> chargeList;
231  int nRDO=rdoList.size();
232  if (calibData) {
233  chargeList.reserve(nRDO);
234  for (int i=0; i<nRDO; i++) {
235  Identifier pixid=rdoList[i];
236  int ToT=totList[i];
237 
238  float charge = ToT;
239  Identifier moduleID = pixelID.wafer_id(pixid);
240  IdentifierHash moduleHash = pixelID.wafer_hash(moduleID); // wafer hash
241  unsigned int FE = m_pixelReadout->getFE(pixid, moduleID);
242  InDetDD::PixelDiodeType type = m_pixelReadout->getDiodeType(pixid);
243  charge = calibData->getCharge(type, moduleHash, FE, ToT);
244  if (design->getReadoutTechnology() != InDetDD::PixelReadoutTechnology::RD53 && (moduleHash<12 || moduleHash>2035)) {
245  charge = ToT/8.0*(8000.0-1200.0)+1200.0;
246  }
247  chargeList.push_back(charge);
248  }
249  }
250 
251  for (int i=0; i<nRDO; i++) {
252  Identifier pixid=rdoList[i];
253  int ToT=totList[i];
254 
255  float charge = ToT;
256  if (calibData) { charge=chargeList[i]; }
257 
258  // std::cout << "tot, charge = " << ToT << " " << charge << std::endl;
259  int row = pixelID.phi_index(pixid);
260  int col = pixelID.eta_index(pixid);
261  if (row == rowMin) qRowMin += charge;
262  if (row < rowMin){
263  rowMin = row;
264  qRowMin = charge;
265  }
266 
267  if (row == rowMax) qRowMax += charge;
268  if (row > rowMax){
269  rowMax = row;
270  qRowMax = charge;
271  }
272  if (col == colMin) qColMin += charge;
273  if (col < colMin){
274  colMin = col;
275  qColMin = charge;
276  }
277 
278  if (col == colMax) qColMax += charge;
279  if (col > colMax){
280  colMax = col;
281  qColMax = charge;
282  }
283  }
284 
285  Identifier newClusterID = pixelID.pixel_id(pixelID.wafer_id(clusterID),rowMin,colMin);
286  // Compute omega for charge interpolation correction (if required)
287  // Two pixels may have charge=0 (very rarely, hopefully)
288  float omegax = -1;
289  float omegay = -1;
290  if(qRowMin+qRowMax > 0) omegax = qRowMax/float(qRowMin+qRowMax);
291  if(qColMin+qColMax > 0) omegay = qColMax/float(qColMin+qColMax);
292 
293  ATH_MSG_VERBOSE("omega = " << omegax << " " << omegay);
294 
295 // ask for Lorentz correction, get global position
296  double shift = m_pixelLorentzAngleTool->getLorentzShift(element->identifyHash());
297  Amg::Vector2D locpos(localPos[Trk::locX]+shift, localPos[Trk::locY]);
298 // find global position of element
299  const Amg::Transform3D& T = element->surface().transform();
300  double Ax[3] = {T(0,0),T(1,0),T(2,0)};
301  double Ay[3] = {T(0,1),T(1,1),T(2,1)};
302  double R [3] = {T(0,3),T(1,3),T(2,3)};
303 
304  const Amg::Vector2D& M = locpos;
305  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]);
306 
307  // error matrix
308  const Amg::Vector2D& colRow = width.colRow();// made ref to avoid
309  // unnecessary copy EJWM
310  auto errorMatrix = Amg::MatrixX(2,2);
311  errorMatrix.setIdentity();
312 
313  // switches are more readable **OPT**
314  // actually they're slower as well (so I'm told) so perhaps
315  // this should be re-written at some point EJWM
316  double eta = std::abs(globalPos.eta());
317  double zPitch = width.z()/colRow.y();
318 
319  const AtlasDetectorID* aid = element->getIdHelper();
320 
322  throw std::runtime_error( "Wrong helper type in ClusterMakerTool.cxx.");
323  }
324  const PixelID* pid = static_cast<const PixelID*>(aid);
325  int layer = pid->layer_disk(clusterID);
326  int phimod = pid->phi_module(clusterID);
327  switch (errorStrategy){
328  case 0:
329  errorMatrix.fillSymmetric(0,0,square(width.phiR())*ONE_TWELFTH);
330  errorMatrix.fillSymmetric(1,1,square(width.z())*ONE_TWELFTH);
331  break;
332  case 1:
333  errorMatrix.fillSymmetric(0,0,square(width.phiR()/colRow.x())*ONE_TWELFTH);
334  errorMatrix.fillSymmetric(1,1,square(width.z()/colRow.y())*ONE_TWELFTH);
335  break;
336  case 2:
337  // use parameterization only if the cluster does not
338  // contain long pixels or ganged pixels
339  // Also require calibration service is available....
340  if (!ganged && zPitch>399*micrometer && zPitch<401*micrometer) {
341  if (offlineCalibData) {
342  if (element->isBarrel()) {
343  int ibin = offlineCalibData->getPixelClusterErrorData()->getBarrelBin(eta,int(colRow.y()),int(colRow.x()));
344  double phiError = offlineCalibData->getPixelClusterErrorData()->getPixelBarrelPhiError(ibin);
345  double etaError = offlineCalibData->getPixelClusterErrorData()->getPixelBarrelEtaError(ibin);
346  errorMatrix.fillSymmetric(0,0,pow(phiError,2));
347  errorMatrix.fillSymmetric(1,1,pow(etaError,2));
348  }
349  else {
350  int ibin = offlineCalibData->getPixelClusterErrorData()->getEndcapBin(int(colRow.y()),int(colRow.x()));
351  double phiError = offlineCalibData->getPixelClusterErrorData()->getPixelEndcapPhiError(ibin);
352  double etaError = offlineCalibData->getPixelClusterErrorData()->getPixelEndcapRError(ibin);
353  errorMatrix.fillSymmetric(0,0,square(phiError));
354  errorMatrix.fillSymmetric(1,1,square(etaError));
355  }
356  }
357  }else{// cluster with ganged and/or long pixels
358  errorMatrix.fillSymmetric(0,0,square(width.phiR()/colRow.x())*ONE_TWELFTH);
359  errorMatrix.fillSymmetric(1,1,square(zPitch)*ONE_TWELFTH);
360  }
361  break;
362 
363  case 10:
364  errorMatrix.fillSymmetric(0,0,square( getPixelCTBPhiError(layer,phimod,int(colRow.x()))));
365  errorMatrix.fillSymmetric(1,1,square(width.z()/colRow.y())*ONE_TWELFTH);
366  break;
367 
368  default:
369  errorMatrix.fillSymmetric(0,0,square(width.phiR()/colRow.x())*ONE_TWELFTH);
370  errorMatrix.fillSymmetric(1,1,square(width.z()/colRow.y())*ONE_TWELFTH);
371  break;
372  }
373 
374  //1) We want to move always for the Trk::PixelCluster
375  //2) We forward the rdoList and chargeList that could have be passed
376  // different ways.
377  //
378  static_assert(std::is_same_v<ClusterType, PixelCluster> ||
379  std::is_same_v<std::remove_pointer_t<ClusterType>,
381  "Not an InDet::PixelCluster or xAOD::PixelCluster");
383  return newInDetpixelCluster(newClusterID, locpos,
384  globalPos,
385  std::forward<IdentifierVec>(rdoList),
386  lvl1a,
387  std::forward<ToTList>(totList),
388  std::move(chargeList),
389  width,
390  element,
391  std::move(errorMatrix),
392  omegax,
393  omegay,
394  split,
395  splitProb1,
396  splitProb2);
397  } else{
398  return AddNewxAODpixelCluster(*cluster)(newClusterID,
399  locpos,
400  globalPos,
401  std::forward<IdentifierVec>(rdoList),
402  lvl1a,
403  std::forward<ToTList>(totList),
404  chargeList,
405  width,
406  element,
407  errorMatrix,
408  omegax,
409  omegay,
410  split,
411  splitProb1,
412  splitProb2);
413  }
414 }
415 
417  const Identifier& clusterID,
418  const Amg::Vector2D& localPos,
419  std::vector<Identifier>&& rdoList,
420  const int lvl1a,
421  std::vector<int>&& totList,
422  const SiWidth& width,
423  const InDetDD::SiDetectorElement* element,
424  bool ganged,
425  int errorStrategy,
426  const PixelID& pixelID,
427  bool split,
428  double splitProb1,
429  double splitProb2,
430  const PixelChargeCalibCondData *calibData,
431  const PixelOfflineCalibData *offlineCalibData) const
432 {
433  return makePixelCluster<PixelCluster>(
434  clusterID,
435  localPos,
436  std::move(rdoList),
437  lvl1a,
438  std::move(totList),
439  width,
440  element,
441  ganged,
442  errorStrategy,
443  pixelID,
444  split,
445  splitProb1,
446  splitProb2,
447  calibData,
448  offlineCalibData);
449 }
450 
452  xAOD::PixelCluster& cluster,
453  const Amg::Vector2D& localPos,
454  const std::vector<Identifier>& rdoList,
455  const int lvl1a,
456  const std::vector<int>& totList,
457  const SiWidth& width,
458  const InDetDD::SiDetectorElement* element,
459  bool ganged,
460  int errorStrategy,
461  const PixelID& pixelID,
462  bool split,
463  double splitProb1,
464  double splitProb2,
465  const PixelChargeCalibCondData *calibData,
466  const PixelOfflineCalibData *offlineCalibData) const
467 {
468  return makePixelCluster<xAOD::PixelCluster*>(
469  Identifier(),
470  localPos,
471  rdoList,
472  lvl1a,
473  totList,
474  width,
475  element,
476  ganged,
477  errorStrategy,
478  pixelID,
479  split,
480  splitProb1,
481  splitProb2,
482  calibData,
483  offlineCalibData,
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());
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...
query_example.row
row
Definition: query_example.py:24
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:29
python.PerfMonSerializer.p
def p
Definition: PerfMonSerializer.py:743
phi
Scalar phi() const
phi method
Definition: AmgMatrixBasePlugin.h:64
Trk::locX
@ locX
Definition: ParamDefs.h:43
InDetDD::PixelModuleDesign
Definition: PixelModuleDesign.h:48
Trk::locY
@ locY
local cartesian
Definition: ParamDefs.h:44
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
eta
Scalar eta() const
pseudorapidity method
Definition: AmgMatrixBasePlugin.h:79
Amg::Vector2D
Eigen::Matrix< double, 2, 1 > Vector2D
Definition: GeoPrimitives.h:48
InDet
DUMMY Primary Vertex Finder.
Definition: VP1ErrorUtils.h:36
InDetDD::DetectorDesign::shape
virtual DetectorShape shape() const
Shape of element.
Definition: DetectorDesign.cxx:96
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
Definition: ClusterMakerTool.cxx:416
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:20
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:122
read_hist_ntuple.t
t
Definition: read_hist_ntuple.py:5
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, xAOD::PixelCluster *cluster=nullptr) const
Definition: ClusterMakerTool.cxx:198
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)
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)
InDet::ClusterMakerTool::m_pixelReadout
ServiceHandle< InDetDD::IPixelReadoutManager > m_pixelReadout
Definition: ClusterMakerTool.h:165
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:92
CaloSwCorrections.phimod
def phimod(flags, cells_name, *args, **kw)
Definition: CaloSwCorrections.py:203
Identifier
Definition: DetectorDescription/Identifier/Identifier/Identifier.h:32
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
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:192
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:494
InDetDD::SiDetectorElement
Definition: SiDetectorElement.h:109
InDetDD::SiDetectorElement::isBarrel
bool isBarrel() const
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
Definition: ClusterMakerTool.cxx:451
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: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
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:190
AthAlgTool
Definition: AthAlgTool.h:26
IdentifierHash
Definition: IdentifierHash.h:38
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:168
PixelID
Definition: PixelID.h:67
InDet::ClusterMakerTool::m_sctLorentzAngleTool
ToolHandle< ISiLorentzAngleTool > m_sctLorentzAngleTool
Definition: ClusterMakerTool.h:171
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:173
InDetDD::Trapezoid
@ Trapezoid
Definition: DetectorDesign.h:42
generate::Zero
void Zero(TH1D *hin)
Definition: generate.cxx:32