00020 {
00021 RecEmcHitMap tHitMap,aBufferHitMap;
00022 RecEmcHitMap::iterator pHitMap,pBufferHitMap;
00023 tHitMap=aHitMap;
00024
00025 RecEmcID CellId;
00026 RecEmcIDVector NearCell;
00027 i_RecEmcIDVector pNearCell;
00028
00029 RecEmcCluster aCluster;
00030
00031 EmcRecParameter& Para=EmcRecParameter::GetInstance();
00032
00033 while(!tHitMap.empty())
00034 {
00035 double eCluster=0;
00036 double emax=0;
00037 RecEmcID idmax;
00038
00039
00040 pHitMap=tHitMap.begin();
00041 aBufferHitMap[pHitMap->first]=pHitMap->second;
00042 tHitMap.erase(pHitMap);
00043 aCluster.Clear();
00044 while(!aBufferHitMap.empty())
00045 {
00046 pBufferHitMap=aBufferHitMap.begin();
00047 CellId=pBufferHitMap->first;
00048 NearCell=EmcRecNeighbor::GetNeighbors(CellId);
00049 for(pNearCell=NearCell.begin();
00050 pNearCell!=NearCell.end();
00051 pNearCell++)
00052 {
00053 pHitMap=tHitMap.find(*pNearCell);
00054 if(pHitMap!=tHitMap.end())
00055 {
00056 aBufferHitMap[pHitMap->first]=pHitMap->second;
00057 tHitMap.erase(pHitMap);
00058 }
00059 }
00060
00061
00062 if(pBufferHitMap->second.getEnergy()>emax) {
00063 emax=pBufferHitMap->second.getEnergy();
00064 idmax=pBufferHitMap->first;
00065 }
00066
00067 eCluster+=pBufferHitMap->second.getEnergy();
00068 aCluster.Insert(pBufferHitMap->second);
00069 aBufferHitMap.erase(pBufferHitMap);
00070 }
00071
00072 if(eCluster>Para.EThresholdCluster())
00073 {
00074 aCluster.ClusterId(idmax);
00075 aClusterMap[idmax]=aCluster;
00076
00077 }
00078 }
00079
00080 }