// RooFactoryWSTool is a clase like TTree::MakeClass() that generates
// skeleton code for RooAbsPdf and RooAbsReal functions given
// a list of input parameter names. The factory can also compile
// the generated code on the fly, and on request also immediate
// instantiate objects.
// END_HTML
#include "RooFit.h"
#include "RooFactoryWSTool.h"
#include "RooAbsReal.h"
#include "RooAbsCategory.h"
#include "RooArgList.h"
#include "RooRealVar.h"
#include "RooCategory.h"
#include "RooMsgService.h"
#include "RooWorkspace.h"
#include "TInterpreter.h"
#include "TClass.h"
#include "TClassTable.h"
#include "RooAbsPdf.h"
#include "RooGaussian.h"
#include <fstream>
#include <vector>
#include <string>
#include "RooGlobalFunc.h"
#include "RooDataSet.h"
#include "RooDataHist.h"
#include "RooCintUtils.h"
#include "RooAddPdf.h"
#include "RooProdPdf.h"
#include "RooSimultaneous.h"
#include "RooFFTConvPdf.h"
#include "RooNumConvPdf.h"
#include "RooResolutionModel.h"
#include "RooProduct.h"
#include "RooAddition.h"
#include "RooChi2Var.h"
#include "RooNLLVar.h"
#include "RooRealSumPdf.h"
#include "RooConstVar.h"
#include "RooDerivative.h"
#include "TROOT.h"
using namespace RooFit ;
using namespace std ;
ClassImp(RooFactoryWSTool)
;
RooFactoryWSTool* RooFactoryWSTool::_of = 0 ;
map<string,RooFactoryWSTool::IFace*>* RooFactoryWSTool::_hooks=0 ;
static Int_t init()
{
RooFactoryWSTool::IFace* iface = new RooFactoryWSTool::SpecialsIFace ;
RooFactoryWSTool::registerSpecial("SUM",iface) ;
RooFactoryWSTool::registerSpecial("RSUM",iface) ;
RooFactoryWSTool::registerSpecial("ASUM",iface) ;
RooFactoryWSTool::registerSpecial("PROD",iface) ;
RooFactoryWSTool::registerSpecial("SIMUL",iface) ;
RooFactoryWSTool::registerSpecial("EXPR",iface) ;
RooFactoryWSTool::registerSpecial("FCONV",iface) ;
RooFactoryWSTool::registerSpecial("NCONV",iface) ;
RooFactoryWSTool::registerSpecial("sum",iface) ;
RooFactoryWSTool::registerSpecial("prod",iface) ;
RooFactoryWSTool::registerSpecial("expr",iface) ;
RooFactoryWSTool::registerSpecial("nconv",iface) ;
RooFactoryWSTool::registerSpecial("nll",iface) ;
RooFactoryWSTool::registerSpecial("chi2",iface) ;
RooFactoryWSTool::registerSpecial("profile",iface) ;
RooFactoryWSTool::registerSpecial("int",iface) ;
RooFactoryWSTool::registerSpecial("deriv",iface) ;
RooFactoryWSTool::registerSpecial("cdf",iface) ;
RooFactoryWSTool::registerSpecial("PROJ",iface) ;
RooFactoryWSTool::registerSpecial("dataobs",iface) ;
return 0 ;
}
static Int_t dummy = init() ;
#ifndef _WIN32
#include <strings.h>
#else
static char *strtok_r(char *s1, const char *s2, char **lasts)
{
char *ret;
if (s1 == NULL)
s1 = *lasts;
while(*s1 && strchr(s2, *s1))
++s1;
if(*s1 == '\0')
return NULL;
ret = s1;
while(*s1 && !strchr(s2, *s1))
++s1;
if(*s1)
*s1++ = '\0';
*lasts = s1;
return ret;
}
#endif
RooFactoryWSTool::RooFactoryWSTool(RooWorkspace& inws) : _ws(&inws)
{
}
RooFactoryWSTool::~RooFactoryWSTool()
{
}
RooRealVar* RooFactoryWSTool::createVariable(const char* name, Double_t xmin, Double_t xmax)
{
if (_ws->var(name)) {
coutE(ObjectHandling) << "RooFactoryWSTool::createFactory() ERROR: variable with name '" << name << "' already exists" << endl ;
logError() ;
return 0 ;
}
RooRealVar var(name,name,xmin,xmax) ;
if (_ws->import(var,Silence())) logError() ;
return _ws->var(name) ;
}
RooCategory* RooFactoryWSTool::createCategory(const char* name, const char* stateNameList)
{
RooCategory cat(name,name) ;
if (stateNameList) {
char *tmp = new char[strlen(stateNameList)+1] ;
strcpy(tmp,stateNameList) ;
char* save ;
char* tok = strtok_r(tmp,",",&save) ;
while(tok) {
char* sep = strchr(tok,'=') ;
if (sep) {
*sep = 0 ;
Int_t id = atoi(sep+1) ;
cat.defineType(tok,id) ;
*sep = '=' ;
} else {
cat.defineType(tok) ;
}
tok = strtok_r(0,",",&save) ;
}
delete[] tmp ;
}
cat.setStringAttribute("factory_tag",Form("%s[%s]",name,stateNameList)) ;
if (_ws->import(cat,Silence())) logError() ;
return _ws->cat(name) ;
}
RooAbsArg* RooFactoryWSTool::createArg(const char* className, const char* objName, const char* varList)
{
TClass* tc = resolveClassName(className) ;
if (!tc) {
coutE(ObjectHandling) << "RooFactoryWSTool::createArg() ERROR class " << className << " not found in factory alias table, nor in ROOT class table" << endl ;
logError() ;
return 0 ;
}
className = tc->GetName() ;
if (!tc->InheritsFrom(RooAbsArg::Class())) {
coutE(ObjectHandling) << "RooFactoryWSTool::createArg() ERROR class " << className << " does not inherit from RooAbsArg" << endl ;
logError() ;
return 0 ;
}
_args.clear() ;
char tmp[1024] ;
strcpy(tmp,varList) ;
char* p=tmp ;
char* tok=tmp ;
Int_t blevel(0) ;
Bool_t litmode(kFALSE) ;
while(*p) {
if (*p=='{' || *p=='(' || *p=='[') blevel++ ;
if (*p=='}' || *p==')' || *p==']') blevel-- ;
if (*p=='"' || *p=='\'') litmode = !litmode ;
if (!litmode && blevel==0 && ((*p)==',')) {
*p = 0 ;
_args.push_back(tok) ;
tok = p+1 ;
}
p++ ;
}
_args.push_back(tok) ;
pair<list<string>,unsigned int> ca = RooCintUtils::ctorArgs(className,_args.size()+2) ;
if (ca.first.size()==0) {
coutE(ObjectHandling) << "RooFactoryWSTool::createArg() ERROR no suitable constructor found for class " << className << endl ;
logError() ;
return 0 ;
}
if (_args.size()+2<ca.second || _args.size()+2>ca.first.size()) {
if (ca.second==ca.first.size()) {
coutE(ObjectHandling) << "RooFactoryWSTool::createArg() ERROR number of arguments provided (" << _args.size() << ") for class is invalid, " << className
<< " expects " << ca.first.size()-2 << endl ;
logError() ;
} else {
coutE(ObjectHandling) << "RooFactoryWSTool::createArg() ERROR number of arguments provided (" << _args.size() << ") for class is invalid " << className
<< " expect number between " << ca.second-2 << " and " << ca.first.size()-2 << endl ;
logError() ;
}
return 0 ;
}
string cintExpr(Form("new %s(\"%s\",\"%s\"",className,objName,objName)) ;
_of = this ;
try {
Int_t i(0) ;
list<string>::iterator ti = ca.first.begin() ; ti++ ; ti++ ;
for (vector<string>::iterator ai = _args.begin() ; ai != _args.end() ; ai++,ti++,i++) {
if ((*ti)=="RooAbsReal&" || (*ti)=="const RooAbsReal&") {
RooFactoryWSTool::as_FUNC(i) ;
cintExpr += Form(",RooFactoryWSTool::as_FUNC(%d)",i) ;
} else if ((*ti)=="RooAbsArg&" || (*ti)=="const RooAbsArg&") {
RooFactoryWSTool::as_ARG(i) ;
cintExpr += Form(",RooFactoryWSTool::as_ARG(%d)",i) ;
} else if ((*ti)=="RooRealVar&" || (*ti)=="const RooRealVar&") {
RooFactoryWSTool::as_VAR(i) ;
cintExpr += Form(",RooFactoryWSTool::as_VAR(%d)",i) ;
} else if ((*ti)=="RooAbsRealLValue&" || (*ti)=="const RooAbsRealLValue&") {
RooFactoryWSTool::as_VARLV(i) ;
cintExpr += Form(",RooFactoryWSTool::as_VARLV(%d)",i) ;
} else if ((*ti)=="RooCategory&" || (*ti)=="const RooCategory&") {
RooFactoryWSTool::as_CAT(i) ;
cintExpr += Form(",RooFactoryWSTool::as_CAT(%d)",i) ;
} else if ((*ti)=="RooAbsCategory&" || (*ti)=="const RooAbsCategory&") {
RooFactoryWSTool::as_CATFUNC(i) ;
cintExpr += Form(",RooFactoryWSTool::as_CATFUNC(%d)",i) ;
} else if ((*ti)=="RooAbsCategoryLValue&" || (*ti)=="const RooAbsCategoryLValue&") {
RooFactoryWSTool::as_CATLV(i) ;
cintExpr += Form(",RooFactoryWSTool::as_CATLV(%d)",i) ;
} else if ((*ti)=="RooAbsPdf&" || (*ti)=="const RooAbsPdf&") {
RooFactoryWSTool::as_PDF(i) ;
cintExpr += Form(",RooFactoryWSTool::as_PDF(%d)",i) ;
} else if ((*ti)=="RooResolutionModel&" || (*ti)=="const RooResolutionModel&") {
RooFactoryWSTool::as_RMODEL(i) ;
cintExpr += Form(",RooFactoryWSTool::as_RMODEL(%d)",i) ;
} else if ((*ti)=="RooAbsData&" || (*ti)=="const RooAbsData&") {
RooFactoryWSTool::as_DATA(i) ;
cintExpr += Form(",RooFactoryWSTool::as_DATA(%d)",i) ;
} else if ((*ti)=="RooDataSet&" || (*ti)=="const RooDataSet&") {
RooFactoryWSTool::as_DSET(i) ;
cintExpr += Form(",RooFactoryWSTool::as_DSET(%d)",i) ;
} else if ((*ti)=="RooDataHist&" || (*ti)=="const RooDataHist&") {
RooFactoryWSTool::as_DHIST(i) ;
cintExpr += Form(",RooFactoryWSTool::as_DHIST(%d)",i) ;
} else if ((*ti)=="const RooArgSet&") {
RooFactoryWSTool::as_SET(i) ;
cintExpr += Form(",RooFactoryWSTool::as_SET(%d)",i) ;
} else if ((*ti)=="const RooArgList&") {
RooFactoryWSTool::as_LIST(i) ;
cintExpr += Form(",RooFactoryWSTool::as_LIST(%d)",i) ;
} else if ((*ti)=="const char*") {
RooFactoryWSTool::as_STRING(i) ;
cintExpr += Form(",RooFactoryWSTool::as_STRING(%d)",i) ;
} else if ((*ti)=="Int_t") {
RooFactoryWSTool::as_INT(i) ;
cintExpr += Form(",RooFactoryWSTool::as_INT(%d)",i) ;
} else if ((*ti)=="Double_t") {
RooFactoryWSTool::as_DOUBLE(i) ;
cintExpr += Form(",RooFactoryWSTool::as_DOUBLE(%d)",i) ;
} else if (RooCintUtils::isEnum(ti->c_str())) {
string qualvalue ;
if (_args[i].find(Form("::",className)) != string::npos) {
qualvalue = _args[i].c_str() ;
} else {
qualvalue = Form("%s::%s",className,_args[i].c_str()) ;
}
if (RooCintUtils::isValidEnumValue(ti->c_str(),qualvalue.c_str())) {
cintExpr += Form(",(%s)%s",ti->c_str(),qualvalue.c_str()) ;
} else {
throw string(Form("Supplied argument %s does not represent a valid state of enum %s",_args[i].c_str(),ti->c_str())) ;
}
} else {
TObject& obj = RooFactoryWSTool::as_OBJ(i) ;
string btype ;
if (ti->find("const ")==0) {
btype = ti->c_str()+6 ;
} else {
btype = *ti ;
}
if (btype.find("&")) {
btype.erase(btype.size()-1,btype.size()) ;
}
btype = RooCintUtils::trueName(btype.c_str()) ;
cout << "btype = " << btype << endl ;
if (obj.InheritsFrom(btype.c_str())) {
cintExpr += Form(",(%s&)RooFactoryWSTool::as_OBJ(%d)",ti->c_str(),i) ;
} else {
throw string(Form("Required argument with name %s of type '%s' is not in the workspace",_args[i].c_str(),ti->c_str())) ;
}
}
}
cintExpr += ") ;" ;
} catch (string err) {
coutE(ObjectHandling) << "RooFactoryWSTool::createArg() ERROR constructing " << className << "::" << objName << ": " << err << endl ;
logError() ;
return 0 ;
}
cxcoutD(ObjectHandling) << "RooFactoryWSTool::createArg() Construct expression is " << cintExpr << endl ;
RooAbsArg* arg = (RooAbsArg*) gROOT->ProcessLineFast(cintExpr.c_str()) ;
if (arg) {
if (string(className)=="RooGenericPdf") {
arg->setStringAttribute("factory_tag",Form("EXPR::%s(%s)",objName,varList)) ;
} else if (string(className)=="RooFormulaVar") {
arg->setStringAttribute("factory_tag",Form("expr::%s(%s)",objName,varList)) ;
} else {
arg->setStringAttribute("factory_tag",Form("%s::%s(%s)",className,objName,varList)) ;
}
if (_ws->import(*arg,Silence())) logError() ;
RooAbsArg* ret = _ws->arg(objName) ;
delete arg ;
return ret ;
} else {
coutE(ObjectHandling) << "RooFactoryWSTool::createArg() ERROR in CINT constructor call to create object" << endl ;
logError() ;
return 0 ;
}
}
vector<string> RooFactoryWSTool::ctorArgs(const char* )
{
return vector<string>() ;
}
RooAddPdf* RooFactoryWSTool::add(const char *objName, const char* specList, Bool_t recursiveCoefs)
{
RooArgList pdfList ;
RooArgList coefList ;
RooArgList pdfList2 ;
try {
char buf[1024] ;
strcpy(buf,specList) ;
char* save ;
char* tok = strtok_r(buf,",",&save) ;
while(tok) {
char* star=strchr(tok,'*') ;
if (star) {
*star=0 ;
pdfList.add(asPDF(star+1)) ;
coefList.add(asFUNC(tok)) ;
} else {
pdfList2.add(asPDF(tok)) ;
}
tok = strtok_r(0,",",&save) ;
}
pdfList.add(pdfList2) ;
} catch (string err) {
coutE(ObjectHandling) << "RooFactoryWSTool::add(" << objName << ") ERROR creating RooAddPdf: " << err << endl ;
logError() ;
return 0 ;
}
RooAddPdf* pdf = new RooAddPdf(objName,objName,pdfList,coefList,recursiveCoefs) ;
pdf->setStringAttribute("factory_tag",Form("SUM::%s(%s)",objName,specList)) ;
if (_ws->import(*pdf,Silence())) logError() ;
return (RooAddPdf*) _ws->pdf(objName) ;
}
RooRealSumPdf* RooFactoryWSTool::amplAdd(const char *objName, const char* specList)
{
RooArgList amplList ;
RooArgList coefList ;
RooArgList amplList2 ;
try {
char buf[1024] ;
strcpy(buf,specList) ;
char* save ;
char* tok = strtok_r(buf,",",&save) ;
while(tok) {
char* star=strchr(tok,'*') ;
if (star) {
*star=0 ;
amplList.add(asFUNC(star+1)) ;
coefList.add(asFUNC(tok)) ;
} else {
amplList2.add(asFUNC(tok)) ;
}
tok = strtok_r(0,",",&save) ;
}
amplList.add(amplList2) ;
} catch (string err) {
coutE(ObjectHandling) << "RooFactoryWSTool::add(" << objName << ") ERROR creating RooRealSumPdf: " << err << endl ;
logError() ;
return 0 ;
}
RooRealSumPdf* pdf = new RooRealSumPdf(objName,objName,amplList,coefList) ;
pdf->setStringAttribute("factory_tag",Form("ASUM::%s(%s)",objName,specList)) ;
if (_ws->import(*pdf,Silence())) logError() ;
return (RooRealSumPdf*) _ws->pdf(objName) ;
}
RooProdPdf* RooFactoryWSTool::prod(const char *objName, const char* pdfList)
{
_of = this ;
RooLinkedList cmdList ;
string regPdfList="{" ;
char buf[1024] ;
strcpy(buf,pdfList) ;
char* save ;
char* tok = strtok_r(buf,",",&save) ;
while(tok) {
char *sep = strchr(tok,'|') ;
if (sep) {
*sep=0 ;
sep++ ;
try {
cmdList.Add(Conditional(asSET(tok),asSET(sep),kTRUE).Clone()) ;
} catch (string err) {
coutE(ObjectHandling) << "RooFactoryWSTool::prod(" << objName << ") ERROR creating RooProdPdf Conditional argument: " << err << endl ;
logError() ;
return 0 ;
}
} else {
if (regPdfList.size()>1) {
regPdfList += "," ;
}
regPdfList += tok ;
}
tok = strtok_r(0,",",&save) ;
}
regPdfList += "}" ;
RooProdPdf* pdf = 0 ;
try {
pdf = new RooProdPdf(objName,objName,asSET(regPdfList.c_str()),cmdList) ;
} catch (string err) {
coutE(ObjectHandling) << "RooFactoryWSTool::prod(" << objName << ") ERROR creating RooProdPdf input set of regular p.d.f.s: " << err << endl ;
logError() ;
pdf = 0 ;
}
cmdList.Delete() ;
if (pdf) {
pdf->setStringAttribute("factory_tag",Form("PROD::%s(%s)",objName,pdfList)) ;
if (_ws->import(*pdf,Silence())) logError() ;
delete pdf ;
return (RooProdPdf*) _ws->pdf(objName) ;
} else {
return 0 ;
}
}
RooSimultaneous* RooFactoryWSTool::simul(const char* objName, const char* indexCat, const char* pdfMap)
{
map<string,RooAbsPdf*> theMap ;
char buf[1024] ;
strcpy(buf,pdfMap) ;
char* save ;
char* tok = strtok_r(buf,",",&save) ;
while(tok) {
char* eq = strchr(tok,'=') ;
if (!eq) {
coutE(ObjectHandling) << "RooFactoryWSTool::simul(" << objName << ") ERROR creating RooSimultaneous::" << objName
<< " expect mapping token of form 'state=pdfName', but found '" << tok << "'" << endl ;
logError() ;
return 0 ;
} else {
*eq = 0 ;
try {
theMap[tok] = &asPDF(eq+1) ;
} catch ( string err ) {
coutE(ObjectHandling) << "RooFactoryWSTool::simul(" << objName << ") ERROR creating RooSimultaneous: " << err << endl ;
logError() ;
}
}
tok = strtok_r(0,",",&save) ;
}
RooSimultaneous* pdf(0) ;
try {
pdf = new RooSimultaneous(objName,objName,theMap,asCATLV(indexCat)) ;
} catch (string err) {
coutE(ObjectHandling) << "RooFactoryWSTool::simul(" << objName << ") ERROR creating RooSimultaneous::" << objName << " " << err << endl ;
logError() ;
}
pdf->setStringAttribute("factory_tag",Form("SIMUL::%s(%s,%s)",objName,indexCat,pdfMap)) ;
if (_ws->import(*pdf,Silence())) logError() ;
return (RooSimultaneous*) _ws->pdf(objName) ;
}
RooAddition* RooFactoryWSTool::addfunc(const char *objName, const char* specList)
{
RooArgList sumlist1 ;
RooArgList sumlist2 ;
try {
char buf[1024] ;
strcpy(buf,specList) ;
char* save ;
char* tok = strtok_r(buf,",",&save) ;
while(tok) {
char* star=strchr(tok,'*') ;
if (star) {
*star=0 ;
sumlist2.add(asFUNC(star+1)) ;
sumlist1.add(asFUNC(tok)) ;
} else {
sumlist1.add(asFUNC(tok)) ;
}
tok = strtok_r(0,",",&save) ;
}
} catch (string err) {
coutE(ObjectHandling) << "RooFactoryWSTool::addfunc(" << objName << ") ERROR creating RooAddition: " << err << endl ;
logError() ;
return 0 ;
}
if (sumlist2.getSize()>0 && (sumlist1.getSize()!=sumlist2.getSize())) {
coutE(ObjectHandling) << "RooFactoryWSTool::addfunc(" << objName << ") ERROR creating RooAddition: syntax error: either all sum terms must be products or none" << endl ;
logError() ;
return 0 ;
}
RooAddition* sum ;
if (sumlist2.getSize()>0) {
sum = new RooAddition(objName,objName,sumlist1,sumlist2) ;
} else {
sum = new RooAddition(objName,objName,sumlist1) ;
}
sum->setStringAttribute("factory_tag",Form("sum::%s(%s)",objName,specList)) ;
if (_ws->import(*sum,Silence())) logError() ;
delete sum ;
return (RooAddition*) _ws->pdf(objName) ;
}
RooProduct* RooFactoryWSTool::prodfunc(const char *objName, const char* pdfList)
{
return (RooProduct*) createArg("RooProduct",objName,Form("{%s}",pdfList)) ;
}
RooAbsArg* RooFactoryWSTool::process(const char* expr)
{
char* buf = new char[strlen(expr)+1] ;
char* buftmp = buf ;
while(*expr) {
if (!isspace(*expr)) {
*buftmp = *expr ;
buftmp++ ;
}
expr++ ;
}
*buftmp=0 ;
clearError() ;
ws().startTransaction() ;
string out ;
try {
out = processExpression(buf) ;
} catch (string error) {
coutE(ObjectHandling) << "RooFactoryWSTool::processExpression() ERROR in parsing: " << error << endl ;
logError() ;
}
if (errorCount()>0) {
coutE(ObjectHandling) << "RooFactoryWSTool::processExpression() ERRORS detected, transaction to workspace aborted, no objects committed" << endl ;
ws().cancelTransaction() ;
} else {
ws().commitTransaction() ;
}
delete[] buf ;
return out.size() ? ws().arg(out.c_str()) : 0 ;
}
std::string RooFactoryWSTool::processExpression(const char* token)
{
if (string(token).find("$Alias(")==0) {
processAliasExpression(token) ;
}
if (token[0]=='{') {
return processListExpression(token) ;
} else {
return processCompositeExpression(token) ;
}
return string() ;
}
std::string RooFactoryWSTool::processCompositeExpression(const char* token)
{
char* buf_base = new char[strlen(token)+1] ;
char* buf = buf_base ;
strcpy(buf,token) ;
char* p = buf ;
list<string> singleExpr ;
list<char> separator ;
Int_t blevel(0) ;
Bool_t litmode(kFALSE) ;
while(*p) {
if (*p=='{' || *p=='(' || *p=='[') blevel++ ;
if (*p=='}' || *p==')' || *p==']') blevel-- ;
if (*p=='"' || *p=='\'') litmode = !litmode ;
if (!litmode && blevel==0 && ( (*p)=='=' || (*p) == '|' || (*p) == '*')) {
separator.push_back(*p) ;
*p=0 ;
singleExpr.push_back(buf) ;
buf = p+1 ;
}
p++ ;
}
if (*buf) {
singleExpr.push_back(buf) ;
}
if (singleExpr.size()==1) {
string ret = processSingleExpression(token) ;
delete[] buf_base ;
return ret ;
}
string ret ;
list<char>::iterator ic = separator.begin() ;
for (list<string>::iterator ii = singleExpr.begin() ; ii!=singleExpr.end() ; ii++,ic++) {
ret += processSingleExpression(ii->c_str()) ;
if (ic != separator.end()) {
ret += *ic ;
}
}
delete[] buf_base ;
return ret ;
}
std::string RooFactoryWSTool::processSingleExpression(const char* arg)
{
if (strlen(arg)==0) {
return string("") ;
}
if (arg[0]=='\'' || arg[0]=='"') {
return string(arg) ;
}
char* buf = new char[strlen(arg)+1] ;
strcpy(buf,arg) ;
char* bufptr = buf ;
string func,prefix ;
vector<string> args ;
char* save ;
func = strtok_r(buf,"([",&save) ;
char* p = strtok_r(0,"",&save) ;
if (!p) {
delete[] buf ;
return arg ;
}
char* tok = p ;
Int_t blevel=0 ;
Bool_t litmode(kFALSE) ;
while(*p) {
if (*p=='{' || *p=='(' || *p=='[') blevel++ ;
if (*p=='}' || *p==')' || *p==']') blevel-- ;
if (*p=='"' || *p=='\'') litmode = !litmode ;
if (!litmode && blevel==0 && ((*p)==',')) {
*p = 0 ;
args.push_back(tok) ;
tok = p+1 ;
}
p++ ;
}
if (p>bufptr && (*(p-1)==')'||*(p-1)==']')) {
*(p-1)=0 ;
}
string tmp = tok ;
p = strtok_r(0,"",&save) ;
if (p) tmp += p ;
args.push_back(tmp) ;
delete[] buf ;
string ret ;
char lb = ' ' ;
for(const char* pp=arg ; *pp!=0 ; pp++) {
if (*pp=='(' || *pp=='[' || *pp=='{') {
lb = *pp ;
break ;
}
}
if (strstr(func.c_str(),"::")) {
if (lb=='(') {
ret= processCreateArg(func,args) ;
} else {
coutE(ObjectHandling) << "RooFactoryWSTool::processSingleExpression(" << arg << "): ERROR: Syntax error: Class::Instance must be followed by (...)" << endl ;
logError() ;
}
} else if (func[0]!='$'){
if (lb=='[') {
ret= processCreateVar(func,args) ;
} else if (lb=='(') {
string autoname ;
if (!_autoNamePrefix.empty()) {
autoname = (Form("%s::%s",func.c_str(),_autoNamePrefix.top().c_str())) ;
} else {
static Int_t globCounter = 0 ;
while(true) {
autoname = Form("gobj%d",globCounter) ;
globCounter++ ;
if (!ws().arg(autoname.c_str())) {
break ;
}
}
autoname = Form("%s::%s",func.c_str(),autoname.c_str()) ;
}
ret= processCreateArg(autoname,args) ;
} else {
coutE(ObjectHandling) << "RooFactoryWSTool::processSingleExpression(" << arg << "): ERROR: Syntax error: expect either Class(...) or Instance[...]" << endl ;
logError() ;
}
} else {
if (lb=='(') {
ret= processMetaArg(func,args) ;
} else {
coutE(ObjectHandling) << "RooFactoryWSTool::processSingleExpression(" << arg << "): ERROR: Syntax error: $MetaClass must be followed by (...)" << endl ;
logError() ;
}
}
return ret ;
}
string RooFactoryWSTool::processListExpression(const char* arg)
{
char* buf = new char[strlen(arg)+1] ;
strcpy(buf,arg) ;
vector<string> args ;
char* tok = buf+1 ;
char* p = buf+1 ;
Int_t level(0) ;
while(*p) {
if (*p=='{' || *p=='(' || *p=='[') level++ ;
if (*p=='}' || *p==')' || *p==']') level-- ;
if (level==0 && ((*p)==',')) {
*p = 0 ;
args.push_back(tok) ;
tok = p+1 ;
}
p++ ;
}
if (p>buf && *(p-1)=='}') {
*(p-1)=0 ;
}
args.push_back(tok) ;
delete[] buf ;
string ret("{") ;
vector<string>::iterator iter = args.begin() ;
Int_t i(0) ;
while(iter!= args.end()) {
if (strlen(ret.c_str())>1) ret += "," ;
if (!_autoNamePrefix.empty()) {
_autoNamePrefix.push(Form("%s%d",_autoNamePrefix.top().c_str(),i+1)) ;
}
ret += processSingleExpression(iter->c_str()) ;
if (!_autoNamePrefix.empty()) {
_autoNamePrefix.pop() ;
}
iter++ ;
i++ ;
}
ret += "}" ;
return ret ;
}
string RooFactoryWSTool::processAliasExpression(const char* token)
{
vector<string> args = splitFunctionArgs(token) ;
if (args.size()!=2) {
coutE(ObjectHandling) << "RooFactorWSTool::processAliasExpression() ERROR $Alias() takes exactly two arguments, " << args.size() << " args found" << endl ;
logError() ;
return string() ;
}
_typeAliases[args[1]] = args[0] ;
return string() ;
}
TClass* RooFactoryWSTool::resolveClassName(const char* className)
{
while (true) {
map<string,string>::iterator item = _typeAliases.find(className) ;
if (item != _typeAliases.end()) {
className = item->second.c_str() ;
} else {
break ;
}
}
TClass* tc = TClass::GetClass(className,kTRUE,kTRUE) ;
if (!tc) {
tc = TClass::GetClass(Form("Roo%s",className)) ;
if (!tc) {
coutE(ObjectHandling) << "RooFactoryWSTool::createArg() ERROR class " << className << " not defined in ROOT class table" << endl ;
logError() ;
return 0 ;
}
}
return tc ;
}
string RooFactoryWSTool::varTag(string& func, vector<string>& args)
{
string ret ;
ret += func ;
ret += "[" ;
for (vector<string>::iterator iter = args.begin() ; iter!=args.end() ; ++iter) {
if (iter!=args.begin()) {
ret += "," ;
}
ret += *iter ;
}
ret += "]" ;
return ret ;
}
string RooFactoryWSTool::processCreateVar(string& func, vector<string>& args)
{
string first = *(args.begin()) ;
if (isdigit(first[0]) || first[0]=='.' || first[0]=='+' || first[0]=='-') {
vector<string>::iterator ai = args.begin() ;
if (args.size()==1) {
Double_t xinit = atof((ai)->c_str()) ;
cxcoutD(ObjectHandling) << "CREATE variable " << func << " xinit = " << xinit << endl ;
RooRealVar tmp(func.c_str(),func.c_str(),xinit) ;
tmp.setStringAttribute("factory_tag",varTag(func,args).c_str()) ;
if (_ws->import(tmp,Silence())) {
logError() ;
}
} else if (args.size()==2) {
Double_t xlo = atof((ai++)->c_str()) ;
Double_t xhi = atof(ai->c_str()) ;
cxcoutD(ObjectHandling) << "CREATE variable " << func << " xlo = " << xlo << " xhi = " << xhi << endl ;
RooRealVar tmp(func.c_str(),func.c_str(),xlo,xhi) ;
tmp.setStringAttribute("factory_tag",varTag(func,args).c_str()) ;
if (_ws->import(tmp,Silence())) {
logError() ;
}
} else if (args.size()==3) {
Double_t xinit = atof((ai++)->c_str()) ;
Double_t xlo = atof((ai++)->c_str()) ;
Double_t xhi = atof(ai->c_str()) ;
cxcoutD(ObjectHandling) << "CREATE variable " << func << " xinit = " << xinit << " xlo = " << xlo << " xhi = " << xhi << endl ;
RooRealVar tmp(func.c_str(),func.c_str(),xinit,xlo,xhi) ;
tmp.setStringAttribute("factory_tag",varTag(func,args).c_str()) ;
if (_ws->import(tmp,Silence())) {
logError() ;
}
}
} else {
string allStates ;
for (vector<string>::iterator ai = args.begin() ; ai!=args.end() ; ai++) {
if (allStates.size()>0) {
allStates += "," ;
}
allStates += *ai ;
}
createCategory(func.c_str(),allStates.c_str()) ;
}
return func ;
}
string RooFactoryWSTool::processCreateArg(string& func, vector<string>& args)
{
char buf[1024] ;
strcpy(buf,func.c_str()) ;
char* save ;
char *className = strtok_r(buf,":",&save) ;
char *instName = strtok_r(0,":",&save) ;
char pargs[1024] ;
pargs[0] = 0 ;
vector<string>::iterator iter = args.begin() ;
vector<string> pargv ;
Int_t iarg(0) ;
while(iter!=args.end()) {
if (strlen(pargs)>0) strcat(pargs,",") ;
_autoNamePrefix.push(Form("%s_%d",instName,iarg+1)) ;
string tmp = processExpression(iter->c_str()) ;
_autoNamePrefix.pop() ;
strcat(pargs,tmp.c_str()) ;
pargv.push_back(tmp) ;
iter++ ;
iarg++ ;
}
for (map<string,IFace*>::iterator ii=hooks().begin() ; ii!=hooks().end() ; ii++) {
}
if (hooks().find(className) != hooks().end()) {
IFace* iface = hooks()[className] ;
return iface->create(*this, className,instName,pargv) ;
}
createArg(className,instName,pargs) ;
return string(instName) ;
}
std::string RooFactoryWSTool::processMetaArg(std::string& func, std::vector<std::string>& args)
{
char pargs[1024] ;
pargs[0] = 0 ;
vector<string>::iterator iter = args.begin() ;
vector<string> pargv ;
while(iter!=args.end()) {
if (strlen(pargs)>0) strcat(pargs,",") ;
string tmp = processExpression(iter->c_str()) ;
strcat(pargs,tmp.c_str()) ;
pargv.push_back(tmp) ;
iter++ ;
}
string ret = func+"("+pargs+")" ;
return ret ;
}
vector<string> RooFactoryWSTool::splitFunctionArgs(const char* funcExpr)
{
char* buf = new char[strlen(funcExpr)+1] ;
strcpy(buf,funcExpr) ;
char* bufptr = buf ;
string func ;
vector<string> args ;
char* save ;
func = strtok_r(buf,"(",&save) ;
char* p = strtok_r(0,"",&save) ;
if (!p) return args ;
char* tok = p ;
Int_t blevel=0 ;
Bool_t litmode(kFALSE) ;
while(*p) {
if (*p=='{' || *p=='(' || *p=='[') blevel++ ;
if (*p=='}' || *p==')' || *p==']') blevel-- ;
if (*p=='"' || *p=='\'') litmode = !litmode ;
if (!litmode && blevel==0 && ((*p)==',')) {
*p = 0 ;
args.push_back(tok) ;
tok = p+1 ;
}
p++ ;
}
if (p>bufptr && *(p-1)==')') {
*(p-1)=0 ;
}
string tmp = tok ;
p = strtok_r(0,"",&save) ;
if (p) tmp += p ;
args.push_back(tmp) ;
delete[] buf ;
return args ;
}
void RooFactoryWSTool::checkIndex(UInt_t idx)
{
if (idx>_of->_args.size()-1) {
throw string(Form("Need argument number %d, but only %d args are provided",idx,_of->_args.size())) ;
}
}
RooAbsArg& RooFactoryWSTool::asARG(const char* arg)
{
if (arg[0]=='.' || arg[0]=='+' || arg[0] == '-' || isdigit(arg[0])) {
return RooConst(atof(arg)) ;
}
RooAbsArg* rarg = ws().arg(arg) ;
if (!rarg) {
throw string(Form("RooAbsArg named %s not found",arg)) ;
}
return *rarg ;
}
RooAbsReal& RooFactoryWSTool::asFUNC(const char* arg)
{
if (arg[0]=='.' || arg[0]=='+' || arg[0] == '-' || isdigit(arg[0])) {
return RooConst(atof(arg)) ;
}
RooAbsArg* rarg = ws().arg(arg) ;
if (!rarg) {
throw string(Form("RooAbsReal named %s not found",arg)) ;
}
RooAbsReal* real = dynamic_cast<RooAbsReal*>(rarg) ;
if (!real) {
throw string(Form("Object named %s is not of type RooAbsReal",arg)) ;
}
return *real ;
}
RooAbsRealLValue& RooFactoryWSTool::asVARLV(const char* arg)
{
if (arg[0]=='.' || arg[0]=='+' || arg[0] == '-' || isdigit(arg[0])) {
throw string(Form("Numeric literal provided for argument (%s), but lvalue is required",arg)) ;
}
RooAbsArg* rarg = ws().arg(arg) ;
if (!rarg) {
throw string(Form("RooAbsRealLValue named %s not found",arg)) ;
}
RooAbsRealLValue* reallv = dynamic_cast<RooAbsRealLValue*>(rarg) ;
if (!reallv) {
throw string(Form("Object named %s is not of type RooAbsRealLValue",arg)) ;
}
return *reallv ;
}
RooRealVar& RooFactoryWSTool::asVAR(const char* arg)
{
RooRealVar* var = ws().var(arg) ;
if (!var) {
throw string(Form("RooRealVar named %s not found",arg)) ;
}
return *var ;
}
RooAbsPdf& RooFactoryWSTool::asPDF(const char* arg)
{
RooAbsPdf* pdf = ws().pdf(arg) ;
if (!pdf) {
throw string(Form("RooAbsPdf named %s not found",arg)) ;
}
return *pdf ;
}
RooResolutionModel& RooFactoryWSTool::asRMODEL(const char* arg)
{
RooAbsArg* rarg = ws().arg(arg) ;
if (!rarg) {
throw string(Form("RooResolutionModel named %s not found",arg)) ;
}
RooResolutionModel * rmodel = dynamic_cast<RooResolutionModel*>(rarg) ;
if (!rmodel) {
throw string(Form("Object named %s is not of type RooResolutionModel",arg)) ;
}
return *rmodel ;
}
RooAbsCategory& RooFactoryWSTool::asCATFUNC(const char* arg)
{
RooAbsArg* rarg = ws().arg(arg) ;
if (!rarg) {
throw string(Form("RooAbsCategory named %s not found",arg)) ;
}
RooAbsCategory* catf = dynamic_cast<RooAbsCategory*>(rarg) ;
if (!catf) {
throw string(Form("Object named %s is not of type RooAbsCategory",arg)) ;
}
return *catf ;
}
RooAbsCategoryLValue& RooFactoryWSTool::asCATLV(const char* arg)
{
RooAbsArg* rarg = ws().arg(arg) ;
if (!rarg) {
throw string(Form("RooAbsCategoryLValue named %s not found",arg)) ;
}
RooAbsCategoryLValue* catlv = dynamic_cast<RooAbsCategoryLValue*>(rarg) ;
if (!catlv) {
throw string(Form("Object named %s is not of type RooAbsCategoryLValue",arg)) ;
}
return *catlv ;
}
RooCategory& RooFactoryWSTool::asCAT(const char* arg)
{
RooCategory* cat = ws().cat(arg) ;
if (!cat) {
throw string(Form("RooCategory named %s not found",arg)) ;
}
return *cat ;
}
RooArgSet RooFactoryWSTool::asSET(const char* arg)
{
char tmp[1024] ;
strcpy(tmp,arg) ;
RooArgSet s ;
char* save ;
char* tok = strtok_r(tmp,",{}",&save) ;
while(tok) {
if (tok[0]=='.' || tok[0]=='+' || tok[0] == '-' || isdigit(tok[0])) {
s.add(RooConst(atof(tok))) ;
} else {
RooAbsArg* aarg = ws().arg(tok) ;
if (aarg) {
s.add(*aarg) ;
} else {
throw string(Form("RooAbsArg named %s not found",tok)) ;
}
}
tok = strtok_r(0,",{}",&save) ;
}
return s ;
}
RooArgList RooFactoryWSTool::asLIST(const char* arg)
{
char tmp[1024] ;
strcpy(tmp,arg) ;
RooArgList l ;
char* save ;
char* tok = strtok_r(tmp,",{}",&save) ;
while(tok) {
if (tok[0]=='.' || tok[0]=='+' || tok[0] == '-' || isdigit(tok[0])) {
l.add(RooConst(atof(tok))) ;
} else {
RooAbsArg* aarg = ws().arg(tok) ;
if (aarg) {
l.add(*aarg) ;
} else {
throw string(Form("RooAbsArg named %s not found",tok)) ;
}
}
tok = strtok_r(0,",{}",&save) ;
}
return l ;
}
RooAbsData& RooFactoryWSTool::asDATA(const char* arg)
{
RooAbsData* data = ws().data(arg) ;
if (!data) {
throw string(Form("RooAbsData named %s not found",arg)) ;
}
return *data ;
}
RooDataHist& RooFactoryWSTool::asDHIST(const char* arg)
{
RooAbsData* data = ws().data(arg) ;
if (!data) {
throw string(Form("RooAbsData named %s not found",arg)) ;
}
RooDataHist* hist = dynamic_cast<RooDataHist*>(data) ;
if (!hist) {
throw string(Form("Dataset named %s is not of type RooDataHist",arg)) ;
}
return *hist ;
}
RooDataSet& RooFactoryWSTool::asDSET(const char* arg)
{
RooAbsData* data = ws().data(arg) ;
if (!data) {
throw string(Form("RooAbsData named %s not found",arg)) ;
}
RooDataSet* dset = dynamic_cast<RooDataSet*>(data) ;
if (!dset) {
throw string(Form("Dataset named %s is not of type RooDataSet",arg)) ;
}
return *dset ;
}
TObject& RooFactoryWSTool::asOBJ(const char* arg)
{
TObject* obj = ws().obj(arg) ;
if (!obj) {
throw string(Form("Object named %s not found",arg)) ;
}
return *obj ;
}
const char* RooFactoryWSTool::asSTRING(const char* arg)
{
static vector<string> cbuf(10) ;
static unsigned int cbuf_idx = 0 ;
if (arg==0 || strlen(arg)==0) {
return 0 ;
}
cbuf[cbuf_idx].clear() ;
const char* p = arg+1 ;
while(*p && (*p) != '"' && (*p) !='\'' ) {
cbuf[cbuf_idx] += *(p++) ;
}
const char* ret = cbuf[cbuf_idx].c_str() ;
cbuf_idx++ ;
if (cbuf_idx==cbuf.size()) cbuf_idx=0 ;
return ret ;
}
Int_t RooFactoryWSTool::asINT(const char* arg)
{
return atoi(arg) ;
}
Double_t RooFactoryWSTool::asDOUBLE(const char* arg)
{
return atof(arg) ;
}
void RooFactoryWSTool::registerSpecial(const char* typeName, RooFactoryWSTool::IFace* iface)
{
hooks()[typeName] = iface ;
}
std::map<std::string,RooFactoryWSTool::IFace*>& RooFactoryWSTool::hooks()
{
if (_hooks) return *_hooks ;
_hooks = new map<string,IFace*> ;
return *_hooks ;
}
std::string RooFactoryWSTool::SpecialsIFace::create(RooFactoryWSTool& ft, const char* typeName, const char* instName, std::vector<std::string> args)
{
char pargs[1024] ;
pargs[0] = 0 ;
vector<string>::iterator iter = args.begin() ;
vector<string> pargv ;
while(iter!=args.end()) {
if (strlen(pargs)>0) strcat(pargs,",") ;
string tmp = ft.processExpression(iter->c_str()) ;
strcat(pargs,tmp.c_str()) ;
pargv.push_back(tmp) ;
iter++ ;
}
string cl(typeName) ;
if (cl=="SUM") {
ft.add(instName,pargs,kFALSE) ;
} else if (cl=="RSUM") {
ft.add(instName,pargs,kTRUE) ;
} else if (cl=="ASUM") {
ft.amplAdd(instName,pargs) ;
} else if (cl=="PROD") {
ft.prod(instName,pargs) ;
} else if (cl=="SIMUL") {
if (pargv.size()>1) {
ft.simul(instName,pargv[0].c_str(),strchr(pargs,',')+1) ;
} else {
throw string(Form("Need at least two arguments in call to SIMUL::%s, have %d: %s",instName,pargv.size(),pargs)) ;
}
} else if (cl=="EXPR") {
if (args.size()<=2) {
ft.createArg("RooGenericPdf",instName,pargs) ;
} else {
char genargs[1024] ;
strcpy(genargs,args[0].c_str()) ;
strcat(genargs,",{") ;
for (UInt_t i=1 ; i<args.size() ; i++) {
if (i!=1) strcat(genargs,",") ;
strcat(genargs,args[i].c_str()) ;
}
strcat(genargs,"}") ;
ft.createArg("RooGenericPdf",instName,genargs) ;
}
} else if (cl=="FCONV") {
ft.createArg("RooFFTConvPdf",instName,pargs) ;
} else if (cl=="NCONV") {
ft.createArg("RooNumConvPdf",instName,pargs) ;
} else if (cl=="sum") {
ft.addfunc(instName,pargs) ;
} else if (cl=="prod") {
ft.prodfunc(instName,pargs) ;
} else if (cl=="expr") {
if (args.size()<=2) {
ft.createArg("RooFormulaVar",instName,pargs) ;
} else {
char genargs[1024] ;
strcpy(genargs,args[0].c_str()) ;
strcat(genargs,",{") ;
for (UInt_t i=1 ; i<args.size() ; i++) {
if (i!=1) strcat(genargs,",") ;
strcat(genargs,args[i].c_str()) ;
}
strcat(genargs,"}") ;
ft.createArg("RooFormulaVar",instName,genargs) ;
}
} else if (cl=="nconv") {
ft.createArg("RooNumConvolution",instName,pargs) ;
} else if (cl=="nll") {
RooNLLVar nll(instName,instName,ft.asPDF(pargv[0].c_str()),ft.asDATA(pargv[1].c_str())) ;
if (ft.ws().import(nll,Silence())) ft.logError() ;
} else if (cl=="chi2") {
RooChi2Var nll(instName,instName,ft.asPDF(pargv[0].c_str()),ft.asDHIST(pargv[1].c_str())) ;
if (ft.ws().import(nll,Silence())) ft.logError() ;
} else if (cl=="profile") {
ft.createArg("RooProfileLL",instName,pargs) ;
} else if (cl=="dataobs") {
RooAbsArg* funcClone = static_cast<RooAbsArg*>(ft.asARG(pargv[1].c_str()).clone(instName)) ;
RooAbsArg* arg = ft.asDSET(pargv[0].c_str()).addColumn(*funcClone) ;
if (!ft.ws().fundArg(arg->GetName())) {
if (ft.ws().import(*arg,Silence())) ft.logError() ;
}
delete funcClone ;
} else if (cl=="int") {
if (pargv.size()<2 || pargv.size()>3) {
throw string(Form("int::%s, requires 2 or 3 arguments, have %d arguments",instName,pargv.size())) ;
}
RooAbsReal& func = ft.asFUNC(pargv[0].c_str()) ;
char buf[256] ;
strcpy(buf,pargv[1].c_str()) ;
char* save ;
char* intobs = strtok_r(buf,"|",&save) ;
char* range = strtok_r(0,"",&save) ;
RooAbsReal* integral = 0 ;
if (pargv.size()==2) {
if (range) {
integral = func.createIntegral(ft.asSET(intobs),Range(range)) ;
} else {
integral = func.createIntegral(ft.asSET(intobs)) ;
}
} else {
if (range) {
integral = func.createIntegral(ft.asSET(intobs),Range(range),NormSet(ft.asSET(pargv[2].c_str()))) ;
} else {
integral = func.createIntegral(ft.asSET(intobs),NormSet(ft.asSET(pargv[2].c_str()))) ;
}
}
integral->SetName(instName) ;
if (ft.ws().import(*integral,Silence())) ft.logError() ;
} else if (cl=="deriv") {
if (pargv.size()<2 || pargv.size()>3) {
throw string(Form("deriv::%s, requires 2 or 3 arguments, have %d arguments",instName,pargv.size())) ;
}
RooAbsReal& func = ft.asFUNC(pargv[0].c_str()) ;
RooAbsReal* derivative(0) ;
if (pargv.size()==2) {
derivative = func.derivative(ft.asVAR(pargv[1].c_str()),1) ;
} else {
derivative = func.derivative(ft.asVAR(pargv[1].c_str()),ft.asINT(pargv[2].c_str())) ;
}
derivative->SetName(instName) ;
if (ft.ws().import(*derivative,Silence())) ft.logError() ;
} else if (cl=="cdf") {
if (pargv.size()<2 || pargv.size()>3) {
throw string(Form("cdf::%s, requires 2 or 3 arguments, have %d arguments",instName,pargv.size())) ;
}
RooAbsPdf& pdf = ft.asPDF(pargv[0].c_str()) ;
RooAbsReal* cdf(0) ;
if (pargv.size()==2) {
cdf = pdf.createCdf(ft.asSET(pargv[1].c_str())) ;
} else {
cdf = pdf.createCdf(ft.asSET(pargv[1].c_str()),ft.asSET(pargv[2].c_str())) ;
}
cdf->SetName(instName) ;
if (ft.ws().import(*cdf,Silence())) ft.logError() ;
} else if (cl=="PROJ") {
if (pargv.size()!=2) {
throw string(Form("PROJ::%s, requires 2 arguments, have %d arguments",instName,pargv.size())) ;
}
RooAbsPdf& pdf = ft.asPDF(pargv[0].c_str()) ;
RooAbsPdf* projection = pdf.createProjection(ft.asSET(pargv[1].c_str())) ;
projection->SetName(instName) ;
if (ft.ws().import(*projection,Silence())) ft.logError() ;
} else {
throw string(Form("RooFactoryWSTool::SpecialsIFace::create() ERROR: Unknown meta-type %s",typeName)) ;
}
return string(instName) ;
}
RooFactoryWSTool.cxx:1000 RooFactoryWSTool.cxx:1001 RooFactoryWSTool.cxx:1002 RooFactoryWSTool.cxx:1003 RooFactoryWSTool.cxx:1004 RooFactoryWSTool.cxx:1005 RooFactoryWSTool.cxx:1006 RooFactoryWSTool.cxx:1007 RooFactoryWSTool.cxx:1008 RooFactoryWSTool.cxx:1009 RooFactoryWSTool.cxx:1010 RooFactoryWSTool.cxx:1011 RooFactoryWSTool.cxx:1012 RooFactoryWSTool.cxx:1013 RooFactoryWSTool.cxx:1014 RooFactoryWSTool.cxx:1015 RooFactoryWSTool.cxx:1016 RooFactoryWSTool.cxx:1017 RooFactoryWSTool.cxx:1018 RooFactoryWSTool.cxx:1019 RooFactoryWSTool.cxx:1020 RooFactoryWSTool.cxx:1021 RooFactoryWSTool.cxx:1022 RooFactoryWSTool.cxx:1023 RooFactoryWSTool.cxx:1024 RooFactoryWSTool.cxx:1025 RooFactoryWSTool.cxx:1026 RooFactoryWSTool.cxx:1027 RooFactoryWSTool.cxx:1028 RooFactoryWSTool.cxx:1029 RooFactoryWSTool.cxx:1030 RooFactoryWSTool.cxx:1031 RooFactoryWSTool.cxx:1032 RooFactoryWSTool.cxx:1033 RooFactoryWSTool.cxx:1034 RooFactoryWSTool.cxx:1035 RooFactoryWSTool.cxx:1036 RooFactoryWSTool.cxx:1037 RooFactoryWSTool.cxx:1038 RooFactoryWSTool.cxx:1039 RooFactoryWSTool.cxx:1040 RooFactoryWSTool.cxx:1041 RooFactoryWSTool.cxx:1042 RooFactoryWSTool.cxx:1043 RooFactoryWSTool.cxx:1044 RooFactoryWSTool.cxx:1045 RooFactoryWSTool.cxx:1046 RooFactoryWSTool.cxx:1047 RooFactoryWSTool.cxx:1048 RooFactoryWSTool.cxx:1049 RooFactoryWSTool.cxx:1050 RooFactoryWSTool.cxx:1051 RooFactoryWSTool.cxx:1052 RooFactoryWSTool.cxx:1053 RooFactoryWSTool.cxx:1054 RooFactoryWSTool.cxx:1055 RooFactoryWSTool.cxx:1056 RooFactoryWSTool.cxx:1057 RooFactoryWSTool.cxx:1058 RooFactoryWSTool.cxx:1059 RooFactoryWSTool.cxx:1060 RooFactoryWSTool.cxx:1061 RooFactoryWSTool.cxx:1062 RooFactoryWSTool.cxx:1063 RooFactoryWSTool.cxx:1064 RooFactoryWSTool.cxx:1065 RooFactoryWSTool.cxx:1066 RooFactoryWSTool.cxx:1067 RooFactoryWSTool.cxx:1068 RooFactoryWSTool.cxx:1069 RooFactoryWSTool.cxx:1070 RooFactoryWSTool.cxx:1071 RooFactoryWSTool.cxx:1072 RooFactoryWSTool.cxx:1073 RooFactoryWSTool.cxx:1074 RooFactoryWSTool.cxx:1075 RooFactoryWSTool.cxx:1076 RooFactoryWSTool.cxx:1077 RooFactoryWSTool.cxx:1078 RooFactoryWSTool.cxx:1079 RooFactoryWSTool.cxx:1080 RooFactoryWSTool.cxx:1081 RooFactoryWSTool.cxx:1082 RooFactoryWSTool.cxx:1083 RooFactoryWSTool.cxx:1084 RooFactoryWSTool.cxx:1085 RooFactoryWSTool.cxx:1086 RooFactoryWSTool.cxx:1087 RooFactoryWSTool.cxx:1088 RooFactoryWSTool.cxx:1089 RooFactoryWSTool.cxx:1090 RooFactoryWSTool.cxx:1091 RooFactoryWSTool.cxx:1092 RooFactoryWSTool.cxx:1093 RooFactoryWSTool.cxx:1094 RooFactoryWSTool.cxx:1095 RooFactoryWSTool.cxx:1096 RooFactoryWSTool.cxx:1097 RooFactoryWSTool.cxx:1098 RooFactoryWSTool.cxx:1099 RooFactoryWSTool.cxx:1100 RooFactoryWSTool.cxx:1101 RooFactoryWSTool.cxx:1102 RooFactoryWSTool.cxx:1103 RooFactoryWSTool.cxx:1104 RooFactoryWSTool.cxx:1105 RooFactoryWSTool.cxx:1106 RooFactoryWSTool.cxx:1107 RooFactoryWSTool.cxx:1108 RooFactoryWSTool.cxx:1109 RooFactoryWSTool.cxx:1110 RooFactoryWSTool.cxx:1111 RooFactoryWSTool.cxx:1112 RooFactoryWSTool.cxx:1113 RooFactoryWSTool.cxx:1114 RooFactoryWSTool.cxx:1115 RooFactoryWSTool.cxx:1116 RooFactoryWSTool.cxx:1117 RooFactoryWSTool.cxx:1118 RooFactoryWSTool.cxx:1119 RooFactoryWSTool.cxx:1120 RooFactoryWSTool.cxx:1121 RooFactoryWSTool.cxx:1122 RooFactoryWSTool.cxx:1123 RooFactoryWSTool.cxx:1124 RooFactoryWSTool.cxx:1125 RooFactoryWSTool.cxx:1126 RooFactoryWSTool.cxx:1127 RooFactoryWSTool.cxx:1128 RooFactoryWSTool.cxx:1129 RooFactoryWSTool.cxx:1130 RooFactoryWSTool.cxx:1131 RooFactoryWSTool.cxx:1132 RooFactoryWSTool.cxx:1133 RooFactoryWSTool.cxx:1134 RooFactoryWSTool.cxx:1135 RooFactoryWSTool.cxx:1136 RooFactoryWSTool.cxx:1137 RooFactoryWSTool.cxx:1138 RooFactoryWSTool.cxx:1139 RooFactoryWSTool.cxx:1140 RooFactoryWSTool.cxx:1141 RooFactoryWSTool.cxx:1142 RooFactoryWSTool.cxx:1143 RooFactoryWSTool.cxx:1144 RooFactoryWSTool.cxx:1145 RooFactoryWSTool.cxx:1146 RooFactoryWSTool.cxx:1147 RooFactoryWSTool.cxx:1148 RooFactoryWSTool.cxx:1149 RooFactoryWSTool.cxx:1150 RooFactoryWSTool.cxx:1151 RooFactoryWSTool.cxx:1152 RooFactoryWSTool.cxx:1153 RooFactoryWSTool.cxx:1154 RooFactoryWSTool.cxx:1155 RooFactoryWSTool.cxx:1156 RooFactoryWSTool.cxx:1157 RooFactoryWSTool.cxx:1158 RooFactoryWSTool.cxx:1159 RooFactoryWSTool.cxx:1160 RooFactoryWSTool.cxx:1161 RooFactoryWSTool.cxx:1162 RooFactoryWSTool.cxx:1163 RooFactoryWSTool.cxx:1164 RooFactoryWSTool.cxx:1165 RooFactoryWSTool.cxx:1166 RooFactoryWSTool.cxx:1167 RooFactoryWSTool.cxx:1168 RooFactoryWSTool.cxx:1169 RooFactoryWSTool.cxx:1170 RooFactoryWSTool.cxx:1171 RooFactoryWSTool.cxx:1172 RooFactoryWSTool.cxx:1173 RooFactoryWSTool.cxx:1174 RooFactoryWSTool.cxx:1175 RooFactoryWSTool.cxx:1176 RooFactoryWSTool.cxx:1177 RooFactoryWSTool.cxx:1178 RooFactoryWSTool.cxx:1179 RooFactoryWSTool.cxx:1180 RooFactoryWSTool.cxx:1181 RooFactoryWSTool.cxx:1182 RooFactoryWSTool.cxx:1183 RooFactoryWSTool.cxx:1184 RooFactoryWSTool.cxx:1185 RooFactoryWSTool.cxx:1186 RooFactoryWSTool.cxx:1187 RooFactoryWSTool.cxx:1188 RooFactoryWSTool.cxx:1189 RooFactoryWSTool.cxx:1190 RooFactoryWSTool.cxx:1191 RooFactoryWSTool.cxx:1192 RooFactoryWSTool.cxx:1193 RooFactoryWSTool.cxx:1194 RooFactoryWSTool.cxx:1195 RooFactoryWSTool.cxx:1196 RooFactoryWSTool.cxx:1197 RooFactoryWSTool.cxx:1198 RooFactoryWSTool.cxx:1199 RooFactoryWSTool.cxx:1200 RooFactoryWSTool.cxx:1201 RooFactoryWSTool.cxx:1202 RooFactoryWSTool.cxx:1203 RooFactoryWSTool.cxx:1204 RooFactoryWSTool.cxx:1205 RooFactoryWSTool.cxx:1206 RooFactoryWSTool.cxx:1207 RooFactoryWSTool.cxx:1208 RooFactoryWSTool.cxx:1209 RooFactoryWSTool.cxx:1210 RooFactoryWSTool.cxx:1211 RooFactoryWSTool.cxx:1212 RooFactoryWSTool.cxx:1213 RooFactoryWSTool.cxx:1214 RooFactoryWSTool.cxx:1215 RooFactoryWSTool.cxx:1216 RooFactoryWSTool.cxx:1217 RooFactoryWSTool.cxx:1218 RooFactoryWSTool.cxx:1219 RooFactoryWSTool.cxx:1220 RooFactoryWSTool.cxx:1221 RooFactoryWSTool.cxx:1222 RooFactoryWSTool.cxx:1223 RooFactoryWSTool.cxx:1224 RooFactoryWSTool.cxx:1225 RooFactoryWSTool.cxx:1226 RooFactoryWSTool.cxx:1227 RooFactoryWSTool.cxx:1228 RooFactoryWSTool.cxx:1229 RooFactoryWSTool.cxx:1230 RooFactoryWSTool.cxx:1231 RooFactoryWSTool.cxx:1232 RooFactoryWSTool.cxx:1233 RooFactoryWSTool.cxx:1234 RooFactoryWSTool.cxx:1235 RooFactoryWSTool.cxx:1236 RooFactoryWSTool.cxx:1237 RooFactoryWSTool.cxx:1238 RooFactoryWSTool.cxx:1239 RooFactoryWSTool.cxx:1240 RooFactoryWSTool.cxx:1241 RooFactoryWSTool.cxx:1242 RooFactoryWSTool.cxx:1243 RooFactoryWSTool.cxx:1244 RooFactoryWSTool.cxx:1245 RooFactoryWSTool.cxx:1246 RooFactoryWSTool.cxx:1247 RooFactoryWSTool.cxx:1248 RooFactoryWSTool.cxx:1249 RooFactoryWSTool.cxx:1250 RooFactoryWSTool.cxx:1251 RooFactoryWSTool.cxx:1252 RooFactoryWSTool.cxx:1253 RooFactoryWSTool.cxx:1254 RooFactoryWSTool.cxx:1255 RooFactoryWSTool.cxx:1256 RooFactoryWSTool.cxx:1257 RooFactoryWSTool.cxx:1258 RooFactoryWSTool.cxx:1259 RooFactoryWSTool.cxx:1260 RooFactoryWSTool.cxx:1261 RooFactoryWSTool.cxx:1262 RooFactoryWSTool.cxx:1263 RooFactoryWSTool.cxx:1264 RooFactoryWSTool.cxx:1265 RooFactoryWSTool.cxx:1266 RooFactoryWSTool.cxx:1267 RooFactoryWSTool.cxx:1268 RooFactoryWSTool.cxx:1269 RooFactoryWSTool.cxx:1270 RooFactoryWSTool.cxx:1271 RooFactoryWSTool.cxx:1272 RooFactoryWSTool.cxx:1273 RooFactoryWSTool.cxx:1274 RooFactoryWSTool.cxx:1275 RooFactoryWSTool.cxx:1276 RooFactoryWSTool.cxx:1277 RooFactoryWSTool.cxx:1278 RooFactoryWSTool.cxx:1279 RooFactoryWSTool.cxx:1280 RooFactoryWSTool.cxx:1281 RooFactoryWSTool.cxx:1282 RooFactoryWSTool.cxx:1283 RooFactoryWSTool.cxx:1284 RooFactoryWSTool.cxx:1285 RooFactoryWSTool.cxx:1286 RooFactoryWSTool.cxx:1287 RooFactoryWSTool.cxx:1288 RooFactoryWSTool.cxx:1289 RooFactoryWSTool.cxx:1290 RooFactoryWSTool.cxx:1291 RooFactoryWSTool.cxx:1292 RooFactoryWSTool.cxx:1293 RooFactoryWSTool.cxx:1294 RooFactoryWSTool.cxx:1295 RooFactoryWSTool.cxx:1296 RooFactoryWSTool.cxx:1297 RooFactoryWSTool.cxx:1298 RooFactoryWSTool.cxx:1299 RooFactoryWSTool.cxx:1300 RooFactoryWSTool.cxx:1301 RooFactoryWSTool.cxx:1302 RooFactoryWSTool.cxx:1303 RooFactoryWSTool.cxx:1304 RooFactoryWSTool.cxx:1305 RooFactoryWSTool.cxx:1306 RooFactoryWSTool.cxx:1307 RooFactoryWSTool.cxx:1308 RooFactoryWSTool.cxx:1309 RooFactoryWSTool.cxx:1310 RooFactoryWSTool.cxx:1311 RooFactoryWSTool.cxx:1312 RooFactoryWSTool.cxx:1313 RooFactoryWSTool.cxx:1314 RooFactoryWSTool.cxx:1315 RooFactoryWSTool.cxx:1316 RooFactoryWSTool.cxx:1317 RooFactoryWSTool.cxx:1318 RooFactoryWSTool.cxx:1319 RooFactoryWSTool.cxx:1320 RooFactoryWSTool.cxx:1321 RooFactoryWSTool.cxx:1322 RooFactoryWSTool.cxx:1323 RooFactoryWSTool.cxx:1324 RooFactoryWSTool.cxx:1325 RooFactoryWSTool.cxx:1326 RooFactoryWSTool.cxx:1327 RooFactoryWSTool.cxx:1328 RooFactoryWSTool.cxx:1329 RooFactoryWSTool.cxx:1330 RooFactoryWSTool.cxx:1331 RooFactoryWSTool.cxx:1332 RooFactoryWSTool.cxx:1333 RooFactoryWSTool.cxx:1334 RooFactoryWSTool.cxx:1335 RooFactoryWSTool.cxx:1336 RooFactoryWSTool.cxx:1337 RooFactoryWSTool.cxx:1338 RooFactoryWSTool.cxx:1339 RooFactoryWSTool.cxx:1340 RooFactoryWSTool.cxx:1341 RooFactoryWSTool.cxx:1342 RooFactoryWSTool.cxx:1343 RooFactoryWSTool.cxx:1344 RooFactoryWSTool.cxx:1345 RooFactoryWSTool.cxx:1346 RooFactoryWSTool.cxx:1347 RooFactoryWSTool.cxx:1348 RooFactoryWSTool.cxx:1349 RooFactoryWSTool.cxx:1350 RooFactoryWSTool.cxx:1351 RooFactoryWSTool.cxx:1352 RooFactoryWSTool.cxx:1353 RooFactoryWSTool.cxx:1354 RooFactoryWSTool.cxx:1355 RooFactoryWSTool.cxx:1356 RooFactoryWSTool.cxx:1357 RooFactoryWSTool.cxx:1358 RooFactoryWSTool.cxx:1359 RooFactoryWSTool.cxx:1360 RooFactoryWSTool.cxx:1361 RooFactoryWSTool.cxx:1362 RooFactoryWSTool.cxx:1363 RooFactoryWSTool.cxx:1364 RooFactoryWSTool.cxx:1365 RooFactoryWSTool.cxx:1366 RooFactoryWSTool.cxx:1367 RooFactoryWSTool.cxx:1368 RooFactoryWSTool.cxx:1369 RooFactoryWSTool.cxx:1370 RooFactoryWSTool.cxx:1371 RooFactoryWSTool.cxx:1372 RooFactoryWSTool.cxx:1373 RooFactoryWSTool.cxx:1374 RooFactoryWSTool.cxx:1375 RooFactoryWSTool.cxx:1376 RooFactoryWSTool.cxx:1377 RooFactoryWSTool.cxx:1378 RooFactoryWSTool.cxx:1379 RooFactoryWSTool.cxx:1380 RooFactoryWSTool.cxx:1381 RooFactoryWSTool.cxx:1382 RooFactoryWSTool.cxx:1383 RooFactoryWSTool.cxx:1384 RooFactoryWSTool.cxx:1385 RooFactoryWSTool.cxx:1386 RooFactoryWSTool.cxx:1387 RooFactoryWSTool.cxx:1388 RooFactoryWSTool.cxx:1389 RooFactoryWSTool.cxx:1390 RooFactoryWSTool.cxx:1391 RooFactoryWSTool.cxx:1392 RooFactoryWSTool.cxx:1393 RooFactoryWSTool.cxx:1394 RooFactoryWSTool.cxx:1395 RooFactoryWSTool.cxx:1396 RooFactoryWSTool.cxx:1397 RooFactoryWSTool.cxx:1398 RooFactoryWSTool.cxx:1399 RooFactoryWSTool.cxx:1400 RooFactoryWSTool.cxx:1401 RooFactoryWSTool.cxx:1402 RooFactoryWSTool.cxx:1403 RooFactoryWSTool.cxx:1404 RooFactoryWSTool.cxx:1405 RooFactoryWSTool.cxx:1406 RooFactoryWSTool.cxx:1407 RooFactoryWSTool.cxx:1408 RooFactoryWSTool.cxx:1409 RooFactoryWSTool.cxx:1410 RooFactoryWSTool.cxx:1411 RooFactoryWSTool.cxx:1412 RooFactoryWSTool.cxx:1413 RooFactoryWSTool.cxx:1414 RooFactoryWSTool.cxx:1415 RooFactoryWSTool.cxx:1416 RooFactoryWSTool.cxx:1417 RooFactoryWSTool.cxx:1418 RooFactoryWSTool.cxx:1419 RooFactoryWSTool.cxx:1420 RooFactoryWSTool.cxx:1421 RooFactoryWSTool.cxx:1422 RooFactoryWSTool.cxx:1423 RooFactoryWSTool.cxx:1424 RooFactoryWSTool.cxx:1425 RooFactoryWSTool.cxx:1426 RooFactoryWSTool.cxx:1427 RooFactoryWSTool.cxx:1428 RooFactoryWSTool.cxx:1429 RooFactoryWSTool.cxx:1430 RooFactoryWSTool.cxx:1431 RooFactoryWSTool.cxx:1432 RooFactoryWSTool.cxx:1433 RooFactoryWSTool.cxx:1434 RooFactoryWSTool.cxx:1435 RooFactoryWSTool.cxx:1436 RooFactoryWSTool.cxx:1437 RooFactoryWSTool.cxx:1438 RooFactoryWSTool.cxx:1439 RooFactoryWSTool.cxx:1440 RooFactoryWSTool.cxx:1441 RooFactoryWSTool.cxx:1442 RooFactoryWSTool.cxx:1443 RooFactoryWSTool.cxx:1444 RooFactoryWSTool.cxx:1445 RooFactoryWSTool.cxx:1446 RooFactoryWSTool.cxx:1447 RooFactoryWSTool.cxx:1448 RooFactoryWSTool.cxx:1449 RooFactoryWSTool.cxx:1450 RooFactoryWSTool.cxx:1451 RooFactoryWSTool.cxx:1452 RooFactoryWSTool.cxx:1453 RooFactoryWSTool.cxx:1454 RooFactoryWSTool.cxx:1455 RooFactoryWSTool.cxx:1456 RooFactoryWSTool.cxx:1457 RooFactoryWSTool.cxx:1458 RooFactoryWSTool.cxx:1459 RooFactoryWSTool.cxx:1460 RooFactoryWSTool.cxx:1461 RooFactoryWSTool.cxx:1462 RooFactoryWSTool.cxx:1463 RooFactoryWSTool.cxx:1464 RooFactoryWSTool.cxx:1465 RooFactoryWSTool.cxx:1466 RooFactoryWSTool.cxx:1467 RooFactoryWSTool.cxx:1468 RooFactoryWSTool.cxx:1469 RooFactoryWSTool.cxx:1470 RooFactoryWSTool.cxx:1471 RooFactoryWSTool.cxx:1472 RooFactoryWSTool.cxx:1473 RooFactoryWSTool.cxx:1474 RooFactoryWSTool.cxx:1475 RooFactoryWSTool.cxx:1476 RooFactoryWSTool.cxx:1477 RooFactoryWSTool.cxx:1478 RooFactoryWSTool.cxx:1479 RooFactoryWSTool.cxx:1480 RooFactoryWSTool.cxx:1481 RooFactoryWSTool.cxx:1482 RooFactoryWSTool.cxx:1483 RooFactoryWSTool.cxx:1484 RooFactoryWSTool.cxx:1485 RooFactoryWSTool.cxx:1486 RooFactoryWSTool.cxx:1487 RooFactoryWSTool.cxx:1488 RooFactoryWSTool.cxx:1489 RooFactoryWSTool.cxx:1490 RooFactoryWSTool.cxx:1491 RooFactoryWSTool.cxx:1492 RooFactoryWSTool.cxx:1493 RooFactoryWSTool.cxx:1494 RooFactoryWSTool.cxx:1495 RooFactoryWSTool.cxx:1496 RooFactoryWSTool.cxx:1497 RooFactoryWSTool.cxx:1498 RooFactoryWSTool.cxx:1499 RooFactoryWSTool.cxx:1500 RooFactoryWSTool.cxx:1501 RooFactoryWSTool.cxx:1502 RooFactoryWSTool.cxx:1503 RooFactoryWSTool.cxx:1504 RooFactoryWSTool.cxx:1505 RooFactoryWSTool.cxx:1506 RooFactoryWSTool.cxx:1507 RooFactoryWSTool.cxx:1508 RooFactoryWSTool.cxx:1509 RooFactoryWSTool.cxx:1510 RooFactoryWSTool.cxx:1511 RooFactoryWSTool.cxx:1512 RooFactoryWSTool.cxx:1513 RooFactoryWSTool.cxx:1514 RooFactoryWSTool.cxx:1515 RooFactoryWSTool.cxx:1516 RooFactoryWSTool.cxx:1517 RooFactoryWSTool.cxx:1518 RooFactoryWSTool.cxx:1519 RooFactoryWSTool.cxx:1520 RooFactoryWSTool.cxx:1521 RooFactoryWSTool.cxx:1522 RooFactoryWSTool.cxx:1523 RooFactoryWSTool.cxx:1524 RooFactoryWSTool.cxx:1525 RooFactoryWSTool.cxx:1526 RooFactoryWSTool.cxx:1527 RooFactoryWSTool.cxx:1528 RooFactoryWSTool.cxx:1529 RooFactoryWSTool.cxx:1530 RooFactoryWSTool.cxx:1531 RooFactoryWSTool.cxx:1532 RooFactoryWSTool.cxx:1533 RooFactoryWSTool.cxx:1534 RooFactoryWSTool.cxx:1535 RooFactoryWSTool.cxx:1536 RooFactoryWSTool.cxx:1537 RooFactoryWSTool.cxx:1538 RooFactoryWSTool.cxx:1539 RooFactoryWSTool.cxx:1540 RooFactoryWSTool.cxx:1541 RooFactoryWSTool.cxx:1542 RooFactoryWSTool.cxx:1543 RooFactoryWSTool.cxx:1544 RooFactoryWSTool.cxx:1545 RooFactoryWSTool.cxx:1546 RooFactoryWSTool.cxx:1547 RooFactoryWSTool.cxx:1548 RooFactoryWSTool.cxx:1549 RooFactoryWSTool.cxx:1550 RooFactoryWSTool.cxx:1551 RooFactoryWSTool.cxx:1552 RooFactoryWSTool.cxx:1553 RooFactoryWSTool.cxx:1554 RooFactoryWSTool.cxx:1555 RooFactoryWSTool.cxx:1556 RooFactoryWSTool.cxx:1557 RooFactoryWSTool.cxx:1558 RooFactoryWSTool.cxx:1559 RooFactoryWSTool.cxx:1560 RooFactoryWSTool.cxx:1561 RooFactoryWSTool.cxx:1562 RooFactoryWSTool.cxx:1563 RooFactoryWSTool.cxx:1564 RooFactoryWSTool.cxx:1565 RooFactoryWSTool.cxx:1566 RooFactoryWSTool.cxx:1567 RooFactoryWSTool.cxx:1568 RooFactoryWSTool.cxx:1569 RooFactoryWSTool.cxx:1570 RooFactoryWSTool.cxx:1571 RooFactoryWSTool.cxx:1572 RooFactoryWSTool.cxx:1573 RooFactoryWSTool.cxx:1574 RooFactoryWSTool.cxx:1575 RooFactoryWSTool.cxx:1576 RooFactoryWSTool.cxx:1577 RooFactoryWSTool.cxx:1578 RooFactoryWSTool.cxx:1579 RooFactoryWSTool.cxx:1580 RooFactoryWSTool.cxx:1581 RooFactoryWSTool.cxx:1582 RooFactoryWSTool.cxx:1583 RooFactoryWSTool.cxx:1584 RooFactoryWSTool.cxx:1585 RooFactoryWSTool.cxx:1586 RooFactoryWSTool.cxx:1587 RooFactoryWSTool.cxx:1588 RooFactoryWSTool.cxx:1589 RooFactoryWSTool.cxx:1590 RooFactoryWSTool.cxx:1591 RooFactoryWSTool.cxx:1592 RooFactoryWSTool.cxx:1593 RooFactoryWSTool.cxx:1594 RooFactoryWSTool.cxx:1595 RooFactoryWSTool.cxx:1596 RooFactoryWSTool.cxx:1597 RooFactoryWSTool.cxx:1598 RooFactoryWSTool.cxx:1599 RooFactoryWSTool.cxx:1600 RooFactoryWSTool.cxx:1601 RooFactoryWSTool.cxx:1602 RooFactoryWSTool.cxx:1603 RooFactoryWSTool.cxx:1604 RooFactoryWSTool.cxx:1605 RooFactoryWSTool.cxx:1606 RooFactoryWSTool.cxx:1607 RooFactoryWSTool.cxx:1608 RooFactoryWSTool.cxx:1609 RooFactoryWSTool.cxx:1610 RooFactoryWSTool.cxx:1611 RooFactoryWSTool.cxx:1612 RooFactoryWSTool.cxx:1613 RooFactoryWSTool.cxx:1614 RooFactoryWSTool.cxx:1615 RooFactoryWSTool.cxx:1616 RooFactoryWSTool.cxx:1617 RooFactoryWSTool.cxx:1618 RooFactoryWSTool.cxx:1619 RooFactoryWSTool.cxx:1620 RooFactoryWSTool.cxx:1621 RooFactoryWSTool.cxx:1622 RooFactoryWSTool.cxx:1623 RooFactoryWSTool.cxx:1624 RooFactoryWSTool.cxx:1625 RooFactoryWSTool.cxx:1626 RooFactoryWSTool.cxx:1627 RooFactoryWSTool.cxx:1628 RooFactoryWSTool.cxx:1629 RooFactoryWSTool.cxx:1630 RooFactoryWSTool.cxx:1631 RooFactoryWSTool.cxx:1632 RooFactoryWSTool.cxx:1633 RooFactoryWSTool.cxx:1634 RooFactoryWSTool.cxx:1635 RooFactoryWSTool.cxx:1636 RooFactoryWSTool.cxx:1637 RooFactoryWSTool.cxx:1638 RooFactoryWSTool.cxx:1639 RooFactoryWSTool.cxx:1640 RooFactoryWSTool.cxx:1641 RooFactoryWSTool.cxx:1642 RooFactoryWSTool.cxx:1643 RooFactoryWSTool.cxx:1644 RooFactoryWSTool.cxx:1645 RooFactoryWSTool.cxx:1646 RooFactoryWSTool.cxx:1647 RooFactoryWSTool.cxx:1648 RooFactoryWSTool.cxx:1649 RooFactoryWSTool.cxx:1650 RooFactoryWSTool.cxx:1651 RooFactoryWSTool.cxx:1652 RooFactoryWSTool.cxx:1653 RooFactoryWSTool.cxx:1654 RooFactoryWSTool.cxx:1655 RooFactoryWSTool.cxx:1656 RooFactoryWSTool.cxx:1657 RooFactoryWSTool.cxx:1658 RooFactoryWSTool.cxx:1659 RooFactoryWSTool.cxx:1660 RooFactoryWSTool.cxx:1661 RooFactoryWSTool.cxx:1662 RooFactoryWSTool.cxx:1663 RooFactoryWSTool.cxx:1664 RooFactoryWSTool.cxx:1665 RooFactoryWSTool.cxx:1666 RooFactoryWSTool.cxx:1667 RooFactoryWSTool.cxx:1668 RooFactoryWSTool.cxx:1669 RooFactoryWSTool.cxx:1670 RooFactoryWSTool.cxx:1671 RooFactoryWSTool.cxx:1672 RooFactoryWSTool.cxx:1673 RooFactoryWSTool.cxx:1674 RooFactoryWSTool.cxx:1675 RooFactoryWSTool.cxx:1676 RooFactoryWSTool.cxx:1677 RooFactoryWSTool.cxx:1678 RooFactoryWSTool.cxx:1679 RooFactoryWSTool.cxx:1680 RooFactoryWSTool.cxx:1681 RooFactoryWSTool.cxx:1682 RooFactoryWSTool.cxx:1683 RooFactoryWSTool.cxx:1684 RooFactoryWSTool.cxx:1685 RooFactoryWSTool.cxx:1686 RooFactoryWSTool.cxx:1687 RooFactoryWSTool.cxx:1688 RooFactoryWSTool.cxx:1689 RooFactoryWSTool.cxx:1690 RooFactoryWSTool.cxx:1691 RooFactoryWSTool.cxx:1692 RooFactoryWSTool.cxx:1693 RooFactoryWSTool.cxx:1694 RooFactoryWSTool.cxx:1695 RooFactoryWSTool.cxx:1696 RooFactoryWSTool.cxx:1697 RooFactoryWSTool.cxx:1698 RooFactoryWSTool.cxx:1699 RooFactoryWSTool.cxx:1700 RooFactoryWSTool.cxx:1701 RooFactoryWSTool.cxx:1702 RooFactoryWSTool.cxx:1703 RooFactoryWSTool.cxx:1704 RooFactoryWSTool.cxx:1705 RooFactoryWSTool.cxx:1706 RooFactoryWSTool.cxx:1707 RooFactoryWSTool.cxx:1708 RooFactoryWSTool.cxx:1709 RooFactoryWSTool.cxx:1710 RooFactoryWSTool.cxx:1711 RooFactoryWSTool.cxx:1712 RooFactoryWSTool.cxx:1713 RooFactoryWSTool.cxx:1714 RooFactoryWSTool.cxx:1715 RooFactoryWSTool.cxx:1716 RooFactoryWSTool.cxx:1717 RooFactoryWSTool.cxx:1718 RooFactoryWSTool.cxx:1719 RooFactoryWSTool.cxx:1720 RooFactoryWSTool.cxx:1721 RooFactoryWSTool.cxx:1722 RooFactoryWSTool.cxx:1723 RooFactoryWSTool.cxx:1724 RooFactoryWSTool.cxx:1725 RooFactoryWSTool.cxx:1726 RooFactoryWSTool.cxx:1727 RooFactoryWSTool.cxx:1728 RooFactoryWSTool.cxx:1729 RooFactoryWSTool.cxx:1730 RooFactoryWSTool.cxx:1731 RooFactoryWSTool.cxx:1732 RooFactoryWSTool.cxx:1733 RooFactoryWSTool.cxx:1734 RooFactoryWSTool.cxx:1735 RooFactoryWSTool.cxx:1736 RooFactoryWSTool.cxx:1737 RooFactoryWSTool.cxx:1738 RooFactoryWSTool.cxx:1739 RooFactoryWSTool.cxx:1740 RooFactoryWSTool.cxx:1741 RooFactoryWSTool.cxx:1742 RooFactoryWSTool.cxx:1743 RooFactoryWSTool.cxx:1744 RooFactoryWSTool.cxx:1745 RooFactoryWSTool.cxx:1746 RooFactoryWSTool.cxx:1747 RooFactoryWSTool.cxx:1748 RooFactoryWSTool.cxx:1749 RooFactoryWSTool.cxx:1750 RooFactoryWSTool.cxx:1751 RooFactoryWSTool.cxx:1752 RooFactoryWSTool.cxx:1753 RooFactoryWSTool.cxx:1754 RooFactoryWSTool.cxx:1755 RooFactoryWSTool.cxx:1756 RooFactoryWSTool.cxx:1757 RooFactoryWSTool.cxx:1758 RooFactoryWSTool.cxx:1759 RooFactoryWSTool.cxx:1760 RooFactoryWSTool.cxx:1761 RooFactoryWSTool.cxx:1762 RooFactoryWSTool.cxx:1763 RooFactoryWSTool.cxx:1764 RooFactoryWSTool.cxx:1765 RooFactoryWSTool.cxx:1766 RooFactoryWSTool.cxx:1767 RooFactoryWSTool.cxx:1768 RooFactoryWSTool.cxx:1769 RooFactoryWSTool.cxx:1770 RooFactoryWSTool.cxx:1771 RooFactoryWSTool.cxx:1772 RooFactoryWSTool.cxx:1773 RooFactoryWSTool.cxx:1774 RooFactoryWSTool.cxx:1775 RooFactoryWSTool.cxx:1776 RooFactoryWSTool.cxx:1777 RooFactoryWSTool.cxx:1778 RooFactoryWSTool.cxx:1779 RooFactoryWSTool.cxx:1780 RooFactoryWSTool.cxx:1781 RooFactoryWSTool.cxx:1782 RooFactoryWSTool.cxx:1783 RooFactoryWSTool.cxx:1784 RooFactoryWSTool.cxx:1785 RooFactoryWSTool.cxx:1786 RooFactoryWSTool.cxx:1787 RooFactoryWSTool.cxx:1788 RooFactoryWSTool.cxx:1789 RooFactoryWSTool.cxx:1790 RooFactoryWSTool.cxx:1791 RooFactoryWSTool.cxx:1792 RooFactoryWSTool.cxx:1793 RooFactoryWSTool.cxx:1794 RooFactoryWSTool.cxx:1795 RooFactoryWSTool.cxx:1796 RooFactoryWSTool.cxx:1797 RooFactoryWSTool.cxx:1798 RooFactoryWSTool.cxx:1799 RooFactoryWSTool.cxx:1800 RooFactoryWSTool.cxx:1801 RooFactoryWSTool.cxx:1802 RooFactoryWSTool.cxx:1803 RooFactoryWSTool.cxx:1804 RooFactoryWSTool.cxx:1805 RooFactoryWSTool.cxx:1806 RooFactoryWSTool.cxx:1807 RooFactoryWSTool.cxx:1808 RooFactoryWSTool.cxx:1809 RooFactoryWSTool.cxx:1810 RooFactoryWSTool.cxx:1811 RooFactoryWSTool.cxx:1812 RooFactoryWSTool.cxx:1813 RooFactoryWSTool.cxx:1814 RooFactoryWSTool.cxx:1815 RooFactoryWSTool.cxx:1816 RooFactoryWSTool.cxx:1817 RooFactoryWSTool.cxx:1818 RooFactoryWSTool.cxx:1819 RooFactoryWSTool.cxx:1820 RooFactoryWSTool.cxx:1821 RooFactoryWSTool.cxx:1822 RooFactoryWSTool.cxx:1823 RooFactoryWSTool.cxx:1824 RooFactoryWSTool.cxx:1825 RooFactoryWSTool.cxx:1826 RooFactoryWSTool.cxx:1827 RooFactoryWSTool.cxx:1828 RooFactoryWSTool.cxx:1829 RooFactoryWSTool.cxx:1830 RooFactoryWSTool.cxx:1831 RooFactoryWSTool.cxx:1832 RooFactoryWSTool.cxx:1833 RooFactoryWSTool.cxx:1834 RooFactoryWSTool.cxx:1835 RooFactoryWSTool.cxx:1836 RooFactoryWSTool.cxx:1837 RooFactoryWSTool.cxx:1838 RooFactoryWSTool.cxx:1839 RooFactoryWSTool.cxx:1840 RooFactoryWSTool.cxx:1841 RooFactoryWSTool.cxx:1842 RooFactoryWSTool.cxx:1843 RooFactoryWSTool.cxx:1844 RooFactoryWSTool.cxx:1845 RooFactoryWSTool.cxx:1846 RooFactoryWSTool.cxx:1847 RooFactoryWSTool.cxx:1848 RooFactoryWSTool.cxx:1849 RooFactoryWSTool.cxx:1850 RooFactoryWSTool.cxx:1851 RooFactoryWSTool.cxx:1852 RooFactoryWSTool.cxx:1853 RooFactoryWSTool.cxx:1854 RooFactoryWSTool.cxx:1855 RooFactoryWSTool.cxx:1856 RooFactoryWSTool.cxx:1857 RooFactoryWSTool.cxx:1858 RooFactoryWSTool.cxx:1859 RooFactoryWSTool.cxx:1860 RooFactoryWSTool.cxx:1861 RooFactoryWSTool.cxx:1862 RooFactoryWSTool.cxx:1863 RooFactoryWSTool.cxx:1864 RooFactoryWSTool.cxx:1865 RooFactoryWSTool.cxx:1866 RooFactoryWSTool.cxx:1867 RooFactoryWSTool.cxx:1868 RooFactoryWSTool.cxx:1869 RooFactoryWSTool.cxx:1870 RooFactoryWSTool.cxx:1871 RooFactoryWSTool.cxx:1872 RooFactoryWSTool.cxx:1873 RooFactoryWSTool.cxx:1874 RooFactoryWSTool.cxx:1875 RooFactoryWSTool.cxx:1876 RooFactoryWSTool.cxx:1877 RooFactoryWSTool.cxx:1878 RooFactoryWSTool.cxx:1879 RooFactoryWSTool.cxx:1880 RooFactoryWSTool.cxx:1881 RooFactoryWSTool.cxx:1882 RooFactoryWSTool.cxx:1883 RooFactoryWSTool.cxx:1884 RooFactoryWSTool.cxx:1885 RooFactoryWSTool.cxx:1886 RooFactoryWSTool.cxx:1887 RooFactoryWSTool.cxx:1888 RooFactoryWSTool.cxx:1889 RooFactoryWSTool.cxx:1890 RooFactoryWSTool.cxx:1891 RooFactoryWSTool.cxx:1892 RooFactoryWSTool.cxx:1893 RooFactoryWSTool.cxx:1894 RooFactoryWSTool.cxx:1895 RooFactoryWSTool.cxx:1896 RooFactoryWSTool.cxx:1897 RooFactoryWSTool.cxx:1898 RooFactoryWSTool.cxx:1899 RooFactoryWSTool.cxx:1900 RooFactoryWSTool.cxx:1901 RooFactoryWSTool.cxx:1902 RooFactoryWSTool.cxx:1903 RooFactoryWSTool.cxx:1904 RooFactoryWSTool.cxx:1905 RooFactoryWSTool.cxx:1906 RooFactoryWSTool.cxx:1907 RooFactoryWSTool.cxx:1908 RooFactoryWSTool.cxx:1909 RooFactoryWSTool.cxx:1910 RooFactoryWSTool.cxx:1911 RooFactoryWSTool.cxx:1912 RooFactoryWSTool.cxx:1913 RooFactoryWSTool.cxx:1914 RooFactoryWSTool.cxx:1915 RooFactoryWSTool.cxx:1916 RooFactoryWSTool.cxx:1917 RooFactoryWSTool.cxx:1918 RooFactoryWSTool.cxx:1919 RooFactoryWSTool.cxx:1920 RooFactoryWSTool.cxx:1921 RooFactoryWSTool.cxx:1922 RooFactoryWSTool.cxx:1923 RooFactoryWSTool.cxx:1924 RooFactoryWSTool.cxx:1925 RooFactoryWSTool.cxx:1926 RooFactoryWSTool.cxx:1927 RooFactoryWSTool.cxx:1928 RooFactoryWSTool.cxx:1929 RooFactoryWSTool.cxx:1930 RooFactoryWSTool.cxx:1931 RooFactoryWSTool.cxx:1932 RooFactoryWSTool.cxx:1933 RooFactoryWSTool.cxx:1934 RooFactoryWSTool.cxx:1935 RooFactoryWSTool.cxx:1936 RooFactoryWSTool.cxx:1937 RooFactoryWSTool.cxx:1938 RooFactoryWSTool.cxx:1939 RooFactoryWSTool.cxx:1940 RooFactoryWSTool.cxx:1941 RooFactoryWSTool.cxx:1942 RooFactoryWSTool.cxx:1943 RooFactoryWSTool.cxx:1944 RooFactoryWSTool.cxx:1945 RooFactoryWSTool.cxx:1946 RooFactoryWSTool.cxx:1947 RooFactoryWSTool.cxx:1948 RooFactoryWSTool.cxx:1949 RooFactoryWSTool.cxx:1950 RooFactoryWSTool.cxx:1951 RooFactoryWSTool.cxx:1952 RooFactoryWSTool.cxx:1953 RooFactoryWSTool.cxx:1954 RooFactoryWSTool.cxx:1955 RooFactoryWSTool.cxx:1956 RooFactoryWSTool.cxx:1957 RooFactoryWSTool.cxx:1958 RooFactoryWSTool.cxx:1959 RooFactoryWSTool.cxx:1960 RooFactoryWSTool.cxx:1961 RooFactoryWSTool.cxx:1962 RooFactoryWSTool.cxx:1963 RooFactoryWSTool.cxx:1964 RooFactoryWSTool.cxx:1965 RooFactoryWSTool.cxx:1966 RooFactoryWSTool.cxx:1967 RooFactoryWSTool.cxx:1968 RooFactoryWSTool.cxx:1969 RooFactoryWSTool.cxx:1970 RooFactoryWSTool.cxx:1971 RooFactoryWSTool.cxx:1972 RooFactoryWSTool.cxx:1973 RooFactoryWSTool.cxx:1974 RooFactoryWSTool.cxx:1975 RooFactoryWSTool.cxx:1976 RooFactoryWSTool.cxx:1977 RooFactoryWSTool.cxx:1978 RooFactoryWSTool.cxx:1979 RooFactoryWSTool.cxx:1980 RooFactoryWSTool.cxx:1981 RooFactoryWSTool.cxx:1982 RooFactoryWSTool.cxx:1983 RooFactoryWSTool.cxx:1984 RooFactoryWSTool.cxx:1985 RooFactoryWSTool.cxx:1986 RooFactoryWSTool.cxx:1987 RooFactoryWSTool.cxx:1988 RooFactoryWSTool.cxx:1989 RooFactoryWSTool.cxx:1990 RooFactoryWSTool.cxx:1991 RooFactoryWSTool.cxx:1992 RooFactoryWSTool.cxx:1993 RooFactoryWSTool.cxx:1994 RooFactoryWSTool.cxx:1995 RooFactoryWSTool.cxx:1996 RooFactoryWSTool.cxx:1997 RooFactoryWSTool.cxx:1998 RooFactoryWSTool.cxx:1999 RooFactoryWSTool.cxx:2000 RooFactoryWSTool.cxx:2001 RooFactoryWSTool.cxx:2002 RooFactoryWSTool.cxx:2003 RooFactoryWSTool.cxx:2004 RooFactoryWSTool.cxx:2005 RooFactoryWSTool.cxx:2006 RooFactoryWSTool.cxx:2007 RooFactoryWSTool.cxx:2008 RooFactoryWSTool.cxx:2009 RooFactoryWSTool.cxx:2010 RooFactoryWSTool.cxx:2011 RooFactoryWSTool.cxx:2012 RooFactoryWSTool.cxx:2013 RooFactoryWSTool.cxx:2014 RooFactoryWSTool.cxx:2015 RooFactoryWSTool.cxx:2016 RooFactoryWSTool.cxx:2017 RooFactoryWSTool.cxx:2018 RooFactoryWSTool.cxx:2019 RooFactoryWSTool.cxx:2020 RooFactoryWSTool.cxx:2021 RooFactoryWSTool.cxx:2022 RooFactoryWSTool.cxx:2023 RooFactoryWSTool.cxx:2024 RooFactoryWSTool.cxx:2025 RooFactoryWSTool.cxx:2026 RooFactoryWSTool.cxx:2027 RooFactoryWSTool.cxx:2028 RooFactoryWSTool.cxx:2029 RooFactoryWSTool.cxx:2030 RooFactoryWSTool.cxx:2031 RooFactoryWSTool.cxx:2032 RooFactoryWSTool.cxx:2033 RooFactoryWSTool.cxx:2034 RooFactoryWSTool.cxx:2035 RooFactoryWSTool.cxx:2036 RooFactoryWSTool.cxx:2037 RooFactoryWSTool.cxx:2038 RooFactoryWSTool.cxx:2039 RooFactoryWSTool.cxx:2040 RooFactoryWSTool.cxx:2041 RooFactoryWSTool.cxx:2042 RooFactoryWSTool.cxx:2043 RooFactoryWSTool.cxx:2044 RooFactoryWSTool.cxx:2045 RooFactoryWSTool.cxx:2046 RooFactoryWSTool.cxx:2047 RooFactoryWSTool.cxx:2048 RooFactoryWSTool.cxx:2049 RooFactoryWSTool.cxx:2050 RooFactoryWSTool.cxx:2051 RooFactoryWSTool.cxx:2052 RooFactoryWSTool.cxx:2053