%%cpp -d #include #include #include #include #include using namespace RooFit; RooRealVar x("x", "The observable", 1, 30); RooRealVar tau("tau", "The exponent", -0.1337, -10., -0.1); RooExponential expo("expo", "A falling exponential function", x, tau); x.setRange("full", 1, 30); x.setRange("left", 1, 10); x.setRange("right", 20, 30); std::unique_ptr data{expo.generate(x, 1000)}; std::unique_ptr blindedData{data->reduce(CutRange("left,right"))}; tau.setVal(-2.); expo.fitTo(*blindedData, Range("left,right"), PrintLevel(-1)); expo.removeStringAttribute("fitrange"); TCanvas *canvas=new TCanvas("canvas","canvas",800,600); canvas->Divide(2,1); std::cout << "Now plotting with unique normalisation for each slice." << std::endl; canvas->cd(1); RooPlot* plotFrame = x.frame(RooFit::Title("Wrong: Each slice normalised over its plotting range")); blindedData->plotOn(plotFrame); expo.plotOn(plotFrame, LineColor(kRed), Range("full")); expo.plotOn(plotFrame, LineColor(kBlue), Range("left")); expo.plotOn(plotFrame, LineColor(kGreen), Range("right")); plotFrame->Draw(); std::cout << "\n\nNow plotting with correct norm ranges:" << std::endl; canvas->cd(2); RooPlot* plotFrameWithNormRange = x.frame(RooFit::Title("Right: All slices have common normalisation")); blindedData->plotOn(plotFrameWithNormRange); expo.plotOn(plotFrameWithNormRange, LineColor(kBlue), Range("left"), RooFit::NormRange("left,right")); expo.plotOn(plotFrameWithNormRange, LineColor(kGreen), Range("right"), RooFit::NormRange("left,right")); expo.plotOn(plotFrameWithNormRange, LineColor(kRed), Range("full"), RooFit::NormRange("left,right"), LineStyle(10)); plotFrameWithNormRange->Draw(); canvas->Draw(); %jsroot on gROOT->GetListOfCanvases()->Draw()