+// -*- mode: c++ -*-
/**************************************************************************
* This file is property of and copyright by the Experimental Nuclear *
* Physics Group, Dep. of Physics *
#include "TMath.h"
#include <iostream>
+
using namespace std;
+#include "AliCaloConstants.h"
+//using namespace CaloConstants::FitAlgorithm;
+//using namespace CaloConstants::ReturnCodes;
+
ClassImp( AliCaloRawAnalyzerFastFit )
AliCaloRawAnalyzerFastFit::AliCaloRawAnalyzerFastFit() : AliCaloRawAnalyzer("Fast Fit (Alexei)", "FF")
{
// Comment
+ fAlgo= Algo::kFastFit;
for(int i=0; i < 1008; i++)
{
if( index >= 0)
{
Float_t ped = ReverseAndSubtractPed( &(bunchvector.at(index)) , altrocfg1, altrocfg2, fReversed );
- int first = 0;
- int last = 0;
Float_t maxf = TMath::MaxElement( bunchvector.at(index).GetLength(), fReversed );
- int maxrev = maxampindex - bunchvector.at(index).GetStartBin();
short timebinOffset = maxampindex - (bunchvector.at(index).GetLength()-1);
- if ( maxf > fAmpCut )
+ if( maxf < fAmpCut || ( maxamp - ped) > fOverflowCut ) // (maxamp - ped) > fOverflowCut = Close to saturation (use low gain then)
{
- SelectSubarray( fReversed, bunchvector.at(index).GetLength(), maxrev , &first, &last);
+ return AliCaloFitResults( maxamp, ped, Algo::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, fFitArrayCut);
+
int nsamples = last - first + 1;
if( ( nsamples ) >= fNsampleCut )
Double_t eSignal = 1; // nominal 1 ADC error
Double_t dAmp = maxf;
Double_t eAmp = 0;
- Double_t dTime = 0;
+ Double_t dTime0 = 0;
Double_t eTime = 0;
Double_t chi2 = 0;
Double_t dTau = 2.35; // time-bin units
AliCaloFastAltroFitv0::FastFit(fXAxis, ordered , nsamples,
- eSignal, dTau, dAmp, eAmp, dTime, eTime, chi2);
+ eSignal, dTau, dAmp, eAmp, dTime0, eTime, chi2);
- return AliCaloFitResults(maxamp, ped, AliCaloFitResults::kDummy, dAmp, dTime+timebinOffset, chi2, AliCaloFitResults::kDummy,
- AliCaloFitResults::kDummy, AliCaloFitSubarray(index, maxrev, first, last) );
+ Double_t dTimeMax = dTime0 + timebinOffset - (maxrev - first) // abs. t0
+ + dTau; // +tau, makes sum tmax
+ return AliCaloFitResults(maxamp, ped, Ret::kFitPar, dAmp, dTimeMax, timebinOffset, chi2, Ret::kDummy,
+ Ret::kDummy, AliCaloFitSubarray(index, maxrev, first, last) );
} // samplecut
else
{
- return AliCaloFitResults( maxamp, ped, AliCaloFitResults::kNoFit, maxf, maxrev+timebinOffset, AliCaloFitResults::kNoFit, AliCaloFitResults::kNoFit,
- AliCaloFitResults::kNoFit, AliCaloFitSubarray(index, 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
- else
- {
- return AliCaloFitResults( maxamp , ped, AliCaloFitResults::kNoFit, maxf, maxrev+timebinOffset, AliCaloFitResults::kNoFit, AliCaloFitResults::kNoFit);
- }
} // bunch index
- return AliCaloFitResults(AliCaloFitResults::kInvalid , AliCaloFitResults::kInvalid);
+ return AliCaloFitResults( Ret::kInvalid , Ret::kInvalid );
+
+ // return AliCaloFitResults( kInvalid , kInvalid,
+ // kInvalid, kInvalid, kInvalid );
+
}