Problem Fit several spectra

I am trying to make a fit of five spectra. I create a kind of array that will contain each espectrum with:

`TH1 *h_hLcPt[5]`

and then I fill them with

`h_hLcPt[0] = new TH1F("h_hLcPt[0]","1 spectrum",125, 2.15, 2.65);`

and so on for the rest 4 … Later I use a loop to access to every index, but fist as I want them in a canvas to see the five of them:

``````
TCanvas *cx=new TCanvas("cx","hLcPt1,2,3,4,5 plot",600,900);
cx->Divide(2,3);

Int_t j;
``````

Then the loop

``````    for (j=0;j<5;j++) {
cx->cd(j+1);
h_hLcPt[j]->SetLineColor(8);
h_hLcPt[j]->Draw();
``````

And plot the spectra. So, now I acces to every index in a for a nested loop. I started with the `j=0`

``````if (j==0){
par = fillArray(6);// Array for the parameters of the fit i.e  the sum of the functions
//Fit function
TF1 *fitFcn1 = new TF1("fitFcn1",fitFunction_GN_GNBkg,2.2,2.4,6);
fitFcn1->SetParameters(96700,2.29,0.006,93600,2.27,0.5);
fitFcn1->SetParNames("Norm1","Mean1","Sigma1","Norm2","Mean2", "Sigma2");
fitFcn1->SetLineColor(kRed);

h_hLcPtClones[0]->Fit("fitFcn1","R");
//As I want to see the bakgraund function (gauss normalized)
//and the signal function(gauss normalized)

TF1 *backFcn1 = new TF1("backFcn1", GausBkg1,2.22,2.4,3);
backFcn1->SetLineColor(7);//aqua
backFcn1->SetParameters(93600,2.27,0.5);

TF1 *signalFcn1 = new TF1("signalFcn1",gaussNFunction, 2.25,2.32,3);
signalFcn1->SetLineColor(1); //kBlue//6 hot pink//5 yellow

fitFcn1->GetParameters(par);

//And add it to the plot
cx->cd(1);
backFcn1->Draw("same");
signalFcn1->Draw("same");
}//Close j=0

``````

Then I run the code and the result are the backgound a flat line over the x axis and the signal is a flat line at the level of the plot. BTW, the definition of the functions used are

• Fit functions
``````Double_t gaussNFunction(Double_t *x,Double_t *par){
return ( par[0]/(TMath::Sqrt(2.*TMath::Pi())*par[2]) )*TMath::Exp(
-(x[0]-par[1])*(x[0]-par[1])/(2.*par[2]*par[2]) );
}
//The same
Double_t GausBkg1(Double_t *x, Double_t *par) {
return ( par[0]/(TMath::Sqrt(2.*TMath::Pi())*par[2]) )*TMath::Exp(
-(x[0]-par[1])*(x[0]-par[1])/(2.*par[2]*par[2]) );
}
//Fit
Double_t fitFunction_GN_GNBkg(Double_t *x, Double_t *par) {
return gaussNFunction(x,par) - GausBkg1(x,&par[3])  ;
}
``````

And the parameters

``````Double_t * fillArray(Int_t n) {
// create a double array of length n, fill it with random numbers return a pointer to it
Double_t *x = new Double_t[n];
//TRandom generator(0);
for(Int_t i=0; i<n; i++) x[i] = 0;/*generator.Rndm();*/
return x;
}

Double_t *par;// with *
``````

I even used the fit panel to get the initial parameters for the fit. But does not work.

Can you explain how exactly your macro doesn’t work? If you could attach a complete reproducer, that would also help.

I have seen the problem I had. Sorry for the inconveniences and thanks for interest.

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.