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

beamtime/cosy-jan12/go4/STS/TSTSCluster.cxx (r4864/r3122)

Go to the documentation of this file.
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 

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