]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWG2/FORWARD/analysis2/AliForwarddNdetaTask.cxx
Various upgrades. NSD true trigger for MC, pileup selection for analysis, fixes for...
[u/mrichter/AliRoot.git] / PWG2 / FORWARD / analysis2 / AliForwarddNdetaTask.cxx
1 //====================================================================
2 #include "AliForwarddNdetaTask.h"
3 #include <TMath.h>
4 #include <TH2D.h>
5 #include <TH1D.h>
6 #include <THStack.h>
7 #include <TList.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"
14
15 //____________________________________________________________________
16 AliForwarddNdetaTask::AliForwarddNdetaTask()
17   : AliBasedNdetaTask(),
18     fSumPrimary(0),     //  Sum of primary histograms
19     fSNNString(0),
20     fSysString(0)
21 {}
22
23 //____________________________________________________________________
24 AliForwarddNdetaTask::AliForwarddNdetaTask(const char* /* name */)
25   : AliBasedNdetaTask("Forward"), 
26     fSumPrimary(0),     //  Sum of primary histograms
27     fSNNString(0),
28     fSysString(0)
29 {
30 }
31
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)       //  
38 {}
39
40 //____________________________________________________________________
41 TH2D*
42 AliForwarddNdetaTask::GetHistogram(AliAODEvent* aod, Bool_t mc)
43 {
44   TObject* obj = 0;
45   if (mc) obj = aod->FindListObject("ForwardMC");
46   else    obj = aod->FindListObject("Forward");
47
48   // We should have a forward object at least 
49   if (!obj) {
50     if (!mc) AliWarning("No Forward object found AOD");
51     return 0;
52   }
53   AliAODForwardMult* forward = static_cast<AliAODForwardMult*>(obj);
54
55   // Here, we update the primary stuff 
56   if (mc) { 
57     TObject* oPrimary   = aod->FindListObject("primary");
58     if (oPrimary) {
59       TH2D* primary   = static_cast<TH2D*>(oPrimary);
60       // Add contribtion from MC 
61       
62       if(fTriggerMask == AliAODForwardMult::kInel) {
63         if (primary && !fSumPrimary) fSumPrimary = CloneHist(primary, "truth");
64         else if (primary) fSumPrimary->Add(primary);
65       }
66       
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);
70       }
71       
72       
73       
74       /*   if(fTriggerMask == AliAODForwardMult::kNSD && forward->IsTriggerBits(AliAODForwardMult::kMCNSD)) {
75         if (primary) fSumPrimary->Add(primary); 
76       
77       }
78       
79       else if (primary) fSumPrimary->Add(primary);*/
80       
81     }    
82   }
83   
84   // Here, we get the update 
85   if (!fSNNString) { 
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);
91   
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);
97   }
98
99   return &(forward->GetHistogram());
100 }
101
102 //________________________________________________________________________
103 void 
104 AliForwarddNdetaTask::Terminate(Option_t *) 
105 {
106   // Draw result to screen, or perform fitting, normalizations Called
107   // once at the end of the query
108   AliBasedNdetaTask::Terminate("");
109   if(!fSums) {
110     AliError("Could not retrieve TList fSums"); 
111     return; 
112   }
113   if (!fOutput) { 
114     AliError("Could not retrieve TList fOutput"); 
115     return; 
116   }
117
118   fSumPrimary     = static_cast<TH2D*>(fSums->FindObject("truth"));
119   fSNNString      = static_cast<TNamed*>(fSums->FindObject("sNN"));
120   fSysString      = static_cast<TNamed*>(fSums->FindObject("sys"));
121
122   fOutput->Add(fSNNString->Clone());
123   fOutput->Add(fSysString->Clone());
124
125   if (fSumPrimary) { 
126     Int_t nAll        = Int_t(fTriggers->GetBinContent(kAll));
127     Int_t nNSD        = Int_t(fTriggers->GetBinContent(kMCNSD));
128     
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;
132     //  }
133     // }
134  
135     
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;
140     
141     if(fTriggerMask == AliAODForwardMult::kNSD)
142       dndetaTruth->Scale(1./nNSD, "width");
143     else
144       dndetaTruth->Scale(1./nAll, "width");
145     
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;
148     // }
149
150     
151     SetHistogramAttributes(dndetaTruth, kBlue+3, 22, "Monte-Carlo truth");
152     
153     fOutput->Add(dndetaTruth);
154     fOutput->Add(Rebin(dndetaTruth));
155   }
156   // If only there was a away to get sqrt{s_NN} and beam type 
157   
158
159   PostData(2, fOutput);
160 }
161
162 //________________________________________________________________________
163 //
164 // EOF
165 //