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) const
85  {
86  ATH_MSG_VERBOSE("makeCluster called, number " << clusterNumber);
87 
88  const Identifier elementID = element->identify();
89  const InDetDD::PixelModuleDesign* design
90  (dynamic_cast<const InDetDD::PixelModuleDesign*>(&element->design()));
91  if (not design){
92  throw std::runtime_error( "Wrong design at MergedPixelsTool");
93  }
94  int rowMin = int(2*(design->width()/design->phiPitch()))+1;
95  int rowMax = 0;
96  int colMin = int(2*(design->length()/design->etaPitch()))+1;
97  int colMax = 0;
98  int qRowMin = 0; int qRowMax = 0;
99  int qColMin = 0; int qColMax = 0;
100  int lvl1min = 15; // lvl1 of a cluster is the minimum of the lvl1 of the hits
101 
102  InDetDD::SiLocalPosition sumOfPositions(0,0,0);
103  std::vector<Identifier> DVid;
104  DVid.reserve( group.size() );
105  std::vector<Identifier>::const_iterator rdosBegin = group.begin();
106  std::vector<Identifier>::const_iterator rdosEnd = group.end();
107  std::vector<int>::const_iterator tot = totgroup.begin();
108  std::vector<int>::const_iterator lvl1= lvl1group.begin();
109 
110  // Flag to tag clusters with any ganged pixel
111  bool hasGanged = false;
112  for (; rdosBegin!= rdosEnd; ++rdosBegin) {
113  // compute cluster lvl1
114 
115  if ( (*lvl1) < lvl1min ) lvl1min=(*lvl1);
116  ++lvl1;
117  // process identifier
118  const Identifier rId = *rdosBegin;
119  const int row = pixelID.phi_index(rId);
120  const int col = pixelID.eta_index(rId);
121  // flag if cluster contains at least a ganged pixel
122 
123  hasGanged = hasGanged ||
124  m_pixelRDOTool->isGanged(rId, element).has_value();
125  DVid.push_back(rId);
126  InDetDD::SiLocalPosition siLocalPosition
127  (design->positionFromColumnRow(col,row));
128  sumOfPositions += siLocalPosition;
129 
130  // check overflow for IBL
131  int realtot = *tot;
132 
133  if (row == rowMin) qRowMin += realtot;
134  if (row < rowMin) {
135  rowMin = row;
136  qRowMin = realtot;
137  }
138 
139  if (row == rowMax) qRowMax += realtot;
140  if (row > rowMax) {
141  rowMax = row;
142  qRowMax = realtot;
143  }
144 
145  if (col == colMin) qColMin += realtot;
146  if (col < colMin) {
147  colMin = col;
148  qColMin = realtot;
149  }
150 
151  if (col == colMax) qColMax += realtot;
152  if (col > colMax) {
153  colMax = col;
154  qColMax = realtot;
155  }
156  ++tot;
157  }
158 
159  const int numberOfPixels = group.size();
160  InDetDD::SiLocalPosition centroid(sumOfPositions/numberOfPixels);
161  const Identifier id = element->identifierOfPosition(centroid);
162 
163  const int colWidth = colMax-colMin+1;
164  const int rowWidth = rowMax-rowMin+1;
165 
166  // Compute eta for charge interpolation correction (if required)
167  // Two pixels may have tot=0 (very rarely, hopefully)
168  float etaRow = -1;
169  float etaCol = -1;
170  if(qRowMin+qRowMax > 0) etaRow = qRowMax/float(qRowMin+qRowMax);
171  if(qColMin+qColMax > 0) etaCol = qColMax/float(qColMin+qColMax);
172 
173  double etaWidth = design->widthFromColumnRange(colMin, colMax);
174  double phiWidth = design->widthFromRowRange(rowMin, rowMax);
175  SiWidth siWidth(Amg::Vector2D(rowWidth,colWidth), Amg::Vector2D(phiWidth,etaWidth) );
176 
177  // Charge interpolation. Very rough guess (one can do better with
178  // candidate track information later) TL
179  if(m_posStrategy == 1 && !hasGanged && etaRow>0 && etaCol > 0){
180  // width of the region of charge sharing
181  // For disks assume normal incidence: delta is small, due to diffusion
182  // of drifting charges in silicon
183  // For barrel, assume 10 deg. incidence in Rphi, in z compute from
184  // pseudorapidity
185  // this may be improved with better parameterization, but it is
186  // probably better to use candidate track information later in
187  // reconstruction. TL
188  // Values are made dependent on the sensor thickness to accomodate
189  // different sensors layout. AA
190  float deltax = 0;
191  float deltay = 0;
192  const float sensorThickness = element->thickness();
193  Amg::Vector3D globalPos = element->globalPosition(centroid);
194  InDetDD::SiLocalPosition totCorrection(0,0,0);
195  if(pixelID.is_barrel(elementID)) {
196  deltax = 30*micrometer*(sensorThickness/(250*micrometer));
197  deltay = sensorThickness*std::abs(globalPos.z())/globalPos.perp();
198  if(deltay > (design->etaPitch()) ) deltay = design->etaPitch();
199  } else {
200  deltax = 10*micrometer*std::sqrt(sensorThickness/(250*micrometer));
201  deltay = 10*micrometer*std::sqrt(sensorThickness/(250*micrometer));
202  }
203  InDetDD::SiLocalPosition pos1 = design->positionFromColumnRow(colMin,rowMin);
204  InDetDD::SiLocalPosition pos2 = design->positionFromColumnRow(colMax,rowMin);
205  InDetDD::SiLocalPosition pos3 = design->positionFromColumnRow(colMin,rowMax);
206  InDetDD::SiLocalPosition pos4 = design->positionFromColumnRow(colMax,rowMax);
207  centroid = 0.25*(pos1+pos2+pos3+pos4)+
208  InDetDD::SiLocalPosition(deltay*(etaCol-0.5),deltax*(etaRow-0.5),0.);
209  ATH_MSG_VERBOSE("Barrel cluster with global position r= " << globalPos.perp() << " and z = " << globalPos.z());
210  ATH_MSG_VERBOSE("deltax = " << deltax << " deltay = " << deltay);
211 
212  }
213  if(m_posStrategy == 10 && !hasGanged && etaRow>0 && etaCol > 0){
214  // recFlag == 10 (CTB simulation)
215  // use parametrization studied on CTB data by I. Reisinger (Dortmund)
216  if (m_printw) {
217  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");
218  ATH_MSG_ERROR("...reverting to default setting: position strategy = 0");
219  m_printw=false;
220  }
221  }
222  // Endcap SR1 Cosmics
223  if(m_posStrategy == 20 && !hasGanged && etaRow>0 && etaCol > 0){
224  ATH_MSG_VERBOSE("Endcap cosmics simulation");
225  const double deltax = 35*micrometer;
226  const double deltay = 35*micrometer;
228  design->positionFromColumnRow(colMin,rowMin);
230  design->positionFromColumnRow(colMax,rowMin);
232  design->positionFromColumnRow(colMin,rowMax);
234  design->positionFromColumnRow(colMax,rowMax);
235  centroid = 0.25*(pos1+pos2+pos3+pos4)+
236  InDetDD::SiLocalPosition(deltay*(etaCol-0.5),
237  deltax*(etaRow-0.5),0.);
238  }
239 
240 
241  Amg::Vector2D position(centroid.xPhi(),centroid.xEta());
242 
243  ATH_MSG_VERBOSE("Cluster ID =" << id);
244  ATH_MSG_VERBOSE("Cluster width (eta x phi) = " << colWidth
245  << " x " << rowWidth);
246  ATH_MSG_VERBOSE("Cluster width (eta x phi) = " << etaWidth
247  << " x " << phiWidth);
248  ATH_MSG_VERBOSE("Cluster local position (eta,phi) = "
249  << (position)[0] << " "
250  << (position)[1]);
251 
252  if (!m_clusterMaker) {
253  return PixelCluster(id, position, std::move(DVid), lvl1min,
254  std::vector<int>(totgroup), siWidth, element,
255  Amg::MatrixX{});
256  } else {
257  return m_clusterMaker->pixelCluster(
258  id, position, std::move(DVid), lvl1min, std::vector<int>(totgroup),
259  siWidth, element, hasGanged, m_errorStrategy, pixelID, split,
260  splitProb1, splitProb2, calibData, offlineCalibData);
261  }
262  }
263 
264  //-----------------------------------------------------------------------
265  // Runs for every pixel module (with non-empty RDO collection...).
266  // It clusters together the RDOs with a pixell cell side in common
267  // using connected component analysis based on four-cell
268  // or eight-cell (if m_addCorners == true) connectivity
270  const InDetRawDataCollection<PixelRDORawData>& collection,
271  const PixelID& pixelID,
272  DataPool<PixelCluster>* dataItemsPool,
273  const EventContext& ctx) const {
274 
275  const InDetDD::SiDetectorElement* element = m_pixelRDOTool->checkCollection(collection, ctx);
276  if (element == nullptr){
277  return nullptr;
278  }
279 
280  std::vector<UnpackedPixelRDO> collectionID =
281  m_pixelRDOTool->getUnpackedPixelRDOs(collection, pixelID, element, ctx);
282 
283  // Sort pixels in ascending columns order
284  //
285  if(collectionID.empty()) return nullptr;
286  if(collectionID.size() > 1) std::sort(collectionID.begin(),collectionID.end(),pixel_less);
287 
288  // initialize the networks
289  //
290  std::vector<network> connections(collectionID.size());
291 
292  // Network production
293  //
294  int collectionSize = collectionID.size();
295  // the maximum number of elements to save can be either 2 or 3
296  // m_addCorners == true requires saving the bottom (or top), the side and the corner connection for each pixel,
297  // otherwise you only save bottom (or top) and the side
298  int maxElements = m_addCorners ? 3 : 2;
299 
300  // start looping on the pixels
301  // for each pixel you build the network connection accordingly to the 4- or 8-cells connections
302  for(int currentPixel = 0; currentPixel!=collectionSize-1; ++currentPixel) {
303  int NB = 0;
304  int row = collectionID.at(currentPixel).ROW;
305  int col = collectionID.at(currentPixel).COL;
306  //
307  auto & currentConnection = connections.at(currentPixel);
308  for(int otherPixel = currentPixel+1; otherPixel!=collectionSize; ++otherPixel) {
309  auto & otherConnection = connections.at(otherPixel);
310  int deltaCol = std::abs(collectionID.at(otherPixel).COL - col);
311  int deltaRow = std::abs(collectionID.at(otherPixel).ROW - row);
312  // break if you are too far way in columns, as these ones will be taken in the next iterations
313  if( deltaCol > 1) {
314  break;
315  }
316  // if you need the corners, you jump the next rows, as these ones will be taken in the next iterations
317  if ( m_addCorners and deltaRow > 1 ) {
318  continue;
319  }
320 
321  // Two default cases are considered:
322  // 1) top/bottom connection (deltaCol=1 and deltaRow=0)
323  // 2) side connection (deltaCol=0 and deltaRow=1)
324  // In both cases the satisfied condition is:
325  // deltaRow+deltaCol = 1
326  //
327  // As an optional case (true by defaul) we save also add a corner connection:
328  // 3) corner connection (deltaCol=1 and deltaRow=1)
329 
330  // this builds the single pixel connection and breaks if the max number of elements is reached:
331  if( (deltaCol+deltaRow) == 1 or (m_addCorners and deltaCol == 1 and deltaRow == 1) ) {
332  int NC1 = currentConnection.NC;
333  int NC2 = otherConnection.NC;
334  int maxPossible = currentConnection.CON.size() - 1; //both are the same
335  if ((NC1>maxPossible) or (NC2>maxPossible)){
336  std::string m="attempt to access connection array of dimension 8 at idx "+std::to_string(currentConnection.NC);
338  break;
339  } else {
340  currentConnection.CON.at(currentConnection.NC++) = otherPixel;
341  otherConnection.CON.at(otherConnection.NC++) = currentPixel ;
342  }
343  if(++NB==maxElements) {
344  break;
345  }
346  }
347  }
348  }
349 
350  // Pixels clusterization
351  //
352  // Once the connections are built, the pixel clusterisation can start grouping together pixels
353  int Ncluster = 0;
354  for(int currentPixel=0; currentPixel!=collectionSize; ++currentPixel) {
355  if(collectionID.at(currentPixel).NCL < 0) {
356  collectionID.at(currentPixel).NCL = Ncluster;
357  addClusterNumber(currentPixel,Ncluster,connections,collectionID);
358  ++Ncluster;
359  }
360  }
361 
362  // Clusters sort in Ncluster order
363  //
364  if(--collectionSize > 1) {
365  for(int i(1); i<collectionSize; ++i ) {
366  UnpackedPixelRDO U = collectionID.at(i+1);
367 
368  int j(i);
369  while(collectionID.at(j).NCL > U.NCL) {
370  collectionID.at(j+1)=collectionID.at(j);
371  --j;
372  }
373  collectionID.at(j+1)=U;
374  }
375  }
376 
377  // Make a new pixel cluster collection
378  //
379  const Identifier elementID = collection.identify();
380  const IdentifierHash idHash = collection.identifyHash();
381  PixelClusterCollection *clusterCollection = new PixelClusterCollection(idHash);
382  if(dataItemsPool){
383  clusterCollection->clear(SG::VIEW_ELEMENTS);
384  }
385  clusterCollection->setIdentifier(elementID);
386  clusterCollection->reserve(Ncluster);
387 
388  std::vector<Identifier> DVid = {collectionID.at(0).ID };
389  std::vector<int> Totg = {collectionID.at(0).TOT};
390  std::vector<int> Lvl1 = {collectionID.at(0).LVL1};
391 
392  int clusterNumber = 0;
393  int NCL0 = 0;
394 
395  DVid.reserve(collectionID.back().NCL);
396  Totg.reserve(collectionID.back().NCL);
397  Lvl1.reserve(collectionID.back().NCL);
398 
399  ++collectionSize;
400 
401  //retrieve conddata
402  const PixelChargeCalibCondData *calibData = nullptr;
403  if (!m_chargeDataKey.empty()) {
405  calibData = *calibDataHandle;
406  }
407 
408  const PixelCalib::PixelOfflineCalibData *offlineCalibData = nullptr;
409  if (!m_clusterErrorKey.empty()) {
411  offlineCalibData = *offlineCalibDataHandle;
412  }
413 
414  for(int i=1; i<=collectionSize; ++i) {
415  if(i!=collectionSize and collectionID.at(i).NCL==NCL0) {
416  DVid.push_back(collectionID.at(i).ID );
417  Totg.push_back(collectionID.at(i).TOT);
418  Lvl1.push_back(collectionID.at(i).LVL1);
419 
420  } else {
421  // Cluster production
422  // no merging has been done;
424  PixelCluster* cluster = nullptr;
425  if (dataItemsPool) {
426  // data Item pool owns the element. The collection
427  // is view. Just move assign to it.
428  cluster = dataItemsPool->nextElementPtr();
429  (*cluster) =
430  makeCluster(DVid, Totg, Lvl1, element, pixelID, ++clusterNumber,
431  false, 0.0, 0.0, calibData, offlineCalibData);
432  } else {
433  // collection will own the element release
434  cluster = new PixelCluster();
435  (*cluster) =
436  makeCluster(DVid, Totg, Lvl1, element, pixelID, ++clusterNumber,
437  false, 0.0, 0.0, calibData, offlineCalibData);
438  }
439  // statistics output
440  cluster->setHashAndIndex(clusterCollection->identifyHash(),
441  clusterCollection->size());
442  clusterCollection->push_back(cluster);
443 
444  // Preparation for next cluster
445  if (i!=collectionSize) {
446  NCL0 = collectionID.at(i).NCL ;
447  DVid.clear(); DVid = {collectionID.at(i).ID };
448  Totg.clear(); Totg = {collectionID.at(i).TOT};
449  Lvl1.clear(); Lvl1 = {collectionID.at(i).LVL1};
450  }
451  }
452  }
453 
454  return clusterCollection;
455  }
456 
458  const int& Ncluster,
459  const std::vector<network>& connections,
460  std::vector<UnpackedPixelRDO>& collectionID) const {
461  for(int i=0; i!=connections.at(r).NC; ++i) {
462  const int k = connections.at(r).CON.at(i);
463  if(collectionID.at(k).NCL < 0) {
464  collectionID.at(k).NCL = Ncluster;
465  addClusterNumber(k, Ncluster, connections, collectionID);
466  }
467  }
468  }
469 }
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:117
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.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:123
InDet
DUMMY Primary Vertex Finder.
Definition: VP1ErrorUtils.h:36
InDet::MergedPixelsTool::m_chargeDataKey
SG::ReadCondHandleKey< PixelChargeCalibCondData > m_chargeDataKey
Definition: MergedPixelsTool.h:122
InDet::MergedPixelsTool::clusterize
virtual PixelClusterCollection * clusterize(const InDetRawDataCollection< PixelRDORawData > &RDOs, const PixelID &pixelID, DataPool< PixelCluster > *dataItemsPool, const EventContext &ctx) const override
Definition: MergedPixelsTool.cxx:269
InDetRawDataCollection::identify
virtual Identifier identify() const override final
InDet::MergedPixelsTool::m_errorStrategy
IntegerProperty m_errorStrategy
Definition: MergedPixelsTool.h:127
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:119
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
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:92
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 ...
Identifier
Definition: DetectorDescription/Identifier/Identifier/Identifier.h:32
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::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
Definition: MergedPixelsTool.cxx:74
InDet::MergedPixelsTool::MergedPixelsTool
MergedPixelsTool()
python.SystemOfUnits.micrometer
int micrometer
Definition: SystemOfUnits.py:71
DataPool::nextElementPtr
pointer nextElementPtr()
obtain the next available element in pool by pointer pool is resized if its limit has been reached On...
SiLocalPosition.h
LB_AnalMapSplitter.tot
tot
Definition: LB_AnalMapSplitter.py:46
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:130
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:192
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:126
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:47
MergedPixelsTool.h
InDet::MergedPixelsTool::m_pixelRDOTool
ToolHandle< PixelRDOTool > m_pixelRDOTool
Definition: MergedPixelsTool.h:120
IdentifierHash
Definition: IdentifierHash.h:38
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:129
InDet::MergedPixelsTool::addClusterNumber
void addClusterNumber(const int &r, const int &Ncluster, const std::vector< network > &connections, std::vector< UnpackedPixelRDO > &collectionID) const
Definition: MergedPixelsTool.cxx:457
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