4 #include <TInterpreter.h>
11 #include "AliFMDAnalysisTaskDndeta.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"
20 #include "AliESDVertex.h"
22 #include "AliFMDAnaParameters.h"
23 #include "AliFMDGeometry.h"
24 #include "AliGenEventHeader.h"
26 ClassImp(AliFMDAnalysisTaskDndeta)
29 AliFMDAnalysisTaskDndeta::AliFMDAnalysisTaskDndeta()
41 // Default constructor
42 DefineInput (0, TList::Class());
43 DefineOutput(0, TList::Class());
45 //_____________________________________________________________________
46 AliFMDAnalysisTaskDndeta::AliFMDAnalysisTaskDndeta(const char* name, Bool_t SE):
47 AliAnalysisTask(name, "Density"),
61 DefineInput (0, TList::Class());
62 DefineInput(1, TObjString::Class());
63 DefineOutput(0, TList::Class());
67 //_____________________________________________________________________
68 void AliFMDAnalysisTaskDndeta::CreateOutputObjects()
70 AliFMDAnaParameters* pars = AliFMDAnaParameters::Instance();
72 fArray.SetName("FMD");
76 fOutputList = new TList();
77 fOutputList->SetName("BackgroundCorrected");
81 TH1F* hPrimVertexBin = 0;
84 TH2F* hBg = pars->GetBackgroundCorrection(1, 'I', 0);
85 TH1F* hPrimary = new TH1F("hMultvsEta","hMultvsEta",
87 hBg->GetXaxis()->GetXmin(),
88 hBg->GetXaxis()->GetXmax());
90 fOutputList->Add(hPrimary);
91 Int_t nVtxbins = pars->GetNvtxBins();
94 for(Int_t det =1; det<=3;det++)
96 TObjArray* detArray = new TObjArray();
97 detArray->SetName(Form("FMD%d",det));
98 fArray.AddAtAndExpand(detArray,det);
99 Int_t nRings = (det==1 ? 1 : 2);
100 for(Int_t ring = 0;ring<nRings;ring++)
102 Char_t ringChar = (ring == 0 ? 'I' : 'O');
103 Int_t nSec = (ring == 0 ? 20 : 40);
105 TObjArray* vtxArray = new TObjArray();
106 vtxArray->SetName(Form("FMD%d%c",det,ringChar));
107 detArray->AddAtAndExpand(vtxArray,ring);
108 for(Int_t i = 0; i< nVtxbins; i++) {
109 TH2F* hBg = pars->GetBackgroundCorrection(det, ringChar, i);
110 hMult = new TH2F(Form("dNdeta_FMD%d%c_vtxbin%d",det,ringChar,i),Form("dNdeta_FMD%d%c_vtxbin%d",det,ringChar,i),
112 hBg->GetXaxis()->GetXmin(),
113 hBg->GetXaxis()->GetXmax(),
114 nSec, 0, 2*TMath::Pi());
116 fOutputList->Add(hMult);
117 vtxArray->AddAtAndExpand(hMult,i);
123 for(Int_t i = 0; i< nVtxbins; i++) {
125 hPrimVertexBin = new TH1F(Form("primmult_vtxbin%d",i),
126 Form("primmult_vtxbin%d",i),
128 hBg->GetXaxis()->GetXmin(),
129 hBg->GetXaxis()->GetXmax());
130 hPrimVertexBin->Sumw2();
131 fOutputList->Add(hPrimVertexBin);
135 fNevents.SetBins(nVtxbins,0,nVtxbins);
136 fNevents.SetName("nEvents");
137 fNMCevents.SetBins(nVtxbins,0,nVtxbins);
138 fNMCevents.SetName("nMCEvents");
139 fOutputList->Add(&fNevents);
140 fOutputList->Add(&fNMCevents);
143 //_____________________________________________________________________
144 void AliFMDAnalysisTaskDndeta::ConnectInputData(Option_t */*option*/)
147 fInputList = (TList*)GetInputData(0);
148 fVertexString = (TObjString*)GetInputData(1);
151 //_____________________________________________________________________
152 void AliFMDAnalysisTaskDndeta::Exec(Option_t */*option*/)
154 Int_t vtxbin = fVertexString->GetString().Atoi();
155 fNevents.Fill(vtxbin);
157 for(UShort_t det=1;det<=3;det++) {
158 //TObjArray* detInputArray = (TObjArray*)fInputArray->At(det);
159 TObjArray* detArray = (TObjArray*)fArray.At(det);
160 Int_t nRings = (det==1 ? 1 : 2);
161 for (UShort_t ir = 0; ir < nRings; ir++) {
162 Char_t ringChar = (ir == 0 ? 'I' : 'O');
163 //TObjArray* vtxInputArray = (TObjArray*)detInputArray->At(ir);
164 TObjArray* vtxArray = (TObjArray*)detArray->At(ir);
165 TH2F* hMultTotal = (TH2F*)vtxArray->At(vtxbin);
168 TH2F* hMultInput = (TH2F*)fInputList->FindObject(Form("mult_FMD%d%c_vtxbin%d",det,ringChar,vtxbin));
170 hMultTotal->Add(hMultInput);
180 PostData(0, fOutputList);
184 //_____________________________________________________________________
185 void AliFMDAnalysisTaskDndeta::Terminate(Option_t */*option*/) {
188 AliFMDAnaParameters* pars = AliFMDAnaParameters::Instance();
190 Int_t nVtxbins = pars->GetNvtxBins();
192 for(UShort_t det=1;det<=3;det++) {
193 TObjArray* detArray = (TObjArray*)fArray.At(det);
194 Int_t nRings = (det==1 ? 1 : 2);
195 for (UShort_t ir = 0; ir < nRings; ir++) {
196 TObjArray* vtxArray = (TObjArray*)detArray->At(ir);
197 Char_t ringChar = (ir == 0 ? 'I' : 'O');
198 for(Int_t i =0; i<nVtxbins; i++) {
199 TH2F* hMultTotal = (TH2F*)vtxArray->At(i);
200 TH1D* hMultProj = hMultTotal->ProjectionX(Form("dNdeta_FMD%d%c_vtxbin%d_proj",det,ringChar,i),1,hMultTotal->GetNbinsY());
201 fOutputList->Add(hMultProj);
207 //_____________________________________________________________________
208 void AliFMDAnalysisTaskDndeta::ProcessPrimary() {
210 AliFMDAnaParameters* pars = AliFMDAnaParameters::Instance();
212 AliMCParticle* particle = 0;
213 AliStack* stack = fMCevent->Stack();
215 TH1F* hPrimary = (TH1F*)fOutputList->FindObject("hMultvsEta");
217 Bool_t firstTrack = kTRUE;
218 Int_t nTracks = fMCevent->GetNumberOfTracks();
219 for(Int_t i = 0 ;i<nTracks;i++) {
220 particle = fMCevent->GetTrack(i);
223 if(TMath::Abs(particle->Zv()) > pars->GetVtxCutZ())
225 if(stack->IsPhysicalPrimary(i) && particle->Charge() != 0) {
226 hPrimary->Fill(particle->Eta());
227 Double_t delta = 2*pars->GetVtxCutZ()/pars->GetNvtxBins();
228 Double_t vertexBinDouble = (particle->Zv() + pars->GetVtxCutZ()) / delta;
229 Int_t vertexBin = (Int_t)vertexBinDouble;
230 TH1F* hPrimVtxBin = (TH1F*)fOutputList->FindObject(Form("primmult_vtxbin%d",vertexBin));
231 hPrimVtxBin->Fill(particle->Eta());
233 fNMCevents.Fill(vertexBin);
245 //_____________________________________________________________________