This tutorial macro shows a typical search for a new particle by studying an invariant mass distribution. The macro creates a simple signal model and two background models, which are added to a RooWorkspace. The macro creates a toy dataset, and then uses a RooStats ProfileLikleihoodCalculator to do a hypothesis test of the background-only and signal+background hypotheses. In this example, shape uncertainties are not taken into account, but normalization uncertainties are.
Processing /builddir/build/BUILD/root-6.10.00/tutorials/roostats/rs102_hypotestwithshapes.C...
[1mRooFit v3.60 -- Developed by Wouter Verkerke and David Kirkby[0m
Copyright (C) 2000-2013 NIKHEF, University of California & Stanford University
All rights reserved, please
read http:
[#1] INFO:ObjectHandling -- RooWorkspace::import(myWS) importing RooGaussian::sigModel
[#1] INFO:ObjectHandling -- RooWorkspace::import(myWS) importing RooRealVar::mH
[#1] INFO:ObjectHandling -- RooWorkspace::import(myWS) importing RooProduct::fsig
[#1] INFO:ObjectHandling -- RooWorkspace::import(myWS) importing RooRealVar::ratioSigEff
[#1] INFO:ObjectHandling -- RooWorkspace::import(myWS) importing RooGaussian::zjjModel
[#1] INFO:ObjectHandling -- RooWorkspace::import(myWS) importing RooRealVar::sigma1_z
[#1] INFO:ObjectHandling -- RooWorkspace::import(myWS) importing RooChebychev::qcdModel
[#1] INFO:ObjectHandling -- RooWorkspace::import(myWS) importing RooRealVar::a1
[#1] INFO:ObjectHandling -- RooWorkspace::import(myWS) importing dataset modelData
[#1]
INFO:
ObjectHandling -- RooWorkSpace::import(myWS) changing name of dataset from modelData to data
[#0] PROGRESS:Minization -- ProfileLikelihoodCalcultor::DoGLobalFit - find MLE
[#0]
PROGRESS:Minization -- ProfileLikelihoodCalcultor::DoMinimizeNLL -
using Minuit / Migrad with
strategy 1
[#1]
INFO:Minization -- The following expressions have been identified
as constant and will be precalculated and cached: (sigModel,zjjModel,qcdModel)
RooFitResult: minimized FCN value: 717.039, estimated distance to minimum: 8.90226e-10
covariance matrix quality: Full, accurate covariance matrix
Status : MINIMIZE=0
Floating Parameter FinalValue +/- Error
-------------------- --------------------------
fzjj 3.1152e-01 +/- 5.03e-02
mu 1.0968e+00 +/- 3.03e-01
[#0]
PROGRESS:Minization -- ProfileLikelihoodCalcultor::GetHypoTest -
do conditional fit
[#0]
PROGRESS:Minization -- ProfileLikelihoodCalcultor::DoMinimizeNLL -
using Minuit / Migrad with
strategy 1
RooFitResult: minimized FCN value: 723.97, estimated distance to minimum: 2.09863e-09
covariance matrix quality: Full, accurate covariance matrix
Status : MINIMIZE=0
Floating Parameter FinalValue +/- Error
-------------------- --------------------------
fzjj 2.6213e-01 +/- 5.18e-02
-------------------------------------------------
The p-value
for the
null is 9.83108e-05
Corresponding to a significance of 3.72332
-------------------------------------------------
[#1]
INFO:Minization -- The following expressions have been identified
as constant and will be precalculated and cached: (sigModel,zjjModel,qcdModel)
[#1] INFO:Plotting -- RooAbsPdf::plotOn(model) indirectly selected PDF components: ()
[#1] INFO:Plotting -- RooAbsPdf::plotOn(model) indirectly selected PDF components: ()
[#1] INFO:Plotting -- RooAbsPdf::plotOn(model) indirectly selected PDF components: ()
[#1]
INFO:Minization -- The following expressions have been identified
as constant and will be precalculated and cached: (sigModel,zjjModel,qcdModel)
#include <string>
using namespace RooFit;
using namespace RooStats;
void rs102_hypotestwithshapes() {
AddModel(wspace);
AddData(wspace);
DoHypothesisTest(wspace);
MakePlots(wspace);
delete wspace;
}
Double_t lowRange = 60, highRange = 200;
RooRealVar invMass(
"invMass",
"M_{inv}", lowRange, highRange,
"GeV");
RooRealVar sigma1(
"sigma1",
"Width of Gaussian",12.,2,100) ;
RooGaussian sigModel(
"sigModel",
"Signal Model", invMass, mH, sigma1);
mH.setConstant();
sigma1.setConstant();
RooRealVar sigma1_z(
"sigma1_z",
"Width of Gaussian",10.,6,100) ;
RooGaussian zjjModel(
"zjjModel",
"Z+jets Model", invMass, mZ, sigma1_z);
mZ.setConstant();
sigma1_z.setConstant();
a0.setConstant();
a1.setConstant();
a2.setConstant();
RooRealVar fzjj(
"fzjj",
"fraction of zjj background events",.4,0.,1) ;
RooRealVar fsigExpected(
"fsigExpected",
"expected fraction of signal events",.2,0.,1) ;
fsigExpected.setConstant();
RooRealVar mu(
"mu",
"signal strength in units of SM expectation",1,0.,2) ;
RooRealVar ratioSigEff(
"ratioSigEff",
"ratio of signal efficiency to nominal signal efficiency",1. ,0.,2) ;
}
}
cout << "-------------------------------------------------" << endl;
cout <<
"The p-value for the null is " << htr->
NullPValue() << endl;
cout <<
"Corresponding to a significance of " << htr->
Significance() << endl;
cout << "-------------------------------------------------\n\n" << endl;
}
frame->
SetTitle(
"An example fit to the signal + background model");
xframe2->
SetTitle(
"An example fit to the background-only model");
}