# How to properly call the Histogram in a function?

Hi All

I’m trying to make a function that can take a histogram, and return a value of interest.
In a isolated case I made this code

``````void HDerivative(TString filename)
{
TFile *f1 = new TFile(filename);
TH1D* hdiff = (TH1D*)f1->Get("hdiff1");
TAxis* axis = hdiff -> GetXaxis();
double BinNum = hdiff->GetNbinsX();
double BinWidth = axis->GetBinWidth(1);
TH1D* HDyDx = new TH1D("HDyDx","",BinNum,0,(BinNum-1)*BinWidth);

int smooth_num = 5;
int a0 = 0;
int a1 = 0;
double b0 = 0;
double b1 = 0;

for (int i = 0; i < BinNum; i++)
{
for (int j = 0; j < (2*smooth_num)+1; j++)
{
a0 = a0 + hdiff->GetBinContent(i+j-smooth_num);
a1 = a1 + hdiff->GetBinContent(i+j-smooth_num+1);

}
b0 = a0 / (2*smooth_num+1);
b1 = a1 / (2*smooth_num+1);
HDyDx -> SetBinContent(i,b1-b0);
a0 = 0;
a1 = 0;
}

double    peak	= HDyDx -> GetMaximumBin();
double_t Flat	= HDyDx->FindFirstBinAbove(0,1,peak+(smooth_num*2+1),-1)*BinWidth;
cout << peak << endl;
cout << Flat << endl;
HDyDx -> Draw();
}
``````

This properly gives out the value of interest “Flat” that I’m looking for.

But now I’m trying to make it part of another piece of code, and it looks like

``````double_t HDerivative(TH1D* hist)
{
TH1D* hdiff = (TH1D*)hist->Clone();
TAxis* axis = hdiff -> GetXaxis();
// rest of the function
return Flat;
}

void macro1()
{
TH1D* hdiff1 = new TH1D("hdiff1","", 1000,0,1e6);
//fill histogram loop
double_t Flat = HDerivative(hdiff1);
}
``````

The problem I’m having is that I don’t think doing HDerivative(hdiff1) is properly importing the histogram information into the function, and as a result my return is incorrect. Anyone see where my error is?