288 std::vector<HashCell> mySeedCells;
289 mySeedCells.reserve (200);
291 std::vector<HashCluster *> myHashClusters;
292 myHashClusters.reserve (20000);
294 std::vector<CaloTopoSplitterClusterCell *> allCellList;
295 allCellList.reserve (20000);
302 std::vector<int> hasLocalMaxVector;
303 hasLocalMaxVector.resize(clusColl->
size(),0);
304 int iClusterNumber = 0;
313 if (clusCollIter != clusCollIterEnd) {
314 clusterSize = (*clusCollIter)->clusterSize();
318 msg(MSG::ERROR) <<
"Can't get valid links to CaloCells (CaloClusterCellLink)!" <<
endmsg;
319 return StatusCode::FAILURE;
325 return StatusCode::SUCCESS;
329 for (; clusCollIter != clusCollIterEnd; ++clusCollIter, ++iClusterNumber ){
333 msg(MSG::ERROR) <<
"Can't get valid links to CaloCells (CaloClusterCellLink)!" <<
endmsg;
334 return StatusCode::FAILURE;
337 eTotOrig+=parentCluster->
e();
338 nTotOrig+=cellLinks->
size();
348 for(; cellIter != cellIterEnd; cellIter++ ){
351 const CaloCell* pCell = (*cellIter);
355 int caloSample =
m_calo_id->calo_sample(myId);
356 float signedRatio = 0;
357 bool is_secondary =
false;
369 signedRatio = pCell->
e();
379 signedRatio = -pCell->
e();
389 size_t myIndex=cellIter.
index();
394 signedRatio,parentCluster,
395 iClusterNumber,is_secondary);
398 if ( ctx.evt() == 0 &&
msgLvl(MSG::DEBUG)) {
399 msg(MSG::INFO) <<
" [ExtId|Id|SubDet|HashId|eta|phi|iParent|E]: "
400 <<
"[" <<
m_calo_id->show_to_string(myId,
nullptr,
'/')
403 <<
"|" << (
unsigned int)hashid
404 <<
"|" << pCell->
eta()
405 <<
"|" << pCell->
phi()
406 <<
"|" << iClusterNumber
407 <<
"|" << signedRatio
410 HashCell hashCell(tmpClusterCell);
411 HashCluster *tmpCluster =
412 new (tmpclus_pool.
allocate()) HashCluster (tmplist_pool);
414 tmpCluster->add(hashCell);
415 myHashClusters.push_back(tmpCluster);
416 allCellList.push_back(tmpClusterCell);
417 cellVector[(
unsigned int)hashid -
m_hashMin] = hashCell;
424 std::vector<IdentifierHash> theNeighbors;
425 theNeighbors.reserve(22);
426 std::vector<IdentifierHash> theSuperNeighbors;
427 theSuperNeighbors.reserve(22);
428 std::vector<IdentifierHash> theNNeighbors;
429 theNNeighbors.reserve(22);
430 std::vector<IdentifierHash> theCurrentNeighbors;
431 theCurrentNeighbors.reserve(88);
432 std::vector<IdentifierHash> theNextNeighbors;
433 theNextNeighbors.reserve(88);
436 std::vector<CaloTopoSplitterClusterCell*>::iterator allCellIter=allCellList.begin();
437 std::vector<CaloTopoSplitterClusterCell*>::iterator allCellIterEnd=allCellList.end();
438 for(;allCellIter != allCellIterEnd;++allCellIter) {
444 if(
m_absOpt) myEnergy=std::abs(myEnergy);
450 theNeighbors.clear();
452 for (
unsigned int iN=0;iN<theNeighbors.size();iN++) {
454 HashCell neighborCell = cellVector[(
unsigned int)nId -
m_hashMin];
456 if ( pNeighCell && pNeighCell->getParentClusterIndex() == iParent) {
458 if ( ((myEnergy > pNeighCell->getSignedRatio() ) && !
m_absOpt) ||
459 (
m_absOpt && myEnergy > std::abs(pNeighCell->getSignedRatio() ) ) ||
460 pNeighCell->getSecondary() ) {
464 if (std::abs(pNeighCell->getSignedRatio()) < myEnergy )
465 pNeighCell->setUsed();
475 mySeedCells.push_back(cellVector[(
unsigned int)hashid -
m_hashMin]);
476 hasLocalMaxVector[iParent]++;
482 std::vector<CaloTopoSplitterClusterCell *> myPotentialSecondarySeeds;
488 myPotentialSecondarySeeds.reserve(100);
492 allCellIter=allCellList.begin();
493 for(;allCellIter != allCellIterEnd;++allCellIter) {
499 if(
m_absOpt) myEnergy=std::abs(myEnergy);
506 theNeighbors.clear();
508 for (
unsigned int iN=0;iN<theNeighbors.size();iN++) {
510 HashCell neighborCell = cellVector[(
unsigned int)nId -
m_hashMin];
512 if ( pNeighCell && pNeighCell->getParentClusterIndex() == iParent) {
514 if ( std::abs(myEnergy) > std::abs(pNeighCell->getSignedRatio()) ) {
515 pNeighCell->setUsed();
527 myPotentialSecondarySeeds.push_back(pClusCell);
540 theCurrentNeighbors.clear();
541 theCurrentNeighbors.push_back(hashid);
542 while (
isLocalMax && !theCurrentNeighbors.empty() ) {
545 theNextNeighbors.clear();
546 for (
unsigned int iN=0;iN<theCurrentNeighbors.size()
548 theNeighbors.clear();
549 theSuperNeighbors.clear();
554 theNeighbors.insert(theNeighbors.end(),theSuperNeighbors.begin(),theSuperNeighbors.end());
555 for(
unsigned int iNN=0;iNN<theNeighbors.size() &&
isLocalMax;iNN++) {
557 std::vector<HashCell>::iterator hashCellIter;
558 std::vector<HashCell>::iterator hashCellIterEnd;
560 hashCellIter= mySeedCells.begin();
561 hashCellIterEnd=mySeedCells.end();
564 for(;hashCellIter!=hashCellIterEnd
566 if ( cellVector[(
unsigned int)nId -
m_hashMin]
576 bool doInclude(
true);
577 for(
unsigned int iNNN=0;iNNN<theNextNeighbors.size();iNNN++) {
578 if ( theNextNeighbors[iNNN] == theNeighbors[iNN] ) {
584 theNextNeighbors.push_back(theNeighbors[iNN]);
588 theCurrentNeighbors.swap (theNextNeighbors);
595 std::vector<IdentifierHash> theCurrentNeighbors;
596 std::vector<IdentifierHash> theNextNeighbors;
598 theCurrentNeighbors.push_back(hashid);
599 while (
isLocalMax && !theCurrentNeighbors.empty() ) {
602 theNextNeighbors.clear();
603 for (
unsigned int iN=0;iN<theCurrentNeighbors.size()
605 theNeighbors.clear();
606 theSuperNeighbors.clear();
611 theNeighbors.insert(theNeighbors.end(),theSuperNeighbors.begin(),theSuperNeighbors.end());
612 for(
unsigned int iNN=0;iNN<theNeighbors.size() &&
isLocalMax;iNN++) {
614 std::vector<HashCell>::iterator hashCellIter;
615 std::vector<HashCell>::iterator hashCellIterEnd;
617 hashCellIter= mySeedCells.begin();
618 hashCellIterEnd=mySeedCells.end();
621 for(;hashCellIter!=hashCellIterEnd
623 if ( cellVector[(
unsigned int)nId -
m_hashMin]
633 bool doInclude(
true);
634 for(
unsigned int iNNN=0;iNNN<theNextNeighbors.size();iNNN++) {
635 if ( theNextNeighbors[iNNN] == theNeighbors[iNN] ) {
641 theNextNeighbors.push_back(theNeighbors[iNN]);
645 theCurrentNeighbors.swap (theNextNeighbors);
651 mySeedCells.push_back(cellVector[(
unsigned int)hashid -
m_hashMin]);
652 hasLocalMaxVector[iParent]++;
658 allCellIter=allCellList.begin();
659 for(;allCellIter != allCellIterEnd;++allCellIter) {
660 (*allCellIter)->setUnused();
662 (*allCellIter)->setSignedRatio(itrCell->
e());
671 std::sort(myPotentialSecondarySeeds.begin(), myPotentialSecondarySeeds.end(), [&](
const auto &
a,
const auto & b) {
672 return compareEWithIndex(cellVector[(unsigned int)a->getID() - m_hashMin], cellVector[(unsigned int)b->getID() - m_hashMin]);
679 std::vector<bool> secondarySeedExclude(myPotentialSecondarySeeds.size(),
false);
681 for (
unsigned int i = 0; i < myPotentialSecondarySeeds.size(); ++i) {
691 theCurrentNeighbors.clear();
692 theCurrentNeighbors.push_back(hashid);
694 while (
isLocalMax && !theCurrentNeighbors.empty() ) {
696 theNextNeighbors.clear();
697 for (
const IdentifierHash & currentNeighbor : theCurrentNeighbors) {
699 theNeighbors.clear();
700 theSuperNeighbors.clear();
703 this->
m_calo_id->get_neighbours(currentNeighbor, opt_1, theNeighbors);
707 this->
m_calo_id->get_neighbours(currentNeighbor, opt_2, theSuperNeighbors);
710 theNeighbors.insert(theNeighbors.end(), theSuperNeighbors.begin(), theSuperNeighbors.end());
714 for (
const auto & seedCell: mySeedCells) {
715 if (cellVector[(
unsigned int)nId -
m_hashMin] == seedCell) {
720 for (
unsigned int j = 0; j < i; ++j) {
721 if (cellVector[(
unsigned int)nId -
m_hashMin] == myPotentialSecondarySeeds[j]) {
726 bool doInclude(
true);
729 if (nextNId == nId) {
736 theNextNeighbors.push_back(nId);
741 theCurrentNeighbors.swap (theNextNeighbors);
750 secondarySeedExclude[i] =
true;
754 for (
unsigned int i = 0; i < myPotentialSecondarySeeds.size(); ++i) {
758 if ( !secondarySeedExclude[i] ) {
759 mySeedCells.push_back(cellVector[(
unsigned int)hashid -
m_hashMin]);
760 hasLocalMaxVector[iParent]++;
766 std::vector<HashCell> sharedCellList;
767 std::vector<HashCell> nextSharedCellList;
769 std::vector<HashCell>::iterator hashCellIter;
770 std::vector<HashCell>::iterator hashCellIterEnd;
772 hashCellIter= mySeedCells.begin();
773 hashCellIterEnd=mySeedCells.end();
776 for(;hashCellIter!=hashCellIterEnd;++hashCellIter) {
777 hashCellIter->getCaloTopoTmpClusterCell()->setUsed();
778 HashCluster *myCluster = hashCellIter->getCaloTopoTmpClusterCell()->getCaloTopoTmpHashCluster();
779 myCluster->setContainsLocalMax();
788 auto compareE = [&,
this](
auto && ... ps) {
790 return compareEWithIndex(std::forward<
decltype(ps)>(ps)...);
793 return compareEOriginal(std::forward<
decltype(ps)>(ps)...);
797 std::sort(mySeedCells.begin(),mySeedCells.end(),compareE);
799 if (
msgLvl(MSG::DEBUG)) {
800 hashCellIter= mySeedCells.begin();
801 hashCellIterEnd=mySeedCells.end();
804 for(;hashCellIter!=hashCellIterEnd;++hashCellIter) {
805 msg(MSG::DEBUG) <<
" SeedCell ["
806 << hashCellIter->getCaloTopoTmpClusterCell()->getSubDet()
808 << (
unsigned int)hashCellIter->getCaloTopoTmpClusterCell()->getID()
810 << hashCellIter->getCaloTopoTmpClusterCell()->getSignedRatio()
815 std::vector<HashCell> myNextCells;
816 myNextCells.reserve (4096);
817 while ( !mySeedCells.empty() ) {
820 hashCellIter= mySeedCells.begin();
821 hashCellIterEnd=mySeedCells.end();
824 for(;hashCellIter!=hashCellIterEnd;++hashCellIter) {
833 theNeighbors.clear();
846 if ( ctx.evt() == 0 &&
msgLvl(MSG::DEBUG)) {
849 msg(MSG::DEBUG) <<
" Cell [" << mySubDet <<
"|"
850 << (
unsigned int)hashid <<
"|"
851 <<
m_calo_id->show_to_string(myId,
nullptr,
'/')
852 <<
"] has " << theNeighbors.size() <<
" neighbors:"
856 for (
unsigned int iN=0;iN<theNeighbors.size();iN++) {
857 otherSubDet =
m_calo_id->sub_calo(theNeighbors[iN]);
859 if ( ctx.evt() == 0 &&
msgLvl(MSG::DEBUG)) {
862 msg(MSG::DEBUG) <<
" NeighborCell [" << otherSubDet <<
"|"
863 << (
unsigned int) nId <<
"|"
865 theNNeighbors.clear();
867 bool foundId (
false);
869 for (
unsigned int iNN=0;iNN<theNNeighbors.size();iNN++) {
870 nOtherSubDet =
m_calo_id->sub_calo(theNNeighbors[iNN]);
871 if (nOtherSubDet == ((
int)(mySubDet)) &&
872 theNNeighbors[iNN] == hashid) {
879 msg(MSG::ERROR) <<
" Cell [" << mySubDet <<
"|"
880 << (
unsigned int)hashid <<
"|"
881 <<
m_calo_id->show_to_string(myId,
nullptr,
'/')
882 <<
"] has bad neighbor cell[";
885 msg() << otherSubDet <<
"|" << nId <<
"|"
886 <<
m_calo_id->show_to_string(myId,
nullptr,
'/')
890 HashCell neighborCell = cellVector[(
unsigned int)nId -
m_hashMin];
892 if ( pNCell && pNCell->getParentClusterIndex() == iParent && !pNCell->getShared() ) {
894 HashCluster *otherCluster = pNCell->getCaloTopoTmpHashCluster();
895 if ( !pNCell->getUsed() ) {
897 myNextCells.push_back(neighborCell);
905 std::vector<HashCell>::iterator nextCellIter = myNextCells.begin();
906 bool isRemoved(
false);
911 while ( !isRemoved && nextCellIter != myNextCells.end() ) {
912 if ( (*nextCellIter) == neighborCell ) {
913 nextCellIter = myNextCells.erase(nextCellIter);
921 pNCell->setSecondCaloTopoTmpHashCluster(myCluster);
922 nextSharedCellList.push_back(neighborCell);
923 otherCluster->remove(neighborCell);
927 if ( myCluster != otherCluster ) {
928 HashCluster *toKill = otherCluster;
929 HashCluster *toKeep = myCluster;
931 if ( !toKill->getContainsLocalMax() && toKill->size() == 1) {
939 HashCluster::iterator clusCellIter=toKill->begin();
940 HashCluster::iterator clusCellIterEnd = toKill->end();
941 for(;clusCellIter!=clusCellIterEnd;++clusCellIter) {
942 clusCellIter->setCaloTopoTmpHashCluster(toKeep);
944 toKeep->add(*toKill);
950 toKeep->add(neighborCell);
951 pNCell->setCaloTopoTmpHashCluster(toKeep);
957 mySeedCells.swap (myNextCells);
960 std::sort(mySeedCells.begin(),mySeedCells.end(),compareE);
963 std::sort(nextSharedCellList.begin(),nextSharedCellList.end(),compareE);
964 if (sharedCellList.empty())
965 sharedCellList.swap (nextSharedCellList);
967 sharedCellList.insert(sharedCellList.end(),
968 nextSharedCellList.begin(),
969 nextSharedCellList.end());
971 nextSharedCellList.clear();
981 mySeedCells = sharedCellList;
982 while ( !mySeedCells.empty() ) {
986 hashCellIter= mySeedCells.begin();
987 hashCellIterEnd=mySeedCells.end();
990 for(;hashCellIter!=hashCellIterEnd;++hashCellIter) {
1000 theNeighbors.clear();
1013 if ( ctx.evt() == 0 &&
msgLvl(MSG::DEBUG)) {
1016 msg(MSG::DEBUG) <<
" Shared Cell [" << mySubDet <<
"|"
1017 << (
unsigned int)hashid <<
"|"
1018 <<
m_calo_id->show_to_string(myId,
nullptr,
'/')
1019 <<
"] has " << theNeighbors.size() <<
" neighbors:"
1023 for (
unsigned int iN=0;iN<theNeighbors.size();iN++) {
1024 otherSubDet =
m_calo_id->sub_calo(theNeighbors[iN]);
1026 if (ctx.evt() == 0 &&
msgLvl(MSG::DEBUG)) {
1029 msg(MSG::DEBUG) <<
" NeighborCell [" << otherSubDet <<
"|"
1030 << (
unsigned int) nId <<
"|"
1031 <<
m_calo_id->show_to_string(myId,
nullptr,
'/') <<
"]"
1033 theNNeighbors.clear();
1035 bool foundId (
false);
1037 for (
unsigned int iNN=0;iNN<theNNeighbors.size();iNN++) {
1038 nOtherSubDet =
m_calo_id->sub_calo(theNNeighbors[iNN]);
1039 if (nOtherSubDet == ((
int)(mySubDet)) &&
1040 theNNeighbors[iNN] == hashid)
1048 msg(MSG::ERROR) <<
" Shared Cell [" << mySubDet <<
"|"
1049 << (
unsigned int)hashid <<
"|"
1050 <<
m_calo_id->show_to_string(myId,
nullptr,
'/')
1051 <<
"] has bad neighbor cell[";
1054 msg() << otherSubDet <<
"|" << nId <<
"|"
1055 <<
m_calo_id->show_to_string(myId,
nullptr,
'/')
1059 HashCell neighborCell = cellVector[(
unsigned int)nId -
m_hashMin];
1061 if ( pNCell && pNCell->getParentClusterIndex() == iParent && !pNCell->getShared() && !pNCell->getUsed() ) {
1063 HashCluster *otherCluster = pNCell->getCaloTopoTmpHashCluster();
1066 if ( myCluster != otherCluster && mySecondCluster != otherCluster) {
1068 pNCell->setShared();
1069 myNextCells.push_back(neighborCell);
1070 sharedCellList.push_back(neighborCell);
1072 otherCluster->removeAll();
1073 pNCell->setCaloTopoTmpHashCluster(myCluster);
1074 pNCell->setSecondCaloTopoTmpHashCluster(mySecondCluster);
1079 mySeedCells.swap (myNextCells);
1082 std::sort(mySeedCells.begin(),mySeedCells.end(),compareE);
1099 hashCellIter= sharedCellList.begin();
1100 hashCellIterEnd=sharedCellList.end();
1101 for(;hashCellIter!=hashCellIterEnd;++hashCellIter) {
1107 if ( e1 <= 0 ) e1 = 1*
MeV;
1108 if ( e2 <= 0 ) e2 = 1*
MeV;
1113 double d1 = (thisPos-c1).
mag();
1114 double d2 = (thisPos-c2).
mag();
1124 const double real_r_exp =
r > 10. ? 10. :
r < -10. ? -10. :
r;
1125 const double real_r = exp(real_r_exp);
1126 const double r_reverse = exp(-real_r_exp);
1127 const double weight = e1/(e1 + e2 * real_r);
1128 const double reverse_weight = e2 / (e2 + e1 * r_reverse);
1152 hashCellIter= sharedCellList.begin();
1153 hashCellIterEnd=sharedCellList.end();
1154 for(;hashCellIter!=hashCellIterEnd;++hashCellIter) {
1158 firstCluster->
add(*hashCellIter);
1159 secondCluster->add(*hashCellIter);
1161 nShared = sharedCellList.size();
1168 std::vector<std::unique_ptr<CaloProtoCluster> > myCaloClusters;
1169 myCaloClusters.reserve (500);
1170 std::vector<std::unique_ptr<CaloProtoCluster> > myRestClusters;
1171 myRestClusters.resize(clusColl->
size());
1172 std::vector<HashCluster *>::iterator hashClusIter = myHashClusters.begin();
1173 std::vector<HashCluster *>::iterator hashClusIterEnd=myHashClusters.end();
1174 for (;hashClusIter!=hashClusIterEnd;++hashClusIter) {
1175 HashCluster * tmpCluster = (*hashClusIter);
1176 if ( (
m_useGPUCriteria && tmpCluster->getContainsLocalMax()) || tmpCluster->size() > 1 ) {
1191 std::unique_ptr<CaloProtoCluster> myCluster = std::make_unique<CaloProtoCluster>(myCellCollLink);
1192 ATH_MSG_DEBUG(
"[CaloCluster@" << myCluster.get() <<
"] created in <myCaloClusters>.");
1193 HashCluster::iterator clusCellIter=tmpCluster->begin();
1194 HashCluster::iterator clusCellIterEnd=tmpCluster->end();
1195 myCluster->getCellLinks()->reserve(tmpCluster->size());
1196 for(;clusCellIter!=clusCellIterEnd;++clusCellIter) {
1199 double myWeight = itrCell.
weight();
1203 if (shared_weight < 0.) {
1205 myWeight *= 1.0 + shared_weight;
1207 myWeight *= -shared_weight;
1211 myWeight *= shared_weight;
1213 myWeight *= 1.0 - shared_weight;
1223 myCluster->addCell(itrCell.
index(),myWeight);
1225 ATH_MSG_DEBUG(
"[CaloCluster@" << myCluster.get() <<
"] size: " << myCluster->size());
1226 myCaloClusters.push_back(std::move(myCluster));
1228 else if ( tmpCluster->size() == 1 ) {
1233 if ( hasLocalMaxVector[tmpCluster->getParentClusterIndex()]) {
1237 if (!myRestClusters[tmpCluster->getParentClusterIndex()]) {
1238 myRestClusters[tmpCluster->getParentClusterIndex()] = std::make_unique<CaloProtoCluster>(myCellColl);
1240 ATH_MSG_DEBUG(
"[CaloCluster@" << myRestClusters[tmpCluster->getParentClusterIndex()].get()
1241 <<
"] created in <myRestClusters>");
1242 myRestClusters[tmpCluster->getParentClusterIndex()]->getCellLinks()->reserve(tmpCluster->size());
1243 HashCluster::iterator clusCellIter=tmpCluster->begin();
1244 HashCluster::iterator clusCellIterEnd=tmpCluster->end();
1245 for(;clusCellIter!=clusCellIterEnd;++clusCellIter) {
1248 const double myWeight = itrCell.
weight();
1249 myRestClusters[tmpCluster->getParentClusterIndex()]->addCell(itrCell.
index(),myWeight);
1251 ATH_MSG_DEBUG(
"[CaloCluster@" << myRestClusters[tmpCluster->getParentClusterIndex()].get()
1252 <<
"] size: " << myRestClusters[tmpCluster->getParentClusterIndex()]->size());
1260 clusCollIter = clusColl->
begin();
1261 for (; clusCollIter != clusCollIterEnd; ++clusCollIter,++iClusterNumber){
1263 if ( !hasLocalMaxVector[iClusterNumber] ) {
1264 myCaloClusters.push_back(std::make_unique<CaloProtoCluster>(parentCluster->
getCellLinks()));
1265 ATH_MSG_DEBUG(
"[CaloProtoCluster@" << myCaloClusters.back().get() <<
"] with "
1266 << myCaloClusters.back()->size() <<
"cells cloned from "
1267 << parentCluster <<
" with " << parentCluster->
size() <<
" cells");
1269 else if (myRestClusters[iClusterNumber]) {
1271 <<
"] pushed into <myCaloClusters> with "
1272 << myRestClusters[iClusterNumber]->
size() <<
" cells");
1273 myCaloClusters.push_back(std::move(myRestClusters[iClusterNumber]));
1277 std::sort(myCaloClusters.begin(),myCaloClusters.end(),[](
const std::unique_ptr<CaloProtoCluster>& pc1,
1278 const std::unique_ptr<CaloProtoCluster>& pc2) {
1281 volatile double et1(pc1->et());
1282 volatile double et2(pc2->et());
1287 if (
msgLvl(MSG::DEBUG))
msg(MSG::DEBUG) <<
"erase " << clusColl->
size() <<
" clusters";
1290 clusColl->
reserve (myCaloClusters.size());
1296 for(
const auto& protoCluster : myCaloClusters) {
1297 auto xAODClusterUP = std::make_unique<xAOD::CaloCluster>();
1299 xAODCluster->
addCellLink(protoCluster->releaseCellLinks());
1302 ATH_MSG_DEBUG(
"CaloCluster@" << xAODCluster <<
" pushed into "
1303 <<
"CaloClusterContainer@" << clusColl);
1306 <<
"->size() = " << clusColl->
size());
1308 <<
" MeV, Et = " << xAODCluster->
et()
1309 <<
" MeV, NCells = " << xAODCluster->
size());
1310 eTot+=xAODCluster->
e();
1311 nTot+=xAODCluster->
size();
1313 if ( std::abs(xAODCluster->
e()) > eMax )
1314 eMax = std::abs(xAODCluster->
e());
1317 <<
" MeV, NCells = " << nTot
1318 <<
" (including NShared = " << nShared <<
" twice)");
1320 if ( std::abs(eTot) > eMax )
1321 eMax = std::abs(eTot);
1322 if ( std::abs(eTot-eTotOrig)>0.001*eMax ){
1323 msg(MSG::WARNING) <<
"Energy sum for split Clusters = " << eTot <<
" MeV does not equal original sum = " << eTotOrig <<
" MeV !" <<
endmsg;
1325 if ( abs(nTot-nShared-nTotOrig) > 0 ) {
1326 msg(MSG::ERROR) <<
"Cell sum for split Clusters does not equal original sum!" <<
endmsg;
1329 tmpcell_pool.
erase();
1330 tmpclus_pool.
erase();
1332 return StatusCode::SUCCESS;