Logo ROOT  
Reference Guide
RooBinningCategory.cxx
Go to the documentation of this file.
1/*****************************************************************************
2 * Project: RooFit *
3 * Package: RooFitCore *
4 * @(#)root/roofitcore:$Id$
5 * Authors: *
6 * WV, Wouter Verkerke, UC Santa Barbara, verkerke@slac.stanford.edu *
7 * DK, David Kirkby, UC Irvine, dkirkby@uci.edu *
8 * *
9 * Copyright (c) 2000-2005, Regents of the University of California *
10 * and Stanford University. All rights reserved. *
11 * *
12 * Redistribution and use in source and binary forms, *
13 * with or without modification, are permitted according to the terms *
14 * listed in LICENSE (http://roofit.sourceforge.net/license.txt) *
15 *****************************************************************************/
16
17/**
18\file RooBinningCategory.cxx
19\class RooBinningCategory
20\ingroup Roofitcore
21
22Class RooBinningCategory provides a real-to-category mapping defined
23by a series of thresholds. It evaluates the value of `inputVar` passed in the
24constructor, and converts this into a bin number using a binning defined for
25the inputVar. The name of this binning is passed in the constructor.
26**/
27
28
29#include "RooBinningCategory.h"
30
31#include "Riostream.h"
32#include "RooStreamParser.h"
33
34using namespace std;
35
37
38
39
40////////////////////////////////////////////////////////////////////////////////
41/// Constructor with input function to be mapped and name and index of default
42/// output state of unmapped values
43
44RooBinningCategory::RooBinningCategory(const char *name, const char *title, RooAbsRealLValue& inputVar,
45 const char* binningName, const char* catTypeName) :
46 RooAbsCategory(name, title), _inputVar("inputVar","Input category",this,inputVar), _bname(binningName)
47{
48 initialize(catTypeName) ;
49
50}
51
52
53
54////////////////////////////////////////////////////////////////////////////////
55/// Copy constructor
56
58 RooAbsCategory(other,name), _inputVar("inputVar",this,other._inputVar), _bname(other._bname)
59{
60}
61
62
63
64////////////////////////////////////////////////////////////////////////////////
65/// Destructor
66
68{
69}
70
71
72
73
74////////////////////////////////////////////////////////////////////////////////
75/// Iterator over all bins in input variable and define corresponding state labels
76
77void RooBinningCategory::initialize(const char* catTypeName)
78{
79 const int nbins = _inputVar->getBinning(_bname.Length() > 0 ? _bname.Data() : nullptr).numBins();
80 for (Int_t i=0 ; i<nbins ; i++) {
81 string name = catTypeName!=0 ? Form("%s%d",catTypeName,i)
82 : (_bname.Length()>0 ? Form("%s_%s_bin%d",_inputVar.arg().GetName(),_bname.Data(),i)
83 : Form("%s_bin%d",_inputVar.arg().GetName(),i)) ;
85 }
86}
87
88
89
90
91////////////////////////////////////////////////////////////////////////////////
92/// Calculate and return the value of the mapping function
93
95{
96 Int_t ibin = _inputVar->getBin(_bname.Length() > 0 ? _bname.Data() : nullptr);
97
98 if (!hasIndex(ibin)) {
99 string name = (_bname.Length()>0) ? Form("%s_%s_bin%d",_inputVar.arg().GetName(),_bname.Data(),ibin)
100 : Form("%s_bin%d",_inputVar.arg().GetName(),ibin) ;
101 const_cast<RooBinningCategory*>(this)->defineState(name,ibin);
102 }
103
104 return ibin;
105}
106
107
108
109
110////////////////////////////////////////////////////////////////////////////////
111/// Print info about this threshold category to the specified stream. In addition to the info
112/// from RooAbsCategory::printStream() we add:
113///
114/// Standard : input category
115/// Shape : default value
116/// Verbose : list of thresholds
117
119{
121
122 if (verbose) {
123 os << indent << "--- RooBinningCategory ---" << endl
124 << indent << " Maps from " ;
126 }
127}
128
129
#define ClassImp(name)
Definition: Rtypes.h:375
static void indent(ostringstream &buf, int indent_level)
char name[80]
Definition: TGX11.cxx:110
char * Form(const char *fmt,...)
Formats a string in a circular formatting buffer.
Definition: TString.cxx:2447
Int_t numBins() const
Return number of bins.
Definition: RooAbsBinning.h:38
A space to attach TBranches.
void printMultiline(std::ostream &os, Int_t contents, Bool_t verbose=kFALSE, TString indent="") const override
Print info about this object to the specified stream.
virtual const std::map< std::string, RooAbsCategory::value_type >::value_type & defineState(const std::string &label)
Define a new state with given label.
bool hasIndex(value_type index) const
Check if a state with index index exists.
RooAbsRealLValue is the common abstract base class for objects that represent a real value that may a...
virtual const RooAbsBinning & getBinning(const char *name=0, Bool_t verbose=kTRUE, Bool_t createOnTheFly=kFALSE) const =0
Retrive binning configuration with given name or default binning.
Int_t getBin(const char *rangeName=0) const override
Class RooBinningCategory provides a real-to-category mapping defined by a series of thresholds.
value_type evaluate() const override
Calculate and return the value of the mapping function.
~RooBinningCategory() override
Destructor.
TString _bname
Name of the binning specification to be used to perform the mapping.
RooTemplateProxy< RooAbsRealLValue > _inputVar
Input variable that is mapped.
void printMultiline(std::ostream &os, Int_t content, Bool_t verbose=kFALSE, TString indent="") const override
Printing interface (human readable)
void initialize(const char *catTypeName=0)
Iterator over all bins in input variable and define corresponding state labels.
virtual void printStream(std::ostream &os, Int_t contents, StyleOption style, TString indent="") const
Print description of object on ostream, printing contents set by contents integer,...
const T & arg() const
Return reference to object held in proxy.
const char * GetName() const override
Returns name of object.
Definition: TNamed.h:47
Basic string class.
Definition: TString.h:136
Ssiz_t Length() const
Definition: TString.h:410
const char * Data() const
Definition: TString.h:369