]> git.uio.no Git - u/mrichter/AliRoot.git/blame - FMD/analysis/AliFMDAnalysisTaskBackgroundCorrection.cxx
Added the sharing correction and fixed bugs and warnings
[u/mrichter/AliRoot.git] / FMD / analysis / AliFMDAnalysisTaskBackgroundCorrection.cxx
CommitLineData
3bb122c7 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 "AliFMDAnalysisTaskBackgroundCorrection.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 "AliESDVertex.h"
19#include "TMath.h"
20#include "AliFMDAnaParameters.h"
21#include "AliFMDGeometry.h"
22
23ClassImp(AliFMDAnalysisTaskBackgroundCorrection)
24
25
26AliFMDAnalysisTaskBackgroundCorrection::AliFMDAnalysisTaskBackgroundCorrection()
27: fDebug(0),
28 fChain(0x0),
29 fOutputList(0),
30 fArray(0),
8dc823cc 31 fInputArray(0),
c78bc12b 32 fVertexString(0x0),
8dc823cc 33 fNevents(0)
3bb122c7 34{
35 // Default constructor
36 DefineInput (0, TList::Class());
37 DefineOutput(0,TList::Class());
38}
8dc823cc 39//_____________________________________________________________________
3bb122c7 40AliFMDAnalysisTaskBackgroundCorrection::AliFMDAnalysisTaskBackgroundCorrection(const char* name):
41 AliAnalysisTask(name, "Density"),
42 fDebug(0),
43 fChain(0x0),
44 fOutputList(0),
45 fArray(0),
8dc823cc 46 fInputArray(0),
c78bc12b 47 fVertexString(0x0),
8dc823cc 48 fNevents(0)
3bb122c7 49{
50 DefineInput (0, TList::Class());
51 DefineOutput(0, TList::Class());
52}
8dc823cc 53//_____________________________________________________________________
3bb122c7 54void AliFMDAnalysisTaskBackgroundCorrection::CreateOutputObjects()
55{
56 AliFMDAnaParameters* pars = AliFMDAnaParameters::Instance();
57 fOutputList = new TList();
58
59 fArray = new TObjArray();
60 fArray->SetName("FMD");
61 fArray->SetOwner();
62
63 TH2F* hMult = 0;
64
65 Int_t nVtxbins = pars->GetNvtxBins();
66
67 for(Int_t det =1; det<=3;det++)
68 {
69 TObjArray* detArray = new TObjArray();
70 detArray->SetName(Form("FMD%d",det));
71 fArray->AddAtAndExpand(detArray,det);
72 Int_t nRings = (det==1 ? 1 : 2);
73 for(Int_t ring = 0;ring<nRings;ring++)
74 {
75 Char_t ringChar = (ring == 0 ? 'I' : 'O');
76 Int_t nSec = (ring == 0 ? 20 : 40);
77
78 TObjArray* vtxArray = new TObjArray();
79 vtxArray->SetName(Form("FMD%d%c",det,ringChar));
80 detArray->AddAtAndExpand(vtxArray,ring);
81 for(Int_t i = 0; i< nVtxbins; i++) {
82 TH2F* hBg = pars->GetBackgroundCorrection(det, ringChar, i);
83 hMult = new TH2F(Form("mult_FMD%d%c_vtxbin%d",det,ringChar,i),Form("mult_FMD%d%c_vtxbin%d",det,ringChar,i),
84 hBg->GetNbinsX(),
85 hBg->GetXaxis()->GetXmin(),
86 hBg->GetXaxis()->GetXmax(),
87 nSec, 0, 2*TMath::Pi());
8dc823cc 88 hMult->Sumw2();
3bb122c7 89 vtxArray->AddAtAndExpand(hMult,i);
90
91 }
92 }
93 }
8dc823cc 94 fNevents = new TArrayI(nVtxbins);
3bb122c7 95 fOutputList->Add(fArray);
96
97
98}
8dc823cc 99//_____________________________________________________________________
3bb122c7 100void AliFMDAnalysisTaskBackgroundCorrection::ConnectInputData(Option_t */*option*/)
101{
102
103 TList* list = (TList*)GetInputData(0);
104 fInputArray = (TObjArray*)list->At(0);
8dc823cc 105 fVertexString = (TObjString*)list->At(1);
3bb122c7 106}
8dc823cc 107//_____________________________________________________________________
3bb122c7 108void AliFMDAnalysisTaskBackgroundCorrection::Exec(Option_t */*option*/)
109{
110 AliFMDAnaParameters* pars = AliFMDAnaParameters::Instance();
111
8dc823cc 112 Int_t vtxbin = fVertexString->GetString().Atoi();
113 fNevents->operator[](vtxbin)++;
3bb122c7 114
3bb122c7 115 for(UShort_t det=1;det<=3;det++) {
116 TObjArray* detInputArray = (TObjArray*)fInputArray->At(det);
117 TObjArray* detArray = (TObjArray*)fArray->At(det);
118 Int_t nRings = (det==1 ? 1 : 2);
119 for (UShort_t ir = 0; ir < nRings; ir++) {
120 Char_t ringChar = (ir == 0 ? 'I' : 'O');
121 TObjArray* vtxInputArray = (TObjArray*)detInputArray->At(ir);
122 TObjArray* vtxArray = (TObjArray*)detArray->At(ir);
8dc823cc 123 TH2F* hMultTotal = (TH2F*)vtxArray->At(vtxbin);
124 TH2F* hMult = (TH2F*)vtxInputArray->At(vtxbin);
125 TH2F* hBg = pars->GetBackgroundCorrection(det, ringChar, vtxbin);
126
127 TH2F* hTmp = (TH2F*)hMult->Clone("hMult_from_event");
128 hTmp->Sumw2();
129 hTmp->Divide(hTmp,hBg,1,1,"B");
130
131 hMultTotal->Add(hTmp);
132
133
3bb122c7 134 }
135 }
136
137 PostData(0, fOutputList);
138
139}
8dc823cc 140//_____________________________________________________________________
141void AliFMDAnalysisTaskBackgroundCorrection::Terminate(Option_t */*option*/) {
142
143 AliFMDAnaParameters* pars = AliFMDAnaParameters::Instance();
144
145 Int_t nVtxbins = pars->GetNvtxBins();
146
147 for(UShort_t det=1;det<=3;det++) {
148 TObjArray* detArray = (TObjArray*)fArray->At(det);
149 Int_t nRings = (det==1 ? 1 : 2);
150 for (UShort_t ir = 0; ir < nRings; ir++) {
151 TObjArray* vtxArray = (TObjArray*)detArray->At(ir);
152 for(Int_t i =0; i<nVtxbins; i++) {
153 TH2F* hMultTotal = (TH2F*)vtxArray->At(i);
154 hMultTotal->Scale(1/(Float_t)fNevents->At(i));
155 }
156 }
157 }
3bb122c7 158
8dc823cc 159}
160//_____________________________________________________________________
161//
162//
163// EOF