From e9ad69c36491eeabddddcd724d32fb3d9fd80494 Mon Sep 17 00:00:00 2001 From: scott snyder <snyder@bnl.gov> Date: Thu, 3 Dec 2020 04:12:03 +0100 Subject: [PATCH] LArRecUtils: Use EL variant to addUniqueCellNoKine. Use the ElementLink variant of addUniqueCellNoKine to try to reduce lock contention. --- .../src/LArFCalTowerBuilderTool.cxx | 19 ++++++++++--------- .../LArRecUtils/src/LArFCalTowerBuilderTool.h | 6 +++--- 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/LArCalorimeter/LArRecUtils/src/LArFCalTowerBuilderTool.cxx b/LArCalorimeter/LArRecUtils/src/LArFCalTowerBuilderTool.cxx index 16111c89338..60a29da2467 100644 --- a/LArCalorimeter/LArRecUtils/src/LArFCalTowerBuilderTool.cxx +++ b/LArCalorimeter/LArRecUtils/src/LArFCalTowerBuilderTool.cxx @@ -60,7 +60,7 @@ StatusCode LArFCalTowerBuilderTool::initializeTool(){ inline void LArFCalTowerBuilderTool::addTower (const tower_iterator& t, - const CaloCellContainer* cells, + const ElementLink<CaloCellContainer>& cellsEL, CaloTower* tower) const { LArFCalTowerStore::cell_iterator firstC = m_cellStore.firstCellofTower(t); @@ -68,6 +68,7 @@ LArFCalTowerBuilderTool::addTower (const tower_iterator& t, // here get needed size of this vector and use it to reserve tower size. int ts= m_cellStore.towerSize(t); double wsumE = tower->getBasicEnergy(); // this is not 0 since some towers already have cells from other calos. + const CaloCellContainer* cells = cellsEL.getDataPtr(); for (; firstC != lastC; ++firstC) { unsigned int ci = firstC->first; @@ -79,7 +80,7 @@ LArFCalTowerBuilderTool::addTower (const tower_iterator& t, // get weights if (cellPtr) { wsumE += weightC * cellPtr->e(); // Summ up weighted energies . - tower->addUniqueCellNoKine(cells, cndx, weightC, ts); // add cells to tower. + tower->addUniqueCellNoKine(cellsEL, cndx, weightC, ts); // add cells to tower. } } tower->setE(wsumE); // update tower kinematics. @@ -89,7 +90,7 @@ LArFCalTowerBuilderTool::addTower (const tower_iterator& t, inline void LArFCalTowerBuilderTool::iterateFull (CaloTowerContainer* towers, - const CaloCellContainer* cells) const + const ElementLink<CaloCellContainer>& cellsEL) const { size_t sz = towers->size(); assert(m_cellStore.size() == sz); @@ -97,7 +98,7 @@ LArFCalTowerBuilderTool::iterateFull (CaloTowerContainer* towers, for (unsigned int t = 0; t < sz; ++t, ++tower_it) { CaloTower* aTower = towers->getTower(t); - addTower (tower_it, cells, aTower); + addTower (tower_it, cellsEL, aTower); } } @@ -105,7 +106,7 @@ LArFCalTowerBuilderTool::iterateFull (CaloTowerContainer* towers, inline void LArFCalTowerBuilderTool::iterateSubSeg (CaloTowerContainer* towers, - const CaloCellContainer* cells, + const ElementLink<CaloCellContainer>& cellsEL, const CaloTowerSeg::SubSeg* subseg) const { size_t sz = towers->size(); @@ -114,7 +115,7 @@ LArFCalTowerBuilderTool::iterateSubSeg (CaloTowerContainer* towers, for (unsigned int t = 0; t < sz; ++t, ++tower_it) { CaloTower* aTower = towers->getTower(tower_it.itower()); - addTower (tower_it, cells, aTower); + addTower (tower_it, cellsEL, aTower); } } @@ -154,11 +155,11 @@ LArFCalTowerBuilderTool::execute(CaloTowerContainer* theTowers, // register this calorimeter theTowers->setCalo(m_caloIndex); - + const ElementLink<CaloCellContainer> cellsEL (*theCells, 0); if (subseg) - iterateSubSeg (theTowers, theCells, subseg); + iterateSubSeg (theTowers, cellsEL, subseg); else - iterateFull (theTowers, theCells); + iterateFull (theTowers, cellsEL); return StatusCode::SUCCESS; } diff --git a/LArCalorimeter/LArRecUtils/src/LArFCalTowerBuilderTool.h b/LArCalorimeter/LArRecUtils/src/LArFCalTowerBuilderTool.h index b15765434b1..306a3f0bd73 100644 --- a/LArCalorimeter/LArRecUtils/src/LArFCalTowerBuilderTool.h +++ b/LArCalorimeter/LArRecUtils/src/LArFCalTowerBuilderTool.h @@ -72,12 +72,12 @@ private: typedef LArFCalTowerStore::tower_iterator tower_iterator; void addTower (const tower_iterator& t, - const CaloCellContainer* cells, + const ElementLink<CaloCellContainer>& cellsEL, CaloTower* tower) const; void iterateFull (CaloTowerContainer* towers, - const CaloCellContainer* cells) const; + const ElementLink<CaloCellContainer>& cellsEL) const; void iterateSubSeg (CaloTowerContainer* towers, - const CaloCellContainer* cells, + const ElementLink<CaloCellContainer>& cellsEL, const CaloTowerSeg::SubSeg* subseg) const; -- GitLab