00001 /* 00002 * TSTSCluster.cxx 00003 * 00004 * Created on: Jan 7, 2012 00005 * Author: isorokin 00006 */ 00007 00008 00009 #include "TSTSCluster.h" 00010 00011 TSTSCluster::TSTSCluster(): 00012 fCacheActual(kFALSE) 00013 { 00014 } 00015 00016 00017 00018 void TSTSCluster::AddDigi( const TSTSDigi & digi ) 00019 { 00020 fDigis.push_back( digi ); 00021 fCacheActual = kFALSE; 00022 } 00023 00024 00025 00026 void TSTSCluster::Print() const 00027 { 00028 printf( "Cluster of %d digis. Amp=%6f Ch=%6f Time=%Ld\n", GetNDigis(), (Float_t)GetAmplitude(), (Float_t)GetMainStrip(), GetTime() ); 00029 for( Int_t iDigi = 0; iDigi < GetNDigis(); iDigi++ ) { 00030 printf(" "); 00031 fDigis[iDigi].Print(); 00032 } 00033 } 00034 00035 00036 00037 void TSTSCluster::UpdateCache() const 00038 { 00039 if( fDigis.size() > 0 ) { 00040 Double_t timeSum = 0; 00041 Long64_t minTime = fDigis.begin()->GetTime(); 00042 Long64_t maxTime = minTime; 00043 Float_t sumAmp = 0; 00044 Int_t mainDigi = 0; 00045 Float_t mainDigiAmp = 0; 00046 Double_t cogSum = 0; 00047 //for( std::vector<TSTSDigi>::const_iterator itDigi = fDigis.begin(); itDigi != fDigis.end(); itDigi++ ) { 00048 for( Int_t iDigi = 0; iDigi < (Int_t)fDigis.size(); iDigi++ ) { 00049 Long64_t timeCurr = fDigis.at( iDigi).GetTime(); 00050 timeSum += timeCurr; 00051 if( timeCurr < minTime ) minTime = timeCurr; 00052 if( timeCurr > maxTime ) maxTime = timeCurr; 00053 Float_t ampCurr = fDigis.at( iDigi).GetAmplitude(); 00054 sumAmp += ampCurr; 00055 cogSum += ampCurr * fDigis.at( iDigi).GetStrip(); 00056 if( ampCurr > mainDigiAmp ) { 00057 mainDigiAmp = ampCurr; 00058 mainDigi = iDigi; 00059 } 00060 } 00061 fCachedAmplitude = sumAmp; 00062 fCachedTime = timeSum / fDigis.size(); 00063 fCachedTimeLength = maxTime - minTime; 00064 fCachedMainDigi = fDigis.at( mainDigi ); 00065 fCachedMainStrip = fDigis.at( mainDigi ).GetStrip(); 00066 fCachedCogStrip = cogSum / sumAmp; 00067 } 00068 else { 00069 fCachedAmplitude = 0; 00070 fCachedTime = 0; 00071 fCachedTimeLength = 0; 00072 fCachedMainDigi.Reset(); 00073 fCachedMainStrip = 0; 00074 fCachedCogStrip = 0; 00075 } 00076 fCacheActual = kTRUE; 00077 } 00078 00079 00080 00081 void TSTSCluster::EnsureCacheActual() const 00082 { 00083 if( ! fCacheActual ) { 00084 UpdateCache(); 00085 } 00086 } 00087 00088 00089 00090 Long64_t TSTSCluster::GetTime() const 00091 { 00092 EnsureCacheActual(); 00093 return fCachedTime; 00094 } 00095 00096 00097 00098 Int_t TSTSCluster::GetMainStrip() const 00099 { 00100 EnsureCacheActual(); 00101 return fCachedMainStrip; 00102 } 00103 00104 Float_t TSTSCluster::GetCogStrip() const 00105 { 00106 EnsureCacheActual(); 00107 return fCachedCogStrip; 00108 } 00109 00110 00111 00112 Long64_t TSTSCluster::GetTimeLength() const 00113 { 00114 EnsureCacheActual(); 00115 return fCachedTimeLength; 00116 } 00117 00118 00119 00120 Float_t TSTSCluster::GetAmplitude() const 00121 { 00122 EnsureCacheActual(); 00123 return fCachedAmplitude; 00124 } 00125 00126 00127 00128 const TSTSDigi & TSTSCluster::GetMainDigi() const 00129 { 00130 EnsureCacheActual(); 00131 return fCachedMainDigi; 00132 } 00133 00134 00135 00136