ROOT logo
/**************************************************************************
 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 *                                                                        *
 * Author: The ALICE Off-line Project.                                    *
 * Contributors are mentioned in the code where appropriate.              *
 *                                                                        *
 * Permission to use, copy, modify and distribute this software and its   *
 * documentation strictly for non-commercial purposes is hereby granted   *
 * without fee, provided that the above copyright notice appears in all   *
 * copies and that both the copyright notice and this permission notice   *
 * appear in the supporting documentation. The authors make no claims     *
 * about the suitability of this software for any purpose. It is          *
 * provided "as is" without express or implied warranty.                  *
 **************************************************************************/

// Draw corrected pt
// author: Eulogio Serradilla <eulogio.serradilla@cern.ch>

#if !defined(__CINT__) || defined(__MAKECINT__)
#include <TROOT.h>
#include <TStyle.h>
#include <TFile.h>
#include <TH1D.h>
#include <TString.h>
#include <TCanvas.h>
#include <TGraphErrors.h>
#include <TLegend.h>
#include <RooWorkspace.h>
#include <RooMsgService.h>
#include <RooPlot.h>
#include <RooRealVar.h>
#include <RooAbsData.h>
#include <RooAbsPdf.h>
#endif

#include "B2.h"

void DrawPt(const TString& inputFile="debug.root", const TString& tag="test", const TString& particle="AntiDeuteron", Double_t ptmax=3., Bool_t m2pid=0, Double_t ptpid=1.2)
{
//
// Draw corrected pt for debugging
//
	Double_t xmin = 0;
	Double_t xmax = 3.5;
	
	gStyle->SetPadTickX(1);
	gStyle->SetPadTickY(1);
	gStyle->SetPadGridX(1);
	gStyle->SetPadGridY(1);
	gStyle->SetOptStat(0);
	gStyle->SetOptTitle(1);
	
	TFile* finput = new TFile(inputFile.Data());
	if (finput->IsZombie()) exit(1);
	
	TH1D* hPidPt = FindObj<TH1D>(finput, tag, Form("%s_PID_Pt",particle.Data()));
	
	Int_t hiptbin  = hPidPt->GetXaxis()->FindFixBin(ptmax);
	Int_t lowm2bin = hPidPt->GetXaxis()->FindFixBin(ptpid);
	Int_t him2bin  = hPidPt->GetXaxis()->FindFixBin(ptmax);
	
	// m2 data fitted models
	
	if(m2pid && (hiptbin>lowm2bin))
	{
		using namespace RooFit;
		
		// disable verbose in RooFit
		RooMsgService::instance().setSilentMode(1);
		RooMsgService::instance().setGlobalKillBelow(RooFit::FATAL);
		
		TCanvas* c0 = new TCanvas(Form("%s.M2",particle.Data()), Form("M2 for %ss",particle.Data()));
		c0->Divide(4,5);
		
		TGraphErrors* grFitSigmaPt = new TGraphErrors();
		grFitSigmaPt->SetName(Form("%s_Fit_Sigma_Pt", particle.Data()));
		
		TGraphErrors* grFitM2Pt = new TGraphErrors();
		grFitM2Pt->SetName(Form("%s_Fit_M2_Pt", particle.Data()));
		
		for(Int_t i=lowm2bin, j=0; i<him2bin && i-lowm2bin < 20 && i < hiptbin; ++i)
		{
			c0->cd(i-lowm2bin+1);
			
			RooWorkspace* w= FindObj<RooWorkspace>(finput, tag, Form("%s_M2_%02d",particle.Data(),i));
			
			RooPlot* m2frame = w->var("x")->frame();
			
			w->data("data")->plotOn(m2frame);
			
			w->pdf("model")->plotOn(m2frame, Components(*(w->pdf("Sd"))),LineWidth(1), LineColor(8));
			w->pdf("model")->plotOn(m2frame, Components(*(w->pdf("Bkg"))),LineWidth(1), LineColor(46),LineStyle(kDashed));
			w->pdf("model")->plotOn(m2frame, LineWidth(1));
			
			m2frame->SetTitle(Form("%0.2f < #it{p}_{T} < %0.2f GeV/#it{c}", hPidPt->GetBinLowEdge(i), hPidPt->GetBinLowEdge(i)+hPidPt->GetBinWidth(i)));
			m2frame->SetMinimum(0.2);
			
			m2frame->Draw();
			
			Double_t pt = hPidPt->GetBinCenter(i);
			
			grFitSigmaPt->SetPoint(j, pt, w->var("sigma")->getVal());
			grFitSigmaPt->SetPointError(j, 0, w->var("sigma")->getError());
			
			grFitM2Pt->SetPoint(j, pt, w->var("mu")->getVal());
			grFitM2Pt->SetPointError(j++, 0, w->var("mu")->getError());
		}
		
		c0->Update();
		
		// model parameters
		
		TCanvas* c1 = new TCanvas(Form("%s.M2.FitParameters",particle.Data()), Form("M2 model parameters for %ss",particle.Data()));
		
		c1->Divide(2,1);
		
		c1->cd(1);
		
		grFitSigmaPt->SetMarkerStyle(kFullCircle);
		grFitSigmaPt->SetMarkerColor(kBlue);
		grFitSigmaPt->SetLineColor(kBlue);
		grFitSigmaPt->GetXaxis()->SetTitle("p_{T} (GeV/c)");
		grFitSigmaPt->GetYaxis()->SetTitle("#sigma");
		grFitSigmaPt->Draw("ALP");
		
		c1->cd(2);
		
		grFitM2Pt->SetMarkerStyle(kFullCircle);
		grFitM2Pt->SetMarkerColor(kBlue);
		grFitM2Pt->SetLineColor(kBlue);
		grFitM2Pt->GetXaxis()->SetTitle("p_{T} (GeV/c)");
		grFitM2Pt->GetYaxis()->SetTitle("#mu");
		grFitM2Pt->Draw("ALP");
		
		//delete grFitSigmaPt;
		//delete grFitM2Pt;
		
		c1->Update();
	}
	
	// remaining corrections
	
	TCanvas* c2 = new TCanvas(Form("%s.Pt",particle.Data()), Form("Pt for %s",particle.Data()));
	c2->SetLogy();
	
	const Int_t kNum = 4;
	const TString kCorr[kNum]  = { "PID", "PidCorr", "SecCorr", "EffCorr"};
	const TString kLabel[kNum] = { "Raw", "PID", "Secondaries","Efficiency" };
	const Int_t kColor[]   = { kRed, kAzure, kOrange+1, kGreen-3, kGreen-2};
	const Int_t kMarker[]  = { kFullCircle, kFullSquare, kFullTriangleUp, kFullTriangleDown, kFullCircle, kOpenTriangleUp};
	
	TLegend* legend = new TLegend(0.5689655,0.6355932,0.8362069,0.8326271,0,"brNDC");
	legend->SetTextSize(0.03);
	legend->SetFillColor(0);
	legend->SetBorderSize(0);
	
	TH1D* hPt[kNum];
	
	for(Int_t i=0; i<kNum; ++i)
	{
		hPt[i] = FindObj<TH1D>(finput, tag, particle + "_" + kCorr[i] + "_Pt");
		hPt[i]->SetLineColor(kColor[i]);
		hPt[i]->SetMarkerColor(kColor[i]);
		hPt[i]->SetMarkerStyle(kMarker[i]);
		legend->AddEntry(hPt[i], kLabel[i], "lp");
	}
	
	hPt[kNum-1]->SetTitle(particle.Data());
	hPt[kNum-1]->SetAxisRange(xmin,xmax,"X");
	hPt[kNum-1]->Draw("E");
	
	for(Int_t i=0; i<kNum-1; ++i) hPt[i]->Draw("sameE");
	legend->Draw();
	
	c2->Update();
}
 DrawPt.C:1
 DrawPt.C:2
 DrawPt.C:3
 DrawPt.C:4
 DrawPt.C:5
 DrawPt.C:6
 DrawPt.C:7
 DrawPt.C:8
 DrawPt.C:9
 DrawPt.C:10
 DrawPt.C:11
 DrawPt.C:12
 DrawPt.C:13
 DrawPt.C:14
 DrawPt.C:15
 DrawPt.C:16
 DrawPt.C:17
 DrawPt.C:18
 DrawPt.C:19
 DrawPt.C:20
 DrawPt.C:21
 DrawPt.C:22
 DrawPt.C:23
 DrawPt.C:24
 DrawPt.C:25
 DrawPt.C:26
 DrawPt.C:27
 DrawPt.C:28
 DrawPt.C:29
 DrawPt.C:30
 DrawPt.C:31
 DrawPt.C:32
 DrawPt.C:33
 DrawPt.C:34
 DrawPt.C:35
 DrawPt.C:36
 DrawPt.C:37
 DrawPt.C:38
 DrawPt.C:39
 DrawPt.C:40
 DrawPt.C:41
 DrawPt.C:42
 DrawPt.C:43
 DrawPt.C:44
 DrawPt.C:45
 DrawPt.C:46
 DrawPt.C:47
 DrawPt.C:48
 DrawPt.C:49
 DrawPt.C:50
 DrawPt.C:51
 DrawPt.C:52
 DrawPt.C:53
 DrawPt.C:54
 DrawPt.C:55
 DrawPt.C:56
 DrawPt.C:57
 DrawPt.C:58
 DrawPt.C:59
 DrawPt.C:60
 DrawPt.C:61
 DrawPt.C:62
 DrawPt.C:63
 DrawPt.C:64
 DrawPt.C:65
 DrawPt.C:66
 DrawPt.C:67
 DrawPt.C:68
 DrawPt.C:69
 DrawPt.C:70
 DrawPt.C:71
 DrawPt.C:72
 DrawPt.C:73
 DrawPt.C:74
 DrawPt.C:75
 DrawPt.C:76
 DrawPt.C:77
 DrawPt.C:78
 DrawPt.C:79
 DrawPt.C:80
 DrawPt.C:81
 DrawPt.C:82
 DrawPt.C:83
 DrawPt.C:84
 DrawPt.C:85
 DrawPt.C:86
 DrawPt.C:87
 DrawPt.C:88
 DrawPt.C:89
 DrawPt.C:90
 DrawPt.C:91
 DrawPt.C:92
 DrawPt.C:93
 DrawPt.C:94
 DrawPt.C:95
 DrawPt.C:96
 DrawPt.C:97
 DrawPt.C:98
 DrawPt.C:99
 DrawPt.C:100
 DrawPt.C:101
 DrawPt.C:102
 DrawPt.C:103
 DrawPt.C:104
 DrawPt.C:105
 DrawPt.C:106
 DrawPt.C:107
 DrawPt.C:108
 DrawPt.C:109
 DrawPt.C:110
 DrawPt.C:111
 DrawPt.C:112
 DrawPt.C:113
 DrawPt.C:114
 DrawPt.C:115
 DrawPt.C:116
 DrawPt.C:117
 DrawPt.C:118
 DrawPt.C:119
 DrawPt.C:120
 DrawPt.C:121
 DrawPt.C:122
 DrawPt.C:123
 DrawPt.C:124
 DrawPt.C:125
 DrawPt.C:126
 DrawPt.C:127
 DrawPt.C:128
 DrawPt.C:129
 DrawPt.C:130
 DrawPt.C:131
 DrawPt.C:132
 DrawPt.C:133
 DrawPt.C:134
 DrawPt.C:135
 DrawPt.C:136
 DrawPt.C:137
 DrawPt.C:138
 DrawPt.C:139
 DrawPt.C:140
 DrawPt.C:141
 DrawPt.C:142
 DrawPt.C:143
 DrawPt.C:144
 DrawPt.C:145
 DrawPt.C:146
 DrawPt.C:147
 DrawPt.C:148
 DrawPt.C:149
 DrawPt.C:150
 DrawPt.C:151
 DrawPt.C:152
 DrawPt.C:153
 DrawPt.C:154
 DrawPt.C:155
 DrawPt.C:156
 DrawPt.C:157
 DrawPt.C:158
 DrawPt.C:159
 DrawPt.C:160
 DrawPt.C:161
 DrawPt.C:162
 DrawPt.C:163
 DrawPt.C:164
 DrawPt.C:165
 DrawPt.C:166
 DrawPt.C:167
 DrawPt.C:168
 DrawPt.C:169
 DrawPt.C:170
 DrawPt.C:171
 DrawPt.C:172
 DrawPt.C:173
 DrawPt.C:174
 DrawPt.C:175
 DrawPt.C:176
 DrawPt.C:177