ROOT logo
#ifndef __TMrbModuleChannel_h__
#define __TMrbModuleChannel_h__

//_________________________________________________[C++ CLASS DEFINITION FILE]
//////////////////////////////////////////////////////////////////////////////
// Name:           expconf/inc/TMrbModuleChannel.h
// Purpose:        Define experimental configuration for MARaBOU
// Class:          TMrbModuleChannel    -- base class to describe a single channel
// Description:    Class definitions to implement a configuration front-end for MARaBOU
// Author:         R. Lutter
// Revision:       $Id: TMrbModuleChannel.h,v 1.9 2010-09-01 08:52:50 Rudolf.Lutter Exp $
// Date:
// Keywords:
//////////////////////////////////////////////////////////////////////////////

namespace std {} using namespace std;

#include <cstdlib>
#include <iostream>
#include <sstream>
#include <iomanip>
#include <fstream>

#include "Rtypes.h"
#include "TSystem.h"
#include "TNamed.h"

#include "TMrbModule.h"
#include "TMrbSubevent.h"

//______________________________________________________[C++ CLASS DEFINITION]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbModuleChannel
// Purpose:        Define methods for module channels
// Description:    Describes a single module channel.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

class TMrbModuleChannel : public TNamed {

	public:
		enum EMrbHistoMode	{	kMrbHasHistogramDefault,
								kMrbHasHistogramFalse,
								kMrbHasHistogramTrue
							};

	public:

		TMrbModuleChannel() {};									// default ctor

		TMrbModuleChannel(TMrbModule * Module, Int_t Addr); 	// ctor: link channel to parent

		~TMrbModuleChannel() {									// default dtor
			fRegSpec.Delete();
		};

		inline Bool_t MarkUsed(TMrbSubevent * Sevt) {			// mark as used
			fIsUsed = kTRUE;
			fUsedBy = Sevt;
			return(kTRUE);
		};

		inline Bool_t MarkIndexed(TMrbModuleChannel * Param0) {	// mark as indexed with respect to param0
			fArrayHead = Param0;
			fStatus = TMrbConfig::kChannelArrElem;
			return(kTRUE);
		};

		Bool_t Set(const Char_t * RegName, Int_t Value);				// set register by name
		Bool_t Set(Int_t RegIndex, Int_t Value);						// ... by index
		Int_t Get(const Char_t * RegName) const;						// get register by name
		Int_t Get(Int_t RegIndex) const;								// ... by index

		Bool_t Set(const Char_t * RegName, const Char_t * Value);		// set register mnemonically
		Bool_t Set(Int_t RegIndex, const Char_t * Value);				// ... by index

		inline Bool_t HasRegisters() const { return(fRegSpec.GetEntriesFast() > 0); };	// check if regs present

		inline Int_t GetAddr() const { return(fAddr); };						// return channel address

		inline TMrbSubevent * UsedBy() const { return(fUsedBy); }; 			// return address of subevent
		inline TMrbModule * Parent() const { return(fParent); };  			// return address of parent module

		inline TMrbModuleChannel * ArrayHead() const { return(fArrayHead); };	// return array addr
		inline Int_t GetIndexRange() const { return(fIndexRange); };  		// get number of subsequent channels
		inline void SetIndexRange(Int_t Range) { fIndexRange = Range; };			// define number of subsequent channels
		inline TMrbConfig::EMrbChannelStatus GetStatus() const { return(fStatus); }; 		// get channel status
		inline void SetStatus(TMrbConfig::EMrbChannelStatus Status) { fStatus = Status; };	// set status bits
		Int_t GetIndex() const;												// get index with respect to array head

		Bool_t SetHeadName(const Char_t * HeadName); 				// store name of param head in case it is indexed
		const Char_t * GetHeadName() const;							// return name w/o index

		inline void SetOffset(Int_t Offset) { fOffset = Offset; };			// set channel offset within module
		inline Int_t GetOffset() const { return(fOffset); }; 				// get offset

		inline Bool_t IsUsed() const { return(fIsUsed); };					// param in use?

		inline EMrbHistoMode GetHistoMode() const { return(fHistoMode); };	// histogram to be allocated?
		inline void SetHistoMode(EMrbHistoMode HistoMode) { fHistoMode = HistoMode; };

		void Print(Option_t * Option) const { TObject::Print(Option); }
		virtual void Print(ostream & OutStrm, Bool_t ArrayFlag, Bool_t SevtFlag, const Char_t * Prefix = "") {};	 // show registers
		inline void Print() { Print(cout, kFALSE, kFALSE, ""); };

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

	protected:
		TMrbModule * fParent;					// parent module
		TMrbSubevent * fUsedBy;					// address of subevent

		TMrbModuleChannel * fArrayHead;			// address of channel with index 0
		Int_t fIndexRange;	 					// number of subsequent channels indexed from this one
		TMrbConfig::EMrbChannelStatus fStatus; 	// status bits

		TString fHeadName; 						// name of param array if any

		Int_t fAddr;							// channel address
		Int_t fOffset;							// channel offset
		Bool_t fIsUsed;							// kTRUE if used
		EMrbHistoMode fHistoMode;				// histogram to be booked for this param?

		TObjArray fRegSpec; 					// internal registers

	ClassDef(TMrbModuleChannel, 1)		// [Config] Base class describing a single module channel
};

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