00001 #include "RPCClusterizer.h" 00002 #include "RPCCluster.h" 00003 #include "RPCClusterContainer.h" 00004 00005 00006 RPCClusterizer::RPCClusterizer() 00007 { 00008 } 00009 00010 RPCClusterizer::~RPCClusterizer() 00011 { 00012 } 00013 00014 RPCClusterContainer 00015 RPCClusterizer::doAction(const RPCDigiCollection::Range& digiRange){ 00016 RPCClusterContainer cls; 00017 for (RPCDigiCollection::const_iterator digi = digiRange.first; 00018 digi != digiRange.second; 00019 digi++) { 00020 RPCCluster cl(digi->strip(),digi->strip(),digi->bx()); 00021 cls.insert(cl); 00022 } 00023 RPCClusterContainer clsNew =this->doActualAction(cls); 00024 return clsNew; 00025 } 00026 00027 RPCClusterContainer 00028 RPCClusterizer::doActualAction(RPCClusterContainer& initialclusters){ 00029 00030 RPCClusterContainer finalCluster; 00031 RPCCluster prev; 00032 00033 unsigned int j = 0; 00034 for(RPCClusterContainer::const_iterator i=initialclusters.begin(); 00035 i != initialclusters.end(); i++){ 00036 RPCCluster 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