00001 #ifndef TSTSCLUSTERIZER_H 00002 #define TSTSCLUSTERIZER_H 00003 00004 #include <vector> 00005 #include <deque> 00006 #include "Rtypes.h" 00007 #include "TSTSCluster.h" 00008 #include "TSTSTopology.h" 00009 00010 class TSTSClusterizer { 00011 protected: 00012 Long64_t fTimeTolerance; // [ns] if delta time < or = fkTimeTolerance then ==> same cluster 00013 Int_t fSpaceTolerance; // [strips], if delta channel < or = fkSpaceTolerance ==> same cluster 00014 Long64_t fTimeWindow; // [ns] 00015 00016 static const Long64_t kDefTimeTolerance = 50; 00017 static const Int_t kDefSpaceTolerance = 1; 00018 static const Long64_t kDefTimeWindow = 5000; 00019 Int_t fDetector; 00020 Int_t fSide; 00021 std::deque<TSTSDigi> fDigis; 00022 Long64_t fLatestDigiTime; 00023 void CheckTimeWindowSufficient( const TSTSDigi & newDigi ); 00024 void CheckTimeWindowGtTimeTol(); 00025 Bool_t Match( const TSTSDigi & digi1, const TSTSDigi & digi2 ) const; 00026 Bool_t Match( const TSTSCluster & cluster, const TSTSDigi & digi ) const; 00027 void MoveDigiToCluster( TSTSCluster & cluster, const std::deque<TSTSDigi>::iterator & itDigi ); 00028 void InsertDigiSorted( TSTSDigi const & digi ); 00029 Bool_t IsDigiBufferFilled( Bool_t noTrigger ) const; 00030 void PrintBuffer() const; 00031 00032 public: 00033 TSTSClusterizer( Int_t det = 0, Int_t side = 0 ); 00034 virtual ~TSTSClusterizer(); 00035 void FeedDigi( TSTSDigi const & digi ); 00036 Bool_t FetchCluster( Bool_t noTriggers, TSTSCluster & cluster ); // When noTrigger is kFALSE, has to be called only when all Digis are fed! 00037 Int_t GetDetector() const { return fDetector; } 00038 Int_t GetSide() const { return fSide; } 00039 void SetDetector( Int_t det ) { fDetector = det; } 00040 void SetSide( Int_t side ) { fSide = side; } 00041 void SetTimeTolerance( Long64_t timeTolerance ); 00042 void SetSpaceTolerance( Int_t spaceTolerance ) { fSpaceTolerance = spaceTolerance; } 00043 void SetTimeWindow( Long64_t timeWindow ); 00044 Long64_t GetTimeWindow() const { return fTimeWindow; } 00045 UInt_t GetBufferSize() const {return fDigis.size();} 00046 ClassDef( TSTSClusterizer, 1 ) 00047 }; 00048 00049 00050 00051 #endif // #ifndef TSTSCLUSTERIZER_H 00052