ATLAS Offline Software
TauShotFinder.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 #ifndef XAOD_ANALYSIS
6 
7 #include "TauShotFinder.h"
10 
13 #include "CaloUtils/CaloCellList.h"
14 
15 
16 TauShotFinder::TauShotFinder(const std::string& name) :
18 
20 
21  ATH_CHECK(m_caloWeightTool.retrieve());
24  ATH_CHECK(detStore()->retrieve (m_calo_id, "CaloCell_ID"));
25  ATH_MSG_INFO("Find TauShot in context: " << (inEleRM() ? "`EleRM`" : "`Standard`") << ", with Electron cell removal Flag: " << m_removeElectronCells);
26  return StatusCode::SUCCESS;
27 }
28 
29 
30 
32  xAOD::PFOContainer& shotPFOContainer) const {
33 
34  // Any tau needs to have shot PFO vectors. Set empty vectors before nTrack cut
35  std::vector<ElementLink<xAOD::PFOContainer>> empty;
36  tau.setShotPFOLinks(empty);
37 
38  // Only run on 0-5 prong taus
39  if (!tauRecTools::doPi0andShots(tau)) {
40  return StatusCode::SUCCESS;
41  }
42 
44  if (!caloCellInHandle.isValid()) {
45  ATH_MSG_ERROR ("Could not retrieve HiveDataObj with key " << caloCellInHandle.key());
46  return StatusCode::FAILURE;
47  }
48  const CaloCellContainer *cellContainer = caloCellInHandle.cptr();
49 
50  // Select seed cells:
51  // -- dR < 0.4, EM1, pt > 100
52  // -- largest pt among the neighbours in eta direction
53  // -- no other seed cell as neighbour in eta direction
54  std::vector<const CaloCell*> seedCells;
55  ATH_CHECK(selectSeedCells(tau, *cellContainer, seedCells));
56  ATH_MSG_DEBUG("seedCells.size() = " << seedCells.size());
57 
58  // Construt shot by merging neighbour cells in phi direction
59  while (!seedCells.empty()) {
60  // Find the neighbour in phi direction, and choose the one with highest pt
61  const CaloCell* cell = seedCells.front();
62  const CaloCell* phiNeigCell = getPhiNeighbour(*cell, seedCells);
63 
64  // Construct shot PFO candidate
65  xAOD::PFO* shot = new xAOD::PFO();
66  shotPFOContainer.push_back(shot);
67 
68  // -- Construct the shot cluster
69  xAOD::CaloCluster* shotCluster = createShotCluster(cell, phiNeigCell, *cellContainer, &shotClusterContainer);
70 
72  clusElementLink.toContainedElement( shotClusterContainer, shotCluster );
73  shot->setClusterLink( clusElementLink );
74 
75  // -- Calculate the four momentum
76  // TODO: simplify the calculation
77  if (phiNeigCell) {
78  // interpolate position
79  double wtCell_phiNeigCell = m_caloWeightTool->wtCell(phiNeigCell);
80  double wtCell_cell = m_caloWeightTool->wtCell(cell);
81  double dPhi = TVector2::Phi_mpi_pi( phiNeigCell->phi() - cell->phi());
82  double ratio = phiNeigCell->pt()*wtCell_phiNeigCell/(cell->pt()*wtCell_cell + phiNeigCell->pt()*wtCell_phiNeigCell);
83  float phi = cell->phi()+dPhi*ratio;
84  float pt = cell->pt()*wtCell_cell+phiNeigCell->pt()*wtCell_phiNeigCell;
85 
86  shot->setP4( static_cast<float>(pt), static_cast<float>(cell->eta()), static_cast<float>(phi), static_cast<float>(cell->m()));
87  }
88  else {
89  shot->setP4( static_cast<float>(cell->pt()*m_caloWeightTool->wtCell(cell)), static_cast<float>(cell->eta()), static_cast<float>(cell->phi()), static_cast<float>(cell->m()));
90  }
91 
92  // -- Set the Attribute
93  shot->setBDTPi0Score(-9999.);
94  shot->setCharge(0);
95  shot->setCenterMag(0.0);
96 
98 
99  const IdentifierHash seedHash = cell->caloDDE()->calo_hash();
101 
102  std::vector<std::vector<const CaloCell*>> cellBlock = TauShotVariableHelpers::getCellBlock(*shot, m_calo_id);
103 
104  float pt1 = TauShotVariableHelpers::ptWindow(cellBlock, 1, m_caloWeightTool);
106 
107  float pt3 = TauShotVariableHelpers::ptWindow(cellBlock, 3, m_caloWeightTool);
109 
110  float pt5 = TauShotVariableHelpers::ptWindow(cellBlock, 5, m_caloWeightTool);
112 
113  int nPhotons = getNPhotons(cell->eta(), pt1);
115 
116  // Add Element link to the shot PFO container
117  ElementLink<xAOD::PFOContainer> PFOElementLink;
118  PFOElementLink.toContainedElement(shotPFOContainer, shot);
119  tau.addShotPFOLink(PFOElementLink);
120 
121  // Remove used cells from list
122  auto cellIndex = std::find(seedCells.begin(), seedCells.end(), cell);
123  seedCells.erase(cellIndex);
124  if (phiNeigCell) {
125  cellIndex = std::find(seedCells.begin(), seedCells.end(), phiNeigCell);
126  seedCells.erase(cellIndex);
127  }
128  } // Loop over seed cells
129 
130  return StatusCode::SUCCESS;
131 }
132 
133 
134 
135 int TauShotFinder::getEtaBin(float eta) const {
136  float absEta=std::abs(eta);
137 
138  if (absEta < 0.80) {
139  return 0; // Central Barrel
140  }
141  if (absEta<1.39) {
142  return 1; // Outer Barrel
143  }
144  if (absEta<1.51) {
145  return 2; // Crack region
146  }
147  if (absEta<1.80) {
148  return 3; // Endcap, fine granularity
149  }
150  return 4; // Endcap, coarse granularity
151 }
152 
153 
154 
155 int TauShotFinder::getNPhotons(float eta, float energy) const {
156  int etaBin = getEtaBin(eta);
157 
158  // No photons in crack region
159  if(etaBin==2) return 0;
160 
161  const std::vector<float>& minPtCut = m_minPtCut.value();
162  const std::vector<float>& doubleShotCut = m_doubleShotCut.value();
163  ATH_MSG_DEBUG("etaBin = " << etaBin << ", energy = " << energy);
164  ATH_MSG_DEBUG("MinPtCut: " << minPtCut.at(etaBin) << "DoubleShotCut: " << doubleShotCut.at(etaBin));
165 
166  if (energy < minPtCut.at(etaBin)) return 0;
167  if (energy > doubleShotCut.at(etaBin)) return 2;
168  return 1;
169 }
170 
171 
172 
174  std::vector<const CaloCell*>& cells) const {
175  // if in EleRM tau reco, do electron cell removal
176  std::vector<const CaloCell*> removed_cells;
177  if (m_removeElectronCells && inEleRM()){
179  if (!removedClustersHandle.isValid()){
180  ATH_MSG_ERROR ("Could not retrieve HiveDataObj with key " << removedClustersHandle.key());
181  return StatusCode::FAILURE;
182  }
183  const xAOD::CaloClusterContainer *removed_clusters_cont = removedClustersHandle.cptr();
184 
185  for (auto cluster : *removed_clusters_cont){
186  for(auto cell_it = cluster->cell_cbegin(); cell_it != cluster->cell_cend(); cell_it++){
187  removed_cells.push_back(*cell_it);
188  }
189  }
190  }
191 
192  // retrieve EM1 cells within dR=0.4, pre-selected by TauPi0CreateROI
193  static const SG::ConstAccessor<std::vector<const CaloCell*>> acc_shotCells("shotCells");
194  std::vector<const CaloCell*> shotCells = acc_shotCells(tau);
195 
196  for (const CaloCell* cell : shotCells) {
197  // Require cells above threshold (100 MeV by default)
198  // FIXME: cells are not corrected to point at tau vertex
199  if (cell->pt() * m_caloWeightTool->wtCell(cell) < m_energyThreshold) continue;
200  // if in EleRM, check the clusters do not include electron activities
201  if (m_removeElectronCells && inEleRM() && std::find(removed_cells.cbegin(), removed_cells.cend(), cell) != removed_cells.cend()) continue;
202 
203  cells.push_back(cell);
204  }
205  return StatusCode::SUCCESS;
206 }
207 
208 
209 
211  const CaloCellContainer& cellContainer,
212  std::vector<const CaloCell*>& seedCells) const {
213 
214  // Apply pre-selection of the cells
215  assert(seedCells.empty());
216  std::vector<const CaloCell*> cells;
217  ATH_CHECK(selectCells(tau, cells));
218  std::sort(cells.begin(),cells.end(),ptSort(*this));
219 
220  std::set<IdentifierHash> seedCellHashes;
221 
222  // Loop the pt sorted cells, and select the seed cells
223  for (const CaloCell* cell: cells) {
224  const IdentifierHash cellHash = cell->caloDDE()->calo_hash();
225 
226  std::vector<IdentifierHash> nextEtaHashes;
228  std::vector<IdentifierHash> prevEtaHashes;
230 
231  std::vector<IdentifierHash> neighHashes = nextEtaHashes;
232  neighHashes.insert(neighHashes.end(),prevEtaHashes.begin(),prevEtaHashes.end());
233 
234  // Check whether it is a seed cell
235  bool status = true;
236  for (const IdentifierHash& neighHash : neighHashes) {
237  // Seed cells must not have seed cells as neighbours
238  // TODO: maybe this requirement can be removed
239  if (seedCellHashes.find(neighHash) != seedCellHashes.end()) {
240  status = false;
241  break;
242  }
243 
244  // Pt of seed cells must be larger than neighbours'
245  const CaloCell* neighCell = cellContainer.findCell(neighHash);
246  if (!neighCell) continue;
247  if (neighCell->pt() * m_caloWeightTool->wtCell(neighCell) >= cell->pt() * m_caloWeightTool->wtCell(cell)) {
248  status = false;
249  break;
250  }
251  } // End of the loop of neighbour cells
252 
253  if (!status) continue;
254 
255  seedCells.push_back(cell);
256  seedCellHashes.insert(cellHash);
257  } // End of the loop of cells
258 
259  return StatusCode::SUCCESS;
260 }
261 
262 
263 
265  std::vector<IdentifierHash> neigHashes;
266 
267  // Next cell in phi direction
268  m_calo_id->get_neighbours(cell1Hash,LArNeighbours::nextInPhi,neigHashes);
269  if (neigHashes.size() > 1) {
270  ATH_MSG_DEBUG(cell1Hash << " has " << neigHashes.size() << " neighbours in the next phi direction !");
271  }
272  if (std::find(neigHashes.begin(), neigHashes.end(), cell2Hash) != neigHashes.end()) {
273  return true;
274  }
275 
276  // Previous cell in phi direction
277  m_calo_id->get_neighbours(cell1Hash,LArNeighbours::prevInPhi,neigHashes);
278  if (neigHashes.size() > 1) {
279  ATH_MSG_DEBUG(cell1Hash << " has " << neigHashes.size() << " neighbours in the previous phi direction !");
280  }
281  return std::find(neigHashes.begin(), neigHashes.end(), cell2Hash) != neigHashes.end();
282 }
283 
284 
285 
287  const std::vector<const CaloCell*>& seedCells) const {
288 
289  const IdentifierHash seedHash = seedCell.caloDDE()->calo_hash();
290 
291  // Obtain the neighbour cells in the phi direction
292  std::vector<const CaloCell*> neighCells;
293  for (const CaloCell* neighCell : seedCells) {
294  if (neighCell == &seedCell) continue;
295 
296  IdentifierHash neighHash = neighCell->caloDDE()->calo_hash();
297  if (this->isPhiNeighbour(seedHash, neighHash)) {
298  neighCells.push_back(neighCell);
299  }
300  }
301  std::sort(neighCells.begin(),neighCells.end(),ptSort(*this));
302 
303  // Select the one with largest pt
304  const CaloCell* phiNeigCell = nullptr;
305  if (!neighCells.empty()) {
306  phiNeigCell = neighCells[0];
307  }
308 
309  return phiNeigCell;
310 }
311 
312 
313 
314 std::vector<const CaloCell*> TauShotFinder::getEtaNeighbours(const CaloCell& cell,
315  const CaloCellContainer& cellContainer,
316  int maxDepth) const {
317  std::vector<const CaloCell*> cells;
318 
319  // Add neighbours in next eta direction
320  this->addEtaNeighbours(cell, cellContainer, cells, 0, maxDepth, true);
321  // Add neighbours in previous eta direction
322  this->addEtaNeighbours(cell, cellContainer, cells, 0, maxDepth, false);
323 
324  return cells;
325 }
326 
327 
328 
330  const CaloCellContainer& cellContainer,
331  std::vector<const CaloCell*>& cells,
332  int depth,
333  int maxDepth,
334  bool next) const {
335  ++depth;
336 
337  if (depth > maxDepth) return;
338 
339  const IdentifierHash cellHash = cell.caloDDE()->calo_hash();
340 
341  std::vector<IdentifierHash> neigHashes;
342  if (next) {
344  }
345  else {
347  }
348 
349  for (const IdentifierHash& hash : neigHashes) {
350  const CaloCell* newCell = cellContainer.findCell(hash);
351 
352  if (!newCell) continue;
353 
354  cells.push_back(newCell);
355  this->addEtaNeighbours(*newCell, cellContainer, cells, depth, maxDepth, next);
356 
357  if (neigHashes.size() > 1) {
358  ATH_MSG_DEBUG(cellHash << " has " << neigHashes.size() << " neighbours in the eta direction !");
359  break;
360  }
361  }
362 }
363 
364 
365 
367  const CaloCell* phiNeigCell,
368  const CaloCellContainer& cellContainer,
369  xAOD::CaloClusterContainer* clusterContainer) const {
370 
371  xAOD::CaloCluster* shotCluster = CaloClusterStoreHelper::makeCluster(clusterContainer,&cellContainer);
372 
373  int maxDepth = (m_nCellsInEta - 1) / 2;
374 
375  std::vector<const CaloCell*> windowNeighbours = this->getEtaNeighbours(*cell, cellContainer, maxDepth);
376  if (phiNeigCell) {
377  std::vector<const CaloCell*> mergeCells = this->getEtaNeighbours(*phiNeigCell, cellContainer, maxDepth);
378  windowNeighbours.push_back(phiNeigCell);
379  windowNeighbours.insert(windowNeighbours.end(), mergeCells.begin(), mergeCells.end());
380  }
381 
382  shotCluster->getOwnCellLinks()->reserve(windowNeighbours.size()+1);
383  const IdentifierHash seedHash = cell->caloDDE()->calo_hash();
384  shotCluster->addCell(cellContainer.findIndex(seedHash), 1.);
385 
386  for (const CaloCell* cell : windowNeighbours) {
387  shotCluster->addCell(cellContainer.findIndex(cell->caloDDE()->calo_hash()), 1.0);
388  }
389 
390  CaloClusterKineHelper::calculateKine(shotCluster,true,true);
391 
392  return shotCluster;
393 }
394 
395 
396 
398 bool TauShotFinder::ptSort::operator()( const CaloCell* cell1, const CaloCell* cell2 ){
399  double pt1 = cell1->pt()*m_info.m_caloWeightTool->wtCell(cell1);
400  double pt2 = cell2->pt()*m_info.m_caloWeightTool->wtCell(cell2);
401  return pt1 > pt2;
402 }
403 
404 #endif
CaloClusterStoreHelper::makeCluster
static std::unique_ptr< xAOD::CaloCluster > makeCluster(const CaloCellContainer *cellCont)
Creates a valid CaloCluster with a private Aux-Store and CellLink container.
Definition: CaloClusterStoreHelper.cxx:13
python.PyKernel.retrieve
def retrieve(aClass, aKey=None)
Definition: PyKernel.py:110
TauShotFinder::m_caloCellInputContainer
SG::ReadHandleKey< CaloCellContainer > m_caloCellInputContainer
Definition: TauShotFinder.h:106
P4EEtaPhiMBase::pt
virtual double pt() const
transverse momentum
Definition: P4EEtaPhiMBase.cxx:101
CaloClusterKineHelper.h
RunTileCalibRec.cells
cells
Definition: RunTileCalibRec.py:281
xAOD::TauJet_v3::addShotPFOLink
void addShotPFOLink(const ElementLink< PFOContainer > &pfo)
add a shot PFO to the tau
Definition: TauJet_v3.cxx:752
TauShotFinder.h
TauShotFinder::m_minPtCut
Gaudi::Property< std::vector< float > > m_minPtCut
Definition: TauShotFinder.h:100
TauShotFinder::executeShotFinder
virtual StatusCode executeShotFinder(xAOD::TauJet &pTau, xAOD::CaloClusterContainer &tauShotCaloClusContainer, xAOD::PFOContainer &tauShotPFOContainer) const override
Definition: TauShotFinder.cxx:31
egammaParameters::depth
@ depth
pointing depth of the shower as calculated in egammaqgcld
Definition: egammaParamDefs.h:276
TauShotVariableHelpers::getCellBlock
std::vector< std::vector< const CaloCell * > > getCellBlock(const xAOD::PFO &shot, const CaloCell_ID *calo_id)
Get cell block with (currently) 2 x 5 cells in correct order for variable calculations.
Definition: TauShotVariableHelpers.cxx:48
CaloCell::phi
virtual double phi() const override final
get phi (through CaloDetDescrElement)
Definition: CaloCell.h:375
ReadCellNoiseFromCool.cell
cell
Definition: ReadCellNoiseFromCool.py:53
phi
Scalar phi() const
phi method
Definition: AmgMatrixBasePlugin.h:67
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
find
std::string find(const std::string &s)
return a remapped string
Definition: hcg.cxx:138
TauShotFinder::m_energyThreshold
Gaudi::Property< float > m_energyThreshold
Definition: TauShotFinder.h:104
SG::ReadHandle::cptr
const_pointer_type cptr()
Dereference the pointer.
eta
Scalar eta() const
pseudorapidity method
Definition: AmgMatrixBasePlugin.h:83
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:67
CaloCellList.h
TauShotFinder::createShotCluster
xAOD::CaloCluster * createShotCluster(const CaloCell *cell, const CaloCell *phiNeighCell, const CaloCellContainer &cellContainer, xAOD::CaloClusterContainer *clusterContainer) const
Create the shot cluster Shot cluster contains 5x1 cells from the seed cell and hottestneighbour cell ...
Definition: TauShotFinder.cxx:366
TauShotFinder::initialize
virtual StatusCode initialize() override
Tool initializer.
Definition: TauShotFinder.cxx:19
xAOD::PFODetails::tauShots_pt1
@ tauShots_pt1
Definition: Event/xAOD/xAODPFlow/xAODPFlow/PFODefs.h:144
TauRecToolBase
The base class for all tau tools.
Definition: TauRecToolBase.h:21
test_pyathena.pt
pt
Definition: test_pyathena.py:11
SG::ConstAccessor
Helper class to provide constant type-safe access to aux data.
Definition: ConstAccessor.h:55
xAOD::PFODetails::tauShots_pt3
@ tauShots_pt3
Definition: Event/xAOD/xAODPFlow/xAODPFlow/PFODefs.h:145
TauShotFinder::getPhiNeighbour
const CaloCell * getPhiNeighbour(const CaloCell &seedCell, const std::vector< const CaloCell * > &seedCells) const
Get the hottest neighbour cell in the phi direction.
Definition: TauShotFinder.cxx:286
TauClusterVars::dPhi
bool dPhi(const xAOD::TauJet &tau, const xAOD::CaloVertexedTopoCluster &cluster, float &out)
Definition: ConstituentLoaderTauCluster.cxx:119
Phi_mpi_pi
__HOSTDEV__ double Phi_mpi_pi(double)
Definition: GeoRegion.cxx:10
LArNeighbours::prevInPhi
@ prevInPhi
Definition: LArNeighbours.h:12
TauShotFinder::addEtaNeighbours
void addEtaNeighbours(const CaloCell &cell, const CaloCellContainer &cellContainer, std::vector< const CaloCell * > &cells, int depth, int maxDepth, bool next) const
Get neighbour cells in the eta direction.
Definition: TauShotFinder.cxx:329
TauShotFinder::ptSort::ptSort
ptSort(const TauShotFinder &info)
Definition: TauShotFinder.cxx:397
TauRecToolBase::inEleRM
bool inEleRM() const
Definition: TauRecToolBase.h:89
TauShotFinder::m_caloWeightTool
ToolHandle< IHadronicCalibrationTool > m_caloWeightTool
Definition: TauShotFinder.h:107
AthCommonDataStore< AthCommonMsg< AlgTool > >::detStore
const ServiceHandle< StoreGateSvc > & detStore() const
The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.
Definition: AthCommonDataStore.h:95
xAOD::PFODetails::tauShots_nPhotons
@ tauShots_nPhotons
Definition: Event/xAOD/xAODPFlow/xAODPFlow/PFODefs.h:162
xAOD::PFO_v1::setClusterLink
bool setClusterLink(const ElementLink< xAOD::CaloClusterContainer > &theCluster)
Set a cluster constituent - does NOT append to existing container
Definition: PFO_v1.cxx:549
TauShotFinder::m_nCellsInEta
Gaudi::Property< int > m_nCellsInEta
Definition: TauShotFinder.h:99
LArNeighbours::nextInPhi
@ nextInPhi
Definition: LArNeighbours.h:13
TauShotFinder::ptSort::operator()
bool operator()(const CaloCell *c1, const CaloCell *c2)
Definition: TauShotFinder.cxx:398
xAOD::CaloCluster_v1
Description of a calorimeter cluster.
Definition: CaloCluster_v1.h:62
TauShotVariableHelpers.h
xAOD::etaBin
setSAddress setEtaMS setDirPhiMS setDirZMS setBarrelRadius setEndcapAlpha setEndcapRadius setInterceptInner setEtaMap etaBin
Definition: L2StandAloneMuon_v1.cxx:149
TauShotFinder::getNPhotons
int getNPhotons(float eta, float energy) const
Get NPhotons in shot.
Definition: TauShotFinder.cxx:155
CaloDetDescrElement::calo_hash
IdentifierHash calo_hash() const
cell calo hash
Definition: Calorimeter/CaloDetDescr/CaloDetDescr/CaloDetDescrElement.h:412
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
ParticleGun_FastCalo_ChargeFlip_Config.energy
energy
Definition: ParticleGun_FastCalo_ChargeFlip_Config.py:78
TauShotFinder::selectSeedCells
StatusCode selectSeedCells(const xAOD::TauJet &tau, const CaloCellContainer &cellContainer, std::vector< const CaloCell * > &seedCells) const
Select the seed cells used to construct the shot Cells must sastisfy:
Definition: TauShotFinder.cxx:210
fillPileUpNoiseLumi.next
next
Definition: fillPileUpNoiseLumi.py:52
xAOD::PFO
PFO_v1 PFO
Definition of the current "pfo version".
Definition: PFO.h:17
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
CaloCell::caloDDE
const CaloDetDescrElement * caloDDE() const
get pointer to CaloDetDescrElement (data member)
Definition: CaloCell.h:321
tauRecTools::doPi0andShots
bool doPi0andShots(const xAOD::TauJet &tau)
Determines whether pi0s and shots should be built for a tau candidate.
Definition: Reconstruction/tauRecTools/Root/HelperFunctions.cxx:93
xAOD::TauJet_v3
Class describing a tau jet.
Definition: TauJet_v3.h:41
xAOD::TauJet_v3::setShotPFOLinks
void setShotPFOLinks(const PFOLinks_t &shotPFOs)
TauShotFinder::selectCells
StatusCode selectCells(const xAOD::TauJet &tau, std::vector< const CaloCell * > &cells) const
Apply preselection of the cells Cells within dR < 0.4, in EM1, and pt > 100 MeV are selected.
Definition: TauShotFinder.cxx:173
xAOD::PFODetails::tauShots_seedHash
@ tauShots_seedHash
Definition: Event/xAOD/xAODPFlow/xAODPFlow/PFODefs.h:163
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
SG::VarHandleKey::initialize
StatusCode initialize(bool used=true)
If this object is used as a property, then this should be called during the initialize phase.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:103
xAOD::PFO_v1::setBDTPi0Score
void setBDTPi0Score(float BDTPi0Score)
set BDT Score used to classify clusters as Pi0 like or not
DataVector
Derived DataVector<T>.
Definition: DataVector.h:795
WriteCellNoiseToCool.cellHash
cellHash
Definition: WriteCellNoiseToCool.py:433
TauShotVariableHelpers::ptWindow
float ptWindow(const std::vector< std::vector< const CaloCell * >> &shotCells, int windowSize, const ToolHandle< IHadronicCalibrationTool > &caloWeightTool)
pt in a window of (currently) 2 x windowSize cells
Definition: TauShotVariableHelpers.cxx:158
SG::ReadHandle::isValid
virtual bool isValid() override final
Can the handle be successfully dereferenced?
CaloCellContainer::findCell
const CaloCell * findCell(const IdentifierHash theHash) const
fast find method given identifier hash.
Definition: CaloCellContainer.cxx:345
TauShotFinder::isPhiNeighbour
bool isPhiNeighbour(IdentifierHash cell1Hash, IdentifierHash cell2Hash) const
Check whether two cells are neighbours in the phi direction.
Definition: TauShotFinder.cxx:264
xAOD::PFO_v1
Class describing a particle flow object.
Definition: PFO_v1.h:35
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:240
CaloCell_Base_ID::get_neighbours
int get_neighbours(const IdentifierHash caloHash, const LArNeighbours::neighbourOption &option, std::vector< IdentifierHash > &neighbourList) const
access to hashes for neighbours return == 0 for neighbours found
Definition: CaloCell_Base_ID.cxx:189
DataVector::push_back
value_type push_back(value_type pElem)
Add an element to the end of the collection.
TauShotFinder::getEtaBin
int getEtaBin(float eta) const
Get eta bin.
Definition: TauShotFinder.cxx:135
CaloCellContainer
Container class for CaloCell.
Definition: CaloCellContainer.h:55
SG::VarHandleBase::key
virtual const std::string & key() const override final
Return the StoreGate ID for the referenced object.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleBase.cxx:64
CaloClusterStoreHelper.h
TauShotFinder::m_removeElectronCells
Gaudi::Property< bool > m_removeElectronCells
Definition: TauShotFinder.h:102
TauShotFinder::getEtaNeighbours
std::vector< const CaloCell * > getEtaNeighbours(const CaloCell &cell, const CaloCellContainer &cellContainer, int maxDepth) const
Get neighbour cells in the eta direction.
Definition: TauShotFinder.cxx:314
TauShotFinder::ptSort
Definition: TauShotFinder.h:45
xAOD::PFO_v1::setP4
void setP4(const FourMom_t &vec)
set the 4-vec
Definition: PFO_v1.cxx:107
xAOD::PFO_v1::setCharge
void setCharge(float charge)
set charge of PFO
TauShotFinder::m_calo_id
const CaloCell_ID * m_calo_id
calo cell navigation
Definition: TauShotFinder.h:111
python.compareTCTs.ratio
ratio
Definition: compareTCTs.py:294
CaloCell
Data object for each calorimeter readout cell.
Definition: CaloCell.h:57
CaloCondBlobAlgs_fillNoiseFromASCII.hash
dictionary hash
Definition: CaloCondBlobAlgs_fillNoiseFromASCII.py:108
xAOD::PFODetails::tauShots_nCellsInEta
@ tauShots_nCellsInEta
These are the variables describing Tau Shot objects, which are built from EM1 cells.
Definition: Event/xAOD/xAODPFlow/xAODPFlow/PFODefs.h:143
TauShotFinder::TauShotFinder
TauShotFinder(const std::string &name)
Definition: TauShotFinder.cxx:16
LArNeighbours::nextInEta
@ nextInEta
Definition: LArNeighbours.h:15
xAOD::CaloCluster_v1::getOwnCellLinks
CaloClusterCellLink * getOwnCellLinks()
Get a pointer to the owned CaloClusterCellLink object (non-const version)
Definition: CaloCluster_v1.h:765
xAOD::CaloCluster_v1::addCell
bool addCell(const unsigned index, const double weight)
Method to add a cell to the cluster (Beware: Kinematics not updated!)
Definition: CaloCluster_v1.h:774
HelperFunctions.h
TauScalarVars::absEta
bool absEta(const xAOD::TauJet &tau, float &out)
Definition: TauGNNDataLoader.cxx:118
CaloCellContainer::findIndex
int findIndex(const IdentifierHash theHash) const
Return index of the cell with a given hash.
Definition: CaloCellContainer.cxx:363
CaloClusterKineHelper::calculateKine
static void calculateKine(xAOD::CaloCluster *clu, const bool useweight=true, const bool updateLayers=true, const bool useGPUCriteria=false)
Helper class to calculate cluster kinematics based on cells.
Definition: CaloClusterKineHelper.cxx:223
LArNeighbours::prevInEta
@ prevInEta
Definition: LArNeighbours.h:14
merge.status
status
Definition: merge.py:16
TauShotFinder
Definition: TauShotFinder.h:30
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
xAOD::PFO_v1::setAttribute
void setAttribute(PFODetails::PFOAttributes AttributeType, const T &anAttribute)
Set a PFO Variable via enum - overwrite is allowed.
TauShotFinder::m_removedClusterInputContainer
SG::ReadHandleKey< xAOD::CaloClusterContainer > m_removedClusterInputContainer
Definition: TauShotFinder.h:108
SG::AllowEmpty
@ AllowEmpty
Definition: StoreGate/StoreGate/VarHandleKey.h:27
TauShotFinder::m_doubleShotCut
Gaudi::Property< std::vector< float > > m_doubleShotCut
Definition: TauShotFinder.h:101
python.ParticleTypeUtil.info
def info
Definition: ParticleTypeUtil.py:87
xAOD::PFODetails::tauShots_pt5
@ tauShots_pt5
Definition: Event/xAOD/xAODPFlow/xAODPFlow/PFODefs.h:146
xAOD::PFO_v1::setCenterMag
void setCenterMag(float CenterMag)
set CenterMag moment needed for vertex correction