20 return StatusCode::FAILURE;
23 std::map<unsigned int, double> barcodeTruePtMap;
26 for (
const auto *thisCaloCell : *theCellLinks){
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;
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());
47 if (
iterator != barcodeTruePtMap.end()) barcodeTruePtMap[
barcode] += thisCalHitTruthEnergy;
48 else barcodeTruePtMap[
barcode] = thisCalHitTruthEnergy;
55 std::vector<std::pair<unsigned int, double > > barcodeTruePtPairs;
57 barcodeTruePtPairs.reserve(barcodeTruePtMap.size());
58 for (
const auto& thisEntry : barcodeTruePtMap) barcodeTruePtPairs.emplace_back(thisEntry);
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;} );
64 if (numTruthParticles > barcodeTruePtPairs.size()) numTruthParticles = barcodeTruePtPairs.size();
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() );
69 return StatusCode::SUCCESS;