ATLAS Offline Software
PixelClusteringTool.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3 */
4 #include "PixelClusteringTool.h"
5 
6 #include <Acts/Clusterization/Clusterization.hpp>
7 
13 #include <TrkSurfaces/Surface.h>
14 
15 #include <unordered_set>
16 #include <stdexcept>
17 
18 using CLHEP::micrometer;
19 
20 // Helper functions for use with ACTS clusterization
21 // Put these in the InDet namespace so that ACTS can find them
22 // via ADL.
23 //
24 namespace ActsTrk {
25  static inline int getCellRow(const typename PixelClusteringTool::Cell& cell) { return cell.ROW; }
26  static inline int getCellColumn(const typename PixelClusteringTool::Cell& cell) { return cell.COL; }
27  static inline void clusterReserve(PixelClusteringTool::Cluster& cl,
28  std::size_t n)
29  {
30  cl.ids.reserve(n);
31  cl.tots.reserve(n);
32  }
33  static inline void clusterAddCell(PixelClusteringTool::Cluster& cl,
34  const PixelClusteringTool::Cell& cell)
35  {
36  cl.ids.push_back(cell.ID);
37  cl.tots.push_back(cell.TOT);
38  if (cell.LVL1 < cl.lvl1min)
39  cl.lvl1min = cell.LVL1;
40  }
41 
43 {
44  ATH_MSG_DEBUG("Initializing " << name() << " ...");
45 
46  ATH_MSG_DEBUG(" " << m_addCorners );
50 
52 
54 
55  ATH_MSG_INFO(" Charge Data Key:" << m_chargeDataKey);
56 
57  ATH_CHECK( detStore()->retrieve(m_pixelID, "PixelID") );
58 
59  ATH_MSG_DEBUG(name() << " successfully initialized");
60  return StatusCode::SUCCESS;
61 }
62 
64  const std::string& type, const std::string& name, const IInterface* parent)
65  : base_class(type,name,parent)
66 {}
67 
69 PixelClusteringTool::makeCluster(PixelClusteringTool::Cluster &cluster,
70  const InDetDD::SiDetectorElement* element,
71  const InDetDD::PixelModuleDesign& design,
72  const PixelChargeCalibCondData *calibData,
74  const double lorentz_shift,
75  xAOD::PixelCluster& xaodcluster) const
76 {
77 
78  Amg::Vector2D pos_acc(0,0);
79  int tot_acc = 0;
80 
81  std::vector<float> chargeList;
82  if (calibData) chargeList.reserve(cluster.ids.size());
83 
92 
93  // We temporary comment this since it is not used
94  // bool hasGanged = false;
95 
96  IdentifierHash moduleHash = element->identifyHash();
97 
98  for (size_t i = 0; i < cluster.ids.size(); i++) {
99 
100  //Construct the identifier class
101  Identifier id = Identifier(cluster.ids[i]);
102 
103  // We temporary comment this since it is not used
104  // TODO: Check how the ganged info is used in legacy
105  // if (multiChip) {
106  // hasGanged = hasGanged ||
107  // m_pixelRDOTool->isGanged(id, element).has_value();
108  // }
109 
110  int tot = cluster.tots.at(i);
111  float charge = tot;
112 
113  std::array<InDetDD::PixelDiodeTree::CellIndexType,2> diode_idx
115  m_pixelID->eta_index(id));
117 
118  if (calibData) {
119  // Retrieving the calibration only depends on FE and not per cell (can be further optimized)
120  // Single FE modules could have an optimized getCharge function where the calib constants are cached
121  std::uint32_t feValue = design.getFE(si_param);
122  auto diode_type = design.getDiodeType(si_param);
123  if (m_isITk){
125  ATH_MSG_ERROR("Chip type is not recognized!");
126  return StatusCode::FAILURE;
127  }
128 
129  charge = calibData->getCharge(diode_type,
130  calibStrategy,
131  moduleHash,
132  feValue,
133  tot);
134  chargeList.push_back(charge);
135  } else {
136  charge = calibData->getCharge(diode_type,
137  moduleHash,
138  feValue,
139  tot);
140 
141  // These numbers are taken from the Cluster Maker Tool
142  if (design.getReadoutTechnology() != InDetDD::PixelReadoutTechnology::RD53 && (moduleHash < 12 or moduleHash > 2035)) {
143  charge = tot/8.0*(8000.0-1200.0)+1200.0;
144  }
145  chargeList.push_back(charge);
146  }
147  }
148 
149  const InDetDD::PixelDiodeTree::CellIndexType &row = diode_idx[0];
150  const InDetDD::PixelDiodeTree::CellIndexType &col = diode_idx[1];
151  if (row>rowmax) {
152  rowmax=row;
153  rowmax_diode = si_param;
154  }
155  if (row<rowmin) {
156  rowmin=row;
157  rowmin_diode = si_param;
158  }
159  if (col>colmax) {
160  colmax=col;
161  colmax_diode = si_param;
162  }
163  if (col<colmin) {
164  colmin=col;
165  colmin_diode = si_param;
166  }
167 
168  // We compute the digital position as a sum of all RDO positions
169  // all with the same weight of 1
170  // We do not compute a charge-weighted center of gravity here (by default) since
171  // we observe it to be worse than the digital position
172  // ToT-weighted center of gravity must not be used
173  if (m_useWeightedPos) {
174  pos_acc += charge * si_param.position();
175  tot_acc += charge;
176  } else {
177  pos_acc += si_param.position();
178  tot_acc += 1;
179  }
180 
181  }
182 
183  if (tot_acc > 0)
184  pos_acc /= tot_acc;
185 
186 
187  const int colWidth = colmax - colmin + 1;
188  const int rowWidth = rowmax - rowmin + 1;
189 
190  double etaWidth = colmax_diode.xEtaMax() - colmin_diode.xEtaMin(); // design.widthFromColumnRange(colmin, colmax);
191  double phiWidth = rowmax_diode.xPhiMax() - rowmin_diode.xPhiMin(); // design.widthFromColumnRange(colmin, colmax);
192 
193  // ask for Lorentz correction, get global position
194  const Amg::Vector2D localPos = pos_acc;
195  Amg::Vector2D locpos(localPos[Trk::locX]+lorentz_shift, localPos[Trk::locY]);
196  // find global position of element
197  const Amg::Transform3D& T = element->surface().transform();
198  double Ax[3] = {T(0,0),T(1,0),T(2,0)};
199  double Ay[3] = {T(0,1),T(1,1),T(2,1)};
200  double R [3] = {T(0,3),T(1,3),T(2,3)};
201 
202  const Amg::Vector2D& M = locpos;
203  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]);
204 
205  // Compute error matrix
206  float width0, width1;
207  if (m_broadErrors) {
208  // Use cluster width
209  width0 = phiWidth;
210  width1 = etaWidth;
211  } else {
212  // Use average pixel width
213  width0 = phiWidth / rowWidth;
214  width1 = etaWidth / colWidth;
215  }
216 
217  // Actually create the cluster (i.e. fill the values)
218 
219  Eigen::Matrix<float,2,1> localPosition(locpos.x(), locpos.y());
220  Eigen::Matrix<float,2,2> localCovariance = Eigen::Matrix<float,2,2>::Zero();
221  localCovariance(0, 0) = width0 * width0 / 12.0f;
222  localCovariance(1, 1) = width1 * width1 / 12.0f;
223 
224  xaodcluster.setMeasurement<2>(moduleHash, localPosition, localCovariance);
225  xaodcluster.setIdentifier( cluster.ids.front() );
226  xaodcluster.setRDOlist(std::move(cluster.ids));
227  xaodcluster.globalPosition() = globalPos.cast<float>();
229  xaodcluster.setToTlist(std::move(cluster.tots));
231  xaodcluster.setChargelist(std::move(chargeList));
232  xaodcluster.setLVL1A(cluster.lvl1min);
233  xaodcluster.setChannelsInPhiEta(rowWidth,colWidth);
234  xaodcluster.setWidthInEta(static_cast<float>(etaWidth));
235  xaodcluster.setIsSplit(false);
236  xaodcluster.setSplitProbabilities(0.0, 0.0);
237 
238  return StatusCode::SUCCESS;
239 }
240 
242 PixelClusteringTool::clusterize(const EventContext& /*ctx*/,
243  const RawDataCollection& RDOs,
244  const InDet::SiDetectorElementStatus& pixelDetElStatus,
245  const InDetDD::SiDetectorElement& element,
246  Acts::Ccl::ClusteringData& data,
247  std::vector<ClusterCollection>& collection) const
248 {
249  IdentifierHash idHash = RDOs.identifyHash();
250  collection.emplace_back();
251  if ( not pixelDetElStatus.isGood(idHash) ) {
252  // the module being flagged as bad is not a failure
253  // An empty cluster collection needs to be added because the assumption
254  // is that there is one element per element RawDataCollection.
255  return StatusCode::SUCCESS;
256  }
257 
258  // Retrieve the cells from the detector element
259  CellCollection cells = unpackRDOs(RDOs, pixelDetElStatus, element);
260 
261  Acts::Ccl::createClusters<CellCollection, ClusterCollection, 2>
262  (data, cells, collection.back(), Acts::Ccl::DefaultConnect<Cell, 2>(m_addCorners));
263 
264  return StatusCode::SUCCESS;
265 }
266 
267 
269 PixelClusteringTool::makeClusters(const EventContext& ctx,
271  const InDetDD::SiDetectorElement& element,
272  typename ClusterContainer::iterator itrContainer) const
273 {
274  // We'd need a smarter move here!!!
275 
276  // Retrieve the calibration data
277  const PixelChargeCalibCondData *calibData = nullptr;
278  if (not m_chargeDataKey.empty()) {
280  calibData = calibDataHandle.cptr();
281 
282  if (!calibData) {
283  ATH_MSG_ERROR("PixelChargeCalibCondData requested but couldn't be retrieved from " << m_chargeDataKey.key());
284  return StatusCode::FAILURE;
285  }
286  }
287 
288  // Get the element design
289  const InDetDD::PixelModuleDesign& design =
290  static_cast<const InDetDD::PixelModuleDesign&>(element.design());
291 
292  // Get the calibration strategy for this module.
293  // Default to RD53 if the calibData is not available. That is fine because it won't be used anyway
294  auto calibrationStrategy = calibData ? calibData->getCalibrationStrategy(element.identifyHash()) : PixelChargeCalibCondData::CalibrationStrategy::RD53;
295 
296  double lorentz_shift = m_pixelLorentzAngleTool->getLorentzShift(element.identifyHash(), ctx);
297 
298  for (typename IPixelClusteringTool::Cluster& cl : clusters) {
299  xAOD::PixelCluster* xaodCluster = *itrContainer;
301  &element,
302  design,
303  calibData,
304  calibrationStrategy,
305  lorentz_shift,
306  *xaodCluster));
307  ++itrContainer;
308  }
309 
310  return StatusCode::SUCCESS;
311 }
312 
314 PixelClusteringTool::unpackRDOs(const RawDataCollection& RDOs,
315  const InDet::SiDetectorElementStatus& pixelDetElStatus,
316  const InDetDD::SiDetectorElement& element) const
317 {
318  // Get the element design
319  const InDetDD::PixelModuleDesign& design =
320  static_cast<const InDetDD::PixelModuleDesign&>(element.design());
321  CellCollection cells;
322  cells.reserve(300);
323 
324  const IdentifierHash& idHash = RDOs.identifyHash();
325  for (const auto *const rdo : RDOs) {
326  const Identifier& rdoID = rdo->identify();
327  std::array<InDetDD::PixelDiodeTree::CellIndexType,2> diode_idx
329  m_pixelID->eta_index(rdoID));
330  InDetDD::PixelDiodeTree::DiodeProxy si_param ( design.diodeProxyFromIdx(diode_idx));
331  std::uint32_t fe = design.getFE(si_param);
332 
333  // check if good RDO
334  // the pixel RDO tool here says always good if m_useModuleMap is false
335  if (not pixelDetElStatus.isChipGood(idHash, fe)) {
336  continue;
337  }
338 
339  const int lvl1 = rdo->getLVL1A();
340  const int tot = rdo->getToT();
341 
342  cells.emplace_back(m_pixelID->phi_index(rdoID),
343  m_pixelID->eta_index(rdoID),
344  tot,
345  lvl1,
346  rdoID.get_compact());
347 
348  if ( m_checkGanged ) {
349  std::optional<Identifier> gangedID = isGanged(rdoID, element);
350  if (gangedID.has_value()) {
351  cells.emplace_back(m_pixelID->phi_index(*gangedID),
352  m_pixelID->eta_index(*gangedID),
353  tot,
354  lvl1,
355  gangedID->get_compact());
356  }
357  }
358 
359  }
360 
361  return cells;
362 }
363 
364 inline std::optional<Identifier>
366  const InDetDD::SiDetectorElement& element)
367 {
368  // If the pixel is ganged, returns a new identifier for it
369  InDetDD::SiCellId cellID = element.cellIdFromIdentifier( rdoID );
370  if ( element.numberOfConnectedCells( cellID ) > 1 ) {
371  InDetDD::SiCellId gangedCellID = element.connectedCell( cellID, 1 );
372  return element.identifierFromCellId( gangedCellID );
373  }
374  return std::nullopt;
375 }
376 
377 } // namespace ActsTrk
python.PyKernel.retrieve
def retrieve(aClass, aKey=None)
Definition: PyKernel.py:110
xAOD::iterator
JetConstituentVector::iterator iterator
Definition: JetConstituentVector.cxx:68
ActsTrk::PixelClusteringTool::m_broadErrors
Gaudi::Property< bool > m_broadErrors
Definition: PixelClusteringTool.h:73
RunTileCalibRec.cells
cells
Definition: RunTileCalibRec.py:281
data
char data[hepevt_bytes_allocation_ATLAS]
Definition: HepEvt.cxx:11
SiWidth.h
xAOD::PixelCluster_v1::setTotalCharge
void setTotalCharge(float totalCharge)
Sets the total charge.
ActsTrk::IPixelClusteringTool::Cluster
Definition: Tracking/Acts/ActsToolInterfaces/ActsToolInterfaces/IPixelClusteringTool.h:43
PixelID::phi_index
int phi_index(const Identifier &id) const
Definition: PixelID.h:639
InDetDD::SolidStateDetectorElementBase::connectedCell
SiCellId connectedCell(const SiCellId cellId, int number) const
Get the cell ids sharing the readout for this cell.
Definition: SolidStateDetectorElementBase.cxx:250
ReadCellNoiseFromCool.cell
cell
Definition: ReadCellNoiseFromCool.py:53
InDetDD::PixelDiodeTree::DiodeProxyWithPosition::position
const Vector2D & position() const
get the cached position of this diode
Definition: PixelDiodeTree.h:241
ActsTrk::PixelClusteringTool::m_pixelLorentzAngleTool
ToolHandle< ISiLorentzAngleTool > m_pixelLorentzAngleTool
Definition: PixelClusteringTool.h:66
SG::ReadCondHandle
Definition: ReadCondHandle.h:40
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
Trk::locX
@ locX
Definition: ParamDefs.h:37
InDetDD::PixelModuleDesign
Definition: PixelModuleDesign.h:45
Trk::locY
@ locY
local cartesian
Definition: ParamDefs.h:38
Surface.h
PixelClusteringTool.h
xAOD::uint32_t
setEventNumber uint32_t
Definition: EventInfo_v1.cxx:127
InDet::SiDetectorElementStatus::isChipGood
bool isChipGood(IdentifierHash hash, unsigned int chip) const
Definition: SiDetectorElementStatus.h:100
Amg::Vector2D
Eigen::Matrix< double, 2, 1 > Vector2D
Definition: GeoPrimitives.h:48
max
constexpr double max()
Definition: ap_fixedTest.cxx:33
min
constexpr double min()
Definition: ap_fixedTest.cxx:26
xAOD::xAODInDetMeasurement::Utilities::computeTotalToT
int computeTotalToT(const SG::AuxElement &cluster)
Definition: Event/xAOD/xAODInDetMeasurement/Root/Utilities.cxx:22
ActsTrk::PixelClusteringTool::m_isITk
Gaudi::Property< bool > m_isITk
Definition: PixelClusteringTool.h:75
InDetDD::SolidStateDetectorElementBase::surface
Trk::Surface & surface()
Element Surface.
InDetDD::PixelDiodeTree::CellIndexType
int CellIndexType
Definition: PixelDiodeTree.h:37
ActsTrk::IPixelClusteringTool::CellCollection
std::vector< Cell > CellCollection
Definition: Tracking/Acts/ActsToolInterfaces/ActsToolInterfaces/IPixelClusteringTool.h:41
Identifier::get_compact
value_type get_compact() const
Get the compact id.
xAOD::PixelCluster_v1::setRDOlist
void setRDOlist(const std::vector< Identifier > &rdolist)
Sets the list of identifiers of the channels building the cluster.
Definition: PixelCluster_v1.cxx:32
PixelChargeCalibCondData::CalibrationStrategy::RD53
@ RD53
keylayer_zslicemap.row
row
Definition: keylayer_zslicemap.py:155
xAOD::PixelCluster_v1::setChargelist
void setChargelist(const std::vector< float > &charges)
Sets the list of charges of the channels building the cluster.
ActsTrk::PixelClusteringTool::m_pixelID
const PixelID * m_pixelID
Definition: PixelClusteringTool.h:76
xAOD::PixelCluster_v1::setIsSplit
void setIsSplit(bool isSplit)
Sets if the cluster is split or not.
ActsTrk::PixelClusteringTool::unpackRDOs
IPixelClusteringTool::CellCollection unpackRDOs(const RawDataCollection &RDOs, const InDet::SiDetectorElementStatus &stripDetElStatus, const InDetDD::SiDetectorElement &element) const
Definition: PixelClusteringTool.cxx:314
SG::VarHandleKey::key
const std::string & key() const
Return the StoreGate ID for the referenced object.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:141
xAOD::PixelCluster_v1::setWidthInEta
void setWidthInEta(float widthInEta)
Sets the width of the cluster in eta (y) direction.
SG::VarHandleKey::empty
bool empty() const
Test if the key is blank.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:150
InDetDD::PixelModuleDesign::getFE
static unsigned int getFE(const PixelDiodeTree::DiodeProxy &diode_proxy)
Definition: PixelModuleDesign.h:258
InDetDD::PixelModuleDesign::diodeProxyFromIdx
PixelDiodeTree::DiodeProxy diodeProxyFromIdx(const std::array< PixelDiodeTree::IndexType, 2 > &idx) const
Definition: PixelModuleDesign.h:248
ActsTrk::PixelClusteringTool::m_useWeightedPos
Gaudi::Property< bool > m_useWeightedPos
Definition: PixelClusteringTool.h:72
InDetDD::PixelModuleDesign::diodeProxyFromIdxCachePosition
PixelDiodeTree::DiodeProxyWithPosition diodeProxyFromIdxCachePosition(const std::array< PixelDiodeTree::IndexType, 2 > &idx) const
Definition: PixelModuleDesign.h:251
xAOD::PixelCluster_v1::setTotalToT
void setTotalToT(int totalToT)
Sets the total ToT.
python.CaloAddPedShiftConfig.type
type
Definition: CaloAddPedShiftConfig.py:42
InDetDD::SolidStateDetectorElementBase::identifyHash
virtual IdentifierHash identifyHash() const override final
identifier hash (inline)
ActsTrk::PixelClusteringTool::m_addCorners
Gaudi::Property< bool > m_addCorners
Definition: PixelClusteringTool.h:71
InDetDD::PixelModuleDesign::getDiodeType
static InDetDD::PixelDiodeType getDiodeType(const PixelDiodeTree::DiodeProxy &diode_proxy)
Definition: PixelModuleDesign.h:261
InDetDD::PixelReadoutTechnology::RD53
@ RD53
xAOD::PixelCluster_v1::setSplitProbabilities
void setSplitProbabilities(float prob1, float prob2)
Sets the splitting probabilities for the cluster.
SG::makeHandle
SG::ReadCondHandle< T > makeHandle(const SG::ReadCondHandleKey< T > &key, const EventContext &ctx=Gaudi::Hive::currentContext())
Definition: ReadCondHandle.h:270
ActsTrk::PixelClusteringTool::m_chargeDataKey
SG::ReadCondHandleKey< PixelChargeCalibCondData > m_chargeDataKey
Definition: PixelClusteringTool.h:68
InDetDD::PixelDiodeTree::DiodeProxyWithPosition
A diode proxy which caches the position of a diode.
Definition: PixelDiodeTree.h:230
ActsTrk::PixelClusteringTool::PixelClusteringTool
PixelClusteringTool(const std::string &type, const std::string &name, const IInterface *parent)
Definition: PixelClusteringTool.cxx:63
xAOD::UncalibratedMeasurement_v1::setIdentifier
void setIdentifier(const DetectorIdentType measId)
Sets the full Identifier of the measurement.
InDetDD::SiDetectorElement::cellIdFromIdentifier
virtual SiCellId cellIdFromIdentifier(const Identifier &identifier) const override final
SiCellId from Identifier.
Definition: SiDetectorElement.cxx:120
InDetDD::SolidStateDetectorElementBase::numberOfConnectedCells
int numberOfConnectedCells(const SiCellId cellId) const
Test if readout cell has more than one diode associated with it.
Definition: SolidStateDetectorElementBase.cxx:243
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
PixelClusterAuxContainer.h
lumiFormat.i
int i
Definition: lumiFormat.py:85
InDet::SiDetectorElementStatus
Definition: SiDetectorElementStatus.h:62
beamspotman.n
n
Definition: beamspotman.py:727
python.SystemOfUnits.micrometer
float micrometer
Definition: SystemOfUnits.py:80
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
ActsTrk::PixelClusteringTool::initialize
virtual StatusCode initialize() override
Definition: PixelClusteringTool.cxx:42
PixelChargeCalibCondData
Definition: PixelChargeCalibCondData.h:24
PixelClusterContainer.h
InDetDD::SiDetectorElement::identifierFromCellId
virtual Identifier identifierFromCellId(const SiCellId &cellId) const override final
Identifier <-> SiCellId (ie strip number or pixel eta_index,phi_index) Identifier from SiCellId (ie s...
Definition: SiDetectorElement.cxx:89
Amg::Transform3D
Eigen::Affine3d Transform3D
Definition: GeoPrimitives.h:46
xAOD::PixelCluster_v1::setToTlist
void setToTlist(const std::vector< int > &tots)
Sets the list of ToT of the channels building the cluster.
test_pyathena.parent
parent
Definition: test_pyathena.py:15
ActsTrk::PixelClusteringTool::clusterize
virtual StatusCode clusterize(const EventContext &ctx, const RawDataCollection &RDOs, const InDet::SiDetectorElementStatus &pixelDetElStatus, const InDetDD::SiDetectorElement &element, Acts::Ccl::ClusteringData &data, std::vector< ClusterCollection > &collection) const override
Definition: PixelClusteringTool.cxx:242
PixelCluster.h
PixelID::eta_index
int eta_index(const Identifier &id) const
Definition: PixelID.h:645
PixelChargeCalibCondData::getCalibrationStrategy
CalibrationStrategy getCalibrationStrategy(unsigned int moduleHash) const
Definition: PixelChargeCalibCondData.cxx:254
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
PixelChargeCalibCondData::CalibrationStrategy
CalibrationStrategy
Definition: PixelChargeCalibCondData.h:34
ActsTrk::PixelClusteringTool::makeCluster
StatusCode makeCluster(PixelClusteringTool::Cluster &cluster, const InDetDD::SiDetectorElement *element, const InDetDD::PixelModuleDesign &design, const PixelChargeCalibCondData *calibData, const PixelChargeCalibCondData::CalibrationStrategy calibStrategy, double lorentz_shift, xAOD::PixelCluster &container) const
Definition: PixelClusteringTool.cxx:69
xAOD::PixelCluster_v1::setLVL1A
void setLVL1A(int lvl1a)
Sets the LVL1 accept.
xAOD::xAODInDetMeasurement::Utilities::computeTotalCharge
float computeTotalCharge(const SG::AuxElement &cluster)
Definition: Event/xAOD/xAODInDetMeasurement/Root/Utilities.cxx:9
python.PyKernel.detStore
detStore
Definition: PyKernel.py:41
Utilities.h
InDet::SiDetectorElementStatus::isGood
bool isGood(IdentifierHash hash) const
Definition: SiDetectorElementStatus.h:97
xAOD::PixelCluster_v1::globalPosition
ConstVectorMap< 3 > globalPosition() const
Returns the global position of the pixel cluster.
Definition: PixelCluster_v1.cxx:15
PixelCalibrationConfig.tot
tot
Definition: PixelCalibrationConfig.py:28
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:240
charge
double charge(const T &p)
Definition: AtlasPID.h:997
InDetDD::SiDetectorElement
Definition: SiDetectorElement.h:109
SG::CondHandleKey::initialize
StatusCode initialize(bool used=true)
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
ActsTrk::PixelClusteringTool::makeClusters
virtual StatusCode makeClusters(const EventContext &ctx, typename IPixelClusteringTool::ClusterCollection &clusters, const InDetDD::SiDetectorElement &element, typename ClusterContainer::iterator itrContainer) const override
Definition: PixelClusteringTool.cxx:269
InDetDD::PixelModuleDesign::getReadoutTechnology
PixelReadoutTechnology getReadoutTechnology() const
Definition: PixelModuleDesign.h:391
InDetDD::SiCellId
Definition: SiCellId.h:29
ActsTrk::PixelClusteringTool::isGanged
static std::optional< Identifier > isGanged(const Identifier &rdoID, const InDetDD::SiDetectorElement &element)
Definition: PixelClusteringTool.cxx:365
xAOD::PixelCluster_v1
Definition: PixelCluster_v1.h:17
xAOD::UncalibratedMeasurement_v1::setMeasurement
void setMeasurement(const DetectorIDHashType idHash, MeasVector< N > locPos, MeasMatrix< N > locCov)
Sets IdentifierHash, local position and local covariance of the measurement.
InDetDD::PixelDiodeTree::DiodeProxy
Helper class to access parameters of a diode.
Definition: PixelDiodeTree.h:183
xAOD::PixelCluster_v1::setChannelsInPhiEta
void setChannelsInPhiEta(int channelsInPhi, int channelsInEta)
Sets the dimensions of the cluster in numbers of channels in phi (x) and eta (y) directions.
Definition: PixelCluster_v1.cxx:55
xAOD::phiWidth
phiWidth
Definition: RingSetConf_v1.cxx:606
RunTileMonitoring.clusters
clusters
Definition: RunTileMonitoring.py:133
PixelChargeCalibCondData::getCharge
float getCharge(InDetDD::PixelDiodeType type, unsigned int moduleHash, unsigned int FE, float ToT) const
Definition: PixelChargeCalibCondData.cxx:223
ActsTrk::PixelClusteringTool::m_checkGanged
Gaudi::Property< bool > m_checkGanged
Definition: PixelClusteringTool.h:74
ActsTrk
The AlignStoreProviderAlg loads the rigid alignment corrections and pipes them through the readout ge...
Definition: MdtCalibInput.h:31
ActsTrk::IPixelClusteringTool::ClusterCollection
std::vector< Cluster > ClusterCollection
Definition: Tracking/Acts/ActsToolInterfaces/ActsToolInterfaces/IPixelClusteringTool.h:48
InDetDD::PixelDiodeTree::makeCellIndex
static constexpr std::array< PixelDiodeTree::CellIndexType, 2 > makeCellIndex(T local_x_idx, T local_y_idx)
Create a 2D cell index from the indices in local-x (phi, row) and local-y (eta, column) direction.
Definition: PixelDiodeTree.h:320
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
InDetDD::SiDetectorElement::design
virtual const SiDetectorDesign & design() const override final
access to the local description (inline):
Trk::Surface::transform
const Amg::Transform3D & transform() const
Returns HepGeom::Transform3D by reference.
dq_make_web_display.cl
cl
print [x.__class__ for x in toList(dqregion.getSubRegions()) ]
Definition: dq_make_web_display.py:25
generate::Zero
void Zero(TH1D *hin)
Definition: generate.cxx:32
SG::ReadCondHandle::cptr
const_pointer_type cptr()
Definition: ReadCondHandle.h:67
Identifier
Definition: IdentifierFieldParser.cxx:14