Go to the documentation of this file.00001 #include "TSTSClusterizer.h"
00002 #include "TMath.h"
00003
00004 TSTSClusterizer::TSTSClusterizer( Int_t det, Int_t side ) :
00005 fDetector( det ),
00006 fSide( side )
00007 {
00008 fTimeTolerance = kDefTimeTolerance;
00009 fSpaceTolerance = kDefSpaceTolerance;
00010 fTimeWindow = kDefTimeWindow;
00011 }
00012
00013 TSTSClusterizer::~TSTSClusterizer()
00014 {
00015
00016 }
00017
00018
00019 Bool_t TSTSClusterizer::Match( TSTSDigi const digi1, const TSTSDigi digi2 )
00020 {
00021 return ( TMath::Abs( digi1.GetTime() - digi2.GetTime() ) <= fTimeTolerance )
00022 && ( TMath::Abs( digi1.GetStrip() - digi2.GetStrip() ) <= fSpaceTolerance );
00023 }
00024
00025
00026
00027 Bool_t TSTSClusterizer::Match( TSTSCluster const * const cluster, const TSTSDigi digi )
00028 {
00029 for( Int_t iDigi = 0; iDigi < cluster->GetNDigis(); iDigi++ ) {
00030 if( Match( digi, cluster->GetDigi( iDigi ) ) ) {
00031 return true;
00032 }
00033 }
00034 return false;
00035 }
00036
00037
00038
00039
00040
00041 void TSTSClusterizer::MoveDigiToCluster( TSTSCluster* cluster, const std::deque<TSTSDigi>::iterator& itDigi )
00042 {
00043 cluster->AddDigi(*itDigi);
00044 fDigis.erase(itDigi);
00045 }
00046
00047
00048
00049
00050
00051 Bool_t TSTSClusterizer::FindDigiFitsCluster( Bool_t noTrigger, TSTSCluster const * const cluster, std::deque<TSTSDigi>::iterator& itDigi )
00052 {
00053 for( std::deque<TSTSDigi>::iterator it = fDigis.begin(); it != fDigis.end(); it++ ) {
00054 if( Match( cluster, *it ) ) {
00055 if( noTrigger ) {
00056 if( (fDigis.back().GetTime() - it->GetTime()) < fTimeTolerance ) {
00057 printf("Error in TClusterizer::FindDigiFitsCluster: Too small time window. Result might be wrong!\n");
00058 }
00059 }
00060 itDigi = it;
00061 return true;
00062 }
00063 }
00064 return false;
00065 }
00066
00067
00068
00069 TSTSCluster* TSTSClusterizer::FetchCluster( Bool_t noTrigger )
00070 {
00071 if( fDigis.size() == 0 ) {
00072 return 0;
00073 }
00074 if( noTrigger ) {
00075 if( fDigis.back().GetTime() - fDigis.front().GetTime() < fTimeWindow ) {
00076 return 0;
00077 }
00078 }
00079 TSTSCluster* cluster = new TSTSCluster();
00080 MoveDigiToCluster(cluster, fDigis.begin());
00081 std::deque<TSTSDigi>::iterator itDigi;
00082 while ( FindDigiFitsCluster( noTrigger, cluster, itDigi ) ) {
00083 MoveDigiToCluster( cluster, itDigi );
00084 }
00085 return cluster;
00086 }