1 #include "AliFMDMCCorrections.h"
6 #include "AliForwardCorrectionManager.h"
7 // #include "AliFMDAnaParameters.h"
11 #include <TProfile2D.h>
15 ClassImp(AliFMDMCCorrections)
21 //____________________________________________________________________
22 AliFMDMCCorrections::~AliFMDMCCorrections()
24 if (fComps) fComps->Clear();
25 if (fFMD1i) delete fFMD1i;
26 if (fFMD2i) delete fFMD2i;
27 if (fFMD2o) delete fFMD2o;
28 if (fFMD3i) delete fFMD3i;
29 if (fFMD3o) delete fFMD3o;
32 //____________________________________________________________________
34 AliFMDMCCorrections::operator=(const AliFMDMCCorrections& o)
36 AliFMDCorrections::operator=(o);
41 //____________________________________________________________________
43 AliFMDMCCorrections::CorrectMC(AliForwardUtil::Histos& hists,
46 AliForwardCorrectionManager& fcm = AliForwardCorrectionManager::Instance();
48 UShort_t uvb = vtxbin;
49 for (UShort_t d=1; d<=3; d++) {
50 UShort_t nr = (d == 1 ? 1 : 2);
51 for (UShort_t q=0; q<nr; q++) {
52 Char_t r = (q == 0 ? 'I' : 'O');
53 TH2D* h = hists.Get(d,r);
54 TH2D* bg = fcm.GetSecondaryMap()->GetCorrection(d,r,uvb);
55 TH2D* ef = fcm.GetVertexBias()->GetCorrection(r, uvb);
57 AliWarning(Form("No secondary correction for FMDM%d%c in vertex bin %d",
62 AliWarning(Form("No event vertex bias correction in vertex bin %d",
67 // Divide by primary/total ratio
70 // Divide by the event selection efficiency
78 //____________________________________________________________________
80 AliFMDMCCorrections::Init(const TAxis& eAxis)
82 fFMD1i = Make(1,'I',eAxis);
83 fFMD2i = Make(2,'I',eAxis);
84 fFMD2o = Make(2,'O',eAxis);
85 fFMD3i = Make(3,'I',eAxis);
86 fFMD3o = Make(3,'O',eAxis);
95 //____________________________________________________________________
97 AliFMDMCCorrections::Make(UShort_t d, Char_t r,
98 const TAxis& axis) const
100 TProfile2D* ret = new TProfile2D(Form("FMD%d%c_esd_vs_mc", d, r),
101 Form("ESD/MC signal for FMD%d%c", d, r),
105 (r == 'I' || r == 'i') ? 20 : 40,
107 ret->GetXaxis()->SetTitle("#eta");
108 ret->GetYaxis()->SetTitle("#varphi [degrees]");
109 ret->GetZaxis()->SetTitle("#LT primary density ESD/MC#GT");
110 ret->SetDirectory(0);
113 //____________________________________________________________________
115 AliFMDMCCorrections::Fill(UShort_t d, Char_t r, TH2* esd, TH2* mc)
117 if (!esd || !mc) return;
120 case 1: p = fFMD1i; break;
121 case 2: p = (r == 'I' || r == 'i' ? fFMD2i : fFMD2o); break;
122 case 3: p = (r == 'I' || r == 'i' ? fFMD3i : fFMD3o); break;
126 for (Int_t iEta = 1; iEta <= esd->GetNbinsX(); iEta++) {
127 Double_t eta = esd->GetXaxis()->GetBinCenter(iEta);
128 for (Int_t iPhi = 1; iPhi <= esd->GetNbinsY(); iPhi++) {
129 Double_t phi = esd->GetYaxis()->GetBinCenter(iPhi);
130 Double_t mEsd = esd->GetBinContent(iEta,iPhi);
131 Double_t mMc = mc->GetBinContent(iEta,iPhi);
133 p->Fill(eta, phi, (mMc > 0 ? mEsd / mMc : 0));
138 //____________________________________________________________________
140 AliFMDMCCorrections::CompareResults(AliForwardUtil::Histos& esd,
141 AliForwardUtil::Histos& mc)
143 Fill(1, 'I', esd.Get(1,'I'), mc.Get(1,'I'));
144 Fill(2, 'I', esd.Get(2,'I'), mc.Get(2,'I'));
145 Fill(2, 'O', esd.Get(2,'O'), mc.Get(2,'O'));
146 Fill(3, 'I', esd.Get(3,'I'), mc.Get(3,'I'));
147 Fill(3, 'O', esd.Get(3,'O'), mc.Get(3,'O'));
152 //____________________________________________________________________
154 AliFMDMCCorrections::DefineOutput(TList* dir)
156 AliFMDCorrections::DefineOutput(dir);
157 TList* d = static_cast<TList*>(dir->FindObject(GetName()));
160 fComps->SetName("esd_mc_comparison");
164 //____________________________________________________________________