|
ATLAS Offline Software
|
#include <PFSubtractionTool.h>
|
ToolHandle< IEFlowCellEOverPTool > | m_theEOverPTool {this, "eflowCellEOverPTool", "eflowCellEOverPTool", "Energy Flow E/P Values and Shower Parameters Tool"} |
| Tool for getting e/p values and hadronic shower cell ordering principle parameters. More...
|
|
std::unique_ptr< eflowEEtaBinnedParameters > | m_binnedParameters |
|
std::unique_ptr< PFMatch::TrackEtaPhiInFixedLayersProvider > | m_trkpos |
| Track position provider to be used to preselect clusters. More...
|
|
ToolHandle< PFTrackClusterMatchingTool > | m_theMatchingTool {this, "PFTrackClusterMatchingTool", "PFTrackClusterMatchingTool/CalObjBldMatchingTool", "The track-cluster matching tool"} |
| Default track-cluster matching tool. More...
|
|
ToolHandle< PFTrackClusterMatchingTool > | m_theMatchingToolForPull_015 {this, "PFTrackClusterMatchingTool_015", "PFTrackClusterMatchingTool/PFPullMatchingTool_015", "The 0.15 track-cluster matching tool to calculate the pull"} |
|
ToolHandle< PFTrackClusterMatchingTool > | m_theMatchingToolForPull_02 {this, "PFTrackClusterMatchingTool_02", "PFTrackClusterMatchingTool/PFPullMatchingTool_02", "The 0.2 track-cluster matching tool to calculate the pull"} |
|
Gaudi::Property< bool > | m_recoverSplitShowers {this,"RecoverSplitShowers",false,"Toggle whether we are recovering split showers or not"} |
| Toggle whether we are recovering split showers or not. More...
|
|
Gaudi::Property< int > | m_nClusterMatchesToUse {this, "nClusterMatchesToUse", 1, "Number of clusters to match to each track"} |
| Number of clusters to match to each track if not doing recover split shower subtraction. More...
|
|
Gaudi::Property< bool > | m_isHLLHC {this, "isHLLHC", false, "Toggle whether we have the HLLHC setup"} |
| Toggle whether we have the HLLHC setup. More...
|
|
Gaudi::Property< bool > | m_calcEOverP {this, "CalcEOverP", false, "Toggle EOverP algorithm mode, whereby no charged shower subtraction is performed"} |
| Toggle EOverP algorithm mode, whereby no charged shower subtraction is performed. More...
|
|
Gaudi::Property< double > | m_consistencySigmaCut {this, "ConsistencySigmaCut", 1.0, "Parameter that controls whether a track, in a track-cluster system, will be processed by the split shower recovery algorithm"} |
| Parameter that controls whether a track, in a track-cluster system, will be processed by the split shower recovery algorithm. More...
|
|
Gaudi::Property< double > | m_subtractionSigmaCut {this, "SubtractionSigmaCut", 1.5, "Parameter that controls whether to use retain remaining calorimeter energy in track-cluster system, after charged shower subtraction"} |
| Parameter that controls whether to use retain remaining calorimeter energy in track-cluster system, after charged shower subtraction. More...
|
|
Gaudi::Property< bool > | m_addCPData {this,"addCPData",false,"Toggle whether to decorate FlowElements with addutional data for Combined Performance studies "} |
| Toggle whether to decorate eflowRecTrack with addutional data for Combined Performance studies. More...
|
|
PFCalcRadialEnergyProfiles | m_pfCalc {} |
|
PFSubtractionStatusSetter | m_pfSubtractionStatusSetter {} |
|
PFSubtractionEnergyRatioCalculator | m_pfSubtractionEnergyRatioCalculator {} |
|
eflowSubtract::Subtractor | m_subtractor {} |
|
ToolHandle< PFEnergyPredictorTool > | m_NNEnergyPredictorTool {this, "NNEnergyPredictorTool", "","Tool for getting predictiing the energy using an ONNX model "} |
| Tool for getting predictiing the energy using an ONNX model. More...
|
|
Gaudi::Property< bool > | m_useNNEnergy {this, "useNNEnergy", false, "Toggle whether we use the neural net energy"} |
| Toggle whether we use the neural net energy. More...
|
|
Gaudi::Property< bool > | m_useLegacyEBinIndex {this, "useLegacyEBinIndex", true, "Toggle whether we use the legacy energy bin index"} |
| Further discussion about why this flag exists can be found in https://its.cern.ch/jira/browse/ATLJETMET-1692 and https://indico.cern.ch/event/1388633/contributions/5837876/attachments/2809591/4903439/PFlow_EOverP_Feb2024.pdf The Jira report discusses assorted problems with the treatment of energy bin indexes for the lookup of e/p values. More...
|
|
Definition at line 33 of file PFSubtractionTool.h.
◆ PFSubtractionTool()
PFSubtractionTool::PFSubtractionTool |
( |
const std::string & |
type, |
|
|
const std::string & |
name, |
|
|
const IInterface * |
parent |
|
) |
| |
◆ ~PFSubtractionTool()
PFSubtractionTool::~PFSubtractionTool |
( |
| ) |
|
|
default |
◆ canAnnihilate()
bool PFSubtractionTool::canAnnihilate |
( |
double |
expectedEnergy, |
|
|
double |
sigma, |
|
|
double |
clusterEnergy |
|
) |
| const |
|
private |
◆ execute()
◆ finalize()
StatusCode PFSubtractionTool::finalize |
( |
| ) |
|
◆ initialize()
StatusCode PFSubtractionTool::initialize |
( |
| ) |
|
Definition at line 23 of file PFSubtractionTool.cxx.
33 ATH_MSG_ERROR(
"Failed to get TrackPositionProvider for cluster preselection!");
34 return StatusCode::FAILURE;
49 return StatusCode::SUCCESS;
◆ isEOverPFail()
bool PFSubtractionTool::isEOverPFail |
( |
double |
expectedEnergy, |
|
|
double |
sigma, |
|
|
double |
clusterEnergy |
|
) |
| const |
|
private |
Definition at line 419 of file PFSubtractionTool.cxx.
421 if ((expectedEnergy == 0) && (clusterEnergy > 0))
return false;
◆ matchAndCreateEflowCaloObj()
unsigned int PFSubtractionTool::matchAndCreateEflowCaloObj |
( |
PFData & |
data | ) |
const |
|
private |
This matches ID tracks and CaloClusters, and then creates eflowCaloObjects.
No point to do anything if e/p reference bin does not exist
Add cluster matches needed for pull calculation (in eflowCaloObject::simulateShowers) which is used to determine whether to run the charged shower subtraction or not. / Clusters in both a cone of 0.15 and 0.2 are needed for this. / The clusters in a cone of 0.2 are also used as the matched cluster list for recover split showers mode.
Start loop from nCaloObj, which should be zero on a first pass
Definition at line 83 of file PFSubtractionTool.cxx.
86 unsigned int nMatches(0);
89 const unsigned int nCaloObj =
data.caloObjects->size();
90 const EventContext &ctx = Gaudi::Hive::currentContext();
93 for (
auto *thisEfRecTrack :
data.tracks)
96 if (!thisEfRecTrack->hasBin()) {
97 std::unique_ptr<eflowCaloObject> thisEflowCaloObject = std::make_unique<eflowCaloObject>();
98 thisEflowCaloObject->
addTrack(thisEfRecTrack);
99 data.caloObjects->push_back(std::move(thisEflowCaloObject));
109 std::vector<eflowTrackClusterLink*> bestClusters;
110 std::vector<float> deltaRPrime;
118 for (
auto &matchpair : bestClusters_02)
121 float distancesq = matchpair.second;
123 if (distancesq < 0.15 * 0.15)
127 thisEfRecTrack->addAlternativeClusterMatch(trackClusterLink,
"cone_015");
129 thisEfRecTrack->addAlternativeClusterMatch(trackClusterLink,
"cone_02");
134 for (
auto thePair : matchedClusters) {
136 if (
m_addCPData) deltaRPrime.push_back(std::sqrt(thePair.second));
140 const std::vector<eflowTrackClusterLink*>* matchedClusters_02 = thisEfRecTrack->getAlternativeClusterMatches(
"cone_02");
141 if (!matchedClusters_02)
continue;
142 else bestClusters = *matchedClusters_02;
145 if (bestClusters.empty())
continue;
149 for (
auto *thisClusterLink : bestClusters ) {
151 ATH_MSG_DEBUG(
"Matched this track to cluster with e,pt, eta and phi " << thisCluster->
e() <<
", " << thisCluster->
pt() <<
", " << thisCluster->
eta() <<
" and " << thisCluster->
phi());
159 for (
auto *trkClusLink : bestClusters){
165 if (
std::find(
data.clusters.begin(),
data.clusters.end(), trkClusLink->getCluster()) ==
data.clusters.end()) {
172 thisEfRecTrack->addClusterMatch(trackClusterLink);
180 std::vector<eflowRecCluster *>
clusters(
data.clusters.begin(),
data.clusters.end());
183 ATH_MSG_DEBUG(
"Created " << nCaloObjects <<
" eflowCaloObjects.");
185 for (
auto thisEFlowCaloObject : *(
data.caloObjects)){
186 ATH_MSG_DEBUG(
"This eflowCaloObject has " << thisEFlowCaloObject->nTracks() <<
" tracks and " << thisEFlowCaloObject->nClusters() <<
" clusters ");
187 for (
unsigned int count = 0;
count < thisEFlowCaloObject->nTracks();
count++){
189 ATH_MSG_DEBUG(
"Have track with e, pt, eta and phi of " << thisTrack->
e() <<
", " << thisTrack->
pt() <<
", " << thisTrack->
eta() <<
" and " << thisTrack->
phi());
191 for (
unsigned int count = 0;
count < thisEFlowCaloObject->nClusters();
count++){
193 ATH_MSG_DEBUG(
"Have cluster with e, pt, eta and phi of " << thisCluster->
e() <<
", " << thisCluster->
pt() <<
", " << thisCluster->
eta() <<
" and " << thisCluster->
phi());
198 const double gaussianRadius = 0.032;
199 const double gaussianRadiusError = 1.0e-3;
200 const double maximumRadiusSigma = 3.0;
208 for (
unsigned int iCalo = nCaloObj; iCalo <
data.caloObjects->size(); ++iCalo) {
214 else return nCaloObj;
◆ performSubtraction() [1/2]
void PFSubtractionTool::performSubtraction |
( |
const unsigned int & |
startingPoint, |
|
|
PFData & |
data |
|
) |
| const |
|
private |
Definition at line 217 of file PFSubtractionTool.cxx.
218 unsigned int nEFCaloObs =
data.caloObjects->size();
219 for (
unsigned int iCalo = startingPoint; iCalo < nEFCaloObs; ++iCalo) {
◆ performSubtraction() [2/2]
void PFSubtractionTool::performSubtraction |
( |
eflowCaloObject & |
thisEflowCaloObject | ) |
const |
|
private |
Definition at line 225 of file PFSubtractionTool.cxx.
229 unsigned int nClusters = thisEflowCaloObject.
nClusters();
230 unsigned int nTrackMatches = thisEflowCaloObject.
nTracks();
232 ATH_MSG_DEBUG(
"Have got an eflowCaloObject with " << nClusters <<
" clusters and " << nTrackMatches <<
" track matches");
235 for (
unsigned int iTrack = 0; iTrack < nTrackMatches; ++iTrack){
245 if (nTrackMatches < 1)
return;
253 if (
isEOverPFail(expectedEnergy, expectedSigma, clusterEnergy))
return;
256 const std::vector<std::pair<eflowTrackClusterLink *, std::pair<float, float>>> &matchedTrackList = thisEflowCaloObject.
efRecLink();
258 ATH_MSG_DEBUG(
"Matched Track List has size " << matchedTrackList.size());
262 for (
unsigned int iTrack = 0; iTrack < nTrackMatches; ++iTrack)
265 ATH_MSG_DEBUG(
"eflowCaloObject has track match with E, pt and eta " << thisTrack->
e() <<
", " << thisTrack->
pt() <<
" and " << thisTrack->
eta());
269 ATH_MSG_DEBUG(
"About to perform subtraction for this eflowCaloObject");
271 bool wasAnnihilated =
false;
276 if (
canAnnihilate(expectedEnergy, expectedSigma, clusterEnergy)){
278 wasAnnihilated =
true;
280 std::vector<std::pair<xAOD::CaloCluster *, bool>> clusterList;
281 std::map<xAOD::CaloCluster *, double> clusterEnergyMap;
282 unsigned nCluster = thisEflowCaloObject.
nClusters();
283 for (
unsigned iCluster = 0; iCluster < nCluster; ++iCluster){
287 ATH_MSG_DEBUG(
"We are going to annihilate. ExpectedEnergy, expectedSigma and clusterEnergy are " << expectedEnergy <<
", " << expectedSigma <<
" and " << clusterEnergy);
289 for (
auto thisPair : clusterList)
290 ATH_MSG_DEBUG(
"Annihilating cluster with E and eta " << thisPair.first->e() <<
" and " << thisPair.first->eta());
293 Subtractor::annihilateClusters(clusterList);
296 for (
auto thisPair : clusterList)
297 ATH_MSG_DEBUG(
"Have Annihilated cluster with E and eta " << thisPair.first->e() <<
" and " << thisPair.first->eta());
300 for (
unsigned iTrack = 0; iTrack < thisEflowCaloObject.
nTracks(); ++iTrack){
301 eflowRecTrack *thisEfRecTrack = (matchedTrackList[iTrack].first)->getTrack();
309 for (
unsigned iTrack = 0; iTrack < thisEflowCaloObject.
nTracks(); ++iTrack){
316 if (!thisEfRecTrack->
hasBin())
continue;
322 ATH_MSG_DEBUG(
"Am not in dense environment for this eflowCaloObject");
325 std::vector<eflowRecCluster *> matchedClusters;
327 matchedClusters.reserve(
links.size());
328 for (
auto* thisEFlowTrackClusterLink :
links)
329 matchedClusters.push_back(thisEFlowTrackClusterLink->getCluster());
332 matchedClusters.end(),
336 for (
auto* thisClus : matchedClusters)
338 "Haved matched cluster "
339 << thisClus->getCluster()->index() <<
" with e,pt, eta and phi of "
340 << thisClus->getCluster()->e() <<
", "
341 << thisClus->getCluster()->pt() <<
", "
342 << thisClus->getCluster()->eta() <<
" and "
343 << thisClus->getCluster()->phi() <<
" will be subtracted");
347 std::vector<std::pair<xAOD::CaloCluster *, bool>> clusterSubtractionList;
348 clusterSubtractionList.reserve(matchedClusters.size());
349 std::map<xAOD::CaloCluster *, double> clusterEnergyMap;
350 for (
auto *thisEFlowRecCluster : matchedClusters){
352 clusterSubtractionList.emplace_back(thisCluster,
false);
353 clusterEnergyMap[thisCluster] = thisCluster->
e();
356 ATH_MSG_DEBUG(
"Have filled clusterSubtractionList for this eflowCaloObject");
358 unsigned int trackIndex = thisEfRecTrack->
getTrack()->
index();
361 auto sumClusEnergy = [](
double accumulator, std::pair<xAOD::CaloCluster *, bool> thisPair){
return accumulator += thisPair.first->e();};
362 double totalClusterEnergy =
std::accumulate(clusterSubtractionList.begin(),clusterSubtractionList.end(),0.0,sumClusEnergy);
368 for (
auto thisPair : clusterSubtractionList)
369 ATH_MSG_DEBUG(
"Annihilating cluster with E and eta " << thisPair.first->e() <<
" and " << thisPair.first->eta());
371 Subtractor::annihilateClusters(clusterSubtractionList);
374 std::vector<std::pair<float, float>> clusterSubtractedEnergyRatios;
385 totalClusterEnergy =
std::accumulate(clusterSubtractionList.begin(),clusterSubtractionList.end(),0.0,sumClusEnergy);
391 for (
auto thisPair : clusterSubtractionList){
392 ATH_MSG_DEBUG(
"Annihilating remnant cluster with E and eta " << thisPair.first->e() <<
" and " << thisPair.first->eta());
396 std::vector<std::pair<float, float>> clusterSubtractedEnergyRatios;
402 std::vector<std::pair<float, float>> clusterSubtractedEnergyRatios;
409 ATH_MSG_DEBUG(
"Have subtracted charged shower for this eflowRecTrack");
◆ printAllClusters()
Definition at line 442 of file PFSubtractionTool.cxx.
444 for (
const auto *thisEFRecCluster : recClusterContainer){
445 if (thisEFRecCluster->getTrackMatches().empty()) {
449 std::vector<eflowTrackClusterLink*> theTrackLinks = thisEFRecCluster->getTrackMatches();
450 for (
auto *thisTrack : theTrackLinks){
◆ printCluster()
◆ printTrack()
◆ m_addCPData
Gaudi::Property<bool> PFSubtractionTool::m_addCPData {this,"addCPData",false,"Toggle whether to decorate FlowElements with addutional data for Combined Performance studies "} |
|
private |
◆ m_binnedParameters
◆ m_calcEOverP
Gaudi::Property<bool> PFSubtractionTool::m_calcEOverP {this, "CalcEOverP", false, "Toggle EOverP algorithm mode, whereby no charged shower subtraction is performed"} |
|
private |
Toggle EOverP algorithm mode, whereby no charged shower subtraction is performed.
Definition at line 85 of file PFSubtractionTool.h.
◆ m_consistencySigmaCut
Gaudi::Property<double> PFSubtractionTool::m_consistencySigmaCut {this, "ConsistencySigmaCut", 1.0, "Parameter that controls whether a track, in a track-cluster system, will be processed by the split shower recovery algorithm"} |
|
private |
Parameter that controls whether a track, in a track-cluster system, will be processed by the split shower recovery algorithm.
Definition at line 88 of file PFSubtractionTool.h.
◆ m_isHLLHC
Gaudi::Property<bool> PFSubtractionTool::m_isHLLHC {this, "isHLLHC", false, "Toggle whether we have the HLLHC setup"} |
|
private |
◆ m_nClusterMatchesToUse
Gaudi::Property<int> PFSubtractionTool::m_nClusterMatchesToUse {this, "nClusterMatchesToUse", 1, "Number of clusters to match to each track"} |
|
private |
Number of clusters to match to each track if not doing recover split shower subtraction.
Definition at line 79 of file PFSubtractionTool.h.
◆ m_NNEnergyPredictorTool
ToolHandle<PFEnergyPredictorTool> PFSubtractionTool::m_NNEnergyPredictorTool {this, "NNEnergyPredictorTool", "","Tool for getting predictiing the energy using an ONNX model "} |
|
private |
◆ m_pfCalc
◆ m_pfSubtractionEnergyRatioCalculator
◆ m_pfSubtractionStatusSetter
◆ m_recoverSplitShowers
Gaudi::Property<bool> PFSubtractionTool::m_recoverSplitShowers {this,"RecoverSplitShowers",false,"Toggle whether we are recovering split showers or not"} |
|
private |
Toggle whether we are recovering split showers or not.
Definition at line 76 of file PFSubtractionTool.h.
◆ m_subtractionSigmaCut
Gaudi::Property<double> PFSubtractionTool::m_subtractionSigmaCut {this, "SubtractionSigmaCut", 1.5, "Parameter that controls whether to use retain remaining calorimeter energy in track-cluster system, after charged shower subtraction"} |
|
private |
Parameter that controls whether to use retain remaining calorimeter energy in track-cluster system, after charged shower subtraction.
Definition at line 91 of file PFSubtractionTool.h.
◆ m_subtractor
◆ m_theEOverPTool
ToolHandle<IEFlowCellEOverPTool> PFSubtractionTool::m_theEOverPTool {this, "eflowCellEOverPTool", "eflowCellEOverPTool", "Energy Flow E/P Values and Shower Parameters Tool"} |
|
private |
Tool for getting e/p values and hadronic shower cell ordering principle parameters.
Definition at line 61 of file PFSubtractionTool.h.
◆ m_theMatchingTool
◆ m_theMatchingToolForPull_015
◆ m_theMatchingToolForPull_02
◆ m_trkpos
◆ m_useLegacyEBinIndex
Gaudi::Property<bool> PFSubtractionTool::m_useLegacyEBinIndex {this, "useLegacyEBinIndex", true, "Toggle whether we use the legacy energy bin index"} |
|
private |
◆ m_useNNEnergy
Gaudi::Property<bool> PFSubtractionTool::m_useNNEnergy {this, "useNNEnergy", false, "Toggle whether we use the neural net energy"} |
|
private |
The documentation for this class was generated from the following files:
This class extends the information about a xAOD::CaloCluster.
virtual double phi() const
The azimuthal angle ( ) of the particle.
virtual double pt() const override final
The transverse momentum ( ) of the particle.
unsigned nClusters() const
char data[hepevt_bytes_allocation_ATLAS]
void subtractTracksFromClusters(eflowRecTrack *efRecTrack, std::vector< std::pair< xAOD::CaloCluster *, bool >> &clusterSubtractionList) const
double getExpectedEnergy() const
This class calculates the LHED (Layer of Highest Energy Density) in a cluster or group of clusters.
const std::vector< std::pair< eflowTrackClusterLink *, std::pair< float, float > > > & efRecLink() const
std::string find(const std::string &s)
return a remapped string
bool isInDenseEnvironment() const
static void fillClustersToRecover(PFData &data)
void addTrackMatch(eflowTrackClusterLink *trackMatch)
void calculateSubtractedEnergyRatios(const std::vector< std::pair< xAOD::CaloCluster *, bool >> &clusterSubtractionList, std::map< xAOD::CaloCluster *, double > &clusterEnergyMap, std::vector< std::pair< float, float >> &clusterSubtractedEnergyRatios) const
For each xAOD::CaloCluster in clusterSubtractionList we calculate the ratio of new to old energy afte...
virtual double eta() const override final
The pseudorapidity ( ) of the particle.
void markAllTracksAnnihStatus(eflowCaloObject &thisEflowCaloObject) const
Set the ratio of new to old cluster energy, to zero, for all cluster matched to all tracks attached t...
bool accumulate(AccumulateMap &map, std::vector< module_t > const &modules, FPGATrackSimMatrixAccumulator const &acc)
Accumulates an accumulator (e.g.
An internal EDM object which stores information about systems of associated tracks and calorimeter cl...
Stores pointers to an eflowRecTrack and an eflowRecCluster.
static std::unique_ptr< IPositionProvider > Get(const std::string &positionType)
double getExpectedVariance() const
void addTrack(eflowRecTrack *track)
This class extends the information about a xAOD::Track.
const std::vector< eflowTrackClusterLink * > & getClusterMatches() const
Description of a calorimeter cluster.
const eflowRecTrack * efRecTrack(int i) const
virtual double eta() const
The pseudorapidity ( ) of the particle.
bool isSubtracted() const
void calculate(const PFData &data) const
void markSubtractionStatus(const std::vector< std::pair< xAOD::CaloCluster *, bool >> &clusterList, std::vector< std::pair< float, float >> &clusterSubtractedEnergyRatios, eflowCaloObject &thisEflowCaloObject, unsigned int trackIndex) const
Set the ratio of new to old cluster energy for each cluster matched to a track with trackIndex.
void calculateSubtractedEnergyRatiosForAnnih(const std::vector< std::pair< xAOD::CaloCluster *, bool >> &clusterSubtractionList, std::map< xAOD::CaloCluster *, double > &clusterEnergyMap, std::vector< std::pair< float, float >> &clusterSubtractedEnergyRatios) const
If we have decided to annihiliate all clusters in clusterSubtractionList we use this function to set ...
double getEExpect() const
MsgStream & msg() const
The standard message stream.
xAOD::CaloCluster * getCluster()
size_t index() const
Return the index of this element within its container.
eflowCellSubtractionFacilitator m_facilitator
static eflowTrackClusterLink * getInstance(eflowRecTrack *track, eflowRecCluster *cluster, const EventContext &ctx=Gaudi::Hive::currentContext())
virtual double pt() const
The transverse momentum ( ) of the particle (negative for negative-energy clusters)
const xAOD::TrackParticle * getTrack() const
static unsigned int makeTrkCluCaloObjects(eflowRecTrackContainer *eflowTrackContainer, eflowRecClusterContainer *eflowClusterContainer, eflowCaloObjectContainer *caloObjectContainer)
static void fillClustersToConsider(PFData &data, eflowRecClusterContainer &recClusterContainer)
virtual double e() const override final
The total energy of the particle.
static void fillTracksToConsider(PFData &data, eflowRecTrackContainer &recTrackContainer)
void simulateShower(eflowLayerIntegrator *integrator, const eflowEEtaBinnedParameters *binnedParameters, bool useUpdated2015ChargedShowerSubtraction, const PFEnergyPredictorTool *energyP, bool useLegacyEnergyBinIndexing)
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.
#define ATH_MSG_WARNING(x)
const eflowRecCluster * efRecCluster(int i) const
double getVarEExpect() const
double getClusterEnergy() const
@ linkIndex
link index for multiple track and vertex matches
Class describing a TrackParticle.
static void fillTracksToRecover(PFData &data)
virtual double e() const
The total energy of the particle.
virtual double phi() const override final
The azimuthal angle ( ) of the particle (has range to .)
static void annihilateClusters(std::vector< std::pair< xAOD::CaloCluster *, bool >> &clusters)