50 ClassImp(RooDataProjBinding);
59 RooDataProjBinding::RooDataProjBinding(
const RooAbsReal &real,
const RooAbsData& data,
60 const RooArgSet &vars,
const RooArgSet* nset) :
61 RooRealBinding(real,vars,0), _first(kTRUE), _real(&real), _data(&data), _nset(nset),
62 _superCat(0), _catTable(0)
65 TIterator* iter = data.get()->createIterator() ;
66 Bool_t allCat(kTRUE) ;
68 while((arg=(RooAbsArg*)iter->Next())) {
69 if (!dynamic_cast<RooCategory*>(arg)) allCat = kFALSE ;
75 _superCat =
new RooSuperCategory(
"superCat",
"superCat",*data.get()) ;
76 _catTable = data.table(*_superCat) ;
85 RooDataProjBinding::~RooDataProjBinding()
87 if (_superCat)
delete _superCat ;
88 if (_catTable)
delete _catTable ;
96 Double_t RooDataProjBinding::operator()(
const Double_t xvector[])
const
109 TIterator* iter = _superCat->typeIterator() ;
111 while((type=(RooCatType*)iter->Next())) {
113 _superCat->setIndex(type->getVal()) ;
116 Double_t wgt = _catTable->get(type->GetName()) ;
118 result += wgt * _real->getVal(_nset) ;
128 Int_t nEvt = _data->numEntries() ;
132 oocoutW(_real,Eval) <<
"RooDataProjBinding::operator() projecting over " << nEvt <<
" events" << endl ;
135 if (oodologW(_real,Eval)) {
136 ooccoutW(_real,Eval) <<
"." ; cout.flush() ;
145 for (i=0 ; i<nEvt ; i++) {
148 Double_t wgt = _data->weight() ;
151 ret = _real->getVal(_nset) ;
152 result += wgt * ret ;
163 if (wgtSum==0)
return 0 ;
164 return result / wgtSum ;