ROOT logo
/*****************************************************************************
 * Project: RooFit                                                           *
 * Package: RooFitCore                                                       *
 * @(#)root/roofitcore:$Id: RooCmdConfig.cxx 28259 2009-04-16 16:21:16Z wouter $
 * Authors:                                                                  *
 *   WV, Wouter Verkerke, UC Santa Barbara, verkerke@slac.stanford.edu       *
 *   DK, David Kirkby,    UC Irvine,         dkirkby@uci.edu                 *
 *                                                                           *
 * Copyright (c) 2000-2005, Regents of the University of California          *
 *                          and Stanford University. All rights reserved.    *
 *                                                                           *
 * Redistribution and use in source and binary forms,                        *
 * with or without modification, are permitted according to the terms        *
 * listed in LICENSE (http://roofit.sourceforge.net/license.txt)             *
 *****************************************************************************/


//////////////////////////////////////////////////////////////////////////////
// 
// BEGIN_HTML
// Class RooCmdConfig is a configurable parser for RooCmdArg named
// arguments. It maps the contents of named arguments named to integers,
// doubles, strings and TObjects that can be retrieved after processing
// a set of RooCmdArgs. The parser also has options to enforce syntax
// rules such as (conditionally) required arguments, mutually exclusive
// arguments and dependencies between arguments
// END_HTML
//

#include "RooFit.h"

#include "RooCmdConfig.h"
#include "RooInt.h"
#include "RooDouble.h"
#include "RooArgSet.h"
#include "RooStringVar.h"
#include "RooTObjWrap.h"
#include "RooAbsData.h"
#include "TObjString.h"
#include "RooMsgService.h"

#include "Riostream.h"


ClassImp(RooCmdConfig) 
  ;



//_____________________________________________________________________________
RooCmdConfig::RooCmdConfig(const char* methodName) :
  TObject(),
  _name(methodName)
{
  // Constructor taking descriptive name of owner/user which
  // is used as prefix for any warning or error messages
  // generated by this parser

  _verbose = kFALSE ;
  _error = kFALSE ;
  _allowUndefined = kFALSE ;

  _iIter = _iList.MakeIterator() ;
  _dIter = _dList.MakeIterator() ;
  _sIter = _sList.MakeIterator() ;
  _oIter = _oList.MakeIterator() ;
  _cIter = _cList.MakeIterator() ;

  _rIter = _rList.MakeIterator() ;
  _fIter = _fList.MakeIterator() ;
  _mIter = _mList.MakeIterator() ;
  _yIter = _yList.MakeIterator() ;
  _pIter = _pList.MakeIterator() ;
}



//_____________________________________________________________________________
RooCmdConfig::RooCmdConfig(const RooCmdConfig& other)  : TObject(other)
{
  // Copy constructor

  _name   = other._name ;
  _verbose = other._verbose ;
  _error = other._error ;
  _allowUndefined = other._allowUndefined ;

  _iIter = _iList.MakeIterator() ;
  _dIter = _dList.MakeIterator() ;
  _sIter = _sList.MakeIterator() ;
  _oIter = _oList.MakeIterator() ;
  _cIter = _cList.MakeIterator() ;
  _rIter = _rList.MakeIterator() ;
  _fIter = _fList.MakeIterator() ;
  _mIter = _mList.MakeIterator() ;
  _yIter = _yList.MakeIterator() ;
  _pIter = _pList.MakeIterator() ;

  other._iIter->Reset() ;
  RooInt* ri ;
  while((ri=(RooInt*)other._iIter->Next())) {
    _iList.Add(ri->Clone()) ;
  }

  other._dIter->Reset() ;
  RooDouble* rd ;
  while((rd=(RooDouble*)other._dIter->Next())) {
    _dList.Add(rd->Clone()) ;
  }

  other._sIter->Reset() ;
  RooStringVar* rs ;
  while((rs=(RooStringVar*)other._sIter->Next())) {
    _sList.Add(rs->Clone()) ;
  }

  other._oIter->Reset() ;
  RooTObjWrap* os ;
  while((os=(RooTObjWrap*)other._oIter->Next())) {
    _oList.Add(os->Clone()) ;
  }

  other._cIter->Reset() ;
  RooTObjWrap* cs ;
  while((cs=(RooTObjWrap*)other._cIter->Next())) {
    _cList.Add(cs->Clone()) ;
  }

  other._rIter->Reset() ;
  TObjString* rr ;
  while((rr=(TObjString*)other._rIter->Next())) {
    _rList.Add(rr->Clone()) ;
  }

  other._fIter->Reset() ;
  TObjString* ff ;
  while((ff=(TObjString*)other._fIter->Next())) {
    _fList.Add(ff->Clone()) ;
  }

  other._mIter->Reset() ;
  TObjString* mm ;
  while((mm=(TObjString*)other._mIter->Next())) {
    _mList.Add(mm->Clone()) ;
  }

  other._yIter->Reset() ;
  TObjString* yy ;
  while((yy=(TObjString*)other._yIter->Next())) {
    _yList.Add(yy->Clone()) ;
  }

  other._pIter->Reset() ;
  TObjString* pp ;
  while((pp=(TObjString*)other._pIter->Next())) {
    _pList.Add(pp->Clone()) ;
  }

}



//_____________________________________________________________________________
RooCmdConfig::~RooCmdConfig()
{
  // Destructor 

  delete _iIter ;
  delete _dIter ;
  delete _sIter ;
  delete _oIter ;
  delete _cIter ;
  delete _rIter ;
  delete _fIter ;
  delete _mIter ;
  delete _yIter ;
  delete _pIter ;

  _iList.Delete() ;
  _dList.Delete() ;
  _sList.Delete() ;
  _cList.Delete() ;
  _oList.Delete() ;
  _rList.Delete() ;
  _fList.Delete() ;
  _mList.Delete() ;
  _yList.Delete() ;
  _pList.Delete() ;
}



//_____________________________________________________________________________
void RooCmdConfig::defineRequiredArgs(const char* argName1, const char* argName2,
				      const char* argName3, const char* argName4,
				      const char* argName5, const char* argName6,
				      const char* argName7, const char* argName8) 
{
  // Add condition that any of listed arguments must be processed
  // for parsing to be declared successful
  if (argName1) _rList.Add(new TObjString(argName1)) ;
  if (argName2) _rList.Add(new TObjString(argName2)) ;
  if (argName3) _rList.Add(new TObjString(argName3)) ;
  if (argName4) _rList.Add(new TObjString(argName4)) ;
  if (argName5) _rList.Add(new TObjString(argName5)) ;
  if (argName6) _rList.Add(new TObjString(argName6)) ;
  if (argName7) _rList.Add(new TObjString(argName7)) ;
  if (argName8) _rList.Add(new TObjString(argName8)) ;
}



//_____________________________________________________________________________
const char* RooCmdConfig::missingArgs() const 
{
  // Return string with names of arguments that were required, but not
  // processed

  static TString ret ;
  ret="" ;

  _rIter->Reset() ;
  TObjString* s ;
  Bool_t first(kTRUE) ;
  while((s=(TObjString*)_rIter->Next())) {
    if (first) {
      first=kFALSE ;
    } else {
      ret.Append(", ") ;
    }
    ret.Append(s->String()) ;
  }

  return ret.Length() ? ret.Data() : 0 ;
}



//_____________________________________________________________________________
void RooCmdConfig::defineDependency(const char* refArgName, const char* neededArgName) 
{
  // Define that processing argument name refArgName requires processing
  // of argument named neededArgName to succesfully complete parsing

  TNamed* dep = new TNamed(refArgName,neededArgName) ;
  _yList.Add(dep) ;
}



//_____________________________________________________________________________
void RooCmdConfig::defineMutex(const char* argName1, const char* argName2) 
{
  // Define arguments named argName1 and argName2 mutually exclusive

  TNamed* mutex1 = new TNamed(argName1,argName2) ;
  TNamed* mutex2 = new TNamed(argName2,argName1) ;
  _mList.Add(mutex1) ;
  _mList.Add(mutex2) ;
}



//_____________________________________________________________________________
void RooCmdConfig::defineMutex(const char* argName1, const char* argName2, const char* argName3) 
{
  // Define arguments named argName1,argName2 and argName3 mutually exclusive

  defineMutex(argName1,argName2) ;
  defineMutex(argName1,argName3) ;
  defineMutex(argName2,argName3) ;
}


//_____________________________________________________________________________
void RooCmdConfig::defineMutex(const char* argName1, const char* argName2, const char* argName3, const char* argName4) 
{
  // Define arguments named argName1,argName2,argName3 and argName4 mutually exclusive

  defineMutex(argName1,argName2) ;
  defineMutex(argName1,argName3) ;
  defineMutex(argName1,argName4) ;
  defineMutex(argName2,argName3) ;
  defineMutex(argName2,argName4) ;
  defineMutex(argName3,argName4) ;
}



//_____________________________________________________________________________
Bool_t RooCmdConfig::defineInt(const char* name, const char* argName, Int_t intNum, Int_t defVal)
{
  // Define integer property name 'name' mapped to integer in slot 'intNum' in RooCmdArg with name argName
  // Define default value for this int property to be defVal in case named argument is not processed

  if (_iList.FindObject(name)) {
    coutE(InputArguments) << "RooCmdConfig::defintInt: name '" << name << "' already defined" << endl ;
    return kTRUE ;
  }

  RooInt* ri = new RooInt(defVal) ;
  ri->SetName(name) ;
  ri->SetTitle(argName) ;
  ri->SetUniqueID(intNum) ;
  
  _iList.Add(ri) ;
  return kFALSE ;
}



//_____________________________________________________________________________
Bool_t RooCmdConfig::defineDouble(const char* name, const char* argName, Int_t doubleNum, Double_t defVal) 
{
  // Define Double_t property name 'name' mapped to Double_t in slot 'doubleNum' in RooCmdArg with name argName
  // Define default value for this Double_t property to be defVal in case named argument is not processed

  if (_dList.FindObject(name)) {
    coutE(InputArguments) << "RooCmdConfig::defineDouble: name '" << name << "' already defined" << endl ;
    return kTRUE ;
  }

  RooDouble* rd = new RooDouble(defVal) ;
  rd->SetName(name) ;
  rd->SetTitle(argName) ;
  rd->SetUniqueID(doubleNum) ;
  
  _dList.Add(rd) ;
  return kFALSE ;
}



//_____________________________________________________________________________
Bool_t RooCmdConfig::defineString(const char* name, const char* argName, Int_t stringNum, const char* defVal, Bool_t appendMode) 
{
  // Define Double_t property name 'name' mapped to Double_t in slot 'stringNum' in RooCmdArg with name argName
  // Define default value for this Double_t property to be defVal in case named argument is not processed
  // If appendMode is true, values found in multiple matching RooCmdArg arguments will be concatenated
  // in the output string. If it is false, only the value of the last processed instance is retained

  if (_sList.FindObject(name)) {
    coutE(InputArguments) << "RooCmdConfig::defineString: name '" << name << "' already defined" << endl ;
    return kTRUE ;
  }

  RooStringVar* rs = new RooStringVar(name,argName,defVal,10240) ;
  if (appendMode) {
    rs->setAttribute("RooCmdConfig::AppendMode") ;
  }
  rs->SetUniqueID(stringNum) ;
  
  _sList.Add(rs) ;
  return kFALSE ;
}



//_____________________________________________________________________________
Bool_t RooCmdConfig::defineObject(const char* name, const char* argName, Int_t setNum, const TObject* defVal, Bool_t isArray) 
{
  // Define TObject property name 'name' mapped to object in slot 'setNum' in RooCmdArg with name argName
  // Define default value for this TObject property to be defVal in case named argument is not processed.
  // If isArray is true, an array of TObjects is harvested in case multiple matching named arguments are processed.
  // If isArray is false, only the TObject in the last processed named argument is retained


  if (_oList.FindObject(name)) {
    coutE(InputArguments) << "RooCmdConfig::defineObject: name '" << name << "' already defined" << endl ;
    return kTRUE ;
  }

  RooTObjWrap* os = new RooTObjWrap((TObject*)defVal,isArray) ;
  os->SetName(name) ;
  os->SetTitle(argName) ;
  os->SetUniqueID(setNum) ;
  
  _oList.Add(os) ;
  return kFALSE ;
}



//_____________________________________________________________________________
Bool_t RooCmdConfig::defineSet(const char* name, const char* argName, Int_t setNum, const RooArgSet* defVal) 
{
  // Define TObject property name 'name' mapped to object in slot 'setNum' in RooCmdArg with name argName
  // Define default value for this TObject property to be defVal in case named argument is not processed.
  // If isArray is true, an array of TObjects is harvested in case multiple matching named arguments are processed.
  // If isArray is false, only the TObject in the last processed named argument is retained


  if (_cList.FindObject(name)) {
    coutE(InputArguments) << "RooCmdConfig::defineObject: name '" << name << "' already defined" << endl ;
    return kTRUE ;
  }

  RooTObjWrap* cs = new RooTObjWrap((TObject*)defVal) ;
  cs->SetName(name) ;
  cs->SetTitle(argName) ;
  cs->SetUniqueID(setNum) ;
  
  _cList.Add(cs) ;
  return kFALSE ;
}



//_____________________________________________________________________________
void RooCmdConfig::print()
{
  // Print configuration of parser

  // Find registered integer fields for this opcode 
  _iIter->Reset() ;
  RooInt* ri ;
  while((ri=(RooInt*)_iIter->Next())) {
    cout << ri->GetName() << "[Int_t] = " << *ri << endl ;
  }

  // Find registered double fields for this opcode 
  _dIter->Reset() ;
  RooDouble* rd ;
  while((rd=(RooDouble*)_dIter->Next())) {
    cout << rd->GetName() << "[Double_t] = " << *rd << endl ;
  }

  // Find registered string fields for this opcode 
  _sIter->Reset() ;
  RooStringVar* rs ;
  while((rs=(RooStringVar*)_sIter->Next())) {
    cout << rs->GetName() << "[string] = \"" << rs->getVal() << "\"" << endl ;
  }

  // Find registered argset fields for this opcode 
  _oIter->Reset() ;
  RooTObjWrap* ro ;
  while((ro=(RooTObjWrap*)_oIter->Next())) {
    cout << ro->GetName() << "[TObject] = " ; 
    if (ro->obj()) {
      cout << ro->obj()->GetName() << endl ;
    } else {

      cout << "(null)" << endl ;
    }
  }
}



//_____________________________________________________________________________
Bool_t RooCmdConfig::process(const RooLinkedList& argList) 
{
  // Process given list with RooCmdArgs

  Bool_t ret(kFALSE) ;
  TIterator* iter = argList.MakeIterator() ;
  RooCmdArg* arg ;
  while((arg=(RooCmdArg*)iter->Next())) {
    ret |= process(*arg) ;
  }
  delete iter ;
  return ret ;
}



//_____________________________________________________________________________
Bool_t RooCmdConfig::process(const RooCmdArg& arg1, const RooCmdArg& arg2, const RooCmdArg& arg3, const RooCmdArg& arg4,
			     const RooCmdArg& arg5, const RooCmdArg& arg6, const RooCmdArg& arg7, const RooCmdArg& arg8) 
{
  // Process given RooCmdArgs

  Bool_t ret(kFALSE) ;
  ret |= process(arg1) ;
  ret |= process(arg2) ;
  ret |= process(arg3) ;
  ret |= process(arg4) ;
  ret |= process(arg5) ;
  ret |= process(arg6) ;
  ret |= process(arg7) ;
  ret |= process(arg8) ;
  return ret ;
}



//_____________________________________________________________________________
Bool_t RooCmdConfig::process(const RooCmdArg& arg) 
{
  // Process given RooCmdArg

  // Retrive command code
  const char* opc = arg.opcode() ;

  // Ignore empty commands
  if (!opc) return kFALSE ;

  // Check if not forbidden
  if (_fList.FindObject(opc)) {
    coutE(InputArguments) << _name << " ERROR: argument " << opc << " not allowed in this context" << endl ;
    _error = kTRUE ;
    return kTRUE ;
  }

  // Check if this code generates any dependencies
  TObject* dep = _yList.FindObject(opc) ;
  if (dep) {
    // Dependent command found, add to required list if not already processed
    if (!_pList.FindObject(dep->GetTitle())) {
      _rList.Add(new TObjString(dep->GetTitle())) ;
      if (_verbose) {
	cout << "RooCmdConfig::process: " << opc << " has unprocessed dependent " << dep->GetTitle() 
	     << ", adding to required list" << endl ;
      }
    } else {
      if (_verbose) {
	cout << "RooCmdConfig::process: " << opc << " dependent " << dep->GetTitle() << " is already processed" << endl ;
      }
    }
  }

  // Check for mutexes
  TObject * mutex = _mList.FindObject(opc) ;
  if (mutex) {
    if (_verbose) {
      cout << "RooCmdConfig::process: " << opc << " excludes " << mutex->GetTitle() 
	   << ", adding to forbidden list" << endl ;
    }    
    _fList.Add(new TObjString(mutex->GetTitle())) ;
  }


  Bool_t anyField(kFALSE) ;

  // Find registered integer fields for this opcode 
  _iIter->Reset() ;
  RooInt* ri ;
  while((ri=(RooInt*)_iIter->Next())) {
    if (!TString(opc).CompareTo(ri->GetTitle())) {
      *ri = arg.getInt(ri->GetUniqueID()) ;
      anyField = kTRUE ;
      if (_verbose) {
	cout << "RooCmdConfig::process " << ri->GetName() << "[Int_t]" << " set to " << *ri << endl ;
      }
    }
  }

  // Find registered double fields for this opcode 
  _dIter->Reset() ;
  RooDouble* rd ;
  while((rd=(RooDouble*)_dIter->Next())) {
    if (!TString(opc).CompareTo(rd->GetTitle())) {
      *rd = arg.getDouble(rd->GetUniqueID()) ;
      anyField = kTRUE ;
      if (_verbose) {
	cout << "RooCmdConfig::process " << rd->GetName() << "[Double_t]" << " set to " << *rd << endl ;
      }
    }
  }

  // Find registered string fields for this opcode 
  _sIter->Reset() ;
  RooStringVar* rs ;
  while((rs=(RooStringVar*)_sIter->Next())) {
    if (!TString(opc).CompareTo(rs->GetTitle())) {
      
      const char* oldStr = rs->getVal() ;

      if (oldStr && strlen(oldStr)>0 && rs->getAttribute("RooCmdConfig::AppendMode")) {
	rs->setVal(Form("%s,%s",rs->getVal(),arg.getString(rs->GetUniqueID()))) ;
      } else {
	rs->setVal(arg.getString(rs->GetUniqueID())) ;
      }
      anyField = kTRUE ;
      if (_verbose) {
	cout << "RooCmdConfig::process " << rs->GetName() << "[string]" << " set to " << rs->getVal() << endl ;
      }
    }
  }

  // Find registered TObject fields for this opcode 
  _oIter->Reset() ;
  RooTObjWrap* os ;
  while((os=(RooTObjWrap*)_oIter->Next())) {
    if (!TString(opc).CompareTo(os->GetTitle())) {
      os->setObj((TObject*)arg.getObject(os->GetUniqueID())) ;
      anyField = kTRUE ;
      if (_verbose) {
	cout << "RooCmdConfig::process " << os->GetName() << "[TObject]" << " set to " ;
	if (os->obj()) {
	  cout << os->obj()->GetName() << endl ;
	} else {
	  cout << "(null)" << endl ;
	}
      }
    }
  }

  // Find registered RooArgSet fields for this opcode 
  _cIter->Reset() ;
  RooTObjWrap* cs ;
  while((cs=(RooTObjWrap*)_cIter->Next())) {
    if (!TString(opc).CompareTo(cs->GetTitle())) {
      cs->setObj((TObject*)arg.getSet(cs->GetUniqueID())) ;
      anyField = kTRUE ;
      if (_verbose) {
	cout << "RooCmdConfig::process " << cs->GetName() << "[RooArgSet]" << " set to " ;
	if (cs->obj()) {
	  cout << cs->obj()->GetName() << endl ;
	} else {
	  cout << "(null)" << endl ;
	}
      }
    }
  }

  if (!anyField && !_allowUndefined) {
    coutE(InputArguments) << _name << " ERROR: unrecognized command: " << opc << endl ;
  }


  // Remove command from required-args list (if it was there)
  TObject* obj = _rList.FindObject(opc) ;
  if (obj) {
    _rList.Remove(obj) ;
  }

  // Add command the processed list
  TNamed *pcmd = new TNamed(opc,opc) ;
  _pList.Add(pcmd) ;

  Bool_t depRet = kFALSE ;
  if (arg._procSubArgs) {
    for (Int_t ia=0 ; ia<arg._argList.GetSize() ; ia++) {
      RooCmdArg* subArg = static_cast<RooCmdArg*>(arg._argList.At(ia)) ;
      if (strlen(subArg->GetName())>0) {
	RooCmdArg subArgCopy(*subArg) ;
	subArgCopy.SetName(Form("%s::%s",arg.GetName(),subArg->GetName())) ;
	depRet |= process(subArgCopy) ;
      }
    }
  }

  return ((anyField||_allowUndefined)?kFALSE:kTRUE)||depRet ;
}
  


//_____________________________________________________________________________
Bool_t RooCmdConfig::hasProcessed(const char* cmdName) const 
{
  // Return true if RooCmdArg with name 'cmdName' has been processed

  return _pList.FindObject(cmdName) ? kTRUE : kFALSE ;
}



//_____________________________________________________________________________
Int_t RooCmdConfig::getInt(const char* name, Int_t defVal) 
{
  // Return integer property registered with name 'name'. If no
  // property is registered, return defVal

  RooInt* ri = (RooInt*) _iList.FindObject(name) ;
  return ri ? (Int_t)(*ri) : defVal ;
}



//_____________________________________________________________________________
Double_t RooCmdConfig::getDouble(const char* name, Double_t defVal) 
{
  // Return Double_t property registered with name 'name'. If no
  // property is registered, return defVal

  RooDouble* rd = (RooDouble*) _dList.FindObject(name) ;
  return rd ? (Double_t)(*rd) : defVal ;
}



//_____________________________________________________________________________
const char* RooCmdConfig::getString(const char* name, const char* defVal, Bool_t convEmptyToNull) 
{
  // Return string property registered with name 'name'. If no
  // property is registered, return defVal. If convEmptyToNull
  // is true, empty string will be returned as null pointers

  RooStringVar* rs = (RooStringVar*) _sList.FindObject(name) ;
  return rs ? ((convEmptyToNull && strlen(rs->getVal())==0) ? 0 : ((const char*)rs->getVal()) ) : defVal ;
}



//_____________________________________________________________________________
TObject* RooCmdConfig::getObject(const char* name, TObject* defVal) 
{
  // Return TObject property registered with name 'name'. If no
  // property is registered, return defVal

  RooTObjWrap* ro = (RooTObjWrap*) _oList.FindObject(name) ;
  return ro ? ro->obj() : defVal ;
}


//_____________________________________________________________________________
RooArgSet* RooCmdConfig::getSet(const char* name, RooArgSet* defVal) 
{
  // Return RooArgSet property registered with name 'name'. If no
  // property is registered, return defVal

  RooTObjWrap* ro = (RooTObjWrap*) _cList.FindObject(name) ;
  return ro ? ((RooArgSet*)ro->obj()) : defVal ;
}



//_____________________________________________________________________________
const RooLinkedList& RooCmdConfig::getObjectList(const char* name) 
{
  // Return list of objects registered with name 'name'

  static RooLinkedList defaultDummy ;
  RooTObjWrap* ro = (RooTObjWrap*) _oList.FindObject(name) ;
  return ro ? ro->objList() : defaultDummy ;
}



//_____________________________________________________________________________
Bool_t RooCmdConfig::ok(Bool_t verbose) const 
{ 
  // Return true of parsing was succesfull

  if (_rList.GetSize()==0 && !_error) return kTRUE ;

  if (verbose) {
    const char* margs = missingArgs() ;
    if (margs) {
      coutE(InputArguments) << _name << " ERROR: missing arguments: " << margs << endl ;
    } else {
      coutE(InputArguments) << _name << " ERROR: illegal combination of arguments and/or missing arguments" << endl ;
    }
  }
  return kFALSE ;
}



//_____________________________________________________________________________
void RooCmdConfig::stripCmdList(RooLinkedList& cmdList, const char* cmdsToPurge) 
{
  // Utility function that strips command names listed (comma separated) in cmdsToPurge from cmdList

  // Sanity check
  if (!cmdsToPurge) return ;
  
  // Copy command list for parsing
  char buf[1024] ;
  strcpy(buf,cmdsToPurge) ;
  
  char* name = strtok(buf,",") ;
  while(name) {
    TObject* cmd = cmdList.FindObject(name) ;
    if (cmd) cmdList.Remove(cmd) ;
    name = strtok(0,",") ;
  }

}



//_____________________________________________________________________________
RooLinkedList RooCmdConfig::filterCmdList(RooLinkedList& cmdInList, const char* cmdNameList, Bool_t removeFromInList) 
{
  // Utility function to filter commands listed in cmdNameList from cmdInList. Filtered arguments are put in the returned list.
  // If removeFromInList is true then these commands are removed from the input list

  RooLinkedList filterList ;
  if (!cmdNameList) return filterList ;

  // Copy command list for parsing
  char buf[1024] ;
  strcpy(buf,cmdNameList) ;
  
  char* name = strtok(buf,",") ;
  while(name) {
    TObject* cmd = cmdInList.FindObject(name) ;
    if (cmd) {
      if (removeFromInList) {
	cmdInList.Remove(cmd) ;
      }
      filterList.Add(cmd) ;
    }
    name = strtok(0,",") ;
  }
  return filterList ;  
}



//_____________________________________________________________________________
Int_t RooCmdConfig::decodeIntOnTheFly(const char* callerID, const char* cmdArgName, Int_t intIdx, Int_t defVal, const RooCmdArg& arg1, 
				      const RooCmdArg& arg2, const RooCmdArg& arg3, const RooCmdArg& arg4,
				      const RooCmdArg& arg5, const RooCmdArg& arg6, const RooCmdArg& arg7,
				      const RooCmdArg& arg8, const RooCmdArg& arg9) 
{
  // Static decoder function allows to retrieve integer property from set of RooCmdArgs 
  // For use in base member initializers in constructors

  RooCmdConfig pc(callerID) ;
  pc.allowUndefined() ;
  pc.defineInt("theInt",cmdArgName,intIdx,defVal) ;
  pc.process(arg1) ;  pc.process(arg2) ;  pc.process(arg3) ;
  pc.process(arg4) ;  pc.process(arg5) ;  pc.process(arg6) ;
  pc.process(arg7) ;  pc.process(arg8) ;  pc.process(arg9) ;
  return pc.getInt("theInt") ;
}



//_____________________________________________________________________________
const char* RooCmdConfig::decodeStringOnTheFly(const char* callerID, const char* cmdArgName, Int_t strIdx, const char* defVal, const RooCmdArg& arg1, 
					 const RooCmdArg& arg2, const RooCmdArg& arg3, const RooCmdArg& arg4,
					 const RooCmdArg& arg5, const RooCmdArg& arg6, const RooCmdArg& arg7,
					 const RooCmdArg& arg8, const RooCmdArg& arg9) 
{  
  // Static decoder function allows to retrieve string property from set of RooCmdArgs 
  // For use in base member initializers in constructors

  static string retBuf = "" ;

  RooCmdConfig pc(callerID) ;
  pc.allowUndefined() ;
  pc.defineString("theString",cmdArgName,strIdx,defVal) ;
  pc.process(arg1) ;  pc.process(arg2) ;  pc.process(arg3) ;
  pc.process(arg4) ;  pc.process(arg5) ;  pc.process(arg6) ;
  pc.process(arg7) ;  pc.process(arg8) ;  pc.process(arg9) ;
  const char* ret =  pc.getString("theString",0,kTRUE) ;

  if (ret) {
    retBuf = ret ;
  } else {
    retBuf.clear() ;
  }
  return retBuf.c_str() ;
}



//_____________________________________________________________________________
TObject* RooCmdConfig::decodeObjOnTheFly(const char* callerID, const char* cmdArgName, Int_t objIdx, TObject* defVal, const RooCmdArg& arg1, 
					 const RooCmdArg& arg2, const RooCmdArg& arg3, const RooCmdArg& arg4,
					 const RooCmdArg& arg5, const RooCmdArg& arg6, const RooCmdArg& arg7,
					 const RooCmdArg& arg8, const RooCmdArg& arg9) 
{
  // Static decoder function allows to retrieve object property from set of RooCmdArgs 
  // For use in base member initializers in constructors

  RooCmdConfig pc(callerID) ;
  pc.allowUndefined() ;
  pc.defineObject("theObj",cmdArgName,objIdx,defVal) ;
  pc.process(arg1) ;  pc.process(arg2) ;  pc.process(arg3) ;
  pc.process(arg4) ;  pc.process(arg5) ;  pc.process(arg6) ;
  pc.process(arg7) ;  pc.process(arg8) ;  pc.process(arg9) ;
  return (TObject*) pc.getObject("theObj") ;
}
 RooCmdConfig.cxx:1
 RooCmdConfig.cxx:2
 RooCmdConfig.cxx:3
 RooCmdConfig.cxx:4
 RooCmdConfig.cxx:5
 RooCmdConfig.cxx:6
 RooCmdConfig.cxx:7
 RooCmdConfig.cxx:8
 RooCmdConfig.cxx:9
 RooCmdConfig.cxx:10
 RooCmdConfig.cxx:11
 RooCmdConfig.cxx:12
 RooCmdConfig.cxx:13
 RooCmdConfig.cxx:14
 RooCmdConfig.cxx:15
 RooCmdConfig.cxx:16
 RooCmdConfig.cxx:17
 RooCmdConfig.cxx:18
 RooCmdConfig.cxx:19
 RooCmdConfig.cxx:20
 RooCmdConfig.cxx:21
 RooCmdConfig.cxx:22
 RooCmdConfig.cxx:23
 RooCmdConfig.cxx:24
 RooCmdConfig.cxx:25
 RooCmdConfig.cxx:26
 RooCmdConfig.cxx:27
 RooCmdConfig.cxx:28
 RooCmdConfig.cxx:29
 RooCmdConfig.cxx:30
 RooCmdConfig.cxx:31
 RooCmdConfig.cxx:32
 RooCmdConfig.cxx:33
 RooCmdConfig.cxx:34
 RooCmdConfig.cxx:35
 RooCmdConfig.cxx:36
 RooCmdConfig.cxx:37
 RooCmdConfig.cxx:38
 RooCmdConfig.cxx:39
 RooCmdConfig.cxx:40
 RooCmdConfig.cxx:41
 RooCmdConfig.cxx:42
 RooCmdConfig.cxx:43
 RooCmdConfig.cxx:44
 RooCmdConfig.cxx:45
 RooCmdConfig.cxx:46
 RooCmdConfig.cxx:47
 RooCmdConfig.cxx:48
 RooCmdConfig.cxx:49
 RooCmdConfig.cxx:50
 RooCmdConfig.cxx:51
 RooCmdConfig.cxx:52
 RooCmdConfig.cxx:53
 RooCmdConfig.cxx:54
 RooCmdConfig.cxx:55
 RooCmdConfig.cxx:56
 RooCmdConfig.cxx:57
 RooCmdConfig.cxx:58
 RooCmdConfig.cxx:59
 RooCmdConfig.cxx:60
 RooCmdConfig.cxx:61
 RooCmdConfig.cxx:62
 RooCmdConfig.cxx:63
 RooCmdConfig.cxx:64
 RooCmdConfig.cxx:65
 RooCmdConfig.cxx:66
 RooCmdConfig.cxx:67
 RooCmdConfig.cxx:68
 RooCmdConfig.cxx:69
 RooCmdConfig.cxx:70
 RooCmdConfig.cxx:71
 RooCmdConfig.cxx:72
 RooCmdConfig.cxx:73
 RooCmdConfig.cxx:74
 RooCmdConfig.cxx:75
 RooCmdConfig.cxx:76
 RooCmdConfig.cxx:77
 RooCmdConfig.cxx:78
 RooCmdConfig.cxx:79
 RooCmdConfig.cxx:80
 RooCmdConfig.cxx:81
 RooCmdConfig.cxx:82
 RooCmdConfig.cxx:83
 RooCmdConfig.cxx:84
 RooCmdConfig.cxx:85
 RooCmdConfig.cxx:86
 RooCmdConfig.cxx:87
 RooCmdConfig.cxx:88
 RooCmdConfig.cxx:89
 RooCmdConfig.cxx:90
 RooCmdConfig.cxx:91
 RooCmdConfig.cxx:92
 RooCmdConfig.cxx:93
 RooCmdConfig.cxx:94
 RooCmdConfig.cxx:95
 RooCmdConfig.cxx:96
 RooCmdConfig.cxx:97
 RooCmdConfig.cxx:98
 RooCmdConfig.cxx:99
 RooCmdConfig.cxx:100
 RooCmdConfig.cxx:101
 RooCmdConfig.cxx:102
 RooCmdConfig.cxx:103
 RooCmdConfig.cxx:104
 RooCmdConfig.cxx:105
 RooCmdConfig.cxx:106
 RooCmdConfig.cxx:107
 RooCmdConfig.cxx:108
 RooCmdConfig.cxx:109
 RooCmdConfig.cxx:110
 RooCmdConfig.cxx:111
 RooCmdConfig.cxx:112
 RooCmdConfig.cxx:113
 RooCmdConfig.cxx:114
 RooCmdConfig.cxx:115
 RooCmdConfig.cxx:116
 RooCmdConfig.cxx:117
 RooCmdConfig.cxx:118
 RooCmdConfig.cxx:119
 RooCmdConfig.cxx:120
 RooCmdConfig.cxx:121
 RooCmdConfig.cxx:122
 RooCmdConfig.cxx:123
 RooCmdConfig.cxx:124
 RooCmdConfig.cxx:125
 RooCmdConfig.cxx:126
 RooCmdConfig.cxx:127
 RooCmdConfig.cxx:128
 RooCmdConfig.cxx:129
 RooCmdConfig.cxx:130
 RooCmdConfig.cxx:131
 RooCmdConfig.cxx:132
 RooCmdConfig.cxx:133
 RooCmdConfig.cxx:134
 RooCmdConfig.cxx:135
 RooCmdConfig.cxx:136
 RooCmdConfig.cxx:137
 RooCmdConfig.cxx:138
 RooCmdConfig.cxx:139
 RooCmdConfig.cxx:140
 RooCmdConfig.cxx:141
 RooCmdConfig.cxx:142
 RooCmdConfig.cxx:143
 RooCmdConfig.cxx:144
 RooCmdConfig.cxx:145
 RooCmdConfig.cxx:146
 RooCmdConfig.cxx:147
 RooCmdConfig.cxx:148
 RooCmdConfig.cxx:149
 RooCmdConfig.cxx:150
 RooCmdConfig.cxx:151
 RooCmdConfig.cxx:152
 RooCmdConfig.cxx:153
 RooCmdConfig.cxx:154
 RooCmdConfig.cxx:155
 RooCmdConfig.cxx:156
 RooCmdConfig.cxx:157
 RooCmdConfig.cxx:158
 RooCmdConfig.cxx:159
 RooCmdConfig.cxx:160
 RooCmdConfig.cxx:161
 RooCmdConfig.cxx:162
 RooCmdConfig.cxx:163
 RooCmdConfig.cxx:164
 RooCmdConfig.cxx:165
 RooCmdConfig.cxx:166
 RooCmdConfig.cxx:167
 RooCmdConfig.cxx:168
 RooCmdConfig.cxx:169
 RooCmdConfig.cxx:170
 RooCmdConfig.cxx:171
 RooCmdConfig.cxx:172
 RooCmdConfig.cxx:173
 RooCmdConfig.cxx:174
 RooCmdConfig.cxx:175
 RooCmdConfig.cxx:176
 RooCmdConfig.cxx:177
 RooCmdConfig.cxx:178
 RooCmdConfig.cxx:179
 RooCmdConfig.cxx:180
 RooCmdConfig.cxx:181
 RooCmdConfig.cxx:182
 RooCmdConfig.cxx:183
 RooCmdConfig.cxx:184
 RooCmdConfig.cxx:185
 RooCmdConfig.cxx:186
 RooCmdConfig.cxx:187
 RooCmdConfig.cxx:188
 RooCmdConfig.cxx:189
 RooCmdConfig.cxx:190
 RooCmdConfig.cxx:191
 RooCmdConfig.cxx:192
 RooCmdConfig.cxx:193
 RooCmdConfig.cxx:194
 RooCmdConfig.cxx:195
 RooCmdConfig.cxx:196
 RooCmdConfig.cxx:197
 RooCmdConfig.cxx:198
 RooCmdConfig.cxx:199
 RooCmdConfig.cxx:200
 RooCmdConfig.cxx:201
 RooCmdConfig.cxx:202
 RooCmdConfig.cxx:203
 RooCmdConfig.cxx:204
 RooCmdConfig.cxx:205
 RooCmdConfig.cxx:206
 RooCmdConfig.cxx:207
 RooCmdConfig.cxx:208
 RooCmdConfig.cxx:209
 RooCmdConfig.cxx:210
 RooCmdConfig.cxx:211
 RooCmdConfig.cxx:212
 RooCmdConfig.cxx:213
 RooCmdConfig.cxx:214
 RooCmdConfig.cxx:215
 RooCmdConfig.cxx:216
 RooCmdConfig.cxx:217
 RooCmdConfig.cxx:218
 RooCmdConfig.cxx:219
 RooCmdConfig.cxx:220
 RooCmdConfig.cxx:221
 RooCmdConfig.cxx:222
 RooCmdConfig.cxx:223
 RooCmdConfig.cxx:224
 RooCmdConfig.cxx:225
 RooCmdConfig.cxx:226
 RooCmdConfig.cxx:227
 RooCmdConfig.cxx:228
 RooCmdConfig.cxx:229
 RooCmdConfig.cxx:230
 RooCmdConfig.cxx:231
 RooCmdConfig.cxx:232
 RooCmdConfig.cxx:233
 RooCmdConfig.cxx:234
 RooCmdConfig.cxx:235
 RooCmdConfig.cxx:236
 RooCmdConfig.cxx:237
 RooCmdConfig.cxx:238
 RooCmdConfig.cxx:239
 RooCmdConfig.cxx:240
 RooCmdConfig.cxx:241
 RooCmdConfig.cxx:242
 RooCmdConfig.cxx:243
 RooCmdConfig.cxx:244
 RooCmdConfig.cxx:245
 RooCmdConfig.cxx:246
 RooCmdConfig.cxx:247
 RooCmdConfig.cxx:248
 RooCmdConfig.cxx:249
 RooCmdConfig.cxx:250
 RooCmdConfig.cxx:251
 RooCmdConfig.cxx:252
 RooCmdConfig.cxx:253
 RooCmdConfig.cxx:254
 RooCmdConfig.cxx:255
 RooCmdConfig.cxx:256
 RooCmdConfig.cxx:257
 RooCmdConfig.cxx:258
 RooCmdConfig.cxx:259
 RooCmdConfig.cxx:260
 RooCmdConfig.cxx:261
 RooCmdConfig.cxx:262
 RooCmdConfig.cxx:263
 RooCmdConfig.cxx:264
 RooCmdConfig.cxx:265
 RooCmdConfig.cxx:266
 RooCmdConfig.cxx:267
 RooCmdConfig.cxx:268
 RooCmdConfig.cxx:269
 RooCmdConfig.cxx:270
 RooCmdConfig.cxx:271
 RooCmdConfig.cxx:272
 RooCmdConfig.cxx:273
 RooCmdConfig.cxx:274
 RooCmdConfig.cxx:275
 RooCmdConfig.cxx:276
 RooCmdConfig.cxx:277
 RooCmdConfig.cxx:278
 RooCmdConfig.cxx:279
 RooCmdConfig.cxx:280
 RooCmdConfig.cxx:281
 RooCmdConfig.cxx:282
 RooCmdConfig.cxx:283
 RooCmdConfig.cxx:284
 RooCmdConfig.cxx:285
 RooCmdConfig.cxx:286
 RooCmdConfig.cxx:287
 RooCmdConfig.cxx:288
 RooCmdConfig.cxx:289
 RooCmdConfig.cxx:290
 RooCmdConfig.cxx:291
 RooCmdConfig.cxx:292
 RooCmdConfig.cxx:293
 RooCmdConfig.cxx:294
 RooCmdConfig.cxx:295
 RooCmdConfig.cxx:296
 RooCmdConfig.cxx:297
 RooCmdConfig.cxx:298
 RooCmdConfig.cxx:299
 RooCmdConfig.cxx:300
 RooCmdConfig.cxx:301
 RooCmdConfig.cxx:302
 RooCmdConfig.cxx:303
 RooCmdConfig.cxx:304
 RooCmdConfig.cxx:305
 RooCmdConfig.cxx:306
 RooCmdConfig.cxx:307
 RooCmdConfig.cxx:308
 RooCmdConfig.cxx:309
 RooCmdConfig.cxx:310
 RooCmdConfig.cxx:311
 RooCmdConfig.cxx:312
 RooCmdConfig.cxx:313
 RooCmdConfig.cxx:314
 RooCmdConfig.cxx:315
 RooCmdConfig.cxx:316
 RooCmdConfig.cxx:317
 RooCmdConfig.cxx:318
 RooCmdConfig.cxx:319
 RooCmdConfig.cxx:320
 RooCmdConfig.cxx:321
 RooCmdConfig.cxx:322
 RooCmdConfig.cxx:323
 RooCmdConfig.cxx:324
 RooCmdConfig.cxx:325
 RooCmdConfig.cxx:326
 RooCmdConfig.cxx:327
 RooCmdConfig.cxx:328
 RooCmdConfig.cxx:329
 RooCmdConfig.cxx:330
 RooCmdConfig.cxx:331
 RooCmdConfig.cxx:332
 RooCmdConfig.cxx:333
 RooCmdConfig.cxx:334
 RooCmdConfig.cxx:335
 RooCmdConfig.cxx:336
 RooCmdConfig.cxx:337
 RooCmdConfig.cxx:338
 RooCmdConfig.cxx:339
 RooCmdConfig.cxx:340
 RooCmdConfig.cxx:341
 RooCmdConfig.cxx:342
 RooCmdConfig.cxx:343
 RooCmdConfig.cxx:344
 RooCmdConfig.cxx:345
 RooCmdConfig.cxx:346
 RooCmdConfig.cxx:347
 RooCmdConfig.cxx:348
 RooCmdConfig.cxx:349
 RooCmdConfig.cxx:350
 RooCmdConfig.cxx:351
 RooCmdConfig.cxx:352
 RooCmdConfig.cxx:353
 RooCmdConfig.cxx:354
 RooCmdConfig.cxx:355
 RooCmdConfig.cxx:356
 RooCmdConfig.cxx:357
 RooCmdConfig.cxx:358
 RooCmdConfig.cxx:359
 RooCmdConfig.cxx:360
 RooCmdConfig.cxx:361
 RooCmdConfig.cxx:362
 RooCmdConfig.cxx:363
 RooCmdConfig.cxx:364
 RooCmdConfig.cxx:365
 RooCmdConfig.cxx:366
 RooCmdConfig.cxx:367
 RooCmdConfig.cxx:368
 RooCmdConfig.cxx:369
 RooCmdConfig.cxx:370
 RooCmdConfig.cxx:371
 RooCmdConfig.cxx:372
 RooCmdConfig.cxx:373
 RooCmdConfig.cxx:374
 RooCmdConfig.cxx:375
 RooCmdConfig.cxx:376
 RooCmdConfig.cxx:377
 RooCmdConfig.cxx:378
 RooCmdConfig.cxx:379
 RooCmdConfig.cxx:380
 RooCmdConfig.cxx:381
 RooCmdConfig.cxx:382
 RooCmdConfig.cxx:383
 RooCmdConfig.cxx:384
 RooCmdConfig.cxx:385
 RooCmdConfig.cxx:386
 RooCmdConfig.cxx:387
 RooCmdConfig.cxx:388
 RooCmdConfig.cxx:389
 RooCmdConfig.cxx:390
 RooCmdConfig.cxx:391
 RooCmdConfig.cxx:392
 RooCmdConfig.cxx:393
 RooCmdConfig.cxx:394
 RooCmdConfig.cxx:395
 RooCmdConfig.cxx:396
 RooCmdConfig.cxx:397
 RooCmdConfig.cxx:398
 RooCmdConfig.cxx:399
 RooCmdConfig.cxx:400
 RooCmdConfig.cxx:401
 RooCmdConfig.cxx:402
 RooCmdConfig.cxx:403
 RooCmdConfig.cxx:404
 RooCmdConfig.cxx:405
 RooCmdConfig.cxx:406
 RooCmdConfig.cxx:407
 RooCmdConfig.cxx:408
 RooCmdConfig.cxx:409
 RooCmdConfig.cxx:410
 RooCmdConfig.cxx:411
 RooCmdConfig.cxx:412
 RooCmdConfig.cxx:413
 RooCmdConfig.cxx:414
 RooCmdConfig.cxx:415
 RooCmdConfig.cxx:416
 RooCmdConfig.cxx:417
 RooCmdConfig.cxx:418
 RooCmdConfig.cxx:419
 RooCmdConfig.cxx:420
 RooCmdConfig.cxx:421
 RooCmdConfig.cxx:422
 RooCmdConfig.cxx:423
 RooCmdConfig.cxx:424
 RooCmdConfig.cxx:425
 RooCmdConfig.cxx:426
 RooCmdConfig.cxx:427
 RooCmdConfig.cxx:428
 RooCmdConfig.cxx:429
 RooCmdConfig.cxx:430
 RooCmdConfig.cxx:431
 RooCmdConfig.cxx:432
 RooCmdConfig.cxx:433
 RooCmdConfig.cxx:434
 RooCmdConfig.cxx:435
 RooCmdConfig.cxx:436
 RooCmdConfig.cxx:437
 RooCmdConfig.cxx:438
 RooCmdConfig.cxx:439
 RooCmdConfig.cxx:440
 RooCmdConfig.cxx:441
 RooCmdConfig.cxx:442
 RooCmdConfig.cxx:443
 RooCmdConfig.cxx:444
 RooCmdConfig.cxx:445
 RooCmdConfig.cxx:446
 RooCmdConfig.cxx:447
 RooCmdConfig.cxx:448
 RooCmdConfig.cxx:449
 RooCmdConfig.cxx:450
 RooCmdConfig.cxx:451
 RooCmdConfig.cxx:452
 RooCmdConfig.cxx:453
 RooCmdConfig.cxx:454
 RooCmdConfig.cxx:455
 RooCmdConfig.cxx:456
 RooCmdConfig.cxx:457
 RooCmdConfig.cxx:458
 RooCmdConfig.cxx:459
 RooCmdConfig.cxx:460
 RooCmdConfig.cxx:461
 RooCmdConfig.cxx:462
 RooCmdConfig.cxx:463
 RooCmdConfig.cxx:464
 RooCmdConfig.cxx:465
 RooCmdConfig.cxx:466
 RooCmdConfig.cxx:467
 RooCmdConfig.cxx:468
 RooCmdConfig.cxx:469
 RooCmdConfig.cxx:470
 RooCmdConfig.cxx:471
 RooCmdConfig.cxx:472
 RooCmdConfig.cxx:473
 RooCmdConfig.cxx:474
 RooCmdConfig.cxx:475
 RooCmdConfig.cxx:476
 RooCmdConfig.cxx:477
 RooCmdConfig.cxx:478
 RooCmdConfig.cxx:479
 RooCmdConfig.cxx:480
 RooCmdConfig.cxx:481
 RooCmdConfig.cxx:482
 RooCmdConfig.cxx:483
 RooCmdConfig.cxx:484
 RooCmdConfig.cxx:485
 RooCmdConfig.cxx:486
 RooCmdConfig.cxx:487
 RooCmdConfig.cxx:488
 RooCmdConfig.cxx:489
 RooCmdConfig.cxx:490
 RooCmdConfig.cxx:491
 RooCmdConfig.cxx:492
 RooCmdConfig.cxx:493
 RooCmdConfig.cxx:494
 RooCmdConfig.cxx:495
 RooCmdConfig.cxx:496
 RooCmdConfig.cxx:497
 RooCmdConfig.cxx:498
 RooCmdConfig.cxx:499
 RooCmdConfig.cxx:500
 RooCmdConfig.cxx:501
 RooCmdConfig.cxx:502
 RooCmdConfig.cxx:503
 RooCmdConfig.cxx:504
 RooCmdConfig.cxx:505
 RooCmdConfig.cxx:506
 RooCmdConfig.cxx:507
 RooCmdConfig.cxx:508
 RooCmdConfig.cxx:509
 RooCmdConfig.cxx:510
 RooCmdConfig.cxx:511
 RooCmdConfig.cxx:512
 RooCmdConfig.cxx:513
 RooCmdConfig.cxx:514
 RooCmdConfig.cxx:515
 RooCmdConfig.cxx:516
 RooCmdConfig.cxx:517
 RooCmdConfig.cxx:518
 RooCmdConfig.cxx:519
 RooCmdConfig.cxx:520
 RooCmdConfig.cxx:521
 RooCmdConfig.cxx:522
 RooCmdConfig.cxx:523
 RooCmdConfig.cxx:524
 RooCmdConfig.cxx:525
 RooCmdConfig.cxx:526
 RooCmdConfig.cxx:527
 RooCmdConfig.cxx:528
 RooCmdConfig.cxx:529
 RooCmdConfig.cxx:530
 RooCmdConfig.cxx:531
 RooCmdConfig.cxx:532
 RooCmdConfig.cxx:533
 RooCmdConfig.cxx:534
 RooCmdConfig.cxx:535
 RooCmdConfig.cxx:536
 RooCmdConfig.cxx:537
 RooCmdConfig.cxx:538
 RooCmdConfig.cxx:539
 RooCmdConfig.cxx:540
 RooCmdConfig.cxx:541
 RooCmdConfig.cxx:542
 RooCmdConfig.cxx:543
 RooCmdConfig.cxx:544
 RooCmdConfig.cxx:545
 RooCmdConfig.cxx:546
 RooCmdConfig.cxx:547
 RooCmdConfig.cxx:548
 RooCmdConfig.cxx:549
 RooCmdConfig.cxx:550
 RooCmdConfig.cxx:551
 RooCmdConfig.cxx:552
 RooCmdConfig.cxx:553
 RooCmdConfig.cxx:554
 RooCmdConfig.cxx:555
 RooCmdConfig.cxx:556
 RooCmdConfig.cxx:557
 RooCmdConfig.cxx:558
 RooCmdConfig.cxx:559
 RooCmdConfig.cxx:560
 RooCmdConfig.cxx:561
 RooCmdConfig.cxx:562
 RooCmdConfig.cxx:563
 RooCmdConfig.cxx:564
 RooCmdConfig.cxx:565
 RooCmdConfig.cxx:566
 RooCmdConfig.cxx:567
 RooCmdConfig.cxx:568
 RooCmdConfig.cxx:569
 RooCmdConfig.cxx:570
 RooCmdConfig.cxx:571
 RooCmdConfig.cxx:572
 RooCmdConfig.cxx:573
 RooCmdConfig.cxx:574
 RooCmdConfig.cxx:575
 RooCmdConfig.cxx:576
 RooCmdConfig.cxx:577
 RooCmdConfig.cxx:578
 RooCmdConfig.cxx:579
 RooCmdConfig.cxx:580
 RooCmdConfig.cxx:581
 RooCmdConfig.cxx:582
 RooCmdConfig.cxx:583
 RooCmdConfig.cxx:584
 RooCmdConfig.cxx:585
 RooCmdConfig.cxx:586
 RooCmdConfig.cxx:587
 RooCmdConfig.cxx:588
 RooCmdConfig.cxx:589
 RooCmdConfig.cxx:590
 RooCmdConfig.cxx:591
 RooCmdConfig.cxx:592
 RooCmdConfig.cxx:593
 RooCmdConfig.cxx:594
 RooCmdConfig.cxx:595
 RooCmdConfig.cxx:596
 RooCmdConfig.cxx:597
 RooCmdConfig.cxx:598
 RooCmdConfig.cxx:599
 RooCmdConfig.cxx:600
 RooCmdConfig.cxx:601
 RooCmdConfig.cxx:602
 RooCmdConfig.cxx:603
 RooCmdConfig.cxx:604
 RooCmdConfig.cxx:605
 RooCmdConfig.cxx:606
 RooCmdConfig.cxx:607
 RooCmdConfig.cxx:608
 RooCmdConfig.cxx:609
 RooCmdConfig.cxx:610
 RooCmdConfig.cxx:611
 RooCmdConfig.cxx:612
 RooCmdConfig.cxx:613
 RooCmdConfig.cxx:614
 RooCmdConfig.cxx:615
 RooCmdConfig.cxx:616
 RooCmdConfig.cxx:617
 RooCmdConfig.cxx:618
 RooCmdConfig.cxx:619
 RooCmdConfig.cxx:620
 RooCmdConfig.cxx:621
 RooCmdConfig.cxx:622
 RooCmdConfig.cxx:623
 RooCmdConfig.cxx:624
 RooCmdConfig.cxx:625
 RooCmdConfig.cxx:626
 RooCmdConfig.cxx:627
 RooCmdConfig.cxx:628
 RooCmdConfig.cxx:629
 RooCmdConfig.cxx:630
 RooCmdConfig.cxx:631
 RooCmdConfig.cxx:632
 RooCmdConfig.cxx:633
 RooCmdConfig.cxx:634
 RooCmdConfig.cxx:635
 RooCmdConfig.cxx:636
 RooCmdConfig.cxx:637
 RooCmdConfig.cxx:638
 RooCmdConfig.cxx:639
 RooCmdConfig.cxx:640
 RooCmdConfig.cxx:641
 RooCmdConfig.cxx:642
 RooCmdConfig.cxx:643
 RooCmdConfig.cxx:644
 RooCmdConfig.cxx:645
 RooCmdConfig.cxx:646
 RooCmdConfig.cxx:647
 RooCmdConfig.cxx:648
 RooCmdConfig.cxx:649
 RooCmdConfig.cxx:650
 RooCmdConfig.cxx:651
 RooCmdConfig.cxx:652
 RooCmdConfig.cxx:653
 RooCmdConfig.cxx:654
 RooCmdConfig.cxx:655
 RooCmdConfig.cxx:656
 RooCmdConfig.cxx:657
 RooCmdConfig.cxx:658
 RooCmdConfig.cxx:659
 RooCmdConfig.cxx:660
 RooCmdConfig.cxx:661
 RooCmdConfig.cxx:662
 RooCmdConfig.cxx:663
 RooCmdConfig.cxx:664
 RooCmdConfig.cxx:665
 RooCmdConfig.cxx:666
 RooCmdConfig.cxx:667
 RooCmdConfig.cxx:668
 RooCmdConfig.cxx:669
 RooCmdConfig.cxx:670
 RooCmdConfig.cxx:671
 RooCmdConfig.cxx:672
 RooCmdConfig.cxx:673
 RooCmdConfig.cxx:674
 RooCmdConfig.cxx:675
 RooCmdConfig.cxx:676
 RooCmdConfig.cxx:677
 RooCmdConfig.cxx:678
 RooCmdConfig.cxx:679
 RooCmdConfig.cxx:680
 RooCmdConfig.cxx:681
 RooCmdConfig.cxx:682
 RooCmdConfig.cxx:683
 RooCmdConfig.cxx:684
 RooCmdConfig.cxx:685
 RooCmdConfig.cxx:686
 RooCmdConfig.cxx:687
 RooCmdConfig.cxx:688
 RooCmdConfig.cxx:689
 RooCmdConfig.cxx:690
 RooCmdConfig.cxx:691
 RooCmdConfig.cxx:692
 RooCmdConfig.cxx:693
 RooCmdConfig.cxx:694
 RooCmdConfig.cxx:695
 RooCmdConfig.cxx:696
 RooCmdConfig.cxx:697
 RooCmdConfig.cxx:698
 RooCmdConfig.cxx:699
 RooCmdConfig.cxx:700
 RooCmdConfig.cxx:701
 RooCmdConfig.cxx:702
 RooCmdConfig.cxx:703
 RooCmdConfig.cxx:704
 RooCmdConfig.cxx:705
 RooCmdConfig.cxx:706
 RooCmdConfig.cxx:707
 RooCmdConfig.cxx:708
 RooCmdConfig.cxx:709
 RooCmdConfig.cxx:710
 RooCmdConfig.cxx:711
 RooCmdConfig.cxx:712
 RooCmdConfig.cxx:713
 RooCmdConfig.cxx:714
 RooCmdConfig.cxx:715
 RooCmdConfig.cxx:716
 RooCmdConfig.cxx:717
 RooCmdConfig.cxx:718
 RooCmdConfig.cxx:719
 RooCmdConfig.cxx:720
 RooCmdConfig.cxx:721
 RooCmdConfig.cxx:722
 RooCmdConfig.cxx:723
 RooCmdConfig.cxx:724
 RooCmdConfig.cxx:725
 RooCmdConfig.cxx:726
 RooCmdConfig.cxx:727
 RooCmdConfig.cxx:728
 RooCmdConfig.cxx:729
 RooCmdConfig.cxx:730
 RooCmdConfig.cxx:731
 RooCmdConfig.cxx:732
 RooCmdConfig.cxx:733
 RooCmdConfig.cxx:734
 RooCmdConfig.cxx:735
 RooCmdConfig.cxx:736
 RooCmdConfig.cxx:737
 RooCmdConfig.cxx:738
 RooCmdConfig.cxx:739
 RooCmdConfig.cxx:740
 RooCmdConfig.cxx:741
 RooCmdConfig.cxx:742
 RooCmdConfig.cxx:743
 RooCmdConfig.cxx:744
 RooCmdConfig.cxx:745
 RooCmdConfig.cxx:746
 RooCmdConfig.cxx:747
 RooCmdConfig.cxx:748
 RooCmdConfig.cxx:749
 RooCmdConfig.cxx:750
 RooCmdConfig.cxx:751
 RooCmdConfig.cxx:752
 RooCmdConfig.cxx:753
 RooCmdConfig.cxx:754
 RooCmdConfig.cxx:755
 RooCmdConfig.cxx:756
 RooCmdConfig.cxx:757
 RooCmdConfig.cxx:758
 RooCmdConfig.cxx:759
 RooCmdConfig.cxx:760
 RooCmdConfig.cxx:761
 RooCmdConfig.cxx:762
 RooCmdConfig.cxx:763
 RooCmdConfig.cxx:764
 RooCmdConfig.cxx:765
 RooCmdConfig.cxx:766
 RooCmdConfig.cxx:767
 RooCmdConfig.cxx:768
 RooCmdConfig.cxx:769
 RooCmdConfig.cxx:770
 RooCmdConfig.cxx:771
 RooCmdConfig.cxx:772
 RooCmdConfig.cxx:773
 RooCmdConfig.cxx:774
 RooCmdConfig.cxx:775
 RooCmdConfig.cxx:776
 RooCmdConfig.cxx:777
 RooCmdConfig.cxx:778
 RooCmdConfig.cxx:779
 RooCmdConfig.cxx:780
 RooCmdConfig.cxx:781
 RooCmdConfig.cxx:782
 RooCmdConfig.cxx:783
 RooCmdConfig.cxx:784
 RooCmdConfig.cxx:785
 RooCmdConfig.cxx:786
 RooCmdConfig.cxx:787
 RooCmdConfig.cxx:788
 RooCmdConfig.cxx:789
 RooCmdConfig.cxx:790
 RooCmdConfig.cxx:791
 RooCmdConfig.cxx:792
 RooCmdConfig.cxx:793
 RooCmdConfig.cxx:794
 RooCmdConfig.cxx:795
 RooCmdConfig.cxx:796
 RooCmdConfig.cxx:797
 RooCmdConfig.cxx:798
 RooCmdConfig.cxx:799
 RooCmdConfig.cxx:800
 RooCmdConfig.cxx:801
 RooCmdConfig.cxx:802
 RooCmdConfig.cxx:803
 RooCmdConfig.cxx:804
 RooCmdConfig.cxx:805
 RooCmdConfig.cxx:806
 RooCmdConfig.cxx:807
 RooCmdConfig.cxx:808
 RooCmdConfig.cxx:809
 RooCmdConfig.cxx:810
 RooCmdConfig.cxx:811
 RooCmdConfig.cxx:812
 RooCmdConfig.cxx:813
 RooCmdConfig.cxx:814
 RooCmdConfig.cxx:815
 RooCmdConfig.cxx:816
 RooCmdConfig.cxx:817
 RooCmdConfig.cxx:818
 RooCmdConfig.cxx:819
 RooCmdConfig.cxx:820
 RooCmdConfig.cxx:821
 RooCmdConfig.cxx:822
 RooCmdConfig.cxx:823
 RooCmdConfig.cxx:824
 RooCmdConfig.cxx:825
 RooCmdConfig.cxx:826
 RooCmdConfig.cxx:827
 RooCmdConfig.cxx:828
 RooCmdConfig.cxx:829
 RooCmdConfig.cxx:830
 RooCmdConfig.cxx:831
 RooCmdConfig.cxx:832
 RooCmdConfig.cxx:833
 RooCmdConfig.cxx:834
 RooCmdConfig.cxx:835
 RooCmdConfig.cxx:836
 RooCmdConfig.cxx:837
 RooCmdConfig.cxx:838
 RooCmdConfig.cxx:839
 RooCmdConfig.cxx:840
 RooCmdConfig.cxx:841
 RooCmdConfig.cxx:842
 RooCmdConfig.cxx:843
 RooCmdConfig.cxx:844
 RooCmdConfig.cxx:845
 RooCmdConfig.cxx:846
 RooCmdConfig.cxx:847
 RooCmdConfig.cxx:848
 RooCmdConfig.cxx:849
 RooCmdConfig.cxx:850
 RooCmdConfig.cxx:851
 RooCmdConfig.cxx:852
 RooCmdConfig.cxx:853
 RooCmdConfig.cxx:854
 RooCmdConfig.cxx:855
 RooCmdConfig.cxx:856
 RooCmdConfig.cxx:857
 RooCmdConfig.cxx:858
 RooCmdConfig.cxx:859
 RooCmdConfig.cxx:860
 RooCmdConfig.cxx:861
 RooCmdConfig.cxx:862
 RooCmdConfig.cxx:863
 RooCmdConfig.cxx:864
 RooCmdConfig.cxx:865
 RooCmdConfig.cxx:866
 RooCmdConfig.cxx:867
 RooCmdConfig.cxx:868
 RooCmdConfig.cxx:869