ROOT logo
#ifndef __TMrbCPTM_h__
#define __TMrbCPTM_h__

//_________________________________________________[C++ CLASS DEFINITION FILE]
//////////////////////////////////////////////////////////////////////////////
// Name:           xiadgf/inc/TMrbCPTM.h
// Purpose:        Interface to module C_PTM
// Class:          TMrbCPTM            -- base class
// Description:    Class definitions to operate "Clock and Programmable Trigger Module"
// Author:         R. Lutter
// Revision:       $Id: TMrbCPTM.h,v 1.9 2005-10-19 06:58:02 marabou Exp $       
// Date:           
// Keywords:
//////////////////////////////////////////////////////////////////////////////

#include "TROOT.h"
#include "TNamed.h"
#include "TEnv.h"
#include "TArrayS.h"

#include "TMrbLofNamedX.h"
#include "TMrbEsone.h"

//______________________________________________________[C++ CLASS DEFINITION]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbCPTMEvent
// Purpose:        Class defs describing module C_PTM
// Description:    
// Keywords:
//////////////////////////////////////////////////////////////////////////////

class TMrbCPTMEvent : public TObject {

	public:
		TMrbCPTMEvent() { this->Reset(); }; 		// default ctor
		~TMrbCPTMEvent() {}; 						// default dtor

		void Reset();

		inline Long64_t GetTimeStamp() { return(fTimeStamp); };
		inline Int_t GetTimeAux() { return(fTimeAux); };
		Long64_t GetTimeStampAdjusted();
		inline void SetTimeStamp(Long64_t * TsAddr) { fTimeStamp = *TsAddr; };
		void SetTimeStamp(Int_t LowWord, Int_t MiddleWord, Int_t HighWord);
		inline void SetTimeAux(Int_t TimeAux) { fTimeAux = TimeAux; };

		inline UInt_t GetCounterT1() { return(fCounterT1); };
		inline void SetCounterT1(UInt_t Counts) { fCounterT1 = Counts; };

		inline UInt_t GetCounterT2() { return(fCounterT2); };
		inline void SetCounterT2(UInt_t Counts) { fCounterT2 = Counts; };

		inline UInt_t GetPattern() { return(fPattern); };
		inline void SetPattern(UInt_t Pattern) { fPattern = Pattern; };
		const Char_t * Pattern2Ascii(TString & PatStr);

	 	void Print(Option_t * option) const { TObject::Print(option); };
		void Print(ostream & Out = cout);

	protected:
		Long64_t fTimeStamp;
		Long64_t fTimeStampAdjusted;
		Int_t fTimeAux;
		UInt_t fCounterT1;
		UInt_t fCounterT2;
		UInt_t fPattern;

	ClassDef(TMrbCPTMEvent, 1)		// [C_PTM] Event structure
};
		

//______________________________________________________[C++ CLASS DEFINITION]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbCPTM
// Purpose:        Class defs describing module C_PTM
// Description:    
// Keywords:
//////////////////////////////////////////////////////////////////////////////

class TMrbCPTM : public TNamed {

	public:
		enum	{	kMrbCptmMaxCodeSize 		=	128 * 1024	};
		enum	{	kMrbCptmMultOffset			=	100	};
		enum	{	kMrbCptmMultThresh			=	50	};
		enum	{	kMrbCptmMilliVoltsPerMult	=	200	};
		enum	{	kMrbCptmMaxMult				=	17	};
		enum	{	kMrbCptmDacNoMult			=	1	};

	public:
		TMrbCPTM(const Char_t * ModuleName = "CPTM") : TNamed(ModuleName, "Clock & Programmable Trigger Module") {};	// default ctor

		TMrbCPTM(	const Char_t * ModuleName, 								// ctor: host, crate, station
					const Char_t * HostName, Int_t Crate, Int_t Station);

		TMrbCPTM(	const Char_t * ModuleName,
					const Char_t * HostName, const Char_t * CamacAddr);		// ctor: host, camac addr

		~TMrbCPTM() {}; 	// default dtor

		Bool_t SetGeDGG(Int_t Delay, Int_t Width);
		Bool_t SetAuxDGG(Int_t Delay, Int_t Width);
		Bool_t SetGeDelay(Int_t Delay);
		Bool_t SetGeWidth(Int_t Width);
		Bool_t SetAuxDelay(Int_t Delay);
		Bool_t SetAuxWidth(Int_t Width);
		Int_t GetGeDelay();
		Int_t GetGeWidth();
		Int_t GetAuxDelay();
		Int_t GetAuxWidth();

		Bool_t SetMask(Int_t Mask);
		Bool_t SetMask(const Char_t * Mask);
		Int_t GetMask();

		Bool_t SetTimeWindowAux(Int_t Window);
		Int_t GetTimeWindowAux();

		Bool_t SetDac(Int_t DacNo, Int_t DacValue);
		Int_t GetDac(Int_t DacNo);
		inline Bool_t ClearDac(Int_t DacNo) { return(this->SetDac(DacNo, 0)); };

		Bool_t SetMultiplicity(Int_t Mult);
		Int_t GetMultiplicity();

		Bool_t ResetRead();
		Bool_t ResetWrite();
		Bool_t ResetMemory();
		Bool_t ResetDacs();
		Bool_t ResetLAM();
		Bool_t Reset();

		Bool_t EnableSynch(Bool_t Reset = kFALSE);

		Bool_t DownloadAlteraCode(const Char_t * CodeFile = "cptm.rbf");

		Int_t GetReadAddr();
		Int_t GetWriteAddr();

		Int_t GetWordCount();
		Int_t CheckWordCount(const Char_t * Method = "CheckWordCount");

		Bool_t SaveSettings(const Char_t * SaveFile = "cptm.par");
		Bool_t RestoreSettings(const Char_t * RestoreFile = "cptm.par");

	 	void Print(Option_t * option) const { TObject::Print(option); };
		void Print(ostream & Out = cout);
		Bool_t PrintBuffer(ostream & Out = cout);

		Bool_t Connect();
		inline Bool_t IsConnected() { return(fCamac.IsConnected()); };
		Bool_t CheckConnect(const Char_t * Method = "CheckConnect");

		Bool_t SetCamacHost(const Char_t * HostName);
		Bool_t SetCrate(Int_t Crate);
		Bool_t SetStation(Int_t Station);
		inline const Char_t * GetCamacHost() { return(fCamacHost); };
		inline Int_t  GetCrate() { return(fCrate); };
		inline Int_t GetStation() { return(fStation); };

		inline TMrbEsone * Camac() { return(&fCamac); }; 				// camac handle

		Bool_t CheckValue(Int_t Value, Int_t MaxValue, const Char_t * ArgName = "Arg", const Char_t * Method = "CheckValue");

		Int_t ReadNext();
		Bool_t ReadEvent(TMrbCPTMEvent & Event);

	protected:
		Bool_t ReadAllDacs(TArrayI & DacBits);
		Bool_t WriteAllDacs(TArrayI & DacBits);
		const Char_t * ConvertMask(TString & Mask, Int_t MaskValue, Bool_t TextOnly = kFALSE);

	protected:
		TString fCamacHost; 	// host name
		Int_t fCrate;			// crate
		Int_t fStation; 		// station
		TMrbEsone fCamac; 		// esone camac port

	ClassDef(TMrbCPTM, 1)		// [C_PTM] Base class for C_PTM (Clock & Programmable Trigger Module)
};

#endif
 TMrbCPTM.h:1
 TMrbCPTM.h:2
 TMrbCPTM.h:3
 TMrbCPTM.h:4
 TMrbCPTM.h:5
 TMrbCPTM.h:6
 TMrbCPTM.h:7
 TMrbCPTM.h:8
 TMrbCPTM.h:9
 TMrbCPTM.h:10
 TMrbCPTM.h:11
 TMrbCPTM.h:12
 TMrbCPTM.h:13
 TMrbCPTM.h:14
 TMrbCPTM.h:15
 TMrbCPTM.h:16
 TMrbCPTM.h:17
 TMrbCPTM.h:18
 TMrbCPTM.h:19
 TMrbCPTM.h:20
 TMrbCPTM.h:21
 TMrbCPTM.h:22
 TMrbCPTM.h:23
 TMrbCPTM.h:24
 TMrbCPTM.h:25
 TMrbCPTM.h:26
 TMrbCPTM.h:27
 TMrbCPTM.h:28
 TMrbCPTM.h:29
 TMrbCPTM.h:30
 TMrbCPTM.h:31
 TMrbCPTM.h:32
 TMrbCPTM.h:33
 TMrbCPTM.h:34
 TMrbCPTM.h:35
 TMrbCPTM.h:36
 TMrbCPTM.h:37
 TMrbCPTM.h:38
 TMrbCPTM.h:39
 TMrbCPTM.h:40
 TMrbCPTM.h:41
 TMrbCPTM.h:42
 TMrbCPTM.h:43
 TMrbCPTM.h:44
 TMrbCPTM.h:45
 TMrbCPTM.h:46
 TMrbCPTM.h:47
 TMrbCPTM.h:48
 TMrbCPTM.h:49
 TMrbCPTM.h:50
 TMrbCPTM.h:51
 TMrbCPTM.h:52
 TMrbCPTM.h:53
 TMrbCPTM.h:54
 TMrbCPTM.h:55
 TMrbCPTM.h:56
 TMrbCPTM.h:57
 TMrbCPTM.h:58
 TMrbCPTM.h:59
 TMrbCPTM.h:60
 TMrbCPTM.h:61
 TMrbCPTM.h:62
 TMrbCPTM.h:63
 TMrbCPTM.h:64
 TMrbCPTM.h:65
 TMrbCPTM.h:66
 TMrbCPTM.h:67
 TMrbCPTM.h:68
 TMrbCPTM.h:69
 TMrbCPTM.h:70
 TMrbCPTM.h:71
 TMrbCPTM.h:72
 TMrbCPTM.h:73
 TMrbCPTM.h:74
 TMrbCPTM.h:75
 TMrbCPTM.h:76
 TMrbCPTM.h:77
 TMrbCPTM.h:78
 TMrbCPTM.h:79
 TMrbCPTM.h:80
 TMrbCPTM.h:81
 TMrbCPTM.h:82
 TMrbCPTM.h:83
 TMrbCPTM.h:84
 TMrbCPTM.h:85
 TMrbCPTM.h:86
 TMrbCPTM.h:87
 TMrbCPTM.h:88
 TMrbCPTM.h:89
 TMrbCPTM.h:90
 TMrbCPTM.h:91
 TMrbCPTM.h:92
 TMrbCPTM.h:93
 TMrbCPTM.h:94
 TMrbCPTM.h:95
 TMrbCPTM.h:96
 TMrbCPTM.h:97
 TMrbCPTM.h:98
 TMrbCPTM.h:99
 TMrbCPTM.h:100
 TMrbCPTM.h:101
 TMrbCPTM.h:102
 TMrbCPTM.h:103
 TMrbCPTM.h:104
 TMrbCPTM.h:105
 TMrbCPTM.h:106
 TMrbCPTM.h:107
 TMrbCPTM.h:108
 TMrbCPTM.h:109
 TMrbCPTM.h:110
 TMrbCPTM.h:111
 TMrbCPTM.h:112
 TMrbCPTM.h:113
 TMrbCPTM.h:114
 TMrbCPTM.h:115
 TMrbCPTM.h:116
 TMrbCPTM.h:117
 TMrbCPTM.h:118
 TMrbCPTM.h:119
 TMrbCPTM.h:120
 TMrbCPTM.h:121
 TMrbCPTM.h:122
 TMrbCPTM.h:123
 TMrbCPTM.h:124
 TMrbCPTM.h:125
 TMrbCPTM.h:126
 TMrbCPTM.h:127
 TMrbCPTM.h:128
 TMrbCPTM.h:129
 TMrbCPTM.h:130
 TMrbCPTM.h:131
 TMrbCPTM.h:132
 TMrbCPTM.h:133
 TMrbCPTM.h:134
 TMrbCPTM.h:135
 TMrbCPTM.h:136
 TMrbCPTM.h:137
 TMrbCPTM.h:138
 TMrbCPTM.h:139
 TMrbCPTM.h:140
 TMrbCPTM.h:141
 TMrbCPTM.h:142
 TMrbCPTM.h:143
 TMrbCPTM.h:144
 TMrbCPTM.h:145
 TMrbCPTM.h:146
 TMrbCPTM.h:147
 TMrbCPTM.h:148
 TMrbCPTM.h:149
 TMrbCPTM.h:150
 TMrbCPTM.h:151
 TMrbCPTM.h:152
 TMrbCPTM.h:153
 TMrbCPTM.h:154
 TMrbCPTM.h:155
 TMrbCPTM.h:156
 TMrbCPTM.h:157
 TMrbCPTM.h:158
 TMrbCPTM.h:159
 TMrbCPTM.h:160
 TMrbCPTM.h:161
 TMrbCPTM.h:162
 TMrbCPTM.h:163
 TMrbCPTM.h:164
 TMrbCPTM.h:165
 TMrbCPTM.h:166
 TMrbCPTM.h:167
 TMrbCPTM.h:168
 TMrbCPTM.h:169
 TMrbCPTM.h:170
 TMrbCPTM.h:171
 TMrbCPTM.h:172
 TMrbCPTM.h:173
 TMrbCPTM.h:174
 TMrbCPTM.h:175
 TMrbCPTM.h:176
 TMrbCPTM.h:177
 TMrbCPTM.h:178
 TMrbCPTM.h:179
 TMrbCPTM.h:180
 TMrbCPTM.h:181
 TMrbCPTM.h:182