// RooCategoryProxy is the proxy implementation for RooAbsCategory objects
// A RooCategoryProxy is the general mechanism to store references
// to RooAbsCategoriess inside a RooAbsArg
//
// RooCategoryProxy provides a cast operator to Int_t and 'const char*', allowing
// the proxy to functions a Int_t/'const char*' on the right hand side of expressions.
// END_HTML
#include "RooFit.h"
#include "Riostream.h"
#include "RooArgSet.h"
#include "RooCategoryProxy.h"
ClassImp(RooCategoryProxy)
;
RooCategoryProxy::RooCategoryProxy(const char* Name, const char* desc, RooAbsArg* owner,
Bool_t valueServer, Bool_t shapeServer, Bool_t ownArg) :
RooArgProxy(Name, desc, owner, valueServer, shapeServer, ownArg)
{
}
RooCategoryProxy::RooCategoryProxy(const char* Name, const char* desc, RooAbsArg* owner, RooAbsCategory& ref,
Bool_t valueServer, Bool_t shapeServer, Bool_t ownArg) :
RooArgProxy(Name, desc, owner, ref, valueServer, shapeServer, ownArg)
{
}
RooCategoryProxy::RooCategoryProxy(const char* Name, RooAbsArg* owner, const RooCategoryProxy& other) :
RooArgProxy(Name, owner, other)
{
}
RooCategoryProxy::~RooCategoryProxy()
{
}
RooAbsCategoryLValue* RooCategoryProxy::lvptr() const
{
RooAbsCategoryLValue* Lvptr = dynamic_cast<RooAbsCategoryLValue*>(_arg) ;
if (!Lvptr) {
cout << "RooCategoryProxy(" << name() << ")::INTERNAL error, expected " << _arg->GetName() << " to be an lvalue" << endl ;
assert(0) ;
}
return Lvptr ;
}
Bool_t RooCategoryProxy::setArg(RooAbsCategory& newRef)
{
if (absArg()) {
if (TString(arg().GetName()!=newRef.GetName())) {
newRef.setAttribute(Form("ORIGNAME:%s",arg().GetName())) ;
}
return changePointer(RooArgSet(newRef),kTRUE) ;
} else {
return changePointer(RooArgSet(newRef),kFALSE,kTRUE);
}
}