00001 #include "GEMClusterizer.h" 00002 #include "GEMCluster.h" 00003 #include "GEMClusterContainer.h" 00004 00005 00006 GEMClusterizer::GEMClusterizer() 00007 { 00008 } 00009 00010 GEMClusterizer::~GEMClusterizer() 00011 { 00012 } 00013 00014 GEMClusterContainer 00015 GEMClusterizer::doAction(const GEMDigiCollection::Range& digiRange){ 00016 GEMClusterContainer cls; 00017 for (GEMDigiCollection::const_iterator digi = digiRange.first; 00018 digi != digiRange.second; 00019 digi++) { 00020 GEMCluster cl(digi->strip(),digi->strip(),digi->bx()); 00021 cls.insert(cl); 00022 } 00023 GEMClusterContainer clsNew =this->doActualAction(cls); 00024 return clsNew; 00025 } 00026 00027 GEMClusterContainer 00028 GEMClusterizer::doActualAction(GEMClusterContainer& initialclusters){ 00029 00030 GEMClusterContainer finalCluster; 00031 GEMCluster prev; 00032 00033 unsigned int j = 0; 00034 for(GEMClusterContainer::const_iterator i=initialclusters.begin(); 00035 i != initialclusters.end(); i++){ 00036 GEMCluster cl = *i; 00037 00038 if(i==initialclusters.begin()){ 00039 prev = cl; 00040 j++; 00041 if(j == initialclusters.size()){ 00042 finalCluster.insert(prev); 00043 } 00044 else if(j < initialclusters.size()){ 00045 continue; 00046 } 00047 } 00048 00049 if(prev.isAdjacent(cl)) { 00050 prev.merge(cl); 00051 j++; 00052 if(j == initialclusters.size()){ 00053 finalCluster.insert(prev); 00054 } 00055 } 00056 else { 00057 j++; 00058 if(j < initialclusters.size()){ 00059 finalCluster.insert(prev); 00060 prev = cl; 00061 } 00062 if(j == initialclusters.size()){ 00063 finalCluster.insert(prev); 00064 finalCluster.insert(cl); 00065 } 00066 } 00067 } 00068 00069 return finalCluster; 00070 } 00071 00072