A class to calculate "sWeights" used to create an "sPlot".
An sPlot can reweight a dataset to show different components (e.g. signal / background), but it doesn't use cuts, and therefore doesn't have to sort events into signal/background (or other) categories. Instead of assigning a category to each event in the dataset, all events are weighted. To compute the weights, a PDF with different components is analysed, and the weights are added to the dataset. When plotting the dataset with the weights of the signal or background components, the data looks like "signal", but all events in the dataset are used.
The result is similar to a likelihood projection plot, but without cuts.
The code is based on `‘SPlot: A statistical tool to unfold data distributions,’' Nucl. Instrum. Meth. A 555, 356 (2005) [arXiv:physics/0402083].
To use this class, you first must have a pdf that includes yield parameters for (possibly several) different species, for example a signal and background yield. Those yields must be of type RooRealVar / RooLinearVar (or anything that derives from RooAbsRealLValue). This is necessary because RooStats needs to be able to set the yields to 0 and 1 to probe the PDF. After constructing the s weights, the yields will be restored to their original values.
To create an instance of the SPlot, supply a data set, the pdf to analyse, and a list which parameters of the pdf are yields. The SPlot will calculate SWeights, and include these as columns in the RooDataSet. The dataset will have two additional columns for every yield with name "`<varname>`":
L_<varname>
is the likelihood for each event, i.e., the pdf evaluated for the given value of the variable "varname".<varname>_sw
is the value of the sWeight for the variable "varname" for each event.In SPlot::SPlot(), one can choose whether columns should be added to an existing dataset or whether a copy of the dataset should be created.
After computing the s weights, create a new dataset that uses the s weights of the variable of interest for weighting. If the yield parameter for signal was e.g. "signalYield", the dataset can be constructed as follows:
A complete tutorial with an extensive model is rs301_splot.C
As mentioned, RooStats needs to be able to modify the yield parameters. That means that they have to be a RooRealVar of a RooLinearVar. This allows using ratio parameters as in the following example:
The constructor of RooStats::SPlot takes RooCmdArg as arguments also support keyword arguments. This also applies to SPlot::AddSWeights. For example, the following code is equivalent in PyROOT:
Public Member Functions | |
SPlot () | |
Default constructor. | |
SPlot (const char *name, const char *title) | |
SPlot (const char *name, const char *title, const RooDataSet &data) | |
Constructor from a RooDataSet No sWeighted variables are present. | |
SPlot (const char *name, const char *title, RooDataSet &data, RooAbsPdf *pdf, const RooArgList &yieldsList, const RooArgSet &projDeps=RooArgSet(), bool useWeights=true, bool copyDataSet=false, const char *newName="", const RooCmdArg &fitToarg5={}, const RooCmdArg &fitToarg6={}, const RooCmdArg &fitToarg7={}, const RooCmdArg &fitToarg8={}) | |
Construct a new SPlot instance, calculate sWeights, and include them in the RooDataSet held by this instance. | |
SPlot (const SPlot &other) | |
Copy Constructor from another SPlot. | |
~SPlot () override | |
void | AddSWeight (RooAbsPdf *pdf, const RooArgList &yieldsTmp, const RooArgSet &projDeps=RooArgSet(), bool includeWeights=true, const RooCmdArg &fitToarg5={}, const RooCmdArg &fitToarg6={}, const RooCmdArg &fitToarg7={}, const RooCmdArg &fitToarg8={}) |
Method which adds the sWeights to the dataset. | |
Int_t | GetNumSWeightVars () const |
Return the number of SWeights In other words, return the number of species that we are trying to extract. | |
RooDataSet * | GetSDataSet () const |
Retrieve s-weighted data. | |
double | GetSumOfEventSWeight (Int_t numEvent) const |
Sum the SWeights for a particular event. | |
double | GetSWeight (Int_t numEvent, const char *sVariable) const |
Retrieve an s weight. | |
RooArgList | GetSWeightVars () const |
Return a RooArgList containing all parameters that have s weights. | |
double | GetYieldFromSWeight (const char *sVariable) const |
Sum the SWeights for a particular species over all events. | |
TClass * | IsA () const override |
RooDataSet * | SetSData (RooDataSet *data) |
Set dataset (if not passed in constructor). | |
void | Streamer (TBuffer &) override |
Stream an object of class TObject. | |
void | StreamerNVirtual (TBuffer &ClassDef_StreamerNVirtual_b) |
Public Member Functions inherited from TNamed | |
TNamed () | |
TNamed (const char *name, const char *title) | |
TNamed (const TNamed &named) | |
TNamed copy ctor. | |
TNamed (const TString &name, const TString &title) | |
virtual | ~TNamed () |
TNamed destructor. | |
void | Clear (Option_t *option="") override |
Set name and title to empty strings (""). | |
TObject * | Clone (const char *newname="") const override |
Make a clone of an object using the Streamer facility. | |
Int_t | Compare (const TObject *obj) const override |
Compare two TNamed objects. | |
void | Copy (TObject &named) const override |
Copy this to obj. | |
virtual void | FillBuffer (char *&buffer) |
Encode TNamed into output buffer. | |
const char * | GetName () const override |
Returns name of object. | |
const char * | GetTitle () const override |
Returns title of object. | |
ULong_t | Hash () const override |
Return hash value for this object. | |
TClass * | IsA () const override |
Bool_t | IsSortable () const override |
void | ls (Option_t *option="") const override |
List TNamed name and title. | |
TNamed & | operator= (const TNamed &rhs) |
TNamed assignment operator. | |
void | Print (Option_t *option="") const override |
Print TNamed name and title. | |
virtual void | SetName (const char *name) |
Set the name of the TNamed. | |
virtual void | SetNameTitle (const char *name, const char *title) |
Set all the TNamed parameters (name and title). | |
virtual void | SetTitle (const char *title="") |
Set the title of the TNamed. | |
virtual Int_t | Sizeof () const |
Return size of the TNamed part of the TObject. | |
void | Streamer (TBuffer &) override |
Stream an object of class TObject. | |
void | StreamerNVirtual (TBuffer &ClassDef_StreamerNVirtual_b) |
Public Member Functions inherited from TObject | |
TObject () | |
TObject constructor. | |
TObject (const TObject &object) | |
TObject copy ctor. | |
virtual | ~TObject () |
TObject destructor. | |
void | AbstractMethod (const char *method) const |
Use this method to implement an "abstract" method that you don't want to leave purely abstract. | |
virtual void | AppendPad (Option_t *option="") |
Append graphics object to current pad. | |
virtual void | Browse (TBrowser *b) |
Browse object. May be overridden for another default action. | |
ULong_t | CheckedHash () |
Check and record whether this class has a consistent Hash/RecursiveRemove setup (*) and then return the regular Hash value for this object. | |
virtual const char * | ClassName () const |
Returns name of class to which the object belongs. | |
virtual void | Delete (Option_t *option="") |
Delete this object. | |
virtual Int_t | DistancetoPrimitive (Int_t px, Int_t py) |
Computes distance from point (px,py) to the object. | |
virtual void | Draw (Option_t *option="") |
Default Draw method for all objects. | |
virtual void | DrawClass () const |
Draw class inheritance tree of the class to which this object belongs. | |
virtual TObject * | DrawClone (Option_t *option="") const |
Draw a clone of this object in the current selected pad with: gROOT->SetSelectedPad(c1) . | |
virtual void | Dump () const |
Dump contents of object on stdout. | |
virtual void | Error (const char *method, const char *msgfmt,...) const |
Issue error message. | |
virtual void | Execute (const char *method, const char *params, Int_t *error=nullptr) |
Execute method on this object with the given parameter string, e.g. | |
virtual void | Execute (TMethod *method, TObjArray *params, Int_t *error=nullptr) |
Execute method on this object with parameters stored in the TObjArray. | |
virtual void | ExecuteEvent (Int_t event, Int_t px, Int_t py) |
Execute action corresponding to an event at (px,py). | |
virtual void | Fatal (const char *method, const char *msgfmt,...) const |
Issue fatal error message. | |
virtual TObject * | FindObject (const char *name) const |
Must be redefined in derived classes. | |
virtual TObject * | FindObject (const TObject *obj) const |
Must be redefined in derived classes. | |
virtual Option_t * | GetDrawOption () const |
Get option used by the graphics system to draw this object. | |
virtual const char * | GetIconName () const |
Returns mime type name of object. | |
virtual char * | GetObjectInfo (Int_t px, Int_t py) const |
Returns string containing info about the object at position (px,py). | |
virtual Option_t * | GetOption () const |
virtual UInt_t | GetUniqueID () const |
Return the unique object id. | |
virtual Bool_t | HandleTimer (TTimer *timer) |
Execute action in response of a timer timing out. | |
Bool_t | HasInconsistentHash () const |
Return true is the type of this object is known to have an inconsistent setup for Hash and RecursiveRemove (i.e. | |
virtual void | Info (const char *method, const char *msgfmt,...) const |
Issue info message. | |
virtual Bool_t | InheritsFrom (const char *classname) const |
Returns kTRUE if object inherits from class "classname". | |
virtual Bool_t | InheritsFrom (const TClass *cl) const |
Returns kTRUE if object inherits from TClass cl. | |
virtual void | Inspect () const |
Dump contents of this object in a graphics canvas. | |
void | InvertBit (UInt_t f) |
Bool_t | IsDestructed () const |
IsDestructed. | |
virtual Bool_t | IsEqual (const TObject *obj) const |
Default equal comparison (objects are equal if they have the same address in memory). | |
virtual Bool_t | IsFolder () const |
Returns kTRUE in case object contains browsable objects (like containers or lists of other objects). | |
R__ALWAYS_INLINE Bool_t | IsOnHeap () const |
R__ALWAYS_INLINE Bool_t | IsZombie () const |
void | MayNotUse (const char *method) const |
Use this method to signal that a method (defined in a base class) may not be called in a derived class (in principle against good design since a child class should not provide less functionality than its parent, however, sometimes it is necessary). | |
virtual Bool_t | Notify () |
This method must be overridden to handle object notification (the base implementation is no-op). | |
void | Obsolete (const char *method, const char *asOfVers, const char *removedFromVers) const |
Use this method to declare a method obsolete. | |
void | operator delete (void *ptr) |
Operator delete. | |
void | operator delete (void *ptr, void *vp) |
Only called by placement new when throwing an exception. | |
void | operator delete[] (void *ptr) |
Operator delete []. | |
void | operator delete[] (void *ptr, void *vp) |
Only called by placement new[] when throwing an exception. | |
void * | operator new (size_t sz) |
void * | operator new (size_t sz, void *vp) |
void * | operator new[] (size_t sz) |
void * | operator new[] (size_t sz, void *vp) |
TObject & | operator= (const TObject &rhs) |
TObject assignment operator. | |
virtual void | Paint (Option_t *option="") |
This method must be overridden if a class wants to paint itself. | |
virtual void | Pop () |
Pop on object drawn in a pad to the top of the display list. | |
virtual Int_t | Read (const char *name) |
Read contents of object with specified name from the current directory. | |
virtual void | RecursiveRemove (TObject *obj) |
Recursively remove this object from a list. | |
void | ResetBit (UInt_t f) |
virtual void | SaveAs (const char *filename="", Option_t *option="") const |
Save this object in the file specified by filename. | |
virtual void | SavePrimitive (std::ostream &out, Option_t *option="") |
Save a primitive as a C++ statement(s) on output stream "out". | |
void | SetBit (UInt_t f) |
void | SetBit (UInt_t f, Bool_t set) |
Set or unset the user status bits as specified in f. | |
virtual void | SetDrawOption (Option_t *option="") |
Set drawing option for object. | |
virtual void | SetUniqueID (UInt_t uid) |
Set the unique object id. | |
void | StreamerNVirtual (TBuffer &ClassDef_StreamerNVirtual_b) |
virtual void | SysError (const char *method, const char *msgfmt,...) const |
Issue system error message. | |
R__ALWAYS_INLINE Bool_t | TestBit (UInt_t f) const |
Int_t | TestBits (UInt_t f) const |
virtual void | UseCurrentStyle () |
Set current style settings in this object This function is called when either TCanvas::UseCurrentStyle or TROOT::ForceStyle have been invoked. | |
virtual void | Warning (const char *method, const char *msgfmt,...) const |
Issue warning message. | |
virtual Int_t | Write (const char *name=nullptr, Int_t option=0, Int_t bufsize=0) |
Write this object to the current directory. | |
virtual Int_t | Write (const char *name=nullptr, Int_t option=0, Int_t bufsize=0) const |
Write this object to the current directory. | |
Static Public Member Functions | |
static TClass * | Class () |
static const char * | Class_Name () |
static constexpr Version_t | Class_Version () |
static const char * | DeclFileName () |
Static Public Member Functions inherited from TNamed | |
static TClass * | Class () |
static const char * | Class_Name () |
static constexpr Version_t | Class_Version () |
static const char * | DeclFileName () |
Static Public Member Functions inherited from TObject | |
static TClass * | Class () |
static const char * | Class_Name () |
static constexpr Version_t | Class_Version () |
static const char * | DeclFileName () |
static Longptr_t | GetDtorOnly () |
Return destructor only flag. | |
static Bool_t | GetObjectStat () |
Get status of object stat flag. | |
static void | SetDtorOnly (void *obj) |
Set destructor only flag. | |
static void | SetObjectStat (Bool_t stat) |
Turn on/off tracking of objects in the TObjectTable. | |
Protected Types | |
enum | { kOwnData = (1ULL << ( 20 )) } |
Protected Types inherited from TObject | |
enum | { kOnlyPrepStep = (1ULL << ( 3 )) } |
Protected Attributes | |
RooDataSet * | fSData = nullptr |
RooArgList | fSWeightVars |
Protected Attributes inherited from TNamed | |
TString | fName |
TString | fTitle |
Additional Inherited Members | |
Public Types inherited from TObject | |
enum | { kIsOnHeap = 0x01000000 , kNotDeleted = 0x02000000 , kZombie = 0x04000000 , kInconsistent = 0x08000000 , kBitMask = 0x00ffffff } |
enum | { kSingleKey = (1ULL << ( 0 )) , kOverwrite = (1ULL << ( 1 )) , kWriteDelete = (1ULL << ( 2 )) } |
enum | EDeprecatedStatusBits { kObjInCanvas = (1ULL << ( 3 )) } |
enum | EStatusBits { kCanDelete = (1ULL << ( 0 )) , kMustCleanup = (1ULL << ( 3 )) , kIsReferenced = (1ULL << ( 4 )) , kHasUUID = (1ULL << ( 5 )) , kCannotPick = (1ULL << ( 6 )) , kNoContextMenu = (1ULL << ( 8 )) , kInvalidObject = (1ULL << ( 13 )) } |
Protected Member Functions inherited from TObject | |
virtual void | DoError (int level, const char *location, const char *fmt, va_list va) const |
Interface to ErrorHandler (protected). | |
void | MakeZombie () |
#include <RooStats/SPlot.h>
SPlot::SPlot | ( | const SPlot & | other | ) |
SPlot::SPlot | ( | const char * | name, |
const char * | title, | ||
const RooDataSet & | data | ||
) |
Constructor from a RooDataSet No sWeighted variables are present.
SPlot::SPlot | ( | const char * | name, |
const char * | title, | ||
RooDataSet & | data, | ||
RooAbsPdf * | pdf, | ||
const RooArgList & | yieldsList, | ||
const RooArgSet & | projDeps = RooArgSet() , |
||
bool | useWeights = true , |
||
bool | cloneData = false , |
||
const char * | newName = "" , |
||
const RooCmdArg & | arg5 = {} , |
||
const RooCmdArg & | arg6 = {} , |
||
const RooCmdArg & | arg7 = {} , |
||
const RooCmdArg & | arg8 = {} |
||
) |
Construct a new SPlot instance, calculate sWeights, and include them in the RooDataSet held by this instance.
The constructor automatically calls AddSWeight() to add s weights to the dataset. These can be retrieved later using GetSWeight() or GetSDataSet().
[in] | name | Name of the instance. |
[in] | title | Title of the instance. |
[in] | data | Dataset to fit to. |
[in] | PDF to compute s weights for. | |
[in] | yieldsList | List of parameters in pdf that are yields. These must be RooRealVar or RooLinearVar, since RooStats will need to modify their values. |
[in] | projDeps | Don't normalise over these parameters when calculating the sWeights. Will be passed on to AddSWeight(). |
[in] | useWeights | Include weights of the input data in calculation of s weights. |
[in] | cloneData | Make a clone of the incoming data before adding weights. |
[in] | newName | New name for the data. |
[in] | arg5,arg6,arg7,arg8 | Additional arguments for the fitting step in AddSWeight(). |
The SPlot constructor is pythonized with the command argument pythonization. The keywords must correspond to the CmdArgs of the constructor. The constructor automatically calls AddSWeight() with the given RooCmdArg
For example, the following code is equivalent in PyROOT:
SPlot::AddSWeight | ( | RooAbsPdf * | pdf, |
const RooArgList & | yieldsTmp, | ||
const RooArgSet & | projDeps = RooArgSet() , |
||
bool | includeWeights = true , |
||
const RooCmdArg & | arg5 = {} , |
||
const RooCmdArg & | arg6 = {} , |
||
const RooCmdArg & | arg7 = {} , |
||
const RooCmdArg & | arg8 = {} |
||
) |
Method which adds the sWeights to the dataset.
The SPlot will contain two new variables for each yield parameter:
L_<varname>
is the likelihood for each event, i.e., the pdf evaluated for the a given value of the variable "varname".<varname>_sw
is the value of the sWeight for the variable "varname" for each event.Find Parameters in the PDF to be considered fixed when calculating the SWeights and be sure to NOT include the yields in that list.
After fixing non-yield parameters, this function will start a fit by calling
One can pass additional arguments to fitTo
, such as RooFit::Range("fitrange")
, as arg5
, arg6
, arg7
, arg8
.
RooFit::Range
may be necessary to get expected results if you initially fit in a range and/or called pdf->fixCoefRange("fitrange")
on pdf
. Pass arg5
, arg6
, arg7
, arg8
AT YOUR OWN RISK.[in] | PDF to fit to data to compute s weights. | |
[in] | yieldsTmp | Yields to use to compute s weights. |
[in] | projDeps | These will not be normalized over when calculating the sWeights, and will be considered parameters, not observables. |
[in] | includeWeights | Include weights of the input data in calculation of s weights. |
[in] | arg5,arg6,arg7,arg8 | Optional additional arguments for the fitting step. |
The SPlot::AddSWeight function is pythonized with the command argument pythonization. For example, the following code is equivalent in PyROOT:
|
static |
|
inlinestaticconstexpr |
|
inlinestatic |
Int_t SPlot::GetNumSWeightVars | ( | ) | const |
RooDataSet * SPlot::GetSDataSet | ( | ) | const |
Retrieve s-weighted data.
It does not automatically call AddSWeight(). This needs to be done manually.
RooArgList SPlot::GetSWeightVars | ( | ) | const |
Return a RooArgList containing all parameters that have s weights.
double SPlot::GetYieldFromSWeight | ( | const char * | sVariable | ) | const |
|
inlineoverridevirtual |
RooDataSet * SPlot::SetSData | ( | RooDataSet * | data | ) |
|
overridevirtual |
|
inline |
|
protected |
|
protected |