15 #include <TDirectory.h>
20 #include "RooUnfoldBayes.h"
21 #include "RooUnfoldResponse.h"
42 Error(
"GetCollection",
"%s not found in %s", name, d->GetName());
59 TObject* o = d->FindObject(name);
61 Error(
"GetCollection",
"%s not found in %s", name, d->GetName());
161 TFile* ret = TFile::Open(filename, readNotWrite ?
"READ" :
"RECREATE");
163 Error(
"OpenFile",
"Failed to open the file \"%s\"", filename);
233 void UnfoldMult(
const char* respFile=
"forward_response.root",
234 const char* dataFile=
"forward_multiplicy.root",
235 const char* outFile=
"unfolded.root")
237 TFile* output =
OpenFile(outFile,
false);
238 TFile* resp =
OpenFile(respFile,
true);
239 TFile* data =
OpenFile(dataFile,
true);
240 if (!output || !resp || !data)
return;
244 if (!topData || !topResp)
return;
246 Double_t limits[] = {5.1, 3.4, 3.0, 2.4, 2.0, 1.5, 1.0, 0.5, 0. };
249 while ((*limit) > 0.1) {
250 if ((*limit) >5.)
GetHistos(-3.4, (*limit), topResp, topData, output);
251 else GetHistos(-(*limit), (*limit), topResp, topData, output);
268 TString sLow( TString::Format(
"%+03d",
int(10*lowLim)));
269 TString sHigh(TString::Format(
"%+03d",
int(10*highLim)));
270 sLow .ReplaceAll(
"+",
"plus");
271 sLow .ReplaceAll(
"-",
"minus");
272 sHigh.ReplaceAll(
"+",
"plus");
273 sHigh.ReplaceAll(
"-",
"minus");
274 TString name = TString::Format(
"%s_%s", sLow.Data(), sHigh.Data());
275 TDirectory* dir = out->mkdir(name);
281 if(!listResp || !listData)
return;
284 TH2* response =
GetH2(listResp,
"responseMatrix");
285 TH1* mcHist =
GetH1(listResp,
"fMCNSD");
286 TH1* esdHist =
GetH1(listResp,
"fESDNSD");
287 if (!response || !mcHist || !esdHist)
return;
290 TH1* measured =
GetH1(listData,
"mult");
291 if(!measured)
return;
302 Int_t nX = response->GetNbinsX();
303 Int_t nY = response->GetNbinsY();
304 TH1* projY =
static_cast<TH1*
>(response->ProjectionY(
"projY",1,nX,
""));
305 TH1* projX =
static_cast<TH1*
>(response->ProjectionX(
"projX",1,nY,
""));
306 projX->SetDirectory(0);
307 projY->SetDirectory(0);
309 TH2* responseTranspose =
static_cast<TH2*
>(response->Clone(
"response"));
310 for(
Int_t i = 1; i <= nX; i++) {
311 for(
Int_t j = 1; j <= nY; j++) {
312 responseTranspose->SetBinContent(j,i, response->GetBinContent(i,j));
313 responseTranspose->SetBinError(j,i, response->GetBinError(i,j));
317 RooUnfoldResponse* responseObject =
new RooUnfoldResponse(projY, projX,
320 RooUnfold* unfold =
new RooUnfoldBayes(responseObject,
322 TH1* unfolded =
static_cast<TH1*
>(unfold->Hreco());
326 Double_t scale_unf = 1/unfolded->Integral();
327 unfolded->Scale(scale_unf);
328 unfolded->Write(
"Unfolded");
330 Double_t scale_raw = 1/measured->Integral();
331 measured->Scale(scale_raw);
332 measured->Write(
"Raw");
333 triggerBias->Write(
"TriggerBiasCorr");
344 TH1* corr =
new TH1D(
"corr",
"corr", 40, -0.5, 39.5);
345 for (
Int_t j=1; j<corr->GetNbinsX(); j++) {
347 Double_t cESD = esdHist->GetBinContent(j);
348 Double_t cMS = mcHist->GetBinContent(j);
350 cESD == 0 ? 1/cMC : cESD/cMC);
351 corr->SetBinContent(j, c);
352 corr->SetBinError(j, c*TMath::Sqrt(errSqr));
360 for (
Int_t k=1; k<=35; k++) {
361 Double_t tb = triggerBias->GetBinContent(k);
362 Double_t ub = unfoldBefore->GetBinContent(k);
363 if (tb > 1e-5 && ub > 0) {
364 unfoldBefore->SetBinContent(k, ub / tb);
365 Double_t eub = UnfoldBefore->GetBinError(k);
366 Double_t etb = TriggerBias->GetBinError(k);
367 unfoldBefore->SetBinError(k, TMath::Sqrt(TMath::Power(eub/ub)+
368 TMath::Power(etb/tb))*ub/tb);
void UnfoldMult(const char *respFile="forward_response.root", const char *dataFile="forward_multiplicy.root", const char *outFile="unfolded.root")
TFile * OpenFile(const char *filename, Bool_t readNotWrite)
void GetHistos(Double_t lowLim, Double_t highLim, Dir *resp, Dir *data, TDirectory *out)
TH1 * GetTriggerBias(TH1 *mcHist, TH1 *esdHist)
TH1 * GetH1(TDirectory *d, const char *name)
void ProcessUnfold(TH2 *response, TH1 *measured, TH1 *mcHist, TH1 *esdHist)
TH2 * GetH2(TDirectory *d, const char *name)
TCollection * GetCollection(TDirectory *d, const char *name)
void DoCorrection(TH1 *unfoldBefore, TH1 *triggerBias, TH1 *mcHist)
TObject * GetObject(TDirectory *d, const char *name)