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