]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGLF/FORWARD/photons/AliAnalysisTaskPMD.cxx
Enlarging window for DCS DPs retrieval for short runs for GRP + Keeping connection...
[u/mrichter/AliRoot.git] / PWGLF / FORWARD / photons / AliAnalysisTaskPMD.cxx
CommitLineData
d4806ef4 1#include "TChain.h"
2#include "TTree.h"
3#include "TH1F.h"
4#include "TH2F.h"
5#include "TCanvas.h"
6#include "AliAnalysisTask.h"
7#include "AliAnalysisManager.h"
8#include "AliESDEvent.h"
9#include "AliESDInputHandler.h"
10#include "AliESDPmdTrack.h"
11#include "AliESDVertex.h"
12#include "AliESDVZERO.h"
13#include "AliAnalysisTaskPMD.h"
14
15// AnalysisTask For PMD
16// Authors: Sudipan De, Subhash Singha
17
18ClassImp(AliAnalysisTaskPMD)
19
20//________________________________________________________________________
21AliAnalysisTaskPMD::AliAnalysisTaskPMD(const char *name)
22: AliAnalysisTaskSE(name),
23 fESD(0),
24 fOutputList(0),
25 fHistTotEvent(0),
26 fHistTotEventAfterPhySel(0),
27 fHistTotEventAfterVtx(0),
28 fHistVtxZ(0),
29 fHistXYPre(0),
30 fHistEta(0),
31 fHistEta1(0),
32 fHistMultMeas(0),
33 fHistMultMeas1(0)
34{
35 for(Int_t i=0; i<10; i++){
36 fHistMultMeasEtaBinA[i] = 0;
37 fHistMultMeasEtaBinA1[i] = 0;
38 }
39 // Constructor
40
41 // Define input and output slots here
42 // Input slot #0 works with a TChain
43 DefineInput(0, TChain::Class());
44 // Output slot #0 id reserved by the base class for AOD
45 // Output slot #1 writes into a TH1 container
46 DefineOutput(1, TList::Class());
47}
48
49//________________________________________________________________________
50void AliAnalysisTaskPMD::UserCreateOutputObjects()
51{
52 // Create histograms
53 // Called once
54
55 fOutputList = new TList();
56 Int_t kNbinsMultA = 50; Float_t XminMultA = -0.5; Float_t XmaxMultA = 49.5;
57 Int_t kNbinsXY = 200; Float_t XminXY = -100.0; Float_t XmaxXY = 100.0;
58 Int_t kNBinsEvent = 10; Float_t XminEvent = 0; Float_t XmaxEvent = 10;
59 Int_t kNBinsEta = 10; Float_t XminEta = 2.1; Float_t XmaxEta = 4.1;
60
61 fHistTotEvent = new TH1F("TotEvent","TotEvent",
62 kNBinsEvent,XminEvent,XmaxEvent);
63 fOutputList->Add(fHistTotEvent);
64 fHistTotEventAfterPhySel = new TH1F("TotEventAfterPhySel","TotEventAfterPhySel",
65 kNBinsEvent,XminEvent,XmaxEvent);
66 fOutputList->Add(fHistTotEventAfterPhySel);
67 fHistTotEventAfterVtx = new TH1F("TotEventAfterVtx","TotEventAfterVtx",
68 kNBinsEvent,XminEvent,XmaxEvent);
69 fOutputList->Add(fHistTotEventAfterVtx);
70 fHistVtxZ = new TH1F("VtxZ","VtxZ",100,-50,50);
71 fOutputList->Add(fHistVtxZ);
72 fHistXYPre = new TH2F("XYPre","XYPre",kNbinsXY,XminXY,XmaxXY,
73 kNbinsXY,XminXY,XmaxXY);
74 fOutputList->Add(fHistXYPre);
75 fHistEta = new TH1F ("Eta","Eta",kNBinsEta,XminEta,XmaxEta);
76 fOutputList->Add(fHistEta);
77 fHistEta1 = new TH1F ("Eta1","Eta1",kNBinsEta,XminEta,XmaxEta);
78 fOutputList->Add(fHistEta1);
79 fHistMultMeas = new TH1F("MultM","MultM",100,-0.5,99.5);
80 fOutputList->Add(fHistMultMeas);
81 fHistMultMeas1 = new TH1F("MultM1","MultM1",100,-0.5,99.5);
82 fOutputList->Add(fHistMultMeas1);
83
84 Char_t nameM[256], nameM1[256];
85 for(Int_t i=0; i<10; i++){
86 sprintf(nameM,"MultM_EtaBin%d",i+1);
87 fHistMultMeasEtaBinA[i] =
88 new TH1F(nameM,nameM,kNbinsMultA,
89 XminMultA,XmaxMultA);
90 fOutputList->Add(fHistMultMeasEtaBinA[i]);
91 sprintf(nameM1,"MultM1_EtaBin%d",i+1);
92 fHistMultMeasEtaBinA1[i] =
93 new TH1F(nameM1,nameM1,kNbinsMultA,
94 XminMultA,XmaxMultA);
95 fOutputList->Add(fHistMultMeasEtaBinA1[i]);
96 }//i loop
97
98}
99
100//________________________________________________________________________
101void AliAnalysisTaskPMD::UserExec(Option_t *)
102{
103 // Main loop
104 // Called for each event
105 Float_t MipCut1 = 432;//MPV=72=> 6*MPV=432
106 Float_t MipCut2 = 648;//MPV=72=> 9*MPV=648
759ae157 107 Float_t etacls=0., theta=0., rdist=0.;
d4806ef4 108 Int_t PhotonCls = 0;//# of photon measured within 2.3 to 3.9 #eta
109 Int_t PhotonCls1 = 0;//# of photon measured within 2.3 to 3.9 #eta
110 Int_t PhotonClsAEtaBin[10] = {0};//# of photon measured with diff Eta bin
111 Int_t PhotonClsAEtaBin1[10] = {0};//# of photon measured with diff Eta bin
112 // Post output data.
113 fESD = dynamic_cast<AliESDEvent*>(InputEvent());
114 if (!fESD) {
115 printf("ERROR: fESD not available\n");
116 return;
117 }
118 fHistTotEvent->Fill(5);
119 //event selection
120 Bool_t isSelected = (((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected() & AliVEvent::kMB);
121 if (! isSelected) return;
122 fHistTotEventAfterPhySel->Fill(5);
123 //printf("There are %d tracks in this event\n", fESD->GetNumberOfPmdTracks());
124 //vertex selection
125 const AliESDVertex *vertex = fESD->GetPrimaryVertex();
e690d4d0 126 Float_t Vz = vertex->GetZ();
d4806ef4 127 Bool_t zVerStatus = vertex->GetStatus();
128 if(zVerStatus){
129 fHistVtxZ->Fill(Vz);
130 if(TMath::Abs(Vz)<10){
131 fHistTotEventAfterVtx->Fill(5);
132 Int_t ptracks = fESD->GetNumberOfPmdTracks();
133 //PMDtrack Loop
134 for(Int_t kk=0;kk<ptracks;kk++){
135 AliESDPmdTrack *pmdtr = fESD->GetPmdTrack(kk);
136 Int_t det = pmdtr->GetDetector();
137 Float_t clsX = pmdtr->GetClusterX();
138 Float_t clsY = pmdtr->GetClusterY();
139 Float_t clsZ = pmdtr->GetClusterZ();
140 clsZ -= Vz;
141 Float_t ncell = pmdtr->GetClusterCells();
142 Float_t adc = pmdtr->GetClusterADC();
143 //Int_t smn = pmdtr->GetSmn();
144 //Calculation of #eta
145 rdist = TMath::Sqrt(clsX*clsX + clsY*clsY);
146 if(clsZ!=0) theta = TMath::ATan2(rdist,clsZ);
147 etacls = -TMath::Log(TMath::Tan(0.5*theta));
148
149 if(det==0 && adc>72)fHistXYPre->Fill(clsX,clsY);
150 if(det==0 && adc>MipCut1 && ncell>2){
151 if(etacls > 2.1 && etacls<= 2.3)PhotonClsAEtaBin[0]++;
152 if(etacls > 2.3 && etacls<= 2.5)PhotonClsAEtaBin[1]++;
153 if(etacls > 2.5 && etacls<= 2.7)PhotonClsAEtaBin[2]++;
154 if(etacls > 2.7 && etacls<= 2.9)PhotonClsAEtaBin[3]++;
155 if(etacls > 2.9 && etacls<= 3.1)PhotonClsAEtaBin[4]++;
156 if(etacls > 3.1 && etacls<= 3.3)PhotonClsAEtaBin[5]++;
157 if(etacls > 3.3 && etacls<= 3.5)PhotonClsAEtaBin[6]++;
158 if(etacls > 3.5 && etacls<= 3.7)PhotonClsAEtaBin[7]++;
159 if(etacls > 3.7 && etacls<= 3.9)PhotonClsAEtaBin[8]++;
160 if(etacls > 3.9 && etacls<= 4.1)PhotonClsAEtaBin[9]++;
161 if(etacls > 2.3 && etacls<= 3.9)PhotonCls++;
162 fHistEta->Fill(etacls);
163 }//if MipCut1
164 if(det==0 && adc>MipCut2 && ncell>2){
165 if(etacls > 2.1 && etacls<= 2.3)PhotonClsAEtaBin1[0]++;
166 if(etacls > 2.3 && etacls<= 2.5)PhotonClsAEtaBin1[1]++;
167 if(etacls > 2.5 && etacls<= 2.7)PhotonClsAEtaBin1[2]++;
168 if(etacls > 2.7 && etacls<= 2.9)PhotonClsAEtaBin1[3]++;
169 if(etacls > 2.9 && etacls<= 3.1)PhotonClsAEtaBin1[4]++;
170 if(etacls > 3.1 && etacls<= 3.3)PhotonClsAEtaBin1[5]++;
171 if(etacls > 3.3 && etacls<= 3.5)PhotonClsAEtaBin1[6]++;
172 if(etacls > 3.5 && etacls<= 3.7)PhotonClsAEtaBin1[7]++;
173 if(etacls > 3.7 && etacls<= 3.9)PhotonClsAEtaBin1[8]++;
174 if(etacls > 3.9 && etacls<= 4.1)PhotonClsAEtaBin1[9]++;
175 if(etacls > 2.3 && etacls<= 3.9)PhotonCls1++;
176 fHistEta1->Fill(etacls);
177 }//if Mipcut2
178 } //PMDtrack loop
179 for(Int_t i=0; i<10; i++){
180 fHistMultMeasEtaBinA[i]->Fill(PhotonClsAEtaBin[i]);
181 fHistMultMeasEtaBinA1[i]->Fill(PhotonClsAEtaBin1[i]);
182 }//i loop
183 fHistMultMeas->Fill(PhotonCls);
184 fHistMultMeas1->Fill(PhotonCls1);
185 }// Vz loop
186 }// Vzcut loop
187 PostData(1, fOutputList);
188}
189
190//________________________________________________________________________
191void AliAnalysisTaskPMD::Terminate(Option_t *)
192{
193 // Draw result to the screen
194 // Called once at the end of the query
195
196 fOutputList = dynamic_cast<TList*> (GetOutputData(1));
197 if (!fOutputList) {
198 printf("ERROR: Output list not available\n");
199 return;
200 }
201}