]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGJE/EMCALJetTasks/AliAnalysisTaskScale.cxx
updates trigger QA
[u/mrichter/AliRoot.git] / PWGJE / EMCALJetTasks / AliAnalysisTaskScale.cxx
CommitLineData
0b777a09 1// $Id$
4a6b693d 2//
3// Scale task.
4//
68263112 5// Author: R.Reed, M.Connors
0b777a09 6
c25dc25a 7#include "AliAnalysisTaskScale.h"
8
0b777a09 9#include <TClonesArray.h>
c25dc25a 10#include <TF1.h>
8154249f 11#include <TH2F.h>
0b777a09 12#include <TLorentzVector.h>
73e2fd59 13#include <TMath.h>
b1dfb3f4 14
40e2fd10 15#include "AliEMCALGeometry.h"
16#include "AliLog.h"
c25dc25a 17#include "AliVCluster.h"
7cd832c7 18#include "AliVParticle.h"
19#include "AliParticleContainer.h"
0b777a09 20
21ClassImp(AliAnalysisTaskScale)
22
c25dc25a 23//________________________________________________________________________
24AliAnalysisTaskScale::AliAnalysisTaskScale() :
9239b066 25 AliAnalysisTaskEmcal("AliAnalysisTaskScale", kTRUE),
c25dc25a 26 fScaleFunction(0),
7cd832c7 27 fEmcalArea(1),
28 fTpcArea(1),
c25dc25a 29 fHistPtTPCvsCent(0),
30 fHistPtEMCALvsCent(0),
31 fHistEtvsCent(0),
32 fHistScalevsCent(0),
33 fHistDeltaScalevsCent(0),
a828ea11 34 fHistScaleEmcalvsCent(0),
35 fHistScale2EmcalvsCent(0),
36 fHistChScalevsCent(0),
37 fHistChScale2EmcalvsCent(0),
c25dc25a 38 fHistPtTPCvsNtrack(0),
39 fHistPtEMCALvsNtrack(0),
40 fHistEtvsNtrack(0),
41 fHistScalevsNtrack(0),
42 fHistDeltaScalevsNtrack(0),
a828ea11 43 fHistScaleEmcalvsNtrack(0),
44 fHistScale2EmcalvsNtrack(0),
45 fHistChScalevsNtrack(0),
46 fHistChScale2EmcalvsNtrack(0),
c25dc25a 47 fHistTrackPtvsCent(0),
48 fHistClusterPtvsCent(0),
49 fHistTrackEtaPhi(0),
a828ea11 50 fHistClusterEtaPhi(0),
51 fHistScalevsScale2Emcal(0),
52 fHistScalevsScaleEmcal(0),
53 fHistScaleEmcalvsScale2Emcal(0)
c25dc25a 54{
55 // Default constructor.
73e2fd59 56
57 SetMakeGeneralHistograms(kTRUE);
c25dc25a 58}
59
0b777a09 60//________________________________________________________________________
b1dfb3f4 61AliAnalysisTaskScale::AliAnalysisTaskScale(const char *name) :
9239b066 62 AliAnalysisTaskEmcal(name, kTRUE),
b1dfb3f4 63 fScaleFunction(0),
7cd832c7 64 fEmcalArea(1),
65 fTpcArea(1),
b1dfb3f4 66 fHistPtTPCvsCent(0),
67 fHistPtEMCALvsCent(0),
68 fHistEtvsCent(0),
69 fHistScalevsCent(0),
70 fHistDeltaScalevsCent(0),
a828ea11 71 fHistScaleEmcalvsCent(0),
72 fHistScale2EmcalvsCent(0),
73 fHistChScalevsCent(0),
74 fHistChScale2EmcalvsCent(0),
b1dfb3f4 75 fHistPtTPCvsNtrack(0),
76 fHistPtEMCALvsNtrack(0),
77 fHistEtvsNtrack(0),
78 fHistScalevsNtrack(0),
a5e84976 79 fHistDeltaScalevsNtrack(0),
a828ea11 80 fHistScaleEmcalvsNtrack(0),
81 fHistScale2EmcalvsNtrack(0),
82 fHistChScalevsNtrack(0),
83 fHistChScale2EmcalvsNtrack(0),
a5e84976 84 fHistTrackPtvsCent(0),
85 fHistClusterPtvsCent(0),
86 fHistTrackEtaPhi(0),
a828ea11 87 fHistClusterEtaPhi(0),
88 fHistScalevsScale2Emcal(0),
89 fHistScalevsScaleEmcal(0),
90 fHistScaleEmcalvsScale2Emcal(0)
0b777a09 91{
4a6b693d 92 // Constructor.
0b777a09 93
73e2fd59 94 SetMakeGeneralHistograms(kTRUE);
0b777a09 95}
96
97//________________________________________________________________________
98void AliAnalysisTaskScale::UserCreateOutputObjects()
99{
4a6b693d 100 // Create my user objects.
101
9239b066 102 AliAnalysisTaskEmcal::UserCreateOutputObjects();
0b777a09 103
a828ea11 104 fHistPtTPCvsCent = new TH2F("PtTPCvsCent","rho vs cent", 101, -1, 100, 500, 0, 1000);
105 fHistPtEMCALvsCent = new TH2F("PtEMCALvsCent","rho vs cent", 101, -1, 100, 500, 0, 1000);
106 fHistEtvsCent = new TH2F("EtvsCent","rho vs cent", 101, -1, 100, 500, 0, 1000);
107 fHistScalevsCent = new TH2F("ScalevsCent","rho vs cent", 101, -1, 100, 500, 0, 5);
108 fHistDeltaScalevsCent = new TH2F("DeltaScalevsCent","rho vs cent", 101, -1, 100, 500, -2.5, 2.5);
109 fHistScaleEmcalvsCent = new TH2F("ScaleEmcalvsCent","", 101, -1, 100, 500, 0, 5);
110 fHistScale2EmcalvsCent = new TH2F("Scale2EmcalvsCent","", 101, -1, 100, 500, 0, 5);
111 fHistChScalevsCent = new TH2F("ChScalevsCent","", 101, -1, 100, 500, 0, 5);
112 fHistChScale2EmcalvsCent = new TH2F("ChScale2EmcalvsCent","", 101, -1, 100, 500, 0, 5);
113 fHistPtTPCvsNtrack = new TH2F("PtTPCvsNtrack","rho vs cent", 500, 0, 2500, 500, 0, 1000);
114 fHistPtEMCALvsNtrack = new TH2F("PtEMCALvsNtrack","rho vs cent", 500, 0, 2500, 500, 0, 1000);
115 fHistEtvsNtrack = new TH2F("EtvsNtrack","rho vs cent", 500, 0, 2500, 500, 0, 1000);
116 fHistScalevsNtrack = new TH2F("ScalevsNtrack","rho vs cent", 500, 0, 2500, 500, 0, 5);
117 fHistDeltaScalevsNtrack = new TH2F("DeltaScalevsNtrack","rho vs cent", 500, 0, 2500, 500, -2.5, 2.5);
118 fHistScaleEmcalvsNtrack = new TH2F("ScaleEmcalvsNtrack","", 500, 0, 2500, 500, 0, 5);
119 fHistScale2EmcalvsNtrack = new TH2F("Scale2EmcalvsNtrack","", 500, 0, 2500, 500, 0, 5);
120 fHistChScalevsNtrack = new TH2F("ChScalevsNtrack","", 500, 0, 2500, 500, 0, 5);
121 fHistChScale2EmcalvsNtrack = new TH2F("ChScale2EmcalvsNtrack","", 500, 0, 2500, 500, 0, 5);
122 fHistTrackPtvsCent = new TH2F("TrackPtvsCent","Track pt vs cent", 101, -1, 100, 500, 0, 100);
123 fHistClusterPtvsCent = new TH2F("ClusterPtvsCent","Cluster pt vs cent", 101, -1, 100, 500, 0, 100);
124 fHistTrackEtaPhi = new TH2F("TrackEtaPhi","Track eta phi", 100, -1.0, 1.0, 101, 0, 2.02*TMath::Pi());
125 fHistClusterEtaPhi = new TH2F("ClusterEtaPhi","Cluster eta phi", 100, -1.0, 1.0, 101, 0, 2.02*TMath::Pi());
126 fHistScalevsScale2Emcal = new TH2F("ScalevsScale2Emcal","", 500, 0, 5, 500, 0, 5);
127 fHistScalevsScaleEmcal = new TH2F("ScalevsScaleEmcal","", 500, 0, 5, 500, 0, 5);
128 fHistScaleEmcalvsScale2Emcal = new TH2F("ScaleEmcalvsScale2Emcal","", 500, 0, 5, 500, 0, 5);
129
e44e8726 130 fOutput->Add(fHistPtTPCvsCent);
131 fOutput->Add(fHistPtEMCALvsCent);
132 fOutput->Add(fHistEtvsCent);
133 fOutput->Add(fHistScalevsCent);
134 fOutput->Add(fHistDeltaScalevsCent);
a828ea11 135 fOutput->Add(fHistScaleEmcalvsCent);
136 fOutput->Add(fHistScale2EmcalvsCent);
137 fOutput->Add(fHistChScalevsCent);
138 fOutput->Add(fHistChScale2EmcalvsCent);
e44e8726 139 fOutput->Add(fHistPtTPCvsNtrack);
140 fOutput->Add(fHistPtEMCALvsNtrack);
141 fOutput->Add(fHistEtvsNtrack);
142 fOutput->Add(fHistScalevsNtrack);
143 fOutput->Add(fHistDeltaScalevsNtrack);
a828ea11 144 fOutput->Add(fHistScaleEmcalvsNtrack);
145 fOutput->Add(fHistScale2EmcalvsNtrack);
146 fOutput->Add(fHistChScalevsNtrack);
147 fOutput->Add(fHistChScale2EmcalvsNtrack);
e44e8726 148 fOutput->Add(fHistTrackPtvsCent);
149 fOutput->Add(fHistClusterPtvsCent);
150 fOutput->Add(fHistTrackEtaPhi);
151 fOutput->Add(fHistClusterEtaPhi);
a828ea11 152 fOutput->Add(fHistScalevsScale2Emcal);
153 fOutput->Add(fHistScalevsScaleEmcal);
154 fOutput->Add(fHistScaleEmcalvsScale2Emcal);
e44e8726 155
156 PostData(1, fOutput);
0b777a09 157}
158
b1dfb3f4 159//________________________________________________________________________
160Double_t AliAnalysisTaskScale::GetScaleFactor(Double_t cent)
161{
c25dc25a 162 // Get scale function.
163
b1dfb3f4 164 Double_t scale = -1;
165 if (fScaleFunction)
166 scale = fScaleFunction->Eval(cent);
167 return scale;
168}
169
e44e8726 170//________________________________________________________________________
171Bool_t AliAnalysisTaskScale::FillHistograms()
172{
173 // Execute on each event.
7cd832c7 174
40e2fd10 175 const Double_t EmcalMinPhi = fGeom->GetArm1PhiMin() * TMath::DegToRad();
176 const Double_t EmcalMaxPhi = fGeom->GetArm1PhiMax() * TMath::DegToRad();
a828ea11 177 const Double_t EmcalWidth = (EmcalMaxPhi-EmcalMinPhi)/2.0;
0b777a09 178
85211d8e 179 Double_t ptTPC = 0;
180 Double_t ptEMCAL = 0;
a828ea11 181 Double_t ptEMCAL2 = 0;
b1dfb3f4 182
e44e8726 183 const Int_t Ntracks = fTracks->GetEntries();
0b777a09 184 for (Int_t iTracks = 0; iTracks < Ntracks; ++iTracks) {
7cd832c7 185 AliVParticle *track = static_cast<AliVParticle*>(fTracks->At(iTracks));
b1dfb3f4 186
0b777a09 187 if (!track)
188 continue;
b1dfb3f4 189
e44e8726 190 if (!AcceptTrack(track))
191 continue;
192
b1dfb3f4 193 if (TMath::Abs(track->Eta()) > 0.7) // only accept tracks in the EMCal eta range
0b777a09 194 continue;
b1dfb3f4 195
e44e8726 196 fHistTrackPtvsCent->Fill(fCent,track->Pt());
a5e84976 197 fHistTrackEtaPhi->Fill(track->Eta(),track->Phi());
b1dfb3f4 198 ptTPC += track->Pt();
7cd832c7 199 if ((track->Phi() > (EmcalMaxPhi+EmcalWidth)) || (track->Phi() < (EmcalMinPhi-EmcalWidth))) continue;
a828ea11 200 ptEMCAL2 += track->Pt();
7cd832c7 201 if ((track->Phi() > EmcalMaxPhi) || (track->Phi() < EmcalMinPhi)) continue;
b1dfb3f4 202 ptEMCAL += track->Pt();
85211d8e 203 }
e44e8726 204
205 if (ptTPC == 0)
206 return kFALSE;
0b777a09 207
85211d8e 208 Double_t Et = 0;
e44e8726 209 const Int_t Nclus = fCaloClusters->GetEntries();
4a6b693d 210 for (Int_t iClus = 0; iClus < Nclus; ++iClus) {
e44e8726 211 AliVCluster *c = static_cast<AliVCluster*>(fCaloClusters->At(iClus));
d03084cd 212 if (!c)
213 continue;
e44e8726 214
215 if (!AcceptCluster(c))
0b777a09 216 continue;
a5e84976 217
e44e8726 218 TLorentzVector nPart;
219 c->GetMomentum(nPart, fVertex);
a5e84976 220
e44e8726 221 fHistClusterPtvsCent->Fill(fCent, nPart.Pt());
222 fHistClusterEtaPhi->Fill(nPart.Eta(), nPart.Phi());
a5e84976 223
85211d8e 224 Et += nPart.Pt();
0b777a09 225 }
a828ea11 226
a38a6344 227 Double_t scalecalc = -1;
228 if (ptEMCAL > 0 && Et > 0 && ptTPC > 0)
7cd832c7 229 scalecalc = ((Et + ptEMCAL) / fEmcalArea) * (fTpcArea / ptTPC);
a828ea11 230 const Double_t scale = GetScaleFactor(fCent);
231 Double_t scalecalcemcal = -1;
232 if (ptEMCAL > 0)
233 scalecalcemcal = (Et+ptEMCAL)/ptEMCAL;
234 Double_t scalecalcemcal2 = -1;
235 Double_t Chscalecalcemcal2 = -1;
236 if (ptEMCAL2 > 0){
237 scalecalcemcal2 = 2*(Et+ptEMCAL)/ptEMCAL2;
238 Chscalecalcemcal2 = 2*ptEMCAL/ptEMCAL2;}
7cd832c7 239 const Double_t Chscalecalcemcal = ((ptEMCAL) / fEmcalArea) * (fTpcArea / ptTPC);
a828ea11 240
241 fHistScaleEmcalvsCent->Fill(fCent,scalecalcemcal);
242 fHistScale2EmcalvsCent->Fill(fCent,scalecalcemcal2);
243 fHistChScalevsCent->Fill(fCent,Chscalecalcemcal);
244 fHistChScale2EmcalvsCent->Fill(fCent,Chscalecalcemcal2);
245 fHistScaleEmcalvsNtrack->Fill(Ntracks,scalecalcemcal);
246 fHistScale2EmcalvsNtrack->Fill(Ntracks,scalecalcemcal2);
247 fHistChScalevsNtrack->Fill(Ntracks,Chscalecalcemcal);
248 fHistChScale2EmcalvsNtrack->Fill(Ntracks,Chscalecalcemcal2);
e44e8726 249 fHistPtTPCvsCent->Fill(fCent, ptTPC);
250 fHistPtEMCALvsCent->Fill(fCent, ptEMCAL);
251 fHistEtvsCent->Fill(fCent, Et);
252 fHistScalevsCent->Fill(fCent, scalecalc);
253 fHistDeltaScalevsCent->Fill(fCent, scalecalc - scale);
b1dfb3f4 254 fHistPtTPCvsNtrack->Fill(Ntracks, ptTPC);
255 fHistPtEMCALvsNtrack->Fill(Ntracks, ptEMCAL);
256 fHistEtvsNtrack->Fill(Ntracks, Et);
257 fHistScalevsNtrack->Fill(Ntracks, scalecalc);
258 fHistDeltaScalevsNtrack->Fill(Ntracks, scalecalc - scale);
a828ea11 259 fHistScalevsScale2Emcal->Fill(scalecalc,scalecalcemcal2);
260 fHistScalevsScaleEmcal->Fill(scalecalc,scalecalcemcal);
261 fHistScaleEmcalvsScale2Emcal->Fill(scalecalcemcal,scalecalcemcal2);
0b777a09 262
e44e8726 263 return kTRUE;
4a6b693d 264}
7cd832c7 265
266
267//________________________________________________________________________
268void AliAnalysisTaskScale::ExecOnce()
269{
9239b066 270 AliAnalysisTaskEmcal::ExecOnce();
7cd832c7 271
272 const Double_t EmcalMinEta = fGeom->GetArm1EtaMin();
273 const Double_t EmcalMaxEta = fGeom->GetArm1EtaMax();
274 const Double_t EmcalMinPhi = fGeom->GetArm1PhiMin() * TMath::DegToRad();
275 const Double_t EmcalMaxPhi = fGeom->GetArm1PhiMax() * TMath::DegToRad();
276
277 fEmcalArea = (EmcalMaxPhi - EmcalMinPhi) * (EmcalMinEta - EmcalMaxEta);
278
279 AliParticleContainer *partCont = GetParticleContainer(0);
280 if (!partCont) {
281 AliError(Form("%s: No particle container found! Assuming tpc area = 1...",GetName()));
282 fTpcArea = 1;
283 return;
284 }
285
286 Float_t TpcMaxPhi = partCont->GetParticlePhiMax();
287 Float_t TpcMinPhi = partCont->GetParticlePhiMin();
288
289 if (TpcMaxPhi > TMath::Pi()*2) TpcMaxPhi = TMath::Pi()*2;
290 if (TpcMinPhi < 0) TpcMinPhi = 0;
291
292 fTpcArea = (TpcMaxPhi - TpcMinPhi) * (EmcalMinEta - EmcalMaxEta);
293}