ROOT logo
#ifndef __TMrbKinetics_3655_h__
#define __TMrbKinetics_3655_h__

//_________________________________________________[C++ CLASS DEFINITION FILE]
//////////////////////////////////////////////////////////////////////////////
// Name:           expconf/inc/TMrbKinetics_3655.h
// Purpose:        Define experimental configuration for MARaBOU
// Class:          TMrbKinetics_3655     -- timing generator Kinetics-3655
// Description:    Class definitions to implement a configuration front-end for MARaBOU
// Author:         R. Lutter
// Revision:       $Id: TMrbKinetics_3655.h,v 1.9 2008-12-10 12:13:49 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 "TObject.h"

#include "TMrbCamacModule.h"

class TMrbModuleChannel;

//______________________________________________________[C++ CLASS DEFINITION]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbKinetics_3655
// Purpose:        Define a timing generator Kinetics-3655
// Description:    Defines a timing generator Kinetics-3655.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

class TMrbKinetics_3655 : public TMrbCamacModule {

	public:
		enum	EMrbRegisters		{	kRegCycleControl,
										kRegInhibitControl,
										kRegLamMask
									};

		enum	{	kNofOutputs 	=	8		};
		enum	{	kBitFrequency	=	0		};
		enum	{	kMaskFrequency	=	07		};
		enum	{	kBitOutput		=	3		};
		enum	{	kMaskOutput 	=	070 	};
		enum	{	kBitRecycle		=	6		};
		enum	{	kBitInhSet		=	0		};
		enum	{	kMasInhSet		=	07		};
		enum	{	kBitInhClear	=	3		};
		enum	{	kMaskInhClear	=	070 	};

	public:
		TMrbKinetics_3655() {};															// default ctor
		TMrbKinetics_3655(const Char_t * ModuleName, const Char_t * ModulePosition);	// define a new timing gen
		~TMrbKinetics_3655() {};														// remove timing gen from list

		Bool_t SetFrequency(Int_t Frequency = 1000000);
		Bool_t SetFrequency(const Char_t * Frequency);
		TMrbNamedX * GetFrequency() const;

		void SetRecycleMode(Bool_t RecycleFlag = kTRUE);
		Bool_t IsRecycleMode() const;

		Int_t SetIntervals(Int_t Inv1, Int_t Inv2 = -1, Int_t Inv3 = -1, Int_t Inv4 = -1,
							Int_t Inv5 = -1, Int_t Inv6 = -1, Int_t Inv7 = -1, Int_t Inv8 = -1);
		Int_t GetInterval(Int_t InvNo) const;
		inline Int_t GetNofIntervals() const { return(fNofIntervals); };

		Bool_t SetInhibit(Int_t InhClear, Int_t InhSet);
		inline void DontAssertInhibit() { SetInhibit(-1, -1); };
		inline Bool_t AssertsInhibit() const { return(fInhibitFlag); };

		UInt_t GetLamMask() const;

		Bool_t SetLamMask(Bool_t Lam1, Bool_t Lam2 = kFALSE, Bool_t Lam3 = kFALSE, Bool_t Lam4 = kFALSE,
							Bool_t Lam5 = kFALSE, Bool_t Lam6 = kFALSE, Bool_t Lam7 = kFALSE, Bool_t Lam8 = kFALSE);

		inline void SetExtStart(Bool_t StartFlag = kTRUE) { fExtStartFlag = StartFlag; };
		inline Bool_t IsExtStartMode() const { return(fExtStartFlag); };

		Bool_t MakeReadoutCode(ofstream & RdoStrm, TMrbConfig::EMrbModuleTag TagIndex);  	// generate part of code
		Bool_t MakeReadoutCode(ofstream & RdoStrm, TMrbConfig::EMrbModuleTag TagIndex, TMrbModuleChannel * Channel, Int_t Value = 0);  	// generate code for given channel

		virtual inline const Char_t * GetMnemonic() const { return("Kinetics_3655"); }; 	// module mnemonic

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

	protected:
		void DefineRegisters(); 			// define camac registers

	protected:
		Bool_t fExtStartFlag;
		Bool_t fInhibitFlag;
		Int_t fNofIntervals;
		TArrayI fIntervals;

	ClassDef(TMrbKinetics_3655, 1) 			// [Config] KINETICS 3655 Timing generator
};

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