• Main Page
  • Related Pages
  • Namespaces
  • Data Structures
  • Files
  • File List
  • Globals

beamtime/sts-lasertest/go4/STS/TSTSClusterizer.cxx (r4864/r3054)

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  * Expects that: cluster exists, itDigi valid
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  * Expects that: cluster has at least one digi, itDigi exists
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 }

Generated on Tue Dec 10 2013 04:52:18 for ROCsoft by  doxygen 1.7.1