ROOT logo
/*****************************************************************************
 * Project: RooFit                                                           *
 * Package: RooFitCore                                                       *
 *    File: $Id: RooCmdConfig.h,v 1.12 2007/05/11 09:11:30 verkerke Exp $
 * 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)             *
 *****************************************************************************/

#ifndef ROO_CMD_CONFIG
#define ROO_CMD_CONFIG

#include "TObject.h"
#include "TString.h"
#include "TList.h"
#include "RooCmdArg.h"
#include "RooArgSet.h"


class RooCmdConfig : public TObject {
public:

  RooCmdConfig(const char* methodName);
  RooCmdConfig(const RooCmdConfig& other) ;
  ~RooCmdConfig();

  void setVerbose(Bool_t flag) { 
    // If flag is true verbose messaging is activated
    _verbose = flag ; 
  }

  void allowUndefined(Bool_t flag=kTRUE) { 
    // If flag is true the processing of unrecognized RooCmdArgs
    // is not considered an error
    _allowUndefined = flag ; 
  }
  void defineDependency(const char* refArgName, const char* neededArgName) ;
  void defineMutex(const char* argName1, const char* argName2) ;
  void defineMutex(const char* argName1, const char* argName2, const char* argName3) ;
  void defineMutex(const char* argName1, const char* argName2, const char* argName3, const char* argName4) ;
  void defineMutex(const char* argName1, const char* argName2, const char* argName3, const char* argName4, const char* argName5) ;
  void defineRequiredArgs(const char* argName1, const char* argName2=0,
			  const char* argName3=0, const char* argName4=0,
			  const char* argName5=0, const char* argName6=0,
			  const char* argName7=0, const char* argName8=0) ;

  Bool_t defineInt(const char* name, const char* argName, Int_t intNum, Int_t defValue=0) ;
  Bool_t defineDouble(const char* name, const char* argName, Int_t doubleNum, Double_t defValue=0.) ;
  Bool_t defineString(const char* name, const char* argName, Int_t stringNum, const char* defValue="",Bool_t appendMode=kFALSE) ;
  Bool_t defineObject(const char* name, const char* argName, Int_t setNum, const TObject* obj=0, Bool_t isArray=kFALSE) ;
  Bool_t defineSet(const char* name, const char* argName, Int_t setNum, const RooArgSet* set=0) ;

  Bool_t process(const RooCmdArg& arg) ;
  Bool_t process(const RooCmdArg& arg1, const RooCmdArg& arg2, 
                 const RooCmdArg& arg3=RooCmdArg::none(), const RooCmdArg& arg4=RooCmdArg::none(), 
                 const RooCmdArg& arg5=RooCmdArg::none(), const RooCmdArg& arg6=RooCmdArg::none(), 
                 const RooCmdArg& arg7=RooCmdArg::none(), const RooCmdArg& arg8=RooCmdArg::none()) ;
  Bool_t process(const RooLinkedList& argList) ;

  Int_t getInt(const char* name, Int_t defaultValue=0) ;
  Double_t getDouble(const char* name, Double_t defaultValue=0) ;
  const char* getString(const char* name, const char* defaultValue="",Bool_t convEmptyToNull=kFALSE) ;
  TObject* getObject(const char* name, TObject* obj=0) ;
  RooArgSet* getSet(const char* name, RooArgSet* set=0) ;
  const RooLinkedList& getObjectList(const char* name) ;

  Bool_t ok(Bool_t verbose) const ;

  const char* missingArgs() const ;

  RooLinkedList filterCmdList(RooLinkedList& cmdInList, const char* cmdNameList, Bool_t removeFromInList=kTRUE) ;
  void stripCmdList(RooLinkedList& cmdList, const char* cmdsToPurge) ;
  Bool_t hasProcessed(const char* cmdName) const ;

  void print() ;


  static Int_t decodeIntOnTheFly(const char* callerID, const char* cmdArgName, Int_t intIdx, Int_t defVal, const RooCmdArg& arg1, 
				 const RooCmdArg& arg2=RooCmdArg(), const RooCmdArg& arg3=RooCmdArg(), const RooCmdArg& arg4=RooCmdArg(),
				 const RooCmdArg& arg5=RooCmdArg(), const RooCmdArg& arg6=RooCmdArg(), const RooCmdArg& arg7=RooCmdArg(),
				 const RooCmdArg& arg8=RooCmdArg(), const RooCmdArg& arg9=RooCmdArg()) ;

  static const char* decodeStringOnTheFly(const char* callerID, const char* cmdArgName, Int_t intIdx, const char* defVal, const RooCmdArg& arg1, 
					 const RooCmdArg& arg2=RooCmdArg(), const RooCmdArg& arg3=RooCmdArg(), const RooCmdArg& arg4=RooCmdArg(),
					 const RooCmdArg& arg5=RooCmdArg(), const RooCmdArg& arg6=RooCmdArg(), const RooCmdArg& arg7=RooCmdArg(),
					 const RooCmdArg& arg8=RooCmdArg(), const RooCmdArg& arg9=RooCmdArg()) ;

  static TObject* decodeObjOnTheFly(const char* callerID, const char* cmdArgName, Int_t objIdx, TObject* defVal, const RooCmdArg& arg1, 
				     const RooCmdArg& arg2=RooCmdArg(), const RooCmdArg& arg3=RooCmdArg(), const RooCmdArg& arg4=RooCmdArg(),
				     const RooCmdArg& arg5=RooCmdArg(), const RooCmdArg& arg6=RooCmdArg(), const RooCmdArg& arg7=RooCmdArg(),
				     const RooCmdArg& arg8=RooCmdArg(), const RooCmdArg& arg9=RooCmdArg()) ;

protected:

  TString _name ;
  
  Bool_t _verbose ;
  Bool_t _error ;
  Bool_t _allowUndefined ;

  TList _iList ; // Integer list
  TList _dList ; // Double list
  TList _sList ; // String list
  TList _oList ; // Object list
  TList _cList ; // RooArgSet list

  TList _rList ; // Required cmd list
  TList _fList ; // Forbidden cmd list
  TList _mList ; // Mutex cmd list 
  TList _yList ; // Dependency cmd list
  TList _pList ; // Processed cmd list 

  TIterator* _iIter ; // Iterator over integer list
  TIterator* _dIter ; // Iterator over double list
  TIterator* _sIter ; // Iterator over string list
  TIterator* _oIter ; // Iterator over object list
  TIterator* _cIter ; // Iterator over RooArgSet list
  TIterator* _rIter ; // Iterator over required cmd list
  TIterator* _fIter ; // Iterator over forbidden cmd list
  TIterator* _mIter ; // Iterator over mutex list
  TIterator* _yIter ; // Iterator over dependency list
  TIterator* _pIter ; // Iterator over processed cmd list

  ClassDef(RooCmdConfig,0) // Configurable parse of RooCmdArg objects
};

#endif


 RooCmdConfig.h:1
 RooCmdConfig.h:2
 RooCmdConfig.h:3
 RooCmdConfig.h:4
 RooCmdConfig.h:5
 RooCmdConfig.h:6
 RooCmdConfig.h:7
 RooCmdConfig.h:8
 RooCmdConfig.h:9
 RooCmdConfig.h:10
 RooCmdConfig.h:11
 RooCmdConfig.h:12
 RooCmdConfig.h:13
 RooCmdConfig.h:14
 RooCmdConfig.h:15
 RooCmdConfig.h:16
 RooCmdConfig.h:17
 RooCmdConfig.h:18
 RooCmdConfig.h:19
 RooCmdConfig.h:20
 RooCmdConfig.h:21
 RooCmdConfig.h:22
 RooCmdConfig.h:23
 RooCmdConfig.h:24
 RooCmdConfig.h:25
 RooCmdConfig.h:26
 RooCmdConfig.h:27
 RooCmdConfig.h:28
 RooCmdConfig.h:29
 RooCmdConfig.h:30
 RooCmdConfig.h:31
 RooCmdConfig.h:32
 RooCmdConfig.h:33
 RooCmdConfig.h:34
 RooCmdConfig.h:35
 RooCmdConfig.h:36
 RooCmdConfig.h:37
 RooCmdConfig.h:38
 RooCmdConfig.h:39
 RooCmdConfig.h:40
 RooCmdConfig.h:41
 RooCmdConfig.h:42
 RooCmdConfig.h:43
 RooCmdConfig.h:44
 RooCmdConfig.h:45
 RooCmdConfig.h:46
 RooCmdConfig.h:47
 RooCmdConfig.h:48
 RooCmdConfig.h:49
 RooCmdConfig.h:50
 RooCmdConfig.h:51
 RooCmdConfig.h:52
 RooCmdConfig.h:53
 RooCmdConfig.h:54
 RooCmdConfig.h:55
 RooCmdConfig.h:56
 RooCmdConfig.h:57
 RooCmdConfig.h:58
 RooCmdConfig.h:59
 RooCmdConfig.h:60
 RooCmdConfig.h:61
 RooCmdConfig.h:62
 RooCmdConfig.h:63
 RooCmdConfig.h:64
 RooCmdConfig.h:65
 RooCmdConfig.h:66
 RooCmdConfig.h:67
 RooCmdConfig.h:68
 RooCmdConfig.h:69
 RooCmdConfig.h:70
 RooCmdConfig.h:71
 RooCmdConfig.h:72
 RooCmdConfig.h:73
 RooCmdConfig.h:74
 RooCmdConfig.h:75
 RooCmdConfig.h:76
 RooCmdConfig.h:77
 RooCmdConfig.h:78
 RooCmdConfig.h:79
 RooCmdConfig.h:80
 RooCmdConfig.h:81
 RooCmdConfig.h:82
 RooCmdConfig.h:83
 RooCmdConfig.h:84
 RooCmdConfig.h:85
 RooCmdConfig.h:86
 RooCmdConfig.h:87
 RooCmdConfig.h:88
 RooCmdConfig.h:89
 RooCmdConfig.h:90
 RooCmdConfig.h:91
 RooCmdConfig.h:92
 RooCmdConfig.h:93
 RooCmdConfig.h:94
 RooCmdConfig.h:95
 RooCmdConfig.h:96
 RooCmdConfig.h:97
 RooCmdConfig.h:98
 RooCmdConfig.h:99
 RooCmdConfig.h:100
 RooCmdConfig.h:101
 RooCmdConfig.h:102
 RooCmdConfig.h:103
 RooCmdConfig.h:104
 RooCmdConfig.h:105
 RooCmdConfig.h:106
 RooCmdConfig.h:107
 RooCmdConfig.h:108
 RooCmdConfig.h:109
 RooCmdConfig.h:110
 RooCmdConfig.h:111
 RooCmdConfig.h:112
 RooCmdConfig.h:113
 RooCmdConfig.h:114
 RooCmdConfig.h:115
 RooCmdConfig.h:116
 RooCmdConfig.h:117
 RooCmdConfig.h:118
 RooCmdConfig.h:119
 RooCmdConfig.h:120
 RooCmdConfig.h:121
 RooCmdConfig.h:122
 RooCmdConfig.h:123
 RooCmdConfig.h:124
 RooCmdConfig.h:125
 RooCmdConfig.h:126
 RooCmdConfig.h:127
 RooCmdConfig.h:128
 RooCmdConfig.h:129
 RooCmdConfig.h:130
 RooCmdConfig.h:131
 RooCmdConfig.h:132
 RooCmdConfig.h:133
 RooCmdConfig.h:134
 RooCmdConfig.h:135
 RooCmdConfig.h:136