47 ClassImp(RooChangeTracker);
53 RooChangeTracker::RooChangeTracker() : _checkVal(kFALSE), _init(kFALSE)
66 RooChangeTracker::RooChangeTracker(
const char* name,
const char* title,
const RooArgSet& trackSet, Bool_t checkValues) :
67 RooAbsReal(name, title),
68 _realSet(
"realSet",
"Set of real-valued components to be tracked",this),
69 _catSet(
"catSet",
"Set of discrete-valued components to be tracked",this),
70 _realRef(trackSet.getSize()),
71 _catRef(trackSet.getSize()),
72 _checkVal(checkValues),
75 for (
const auto arg : trackSet) {
76 if (dynamic_cast<const RooAbsReal*>(arg)) {
79 if (dynamic_cast<const RooAbsCategory*>(arg)) {
85 for (
unsigned int i=0; i < _realSet.size(); ++i) {
86 auto real =
static_cast<const RooAbsReal*
>(_realSet.at(i));
87 _realRef[i++] = real->getVal() ;
90 for (
unsigned int i=0; i < _catSet.size(); ++i) {
91 auto cat =
static_cast<const RooAbsCategory*
>(_catSet.at(i));
92 _catRef[i++] = cat->getIndex() ;
103 RooChangeTracker::RooChangeTracker(
const RooChangeTracker& other,
const char* name) :
104 RooAbsReal(other, name),
105 _realSet(
"realSet",this,other._realSet),
106 _catSet(
"catSet",this,other._catSet),
107 _realRef(other._realRef),
108 _catRef(other._catRef),
109 _checkVal(other._checkVal),
120 Bool_t RooChangeTracker::hasChanged(Bool_t clearState)
124 if (!isValueDirty()) {
145 Bool_t valuesChanged(kFALSE) ;
148 for (
unsigned int i=0; i < _realSet.size(); ++i) {
149 auto real =
static_cast<const RooAbsReal*
>(_realSet.at(i));
150 if (real->getVal() != _realRef[i]) {
152 valuesChanged = kTRUE ;
153 _realRef[i] = real->getVal() ;
157 for (
unsigned int i=0; i < _catSet.size(); ++i) {
158 auto cat =
static_cast<const RooAbsCategory*
>(_catSet.at(i));
159 if (cat->getIndex() != _catRef[i]) {
161 valuesChanged = kTRUE ;
162 _catRef[i] = cat->getIndex() ;
170 valuesChanged=kTRUE ;
176 return valuesChanged ;
183 for (
unsigned int i=0; i < _realSet.size(); ++i) {
184 auto real =
static_cast<const RooAbsReal*
>(_realSet.at(i));
185 if (real->getVal() != _realRef[i]) {
190 for (
unsigned int i=0; i < _catSet.size(); ++i) {
191 auto cat =
static_cast<const RooAbsCategory*
>(_catSet.at(i));
192 if (cat->getIndex() != _catRef[i]) {
207 RooChangeTracker::~RooChangeTracker()
216 RooArgSet RooChangeTracker::parameters()
const