# Fitting problems when assining parameters to different bins

Hi

I’m using my own functions(tf1) to fit my data. I do this for a mass distribution divide in bins. My distribution array looks as follows: massDistBin[ptbin][etabin][cut][whichcut]… the dimensions are [8][5][2][2]…the filling of these distributions with my mass data works, but when I try to fit my functions to it via a loop going of the bins (pt and eta) and the cuts(cut of uncut, id or iso) I get some problems… I try to adjust the parameters of some specific bins via if statements, but when I adjust the parameters for some of these I also see adjustments to other bins combinations … can someone explain how this is possible? a part of my code can be found at the end (as example it try to adjust the parameters for the uncut distribution in the case of ID). I already divided the code into different parts for uncut and cut and id and iso in the hope that this would solve my problem but it doesn’t.

``````for(int ptbins=0; ptbins<NumberOfptbins;ptbins++){
for(int etabins=0;etabins<NumberOfetabins;etabins++){
function.SetParameters(1200,-100,0.02,200000000,91,1,88,5);
if(ptbins == 7 and etabins == 2){
function.SetParameters(120,-100,0.02,2000000000,91,3,90,7);
cout << PT[ptbins] << ETA[etabins] << "\n";
}else{
if( ptbins == 7 and etabins == 0){
function.SetParameters(1200,-100,-0.02,200000000,91,1,88,5);
cout << PT[ptbins] << ETA[etabins] << "\n";
}else{
if( ptbins == 6 and etabins == 2){
function.SetParameters(1200,-100,-0.02,200000000,91,1,88,5);
cout << PT[ptbins] << ETA[etabins] << "\n";
}else{
if( ptbins == 0 and etabins == 4){
function.SetParameters(60,-10,0.04,-1200000,116,-2,84,7);
cout << PT[ptbins] << ETA[etabins] << "\n";
}else{
if( ptbins == 2 and etabins == 4){
function.SetParameters(1200,-100,0.02,200000000,91,1,88,5);
cout << PT[ptbins] << ETA[etabins] << "\n";
}else{
if( ptbins == 7 and etabins == 4){
function.SetParameters(1200,-100,0.02,2000000000,91,1,88,5);
cout << PT[ptbins] << ETA[etabins] << "\n";
}else{
if( ptbins == 7 and etabins == 3){
function.SetParameters(1200,-100,0.02,2000000000,91,1,88,5);
cout << PT[ptbins] << ETA[etabins] << "\n";
}else{
function.SetParameters(1200,-100,0.02,200000000,91,1,88,5);
}
}
}
}
}
}
}
function.SetParNames("b", "c", "d", "a", "Mean","Gamma","Mean Gauss", "Sigma");
massDistBins[ptbins][etabins][Uncut][ID]->Fit(&function,"S");
massDistBins[ptbins][etabins][Uncut][ID]->Fit(&function,"S");
for(int par=0;par<nFitPar;par++){
massDistFit_Total[ptbins][etabins][Uncut][ID]->SetParameter(par, function.GetParameter(par));
if(par<3) massDistFit_Background[ptbins][etabins][Uncut][ID]->SetParameter(par,function.GetParameter(par));
else massDistFit_Signal[ptbins][etabins][Uncut][ID]->SetParameter(par-3,function.GetParameter(par));
}
}
}
``````

Kind regards

Wouter

“and” should be replaced with “&&” (well, at least for CINT).

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