ROOT logo
/*
 *  CalcCorrAcc.C
 */

void CalcCorrAcc(const char* fileName, Bool_t makeDraw=kFALSE, Float_t* yy=0, Float_t* eyy=0)
{
	// open the input file
	TFile *file = new TFile(fileName);
	
	// ********************************************
	// parameters to check before running the macro
	// ********************************************
	
	const Int_t NCUTS = 3; // Choose the number of cuts to check
	Float_t eCut[NCUTS] = {0.1,0.25,0.5}; // Choose the value of the cuts
	//Float_t eCut[NCUTS] = {0.5}; // Choose the value of the cuts
	
	Int_t style[NCUTS] = {20,21,22};
	Int_t color[NCUTS] = {1,2,4};
	//Int_t style[NCUTS] = {20};
	//Int_t color[NCUTS] = {1};	
	
	const Int_t fgNumOfEBins = 78; // Check the number of eta bins in the histograms
	const Int_t fgNumOfEtaBins = 16; // Check the number of E bins in the histograms
	
	// declare histograms and graphs
	TH2F *hist;
	TH2F *histAllEM;
	TH2F *histAccEM;
	
	TGraphErrors *graph[NCUTS];
	
	// retrieve the input list of histogram. Check the TList name in the input file.
	TList *list = (TList*) file->Get("out1");
	
	// retrieve the histograms in the list. Check the name of the histograms
	hist = (TH2F*)list->FindObject("fHistElectron_EtaE_ET_EmcalMC");
	histAllEM = new TH2F(*hist);	
	hist = (TH2F*)list->FindObject("fHistConvElectron_EtaE_ET_EmcalMC");
	histAllEM->Add(hist);
	hist = (TH2F*)list->FindObject("fHistScatElectron_EtaE_ET_EmcalMC");
	histAllEM->Add(hist);
	hist = (TH2F*)list->FindObject("fHistGamma_EtaE_ET_EmcalMC");
	histAllEM->Add(hist);
	hist = (TH2F*)list->FindObject("fHistAnnihGamma_EtaE_ET_EmcalMC");
	histAllEM->Add(hist);
	hist = (TH2F*)list->FindObject("fHistScatGamma_EtaE_ET_EmcalMC");
	histAllEM->Add(hist);
	
	hist = (TH2F*)list->FindObject("fHistElectronAcc_EtaE_ET_EmcalMC");
	histAccEM = new TH2F(*hist);	
	hist = (TH2F*)list->FindObject("fHistConvElectronAcc_EtaE_ET_EmcalMC");
	histAccEM->Add(hist);
	hist = (TH2F*)list->FindObject("fHistScatElectronAcc_EtaE_ET_EmcalMC");
	histAccEM->Add(hist);
	hist = (TH2F*)list->FindObject("fHistGammaAcc_EtaE_ET_EmcalMC");
	histAccEM->Add(hist);
	hist = (TH2F*)list->FindObject("fHistScatGammaAcc_EtaE_ET_EmcalMC");
	histAccEM->Add(hist);
	hist = (TH2F*)list->FindObject("fHistAnnihGammaAcc_EtaE_ET_EmcalMC");
	histAccEM->Add(hist);
	
	
	// ********************************************
	
	Float_t x[fgNumOfEtaBins]={0}, ex[fgNumOfEtaBins]={0};
	Float_t y[fgNumOfEtaBins]={0}, ey[fgNumOfEtaBins]={0};
	
	// returning the output that is in memory
	yy=y;
	eyy = ey;
	
	// loop over different E cuts
	for (int iCut=0; iCut<NCUTS; iCut++)
	{
		// loop over eta bins
		for (int iy=0; iy<fgNumOfEtaBins; iy++)
		{
			// initialize ET variables for a new particle species
			Float_t E=0, ET=0, ET_AllEM=0, ET_AccEM=0, errorSqET_AllEM=0, errorSqET_AccEM=0;
			x[iy]=0;
			y[iy]=0;
			ex[iy]=0;
			ey[iy]=0;
			
			// loop over E bins
			for (int ix=0; ix<fgNumOfEBins; ix++)
			{
				E = histAccEM->GetXaxis()->GetBinLowEdge(ix+1);
				
				if (E >= eCut[iCut])
				{
					ET = histAccEM->GetBinContent(ix+1,iy+1); // sum over all E bins in order to get total ET
					errorSqET_AccEM += pow(E_err(E)*(ET/E),2);
					ET_AccEM += ET;
				}				
					
				ET = histAllEM->GetBinContent(ix+1,iy+1); // sum over all E bins in order to get total ET
				if (E > 0)
					errorSqET_AllEM += pow(E_err(E)*(ET/E),2);
				ET_AllEM += ET;
			} // end of loop over E bins
			
			x[iy] = histAccEM->GetYaxis()->GetBinCenter(iy+1); // x coordinate of eta bin
			
			if ( (ET_AllEM > 0) && (ET_AccEM > 0) )
			{
				y[iy] = ET_AccEM/ET_AllEM; // y coordinate of eta bin (for a given particle species)
				ey[iy]=y[iy]*sqrt(errorSqET_AllEM/pow(ET_AllEM,2) + errorSqET_AccEM/pow(ET_AccEM,2));
			}
			else
			{
				y[iy] = 0;
				ey[iy] = 0;
			}
		} // end of loop over eta bins
		
		graph[iCut] = new TGraphErrors(fgNumOfEtaBins,x,y,ex,ey); // graphic of ET(>E_cut)/ET(total) for a given E cut (all particle species combined)
	} // end of loop over different E cuts
	
	
	// Draw the plot
	if (makeDraw)
	{
		gStyle->SetOptTitle(0);
		gStyle->SetOptStat(0);
		gStyle->SetOptFit(0);	
		
		TCanvas *c = new TCanvas("c","c",500,400);
		//c->SetTopMargin(0.04);
		//c->SetRightMargin(0.04);
		//c->SetLeftMargin(0.181452);
		//c->SetBottomMargin(0.134409);
		c->SetBorderSize(0);
		c->SetFillColor(0);
		c->SetBorderMode(0);
		c->SetFrameFillColor(0);
		c->SetFrameBorderMode(0);
		
		for (int i=0; i<NCUTS; i++)
		{
			graph[i]->SetMarkerStyle(style[i]);
			graph[i]->SetMarkerColor(color[i]);
			graph[i]->SetLineColor(color[i]);
			graph[i]->SetFillColor(0);
			if (i == 0) 
			{
				graph[i]->GetXaxis()->SetTitle("#eta");
				graph[i]->GetYaxis()->SetTitle("E_{T}^{EM Acceptance}/E_{T}^{EM All}");
				graph[i]->SetMaximum(0.1);
				graph[i]->SetMinimum(0.0);
				graph[i]->Draw("AP");
			}
			else
				graph[i]->Draw("P");
		}
		
		TLegend *leg = new TLegend(0.65,0.2,0.95,0.5);
		leg->AddEntry(graph[0],"E>100 MeV");
		leg->AddEntry(graph[1],"E>250 MeV");
		leg->AddEntry(graph[2],"E>500 MeV");
		leg->SetFillStyle(0);
		leg->SetFillColor(0);
		leg->SetBorderSize(0);
		leg->SetTextSize(0.03);
		leg->Draw();		
	}
}

Float_t E_err(Float_t E)
{
	return (E*sqrt(pow(4.35/E,2)+pow(9.07,2)/E+pow(1.63,2)))/100;	
}
 CalcCorrAcc.C:1
 CalcCorrAcc.C:2
 CalcCorrAcc.C:3
 CalcCorrAcc.C:4
 CalcCorrAcc.C:5
 CalcCorrAcc.C:6
 CalcCorrAcc.C:7
 CalcCorrAcc.C:8
 CalcCorrAcc.C:9
 CalcCorrAcc.C:10
 CalcCorrAcc.C:11
 CalcCorrAcc.C:12
 CalcCorrAcc.C:13
 CalcCorrAcc.C:14
 CalcCorrAcc.C:15
 CalcCorrAcc.C:16
 CalcCorrAcc.C:17
 CalcCorrAcc.C:18
 CalcCorrAcc.C:19
 CalcCorrAcc.C:20
 CalcCorrAcc.C:21
 CalcCorrAcc.C:22
 CalcCorrAcc.C:23
 CalcCorrAcc.C:24
 CalcCorrAcc.C:25
 CalcCorrAcc.C:26
 CalcCorrAcc.C:27
 CalcCorrAcc.C:28
 CalcCorrAcc.C:29
 CalcCorrAcc.C:30
 CalcCorrAcc.C:31
 CalcCorrAcc.C:32
 CalcCorrAcc.C:33
 CalcCorrAcc.C:34
 CalcCorrAcc.C:35
 CalcCorrAcc.C:36
 CalcCorrAcc.C:37
 CalcCorrAcc.C:38
 CalcCorrAcc.C:39
 CalcCorrAcc.C:40
 CalcCorrAcc.C:41
 CalcCorrAcc.C:42
 CalcCorrAcc.C:43
 CalcCorrAcc.C:44
 CalcCorrAcc.C:45
 CalcCorrAcc.C:46
 CalcCorrAcc.C:47
 CalcCorrAcc.C:48
 CalcCorrAcc.C:49
 CalcCorrAcc.C:50
 CalcCorrAcc.C:51
 CalcCorrAcc.C:52
 CalcCorrAcc.C:53
 CalcCorrAcc.C:54
 CalcCorrAcc.C:55
 CalcCorrAcc.C:56
 CalcCorrAcc.C:57
 CalcCorrAcc.C:58
 CalcCorrAcc.C:59
 CalcCorrAcc.C:60
 CalcCorrAcc.C:61
 CalcCorrAcc.C:62
 CalcCorrAcc.C:63
 CalcCorrAcc.C:64
 CalcCorrAcc.C:65
 CalcCorrAcc.C:66
 CalcCorrAcc.C:67
 CalcCorrAcc.C:68
 CalcCorrAcc.C:69
 CalcCorrAcc.C:70
 CalcCorrAcc.C:71
 CalcCorrAcc.C:72
 CalcCorrAcc.C:73
 CalcCorrAcc.C:74
 CalcCorrAcc.C:75
 CalcCorrAcc.C:76
 CalcCorrAcc.C:77
 CalcCorrAcc.C:78
 CalcCorrAcc.C:79
 CalcCorrAcc.C:80
 CalcCorrAcc.C:81
 CalcCorrAcc.C:82
 CalcCorrAcc.C:83
 CalcCorrAcc.C:84
 CalcCorrAcc.C:85
 CalcCorrAcc.C:86
 CalcCorrAcc.C:87
 CalcCorrAcc.C:88
 CalcCorrAcc.C:89
 CalcCorrAcc.C:90
 CalcCorrAcc.C:91
 CalcCorrAcc.C:92
 CalcCorrAcc.C:93
 CalcCorrAcc.C:94
 CalcCorrAcc.C:95
 CalcCorrAcc.C:96
 CalcCorrAcc.C:97
 CalcCorrAcc.C:98
 CalcCorrAcc.C:99
 CalcCorrAcc.C:100
 CalcCorrAcc.C:101
 CalcCorrAcc.C:102
 CalcCorrAcc.C:103
 CalcCorrAcc.C:104
 CalcCorrAcc.C:105
 CalcCorrAcc.C:106
 CalcCorrAcc.C:107
 CalcCorrAcc.C:108
 CalcCorrAcc.C:109
 CalcCorrAcc.C:110
 CalcCorrAcc.C:111
 CalcCorrAcc.C:112
 CalcCorrAcc.C:113
 CalcCorrAcc.C:114
 CalcCorrAcc.C:115
 CalcCorrAcc.C:116
 CalcCorrAcc.C:117
 CalcCorrAcc.C:118
 CalcCorrAcc.C:119
 CalcCorrAcc.C:120
 CalcCorrAcc.C:121
 CalcCorrAcc.C:122
 CalcCorrAcc.C:123
 CalcCorrAcc.C:124
 CalcCorrAcc.C:125
 CalcCorrAcc.C:126
 CalcCorrAcc.C:127
 CalcCorrAcc.C:128
 CalcCorrAcc.C:129
 CalcCorrAcc.C:130
 CalcCorrAcc.C:131
 CalcCorrAcc.C:132
 CalcCorrAcc.C:133
 CalcCorrAcc.C:134
 CalcCorrAcc.C:135
 CalcCorrAcc.C:136
 CalcCorrAcc.C:137
 CalcCorrAcc.C:138
 CalcCorrAcc.C:139
 CalcCorrAcc.C:140
 CalcCorrAcc.C:141
 CalcCorrAcc.C:142
 CalcCorrAcc.C:143
 CalcCorrAcc.C:144
 CalcCorrAcc.C:145
 CalcCorrAcc.C:146
 CalcCorrAcc.C:147
 CalcCorrAcc.C:148
 CalcCorrAcc.C:149
 CalcCorrAcc.C:150
 CalcCorrAcc.C:151
 CalcCorrAcc.C:152
 CalcCorrAcc.C:153
 CalcCorrAcc.C:154
 CalcCorrAcc.C:155
 CalcCorrAcc.C:156
 CalcCorrAcc.C:157
 CalcCorrAcc.C:158
 CalcCorrAcc.C:159
 CalcCorrAcc.C:160
 CalcCorrAcc.C:161
 CalcCorrAcc.C:162
 CalcCorrAcc.C:163
 CalcCorrAcc.C:164
 CalcCorrAcc.C:165
 CalcCorrAcc.C:166
 CalcCorrAcc.C:167
 CalcCorrAcc.C:168
 CalcCorrAcc.C:169
 CalcCorrAcc.C:170
 CalcCorrAcc.C:171
 CalcCorrAcc.C:172
 CalcCorrAcc.C:173
 CalcCorrAcc.C:174