]> git.uio.no Git - u/mrichter/AliRoot.git/blame - FMD/analysis/AliFMDAnalysisTaskCollector.cxx
Adding calibration object for the sharing efficiency
[u/mrichter/AliRoot.git] / FMD / analysis / AliFMDAnalysisTaskCollector.cxx
CommitLineData
c48a797f 1
2#include <TROOT.h>
3#include <TSystem.h>
4#include <TInterpreter.h>
5#include <TChain.h>
6#include <TFile.h>
7#include <TList.h>
9f55be54 8#include <TMath.h>
c48a797f 9#include <iostream>
10
11#include "AliFMDAnalysisTaskCollector.h"
12#include "AliAnalysisManager.h"
13#include "AliESDFMD.h"
14#include "AliESDEvent.h"
15#include "AliAODEvent.h"
16#include "AliAODHandler.h"
17#include "AliMCEventHandler.h"
18#include "AliStack.h"
19#include "AliESDVertex.h"
20#include "AliFMDAnaParameters.h"
78f6f750 21//#include "AliFMDGeometry.h"
9f55be54 22
23
c48a797f 24ClassImp(AliFMDAnalysisTaskCollector)
25
9f55be54 26//____________________________________________________________________
27Double_t AliFMDAnalysisTaskCollector::TripleLandau(Double_t *x, Double_t *par) {
28
29 Double_t energy = x[0];
30 Double_t constant = par[0];
31 Double_t mpv = par[1];
32 Double_t sigma = par[2];
33 Double_t alpha = par[3];
34 Double_t beta = par[4];
35
36 Double_t f = constant*(TMath::Landau(energy,mpv,sigma,kTRUE)+
37 alpha*TMath::Landau(energy,2*mpv+2*sigma*TMath::Log(2),2*sigma,kTRUE)+
38 beta*TMath::Landau(energy,3*mpv+3*sigma*TMath::Log(3),3*sigma,kTRUE) );
39
40 return f;
41}
42//____________________________________________________________________
c48a797f 43
44AliFMDAnalysisTaskCollector::AliFMDAnalysisTaskCollector()
45: fDebug(0),
c48a797f 46 fOutputList(0),
47 fArray(0),
c48a797f 48 fZvtxDist(0)
49{
50 // Default constructor
9f55be54 51
52
c48a797f 53}
54//____________________________________________________________________
55AliFMDAnalysisTaskCollector::AliFMDAnalysisTaskCollector(const char* name):
9f55be54 56 AliAnalysisTaskSE(name),
c48a797f 57 fDebug(0),
c48a797f 58 fOutputList(0),
59 fArray(0),
c48a797f 60 fZvtxDist(0)
61{
62 // Default constructor
9f55be54 63
64 DefineOutput(1, TList::Class());
c48a797f 65}
66//____________________________________________________________________
9f55be54 67void AliFMDAnalysisTaskCollector::UserCreateOutputObjects()
c48a797f 68{
69 // Create the output container
70 printf("AnalysisTaskFMD::CreateOutPutData() \n");
71
72 fOutputList = new TList();//(TList*)GetOutputData(0);
6289b3e8 73 AliFMDAnaParameters* pars = AliFMDAnaParameters::Instance();
c48a797f 74
75 fArray = new TObjArray();
76 fArray->SetName("FMD");
77 fArray->SetOwner();
78 TH1F* hEdist = 0;
6289b3e8 79
80 for(Int_t nEta = 0; nEta <= pars->GetNetaBins()+1; nEta++) {
81 TObjArray* etaArray = new TObjArray();
82 fArray->AddAtAndExpand(etaArray,nEta);
83 for(Int_t det =1; det<=3;det++)
84 {
85 TObjArray* detArray = new TObjArray();
86 detArray->SetName(Form("FMD%d",det));
87 etaArray->AddAtAndExpand(detArray,det);
88 Int_t nRings = (det==1 ? 1 : 2);
89 for(Int_t ring = 0;ring<nRings;ring++)
90 {
91 Char_t ringChar = (ring == 0 ? 'I' : 'O');
92 hEdist = new TH1F(Form("FMD%d%c_etabin%d",det,ringChar,nEta),Form("FMD%d%c_etabin%d",det,ringChar,nEta),200,0,6);
93 hEdist->SetXTitle("#Delta E / E_{MIP}");
94 fOutputList->Add(hEdist);
95 detArray->AddAtAndExpand(hEdist,ring);
96 }
97 }
98
99 }
c48a797f 100
101 fZvtxDist = new TH1F("ZvtxDist","Vertex distribution",100,-30,30);
102 fZvtxDist->SetXTitle("z vertex");
c48a797f 103 fOutputList->Add(fZvtxDist);
104}
c48a797f 105
c48a797f 106//____________________________________________________________________
9f55be54 107void AliFMDAnalysisTaskCollector::UserExec(Option_t */*option*/)
c48a797f 108{
c48a797f 109
9f55be54 110 AliESDEvent* esd = (AliESDEvent*)InputEvent();
111 AliESD* old = esd->GetAliESDOld();
c48a797f 112 if (old) {
9f55be54 113 esd->CopyFromOldESD();
c48a797f 114 }
bb8a464f 115 AliFMDAnaParameters* pars = AliFMDAnaParameters::Instance();
c48a797f 116
9f55be54 117 Bool_t trigger = pars->IsEventTriggered(esd);
118 if(!trigger)
119 return;
c48a797f 120 Double_t vertex[3];
bb8a464f 121
9f55be54 122 pars->GetVertex(esd,vertex);
123 if(vertex[0] == 0 && vertex[1] == 0 && vertex[2] == 0)
124 return;
125
c48a797f 126 fZvtxDist->Fill(vertex[2]);
bb8a464f 127
128 if(TMath::Abs(vertex[2]) > pars->GetVtxCutZ())
129 return;
130
9f55be54 131 AliESDFMD* fmd = esd->GetFMDData();
c48a797f 132 if (!fmd) return;
133
134 for(UShort_t det=1;det<=3;det++) {
9f55be54 135
c48a797f 136 Int_t nRings = (det==1 ? 1 : 2);
137 for (UShort_t ir = 0; ir < nRings; ir++) {
6289b3e8 138
c48a797f 139 Char_t ring = (ir == 0 ? 'I' : 'O');
140 UShort_t nsec = (ir == 0 ? 20 : 40);
141 UShort_t nstr = (ir == 0 ? 512 : 256);
6289b3e8 142 TH2F* hBg = pars->GetBackgroundCorrection(det,ring,0);
143
c48a797f 144 for(UShort_t sec =0; sec < nsec; sec++) {
145 for(UShort_t strip = 0; strip < nstr; strip++) {
cc066cb9 146
147
148 Float_t mult = fmd->Multiplicity(det,ring,sec,strip);
149 if(mult == AliESDFMD::kInvalidMult || mult == 0) continue;
cc066cb9 150
78f6f750 151 Float_t eta = pars->GetEtaFromStrip(det,ring,sec,strip,vertex[2]);
9f55be54 152
6289b3e8 153 Int_t nEta = hBg->GetXaxis()->FindBin(eta);
cc066cb9 154
6289b3e8 155 TObjArray* etaArray = (TObjArray*)fArray->At(nEta);
156 TObjArray* detArray = (TObjArray*)etaArray->At(det);
157 TH1F* Edist = (TH1F*)detArray->At(ir);
cc066cb9 158
c48a797f 159 Edist->Fill(mult);
160
161 }
162 }
163 }
164 }
165
9f55be54 166 PostData(1, fOutputList);
c48a797f 167
168}
9f55be54 169
c48a797f 170//____________________________________________________________________
9f55be54 171void AliFMDAnalysisTaskCollector::ReadFromFile(const Char_t* filename, Bool_t store, Int_t speciesOption) {
172
173 //speciesOption:
174 //0: p+p Landau fit
175 //1: Pb+Pb triple landau convolution fit
176
177 AliFMDAnaParameters* pars = AliFMDAnaParameters::Instance();
178 pars->Init(kTRUE,AliFMDAnaParameters::kBackgroundCorrection);
179
180 TFile fin(filename,"UPDATE");
181
182 TList* list = (TList*)fin.Get("energyDist");
183
184 AliFMDAnaCalibEnergyDistribution* EnergyDist = new AliFMDAnaCalibEnergyDistribution();
185
186 EnergyDist->SetNetaBins(pars->GetNetaBins());
187 EnergyDist->SetEtaLimits(pars->GetEtaMin(),pars->GetEtaMax());
188
189 for(Int_t nEta = 1; nEta <= pars->GetNetaBins(); nEta++) {
190
191 for(Int_t det = 1; det<=3; det++) {
192 Int_t nRings = (det == 1 ? 1 : 2);
193 for(Int_t ring = 0;ring<nRings; ring++) {
194 Char_t ringChar = (ring == 0 ? 'I' : 'O');
195
196 TH1F* hEdist = (TH1F*)list->FindObject(Form("FMD%d%c_etabin%d",det,ringChar,nEta));
197 TF1* fitFunc = 0 ;
198
199 if(hEdist->GetEntries() != 0) {
200
201 hEdist->GetXaxis()->SetRangeUser(0.2,hEdist->GetXaxis()->GetXmax());
202
203 if(speciesOption == 0)
204 fitFunc = new TF1("FMDfitFunc","landau",hEdist->GetBinCenter(hEdist->GetMaximumBin())-0.2,3);
205 if(speciesOption == 1) {
206 fitFunc = new TF1("FMDfitFunc",TripleLandau,hEdist->GetBinCenter(hEdist->GetMaximumBin())-0.2,5,5);
207 fitFunc->SetParNames("constant","MPV","sigma","2-Mip weight","3-Mip weight");
208 fitFunc->SetParameters(10,0.8,0.1,0.05,0.01);
209 fitFunc->SetParLimits(1,0.6,1.2);
210 fitFunc->SetParLimits(3,0,1);
211 fitFunc->SetParLimits(4,0,1);
212
213 }
214
215
216 hEdist->Fit(fitFunc,"","",hEdist->GetBinCenter(hEdist->GetMaximumBin())-0.2,3);
217 fitFunc->Write(Form("FMD%d%c_etabin%d_fitfunc",det,ringChar,nEta),TObject::kWriteDelete);
218
219 }
220
221 TH2F* hBg = pars->GetBackgroundCorrection(det,ringChar,0);
222 EnergyDist->SetEnergyDistribution(det,ringChar,hBg->GetXaxis()->GetBinCenter(nEta),hEdist);
223 }
224
c48a797f 225 }
bb8a464f 226
bb8a464f 227 }
228
9f55be54 229 fin.Write();
230 fin.Close();
231
232 if(store) {
0b0a4ae5 233 TFile fcalib(pars->GetPath(pars->GetEdistID() ),"RECREATE");
9f55be54 234 EnergyDist->Write(AliFMDAnaParameters::GetEdistID());
235 fcalib.Close();
236 }
237
238
239
bb8a464f 240}
9f55be54 241
c48a797f 242//____________________________________________________________________
243//
244// EOF
245//