X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=EMCAL%2FAliCaloRawAnalyzerCrude.cxx;h=52e68f4340d661abdccb40147cb2e66ba79edb2e;hb=f3dd29bfcbce4d86ce3a91128d5f71b6ad738735;hp=01ba11031872274591e87548482663a957690481;hpb=ce95bae96d1438eace4a8c7a11c0bf34b4dcb33f;p=u%2Fmrichter%2FAliRoot.git diff --git a/EMCAL/AliCaloRawAnalyzerCrude.cxx b/EMCAL/AliCaloRawAnalyzerCrude.cxx index 01ba1103187..52e68f4340d 100644 --- a/EMCAL/AliCaloRawAnalyzerCrude.cxx +++ b/EMCAL/AliCaloRawAnalyzerCrude.cxx @@ -25,15 +25,17 @@ #include "AliCaloRawAnalyzerCrude.h" #include "AliCaloFitResults.h" #include "AliCaloBunchInfo.h" - +#include "TMath.h" using namespace std; +#include "AliCaloConstants.h" + ClassImp(AliCaloRawAnalyzerCrude) AliCaloRawAnalyzerCrude::AliCaloRawAnalyzerCrude() : AliCaloRawAnalyzer("Crude", "Crude") { - + fAlgo=Algo::kCrude; } @@ -44,37 +46,39 @@ AliCaloRawAnalyzerCrude::~AliCaloRawAnalyzerCrude() AliCaloFitResults -AliCaloRawAnalyzerCrude::Evaluate(const vector &bunchvector, const UInt_t /*altrocfg1*/, const UInt_t /*altrocfg2*/) +AliCaloRawAnalyzerCrude::Evaluate(const vector &bunchvector, const UInt_t altrocfg1, const UInt_t altrocfg2) { // Evaluation of signal parameters - if( bunchvector.size() <= 0 ) + short maxampindex; //index of maximum amplitude + short maxamp; //Maximum amplitude + int index = SelectBunch( bunchvector, &maxampindex, &maxamp ); + + if( index >= 0) { - return AliCaloFitResults(AliCaloFitResults::kInvalid, AliCaloFitResults::kInvalid); - } + Float_t ped = ReverseAndSubtractPed( &(bunchvector.at(index)) , altrocfg1, altrocfg2, fReversed ); + Float_t maxf = TMath::MaxElement( bunchvector.at(index).GetLength(), fReversed ); + short timebinOffset = maxampindex - (bunchvector.at(index).GetLength()-1); + + if( maxf < fAmpCut || ( maxamp - ped) > fOverflowCut ) // (maxamp - ped) > fOverflowCut = Close to saturation (use low gain then) + { + return AliCaloFitResults( maxamp, ped, Ret::kCrude, maxf, timebinOffset); + } + else if ( maxf >= fAmpCut ) // no if statement needed really; keep for readability + { + int first = 0; + int last = 0; + int maxrev = maxampindex - bunchvector.at(index).GetStartBin(); + SelectSubarray( fReversed, bunchvector.at(index).GetLength(), maxrev , &first, &last); + + Float_t chi2 = CalculateChi2(maxf, maxrev, first, last); + Int_t ndf = last - first - 1; // nsamples - 2 + return AliCaloFitResults( maxamp, ped, Ret::kCrude, maxf, timebinOffset, + timebinOffset, chi2, ndf, Ret::kDummy, AliCaloFitSubarray(index, maxrev, first, last) ); + } // ampcut + } // bunch index + + return AliCaloFitResults( Ret::kInvalid , Ret::kInvalid); - Int_t amp = 0; - Int_t tof = -99; - const UShort_t *sig; - - double ped = EvaluatePedestal( bunchvector.at(0).GetData(), bunchvector.at(0).GetLength() ) ; - - for( unsigned int i= 0; i < bunchvector.size(); ++i) - { - sig = bunchvector.at(i).GetData(); - int length = bunchvector.at(i).GetLength(); - - for(int j = 0; j < length; j ++) - if( sig[j] > amp ) - { - amp = sig[j]; - tof = bunchvector.at(i).GetStartBin() - j; - } - } - - //:EvaluatePedestal(const UShort_t * const data, const int length ) - // double ped = EvaluatePedestal(sig, length) ; - return AliCaloFitResults(amp, ped, AliCaloFitResults::kCrude, amp - ped, tof); - } //end Crude