Logo ROOT   6.10/09
Reference Guide
rf405_realtocatfuncs.cxx
Go to the documentation of this file.
1 //////////////////////////////////////////////////////////////////////////
2 //
3 // 'DATA AND CATEGORIES' RooFit tutorial macro #405
4 //
5 // Demonstration of real-->discrete mapping functions
6 //
7 //
8 //
9 // 07/2008 - Wouter Verkerke
10 //
11 /////////////////////////////////////////////////////////////////////////
12 
13 #ifndef __CINT__
14 #include "RooGlobalFunc.h"
15 #endif
16 #include "RooRealVar.h"
17 #include "RooDataSet.h"
18 #include "RooGaussian.h"
19 #include "RooCategory.h"
20 #include "RooThresholdCategory.h"
21 #include "RooBinningCategory.h"
22 #include "Roo1DTable.h"
23 #include "RooArgusBG.h"
24 #include "TCanvas.h"
25 #include "RooPlot.h"
26 using namespace RooFit ;
27 
28 
29 class TestBasic405 : public RooFitTestUnit
30 {
31 public:
32  TestBasic405(TFile* refFile, Bool_t writeRef, Int_t verbose) : RooFitTestUnit("Real-to-category functions",refFile,writeRef,verbose) {} ;
33  Bool_t testCode() {
34 
35 
36  // D e f i n e p d f i n x , s a m p l e d a t a s e t i n x
37  // ------------------------------------------------------------------------
38 
39 
40  // Define a dummy PDF in x
41  RooRealVar x("x","x",0,10) ;
43 
44  // Generate a dummy dataset
45  RooDataSet *data = a.generate(x,10000) ;
46 
47 
48 
49  // C r e a t e a t h r e s h o l d r e a l - > c a t f u n c t i o n
50  // --------------------------------------------------------------------------
51 
52  // A RooThresholdCategory is a category function that maps regions in a real-valued
53  // input observable observables to state names. At construction time a 'default'
54  // state name must be specified to which all values of x are mapped that are not
55  // otherwise assigned
56  RooThresholdCategory xRegion("xRegion","region of x",x,"Background") ;
57 
58  // Specify thresholds and state assignments one-by-one.
59  // Each statement specifies that all values _below_ the given value
60  // (and above any lower specified threshold) are mapped to the
61  // category state with the given name
62  //
63  // Background | SideBand | Signal | SideBand | Background
64  // 4.23 5.23 8.23 9.23
65  xRegion.addThreshold(4.23,"Background") ;
66  xRegion.addThreshold(5.23,"SideBand") ;
67  xRegion.addThreshold(8.23,"Signal") ;
68  xRegion.addThreshold(9.23,"SideBand") ;
69 
70 
71 
72  // U s e t h r e s h o l d f u n c t i o n t o p l o t d a t a r e g i o n s
73  // -------------------------------------------------------------------------------------
74 
75  // Add values of threshold function to dataset so that it can be used as observable
76  data->addColumn(xRegion) ;
77 
78  // Make plot of data in x
79  RooPlot* xframe = x.frame(Title("Demo of threshold and binning mapping functions")) ;
80  data->plotOn(xframe) ;
81 
82  // Use calculated category to select sideband data
83  data->plotOn(xframe,Cut("xRegion==xRegion::SideBand"),MarkerColor(kRed),LineColor(kRed),Name("data_cut")) ;
84 
85 
86 
87  // C r e a t e a b i n n i n g r e a l - > c a t f u n c t i o n
88  // ----------------------------------------------------------------------
89 
90  // A RooBinningCategory is a category function that maps bins of a (named) binning definition
91  // in a real-valued input observable observables to state names. The state names are automatically
92  // constructed from the variable name, the binning name and the bin number. If no binning name
93  // is specified the default binning is mapped
94 
95  x.setBins(10,"coarse") ;
96  RooBinningCategory xBins("xBins","coarse bins in x",x,"coarse") ;
97 
98 
99 
100  // U s e b i n n i n g f u n c t i o n f o r t a b u l a t i o n a n d p l o t t i n g
101  // -----------------------------------------------------------------------------------------------
102 
103  // Print table of xBins state multiplicity. Note that xBins does not need to be an observable in data
104  // it can be a function of observables in data as well
105  Roo1DTable* xbtable = data->table(xBins) ;
106 
107  // Add values of xBins function to dataset so that it can be used as observable
108  RooCategory* xb = (RooCategory*) data->addColumn(xBins) ;
109 
110  // Define range "alt" as including bins 1,3,5,7,9
111  xb->setRange("alt","x_coarse_bin1,x_coarse_bin3,x_coarse_bin5,x_coarse_bin7,x_coarse_bin9") ;
112 
113  // Construct subset of data matching range "alt" but only for the first 5000 events and plot it on the fram
114  RooDataSet* dataSel = (RooDataSet*) data->reduce(CutRange("alt"),EventRange(0,5000)) ;
115 // dataSel->plotOn(xframe,MarkerColor(kGreen),LineColor(kGreen),Name("data_sel")) ;
116 
117 
118  regTable(xbtable,"rf405_xbtable") ;
119  regPlot(xframe,"rf405_plot1") ;
120 
121  delete data ;
122  delete dataSel ;
123 
124  return kTRUE ;
125 
126  }
127 
128 } ;
virtual RooPlot * plotOn(RooPlot *frame, const RooCmdArg &arg1=RooCmdArg::none(), const RooCmdArg &arg2=RooCmdArg::none(), const RooCmdArg &arg3=RooCmdArg::none(), const RooCmdArg &arg4=RooCmdArg::none(), const RooCmdArg &arg5=RooCmdArg::none(), const RooCmdArg &arg6=RooCmdArg::none(), const RooCmdArg &arg7=RooCmdArg::none(), const RooCmdArg &arg8=RooCmdArg::none()) const
Plot dataset on specified frame.
Definition: RooAbsData.cxx:552
RooCmdArg Cut(const char *cutSpec)
RooCmdArg LineColor(Color_t color)
Definition: Rtypes.h:56
int Int_t
Definition: RtypesCore.h:41
bool Bool_t
Definition: RtypesCore.h:59
TArc * a
Definition: textangle.C:12
RooAbsData * reduce(const RooCmdArg &arg1, const RooCmdArg &arg2=RooCmdArg(), const RooCmdArg &arg3=RooCmdArg(), const RooCmdArg &arg4=RooCmdArg(), const RooCmdArg &arg5=RooCmdArg(), const RooCmdArg &arg6=RooCmdArg(), const RooCmdArg &arg7=RooCmdArg(), const RooCmdArg &arg8=RooCmdArg())
Create a reduced copy of this dataset.
Definition: RooAbsData.cxx:343
RooCmdArg Title(const char *name)
RooArgusBG is a RooAbsPdf implementation describing the ARGUS background shape.
Definition: RooArgusBG.h:25
Double_t x[n]
Definition: legend1.C:17
virtual RooAbsArg * addColumn(RooAbsArg &var, Bool_t adjustRange=kTRUE)
Add a column with the values of the given (function) argument to this dataset.
Class RooThresholdCategory provides a real-to-category mapping defined by a series of thresholds...
RooRealVar represents a fundamental (non-derived) real valued object.
Definition: RooRealVar.h:36
RooCmdArg Name(const char *name)
bool verbose
Class RooBinningCategory provides a real-to-category mapping defined by a series of thresholds...
RooCmdArg CutRange(const char *rangeName)
RooDataSet is a container class to hold unbinned data.
Definition: RooDataSet.h:29
RooCategory represents a fundamental (non-derived) discrete value object.
Definition: RooCategory.h:24
A RooPlot is a plot frame and a container for graphics objects within that frame. ...
Definition: RooPlot.h:41
RooCmdArg EventRange(Int_t nStart, Int_t nStop)
static RooConstVar & value(Double_t value)
Return a constant value object with given value.
RooCmdArg MarkerColor(Color_t color)
const Bool_t kTRUE
Definition: RtypesCore.h:91
void setRange(const char *rangeName, const char *stateNameList)
Roo1DTable implements a one-dimensional table.
Definition: Roo1DTable.h:24
virtual Roo1DTable * table(const RooArgSet &catSet, const char *cuts="", const char *opts="") const
Construct table for product of categories in catSet.
Definition: RooAbsData.cxx:752