Special pdf's: unbinned maximum likelihood fit of an efficiency eff(x) function to a dataset D(x,cut), cut is a category encoding a selection, which the efficiency as function of x should be described by eff(x) 
  
import ROOT
 
 
 
 
 
 
 
 
 
model = 
ROOT.RooProdPdf(
"model", 
"model", {shapePdf}, Conditional=({effPdf}, {cut}))
 
 
 
 
effPdf.fitTo(data, ConditionalObservables={x}, PrintLevel=-1)
 
 
 
frame1 = 
x.frame(Bins=20, Title=
"Data (all, accepted)")
 
data.plotOn(frame1, Cut=
"cut==cut::accept", MarkerColor=
"r", LineColor=
"r")
 
 
frame2 = 
x.frame(Bins=20, Title=
"Fitted efficiency")
 
 
ca = 
ROOT.TCanvas(
"rf701_efficiency", 
"rf701_efficiency", 800, 400)
 
 
ROOT::Detail::TRangeCast< T, true > TRangeDynCast
TRangeDynCast is an adapter class that allows the typed iteration through a TCollection.
 
  [#1] INFO:Fitting -- RooAbsPdf::fitTo(effPdf_over_effPdf_Int[cut]) fixing normalization set for coefficient determination to observables in data
[#1] INFO:Fitting -- using generic CPU library compiled with no vectorizations
[#1] INFO:Fitting -- Creation of NLL object took 942.822 μs
[#1] INFO:Fitting -- RooAddition::defaultErrorLevel(nll_effPdf_over_effPdf_Int[cut]_modelData) Summation contains a RooNLLVar, using its error level
[#1] INFO:Minimization -- RooAbsMinimizerFcn::setOptimizeConst: activating const optimization
[#1] INFO:Minimization -- [fitFCN] No discrete parameters, performing continuous minimization only
[#1] INFO:Minimization -- RooAbsMinimizerFcn::setOptimizeConst: deactivating const optimization
[#1] INFO:Plotting -- RooTreeData::plotOn: plotting 8176 events out of 10000 total events
- Date
 - February 2018 
 
- Authors
 - Clemens Lange, Wouter Verkerke (C++ version) 
 
Definition in file rf701_efficiencyfit.py.