00001
00002
00003
00004
00005
00006
00007
00008 #include <iostream>
00009
00010 #include "EmcRec/EmcRecSeedEThreshold.h"
00011
00012 EmcRecSeedEThreshold::EmcRecSeedEThreshold()
00013 {
00014 fEThresholdSeed=EmcRecParameter::GetInstance().EThresholdSeed();
00015 }
00016
00017 EmcRecSeedEThreshold::~EmcRecSeedEThreshold()
00018 {}
00019
00020 void EmcRecSeedEThreshold::Seed(const RecEmcCluster& aCluster,
00021 RecEmcIDVector& aMaxVec)
00022 {
00023 RecEmcHitMap::const_iterator ciHitMap;
00024 RecEmcHitMap::const_iterator ciNeigh;
00025 RecEmcHit aHit;
00026
00027 bool max;
00028
00029 RecEmcIDVector NeighVec;
00030 RecEmcIDVector::const_iterator ciNeighVec;
00031
00032 aMaxVec.clear();
00033
00034 vector<RecEmcHit> aHitVec,tmpHitVec;
00035 vector<RecEmcHit>::const_iterator ciHitVec;
00036
00037 EmcRecNeighbor nhb;
00038
00039 for(ciHitMap=aCluster.Begin();
00040 ciHitMap!=aCluster.End();
00041 ++ciHitMap) {
00042
00043
00044 max=true;
00045 aHit=ciHitMap->second;
00046
00047 if(aHit.getEnergy()>fEThresholdSeed) {
00048
00049 NeighVec.clear();
00050 NeighVec=nhb.GetNeighbors(aHit.getCellId());
00051
00052
00053 for(ciNeighVec=NeighVec.begin();
00054 ciNeighVec!=NeighVec.end();
00055 ++ciNeighVec) {
00056
00057 ciNeigh=aCluster.Find(*ciNeighVec);
00058 if(ciNeigh!=aCluster.End()) {
00059
00060 if(ciNeigh->second.getEnergy()>aHit.getEnergy()) {
00061 max=false;
00062 }
00063 }
00064 }
00065 } else {
00066 max=false;
00067 }
00068
00069
00070 for(ciHitVec=aHitVec.begin();
00071 ciHitVec!=aHitVec.end();
00072 ciHitVec++) {
00073 if(nhb.IsNeighbor(ciHitVec->getCellId(),aHit.getCellId())) {
00074 max=false;
00075 break;
00076 }
00077 }
00078
00079
00080 if(max==true) {
00081 aHitVec.push_back(aHit);
00082 }
00083
00084 }
00085
00086 sort(aHitVec.begin(),aHitVec.end(),greater<RecEmcHit>());
00087
00088 for(ciHitVec=aHitVec.begin();
00089 ciHitVec!=aHitVec.end();
00090 ciHitVec++) {
00091 aMaxVec.push_back(ciHitVec->getCellId());
00092 }
00093 }
00094