ROOT logo
#ifndef __TMrbLofUserVars_h__
#define __TMrbLofUserVars_h__

//_________________________________________________[C++ CLASS DEFINITION FILE]
//////////////////////////////////////////////////////////////////////////////
// Name:           utils/inc/TMrbLofUserVars.h
// Purpose:        Define named variables and windows
// Class:          TMrbLofUserVars -- a list of user-defined variables and windows
// Description:    Common class definitions to be used within MARaBOU
// Author:         R. Lutter
// Revision:       $Id: TMrbLofUserVars.h,v 1.8 2010-11-22 11:41:07 Marabou Exp $
// Date:
// Keywords:
//////////////////////////////////////////////////////////////////////////////

#include "TROOT.h"
#include "TObject.h"
#include "TNamed.h"
#include "TDirectory.h"
#include "TObjArray.h"
#include "TIterator.h"
#include "TSystem.h"
#include "TFormula.h"

#include "TMrbNamedX.h"
#include "TMrbLofNamedX.h"
#include "TMrbVar.h"
#include "TMrbWdw.h"
#include "TMrbVarWdwCommon.h"

//______________________________________________________[C++ CLASS DEFINITION]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbLofUserVars
// Purpose:        Defines a list of user-defined variables and windows
// Description:    Defines a list of user variables.
//                 This class is mainly used to keep track of all vars and
//                 windows defined in the application (global gMrbLofUserVars).
// Keywords:
//////////////////////////////////////////////////////////////////////////////

class TMrbLofUserVars: public TNamed {

	public:
		TMrbLofUserVars() {};		// default ctor

		~TMrbLofUserVars() { 		// dtor
			fLofVars.Clear();			// empty list - but don't delete objects
			gDirectory->GetList()->Remove(this);
		};

		TMrbLofUserVars(const Char_t * Name);				// explicit ctor

		TMrbLofUserVars(const TMrbLofUserVars &) {};		// default copy ctor

		Bool_t Append(TObject * VarObj);					// add a new object
		inline void Remove(TObject * VarObj) {				// remove object from list
			fLofVars.Remove(VarObj);
			fLofVars.Compress();
		};
		Bool_t Initialize(const Char_t * Option = "Default");		// set all vars/windows to initial values
		Bool_t ReadFromFile(const Char_t * FileName);		// read definitions and settings from file

		virtual void Print(ostream & OutStrm, Option_t * Option = "Default") const;	// output settings to cout
		virtual void Print(Option_t * Option = "Default") const { this->Print(cout, Option); };

		TObject * Find(const Char_t * VarName, UInt_t VarType = kVarOrWindowOrFunction) const;	// find variable
		TObject * First(UInt_t  VarType = kVarOrWindowOrFunction) const;							// get first entry
		TObject * After(TObject * VarPtr, UInt_t VarType = kVarOrWindow) const; 		// get next entry

		void SetInitialFctType(TObject * Fct, UInt_t FctType);

		inline UInt_t GetEntries() const { return(fLofVars.GetLast() + 1); };		// get number of entries
		inline TObject * Get(UInt_t Index) const { return(fLofVars[Index]); };	// get object at position index
		inline UInt_t IndexOf(TObject * VarObj) const { return(fLofVars.IndexOf(VarObj)); };	// get index
		inline void Replace(TObject * OldVar, TObject * NewVar) { fLofVars.AddAt(NewVar, IndexOf(OldVar)); };

		inline TObjArray * GetArray() { return(&fLofVars); };

		void Draw(Option_t * Option);					// draw windows

		void SetGlobalAddress();						// set global address gMrbLofUserVars

		inline void Help() { gSystem->Exec(Form("mrbHelp %s", this->ClassName())); };

	protected:
		Int_t fNofVars;					// total number of vars/windows
		TObjArray fLofVars; 			// list of variables
		TIterator * fIter;				// iterator

	ClassDef(TMrbLofUserVars, 1)	// [Utils] A list of user-defined variables/windows
};

#endif
 TMrbLofUserVars.h:1
 TMrbLofUserVars.h:2
 TMrbLofUserVars.h:3
 TMrbLofUserVars.h:4
 TMrbLofUserVars.h:5
 TMrbLofUserVars.h:6
 TMrbLofUserVars.h:7
 TMrbLofUserVars.h:8
 TMrbLofUserVars.h:9
 TMrbLofUserVars.h:10
 TMrbLofUserVars.h:11
 TMrbLofUserVars.h:12
 TMrbLofUserVars.h:13
 TMrbLofUserVars.h:14
 TMrbLofUserVars.h:15
 TMrbLofUserVars.h:16
 TMrbLofUserVars.h:17
 TMrbLofUserVars.h:18
 TMrbLofUserVars.h:19
 TMrbLofUserVars.h:20
 TMrbLofUserVars.h:21
 TMrbLofUserVars.h:22
 TMrbLofUserVars.h:23
 TMrbLofUserVars.h:24
 TMrbLofUserVars.h:25
 TMrbLofUserVars.h:26
 TMrbLofUserVars.h:27
 TMrbLofUserVars.h:28
 TMrbLofUserVars.h:29
 TMrbLofUserVars.h:30
 TMrbLofUserVars.h:31
 TMrbLofUserVars.h:32
 TMrbLofUserVars.h:33
 TMrbLofUserVars.h:34
 TMrbLofUserVars.h:35
 TMrbLofUserVars.h:36
 TMrbLofUserVars.h:37
 TMrbLofUserVars.h:38
 TMrbLofUserVars.h:39
 TMrbLofUserVars.h:40
 TMrbLofUserVars.h:41
 TMrbLofUserVars.h:42
 TMrbLofUserVars.h:43
 TMrbLofUserVars.h:44
 TMrbLofUserVars.h:45
 TMrbLofUserVars.h:46
 TMrbLofUserVars.h:47
 TMrbLofUserVars.h:48
 TMrbLofUserVars.h:49
 TMrbLofUserVars.h:50
 TMrbLofUserVars.h:51
 TMrbLofUserVars.h:52
 TMrbLofUserVars.h:53
 TMrbLofUserVars.h:54
 TMrbLofUserVars.h:55
 TMrbLofUserVars.h:56
 TMrbLofUserVars.h:57
 TMrbLofUserVars.h:58
 TMrbLofUserVars.h:59
 TMrbLofUserVars.h:60
 TMrbLofUserVars.h:61
 TMrbLofUserVars.h:62
 TMrbLofUserVars.h:63
 TMrbLofUserVars.h:64
 TMrbLofUserVars.h:65
 TMrbLofUserVars.h:66
 TMrbLofUserVars.h:67
 TMrbLofUserVars.h:68
 TMrbLofUserVars.h:69
 TMrbLofUserVars.h:70
 TMrbLofUserVars.h:71
 TMrbLofUserVars.h:72
 TMrbLofUserVars.h:73
 TMrbLofUserVars.h:74
 TMrbLofUserVars.h:75
 TMrbLofUserVars.h:76
 TMrbLofUserVars.h:77
 TMrbLofUserVars.h:78
 TMrbLofUserVars.h:79
 TMrbLofUserVars.h:80
 TMrbLofUserVars.h:81
 TMrbLofUserVars.h:82
 TMrbLofUserVars.h:83
 TMrbLofUserVars.h:84
 TMrbLofUserVars.h:85
 TMrbLofUserVars.h:86
 TMrbLofUserVars.h:87
 TMrbLofUserVars.h:88
 TMrbLofUserVars.h:89
 TMrbLofUserVars.h:90
 TMrbLofUserVars.h:91
 TMrbLofUserVars.h:92
 TMrbLofUserVars.h:93