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