58 ClassImp(RooGenericPdf);
65 RooGenericPdf::RooGenericPdf(
const char *name,
const char *title,
const RooArgList& dependents) :
66 RooAbsPdf(name,title),
67 _actualVars(
"actualVars",
"Variables used by PDF expression",this),
70 _actualVars.add(dependents) ;
73 if (_actualVars.getSize()==0) _value = traceEval(0) ;
81 RooGenericPdf::RooGenericPdf(
const char *name,
const char *title,
82 const char* inFormula,
const RooArgList& dependents) :
83 RooAbsPdf(name,title),
84 _actualVars(
"actualVars",
"Variables used by PDF expression",this),
87 _actualVars.add(dependents) ;
90 if (_actualVars.getSize()==0) _value = traceEval(0) ;
98 RooGenericPdf::RooGenericPdf(
const RooGenericPdf& other,
const char* name) :
99 RooAbsPdf(other, name),
100 _actualVars(
"actualVars",this,other._actualVars),
101 _formExpr(other._formExpr)
109 RooFormula& RooGenericPdf::formula()
const
112 const_cast<std::unique_ptr<RooFormula>&
>(_formula).reset(
113 new RooFormula(GetName(),_formExpr.Data(),_actualVars));
114 const_cast<TString&
>(_formExpr) = _formula->formulaString().c_str();
124 Double_t RooGenericPdf::evaluate()
const
126 return formula().eval(_normSet) ;
134 Bool_t RooGenericPdf::setFormula(
const char* inFormula)
136 if (formula().reCompile(inFormula))
return kTRUE ;
138 _formExpr = inFormula ;
148 Bool_t RooGenericPdf::isValidReal(Double_t , Bool_t )
const
158 Bool_t RooGenericPdf::redirectServersHook(
const RooAbsCollection& newServerList, Bool_t mustReplaceAll, Bool_t nameChange, Bool_t )
161 return _formula->changeDependents(newServerList,mustReplaceAll,nameChange);
172 void RooGenericPdf::printMultiline(ostream& os, Int_t content, Bool_t verbose, TString indent)
const
174 RooAbsPdf::printMultiline(os,content,verbose,indent);
176 os <<
" --- RooGenericPdf --- " << endl ;
179 formula().printMultiline(os,content,verbose,indent);
188 void RooGenericPdf::printMetaArgs(ostream& os)
const
190 os <<
"formula=\"" << _formExpr <<
"\" " ;
198 Bool_t RooGenericPdf::readFromStream(istream& is, Bool_t compact, Bool_t )
201 coutE(InputArguments) <<
"RooGenericPdf::readFromStream(" << GetName() <<
"): can't read in compact mode" << endl ;
204 RooStreamParser parser(is) ;
205 return setFormula(parser.readLine()) ;
213 void RooGenericPdf::writeToStream(ostream& os, Bool_t compact)
const
216 os << getVal() << endl ;