new class Salvatore
[u/mrichter/AliRoot.git] / PWGJE / EMCALJetTasks / AliAnalysisTaskRhoFlow.cxx
1 // $Id: AliAnalysisTaskRhoFlow.cxx  $
2 //
3 // Calculation of rho for flow bias studies
4 //
5 // Author: S.Aiola
6
7 #include "AliAnalysisTaskRhoFlow.h"
8
9 #include <TClonesArray.h>
10 #include <TMath.h>
11 #include <TH2F.h>
12
13 #include "AliVTrack.h"
14 #include "AliLog.h"
15 #include "AliRhoParameter.h"
16
17 ClassImp(AliAnalysisTaskRhoFlow)
18
19 //________________________________________________________________________
20 AliAnalysisTaskRhoFlow::AliAnalysisTaskRhoFlow() : 
21   AliAnalysisTaskRho("AliAnalysisTaskRhoFlow",kTRUE),
22   fRhoNearSide(0),
23   fRhoAwaySide(0),
24   fRhoPerpSide1(0),
25   fRhoPerpSide2(0),
26   fHistRhoNearVsCent(0),
27   fHistDeltaRhoNearVsCent(0),
28   fHistRhoAwayVsCent(0),
29   fHistDeltaRhoAwayVsCent(0),
30   fHistRhoPerp1VsCent(0),
31   fHistDeltaRhoPerp1VsCent(0),
32   fHistRhoPerp2VsCent(0),
33   fHistDeltaRhoPerp2VsCent(0)
34 {
35   // Constructor.
36   SetAttachToEvent(kFALSE);
37 }
38
39 //________________________________________________________________________
40 AliAnalysisTaskRhoFlow::AliAnalysisTaskRhoFlow(const char *name) :
41   AliAnalysisTaskRho(name, kTRUE),
42   fRhoNearSide(0),
43   fRhoAwaySide(0),
44   fRhoPerpSide1(0),
45   fRhoPerpSide2(0),
46   fHistRhoNearVsCent(0),
47   fHistDeltaRhoNearVsCent(0),
48   fHistRhoAwayVsCent(0),
49   fHistDeltaRhoAwayVsCent(0),
50   fHistRhoPerp1VsCent(0),
51   fHistDeltaRhoPerp1VsCent(0),
52   fHistRhoPerp2VsCent(0),
53   fHistDeltaRhoPerp2VsCent(0)
54 {
55   // Constructor.
56   SetAttachToEvent(kFALSE);
57 }
58
59 //________________________________________________________________________
60 void AliAnalysisTaskRhoFlow::UserCreateOutputObjects()
61 {
62   // User create output objects, called at the beginning of the analysis.
63
64   AliAnalysisTaskEmcalJet::UserCreateOutputObjects();
65
66   fHistRhoNearVsCent = new TH2F("RhoNearVsCent", "RhoNearVsCent", 101, -1,  100, fNbins, fMinBinPt, fMaxBinPt*2);
67   fOutput->Add(fHistRhoNearVsCent);
68
69   fHistRhoAwayVsCent = new TH2F("RhoAwayVsCent", "RhoAwayVsCent", 101, -1,  100, fNbins, fMinBinPt, fMaxBinPt*2);
70   fOutput->Add(fHistRhoAwayVsCent);
71
72   fHistRhoPerp1VsCent = new TH2F("RhoPerp1VsCent", "RhoPerp1VsCent", 101, -1,  100, fNbins, fMinBinPt, fMaxBinPt*2);
73   fOutput->Add(fHistRhoPerp1VsCent);
74
75   fHistRhoPerp2VsCent = new TH2F("RhoPerp2VsCent", "RhoPerp2VsCent", 101, -1,  100, fNbins, fMinBinPt, fMaxBinPt*2);
76   fOutput->Add(fHistRhoPerp2VsCent);
77
78   if (!fCompareRhoName.IsNull()) {
79     fHistDeltaRhoNearVsCent = new TH2F("DeltaRhoNearVsCent", "DeltaRhoNearVsCent", 101, -1, 100, fNbins, -fMaxBinPt, fMaxBinPt);
80     fOutput->Add(fHistDeltaRhoNearVsCent);
81
82     fHistDeltaRhoAwayVsCent = new TH2F("DeltaRhoAwayVsCent", "DeltaRhoAwayVsCent", 101, -1, 100, fNbins, -fMaxBinPt, fMaxBinPt);
83     fOutput->Add(fHistDeltaRhoAwayVsCent);
84     
85     fHistDeltaRhoPerp1VsCent = new TH2F("DeltaRhoPerp1VsCent", "DeltaRhoPerp1VsCent", 101, -1, 100, fNbins, -fMaxBinPt, fMaxBinPt);
86     fOutput->Add(fHistDeltaRhoPerp1VsCent);
87
88     fHistDeltaRhoPerp2VsCent = new TH2F("DeltaRhoPerp2VsCent", "DeltaRhoPerp2VsCent", 101, -1, 100, fNbins, -fMaxBinPt, fMaxBinPt);
89     fOutput->Add(fHistDeltaRhoPerp2VsCent);
90   }
91 }
92
93 //________________________________________________________________________
94 Bool_t AliAnalysisTaskRhoFlow::Run() 
95 {
96   if (!fTracks)
97     return kFALSE;
98   
99   Double_t maxTrackPhi = -1;
100   Double_t maxTrackPt  = 0;
101
102   for (Int_t i = 0; i < fTracks->GetEntriesFast(); i++) {
103     AliVTrack *track = static_cast<AliVTrack*>(fTracks->At(i));
104     if (!track)
105       continue;
106     if (!AcceptTrack(track))
107       continue;
108
109     if (track->Pt() > maxTrackPt) {
110       maxTrackPt  = track->Pt();
111       maxTrackPhi = track->Phi();
112     }
113   }
114
115   Double_t minPhi = -1;
116   Double_t maxPhi = -1;
117
118   // away side
119   minPhi = maxTrackPhi + TMath::Pi() - TMath::Pi()/4 + fJetRadius;
120   maxPhi = maxTrackPhi + TMath::Pi() + TMath::Pi()/4 + fJetRadius;
121   if (maxPhi > TMath::Pi() * 2) {
122     minPhi -= TMath::Pi() * 2;
123     maxPhi -= TMath::Pi() * 2;
124   }
125   SetJetPhiLimits(minPhi, maxPhi);  
126   AliAnalysisTaskRho::Run();
127   fRhoAwaySide = fRho->GetVal();
128
129   // perp 1 side
130   minPhi = maxTrackPhi + TMath::Pi()/2 - TMath::Pi()/4 + fJetRadius;
131   maxPhi = maxTrackPhi + TMath::Pi()/2 + TMath::Pi()/4 + fJetRadius;
132   if (maxPhi > TMath::Pi() * 2) {
133     minPhi -= TMath::Pi() * 2;
134     maxPhi -= TMath::Pi() * 2;
135   }
136   SetJetPhiLimits(minPhi, maxPhi);  
137   AliAnalysisTaskRho::Run();
138   fRhoPerpSide1 = fRho->GetVal();
139
140   // perp 2 side
141   minPhi = maxTrackPhi - TMath::Pi()/2 - TMath::Pi()/4 + fJetRadius;
142   maxPhi = maxTrackPhi - TMath::Pi()/2 + TMath::Pi()/4 + fJetRadius;
143   if (maxPhi > TMath::Pi() * 2) {
144     minPhi -= TMath::Pi() * 2;
145     maxPhi -= TMath::Pi() * 2;
146   }
147   SetJetPhiLimits(minPhi, maxPhi);
148   AliAnalysisTaskRho::Run();
149   fRhoPerpSide2 = fRho->GetVal();
150
151   // near side
152   minPhi = maxTrackPhi - TMath::Pi()/4 + fJetRadius;
153   maxPhi = maxTrackPhi + TMath::Pi()/4 + fJetRadius;
154   if (maxPhi > TMath::Pi() * 2) {
155     minPhi -= TMath::Pi() * 2;
156     maxPhi -= TMath::Pi() * 2;
157   }
158   SetJetPhiLimits(minPhi, maxPhi);  
159   AliAnalysisTaskRho::Run();
160   fRhoNearSide = fRho->GetVal();
161   
162   return kTRUE;
163 }
164
165 //________________________________________________________________________
166 Bool_t AliAnalysisTaskRhoFlow::FillHistograms() 
167 {
168   // Fill histograms.
169
170   fHistRhoNearVsCent->Fill(fCent, fRhoNearSide);  
171   fHistRhoAwayVsCent->Fill(fCent, fRhoAwaySide);
172   fHistRhoPerp1VsCent->Fill(fCent, fRhoPerpSide1);
173   fHistRhoPerp2VsCent->Fill(fCent, fRhoPerpSide2);
174
175   if (fCompareRho) {
176     fHistDeltaRhoNearVsCent->Fill(fCent, fRhoNearSide - fCompareRho->GetVal());
177     fHistDeltaRhoAwayVsCent->Fill(fCent, fRhoAwaySide - fCompareRho->GetVal());
178     fHistDeltaRhoPerp1VsCent->Fill(fCent, fRhoPerpSide1 - fCompareRho->GetVal());
179     fHistDeltaRhoPerp2VsCent->Fill(fCent, fRhoPerpSide2 - fCompareRho->GetVal());
180   }
181
182   return kTRUE;
183 }