#include "AliCaloRawAnalyzerKStandard.h"
#include "AliCaloBunchInfo.h"
#include "AliCaloFitResults.h"
#include "AliLog.h"
#include "TMath.h"
#include <stdexcept>
#include <iostream>
#include "TF1.h"
#include "TGraph.h"
#include "TRandom.h"
#include "AliEMCALRawResponse.h"
using namespace std;
ClassImp( AliCaloRawAnalyzerKStandard )
AliCaloRawAnalyzerKStandard::AliCaloRawAnalyzerKStandard() : AliCaloRawAnalyzerFitter("Chi Square ( kStandard )", "KStandard")
{
fAlgo = Algo::kStandard;
}
AliCaloRawAnalyzerKStandard::~AliCaloRawAnalyzerKStandard()
{
}
AliCaloFitResults
AliCaloRawAnalyzerKStandard::Evaluate( const vector<AliCaloBunchInfo> &bunchlist, UInt_t altrocfg1, UInt_t altrocfg2 )
{
Float_t pedEstimate = 0;
short maxADC = 0;
Int_t first = 0;
Int_t last = 0;
Int_t bunchIndex = 0;
Float_t ampEstimate = 0;
short timeEstimate = 0;
Float_t time = 0;
Float_t amp=0;
Float_t chi2 = 0;
Int_t ndf = 0;
Bool_t fitDone = kFALSE;
int nsamples = PreFitEvaluateSamples( bunchlist, altrocfg1, altrocfg2, bunchIndex, ampEstimate,
maxADC, timeEstimate, pedEstimate, first, last, (int)fAmpCut );
if (ampEstimate >= fAmpCut )
{
time = timeEstimate;
Int_t timebinOffset = bunchlist.at(bunchIndex).GetStartBin() - (bunchlist.at(bunchIndex).GetLength()-1);
amp = ampEstimate;
if ( nsamples > 1 && maxADC< OVERFLOWCUT )
{
FitRaw(first, last, amp, time, chi2, fitDone);
time += timebinOffset;
timeEstimate += timebinOffset;
ndf = nsamples - 2;
}
}
if ( fitDone )
{
Float_t ampAsymm = (amp - ampEstimate)/(amp + ampEstimate);
Float_t timeDiff = time - timeEstimate;
if ( (TMath::Abs(ampAsymm) > 0.1) || (TMath::Abs(timeDiff) > 2) )
{
amp = ampEstimate;
time = timeEstimate;
fitDone = kFALSE;
}
}
if (amp >= fAmpCut )
{
if ( ! fitDone)
{
amp += (0.5 - gRandom->Rndm());
}
time = time * TIMEBINWITH;
time -= fL1Phase;
return AliCaloFitResults( -99, -99, fAlgo , amp, time,
(int)time, chi2, ndf, Ret::kDummy );
}
return AliCaloFitResults( Ret::kInvalid, Ret::kInvalid );
}
void
AliCaloRawAnalyzerKStandard::FitRaw( Int_t firstTimeBin, Int_t lastTimeBin,
Float_t & amp, Float_t & time, Float_t & chi2, Bool_t & fitDone) const
{
int nsamples = lastTimeBin - firstTimeBin + 1;
fitDone = kFALSE;
if (nsamples < 3) { return; }
TGraph *gSig = new TGraph( nsamples);
for (int i=0; i<nsamples; i++)
{
Int_t timebin = firstTimeBin + i;
gSig->SetPoint(i, timebin, GetReversed(timebin));
}
TF1 * signalF = new TF1("signal", AliEMCALRawResponse::RawResponseFunction, 0, TIMEBINS , 5);
signalF->SetParameters(10.,5., TAU ,ORDER,0.);
signalF->SetParNames("amp","t0","tau","N","ped");
signalF->FixParameter(2,TAU);
signalF->FixParameter(3,ORDER);
signalF->FixParameter(4, 0);
signalF->SetParameter(1, time);
signalF->SetParameter(0, amp);
signalF->SetParLimits(0, 0.5*amp, 2*amp );
signalF->SetParLimits(1, time - 4, time + 4);
try {
gSig->Fit(signalF, "QROW");
amp = signalF->GetParameter(0);
time = signalF->GetParameter(1);
chi2 = signalF->GetChisquare();
fitDone = kTRUE;
}
catch (const std::exception & e)
{
AliError( Form("TGraph Fit exception %s", e.what()) );
fitDone = kFALSE;
}
delete signalF;
delete gSig;
return;
}
AliCaloRawAnalyzerKStandard.cxx:1 AliCaloRawAnalyzerKStandard.cxx:2 AliCaloRawAnalyzerKStandard.cxx:3 AliCaloRawAnalyzerKStandard.cxx:4 AliCaloRawAnalyzerKStandard.cxx:5 AliCaloRawAnalyzerKStandard.cxx:6 AliCaloRawAnalyzerKStandard.cxx:7 AliCaloRawAnalyzerKStandard.cxx:8 AliCaloRawAnalyzerKStandard.cxx:9 AliCaloRawAnalyzerKStandard.cxx:10 AliCaloRawAnalyzerKStandard.cxx:11 AliCaloRawAnalyzerKStandard.cxx:12 AliCaloRawAnalyzerKStandard.cxx:13 AliCaloRawAnalyzerKStandard.cxx:14 AliCaloRawAnalyzerKStandard.cxx:15 AliCaloRawAnalyzerKStandard.cxx:16 AliCaloRawAnalyzerKStandard.cxx:17 AliCaloRawAnalyzerKStandard.cxx:18 AliCaloRawAnalyzerKStandard.cxx:19 AliCaloRawAnalyzerKStandard.cxx:20 AliCaloRawAnalyzerKStandard.cxx:21 AliCaloRawAnalyzerKStandard.cxx:22 AliCaloRawAnalyzerKStandard.cxx:23 AliCaloRawAnalyzerKStandard.cxx:24 AliCaloRawAnalyzerKStandard.cxx:25 AliCaloRawAnalyzerKStandard.cxx:26 AliCaloRawAnalyzerKStandard.cxx:27 AliCaloRawAnalyzerKStandard.cxx:28 AliCaloRawAnalyzerKStandard.cxx:29 AliCaloRawAnalyzerKStandard.cxx:30 AliCaloRawAnalyzerKStandard.cxx:31 AliCaloRawAnalyzerKStandard.cxx:32 AliCaloRawAnalyzerKStandard.cxx:33 AliCaloRawAnalyzerKStandard.cxx:34 AliCaloRawAnalyzerKStandard.cxx:35 AliCaloRawAnalyzerKStandard.cxx:36 AliCaloRawAnalyzerKStandard.cxx:37 AliCaloRawAnalyzerKStandard.cxx:38 AliCaloRawAnalyzerKStandard.cxx:39 AliCaloRawAnalyzerKStandard.cxx:40 AliCaloRawAnalyzerKStandard.cxx:41 AliCaloRawAnalyzerKStandard.cxx:42 AliCaloRawAnalyzerKStandard.cxx:43 AliCaloRawAnalyzerKStandard.cxx:44 AliCaloRawAnalyzerKStandard.cxx:45 AliCaloRawAnalyzerKStandard.cxx:46 AliCaloRawAnalyzerKStandard.cxx:47 AliCaloRawAnalyzerKStandard.cxx:48 AliCaloRawAnalyzerKStandard.cxx:49 AliCaloRawAnalyzerKStandard.cxx:50 AliCaloRawAnalyzerKStandard.cxx:51 AliCaloRawAnalyzerKStandard.cxx:52 AliCaloRawAnalyzerKStandard.cxx:53 AliCaloRawAnalyzerKStandard.cxx:54 AliCaloRawAnalyzerKStandard.cxx:55 AliCaloRawAnalyzerKStandard.cxx:56 AliCaloRawAnalyzerKStandard.cxx:57 AliCaloRawAnalyzerKStandard.cxx:58 AliCaloRawAnalyzerKStandard.cxx:59 AliCaloRawAnalyzerKStandard.cxx:60 AliCaloRawAnalyzerKStandard.cxx:61 AliCaloRawAnalyzerKStandard.cxx:62 AliCaloRawAnalyzerKStandard.cxx:63 AliCaloRawAnalyzerKStandard.cxx:64 AliCaloRawAnalyzerKStandard.cxx:65 AliCaloRawAnalyzerKStandard.cxx:66 AliCaloRawAnalyzerKStandard.cxx:67 AliCaloRawAnalyzerKStandard.cxx:68 AliCaloRawAnalyzerKStandard.cxx:69 AliCaloRawAnalyzerKStandard.cxx:70 AliCaloRawAnalyzerKStandard.cxx:71 AliCaloRawAnalyzerKStandard.cxx:72 AliCaloRawAnalyzerKStandard.cxx:73 AliCaloRawAnalyzerKStandard.cxx:74 AliCaloRawAnalyzerKStandard.cxx:75 AliCaloRawAnalyzerKStandard.cxx:76 AliCaloRawAnalyzerKStandard.cxx:77 AliCaloRawAnalyzerKStandard.cxx:78 AliCaloRawAnalyzerKStandard.cxx:79 AliCaloRawAnalyzerKStandard.cxx:80 AliCaloRawAnalyzerKStandard.cxx:81 AliCaloRawAnalyzerKStandard.cxx:82 AliCaloRawAnalyzerKStandard.cxx:83 AliCaloRawAnalyzerKStandard.cxx:84 AliCaloRawAnalyzerKStandard.cxx:85 AliCaloRawAnalyzerKStandard.cxx:86 AliCaloRawAnalyzerKStandard.cxx:87 AliCaloRawAnalyzerKStandard.cxx:88 AliCaloRawAnalyzerKStandard.cxx:89 AliCaloRawAnalyzerKStandard.cxx:90 AliCaloRawAnalyzerKStandard.cxx:91 AliCaloRawAnalyzerKStandard.cxx:92 AliCaloRawAnalyzerKStandard.cxx:93 AliCaloRawAnalyzerKStandard.cxx:94 AliCaloRawAnalyzerKStandard.cxx:95 AliCaloRawAnalyzerKStandard.cxx:96 AliCaloRawAnalyzerKStandard.cxx:97 AliCaloRawAnalyzerKStandard.cxx:98 AliCaloRawAnalyzerKStandard.cxx:99 AliCaloRawAnalyzerKStandard.cxx:100 AliCaloRawAnalyzerKStandard.cxx:101 AliCaloRawAnalyzerKStandard.cxx:102 AliCaloRawAnalyzerKStandard.cxx:103 AliCaloRawAnalyzerKStandard.cxx:104 AliCaloRawAnalyzerKStandard.cxx:105 AliCaloRawAnalyzerKStandard.cxx:106 AliCaloRawAnalyzerKStandard.cxx:107 AliCaloRawAnalyzerKStandard.cxx:108 AliCaloRawAnalyzerKStandard.cxx:109 AliCaloRawAnalyzerKStandard.cxx:110 AliCaloRawAnalyzerKStandard.cxx:111 AliCaloRawAnalyzerKStandard.cxx:112 AliCaloRawAnalyzerKStandard.cxx:113 AliCaloRawAnalyzerKStandard.cxx:114 AliCaloRawAnalyzerKStandard.cxx:115 AliCaloRawAnalyzerKStandard.cxx:116 AliCaloRawAnalyzerKStandard.cxx:117 AliCaloRawAnalyzerKStandard.cxx:118 AliCaloRawAnalyzerKStandard.cxx:119 AliCaloRawAnalyzerKStandard.cxx:120 AliCaloRawAnalyzerKStandard.cxx:121 AliCaloRawAnalyzerKStandard.cxx:122 AliCaloRawAnalyzerKStandard.cxx:123 AliCaloRawAnalyzerKStandard.cxx:124 AliCaloRawAnalyzerKStandard.cxx:125 AliCaloRawAnalyzerKStandard.cxx:126 AliCaloRawAnalyzerKStandard.cxx:127 AliCaloRawAnalyzerKStandard.cxx:128 AliCaloRawAnalyzerKStandard.cxx:129 AliCaloRawAnalyzerKStandard.cxx:130 AliCaloRawAnalyzerKStandard.cxx:131 AliCaloRawAnalyzerKStandard.cxx:132 AliCaloRawAnalyzerKStandard.cxx:133 AliCaloRawAnalyzerKStandard.cxx:134 AliCaloRawAnalyzerKStandard.cxx:135 AliCaloRawAnalyzerKStandard.cxx:136 AliCaloRawAnalyzerKStandard.cxx:137 AliCaloRawAnalyzerKStandard.cxx:138 AliCaloRawAnalyzerKStandard.cxx:139 AliCaloRawAnalyzerKStandard.cxx:140 AliCaloRawAnalyzerKStandard.cxx:141 AliCaloRawAnalyzerKStandard.cxx:142 AliCaloRawAnalyzerKStandard.cxx:143 AliCaloRawAnalyzerKStandard.cxx:144 AliCaloRawAnalyzerKStandard.cxx:145 AliCaloRawAnalyzerKStandard.cxx:146 AliCaloRawAnalyzerKStandard.cxx:147 AliCaloRawAnalyzerKStandard.cxx:148 AliCaloRawAnalyzerKStandard.cxx:149 AliCaloRawAnalyzerKStandard.cxx:150 AliCaloRawAnalyzerKStandard.cxx:151 AliCaloRawAnalyzerKStandard.cxx:152 AliCaloRawAnalyzerKStandard.cxx:153 AliCaloRawAnalyzerKStandard.cxx:154 AliCaloRawAnalyzerKStandard.cxx:155 AliCaloRawAnalyzerKStandard.cxx:156 AliCaloRawAnalyzerKStandard.cxx:157 AliCaloRawAnalyzerKStandard.cxx:158 AliCaloRawAnalyzerKStandard.cxx:159 AliCaloRawAnalyzerKStandard.cxx:160 AliCaloRawAnalyzerKStandard.cxx:161 AliCaloRawAnalyzerKStandard.cxx:162 AliCaloRawAnalyzerKStandard.cxx:163 AliCaloRawAnalyzerKStandard.cxx:164 AliCaloRawAnalyzerKStandard.cxx:165 AliCaloRawAnalyzerKStandard.cxx:166 AliCaloRawAnalyzerKStandard.cxx:167 AliCaloRawAnalyzerKStandard.cxx:168 AliCaloRawAnalyzerKStandard.cxx:169