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