Bug fixes and improvements. The acceptance correction has been introduced using the...
[u/mrichter/AliRoot.git] / FMD / analysis / AliFMDAnalysisTaskDndeta.cxx
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>
8 #include <iostream>
9 #include "TH2F.h"
10 #include "AliFMDAnalysisTaskDndeta.h"
11 #include "AliAnalysisManager.h"
12 #include "AliESDFMD.h"
13 #include "AliESDEvent.h"
14 #include "AliAODEvent.h"
15 #include "AliAODHandler.h"
16 #include "AliMCEventHandler.h"
17 #include "AliStack.h"
18 #include "AliLog.h"
19 #include "AliESDVertex.h"
20 #include "TMath.h"
21 #include "AliFMDAnaParameters.h"
22 #include "AliFMDGeometry.h"
23
24 ClassImp(AliFMDAnalysisTaskDndeta)
25
26
27 AliFMDAnalysisTaskDndeta::AliFMDAnalysisTaskDndeta()
28 : fDebug(0),
29   fOutputList(0),
30   fInputList(0),
31   fArray(0),
32   fInputArray(0),
33   fVertexString(0x0),
34   fNevents(),
35   fStandalone(kTRUE)
36 {
37   // Default constructor
38   DefineInput (0, TList::Class());
39   DefineOutput(0, TList::Class());
40 }
41 //_____________________________________________________________________
42 AliFMDAnalysisTaskDndeta::AliFMDAnalysisTaskDndeta(const char* name, Bool_t SE):
43     AliAnalysisTask(name, "Density"),
44     fDebug(0),
45     fOutputList(0),
46     fInputList(0),
47     fArray(),
48     fInputArray(0),
49     fVertexString(0x0),
50     fNevents(),
51     fStandalone(kTRUE)
52 {
53   fStandalone = SE;
54   if(fStandalone) {
55     DefineInput (0, TList::Class());
56     DefineInput(1, TObjString::Class());
57     DefineOutput(0, TList::Class());
58     
59   }
60 }
61 //_____________________________________________________________________
62 void AliFMDAnalysisTaskDndeta::CreateOutputObjects()
63 {
64   AliFMDAnaParameters* pars = AliFMDAnaParameters::Instance();
65   
66   fArray.SetName("FMD");
67   fArray.SetOwner();
68   
69   if(!fOutputList)
70     fOutputList = new TList();
71   fOutputList->SetName("BackgroundCorrected");
72   
73   
74   TH2F* hMult = 0;
75   
76   Int_t nVtxbins = pars->GetNvtxBins();
77   
78   for(Int_t det =1; det<=3;det++)
79     {
80       TObjArray* detArray = new TObjArray();
81       detArray->SetName(Form("FMD%d",det));
82       fArray.AddAtAndExpand(detArray,det);
83       Int_t nRings = (det==1 ? 1 : 2);
84       for(Int_t ring = 0;ring<nRings;ring++)
85         {
86           Char_t ringChar = (ring == 0 ? 'I' : 'O');
87           Int_t  nSec     = (ring == 0 ? 20 : 40);
88           
89           TObjArray* vtxArray = new TObjArray();
90           vtxArray->SetName(Form("FMD%d%c",det,ringChar));
91           detArray->AddAtAndExpand(vtxArray,ring);
92           for(Int_t i = 0; i< nVtxbins; i++) {
93             TH2F* hBg = pars->GetBackgroundCorrection(det, ringChar, i);
94             hMult  = new TH2F(Form("dNdeta_FMD%d%c_vtxbin%d",det,ringChar,i),Form("dNdeta_FMD%d%c_vtxbin%d",det,ringChar,i),
95                               hBg->GetNbinsX(),
96                               hBg->GetXaxis()->GetXmin(),
97                               hBg->GetXaxis()->GetXmax(),
98                               nSec, 0, 2*TMath::Pi());
99             hMult->Sumw2();
100             fOutputList->Add(hMult);
101             vtxArray->AddAtAndExpand(hMult,i);
102             
103           }
104         } 
105     }
106   
107   fNevents.SetBins(nVtxbins,0,nVtxbins);
108   fNevents.SetName("nEvents");
109   fOutputList->Add(&fNevents);
110    
111   
112 }
113 //_____________________________________________________________________
114 void AliFMDAnalysisTaskDndeta::ConnectInputData(Option_t */*option*/)
115 {
116   if(fStandalone) {
117     fInputList   = (TList*)GetInputData(0);
118     fVertexString = (TObjString*)GetInputData(1);
119   }
120 }
121 //_____________________________________________________________________
122 void AliFMDAnalysisTaskDndeta::Exec(Option_t */*option*/)
123 {
124   Int_t vtxbin   = fVertexString->GetString().Atoi();
125   fNevents.Fill(vtxbin);
126   
127   for(UShort_t det=1;det<=3;det++) {
128     //TObjArray* detInputArray = (TObjArray*)fInputArray->At(det);
129     TObjArray* detArray = (TObjArray*)fArray.At(det);
130     Int_t nRings = (det==1 ? 1 : 2);
131     for (UShort_t ir = 0; ir < nRings; ir++) {
132       Char_t ringChar = (ir == 0 ? 'I' : 'O');
133       //TObjArray* vtxInputArray = (TObjArray*)detInputArray->At(ir);
134       TObjArray* vtxArray = (TObjArray*)detArray->At(ir);
135       TH2F* hMultTotal = (TH2F*)vtxArray->At(vtxbin);
136       
137       
138       TH2F* hMultInput = (TH2F*)fInputList->FindObject(Form("mult_FMD%d%c_vtxbin%d",det,ringChar,vtxbin));
139       
140       hMultTotal->Add(hMultInput);
141       
142       
143     }
144   }
145   if(fStandalone) {
146     PostData(0, fOutputList); 
147   }
148   
149 }
150 //_____________________________________________________________________
151 void AliFMDAnalysisTaskDndeta::Terminate(Option_t */*option*/) {
152   
153   
154   AliFMDAnaParameters* pars = AliFMDAnaParameters::Instance();
155   
156   Int_t nVtxbins = pars->GetNvtxBins();
157   
158   for(UShort_t det=1;det<=3;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       TObjArray* vtxArray = (TObjArray*)detArray->At(ir);
163       Char_t ringChar = (ir == 0 ? 'I' : 'O');
164       for(Int_t i =0; i<nVtxbins; i++) {
165         TH2F* hMultTotal = (TH2F*)vtxArray->At(i);
166         TH1D* hMultProj   = hMultTotal->ProjectionX(Form("dNdeta_FMD%d%c_vtxbin%d_proj",det,ringChar,i),1,hMultTotal->GetNbinsY());
167         fOutputList->Add(hMultProj);
168       }
169     }
170   }
171   
172 }
173 //_____________________________________________________________________
174 //
175 //
176 // EOF