BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
EmcRecSeedEThreshold.cxx
Go to the documentation of this file.
1//
2// Seed finder
3// 1. local max (the same with EmcRecSeedLocalMax)
4// 2. energy of hit > EThresholdSeed
5//
6// Zhe Wang 2004, 8, 31
7//
8#include <iostream>
9
10#include "EmcRec/EmcRecSeedEThreshold.h"
11
15
17
18void EmcRecSeedEThreshold::Seed( const RecEmcCluster& aCluster, RecEmcIDVector& aMaxVec ) {
19 RecEmcHitMap::const_iterator ciHitMap;
20 RecEmcHitMap::const_iterator ciNeigh;
21 RecEmcHit aHit;
22
23 bool max;
24
25 RecEmcIDVector NeighVec;
26 RecEmcIDVector::const_iterator ciNeighVec;
27
28 aMaxVec.clear();
29
30 vector<RecEmcHit> aHitVec, tmpHitVec;
31 vector<RecEmcHit>::const_iterator ciHitVec;
32
34
35 for ( ciHitMap = aCluster.Begin(); ciHitMap != aCluster.End(); ++ciHitMap )
36 {
37 //++++++++++++++++++++++++++++++++++++++++++++++++++
38 // prepare a hit
39 max = true;
40 aHit = ciHitMap->second;
41
42 if ( aHit.getEnergy() > fEThresholdSeed )
43 {
44 // prepare its neighbours
45 NeighVec.clear();
46 NeighVec = nhb.GetNeighbors( aHit.getCellId() );
47
48 // to see if it is energy max
49 for ( ciNeighVec = NeighVec.begin(); ciNeighVec != NeighVec.end(); ++ciNeighVec )
50 {
51 // find it
52 ciNeigh = aCluster.Find( *ciNeighVec );
53 if ( ciNeigh != aCluster.End() )
54 {
55 // largest!!!
56 if ( ciNeigh->second.getEnergy() > aHit.getEnergy() ) { max = false; }
57 }
58 }
59 }
60 else { max = false; }
61
62 // avoid 2 equal neighbor seeds
63 for ( ciHitVec = aHitVec.begin(); ciHitVec != aHitVec.end(); ciHitVec++ )
64 {
65 if ( nhb.IsNeighbor( ciHitVec->getCellId(), aHit.getCellId() ) )
66 {
67 max = false;
68 break;
69 }
70 }
71
72 // once max hit is found
73 if ( max == true ) { aHitVec.push_back( aHit ); }
74 //++++++++++++++++++++++++++++++++++++++++++++++++++
75 }
76
77 sort( aHitVec.begin(), aHitVec.end(), greater<RecEmcHit>() );
78
79 for ( ciHitVec = aHitVec.begin(); ciHitVec != aHitVec.end(); ciHitVec++ )
80 { aMaxVec.push_back( ciHitVec->getCellId() ); }
81}
#define max(a, b)
RecEmcIDVector GetNeighbors(const Identifier &id)
bool IsNeighbor(const Identifier &id1, const Identifier &id2)
static EmcRecParameter & GetInstance()
double EThresholdSeed() const
virtual void Seed(const RecEmcCluster &aCluster, RecEmcIDVector &aMaxVec)
RecEmcHitMap::const_iterator Find(const RecEmcID &CellId) const
RecEmcHitMap::const_iterator Begin() const
RecEmcHitMap::const_iterator End() const