ln(L) is the full range is not equal ln(Lr1) +ln(L(s)+ln(Lr2)

Dear experts,

I do inbinned fit in the dimuon mass range of 12-70 GeV and would like to
get ln(L) in sidebands 12-25, 30-70 GeV and in the signal region 25-30 GeV
and ln(L) in the whole range. I expect that sum of ln in sidebands and signal region = ln(L) in the whole region. It is not happen. I do:


  RooFitResult* r = model.fitTo(data,Range(12.,70.),Save());
   std::unique_ptr<RooAbsReal> nll1270{model.createNLL(data, Range("R1,signalrange,R2"))}; 
  std::unique_ptr<RooAbsReal> nllsideband{model.createNLL(data, Range("R1,R2"))};
  std::unique_ptr<RooAbsReal> nllsignal{model.createNLL(data, Range("signalrange"))};

and the print

 cout << "-log(L) = " << r->minNll() << endl;
  cout << "-log(L) R1,signalrange,R2 = " << nll1270->getVal() << endl;
  cout << "-log(L) in R1,R2 = " << nllsideband->getVal() << std::endl;
  cout << "-log(L) in signalrange = " << nllsignal->getVal() << std::endl;

I got out:

-log(L) = -4828.44
-log(L) R1,signalrange,R2 = -4823.46
-log(L) in R1,R2 = -4021.51
-log(L) in signalrange = -801.951

first, I expected that first and second numbers should be the same - they are not. Second, I expected that sum of last two numers = first number. It is not the case.

Can you explain, please.

Thanks, Sasha.

Hi Sasha,

Adding @jonas in the loop who may be able to help out.


Hi @anikiten!

Two questions first:

Which ROOT version are you using? I think this was a problem a few versions ago but I fixed it in the meantime. See the release notes for ROOT 6.26. However, since you are apparently using a very old CMSSW release, you don’t benefit from the fix :frowning: I know there is some effort to make combine work with ROOT 6.26, can you maybe do that?

Are you fitting a RooDataSet or a RooDataHist?


Hi Jonas,

I use

ROOT 6.18/04

and I use RooDataSet (inbinned fit)

Thanks, Sasha.

Thanks! That’s what I expected (see more detail in my previous post).

In that case, you should move to a newer ROOT version, because until ROOT 6.26, non-extended multi-range fits didn’t do what the users expected. They didn’t take the relative normalization of events in the ranges into account, which is actually valuable information that can constrain the parameters quite a bit.

I would refrain from doing the fit like this. Your best options are to do an extended fit (or is your fit extended already?), or using ROOT 6.26 or newer. If you go for the extended fit, here is a tutorial (you should not look at the newer version of the tutorial since ROOT 6.26, since this one doesn’t explain the problem anymore because it’s gone):


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