I posted about an issue with integral in a subrange with Barlo-Beeston [1] and recently saw on root github that a fix [2] was made. Thanks for this.
However, I find that there’s still a bug with the getPropagatedError() method with the object returned by createIntegral(). The output that I get with the test code shared in [1] is this:
**Code snippet:**
x.setRange(“window”,-20,20);
RooAbsReal * integral_sig1 = p_ph_sig1.createIntegral(RooArgSet(x), RooArgSet(x), “window”);
Double_t Asig1val = Asig1.getVal();
Double_t Asig1val_err = Asig1.getError();
Double_t integval_sig = integral_sig1->getVal();
Double_t dintegval_sig = integral_sig1->getPropagatedError(*result1, RooArgSet(x));
cout << "Asig1 : " << Asig1val << " +/- " << Asig1val_err << endl;
cout << "Signal Integral in window: " << integval_sig << " +/- " << dintegval_sig << endl;
x.setRange(“window1”,-5,0);
RooAbsReal * integral_sig2 = p_ph_sig1.createIntegral(RooArgSet(x), RooArgSet(x), “window1”);
integval_sig = integral_sig2->getVal();
dintegval_sig = integral_sig2->getPropagatedError(*result1, RooArgSet(x));
cout << "Signal Integral in window1: " << integval_sig << " +/- " << dintegval_sig << endl;
**Output**
[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'window' created with bounds [-20,20]
Asig1 : 0.850507 +/- 0.235778
Signal Integral in window: 80.026 +/- 11.3836
[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'window1' created with bounds [-5,0]
Signal Integral in window1: 29.4324 +/- 11.3836
The integral error doesn’t change after altering the range.
Seems there is still a bug. Would you be able to take a look?
[1] CreateIntegral giving wrong results
[2] [RF] Consider rangeName for integration in RooParamHistFunc · root-project/root@c250ee4 · GitHub