5 // Author: R.Reed, M.Connors
7 #include "AliAnalysisTaskScale.h"
9 #include <TClonesArray.h>
14 #include <TLorentzVector.h>
16 #include "AliAnalysisManager.h"
17 #include "AliCentrality.h"
18 #include "AliEMCALGeometry.h"
20 #include "AliVCluster.h"
21 #include "AliVEvent.h"
22 #include "AliVTrack.h"
24 ClassImp(AliAnalysisTaskScale)
26 //________________________________________________________________________
27 AliAnalysisTaskScale::AliAnalysisTaskScale() :
28 AliAnalysisTaskEmcal("AliAnalysisTaskScale", kTRUE),
33 fHistPtEMCALvsCent(0),
36 fHistDeltaScalevsCent(0),
37 fHistPtTPCvsNtrack(0),
38 fHistPtEMCALvsNtrack(0),
40 fHistScalevsNtrack(0),
41 fHistDeltaScalevsNtrack(0),
42 fHistTrackPtvsCent(0),
43 fHistClusterPtvsCent(0),
47 // Default constructor.
50 //________________________________________________________________________
51 AliAnalysisTaskScale::AliAnalysisTaskScale(const char *name) :
52 AliAnalysisTaskEmcal(name, kTRUE),
57 fHistPtEMCALvsCent(0),
60 fHistDeltaScalevsCent(0),
61 fHistPtTPCvsNtrack(0),
62 fHistPtEMCALvsNtrack(0),
64 fHistScalevsNtrack(0),
65 fHistDeltaScalevsNtrack(0),
66 fHistTrackPtvsCent(0),
67 fHistClusterPtvsCent(0),
75 //________________________________________________________________________
76 void AliAnalysisTaskScale::UserCreateOutputObjects()
78 // Create my user objects.
81 fOutput = new TList();
84 fHistCentrality = new TH1F("Centrality","Centrality", 101, -1, 100);
85 fHistPtTPCvsCent = new TH2F("PtTPCvsCent","rho vs cent", 101, -1, 100, 500, 0, 1000);
86 fHistPtEMCALvsCent = new TH2F("PtEMCALvsCent","rho vs cent", 101, -1, 100, 500, 0, 1000);
87 fHistEtvsCent = new TH2F("EtvsCent","rho vs cent", 101, -1, 100, 500, 0, 1000);
88 fHistScalevsCent = new TH2F("ScalevsCent","rho vs cent", 101, -1, 100, 400, 0, 4);
89 fHistDeltaScalevsCent = new TH2F("DeltaScalevsCent","rho vs cent", 101, -1, 100, 400, -2, 2);
90 fHistPtTPCvsNtrack = new TH2F("PtTPCvsNtrack","rho vs cent", 500, 0, 2500, 500, 0, 1000);
91 fHistPtEMCALvsNtrack = new TH2F("PtEMCALvsNtrack","rho vs cent", 500, 0, 2500, 500, 0, 1000);
92 fHistEtvsNtrack = new TH2F("EtvsNtrack","rho vs cent", 500, 0, 2500, 500, 0, 1000);
93 fHistScalevsNtrack = new TH2F("ScalevsNtrack","rho vs cent", 500, 0, 2500, 400, 0, 4);
94 fHistDeltaScalevsNtrack = new TH2F("DeltaScalevsNtrack","rho vs cent", 500, 0, 2500, 400, -2, 2);
95 fHistTrackPtvsCent = new TH2F("TrackPtvsCent","Track pt vs cent", 101, -1, 100, 500, 0, 100);
96 fHistClusterPtvsCent = new TH2F("ClusterPtvsCent","Cluster pt vs cent", 101, -1, 100, 500, 0, 100);
97 fHistTrackEtaPhi = new TH2F("TrackEtaPhi","Track eta phi", 100, -1.0, 1.0, 64, 0, 6.4);
98 fHistClusterEtaPhi = new TH2F("ClusterEtaPhi","Cluster eta phi", 100, -1.0, 1.0, 64, -3.2, 3.2);
100 fOutput->Add(fHistCentrality);
101 fOutput->Add(fHistPtTPCvsCent);
102 fOutput->Add(fHistPtEMCALvsCent);
103 fOutput->Add(fHistEtvsCent);
104 fOutput->Add(fHistScalevsCent);
105 fOutput->Add(fHistDeltaScalevsCent);
106 fOutput->Add(fHistPtTPCvsNtrack);
107 fOutput->Add(fHistPtEMCALvsNtrack);
108 fOutput->Add(fHistEtvsNtrack);
109 fOutput->Add(fHistScalevsNtrack);
110 fOutput->Add(fHistDeltaScalevsNtrack);
111 fOutput->Add(fHistTrackPtvsCent);
112 fOutput->Add(fHistClusterPtvsCent);
113 fOutput->Add(fHistTrackEtaPhi);
114 fOutput->Add(fHistClusterEtaPhi);
116 PostData(1, fOutput);
119 //________________________________________________________________________
120 Double_t AliAnalysisTaskScale::GetScaleFactor(Double_t cent)
122 // Get scale function.
126 scale = fScaleFunction->Eval(cent);
130 //________________________________________________________________________
131 void AliAnalysisTaskScale::ExecOnce()
133 // Init the analysis.
135 fGeom = AliEMCALGeometry::GetInstance();
138 AliFatal("Can not create geometry");
142 AliAnalysisTaskEmcal::ExecOnce();
145 //________________________________________________________________________
146 Bool_t AliAnalysisTaskScale::FillHistograms()
148 // Execute on each event.
150 const Double_t EmcalMinEta = fGeom->GetArm1EtaMin();
151 const Double_t EmcalMaxEta = fGeom->GetArm1EtaMax();
152 const Double_t EmcalMinPhi = fGeom->GetArm1PhiMin() * TMath::DegToRad();
153 const Double_t EmcalMaxPhi = fGeom->GetArm1PhiMax() * TMath::DegToRad();
155 const Double_t TpcMinPhi = 0;
156 const Double_t TpcMaxPhi = 2 * TMath::Pi();
158 const Double_t TpcArea = (TpcMaxPhi - TpcMinPhi) * (EmcalMinEta - EmcalMaxEta);
159 const Double_t EmcalArea = (EmcalMaxPhi - EmcalMinPhi) * (EmcalMinEta - EmcalMaxEta);
162 Double_t ptEMCAL = 0;
164 const Int_t Ntracks = fTracks->GetEntries();
165 for (Int_t iTracks = 0; iTracks < Ntracks; ++iTracks) {
166 AliVTrack *track = static_cast<AliVTrack*>(fTracks->At(iTracks));
171 if (!AcceptTrack(track))
174 if (TMath::Abs(track->Eta()) > 0.7) // only accept tracks in the EMCal eta range
177 fHistTrackPtvsCent->Fill(fCent,track->Pt());
178 fHistTrackEtaPhi->Fill(track->Eta(),track->Phi());
180 ptTPC += track->Pt();
181 if ((track->Phi() > EmcalMaxPhi) || (track->Phi() < EmcalMinPhi))
184 ptEMCAL += track->Pt();
191 const Int_t Nclus = fCaloClusters->GetEntries();
192 for (Int_t iClus = 0; iClus < Nclus; ++iClus) {
193 AliVCluster *c = static_cast<AliVCluster*>(fCaloClusters->At(iClus));
197 if (!AcceptCluster(c))
200 TLorentzVector nPart;
201 c->GetMomentum(nPart, fVertex);
203 fHistClusterPtvsCent->Fill(fCent, nPart.Pt());
204 fHistClusterEtaPhi->Fill(nPart.Eta(), nPart.Phi());
209 const Double_t scalecalc = ((Et + ptEMCAL) / EmcalArea) * (TpcArea / ptTPC);
210 const Double_t scale = GetScaleFactor(fCent);
212 fHistCentrality->Fill(fCent);
213 fHistPtTPCvsCent->Fill(fCent, ptTPC);
214 fHistPtEMCALvsCent->Fill(fCent, ptEMCAL);
215 fHistEtvsCent->Fill(fCent, Et);
216 fHistScalevsCent->Fill(fCent, scalecalc);
217 fHistDeltaScalevsCent->Fill(fCent, scalecalc - scale);
218 fHistPtTPCvsNtrack->Fill(Ntracks, ptTPC);
219 fHistPtEMCALvsNtrack->Fill(Ntracks, ptEMCAL);
220 fHistEtvsNtrack->Fill(Ntracks, Et);
221 fHistScalevsNtrack->Fill(Ntracks, scalecalc);
222 fHistDeltaScalevsNtrack->Fill(Ntracks, scalecalc - scale);
227 //________________________________________________________________________
228 void AliAnalysisTaskScale::Terminate(Option_t *)
230 // Called once at the end of the analysis.