37 std::map<int, std::map<int, std::vector<o2::emcal::Hit>>> hitsPerTowerPerParticleID;
40 std::unordered_map<Int_t, std::vector<LabeledDigit>> digitsPerTower;
42 for (
auto hit : hits) {
43 hitsPerTowerPerParticleID[hit.GetDetectorID()][hit.GetTrackID()].push_back(hit);
46 std::vector<o2::emcal::Hit> SHits;
47 for (
auto [towerID, hitsParticle] : hitsPerTowerPerParticleID) {
48 for (
auto [partID, Hits] : hitsParticle) {
49 o2::emcal::Hit SHit = std::accumulate(std::next(Hits.begin()), Hits.end(), Hits.front());
50 SHits.push_back(SHit);
54 for (
auto hit : SHits) {
57 Int_t tower = hit.GetDetectorID();
59 if (tower < 0 || tower > mGeometry->
GetNCells()) {
60 LOG(warning) <<
"tower index out of range: " << tower;
64 Double_t energy = hit.GetEnergyLoss();
67 Digit digit(tower, energy, hit.GetTime());
69 MCLabel label(hit.GetTrackID(), mCurrEvID, mCurrSrcID,
false, 1.0);
71 label.setAmplitudeFraction(0);
75 digitsPerTower[tower].push_back(d);
78 LOG(error) <<
"Error in creating the digit: " << e.
what();
82 std::vector<LabeledDigit> digitsVector;
85 for (
auto [towerID, labeledDigits] : digitsPerTower) {
87 o2::emcal::LabeledDigit Sdigit = std::accumulate(std::next(labeledDigits.begin()), labeledDigits.end(), labeledDigits.front());
93 digitsVector.push_back(Sdigit);
96 digitsPerTower.clear();