00001 /* 00002 * TSTSHiterizer.cxx 00003 * 00004 * Created on: Jan 9, 2012 00005 * Author: isorokin 00006 */ 00007 00008 #include "TSTSHiterizer.h" 00009 00010 TSTSHiterizer::TSTSHiterizer( Int_t det ) 00011 { 00012 fDetector = det; 00013 fTimeTolerance = kDefTimeTolerance; 00014 } 00015 00016 TSTSHiterizer::~TSTSHiterizer() 00017 { 00018 } 00019 00020 00021 void TSTSHiterizer::ReconstructHits( Bool_t noTrigger ) 00022 { 00023 if( fClusters[0].size() < 2 ) return; 00024 if( fClusters[1].size() < 2 ) return; 00025 00026 Int_t oldestClusterSide = ( fClusters[0].front()->GetTime() < fClusters[1].front()->GetTime() ) ? 0 : 1; 00027 TSTSCluster* oldestCluster = fClusters[oldestClusterSide].front(); 00028 00029 Int_t oppositeSide = ! oldestClusterSide; 00030 00031 if( noTrigger ) { 00032 if( fClusters[oppositeSide].back()->GetTime() - oldestCluster->GetTime() <= 2 * fTimeTolerance ) return; 00033 } 00034 00035 std::deque<TSTSCluster*>::iterator matchClustIter = fClusters[oppositeSide].begin(); 00036 while( matchClustIter != fClusters[oppositeSide].end() ) 00037 { 00038 if( ( * matchClustIter )->GetTime() - oldestCluster->GetTime() <= fTimeTolerance ) { 00039 TSTSCluster* matchedClusters[2]; 00040 matchedClusters[oldestClusterSide] = new TSTSCluster(*oldestCluster); 00041 matchedClusters[oppositeSide] = new TSTSCluster( *(*matchClustIter) ); 00042 fHits.push_back( new TSTSHit( matchedClusters[0], matchedClusters[1] ) ); 00043 } 00044 matchClustIter++; 00045 } 00046 00047 delete fClusters[oldestClusterSide].front(); 00048 fClusters[oldestClusterSide].pop_front(); 00049 } 00050 00051 00052 TSTSHit * TSTSHiterizer::FetchHit( Bool_t noTrigger ) 00053 { 00054 ReconstructHits( noTrigger ); 00055 if( fHits.size() > 0 ) { 00056 TSTSHit* returnHit = new TSTSHit( *(fHits.front()) ); 00057 fHits.pop_front(); 00058 return returnHit; 00059 } 00060 return 0; 00061 } 00062 00063 void TSTSHiterizer::Clear() 00064 { 00065 while(!fHits.empty()) 00066 { 00067 TSTSHit* hit=fHits.front(); 00068 if(hit) delete hit; 00069 fHits.pop_front(); 00070 } 00071 for(int side=0;side<TSTSTopology::kNSides;++side){ 00072 while(!fClusters[side].empty()) 00073 { 00074 TSTSCluster* cluster=fClusters[side].front(); 00075 if(cluster) delete cluster; 00076 fClusters[side].pop_front(); 00077 } 00078 } 00079 00080 } 00081