1 //====================================================================
2 #include "AliForwarddNdetaTask.h"
8 #include <AliAnalysisManager.h>
9 #include <AliAODEvent.h>
10 #include <AliAODHandler.h>
11 #include <AliAODInputHandler.h>
12 #include "AliForwardUtil.h"
13 #include "AliAODForwardMult.h"
15 //____________________________________________________________________
16 AliForwarddNdetaTask::AliForwarddNdetaTask()
17 : AliBasedNdetaTask(),
18 fSumPrimary(0), // Sum of primary histograms
27 //____________________________________________________________________
28 AliForwarddNdetaTask::AliForwarddNdetaTask(const char* /* name */)
29 : AliBasedNdetaTask("Forward"),
30 fSumPrimary(0), // Sum of primary histograms
41 //____________________________________________________________________
42 AliForwarddNdetaTask::AliForwarddNdetaTask(const AliForwarddNdetaTask& o)
43 : AliBasedNdetaTask(o),
44 fSumPrimary(o.fSumPrimary), // Sum of primary histograms
45 fSNNString(o.fSNNString), //
46 fSysString(o.fSysString) //
53 //____________________________________________________________________
55 AliForwarddNdetaTask::GetHistogram(const AliAODEvent* aod, Bool_t mc)
58 // Retrieve the histogram
62 // mc Whether to get the MC histogram or not
65 // Retrieved histogram or null
68 if (mc) obj = aod->FindListObject("ForwardMC");
69 else obj = aod->FindListObject("Forward");
71 // We should have a forward object at least
73 if (!mc) AliWarning("No Forward object found AOD");
76 AliAODForwardMult* forward = static_cast<AliAODForwardMult*>(obj);
78 // Here, we update the primary stuff
80 TObject* oPrimary = aod->FindListObject("primary");
82 TH2D* primary = static_cast<TH2D*>(oPrimary);
83 // Add contribtion from MC
85 if(fTriggerMask == AliAODForwardMult::kInel) {
86 if (primary && !fSumPrimary) fSumPrimary = CloneHist(primary, "truth");
87 else if (primary) fSumPrimary->Add(primary);
90 else if(fTriggerMask == AliAODForwardMult::kNSD && forward->IsTriggerBits(AliAODForwardMult::kMCNSD)) {
91 if (primary && !fSumPrimary) fSumPrimary = CloneHist(primary, "truth");
92 else if (primary) fSumPrimary->Add(primary);
97 /* if(fTriggerMask == AliAODForwardMult::kNSD && forward->IsTriggerBits(AliAODForwardMult::kMCNSD)) {
98 if (primary) fSumPrimary->Add(primary);
102 else if (primary) fSumPrimary->Add(primary);*/
107 // Here, we get the update
109 UShort_t sNN = forward->GetSNN();
110 fSNNString = new TNamed("sNN", "");
111 fSNNString->SetTitle(AliForwardUtil::CenterOfMassEnergyString(sNN));
112 fSNNString->SetUniqueID(sNN);
113 fSums->Add(fSNNString);
115 UShort_t sys = forward->GetSystem();
116 fSysString = new TNamed("sys", "");
117 fSysString->SetTitle(AliForwardUtil::CollisionSystemString(sys));
118 fSysString->SetUniqueID(sys);
119 fSums->Add(fSysString);
122 return &(forward->GetHistogram());
125 //________________________________________________________________________
127 AliForwarddNdetaTask::Terminate(Option_t *)
129 // Draw result to screen, or perform fitting, normalizations Called
130 // once at the end of the query
131 AliBasedNdetaTask::Terminate("");
133 AliError("Could not retrieve TList fSums");
137 AliError("Could not retrieve TList fOutput");
141 fSumPrimary = static_cast<TH2D*>(fSums->FindObject("truth"));
142 fSNNString = static_cast<TNamed*>(fSums->FindObject("sNN"));
143 fSysString = static_cast<TNamed*>(fSums->FindObject("sys"));
145 fOutput->Add(fSNNString->Clone());
146 fOutput->Add(fSysString->Clone());
149 Int_t nAll = Int_t(fTriggers->GetBinContent(kAll));
150 Int_t nNSD = Int_t(fTriggers->GetBinContent(kMCNSD));
152 // for(Int_t nn =1; nn<=fSumPrimary->GetNbinsX(); nn++) {
153 // for(Int_t mm =1; mm<=fSumPrimary->GetNbinsY(); mm++) {
154 // if(fSumPrimary->GetBinContent(nn,mm) > 0) std::cout<<fSumPrimary->GetBinContent(nn,mm)<<" +/- "<<fSumPrimary->GetBinError(nn,mm)<<std::endl;
159 //TH1D* dndetaTruth = ProjectX(fSumPrimary,"dndetaTruth",
160 // 1,fSumPrimary->GetNbinsY(),false,true);
161 TH1D* dndetaTruth = fSumPrimary->ProjectionX("dndetaTruth",1,fSumPrimary->GetNbinsY(),"e");
164 if(fTriggerMask == AliAODForwardMult::kNSD)
165 dndetaTruth->Scale(1./nNSD, "width");
167 dndetaTruth->Scale(1./nAll, "width");
169 //for(Int_t nn =1; nn<=dndetaTruth->GetNbinsX(); nn++) {
170 // if(dndetaTruth->GetBinContent(nn) > 0) std::cout<<dndetaTruth->GetBinContent(nn)<<" +/- "<<dndetaTruth->GetBinError(nn)<<std::endl;
174 SetHistogramAttributes(dndetaTruth, kBlue+3, 22, "Monte-Carlo truth");
176 fOutput->Add(dndetaTruth);
177 fOutput->Add(Rebin(dndetaTruth));
179 // If only there was a away to get sqrt{s_NN} and beam type
182 PostData(2, fOutput);
185 //________________________________________________________________________