4 #include <TInterpreter.h>
10 #include "AliFMDAnalysisTaskCollector.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"
18 #include "AliESDVertex.h"
19 #include "AliFMDAnaParameters.h"
20 #include "AliFMDGeometry.h"
21 ClassImp(AliFMDAnalysisTaskCollector)
24 AliFMDAnalysisTaskCollector::AliFMDAnalysisTaskCollector()
33 // Default constructor
34 DefineInput (0, TChain::Class());
35 DefineOutput(0, TList::Class());
37 //____________________________________________________________________
38 AliFMDAnalysisTaskCollector::AliFMDAnalysisTaskCollector(const char* name):
39 AliAnalysisTask(name, "AnalysisTaskFMD"),
48 // Default constructor
49 DefineInput (0, TChain::Class());
50 DefineOutput(0, TList::Class());
52 //____________________________________________________________________
53 void AliFMDAnalysisTaskCollector::CreateOutputObjects()
55 // Create the output container
56 printf("AnalysisTaskFMD::CreateOutPutData() \n");
58 fOutputList = new TList();//(TList*)GetOutputData(0);
59 AliFMDAnaParameters* pars = AliFMDAnaParameters::Instance();
61 fArray = new TObjArray();
62 fArray->SetName("FMD");
66 for(Int_t nEta = 0; nEta <= pars->GetNetaBins()+1; nEta++) {
67 TObjArray* etaArray = new TObjArray();
68 fArray->AddAtAndExpand(etaArray,nEta);
69 for(Int_t det =1; det<=3;det++)
71 TObjArray* detArray = new TObjArray();
72 detArray->SetName(Form("FMD%d",det));
73 etaArray->AddAtAndExpand(detArray,det);
74 Int_t nRings = (det==1 ? 1 : 2);
75 for(Int_t ring = 0;ring<nRings;ring++)
77 Char_t ringChar = (ring == 0 ? 'I' : 'O');
78 hEdist = new TH1F(Form("FMD%d%c_etabin%d",det,ringChar,nEta),Form("FMD%d%c_etabin%d",det,ringChar,nEta),200,0,6);
79 hEdist->SetXTitle("#Delta E / E_{MIP}");
80 fOutputList->Add(hEdist);
81 detArray->AddAtAndExpand(hEdist,ring);
87 fZvtxDist = new TH1F("ZvtxDist","Vertex distribution",100,-30,30);
88 fZvtxDist->SetXTitle("z vertex");
89 //fOutputList->Add(fArray);
90 fOutputList->Add(fZvtxDist);
92 //____________________________________________________________________
93 void AliFMDAnalysisTaskCollector::Init()
96 printf("AnalysisTaskFMD::Init() \n");
100 //____________________________________________________________________
101 void AliFMDAnalysisTaskCollector::ConnectInputData(Option_t */*option*/)
103 fChain = (TChain*)GetInputData(0);
104 fESD = new AliESDEvent();
105 fESD->ReadFromTree(fChain);
108 //____________________________________________________________________
109 void AliFMDAnalysisTaskCollector::Exec(Option_t */*option*/)
111 AliESD* old = fESD->GetAliESDOld();
113 fESD->CopyFromOldESD();
115 AliFMDAnaParameters* pars = AliFMDAnaParameters::Instance();
120 //if(vertex[0] == 0 && vertex[1] == 0 && vertex[2] == 0)
122 fZvtxDist->Fill(vertex[2]);
124 if(TMath::Abs(vertex[2]) > pars->GetVtxCutZ())
127 AliESDFMD* fmd = fESD->GetFMDData();
132 for(UShort_t det=1;det<=3;det++) {
135 Int_t nRings = (det==1 ? 1 : 2);
136 for (UShort_t ir = 0; ir < nRings; ir++) {
138 Char_t ring = (ir == 0 ? 'I' : 'O');
139 UShort_t nsec = (ir == 0 ? 20 : 40);
140 UShort_t nstr = (ir == 0 ? 512 : 256);
141 TH2F* hBg = pars->GetBackgroundCorrection(det,ring,0);
143 for(UShort_t sec =0; sec < nsec; sec++) {
144 for(UShort_t strip = 0; strip < nstr; strip++) {
147 Float_t mult = fmd->Multiplicity(det,ring,sec,strip);
148 if(mult == AliESDFMD::kInvalidMult || mult == 0) continue;
149 AliFMDGeometry* geo = AliFMDGeometry::Instance();
152 geo->Detector2XYZ(det,ring,sec,strip,x,y,z);
154 Double_t r = TMath::Sqrt(x*x+y*y);
156 Double_t z_real = z-vertex[2];
157 Double_t theta = TMath::ATan2(r,z_real);
158 // std::cout<<"From EtaFromStrip "<<theta<<std::endl;
159 Double_t eta = -1*TMath::Log(TMath::Tan(0.5*theta));
160 //Float_t eta = fmd->Eta(det,ring,sec,strip);
161 Int_t nEta = hBg->GetXaxis()->FindBin(eta);
163 TObjArray* etaArray = (TObjArray*)fArray->At(nEta);
164 TObjArray* detArray = (TObjArray*)etaArray->At(det);
165 TH1F* Edist = (TH1F*)detArray->At(ir);
174 PostData(0, fOutputList);
177 //____________________________________________________________________
178 void AliFMDAnalysisTaskCollector::Terminate(Option_t */*option*/)
181 for(UShort_t det=1;det<=3;det++) {
182 TObjArray* detArray = (TObjArray*)fArray->At(det);
183 Int_t nRings = (det==1 ? 1 : 2);
184 for (UShort_t ir = 0; ir < nRings; ir++) {
185 TH1F* hEdist = (TH1F*)detArray->At(ir);
186 hEdist->SetAxisRange(0.4,hEdist->GetXaxis()->GetXmax());
187 Float_t max = hEdist->GetBinCenter(hEdist->GetMaximumBin());
188 hEdist->Fit("landau","","",max-0.1,2*max);
193 //_____________________________________________________________________
194 void AliFMDAnalysisTaskCollector::GetVertex(Double_t* vertexXYZ)
196 const AliESDVertex* vertex = 0;
197 vertex = fESD->GetPrimaryVertex();
198 if (!vertex || (vertexXYZ[0] == 0 && vertexXYZ[1] == 0 && vertexXYZ[2] == 0))
199 vertex = fESD->GetPrimaryVertexSPD();
200 if (!vertex || (vertexXYZ[0] == 0 && vertexXYZ[1] == 0 && vertexXYZ[2] == 0))
201 vertex = fESD->GetPrimaryVertexTPC();
203 if (!vertex || (vertexXYZ[0] == 0 && vertexXYZ[1] == 0 && vertexXYZ[2] == 0))
204 vertex = fESD->GetVertex();
206 if (vertex && (vertexXYZ[0] != 0 || vertexXYZ[1] != 0 || vertexXYZ[2] != 0)) {
207 vertex->GetXYZ(vertexXYZ);
208 //std::cout<<vertex->GetName()<<" "<< vertex->GetTitle() <<" "<< vertex->GetZv()<<std::endl;
211 else if (fESD->GetESDTZERO()) {
214 vertexXYZ[2] = fESD->GetT0zVertex();
221 //____________________________________________________________________