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() :
38 fHistPtEMCALvsCent(0),
41 fHistDeltaScalevsCent(0),
42 fHistPtTPCvsNtrack(0),
43 fHistPtEMCALvsNtrack(0),
45 fHistScalevsNtrack(0),
46 fHistDeltaScalevsNtrack(0),
47 fHistTrackPtvsCent(0),
48 fHistClusterPtvsCent(0),
52 // Default constructor.
55 //________________________________________________________________________
56 AliAnalysisTaskScale::AliAnalysisTaskScale(const char *name) :
57 AliAnalysisTaskSE(name),
58 fTracksName("Tracks"),
59 fClustersName("CaloClusters"),
67 fHistPtEMCALvsCent(0),
70 fHistDeltaScalevsCent(0),
71 fHistPtTPCvsNtrack(0),
72 fHistPtEMCALvsNtrack(0),
74 fHistScalevsNtrack(0),
75 fHistDeltaScalevsNtrack(0),
76 fHistTrackPtvsCent(0),
77 fHistClusterPtvsCent(0),
83 DefineOutput(1, TList::Class());
86 //________________________________________________________________________
87 void AliAnalysisTaskScale::UserCreateOutputObjects()
89 // Create my user objects.
92 fOutputList = new TList();
93 fOutputList->SetOwner();
95 fHistCentrality = new TH1F("Centrality","Centrality", 101, -1, 100);
96 fHistPtTPCvsCent = new TH2F("PtTPCvsCent","rho vs cent", 101, -1, 100, 500, 0, 1000);
97 fHistPtEMCALvsCent = new TH2F("PtEMCALvsCent","rho vs cent", 101, -1, 100, 500, 0, 1000);
98 fHistEtvsCent = new TH2F("EtvsCent","rho vs cent", 101, -1, 100, 500, 0, 1000);
99 fHistScalevsCent = new TH2F("ScalevsCent","rho vs cent", 101, -1, 100, 400, 0, 4);
100 fHistDeltaScalevsCent = new TH2F("DeltaScalevsCent","rho vs cent", 101, -1, 100, 400, -2, 2);
101 fHistPtTPCvsNtrack = new TH2F("PtTPCvsNtrack","rho vs cent", 500, 0, 2500, 500, 0, 1000);
102 fHistPtEMCALvsNtrack = new TH2F("PtEMCALvsNtrack","rho vs cent", 500, 0, 2500, 500, 0, 1000);
103 fHistEtvsNtrack = new TH2F("EtvsNtrack","rho vs cent", 500, 0, 2500, 500, 0, 1000);
104 fHistScalevsNtrack = new TH2F("ScalevsNtrack","rho vs cent", 500, 0, 2500, 400, 0, 4);
105 fHistDeltaScalevsNtrack = new TH2F("DeltaScalevsNtrack","rho vs cent", 500, 0, 2500, 400, -2, 2);
106 fHistTrackPtvsCent = new TH2F("TrackPtvsCent","Track pt vs cent", 101, -1, 100, 500, 0, 100);
107 fHistClusterPtvsCent = new TH2F("ClusterPtvsCent","Cluster pt vs cent", 101, -1, 100, 500, 0, 100);
108 fHistTrackEtaPhi = new TH2F("TrackEtaPhi","Track eta phi", 100, -1.0, 1.0, 64, 0, 6.4);
109 fHistClusterEtaPhi = new TH2F("ClusterEtaPhi","Cluster eta phi", 100, -1.0, 1.0, 64, -3.2, 3.2);
111 fOutputList->Add(fHistCentrality);
112 fOutputList->Add(fHistPtTPCvsCent);
113 fOutputList->Add(fHistPtEMCALvsCent);
114 fOutputList->Add(fHistEtvsCent);
115 fOutputList->Add(fHistScalevsCent);
116 fOutputList->Add(fHistDeltaScalevsCent);
117 fOutputList->Add(fHistPtTPCvsNtrack);
118 fOutputList->Add(fHistPtEMCALvsNtrack);
119 fOutputList->Add(fHistEtvsNtrack);
120 fOutputList->Add(fHistScalevsNtrack);
121 fOutputList->Add(fHistDeltaScalevsNtrack);
122 fOutputList->Add(fHistTrackPtvsCent);
123 fOutputList->Add(fHistClusterPtvsCent);
124 fOutputList->Add(fHistTrackEtaPhi);
125 fOutputList->Add(fHistClusterEtaPhi);
127 PostData(1, fOutputList);
130 //________________________________________________________________________
131 Double_t AliAnalysisTaskScale::GetScaleFactor(Double_t cent)
133 // Get scale function.
137 scale = fScaleFunction->Eval(cent);
141 //________________________________________________________________________
142 void AliAnalysisTaskScale::UserExec(Option_t *)
144 // Execute on each event.
147 fGeom = AliEMCALGeometry::GetInstance();
150 AliFatal("Can not create geometry");
154 // get input collections
155 TClonesArray *tracks = 0;
156 TClonesArray *clusters = 0;
157 TList *l = InputEvent()->GetList();
158 tracks = dynamic_cast<TClonesArray*>(l->FindObject(fTracksName));
160 AliError(Form("Pointer to tracks %s == 0", fTracksName.Data() ));
163 clusters = dynamic_cast<TClonesArray*>(l->FindObject(fClustersName));
165 AliError(Form("Pointer to clusters %s == 0", fClustersName.Data() ));
171 AliCentrality *centrality = InputEvent()->GetCentrality();
173 cent = centrality->GetCentralityPercentile("V0M");
175 AliError(Form("Centrality negative: %f", cent));
178 fHistCentrality->Fill(cent);
181 Double_t vertex[3] = {0, 0, 0};
182 InputEvent()->GetPrimaryVertex()->GetXYZ(vertex);
184 const Double_t EmcalMinEta = fGeom->GetArm1EtaMin();
185 const Double_t EmcalMaxEta = fGeom->GetArm1EtaMax();
186 const Double_t EmcalMinPhi = fGeom->GetArm1PhiMin() * TMath::DegToRad();
187 const Double_t EmcalMaxPhi = fGeom->GetArm1PhiMax() * TMath::DegToRad();
189 const Double_t TpcMinPhi = 0;
190 const Double_t TpcMaxPhi = 2 * TMath::Pi();
192 const Double_t TpcArea = (TpcMaxPhi - TpcMinPhi) * (EmcalMinEta - EmcalMaxEta);
193 const Double_t EmcalArea = (EmcalMaxPhi - EmcalMinPhi) * (EmcalMinEta - EmcalMaxEta);
196 Double_t ptEMCAL = 0;
198 const Int_t Ntracks = tracks->GetEntries();
199 for (Int_t iTracks = 0; iTracks < Ntracks; ++iTracks) {
200 AliVTrack *track = static_cast<AliVTrack*>(tracks->At(iTracks));
205 if (TMath::Abs(track->Eta()) > 0.7) // only accept tracks in the EMCal eta range
208 fHistTrackPtvsCent->Fill(cent,track->Pt());
209 fHistTrackEtaPhi->Fill(track->Eta(),track->Phi());
211 if (track->Pt()< fMinTrackPt)
214 ptTPC += track->Pt();
215 if ((track->Phi() > EmcalMaxPhi) || (track->Phi() < EmcalMinPhi))
218 ptEMCAL += track->Pt();
222 const Int_t Nclus = clusters->GetEntries();
223 for (Int_t iClus = 0; iClus < Nclus; ++iClus) {
224 AliVCluster *c = static_cast<AliVCluster*>(clusters->At(iClus));
229 TLorentzVector nPart;
230 c->GetMomentum(nPart, vertex);
232 fHistClusterPtvsCent->Fill(cent,nPart.Pt());
233 fHistClusterEtaPhi->Fill(nPart.Eta(),nPart.Phi());
235 if (nPart.Pt()< fMinClusterPt)
244 const Double_t scalecalc = ((Et + ptEMCAL) / EmcalArea) * (TpcArea / ptTPC);
246 const Double_t scale = GetScaleFactor(cent);
248 fHistPtTPCvsCent->Fill(cent, ptTPC);
249 fHistPtEMCALvsCent->Fill(cent, ptEMCAL);
250 fHistEtvsCent->Fill(cent, Et);
251 fHistScalevsCent->Fill(cent, scalecalc);
252 fHistDeltaScalevsCent->Fill(cent, scalecalc - scale);
253 fHistPtTPCvsNtrack->Fill(Ntracks, ptTPC);
254 fHistPtEMCALvsNtrack->Fill(Ntracks, ptEMCAL);
255 fHistEtvsNtrack->Fill(Ntracks, Et);
256 fHistScalevsNtrack->Fill(Ntracks, scalecalc);
257 fHistDeltaScalevsNtrack->Fill(Ntracks, scalecalc - scale);
259 PostData(1, fOutputList);
262 //________________________________________________________________________
263 void AliAnalysisTaskScale::Terminate(Option_t *)
265 // Called once at the end of the analysis.