]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGJE/EMCALJetTasks/UserTasks/AliAnalysisTaskCLQA.cxx
Up from Redmer
[u/mrichter/AliRoot.git] / PWGJE / EMCALJetTasks / UserTasks / AliAnalysisTaskCLQA.cxx
CommitLineData
d87c9c78 1// $Id: AliAnalysisTaskCLQA.cxx 60694 2013-02-04 15:35:56Z morsch $
2//
3// Constantin's Task
4//
5// Author: C.Loizides
6
7#include <TChain.h>
8#include <TClonesArray.h>
96a87a98 9#include <TDirectory.h>
10#include <TFile.h>
d87c9c78 11#include <TH1F.h>
12#include <TH2F.h>
13#include <TH3F.h>
14#include <TList.h>
15#include <TLorentzVector.h>
96a87a98 16#include <TNtuple.h>
17#include <TNtupleD.h>
18#include <TTree.h>
d87c9c78 19
20#include "AliAODEvent.h"
21#include "AliAnalysisManager.h"
96a87a98 22#include "AliAnalysisTaskCLQA.h"
23#include "AliAnalysisUtils.h"
d87c9c78 24#include "AliCentrality.h"
25#include "AliEMCALGeoParams.h"
26#include "AliEMCALGeometry.h"
96a87a98 27#include "AliESDEvent.h"
d87c9c78 28#include "AliEmcalJet.h"
29#include "AliExternalTrackParam.h"
96a87a98 30#include "AliInputEventHandler.h"
d87c9c78 31#include "AliLog.h"
32#include "AliPicoTrack.h"
33#include "AliTrackerBase.h"
34#include "AliVCluster.h"
35#include "AliVEventHandler.h"
36#include "AliVParticle.h"
37#include "AliVTrack.h"
d87c9c78 38
39ClassImp(AliAnalysisTaskCLQA)
40
41//________________________________________________________________________
42AliAnalysisTaskCLQA::AliAnalysisTaskCLQA() :
96a87a98 43 AliAnalysisTaskEmcalJet("AliAnalysisTaskCLQA", kTRUE),
44 fDoCumulants(0),
45 fCumPtMin(0.3), fCumPtMax(5.0), fCumEtaMin(-1.0), fCumEtaMax(1.0), fCumMmin(15),
46 fNtupCum(0), fNtupCumInfo(0)
d87c9c78 47{
48 // Default constructor.
49}
50
51//________________________________________________________________________
52AliAnalysisTaskCLQA::AliAnalysisTaskCLQA(const char *name) :
96a87a98 53 AliAnalysisTaskEmcalJet(name, kTRUE),
54 fDoCumulants(0),
55 fCumPtMin(0.3), fCumPtMax(5.0), fCumEtaMin(-1.0), fCumEtaMax(1.0), fCumMmin(15),
56 fNtupCum(0), fNtupCumInfo(0)
d87c9c78 57{
58 // Standard constructor.
59}
60
61//________________________________________________________________________
62AliAnalysisTaskCLQA::~AliAnalysisTaskCLQA()
63{
64 // Destructor
65}
66
67//________________________________________________________________________
96a87a98 68Bool_t AliAnalysisTaskCLQA::FillHistograms()
d87c9c78 69{
96a87a98 70 // Fill histograms.
d87c9c78 71
96a87a98 72 return kTRUE;
d87c9c78 73}
74
75//________________________________________________________________________
76Bool_t AliAnalysisTaskCLQA::RetrieveEventObjects()
77{
78 // Retrieve event objects.
79
80 if (!AliAnalysisTaskEmcalJet::RetrieveEventObjects())
81 return kFALSE;
82
83 return kTRUE;
84}
85
d87c9c78 86//________________________________________________________________________
96a87a98 87Bool_t AliAnalysisTaskCLQA::Run()
d87c9c78 88{
96a87a98 89 // Run various functions.
90
91 RunCumulants(fCumMmin,fCumPtMin,fCumPtMax,fCumEtaMin,fCumEtaMax);
d87c9c78 92
d87c9c78 93 return kTRUE;
94}
96a87a98 95
96//________________________________________________________________________
97void AliAnalysisTaskCLQA::RunCumulants(Double_t Mmin, Double_t ptmin, Double_t ptmax, Double_t etamin, Double_t etamax)
98{
99 // Run cumulant analysis.
100
101 if (!fDoCumulants)
102 return;
103
104 if (!fTracks)
105 return;
106
107 const Int_t ntracks = fTracks->GetEntries();
5180389c 108 Int_t Mall=0,M=0,Mall2=0;
109 Double_t ptmaxall=0,ptsumall=0,pt2sumall=0,ptsumall2=0;
96a87a98 110 Double_t tsa00=0,tsa10=0,tsa11=0;
111 Double_t Q2r=0,Q2i=0;
112 Double_t Q4r=0,Q4i=0;
113 Double_t mpt=0,mpt2=0,ptmaxq=0;
114 Double_t ts00=0,ts10=0,ts11=0;
115 for (Int_t i =0; i<ntracks; ++i) {
116 AliVTrack *track = dynamic_cast<AliVTrack*>(fTracks->At(i));
3531e13d 117 if (!track)
118 continue;
96a87a98 119 Double_t eta = track->Eta();
120 if ((eta<etamin) || (eta>etamax))
121 continue;
122 Double_t pt = track->Pt();
123 if (pt>ptmaxall)
124 ptmaxall = pt;
78729b7c 125 if (pt>1) {
e29fb8cd 126 ptsumall2 += pt;
127 ++Mall2;
128 }
96a87a98 129 ptsumall +=pt;
130 pt2sumall +=pt*pt;
131 Double_t px = track->Px();
132 Double_t py = track->Py();
133 tsa00 += px*px/pt;
134 tsa10 += px*py/pt;
135 tsa11 += py*py/pt;
136 ++Mall;
137 if ((pt<ptmin) || (pt>ptmax))
138 continue;
139 if (pt>ptmaxq)
140 ptmaxq = pt;
141 Double_t phi = track->Phi();
142 ++M;
143 mpt += pt;
144 mpt2 += pt*pt;
145 ts00 += px*px/pt;
146 ts10 += px*py/pt;
147 ts11 += py*py/pt;
148 Q2r += TMath::Cos(2*phi);
149 Q2i += TMath::Sin(2*phi);
150 Q4r += TMath::Cos(4*phi);
151 Q4i += TMath::Sin(4*phi);
152 }
153
154 if (M<Mmin)
155 return;
156
157 Double_t Q2abs = Q2r*Q2r+Q2i*Q2i;
158 Double_t Q4abs = Q4r*Q4r+Q4i*Q4i;
e29fb8cd 159 Double_t Q42re = Q4r*Q2r*Q2r-Q4r*Q2i*Q2i+2*Q4i*Q2r*Q2i;
96a87a98 160
161 Double_t tsall = -1;
162 Double_t tsax = (tsa00+tsa11)*(tsa00+tsa11)-4*(tsa00*tsa11-tsa10*tsa10);
163 if (tsax>=0) {
164 Double_t l1 = 0.5*(tsa00+tsa11+TMath::Sqrt(tsax))/ptsumall;
165 Double_t l2 = 0.5*(tsa00+tsa11-TMath::Sqrt(tsax))/ptsumall;
166 tsall = 2*l2/(l1+l2);
167 }
168
169 Double_t ts = -1;
170 Double_t tsx = (ts00+ts11)*(ts00+ts11)-4*(ts00*ts11-ts10*ts10);
171 if (tsx>=0) {
172 Double_t l1 = 0.5*(ts00+ts11+TMath::Sqrt(tsx))/ptsumall;
173 Double_t l2 = 0.5*(ts00+ts11-TMath::Sqrt(tsx))/ptsumall;
174 ts = 2*l2/(l1+l2);
175 }
176
177 AliAnalysisUtils anau;
178 AliVEvent *event = InputEvent();
179 AliAnalysisManager *am = AliAnalysisManager::GetAnalysisManager();
180
181 fNtupCumInfo->fTrig = ((AliInputEventHandler*)(am->GetInputEventHandler()))->IsEventSelected();
182 fNtupCumInfo->fRun = event->GetRunNumber();
183 fNtupCumInfo->fVz = event->GetPrimaryVertex()->GetZ();
184 fNtupCumInfo->fIsFEC = anau.IsFirstEventInChunk(event);
185 fNtupCumInfo->fIsVSel = anau.IsVertexSelected2013pA(event);
186 fNtupCumInfo->fIsP = event->IsPileupFromSPD(3/*minContributors*/,
187 0.8/*minZdist*/,
188 3./*nSigmaZdist*/,
189 2./*nSigmaDiamXY*/,
190 5./*nSigmaDiamZ*/);
191
192 fNtupCumInfo->fMall = Mall;
e29fb8cd 193 fNtupCumInfo->fMall2 = Mall2;
96a87a98 194 fNtupCumInfo->fPtMaxall = ptmaxall;
195 fNtupCumInfo->fMPtall = ptsumall/Mall;
196 fNtupCumInfo->fMPt2all = pt2sumall/Mall;
78729b7c 197 if (Mall2>0)
198 fNtupCumInfo->fMPtall2 = ptsumall2/Mall2;
199 else
200 fNtupCumInfo->fMPtall2 = -1;
96a87a98 201 fNtupCumInfo->fTSall = tsall;
202 fNtupCumInfo->fM = M;
203 fNtupCumInfo->fQ2abs = Q2abs;
204 fNtupCumInfo->fQ4abs = Q4abs;
205 fNtupCumInfo->fQ42re = Q42re;
206 fNtupCumInfo->fPtMax = ptmaxq;
207 fNtupCumInfo->fMPt = mpt/M;
208 fNtupCumInfo->fMPt2 = mpt2/M;
209 fNtupCumInfo->fTS = ts;
210 AliVVZERO *vzero = InputEvent()->GetVZEROData();
211 fNtupCumInfo->fMV0M = vzero->GetMTotV0A()+vzero->GetMTotV0C();
212 AliCentrality *cent = InputEvent()->GetCentrality();
213 fNtupCumInfo->fCl1 = cent->GetCentralityPercentile("CL1");
214 fNtupCumInfo->fV0M = cent->GetCentralityPercentile("V0M");
215 fNtupCumInfo->fV0MEq = cent->GetCentralityPercentile("V0MEq");
216 fNtupCumInfo->fV0A = cent->GetCentralityPercentile("V0A");
217 fNtupCumInfo->fV0AEq = cent->GetCentralityPercentile("V0AEq");
218 fNtupCumInfo->fZNA = cent->GetCentralityPercentile("ZNA");
219 fNtupCum->Fill();
220}
221
222//________________________________________________________________________
223void AliAnalysisTaskCLQA::SetCumParams(Double_t Mmin, Double_t ptmin, Double_t ptmax, Double_t etamin, Double_t etamax)
224{
225 // Set parameters for cumulants.
226
227 fCumMmin = Mmin;
228 fCumPtMin = ptmin;
229 fCumPtMax = ptmax;
230 fCumEtaMin = etamin;
231 fCumEtaMax = etamax;
232}
233
234//________________________________________________________________________
235void AliAnalysisTaskCLQA::UserCreateOutputObjects()
236{
237 // Create histograms
238
239 AliAnalysisTaskEmcalJet::UserCreateOutputObjects();
240
241 if (fDoCumulants) {
242 fNtupCum = new TTree("NtupCum", "Ntuple for cumulant analysis");
243 if (1) {
244 fNtupCum->SetDirectory(0);
245 } else {
246 TFile *f = OpenFile(1);
247 if (f) {
248 f->SetCompressionLevel(2);
249 fNtupCum->SetDirectory(f);
250 fNtupCum->SetAutoFlush(-4*1024*1024);
251 fNtupCum->SetAutoSave(0);
252 }
253 }
254 fNtupCumInfo = new AliNtupCumInfo;
255 fNtupCum->Branch("cumulants", &fNtupCumInfo, 32*1024, 99);
256 fOutput->Add(fNtupCum);
257 }
258
259 PostData(1, fOutput); // Post data for ALL output slots >0 here, to get at least an empty histogram
260}