]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGLF/FORWARD/analysis2/AliForwarddNdetaTask.cxx
Fix some minor problems and add output string that holds the normalization calculations
[u/mrichter/AliRoot.git] / PWGLF / 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 <TFile.h>
9 #include <AliAnalysisManager.h>
10 #include <AliAODEvent.h>
11 #include <AliAODHandler.h>
12 #include <AliAODInputHandler.h>
13 #include "AliForwardUtil.h"
14 #include "AliAODForwardMult.h"
15
16 //____________________________________________________________________
17 AliForwarddNdetaTask::AliForwarddNdetaTask()
18   : AliBasedNdetaTask()
19 {
20   //
21   // Constructor 
22   // 
23   DGUARD(fDebug, 0, "Default CTOR of AliForwarddNdetaTask");
24 }
25
26 //____________________________________________________________________
27 AliForwarddNdetaTask::AliForwarddNdetaTask(const char* /* name */)
28   : AliBasedNdetaTask("Forward")
29 {
30   // 
31   // Constructor
32   // 
33   // Paramters
34   //   name    Name of task 
35   SetTitle("FMD");
36   DGUARD(fDebug, 0, "Named CTOR of AliForwarddNdetaTask");
37 }
38
39 //____________________________________________________________________
40 AliForwarddNdetaTask::AliForwarddNdetaTask(const AliForwarddNdetaTask& o)
41   : AliBasedNdetaTask(o)
42 {
43   // 
44   // Copy constructor
45   // 
46   DGUARD(fDebug, 0, "Copy CTOR of AliForwarddNdetaTask");
47 }
48
49 //____________________________________________________________________
50 AliBasedNdetaTask::CentralityBin*
51 AliForwarddNdetaTask::MakeCentralityBin(const char* name, Short_t l, Short_t h) 
52   const 
53 {
54   // 
55   // Make a new centrality bin
56   // 
57   // Parameters:
58   //    name   Histogram names
59   //    l      Lower cut
60   //    h      Upper cut
61   // 
62   // Return:
63   //    Newly allocated object (of our type)
64   //
65   DGUARD(fDebug, 3,"Make a centrality bin for AliForwarddNdetaTask: %s [%d,%d]",
66          name, l, h);
67   return new AliForwarddNdetaTask::CentralityBin(name, l, h);
68 }
69
70
71 //____________________________________________________________________
72 TH2D*
73 AliForwarddNdetaTask::GetHistogram(const AliAODEvent* aod, Bool_t mc)
74 {
75   // 
76   // Retrieve the histogram 
77   // 
78   // Parameters:
79   //    aod AOD event 
80   //    mc  Whether to get the MC histogram or not
81   // 
82   // Return:
83   //    Retrieved histogram or null
84   //
85   TObject* obj = 0;
86   if (mc) obj = aod->FindListObject("ForwardMC");
87   else    obj = aod->FindListObject("Forward");
88
89   // We should have a forward object at least 
90   if (!obj) {
91     if (!mc) AliWarning("No Forward object found AOD");
92     return 0;
93   }
94   AliAODForwardMult* forward = static_cast<AliAODForwardMult*>(obj);
95   return &(forward->GetHistogram());
96 }
97
98 //========================================================================
99 void
100 AliForwarddNdetaTask::CentralityBin::End(TList*      sums, 
101                                          TList*      results,
102                                          UShort_t    scheme,
103                                          const TH2F* shapeCorr, 
104                                          Double_t    trigEff,
105                                          Double_t    trigEff0,
106                                          Bool_t      symmetrice,
107                                          Int_t       rebin, 
108                                          Bool_t      rootProj,
109                                          Bool_t      corrEmpty, 
110                                          Bool_t      cutEdges,
111                                          Int_t       triggerMask,
112                                          Int_t       marker,
113                                          Int_t       color,
114                                          TList*      mclist,
115                                          TList*      truthlist )
116 {
117   DGUARD(fDebug, 1, "In End of %s with corrEmpty=%d, cutEdges=%d, rootProj=%d", 
118          GetName(), corrEmpty, cutEdges, rootProj);
119   AliBasedNdetaTask::CentralityBin::End(sums, results, scheme, 
120                                         shapeCorr, trigEff, trigEff0,
121                                         symmetrice, rebin, 
122                                         rootProj, corrEmpty, cutEdges,
123                                         triggerMask, marker, color, mclist, 
124                                         truthlist);
125
126   if (!IsAllBin()) return;
127   TFile* file = TFile::Open("forward.root", "READ");
128   if (!file) return;
129   
130   TList* forward = static_cast<TList*>(file->Get("Forward"));
131   if (!forward) { 
132     AliError("List Forward not found in forward.root");
133     return;
134   }
135   TList* rings = static_cast<TList*>(forward->FindObject("ringResults"));
136   if (!rings) { 
137     AliError("List ringResults not found in forward.root");
138     return;
139   }
140   THStack* res = static_cast<THStack*>(rings->FindObject("all"));
141   if (!res) { 
142     AliError(Form("Stack all not found in %s", rings->GetName()));
143     return;
144   }
145   if (!fTriggers) { 
146     AliError("Triggers histogram not set");
147     return;
148   }
149
150   Double_t ntotal   = 0;
151   Double_t epsilonT = trigEff;
152 #if 0
153   // TEMPORARY FIX
154   if (triggerMask == AliAODForwardMult::kNSD) {
155     // This is a local change 
156     epsilonT = 0.92; 
157     AliWarning(Form("Using hard-coded NSD trigger efficiency of %f",epsilonT));
158   }
159 #endif
160   AliInfo("Adding per-ring histograms to output");
161   TString text;
162   Double_t scaler = Normalization(*fTriggers, scheme, epsilonT, ntotal, &text);
163   TIter next(res->GetHists());
164   TH1*  hist = 0;
165   while ((hist = static_cast<TH1*>(next()))) hist->Scale(scaler);
166   res->SetName("dndetaRings");
167   fOutput->Add(res);
168   fOutput->Add(new TNamed("normCalc", text.Data()));
169 }
170
171 //________________________________________________________________________
172 //
173 // EOF
174 //