ATLAS Offline Software
Public Member Functions | Private Attributes | List of all members
CaloCalibClusterTruthAttributerTool Class Reference

Concrete tool that calculates calibration hit truth energies in xAOD::CaloCluster. More...

#include <CaloCalibClusterTruthAttributerTool.h>

Inheritance diagram for CaloCalibClusterTruthAttributerTool:
Collaboration diagram for CaloCalibClusterTruthAttributerTool:

Public Member Functions

 CaloCalibClusterTruthAttributerTool (const std::string &type, const std::string &name, const IInterface *parent)
 
virtual ~CaloCalibClusterTruthAttributerTool ()
 
virtual StatusCode calculateTruthEnergies (const xAOD::CaloCluster &theCaloCluster, unsigned int numTruthParticles, const std::map< Identifier, std::vector< const CaloCalibrationHit * > > &identifierToCaloHitMap, std::vector< std::pair< unsigned int, double > > &barcodeTrueCalHitEnergy) const override
 This calculates the truth energies of N leading truth particles in a topocluster. More...
 

Private Attributes

Gaudi::Property< bool > m_fullTruthEnergy {this,"storeFullTruthEnergy",false,"Toggle storage of invisible and escaped energy"}
 Toggle storage of invisible and escaped energy - by default this is false, and hence we do not store the invisible or escaped calibration hit truth (ctt) energy. More...
 

Detailed Description

Concrete tool that calculates calibration hit truth energies in xAOD::CaloCluster.

Definition at line 13 of file CaloCalibClusterTruthAttributerTool.h.

Constructor & Destructor Documentation

◆ CaloCalibClusterTruthAttributerTool()

CaloCalibClusterTruthAttributerTool::CaloCalibClusterTruthAttributerTool ( const std::string &  type,
const std::string &  name,
const IInterface *  parent 
)

Definition at line 7 of file CaloCalibClusterTruthAttributerTool.cxx.

7  : base_class(type,name,parent) {
8 }

◆ ~CaloCalibClusterTruthAttributerTool()

CaloCalibClusterTruthAttributerTool::~CaloCalibClusterTruthAttributerTool ( )
virtualdefault

Member Function Documentation

◆ calculateTruthEnergies()

StatusCode CaloCalibClusterTruthAttributerTool::calculateTruthEnergies ( const xAOD::CaloCluster theCaloCluster,
unsigned int  numTruthParticles,
const std::map< Identifier, std::vector< const CaloCalibrationHit * > > &  identifierToCaloHitMap,
std::vector< std::pair< unsigned int, double > > &  barcodeTrueCalHitEnergy 
) const
overridevirtual

This calculates the truth energies of N leading truth particles in a topocluster.

Definition at line 12 of file CaloCalibClusterTruthAttributerTool.cxx.

12  {
13 
14  ATH_MSG_DEBUG("In calculateTruthEnergies");
15 
16  const CaloClusterCellLink* theCellLinks = theCaloCluster.getCellLinks();
17 
18  if (!theCellLinks) {
19  ATH_MSG_ERROR("A CaloCluster has no CaloClusterCellLinks");
20  return StatusCode::FAILURE;
21  }
22 
23  std::map<unsigned int, double> barcodeTruePtMap;
24 
25  //Loop on calorimeter cells to sum up the truth energies of the truth particles.
26  for (const auto *thisCaloCell : *theCellLinks){
27 
28  if (!thisCaloCell){
29  ATH_MSG_WARNING("Have invalid pointer to CaloCell");
30  continue;
31  }
32 
33  //get the unique calorimeter cell identifier
34  Identifier cellID = thisCaloCell->ID();
35 
36  //look up the calibration hit that corresponds to this calorimeter cell - we use find because not all calorimeter cells will have calibration hits
37  std::map<Identifier,std::vector<const CaloCalibrationHit*> >::const_iterator identifierToCaloHitMapIterator = identifierToCaloHitMap.find(cellID);
38  if (identifierToCaloHitMap.end() == identifierToCaloHitMapIterator) continue;
39  std::vector<const CaloCalibrationHit*> theseCalibrationHits = (*identifierToCaloHitMapIterator).second;
40 
41  for (const auto *thisCalibrationHit : theseCalibrationHits){
42  unsigned int barcode = thisCalibrationHit->particleID();
43  double thisCalHitTruthEnergy = thisCalibrationHit->energyEM() + thisCalibrationHit->energyNonEM();
44  if (true == m_fullTruthEnergy) thisCalHitTruthEnergy += (thisCalibrationHit->energyEscaped() + thisCalibrationHit->energyInvisible());
45 
46  auto iterator = barcodeTruePtMap.find(barcode);
47  if (iterator != barcodeTruePtMap.end()) barcodeTruePtMap[barcode] += thisCalHitTruthEnergy;
48  else barcodeTruePtMap[barcode] = thisCalHitTruthEnergy;
49 
50  }//calibration hit loop
51 
52  }//loop on calorimeter cells to sum up truth energies
53 
54  //now create a vector with the same information as the map, which we can then sort
55  std::vector<std::pair<unsigned int, double > > barcodeTruePtPairs;
56 
57  barcodeTruePtPairs.reserve(barcodeTruePtMap.size());
58  for (const auto& thisEntry : barcodeTruePtMap) barcodeTruePtPairs.emplace_back(thisEntry);
59 
60  //sort vector by calibration hit truth energy
61  std::sort(barcodeTruePtPairs.begin(),barcodeTruePtPairs.end(),[]( std::pair<unsigned int, double> a, std::pair<unsigned int, double> b) -> bool {return a.second > b.second;} );
62 
63  //store the barcode and truth energy of the top numTruthParticles truth particles
64  if (numTruthParticles > barcodeTruePtPairs.size()) numTruthParticles = barcodeTruePtPairs.size();
65  for ( unsigned int counter = 0; counter < numTruthParticles; counter++) barcodeTrueCalHitEnergy.push_back(barcodeTruePtPairs[counter]);
66 
67  for (const auto& thisPair : barcodeTrueCalHitEnergy) ATH_MSG_DEBUG("Truncated loop 2: barcode and true energy are " << thisPair.first << " and " << thisPair.second << " for cluster with e, eta of " << theCaloCluster.e() << " and " << theCaloCluster.eta() );
68 
69  return StatusCode::SUCCESS;
70 
71 }

Member Data Documentation

◆ m_fullTruthEnergy

Gaudi::Property<bool> CaloCalibClusterTruthAttributerTool::m_fullTruthEnergy {this,"storeFullTruthEnergy",false,"Toggle storage of invisible and escaped energy"}
private

Toggle storage of invisible and escaped energy - by default this is false, and hence we do not store the invisible or escaped calibration hit truth (ctt) energy.

Hence only the EM and nonEM truth ctt energy is stored by default

Definition at line 28 of file CaloCalibClusterTruthAttributerTool.h.


The documentation for this class was generated from the following files:
xAOD::iterator
JetConstituentVector::iterator iterator
Definition: JetConstituentVector.cxx:68
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
xAOD::CaloCluster_v1::eta
virtual double eta() const
The pseudorapidity ( ) of the particle.
Definition: CaloCluster_v1.cxx:251
Identifier
Definition: DetectorDescription/Identifier/Identifier/Identifier.h:32
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
HepMC::barcode
int barcode(const T *p)
Definition: Barcode.h:16
test_pyathena.parent
parent
Definition: test_pyathena.py:15
xAOD::CaloCluster_v1::getCellLinks
const CaloClusterCellLink * getCellLinks() const
Get a pointer to the CaloClusterCellLink object (const version)
Definition: CaloCluster_v1.cxx:905
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:195
plotBeamSpotMon.b
b
Definition: plotBeamSpotMon.py:77
a
TList * a
Definition: liststreamerinfos.cxx:10
std::sort
void sort(typename std::reverse_iterator< DataModel_detail::iterator< DVL > > beg, typename std::reverse_iterator< DataModel_detail::iterator< DVL > > end, const Compare &comp)
Specialization of sort for DataVector/List.
Definition: DVL_algorithms.h:623
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
python.CaloScaleNoiseConfig.type
type
Definition: CaloScaleNoiseConfig.py:78
test_pyathena.counter
counter
Definition: test_pyathena.py:15
CaloCalibClusterTruthAttributerTool::m_fullTruthEnergy
Gaudi::Property< bool > m_fullTruthEnergy
Toggle storage of invisible and escaped energy - by default this is false, and hence we do not store ...
Definition: CaloCalibClusterTruthAttributerTool.h:28
xAOD::CaloCluster_v1::e
virtual double e() const
The total energy of the particle.
Definition: CaloCluster_v1.cxx:265