3 // task to estimate scale factor for rho_m
7 #include <TClonesArray.h>
11 #include <THnSparse.h>
13 #include <TLorentzVector.h>
20 #include "AliAnalysisManager.h"
21 // #include "AliAODMCHeader.h"
22 // #include "AliMCEvent.h"
23 // #include "AliGenPythiaEventHeader.h"
24 // #include "AliAODEvent.h"
26 #include "AliVCluster.h"
27 #include "AliVTrack.h"
28 #include "AliEmcalJet.h"
29 #include "AliRhoParameter.h"
30 #include "AliEmcalParticle.h"
31 #include "AliJetContainer.h"
32 #include "AliParticleContainer.h"
34 #include "AliAnalysisTaskRhoMassScale.h"
36 ClassImp(AliAnalysisTaskRhoMassScale)
38 //________________________________________________________________________
39 AliAnalysisTaskRhoMassScale::AliAnalysisTaskRhoMassScale() :
40 AliAnalysisTaskEmcalJet("AliAnalysisTaskRhoMassScale", kTRUE),
44 fRhoMChargedEmcalName(""),
45 fRhoMCharged2xEmcalName(""),
48 fRhoMCharged2xEmcal(0),
49 fHistScaleEmcalvsCent(0),
50 fHistScale2EmcalvsCent(0),
51 fHistDeltaScale2EmcalvsCent(0),
52 fHistScaleEmcalvsMult(0),
53 fHistScale2EmcalvsMult(0),
54 fHistDeltaScale2EmcalvsMult(0)
56 // Default constructor.
58 SetMakeGeneralHistograms(kTRUE);
61 //________________________________________________________________________
62 AliAnalysisTaskRhoMassScale::AliAnalysisTaskRhoMassScale(const char *name) :
63 AliAnalysisTaskEmcalJet(name, kTRUE),
67 fRhoMChargedEmcalName(""),
68 fRhoMCharged2xEmcalName(""),
71 fRhoMCharged2xEmcal(0),
72 fHistScaleEmcalvsCent(0),
73 fHistScale2EmcalvsCent(0),
74 fHistDeltaScale2EmcalvsCent(0),
75 fHistScaleEmcalvsMult(0),
76 fHistScale2EmcalvsMult(0),
77 fHistDeltaScale2EmcalvsMult(0)
79 // Standard constructor.
81 SetMakeGeneralHistograms(kTRUE);
84 //________________________________________________________________________
85 AliAnalysisTaskRhoMassScale::~AliAnalysisTaskRhoMassScale()
90 //________________________________________________________________________
91 void AliAnalysisTaskRhoMassScale::UserCreateOutputObjects()
93 // Create user output.
95 AliAnalysisTaskEmcalJet::UserCreateOutputObjects();
97 Bool_t oldStatus = TH1::AddDirectoryStatus();
98 TH1::AddDirectory(kFALSE);
101 TString histName = "";
102 TString histTitle = "";
104 histName = "fHistScaleEmcalvsCent";
105 histTitle = TString::Format("%s;Centrality;s_{EMC}",histName.Data());
106 fHistScaleEmcalvsCent= new TH2F(histName.Data(),histTitle.Data(), 101, -1, 100, 500, 0, 5);
107 fOutput->Add(fHistScaleEmcalvsCent);
109 histName = "fHistScale2EmcalvsCent";
110 histTitle = TString::Format("%s;Centrality;s_{2 #times EMC}",histName.Data());
111 fHistScale2EmcalvsCent = new TH2F(histName.Data(),histTitle.Data(), 101, -1, 100, 500, 0, 5);
112 fOutput->Add(fHistScale2EmcalvsCent);
114 histName = "fHistDeltaScale2EmcalvsCent";
115 histTitle = TString::Format("%s;Centrality;s_{2 #times EMC}-s_{EMC}",histName.Data());
116 fHistDeltaScale2EmcalvsCent = new TH2F(histName.Data(),histTitle.Data(), 101, -1, 100, 500, -2.5, 2.5);
117 fOutput->Add(fHistDeltaScale2EmcalvsCent);
119 histName = "fHistScaleEmcalvsMult";
120 histTitle = TString::Format("%s;#it{N}_{track};s_{EMC}",histName.Data());
121 fHistScaleEmcalvsMult= new TH2F(histName.Data(),histTitle.Data(), 800, 0, 4000, 500, 0, 5);
122 fOutput->Add(fHistScaleEmcalvsMult);
124 histName = "fHistScale2EmcalvsMult";
125 histTitle = TString::Format("%s;#it{N}_{track};s_{2 #times EMC}",histName.Data());
126 fHistScale2EmcalvsMult = new TH2F(histName.Data(),histTitle.Data(), 800, 0, 4000, 500, 0, 5);
127 fOutput->Add(fHistScale2EmcalvsMult);
129 histName = "fHistDeltaScale2EmcalvsMult";
130 histTitle = TString::Format("%s;#it{N}_{track};s_{2 #times EMC}-s_{EMC}",histName.Data());
131 fHistDeltaScale2EmcalvsMult = new TH2F(histName.Data(),histTitle.Data(), 800, 0, 4000, 500, -2.5, 2.5);
132 fOutput->Add(fHistDeltaScale2EmcalvsMult);
134 // =========== Switch on Sumw2 for all histos ===========
135 for (Int_t i=0; i<fOutput->GetEntries(); ++i) {
136 TH1 *h1 = dynamic_cast<TH1*>(fOutput->At(i));
141 THnSparse *hn = dynamic_cast<THnSparse*>(fOutput->At(i));
145 TH1::AddDirectory(oldStatus);
147 PostData(1, fOutput); // Post data for ALL output slots > 0 here.
150 //________________________________________________________________________
151 Bool_t AliAnalysisTaskRhoMassScale::Run()
153 // Run analysis code here, if needed. It will be executed before FillHistograms().
157 //________________________________________________________________________
158 Bool_t AliAnalysisTaskRhoMassScale::FillHistograms()
162 Double_t rhomNe = fRhoMNeutral->GetVal();
163 Double_t rhomChEmcal = fRhoMChargedEmcal->GetVal();
164 Double_t rhomCh2xEmcal = fRhoMCharged2xEmcal->GetVal();
166 Double_t scale = -1.; Double_t scale2 = -1.;
167 if(rhomChEmcal>0.) scale = (rhomNe+rhomChEmcal)/rhomChEmcal;
168 if(rhomCh2xEmcal>0.) scale2 = (rhomNe+rhomChEmcal)/rhomCh2xEmcal;
170 fHistScaleEmcalvsCent->Fill(fCent,scale);
171 fHistScale2EmcalvsCent->Fill(fCent,scale2);
172 fHistDeltaScale2EmcalvsCent->Fill(fCent,scale2-scale);
175 if(GetParticleContainer(0))
176 mult = GetParticleContainer(0)->GetNAcceptedParticles();
178 fHistScaleEmcalvsMult->Fill(mult,scale);
179 fHistScale2EmcalvsMult->Fill(mult,scale2);
180 fHistDeltaScale2EmcalvsMult->Fill(mult,scale2-scale);
185 //________________________________________________________________________
186 Bool_t AliAnalysisTaskRhoMassScale::RetrieveEventObjects() {
188 // retrieve event objects
189 if (!AliAnalysisTaskEmcalJet::RetrieveEventObjects())
192 if (!fRhoMNeutralName.IsNull() && !fRhoMNeutral) { // get rho_m from the event
193 fRhoMNeutral = dynamic_cast<AliRhoParameter*>(InputEvent()->FindListObject(fRhoMNeutralName));
195 AliError(Form("%s: Could not retrieve rho %s!", GetName(), fRhoMNeutralName.Data()));
196 fInitialized = kFALSE;
201 if (!fRhoMChargedEmcalName.IsNull() && !fRhoMChargedEmcal) { // get rho_m from the event
202 fRhoMChargedEmcal = dynamic_cast<AliRhoParameter*>(InputEvent()->FindListObject(fRhoMChargedEmcalName));
203 if (!fRhoMChargedEmcal) {
204 AliError(Form("%s: Could not retrieve rho %s!", GetName(), fRhoMChargedEmcalName.Data()));
205 fInitialized = kFALSE;
210 if (!fRhoMCharged2xEmcalName.IsNull() && !fRhoMCharged2xEmcal) { // get rho_m from the event
211 fRhoMCharged2xEmcal = dynamic_cast<AliRhoParameter*>(InputEvent()->FindListObject(fRhoMCharged2xEmcalName));
212 if (!fRhoMCharged2xEmcal) {
213 AliError(Form("%s: Could not retrieve rho %s!", GetName(), fRhoMCharged2xEmcalName.Data()));
214 fInitialized = kFALSE;
222 //_______________________________________________________________________
223 void AliAnalysisTaskRhoMassScale::Terminate(Option_t *)
225 // Called once at the end of the analysis.