ProfileLikelihoodCalculator: Cannot compute CLs because CLb = 0

Hello,
I’m using a ProfileLikelihoodCalculator to calculate the significance and I have the following problem: my model is a gaussian signal over a smooth background. The gaussian width depends on the peak of the gaussian (It’s a standard dimuon mass resolution) so the first attempt was simple and it workded.

The code is the following:

  Double_t p0width =    -0.747946; //   +/-   0.356657
  Double_t p1width =    0.0128591; //   +/-   0.00100475
  Double_t p2width =  3.13343e-05; //   +/-   4.94856e-07
  TF1 *widthExp = new TF1("widthExp","[0]+[1]*x+[2]*x^2",40,2060);

  RooRealVar mean("mean", "mean of gaussians", 150,2000);
  RooRealVar sigma("sigma", "width of gaussians", 1e-1, 200);
  RooGaussian signal("signal", "Signal component", x, mean, sigma);

  for(int index=0;index<maxIndex;index++){

    double mFixed = 150 + index*stepMass;
    mean.setVal(mFixed);
    mean.setConstant(kTRUE);
    sigma.setVal(widthExp->Eval(mFixed));
    sigma.setConstant(kTRUE);
   ---> HERE is the Model and the ProfileLikelihoodCalculator
  }

I loop on several mass points, calculate the gaussian width using the above formula and fixing the peak of the gaussian and its width, everything works well and I don’t see any problem.

The following steps was to introduce directly the mass resolution in the gaussian function to study the systematics. I tried first to write directly the PDF like this:

  RooGenericPdf signal("signal", "signal","r_norm * exp(-0.5* pow( (dimuomass-mean)/(r_p0width+r_p1width*dimuomass+r_p2width*pow(dimuomass,2)) , 2 ) )",RooArgList(dimuomass,mean,r_norm,r_p0width,r_p1width,r_p2width));

where r_p0width, r_p1width and r_p2width are RooRealVar fixed at the parameters used in the widthExp function. Using this approach I have several mass points where I get something like this:

  RooFitResult: minimized FCN value: 8367.27, estimated distance to minimum: 1.87076e-10
                covariance matrix quality: Full, accurate covariance matrix
                Status : MINIMIZE=0

    Floating Parameter    FinalValue +/-  Error
  --------------------  --------------------------
               mu1_Muo    8.9794e-02 +/-  6.23e-03


Results ProfileLRHypoTestResult_:
 - Null p-value = 0
 - Significance = inf
 - CL_b: 0
 - CL_s+b: 0
 - CL_s: Error: Cannot compute CLs because CLb = 0. Returning CLs = -1

Then I tried using RooFormulaVar like this:

  RooFormulaVar sigmaVar ("sigmaVar","sigmaVar","-0.747946 + 0.0128591*@0 + 3.13343e-05*@0*@0",RooArgList(dimuomass));
  RooGaussian signal("signal","signal",dimuomass,mean,sigmaVar);

but the result is the same.

The question is simple: which is the correct procedure to introduce in the signal PDF the resolution function?

Thanks for helping

Attilio

Sorry… my bad. Always take a break when simple things don’t work. The RooFormulaVar has to be a function of mean, not dimuomass!!! Changing to

  RooFormulaVar sigmaVar ("sigmaVar","sigmaVar","-0.747946 + 0.0128591*@0 + 3.13343e-05*@0*@0",RooArgList(mean));type or paste code here

everything works.

Attilio

1 Like

Hi Attilio,

Thanks for sharing the solution: hopefully this will be useful to our ROOT users!

Cheers,
Danilo

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