Plottinh derivative of a histogram without error bars

Hi,

I have a histogram and I find its derivavtive and fills it in another histogram.

the histogram with the derivative has error bars, Is it possible to plot the histogram (derivative histogram) with errors?

Also how can I fit the derivative histogram with a sine function ?

The following is the macro :

void Re_Der()
{


/////////////////// Tree opening  \\\\\\\\\\\\\\\\\\\\\\\\\\\\\

TFile *file1=TFile::Open("Analysis_OS.root");
TTree *tree1=(TTree*)file1->Get("Analysis");

TH1D*h1 = new TH1D("h1","h1", 100.0,40.5,140.5);
TH1D*h2 = new TH1D("h2","h2_Derivative", 100.0,40.5,140.5); 

TCanvas *c1 = new TCanvas("c1","Without constraint",800,600);
c1->Divide(1,2);
c1->cd(1);
tree1->Draw("M_Tot>>h1");

Int_t nbins = h1->GetNbinsX();
cout<<"\n"<<"a"<<"\t"<<"a_cent"<<"\t"<<"b"<<"\t"<<"b_cent"<<"\t"<<"c"<<"\t"<<"c_cent"<<"\t"<<"d_mid"<<"\t"<<"d"<<"\n";
for(Int_t i=0;i<nbins;i++)
{

double a=h1->GetBinContent(i);
double a_cent=h1->GetBinCenter(i);

double b=h1->GetBinContent(i+1);
double b_cent=h1->GetBinCenter(i+1);

double c=h1->GetBinContent(i+2);
double c_cent=h1->GetBinCenter(i+2);


double d = (c-a)/(c_cent-a_cent);
double d_mid = (c_cent+a_cent)/2;


cout<<"\n"<<a<<"\t"<<a_cent<<"\t"<<b<<"\t"<<b_cent<<"\t"<<c<<"\t"<<c_cent<<"\t"<<d_mid<<"\t"<<d;
//printf("%d \t %g\n",i,h1->GetBinContent(i));

//h2->Fill(d);

h2->Fill(d_mid,d);

}

c1->cd(2);


h2->Draw("*");



}

Hi,
I am not an experienced user either, but the THistPainter Class Reference says, that the Option “HIST” will turn the errors off (h2->Draw(“hist *”)). You can perform the fitting either with RooFit or you can open a TBrowser and under “Tools” you can open the FitPanel in order to fit the histogram. I hope this works and helps you.
Cheers,
Emil

That works @Emil_R. Thank you.

I want to fit the derivative of the histogram using a sin function, unfortunately, it’s not predefined in FitPanel of the Root.

If it is not available in the FitPanel, you can do the following:
Click on the field that says “gauss” and scroll down, there you should find “user”. Chose this. Than type in the blank space beneath: “[0]sin([1](x-[2]))+[3]” and then click fit. This should work and fit a sin function.

1 Like

To fit the histogram just define your function have a look at TF1 on how define and use function.

For define your sine function I used this constructor

TF1 *f_sin= new TF1("sin", "[0]*sin([1]*x - [2]) + [3]", 0,10);

Remember to set reasonable starting condition using TF1::SetParameter() or TF1::SetParameters()

When you have the function just call the TH1::Fit() method

Look all the different option that you can use, below I used the range option

h2->Fit(f_sin,"R");

Best,
Dilicus

That works, its just that the resonalable values needs to be set for the parameters.

thanks @Dilicus and @Emil_R

2 Likes