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"));
26  ATH_MSG_INFO("Find TauShot in context: " << (inEleRM() ? "`EleRM`" : "`Standard`") << ", with Electron cell removal Flag: " << m_removeElectronCells);
27  return StatusCode::SUCCESS;
28 }
29 
30 
31 
33  xAOD::PFOContainer& shotPFOContainer) const {
34 
35  // Any tau needs to have shot PFO vectors. Set empty vectors before nTrack cut
36  std::vector<ElementLink<xAOD::PFOContainer>> empty;
37  tau.setShotPFOLinks(empty);
38 
39  // Only run on 0-5 prong taus
40  if (!tauRecTools::doPi0andShots(tau)) {
41  return StatusCode::SUCCESS;
42  }
43 
45  if (!caloCellInHandle.isValid()) {
46  ATH_MSG_ERROR ("Could not retrieve HiveDataObj with key " << caloCellInHandle.key());
47  return StatusCode::FAILURE;
48  }
49  const CaloCellContainer *cellContainer = caloCellInHandle.cptr();
50 
52  const CaloDetDescrManager* caloDDMgr = *caloMgrHandle;
53  // Select seed cells:
54  // -- dR < 0.4, EM1, pt > 100
55  // -- largest pt among the neighbours in eta direction
56  // -- no other seed cell as neighbour in eta direction
57  std::vector<const CaloCell*> seedCells;
58  ATH_CHECK(selectSeedCells(tau, *cellContainer, caloDDMgr, seedCells));
59  ATH_MSG_DEBUG("seedCells.size() = " << seedCells.size());
60 
61  // Construt shot by merging neighbour cells in phi direction
62  while (!seedCells.empty()) {
63  // Find the neighbour in phi direction, and choose the one with highest pt
64  const CaloCell* cell = seedCells.front();
65  const CaloCell* phiNeigCell = getPhiNeighbour(*cell, seedCells);
66 
67  // Construct shot PFO candidate
68  xAOD::PFO* shot = new xAOD::PFO();
69  shotPFOContainer.push_back(shot);
70 
71  // -- Construct the shot cluster
72  xAOD::CaloCluster* shotCluster = createShotCluster(cell, phiNeigCell, *cellContainer, &shotClusterContainer);
73 
75  clusElementLink.toContainedElement( shotClusterContainer, shotCluster );
76  shot->setClusterLink( clusElementLink );
77 
78  // -- Calculate the four momentum
79  // TODO: simplify the calculation
80  if (phiNeigCell) {
81  // interpolate position
82  double dPhi = TVector2::Phi_mpi_pi( phiNeigCell->phi() - cell->phi());
83  double ratio = phiNeigCell->pt()*m_caloWeightTool->wtCell(phiNeigCell)/(cell->pt()*m_caloWeightTool->wtCell(cell) + phiNeigCell->pt()*m_caloWeightTool->wtCell(phiNeigCell));
84  float phi = cell->phi()+dPhi*ratio;
85  float pt = cell->pt()*m_caloWeightTool->wtCell(cell)+phiNeigCell->pt()*m_caloWeightTool->wtCell(phiNeigCell);
86 
87  shot->setP4( static_cast<float>(pt), static_cast<float>(cell->eta()), static_cast<float>(phi), static_cast<float>(cell->m()));
88  }
89  else {
90  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()));
91  }
92 
93  // -- Set the Attribute
94  shot->setBDTPi0Score(-9999.);
95  shot->setCharge(0);
96  shot->setCenterMag(0.0);
97 
99 
100  const IdentifierHash seedHash = cell->caloDDE()->calo_hash();
102 
103  std::vector<std::vector<const CaloCell*>> cellBlock = TauShotVariableHelpers::getCellBlock(*shot, m_calo_id);
104 
105  float pt1 = TauShotVariableHelpers::ptWindow(cellBlock, 1, m_caloWeightTool);
107 
108  float pt3 = TauShotVariableHelpers::ptWindow(cellBlock, 3, m_caloWeightTool);
110 
111  float pt5 = TauShotVariableHelpers::ptWindow(cellBlock, 5, m_caloWeightTool);
113 
114  int nPhotons = getNPhotons(cell->eta(), pt1);
116 
117  // Add Element link to the shot PFO container
118  ElementLink<xAOD::PFOContainer> PFOElementLink;
119  PFOElementLink.toContainedElement(shotPFOContainer, shot);
120  tau.addShotPFOLink(PFOElementLink);
121 
122  // Remove used cells from list
123  auto cellIndex = std::find(seedCells.begin(), seedCells.end(), cell);
124  seedCells.erase(cellIndex);
125  if (phiNeigCell) {
126  cellIndex = std::find(seedCells.begin(), seedCells.end(), phiNeigCell);
127  seedCells.erase(cellIndex);
128  }
129  } // Loop over seed cells
130 
131  return StatusCode::SUCCESS;
132 }
133 
134 
135 
136 int TauShotFinder::getEtaBin(float eta) const {
137  float absEta=std::abs(eta);
138 
139  if (absEta < 0.80) {
140  return 0; // Central Barrel
141  }
142  if (absEta<1.39) {
143  return 1; // Outer Barrel
144  }
145  if (absEta<1.51) {
146  return 2; // Crack region
147  }
148  if (absEta<1.80) {
149  return 3; // Endcap, fine granularity
150  }
151  return 4; // Endcap, coarse granularity
152 }
153 
154 
155 
156 int TauShotFinder::getNPhotons(float eta, float energy) const {
157  int etaBin = getEtaBin(eta);
158 
159  // No photons in crack region
160  if(etaBin==2) return 0;
161 
162  const std::vector<float>& minPtCut = m_minPtCut.value();
163  const std::vector<float>& doubleShotCut = m_doubleShotCut.value();
164  ATH_MSG_DEBUG("etaBin = " << etaBin << ", energy = " << energy);
165  ATH_MSG_DEBUG("MinPtCut: " << minPtCut.at(etaBin) << "DoubleShotCut: " << doubleShotCut.at(etaBin));
166 
167  if (energy < minPtCut.at(etaBin)) return 0;
168  if (energy > doubleShotCut.at(etaBin)) return 2;
169  return 1;
170 }
171 
172 
173 
175  const CaloCellContainer& cellContainer,
176  const CaloDetDescrManager* detMgr,
177  std::vector<const CaloCell*>& cells) const {
178  // if in EleRM tau reco, do electron cell removal
179  std::vector<const CaloCell*> removed_cells;
180  if (m_removeElectronCells && inEleRM()){
182  if (!removedClustersHandle.isValid()){
183  ATH_MSG_ERROR ("Could not retrieve HiveDataObj with key " << removedClustersHandle.key());
184  return StatusCode::FAILURE;
185  }
186  const xAOD::CaloClusterContainer *removed_clusters_cont = removedClustersHandle.cptr();
187 
188  for (auto cluster : *removed_clusters_cont){
189  for(auto cell_it = cluster->cell_cbegin(); cell_it != cluster->cell_cend(); cell_it++){
190  removed_cells.push_back(*cell_it);
191  }
192  }
193  }
194  // Get only cells within dR < 0.4
195  // -- TODO: change the hardcoded 0.4
196  std::vector<CaloCell_ID::SUBCALO> emSubCaloBlocks;
197  emSubCaloBlocks.push_back(CaloCell_ID::LAREM);
198  std::unique_ptr<CaloCellList> cellList = std::make_unique<CaloCellList>(detMgr, &cellContainer, emSubCaloBlocks);
199  // -- FIXME: tau p4 is corrected to point at tau vertex, but the cells are not
200  cellList->select(tau.eta(), tau.phi(), 0.4);
201 
202  for (const CaloCell* cell : *cellList) {
203  // Require cells above 100 MeV
204  // FIXME: cells are not corrected to point at tau vertex
205  if (cell->pt() * m_caloWeightTool->wtCell(cell) < 100.) continue;
206  // if in EleRM, check the clusters do not include electron activities
207  if (m_removeElectronCells && inEleRM() && std::find(removed_cells.cbegin(), removed_cells.cend(), cell) != removed_cells.cend()) continue;
208 
209  // Require cells in EM1
210  int sampling = cell->caloDDE()->getSampling();
211  if( !( sampling == CaloCell_ID::EMB1 || sampling == CaloCell_ID::EME1 ) ) continue;
212 
213  cells.push_back(cell);
214  }
215  return StatusCode::SUCCESS;
216 }
217 
218 
219 
221  const CaloCellContainer& cellContainer,
222  const CaloDetDescrManager* detMgr,
223  std::vector<const CaloCell*>& seedCells) const {
224 
225  // Apply pre-selection of the cells
226  assert(seedCells.empty());
227  std::vector<const CaloCell*> cells;
228  ATH_CHECK(selectCells(tau, cellContainer,detMgr, cells));
229  std::sort(cells.begin(),cells.end(),ptSort(*this));
230 
231  std::set<IdentifierHash> seedCellHashes;
232 
233  // Loop the pt sorted cells, and select the seed cells
234  for (const CaloCell* cell: cells) {
235  const IdentifierHash cellHash = cell->caloDDE()->calo_hash();
236 
237  std::vector<IdentifierHash> nextEtaHashes;
239  std::vector<IdentifierHash> prevEtaHashes;
241 
242  std::vector<IdentifierHash> neighHashes = nextEtaHashes;
243  neighHashes.insert(neighHashes.end(),prevEtaHashes.begin(),prevEtaHashes.end());
244 
245  // Check whether it is a seed cell
246  bool status = true;
247  for (const IdentifierHash& neighHash : neighHashes) {
248  // Seed cells must not have seed cells as neighbours
249  // TODO: maybe this requirement can be removed
250  if (seedCellHashes.find(neighHash) != seedCellHashes.end()) {
251  status = false;
252  break;
253  }
254 
255  // Pt of seed cells must be larger than neighbours'
256  const CaloCell* neighCell = cellContainer.findCell(neighHash);
257  if (!neighCell) continue;
258  if (neighCell->pt() * m_caloWeightTool->wtCell(neighCell) >= cell->pt() * m_caloWeightTool->wtCell(cell)) {
259  status = false;
260  break;
261  }
262  } // End of the loop of neighbour cells
263 
264  if (!status) continue;
265 
266  seedCells.push_back(cell);
267  seedCellHashes.insert(cellHash);
268  } // End of the loop of cells
269 
270  return StatusCode::SUCCESS;
271 }
272 
273 
274 
276  std::vector<IdentifierHash> neigHashes;
277 
278  // Next cell in phi direction
279  m_calo_id->get_neighbours(cell1Hash,LArNeighbours::nextInPhi,neigHashes);
280  if (neigHashes.size() > 1) {
281  ATH_MSG_DEBUG(cell1Hash << " has " << neigHashes.size() << " neighbours in the next phi direction !");
282  }
283  if (std::find(neigHashes.begin(), neigHashes.end(), cell2Hash) != neigHashes.end()) {
284  return true;
285  }
286 
287  // Previous cell in phi direction
288  m_calo_id->get_neighbours(cell1Hash,LArNeighbours::prevInPhi,neigHashes);
289  if (neigHashes.size() > 1) {
290  ATH_MSG_DEBUG(cell1Hash << " has " << neigHashes.size() << " neighbours in the previous phi direction !");
291  }
292  return std::find(neigHashes.begin(), neigHashes.end(), cell2Hash) != neigHashes.end();
293 }
294 
295 
296 
298  const std::vector<const CaloCell*>& seedCells) const {
299 
300  const IdentifierHash seedHash = seedCell.caloDDE()->calo_hash();
301 
302  // Obtain the neighbour cells in the phi direction
303  std::vector<const CaloCell*> neighCells;
304  for (const CaloCell* neighCell : seedCells) {
305  if (neighCell == &seedCell) continue;
306 
307  IdentifierHash neighHash = neighCell->caloDDE()->calo_hash();
308  if (this->isPhiNeighbour(seedHash, neighHash)) {
309  neighCells.push_back(neighCell);
310  }
311  }
312  std::sort(neighCells.begin(),neighCells.end(),ptSort(*this));
313 
314  // Select the one with largest pt
315  const CaloCell* phiNeigCell = nullptr;
316  if (!neighCells.empty()) {
317  phiNeigCell = neighCells[0];
318  }
319 
320  return phiNeigCell;
321 }
322 
323 
324 
325 std::vector<const CaloCell*> TauShotFinder::getEtaNeighbours(const CaloCell& cell,
326  const CaloCellContainer& cellContainer,
327  int maxDepth) const {
328  std::vector<const CaloCell*> cells;
329 
330  // Add neighbours in next eta direction
331  this->addEtaNeighbours(cell, cellContainer, cells, 0, maxDepth, true);
332  // Add neighbours in previous eta direction
333  this->addEtaNeighbours(cell, cellContainer, cells, 0, maxDepth, false);
334 
335  return cells;
336 }
337 
338 
339 
341  const CaloCellContainer& cellContainer,
342  std::vector<const CaloCell*>& cells,
343  int depth,
344  int maxDepth,
345  bool next) const {
346  ++depth;
347 
348  if (depth > maxDepth) return;
349 
350  const IdentifierHash cellHash = cell.caloDDE()->calo_hash();
351 
352  std::vector<IdentifierHash> neigHashes;
353  if (next) {
355  }
356  else {
358  }
359 
360  for (const IdentifierHash& hash : neigHashes) {
361  const CaloCell* newCell = cellContainer.findCell(hash);
362 
363  if (!newCell) continue;
364 
365  cells.push_back(newCell);
366  this->addEtaNeighbours(*newCell, cellContainer, cells, depth, maxDepth, next);
367 
368  if (neigHashes.size() > 1) {
369  ATH_MSG_DEBUG(cellHash << " has " << neigHashes.size() << " neighbours in the eta direction !");
370  break;
371  }
372  }
373 }
374 
375 
376 
378  const CaloCell* phiNeigCell,
379  const CaloCellContainer& cellContainer,
380  xAOD::CaloClusterContainer* clusterContainer) const {
381 
382  xAOD::CaloCluster* shotCluster = CaloClusterStoreHelper::makeCluster(clusterContainer,&cellContainer);
383 
384  int maxDepth = (m_nCellsInEta - 1) / 2;
385 
386  std::vector<const CaloCell*> windowNeighbours = this->getEtaNeighbours(*cell, cellContainer, maxDepth);
387  if (phiNeigCell) {
388  std::vector<const CaloCell*> mergeCells = this->getEtaNeighbours(*phiNeigCell, cellContainer, maxDepth);
389  windowNeighbours.push_back(phiNeigCell);
390  windowNeighbours.insert(windowNeighbours.end(), mergeCells.begin(), mergeCells.end());
391  }
392 
393  shotCluster->getOwnCellLinks()->reserve(windowNeighbours.size()+1);
394  const IdentifierHash seedHash = cell->caloDDE()->calo_hash();
395  shotCluster->addCell(cellContainer.findIndex(seedHash), 1.);
396 
397  for (const CaloCell* cell : windowNeighbours) {
398  shotCluster->addCell(cellContainer.findIndex(cell->caloDDE()->calo_hash()), 1.0);
399  }
400 
401  CaloClusterKineHelper::calculateKine(shotCluster,true,true);
402 
403  return shotCluster;
404 }
405 
406 
407 
409 bool TauShotFinder::ptSort::operator()( const CaloCell* cell1, const CaloCell* cell2 ){
410  double pt1 = cell1->pt()*m_info.m_caloWeightTool->wtCell(cell1);
411  double pt2 = cell2->pt()*m_info.m_caloWeightTool->wtCell(cell2);
412  return pt1 > pt2;
413 }
414 
415 #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:105
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:101
TauShotFinder::executeShotFinder
virtual StatusCode executeShotFinder(xAOD::TauJet &pTau, xAOD::CaloClusterContainer &tauShotCaloClusContainer, xAOD::PFOContainer &tauShotPFOContainer) const override
Definition: TauShotFinder.cxx:32
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
constants.EMB1
int EMB1
Definition: Calorimeter/CaloClusterCorrection/python/constants.py:53
ReadCellNoiseFromCool.cell
cell
Definition: ReadCellNoiseFromCool.py:53
phi
Scalar phi() const
phi method
Definition: AmgMatrixBasePlugin.h:67
SG::ReadCondHandle
Definition: ReadCondHandle.h:40
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
CaloCellList::select
void select(double eta, double phi, double deta, double dphi)
Definition: CaloCellList.cxx:78
find
std::string find(const std::string &s)
return a remapped string
Definition: hcg.cxx:135
SG::ReadHandle::cptr
const_pointer_type cptr()
Dereference the pointer.
xAOD::TauJet_v3::eta
virtual double eta() const
The pseudorapidity ( ) of the particle.
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:377
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
TauShotFinder::m_caloMgrKey
SG::ReadCondHandleKey< CaloDetDescrManager > m_caloMgrKey
Definition: TauShotFinder.h:106
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:297
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:340
TauShotFinder::ptSort::ptSort
ptSort(const TauShotFinder &info)
Definition: TauShotFinder.cxx:408
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:100
LArNeighbours::nextInPhi
@ nextInPhi
Definition: LArNeighbours.h:13
xAOD::TauJet_v3::phi
virtual double phi() const
The azimuthal angle ( ) of the particle.
TauShotFinder::ptSort::operator()
bool operator()(const CaloCell *c1, const CaloCell *c2)
Definition: TauShotFinder.cxx:409
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:156
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
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)
xAOD::PFODetails::tauShots_seedHash
@ tauShots_seedHash
Definition: Event/xAOD/xAODPFlow/xAODPFlow/PFODefs.h:163
constants.EME1
int EME1
Definition: Calorimeter/CaloClusterCorrection/python/constants.py:55
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:275
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
TauShotFinder::selectCells
StatusCode selectCells(const xAOD::TauJet &tau, const CaloCellContainer &cellContainer, const CaloDetDescrManager *detMgr, 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:174
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:191
DataVector::push_back
value_type push_back(value_type pElem)
Add an element to the end of the collection.
SG::CondHandleKey::initialize
StatusCode initialize(bool used=true)
TauShotFinder::getEtaBin
int getEtaBin(float eta) const
Get eta bin.
Definition: TauShotFinder.cxx:136
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:103
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:325
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
CaloDetDescrManager
This class provides the client interface for accessing the detector description information common to...
Definition: CaloDetDescrManager.h:469
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
TauShotFinder::selectSeedCells
StatusCode selectSeedCells(const xAOD::TauJet &tau, const CaloCellContainer &cellContainer, const CaloDetDescrManager *detMgr, std::vector< const CaloCell * > &seedCells) const
Select the seed cells used to construct the shot Cells must sastisfy:
Definition: TauShotFinder.cxx:220
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
CaloCell_Base_ID::LAREM
@ LAREM
Definition: CaloCell_Base_ID.h:43
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:102
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