ROOT logo
/*
 *  CalcCorrAcc.C
 */

void CalcCorrEcut(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 Float_t E_MIN = 0.1;
	const Int_t NCUTS = 3; // Choose the number of cuts to check
	Float_t eCut[NCUTS] = {0.25,0.5,0.75}; // 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] = {2,3,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 *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("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_RecEM=0, errorSqET_AllEM=0, errorSqET_RecEM=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 >= E_MIN)
				{
					ET = histAccEM->GetBinContent(ix+1,iy+1); // sum over all E bins in order to get total ET
					errorSqET_AllEM += pow(E_err(E)*(ET/E),2);
					ET_AllEM += ET;
				}
				if (E >= eCut[iCut])
				{
					ET = histAccEM->GetBinContent(ix+1,iy+1); // sum over all E bins in order to get total ET
					errorSqET_RecEM += pow(E_err(E)*(ET/E),2);
					ET_RecEM += ET;
				}				
			} // end of loop over E bins
			
			x[iy] = histAccEM->GetYaxis()->GetBinCenter(iy+1); // x coordinate of eta bin
			
			if ((ET_AllEM > 0) && (ET_RecEM>0) )
			{
				y[iy] = ET_RecEM/ET_AllEM; // y coordinate of eta bin (for a given particle species)
				ey[iy]=y[iy]*sqrt(errorSqET_AllEM/pow(ET_AllEM,2) + errorSqET_RecEM/pow(ET_RecEM,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} (E>E_{cut})/E_{T}^{EM} (E>100 MeV)");
				//graph[i]->SetMaximum(1.0);
				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_{cut} = 250 MeV");
		leg->AddEntry(graph[1],"E_{cut} = 500 MeV");
		leg->AddEntry(graph[2],"E_{cut} = 750 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;	
}
 CalcCorrEcut.C:1
 CalcCorrEcut.C:2
 CalcCorrEcut.C:3
 CalcCorrEcut.C:4
 CalcCorrEcut.C:5
 CalcCorrEcut.C:6
 CalcCorrEcut.C:7
 CalcCorrEcut.C:8
 CalcCorrEcut.C:9
 CalcCorrEcut.C:10
 CalcCorrEcut.C:11
 CalcCorrEcut.C:12
 CalcCorrEcut.C:13
 CalcCorrEcut.C:14
 CalcCorrEcut.C:15
 CalcCorrEcut.C:16
 CalcCorrEcut.C:17
 CalcCorrEcut.C:18
 CalcCorrEcut.C:19
 CalcCorrEcut.C:20
 CalcCorrEcut.C:21
 CalcCorrEcut.C:22
 CalcCorrEcut.C:23
 CalcCorrEcut.C:24
 CalcCorrEcut.C:25
 CalcCorrEcut.C:26
 CalcCorrEcut.C:27
 CalcCorrEcut.C:28
 CalcCorrEcut.C:29
 CalcCorrEcut.C:30
 CalcCorrEcut.C:31
 CalcCorrEcut.C:32
 CalcCorrEcut.C:33
 CalcCorrEcut.C:34
 CalcCorrEcut.C:35
 CalcCorrEcut.C:36
 CalcCorrEcut.C:37
 CalcCorrEcut.C:38
 CalcCorrEcut.C:39
 CalcCorrEcut.C:40
 CalcCorrEcut.C:41
 CalcCorrEcut.C:42
 CalcCorrEcut.C:43
 CalcCorrEcut.C:44
 CalcCorrEcut.C:45
 CalcCorrEcut.C:46
 CalcCorrEcut.C:47
 CalcCorrEcut.C:48
 CalcCorrEcut.C:49
 CalcCorrEcut.C:50
 CalcCorrEcut.C:51
 CalcCorrEcut.C:52
 CalcCorrEcut.C:53
 CalcCorrEcut.C:54
 CalcCorrEcut.C:55
 CalcCorrEcut.C:56
 CalcCorrEcut.C:57
 CalcCorrEcut.C:58
 CalcCorrEcut.C:59
 CalcCorrEcut.C:60
 CalcCorrEcut.C:61
 CalcCorrEcut.C:62
 CalcCorrEcut.C:63
 CalcCorrEcut.C:64
 CalcCorrEcut.C:65
 CalcCorrEcut.C:66
 CalcCorrEcut.C:67
 CalcCorrEcut.C:68
 CalcCorrEcut.C:69
 CalcCorrEcut.C:70
 CalcCorrEcut.C:71
 CalcCorrEcut.C:72
 CalcCorrEcut.C:73
 CalcCorrEcut.C:74
 CalcCorrEcut.C:75
 CalcCorrEcut.C:76
 CalcCorrEcut.C:77
 CalcCorrEcut.C:78
 CalcCorrEcut.C:79
 CalcCorrEcut.C:80
 CalcCorrEcut.C:81
 CalcCorrEcut.C:82
 CalcCorrEcut.C:83
 CalcCorrEcut.C:84
 CalcCorrEcut.C:85
 CalcCorrEcut.C:86
 CalcCorrEcut.C:87
 CalcCorrEcut.C:88
 CalcCorrEcut.C:89
 CalcCorrEcut.C:90
 CalcCorrEcut.C:91
 CalcCorrEcut.C:92
 CalcCorrEcut.C:93
 CalcCorrEcut.C:94
 CalcCorrEcut.C:95
 CalcCorrEcut.C:96
 CalcCorrEcut.C:97
 CalcCorrEcut.C:98
 CalcCorrEcut.C:99
 CalcCorrEcut.C:100
 CalcCorrEcut.C:101
 CalcCorrEcut.C:102
 CalcCorrEcut.C:103
 CalcCorrEcut.C:104
 CalcCorrEcut.C:105
 CalcCorrEcut.C:106
 CalcCorrEcut.C:107
 CalcCorrEcut.C:108
 CalcCorrEcut.C:109
 CalcCorrEcut.C:110
 CalcCorrEcut.C:111
 CalcCorrEcut.C:112
 CalcCorrEcut.C:113
 CalcCorrEcut.C:114
 CalcCorrEcut.C:115
 CalcCorrEcut.C:116
 CalcCorrEcut.C:117
 CalcCorrEcut.C:118
 CalcCorrEcut.C:119
 CalcCorrEcut.C:120
 CalcCorrEcut.C:121
 CalcCorrEcut.C:122
 CalcCorrEcut.C:123
 CalcCorrEcut.C:124
 CalcCorrEcut.C:125
 CalcCorrEcut.C:126
 CalcCorrEcut.C:127
 CalcCorrEcut.C:128
 CalcCorrEcut.C:129
 CalcCorrEcut.C:130
 CalcCorrEcut.C:131
 CalcCorrEcut.C:132
 CalcCorrEcut.C:133
 CalcCorrEcut.C:134
 CalcCorrEcut.C:135
 CalcCorrEcut.C:136
 CalcCorrEcut.C:137
 CalcCorrEcut.C:138
 CalcCorrEcut.C:139
 CalcCorrEcut.C:140
 CalcCorrEcut.C:141
 CalcCorrEcut.C:142
 CalcCorrEcut.C:143
 CalcCorrEcut.C:144
 CalcCorrEcut.C:145
 CalcCorrEcut.C:146
 CalcCorrEcut.C:147
 CalcCorrEcut.C:148
 CalcCorrEcut.C:149
 CalcCorrEcut.C:150
 CalcCorrEcut.C:151
 CalcCorrEcut.C:152
 CalcCorrEcut.C:153
 CalcCorrEcut.C:154
 CalcCorrEcut.C:155
 CalcCorrEcut.C:156
 CalcCorrEcut.C:157
 CalcCorrEcut.C:158
 CalcCorrEcut.C:159
 CalcCorrEcut.C:160
 CalcCorrEcut.C:161
 CalcCorrEcut.C:162