]>
Commit | Line | Data |
---|---|---|
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 | |
39 | ClassImp(AliAnalysisTaskCLQA) | |
40 | ||
41 | //________________________________________________________________________ | |
42 | AliAnalysisTaskCLQA::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 | //________________________________________________________________________ | |
52 | AliAnalysisTaskCLQA::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 | //________________________________________________________________________ | |
62 | AliAnalysisTaskCLQA::~AliAnalysisTaskCLQA() | |
63 | { | |
64 | // Destructor | |
65 | } | |
66 | ||
67 | //________________________________________________________________________ | |
96a87a98 | 68 | Bool_t AliAnalysisTaskCLQA::FillHistograms() |
d87c9c78 | 69 | { |
96a87a98 | 70 | // Fill histograms. |
d87c9c78 | 71 | |
96a87a98 | 72 | return kTRUE; |
d87c9c78 | 73 | } |
74 | ||
75 | //________________________________________________________________________ | |
76 | Bool_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 | 87 | Bool_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 | //________________________________________________________________________ | |
97 | void 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 | //________________________________________________________________________ | |
223 | void 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 | //________________________________________________________________________ | |
235 | void 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 | } |