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
23 //____________________________________________________________________
24 AliForwarddNdetaTask::AliForwarddNdetaTask(const char* /* name */)
25 : AliBasedNdetaTask("Forward"),
26 fSumPrimary(0), // Sum of primary histograms
32 //____________________________________________________________________
33 AliForwarddNdetaTask::AliForwarddNdetaTask(const AliForwarddNdetaTask& o)
34 : AliBasedNdetaTask(o),
35 fSumPrimary(o.fSumPrimary), // Sum of primary histograms
36 fSNNString(o.fSNNString), //
37 fSysString(o.fSysString) //
40 //____________________________________________________________________
42 AliForwarddNdetaTask::GetHistogram(AliAODEvent* aod, Bool_t mc)
45 if (mc) obj = aod->FindListObject("ForwardMC");
46 else obj = aod->FindListObject("Forward");
48 // We should have a forward object at least
50 if (!mc) AliWarning("No Forward object found AOD");
53 AliAODForwardMult* forward = static_cast<AliAODForwardMult*>(obj);
55 // Here, we update the primary stuff
57 TObject* oPrimary = aod->FindListObject("primary");
59 TH2D* primary = static_cast<TH2D*>(oPrimary);
60 // Add contribtion from MC
62 if(fTriggerMask == AliAODForwardMult::kInel) {
63 if (primary && !fSumPrimary) fSumPrimary = CloneHist(primary, "truth");
64 else if (primary) fSumPrimary->Add(primary);
67 else if(fTriggerMask == AliAODForwardMult::kNSD && forward->IsTriggerBits(AliAODForwardMult::kMCNSD)) {
68 if (primary && !fSumPrimary) fSumPrimary = CloneHist(primary, "truth");
69 else if (primary) fSumPrimary->Add(primary);
74 /* if(fTriggerMask == AliAODForwardMult::kNSD && forward->IsTriggerBits(AliAODForwardMult::kMCNSD)) {
75 if (primary) fSumPrimary->Add(primary);
79 else if (primary) fSumPrimary->Add(primary);*/
84 // Here, we get the update
86 UShort_t sNN = forward->GetSNN();
87 fSNNString = new TNamed("sNN", "");
88 fSNNString->SetTitle(AliForwardUtil::CenterOfMassEnergyString(sNN));
89 fSNNString->SetUniqueID(sNN);
90 fSums->Add(fSNNString);
92 UShort_t sys = forward->GetSystem();
93 fSysString = new TNamed("sys", "");
94 fSysString->SetTitle(AliForwardUtil::CollisionSystemString(sys));
95 fSysString->SetUniqueID(sys);
96 fSums->Add(fSysString);
99 return &(forward->GetHistogram());
102 //________________________________________________________________________
104 AliForwarddNdetaTask::Terminate(Option_t *)
106 // Draw result to screen, or perform fitting, normalizations Called
107 // once at the end of the query
108 AliBasedNdetaTask::Terminate("");
110 AliError("Could not retrieve TList fSums");
114 AliError("Could not retrieve TList fOutput");
118 fSumPrimary = static_cast<TH2D*>(fSums->FindObject("truth"));
119 fSNNString = static_cast<TNamed*>(fSums->FindObject("sNN"));
120 fSysString = static_cast<TNamed*>(fSums->FindObject("sys"));
122 fOutput->Add(fSNNString->Clone());
123 fOutput->Add(fSysString->Clone());
126 Int_t nAll = Int_t(fTriggers->GetBinContent(kAll));
127 Int_t nNSD = Int_t(fTriggers->GetBinContent(kMCNSD));
129 // for(Int_t nn =1; nn<=fSumPrimary->GetNbinsX(); nn++) {
130 // for(Int_t mm =1; mm<=fSumPrimary->GetNbinsY(); mm++) {
131 // if(fSumPrimary->GetBinContent(nn,mm) > 0) std::cout<<fSumPrimary->GetBinContent(nn,mm)<<" +/- "<<fSumPrimary->GetBinError(nn,mm)<<std::endl;
136 //TH1D* dndetaTruth = ProjectX(fSumPrimary,"dndetaTruth",
137 // 1,fSumPrimary->GetNbinsY(),false,true);
138 TH1D* dndetaTruth = fSumPrimary->ProjectionX("dndetaTruth",1,fSumPrimary->GetNbinsY(),"e");
139 std::cout<<nAll<<" "<<nNSD<<std::endl;
141 if(fTriggerMask == AliAODForwardMult::kNSD)
142 dndetaTruth->Scale(1./nNSD, "width");
144 dndetaTruth->Scale(1./nAll, "width");
146 //for(Int_t nn =1; nn<=dndetaTruth->GetNbinsX(); nn++) {
147 // if(dndetaTruth->GetBinContent(nn) > 0) std::cout<<dndetaTruth->GetBinContent(nn)<<" +/- "<<dndetaTruth->GetBinError(nn)<<std::endl;
151 SetHistogramAttributes(dndetaTruth, kBlue+3, 22, "Monte-Carlo truth");
153 fOutput->Add(dndetaTruth);
154 fOutput->Add(Rebin(dndetaTruth));
156 // If only there was a away to get sqrt{s_NN} and beam type
159 PostData(2, fOutput);
162 //________________________________________________________________________