BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
EmcRecHit2Cluster.cxx
Go to the documentation of this file.
1//
2// Convert from Hit Map to Cluster Map
3//
4// Wang.Zhe 2004, 3, 29
5//
6#include <iostream>
7
8#include "EmcRec/EmcRecHit2Cluster.h"
9#include "EmcRec/EmcRecParameter.h"
10
11// Constructors and destructors
13
15
16void EmcRecHit2Cluster::Convert( const RecEmcHitMap& aHitMap, RecEmcClusterMap& aClusterMap ) {
17 RecEmcHitMap tHitMap, aBufferHitMap;
18 RecEmcHitMap::iterator pHitMap, pBufferHitMap;
19 tHitMap = aHitMap;
20
21 RecEmcID CellId;
22 RecEmcIDVector NearCell;
23 i_RecEmcIDVector pNearCell;
24
25 RecEmcCluster aCluster;
26
29
30 while ( !tHitMap.empty() )
31 {
32 double eCluster = 0; // total energy of a cluster
33 double emax = 0; // seed's energy of a cluster
34 RecEmcID idmax; // seed's id of a cluster
35
36 // Search a cluster.
37 pHitMap = tHitMap.begin();
38 aBufferHitMap[pHitMap->first] = pHitMap->second;
39 tHitMap.erase( pHitMap );
40 aCluster.Clear();
41 while ( !aBufferHitMap.empty() )
42 {
43 pBufferHitMap = aBufferHitMap.begin();
44 CellId = pBufferHitMap->first;
45 NearCell = nhb.GetNeighbors( CellId );
46 for ( pNearCell = NearCell.begin(); pNearCell != NearCell.end(); pNearCell++ )
47 {
48 pHitMap = tHitMap.find( *pNearCell );
49 if ( pHitMap != tHitMap.end() )
50 {
51 aBufferHitMap[pHitMap->first] = pHitMap->second;
52 tHitMap.erase( pHitMap );
53 }
54 }
55
56 // Find seed
57 if ( pBufferHitMap->second.getEnergy() > emax )
58 {
59 emax = pBufferHitMap->second.getEnergy();
60 idmax = pBufferHitMap->first;
61 }
62
63 eCluster += pBufferHitMap->second.getEnergy();
64 aCluster.Insert( pBufferHitMap->second );
65 aBufferHitMap.erase( pBufferHitMap );
66 }
67 // Now, done and save it.
68 if ( eCluster > Para.EThresholdCluster() )
69 {
70 aCluster.ClusterId( idmax );
71 aClusterMap[idmax] = aCluster;
72 // aClusterMap[aCluster.ClusterId()]=aCluster;
73 }
74 }
75}
map< RecEmcID, RecEmcCluster, less< RecEmcID > > RecEmcClusterMap
map< RecEmcID, RecEmcHit, less< RecEmcID > > RecEmcHitMap
void Convert(const RecEmcHitMap &aHitMap, RecEmcClusterMap &aClusterMap)
RecEmcIDVector GetNeighbors(const Identifier &id)
static EmcRecParameter & GetInstance()
double EThresholdCluster() const
void Insert(const RecEmcHit &aHit)
void ClusterId(const RecEmcID id)