ATLAS Offline Software
MergedPixelsTool.cxx
Go to the documentation of this file.
1 /*
2  copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3 */
4 
6 // MergedPixelsTool.cxx
7 // TheSiSimpleClusteringAlg adapted to implement cluster merging
8 // input from RDOs.
9 //
11 // (c) ATLAS Detector software
13 
15 
24 
27 #include <unordered_set>
28 
30 using CLHEP::micrometer;
31 
32 namespace InDet {
33 
34  // Constructor with parameters:
36  const std::string &name,
37  const IInterface *parent) :
38  base_class(type, name, parent) {}
39 
40 
42  {
43  ATH_CHECK(m_clusterMaker.retrieve());
44  ATH_CHECK(m_pixelRDOTool.retrieve());
47 
48  return StatusCode::SUCCESS;
49  }
50 
51 
53  {
54 
55  ATH_MSG_DEBUG("------------------- Clusterization Statistics ------------------------");
56  ATH_MSG_DEBUG("-- # Processed Pixel Clusters : " << m_processedClusters);
57  ATH_MSG_DEBUG("----------------------------------------------------------------------");
58  return StatusCode::SUCCESS;
59  }
60 
61  //-----------------------------------------------------------------------
62  // Once the lists of RDOs which makes up the clusters have been found by the
63  // clusterize() method, this method is called for each of these lists.
64  // The method computes the local position of the cluster, and create
65  // a "cluster object" with all the required information (including charge
66  // interpolation variables Omegax and Omegay, and whether the cluster
67  // contains ganged pixels)
68  // This method calls the ClusterMakerTool to compute global position and
69  // position errors.
70  // Input parameters are the list of RDOs identifier of the would-be
71  // cluster, the list of TOT values, the module the cluster belongs to,
72  // the pixel helper tool and the number of RDOS of the cluster.
73 
74  PixelCluster MergedPixelsTool::makeCluster (const std::vector<Identifier>& group,
75  const std::vector<int>& totgroup,
76  const std::vector<int>& lvl1group,
77  const InDetDD::SiDetectorElement* element,
78  const PixelID& pixelID,
79  int& clusterNumber,
80  bool split,
81  double splitProb1,
82  double splitProb2,
83  const PixelChargeCalibCondData* calibData,
84  const PixelOfflineCalibData* offlineCalibData,
85  const EventContext& ctx) const
86  {
87  ATH_MSG_VERBOSE("makeCluster called, number " << clusterNumber);
88 
89  const Identifier elementID = element->identify();
90  const InDetDD::PixelModuleDesign* design
91  (dynamic_cast<const InDetDD::PixelModuleDesign*>(&element->design()));
92  if (not design){
93  throw std::runtime_error( "Wrong design at MergedPixelsTool");
94  }
95  int rowMin = int(2*(design->width()/design->phiPitch()))+1;
96  int rowMax = 0;
97  int colMin = int(2*(design->length()/design->etaPitch()))+1;
98  int colMax = 0;
99  int qRowMin = 0; int qRowMax = 0;
100  int qColMin = 0; int qColMax = 0;
101  int lvl1min = 15; // lvl1 of a cluster is the minimum of the lvl1 of the hits
102 
103  InDetDD::SiLocalPosition sumOfPositions(0,0,0);
104  std::vector<Identifier> DVid;
105  DVid.reserve( group.size() );
106  std::vector<Identifier>::const_iterator rdosBegin = group.begin();
107  std::vector<Identifier>::const_iterator rdosEnd = group.end();
108  std::vector<int>::const_iterator tot = totgroup.begin();
109  std::vector<int>::const_iterator lvl1= lvl1group.begin();
110 
111  // Flag to tag clusters with any ganged pixel
112  bool hasGanged = false;
113  for (; rdosBegin!= rdosEnd; ++rdosBegin) {
114  // compute cluster lvl1
115 
116  if ( (*lvl1) < lvl1min ) lvl1min=(*lvl1);
117  ++lvl1;
118  // process identifier
119  const Identifier rId = *rdosBegin;
120  const int row = pixelID.phi_index(rId);
121  const int col = pixelID.eta_index(rId);
122  // flag if cluster contains at least a ganged pixel
123 
124  hasGanged = hasGanged ||
125  m_pixelRDOTool->isGanged(rId, element).has_value();
126  DVid.push_back(rId);
127  InDetDD::SiLocalPosition siLocalPosition
128  (design->positionFromColumnRow(col,row));
129  sumOfPositions += siLocalPosition;
130 
131  // check overflow for IBL
132  int realtot = *tot;
133 
134  if (row == rowMin) qRowMin += realtot;
135  if (row < rowMin) {
136  rowMin = row;
137  qRowMin = realtot;
138  }
139 
140  if (row == rowMax) qRowMax += realtot;
141  if (row > rowMax) {
142  rowMax = row;
143  qRowMax = realtot;
144  }
145 
146  if (col == colMin) qColMin += realtot;
147  if (col < colMin) {
148  colMin = col;
149  qColMin = realtot;
150  }
151 
152  if (col == colMax) qColMax += realtot;
153  if (col > colMax) {
154  colMax = col;
155  qColMax = realtot;
156  }
157  ++tot;
158  }
159 
160  const int numberOfPixels = group.size();
161  InDetDD::SiLocalPosition centroid(sumOfPositions/numberOfPixels);
162  const Identifier id = element->identifierOfPosition(centroid);
163 
164  const int colWidth = colMax-colMin+1;
165  const int rowWidth = rowMax-rowMin+1;
166 
167  // Compute eta for charge interpolation correction (if required)
168  // Two pixels may have tot=0 (very rarely, hopefully)
169  float etaRow = -1;
170  float etaCol = -1;
171  if(qRowMin+qRowMax > 0) etaRow = qRowMax/float(qRowMin+qRowMax);
172  if(qColMin+qColMax > 0) etaCol = qColMax/float(qColMin+qColMax);
173 
174  double etaWidth = design->widthFromColumnRange(colMin, colMax);
175  double phiWidth = design->widthFromRowRange(rowMin, rowMax);
176  SiWidth siWidth(Amg::Vector2D(rowWidth,colWidth), Amg::Vector2D(phiWidth,etaWidth) );
177 
178  // Charge interpolation. Very rough guess (one can do better with
179  // candidate track information later) TL
180  if(m_posStrategy == 1 && !hasGanged && etaRow>0 && etaCol > 0){
181  // width of the region of charge sharing
182  // For disks assume normal incidence: delta is small, due to diffusion
183  // of drifting charges in silicon
184  // For barrel, assume 10 deg. incidence in Rphi, in z compute from
185  // pseudorapidity
186  // this may be improved with better parameterization, but it is
187  // probably better to use candidate track information later in
188  // reconstruction. TL
189  // Values are made dependent on the sensor thickness to accomodate
190  // different sensors layout. AA
191  float deltax = 0;
192  float deltay = 0;
193  const float sensorThickness = element->thickness();
194  Amg::Vector3D globalPos = element->globalPosition(centroid);
195  InDetDD::SiLocalPosition totCorrection(0,0,0);
196  if(pixelID.is_barrel(elementID)) {
197  deltax = 30*micrometer*(sensorThickness/(250*micrometer));
198  deltay = sensorThickness*std::abs(globalPos.z())/globalPos.perp();
199  if(deltay > (design->etaPitch()) ) deltay = design->etaPitch();
200  } else {
201  deltax = 10*micrometer*std::sqrt(sensorThickness/(250*micrometer));
202  deltay = 10*micrometer*std::sqrt(sensorThickness/(250*micrometer));
203  }
204  InDetDD::SiLocalPosition pos1 = design->positionFromColumnRow(colMin,rowMin);
205  InDetDD::SiLocalPosition pos2 = design->positionFromColumnRow(colMax,rowMin);
206  InDetDD::SiLocalPosition pos3 = design->positionFromColumnRow(colMin,rowMax);
207  InDetDD::SiLocalPosition pos4 = design->positionFromColumnRow(colMax,rowMax);
208  centroid = 0.25*(pos1+pos2+pos3+pos4)+
209  InDetDD::SiLocalPosition(deltay*(etaCol-0.5),deltax*(etaRow-0.5),0.);
210  ATH_MSG_VERBOSE("Barrel cluster with global position r= " << globalPos.perp() << " and z = " << globalPos.z());
211  ATH_MSG_VERBOSE("deltax = " << deltax << " deltay = " << deltay);
212 
213  }
214  if(m_posStrategy == 10 && !hasGanged && etaRow>0 && etaCol > 0){
215  // recFlag == 10 (CTB simulation)
216  // use parametrization studied on CTB data by I. Reisinger (Dortmund)
217  if (m_printw) {
218  ATH_MSG_ERROR("Detected position strategy = 10, this is an obsolete setting for CTB analysis and is not supported anymore since Athena 15.4.0");
219  ATH_MSG_ERROR("...reverting to default setting: position strategy = 0");
220  m_printw=false;
221  }
222  }
223  // Endcap SR1 Cosmics
224  if(m_posStrategy == 20 && !hasGanged && etaRow>0 && etaCol > 0){
225  ATH_MSG_VERBOSE("Endcap cosmics simulation");
226  const double deltax = 35*micrometer;
227  const double deltay = 35*micrometer;
229  design->positionFromColumnRow(colMin,rowMin);
231  design->positionFromColumnRow(colMax,rowMin);
233  design->positionFromColumnRow(colMin,rowMax);
235  design->positionFromColumnRow(colMax,rowMax);
236  centroid = 0.25*(pos1+pos2+pos3+pos4)+
237  InDetDD::SiLocalPosition(deltay*(etaCol-0.5),
238  deltax*(etaRow-0.5),0.);
239  }
240 
241 
242  Amg::Vector2D position(centroid.xPhi(),centroid.xEta());
243 
244  ATH_MSG_VERBOSE("Cluster ID =" << id);
245  ATH_MSG_VERBOSE("Cluster width (eta x phi) = " << colWidth
246  << " x " << rowWidth);
247  ATH_MSG_VERBOSE("Cluster width (eta x phi) = " << etaWidth
248  << " x " << phiWidth);
249  ATH_MSG_VERBOSE("Cluster local position (eta,phi) = "
250  << (position)[0] << " "
251  << (position)[1]);
252 
253  if (!m_clusterMaker) {
254  return PixelCluster(id, position, std::move(DVid), lvl1min,
255  std::vector<int>(totgroup), siWidth, element,
256  Amg::MatrixX{});
257  } else {
258  return m_clusterMaker->pixelCluster(
259  id, position, std::move(DVid), lvl1min, std::vector<int>(totgroup),
260  siWidth, element, hasGanged, m_errorStrategy, pixelID, split,
261  splitProb1, splitProb2, calibData, offlineCalibData,ctx);
262  }
263  }
264 
265  //-----------------------------------------------------------------------
266  // Runs for every pixel module (with non-empty RDO collection...).
267  // It clusters together the RDOs with a pixell cell side in common
268  // using connected component analysis based on four-cell
269  // or eight-cell (if m_addCorners == true) connectivity
271  const InDetRawDataCollection<PixelRDORawData>& collection,
272  const PixelID& pixelID,
273  DataPool<PixelCluster>* dataItemsPool,
274  const EventContext& ctx) const {
275 
276  const InDetDD::SiDetectorElement* element = m_pixelRDOTool->checkCollection(collection, ctx);
277  if (element == nullptr){
278  return nullptr;
279  }
280 
281  std::vector<UnpackedPixelRDO> collectionID =
282  m_pixelRDOTool->getUnpackedPixelRDOs(collection, pixelID, element, ctx);
283 
284  // Sort pixels in ascending columns order
285  //
286  if(collectionID.empty()) return nullptr;
287  if(collectionID.size() > 1) std::sort(collectionID.begin(),collectionID.end(),pixel_less);
288 
289  // initialize the networks
290  //
291  std::vector<network> connections(collectionID.size());
292 
293  // Network production
294  //
295  int collectionSize = collectionID.size();
296  // the maximum number of elements to save can be either 2 or 3
297  // m_addCorners == true requires saving the bottom (or top), the side and the corner connection for each pixel,
298  // otherwise you only save bottom (or top) and the side
299  int maxElements = m_addCorners ? 3 : 2;
300 
301  // start looping on the pixels
302  // for each pixel you build the network connection accordingly to the 4- or 8-cells connections
303  for(int currentPixel = 0; currentPixel!=collectionSize-1; ++currentPixel) {
304  int NB = 0;
305  int row = collectionID.at(currentPixel).ROW;
306  int col = collectionID.at(currentPixel).COL;
307  //
308  auto & currentConnection = connections.at(currentPixel);
309  for(int otherPixel = currentPixel+1; otherPixel!=collectionSize; ++otherPixel) {
310  auto & otherConnection = connections.at(otherPixel);
311  int deltaCol = std::abs(collectionID.at(otherPixel).COL - col);
312  int deltaRow = std::abs(collectionID.at(otherPixel).ROW - row);
313  // break if you are too far way in columns, as these ones will be taken in the next iterations
314  if( deltaCol > 1) {
315  break;
316  }
317  // if you need the corners, you jump the next rows, as these ones will be taken in the next iterations
318  if ( m_addCorners and deltaRow > 1 ) {
319  continue;
320  }
321 
322  // Two default cases are considered:
323  // 1) top/bottom connection (deltaCol=1 and deltaRow=0)
324  // 2) side connection (deltaCol=0 and deltaRow=1)
325  // In both cases the satisfied condition is:
326  // deltaRow+deltaCol = 1
327  //
328  // As an optional case (true by defaul) we save also add a corner connection:
329  // 3) corner connection (deltaCol=1 and deltaRow=1)
330 
331  // this builds the single pixel connection and breaks if the max number of elements is reached:
332  if( (deltaCol+deltaRow) == 1 or (m_addCorners and deltaCol == 1 and deltaRow == 1) ) {
333  int NC1 = currentConnection.NC;
334  int NC2 = otherConnection.NC;
335  int maxPossible = currentConnection.CON.size() - 1; //both are the same
336  if ((NC1>maxPossible) or (NC2>maxPossible)){
337  std::string m="attempt to access connection array of dimension 8 at idx "+std::to_string(currentConnection.NC);
339  break;
340  } else {
341  currentConnection.CON.at(currentConnection.NC++) = otherPixel;
342  otherConnection.CON.at(otherConnection.NC++) = currentPixel ;
343  }
344  if(++NB==maxElements) {
345  break;
346  }
347  }
348  }
349  }
350 
351  // Pixels clusterization
352  //
353  // Once the connections are built, the pixel clusterisation can start grouping together pixels
354  int Ncluster = 0;
355  for(int currentPixel=0; currentPixel!=collectionSize; ++currentPixel) {
356  if(collectionID.at(currentPixel).NCL < 0) {
357  collectionID.at(currentPixel).NCL = Ncluster;
358  addClusterNumber(currentPixel,Ncluster,connections,collectionID);
359  ++Ncluster;
360  }
361  }
362 
363  // Clusters sort in Ncluster order
364  //
365  if(--collectionSize > 1) {
366  for(int i(1); i<collectionSize; ++i ) {
367  UnpackedPixelRDO U = collectionID.at(i+1);
368 
369  int j(i);
370  while(collectionID.at(j).NCL > U.NCL) {
371  collectionID.at(j+1)=collectionID.at(j);
372  --j;
373  }
374  collectionID.at(j+1)=U;
375  }
376  }
377 
378  // Make a new pixel cluster collection
379  //
380  const Identifier elementID = collection.identify();
381  const IdentifierHash idHash = collection.identifyHash();
382  PixelClusterCollection *clusterCollection = new PixelClusterCollection(idHash);
383  if(dataItemsPool){
384  clusterCollection->clear(SG::VIEW_ELEMENTS);
385  }
386  clusterCollection->setIdentifier(elementID);
387  clusterCollection->reserve(Ncluster);
388 
389  std::vector<Identifier> DVid = {collectionID.at(0).ID };
390  std::vector<int> Totg = {collectionID.at(0).TOT};
391  std::vector<int> Lvl1 = {collectionID.at(0).LVL1};
392 
393  int clusterNumber = 0;
394  int NCL0 = 0;
395 
396  DVid.reserve(collectionID.back().NCL);
397  Totg.reserve(collectionID.back().NCL);
398  Lvl1.reserve(collectionID.back().NCL);
399 
400  ++collectionSize;
401 
402  //retrieve conddata
403  const PixelChargeCalibCondData *calibData = nullptr;
404  if (!m_chargeDataKey.empty()) {
406  calibData = *calibDataHandle;
407  }
408 
409  const PixelCalib::PixelOfflineCalibData *offlineCalibData = nullptr;
410  if (!m_clusterErrorKey.empty()) {
412  offlineCalibData = *offlineCalibDataHandle;
413  }
414 
415  for(int i=1; i<=collectionSize; ++i) {
416  if(i!=collectionSize and collectionID.at(i).NCL==NCL0) {
417  DVid.push_back(collectionID.at(i).ID );
418  Totg.push_back(collectionID.at(i).TOT);
419  Lvl1.push_back(collectionID.at(i).LVL1);
420 
421  } else {
422  // Cluster production
423  // no merging has been done;
425  PixelCluster* cluster = nullptr;
426  if (dataItemsPool) {
427  // data Item pool owns the element. The collection
428  // is view. Just move assign to it.
429  cluster = dataItemsPool->nextElementPtr();
430  (*cluster) =
431  makeCluster(DVid, Totg, Lvl1, element, pixelID, ++clusterNumber,
432  false, 0.0, 0.0, calibData, offlineCalibData,ctx);
433  } else {
434  // collection will own the element release
435  cluster = new PixelCluster();
436  (*cluster) =
437  makeCluster(DVid, Totg, Lvl1, element, pixelID, ++clusterNumber,
438  false, 0.0, 0.0, calibData, offlineCalibData,ctx);
439  }
440  // statistics output
441  cluster->setHashAndIndex(clusterCollection->identifyHash(),
442  clusterCollection->size());
443  clusterCollection->push_back(cluster);
444 
445  // Preparation for next cluster
446  if (i!=collectionSize) {
447  NCL0 = collectionID.at(i).NCL ;
448  DVid.clear(); DVid = {collectionID.at(i).ID };
449  Totg.clear(); Totg = {collectionID.at(i).TOT};
450  Lvl1.clear(); Lvl1 = {collectionID.at(i).LVL1};
451  }
452  }
453  }
454 
455  return clusterCollection;
456  }
457 
459  const int& Ncluster,
460  const std::vector<network>& connections,
461  std::vector<UnpackedPixelRDO>& collectionID) const {
462  for(int i=0; i!=connections.at(r).NC; ++i) {
463  const int k = connections.at(r).CON.at(i);
464  if(collectionID.at(k).NCL < 0) {
465  collectionID.at(k).NCL = Ncluster;
466  addClusterNumber(k, Ncluster, connections, collectionID);
467  }
468  }
469  }
470 }
PixelID.h
This is an Identifier helper class for the Pixel subdetector. This class is a factory for creating co...
InDetDD::SolidStateDetectorElementBase::identifierOfPosition
Identifier identifierOfPosition(const Amg::Vector2D &localPos) const
Full identifier of the cell for a given position: assumes a raw local position (no Lorentz shift)
Definition: SolidStateDetectorElementBase.cxx:217
query_example.row
row
Definition: query_example.py:24
beamspotman.r
def r
Definition: beamspotman.py:676
InDet::MergedPixelsTool::m_addCorners
BooleanProperty m_addCorners
Definition: MergedPixelsTool.h:118
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
python.SystemOfUnits.m
int m
Definition: SystemOfUnits.py:91
SG::ReadCondHandle
Definition: ReadCondHandle.h:44
InDetDD::PixelModuleDesign
Definition: PixelModuleDesign.h:48
CaloCellPos2Ntuple.int
int
Definition: CaloCellPos2Ntuple.py:24
SG::VIEW_ELEMENTS
@ VIEW_ELEMENTS
this data object is a view, it does not own its elmts
Definition: OwnershipPolicy.h:18
PixelCluster.h
Amg::Vector2D
Eigen::Matrix< double, 2, 1 > Vector2D
Definition: GeoPrimitives.h:48
InDet::MergedPixelsTool::m_clusterErrorKey
SG::ReadCondHandleKey< PixelCalib::PixelOfflineCalibData > m_clusterErrorKey
Definition: MergedPixelsTool.h:124
InDet
Primary Vertex Finder.
Definition: VP1ErrorUtils.h:36
InDet::MergedPixelsTool::m_chargeDataKey
SG::ReadCondHandleKey< PixelChargeCalibCondData > m_chargeDataKey
Definition: MergedPixelsTool.h:123
InDet::MergedPixelsTool::clusterize
virtual PixelClusterCollection * clusterize(const InDetRawDataCollection< PixelRDORawData > &RDOs, const PixelID &pixelID, DataPool< PixelCluster > *dataItemsPool, const EventContext &ctx) const override
Definition: MergedPixelsTool.cxx:270
InDetRawDataCollection::identify
virtual Identifier identify() const override final
InDet::MergedPixelsTool::m_errorStrategy
IntegerProperty m_errorStrategy
Definition: MergedPixelsTool.h:128
TRT_PAI_gasdata::NC
const int NC
Number of levels for Carbon.
Definition: TRT_PAI_gasdata.h:237
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
SG::VarHandleKey::empty
bool empty() const
Test if the key is blank.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:150
InDet::MergedPixelsTool::m_clusterMaker
ToolHandle< ClusterMakerTool > m_clusterMaker
Definition: MergedPixelsTool.h:120
InDetRawDataCollection::identifyHash
virtual IdentifierHash identifyHash() const override final
InDetDD::SiLocalPosition
Definition: SiLocalPosition.h:31
GeoPrimitives.h
InDet::pixel_less
const auto pixel_less
Definition: MergedPixelsTool.h:50
DataPool::nextElementPtr
pointer nextElementPtr()
obtain the next available element in pool by pointer pool is resized if its limit has been reached On...
PixelID::is_barrel
bool is_barrel(const Identifier &id) const
Test for barrel - WARNING: id MUST be pixel id, otherwise answer is not accurate. Use SiliconID for g...
Definition: PixelID.h:605
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
ClusterMakerTool.h
lumiFormat.i
int i
Definition: lumiFormat.py:85
InDetDD::SolidStateDetectorElementBase::thickness
double thickness() const
Trk::PrepRawData::setHashAndIndex
void setHashAndIndex(unsigned short collHash, unsigned short objIndex)
TEMP for testing: might make some classes friends later ...
PixelCalib::PixelOfflineCalibData
Definition: PixelOfflineCalibData.h:31
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
PixelChargeCalibCondData
Definition: PixelChargeCalibCondData.h:24
InDetRawDataCollection
Definition: InDetRawDataCollection.h:31
test_pyathena.parent
parent
Definition: test_pyathena.py:15
InDet::MergedPixelsTool::initialize
virtual StatusCode initialize() override
Retrieve the necessary services in initialize
Definition: MergedPixelsTool.cxx:41
PixelID::eta_index
int eta_index(const Identifier &id) const
Definition: PixelID.h:664
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
InDet::MergedPixelsTool::MergedPixelsTool
MergedPixelsTool()
python.SystemOfUnits.micrometer
int micrometer
Definition: SystemOfUnits.py:71
SiLocalPosition.h
InDet::MergedPixelsTool::finalize
virtual StatusCode finalize() override
Statistics output
Definition: MergedPixelsTool.cxx:52
EventPrimitives.h
InDet::MergedPixelsTool::m_printw
std::atomic_bool m_printw
Definition: MergedPixelsTool.h:131
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:228
ActsTrk::to_string
std::string to_string(const DetectorType &type)
Definition: GeometryDefs.h:34
IdentifierHash.h
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
query_example.col
col
Definition: query_example.py:7
SiDetectorElement.h
InDet::PixelCluster
Definition: InnerDetector/InDetRecEvent/InDetPrepRawData/InDetPrepRawData/PixelCluster.h:49
CaloLCW_tf.group
group
Definition: CaloLCW_tf.py:28
InDet::UnpackedPixelRDO
Definition: PixelRDOTool.h:31
InDet::MergedPixelsTool::m_posStrategy
IntegerProperty m_posStrategy
Definition: MergedPixelsTool.h:127
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
PixelModuleDesign.h
InDetDD::SolidStateDetectorElementBase::globalPosition
HepGeom::Point3D< double > globalPosition(const HepGeom::Point3D< double > &localPos) const
transform a reconstruction local position into a global position (inline):
python.CaloScaleNoiseConfig.type
type
Definition: CaloScaleNoiseConfig.py:78
InDet::UnpackedPixelRDO::NCL
int NCL
Definition: PixelRDOTool.h:35
xAOD::phiWidth
phiWidth
Definition: RingSetConf_v1.cxx:612
InDet::SiWidth
Definition: SiWidth.h:25
DataPool
a typed memory pool that saves time spent allocation small object. This is typically used by containe...
Definition: DataPool.h:63
MergedPixelsTool.h
InDet::MergedPixelsTool::makeCluster
PixelCluster makeCluster(const std::vector< Identifier > &group, const std::vector< int > &totgroup, const std::vector< int > &lvl1group, const InDetDD::SiDetectorElement *element, const PixelID &pixelID, int &clusterNumber, bool split, double splitProb1, double splitProb2, const PixelChargeCalibCondData *calibData, const PixelCalib::PixelOfflineCalibData *offlineCalibData, const EventContext &ctx) const
Definition: MergedPixelsTool.cxx:74
InDet::MergedPixelsTool::m_pixelRDOTool
ToolHandle< PixelRDOTool > m_pixelRDOTool
Definition: MergedPixelsTool.h:121
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):
PixelID
Definition: PixelID.h:67
SG::AllowEmpty
@ AllowEmpty
Definition: StoreGate/StoreGate/VarHandleKey.h:30
readCCLHist.float
float
Definition: readCCLHist.py:83
Trk::split
@ split
Definition: LayerMaterialProperties.h:38
InDetDD::SolidStateDetectorElementBase::identify
virtual Identifier identify() const override final
identifier of this detector element (inline)
InDet::MergedPixelsTool::m_processedClusters
std::atomic_uint m_processedClusters
statistics output
Definition: MergedPixelsTool.h:130
InDet::MergedPixelsTool::addClusterNumber
void addClusterNumber(const int &r, const int &Ncluster, const std::vector< network > &connections, std::vector< UnpackedPixelRDO > &collectionID) const
Definition: MergedPixelsTool.cxx:458
InDet::PixelClusterCollection
Trk::PrepRawDataCollection< PixelCluster > PixelClusterCollection
Definition: PixelClusterCollection.h:26
NSWL1::centroid
Vertex centroid(const Polygon &p)
Definition: GeoUtils.cxx:59
fitman.k
k
Definition: fitman.py:528
Identifier
Definition: IdentifierFieldParser.cxx:14