ROOT logo
#ifndef __TMrbDGFCluster_h__
#define __TMrbDGFCluster_h__

//_________________________________________________[C++ CLASS DEFINITION FILE]
//////////////////////////////////////////////////////////////////////////////
// Name:           xiadgf/inc/TMrbDGFCluster.h
// Purpose:        Interface to module XIA DGF-4C
// Class:          TMrbDGFCluster            -- cluster data
// Description:    Class definitions to operate the XIA DGF-4C module.
// Author:         R. Lutter
// Revision:       $Id: TMrbDGFCluster.h,v 1.3 2006-10-09 10:30:35 Rudolf.Lutter Exp $       
// Date:           
// Keywords:
//////////////////////////////////////////////////////////////////////////////


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

#include "TMrbNamedX.h"
#include "TMrbLofNamedX.h"

enum	EMrbDGFClusterIdx	{	kMrbDGFClusterIdx = 0,
								kMrbDGFClusterNo,
								kMrbDGFClusterCapsId,
								kMrbDGFClusterHex,
								kMrbDGFClusterVoltage,
								kMrbDGFClusterColor,
								kMrbDGFClusterAF,
								kMrbDGFClusterSide,
								kMrbDGFClusterHeight,
								kMrbDGFClusterAngle,
								kMrbDGFClusterCrate
							};

enum	{	kMrbDgfClusterNofItems = kMrbDGFClusterCrate+ 1 };
enum	{	kMrbDGFClusterNofModules = 	4	};

//______________________________________________________[C++ CLASS DEFINITION]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGFClusterMember
// Purpose:        Class defs describing module XIA DGF-4C
// Description:    
// Keywords:
//////////////////////////////////////////////////////////////////////////////

class TMrbDGFClusterMember : public TObject {

	public:

		TMrbDGFClusterMember(Int_t ClusterIndex = 0, Int_t ClusterNo = 0, Char_t CapsuleId = 'X');
		virtual ~TMrbDGFClusterMember() {};

		inline void SetClusterIndex(Int_t CluIndex) { fClusterIndex = CluIndex; };
 		inline Int_t GetClusterIndex() { return(fClusterIndex); };
		inline Int_t GetClusterNo() { return(fClusterNo); };
		inline Char_t GetCapsuleId() { return(fCapsuleId); };
		inline void SetHex(Int_t Hex) { fHex = Hex; };
		inline Int_t GetHex() { return(fHex); };
		inline void SetVoltage(Int_t Voltage) { fVoltage = Voltage; };
		inline Int_t GetVoltage() { return(fVoltage); };
		inline void SetColor(const Char_t * Color) { fColor = Color; fColor.ToLower(); };
		inline const Char_t * GetColor() { return(fColor.Data()); };
		inline void SetAF(const Char_t * AF) { fAF = AF; };
		inline const Char_t * GetAF() { return(fAF.Data()); };
		Bool_t SetSide(const Char_t * Side);
		inline const Char_t * GetSide() { return(fSide.Data()); };
		inline Bool_t IsRight() { return(fIsRight); };
		inline Bool_t IsLeft() { return(!fIsRight); };		
		Bool_t SetHeight(const Char_t * Height);
		inline const Char_t * GetHeight() { return(fHeight.Data()); };
		inline Bool_t IsUp() { return(fIsUp); };
		inline Bool_t IsDown() { return(!fIsUp); };		
		Bool_t SetAngle(const Char_t * Angle);
		inline const Char_t * GetAngle() { return(fAngle.Data()); };
		inline Bool_t IsForward() { return(fIsForward); };
		inline Bool_t IsBackward() { return(!fIsForward); };	
		inline void SetCrate(Int_t Crate) { fCrate = Crate; };
		inline Int_t GetCrate() { return(fCrate); };
		inline void SetSlot(Int_t SlotNo, Int_t Slot) { fSlot[SlotNo] = Slot; };
		inline Int_t GetSlot(Int_t SlotNo) { return(fSlot[SlotNo]); };
		inline void SetDgf(Int_t SlotNo, const Char_t * DgfName) { fDgf[SlotNo] = DgfName; };
		inline const Char_t * GetDgf(Int_t SlotNo) { return(fDgf[SlotNo].Data()); };

		inline void SetNofModules(Int_t NofModules) { fNofModules = NofModules; };
		inline Int_t GetNofModules() { return(fNofModules); };

		inline void SetCmt(const Char_t * Cmt) { fCmt = Cmt; };
		inline const Char_t * GetCmt() { return(fCmt.Data()); };

		void Print(Option_t * Option) const { TObject::Print(Option); }
		void Print(ostream & OutStrm, Bool_t CmtFlag = kFALSE);
		virtual inline void Print(Bool_t CmtFlag) { Print(cout, CmtFlag); };
		
	protected:
		Int_t fClusterIndex;
		Int_t fClusterNo;
		Char_t fCapsuleId;
		Int_t fHex;
		Int_t fVoltage;
		TString fColor;
		TString fAF;
		TString fSide;
		Bool_t fIsRight;
		TString fHeight;
		Bool_t fIsUp;
		TString fAngle;
		Bool_t fIsForward;
		Int_t fCrate;
		Int_t fNofModules;
		Int_t fSlot[kMrbDGFClusterNofModules];
		TString fDgf[kMrbDGFClusterNofModules];
		TString fCmt;
		
	ClassDef(TMrbDGFClusterMember, 1)		// [XIA DGF-4C] DGF cluster member
};

//______________________________________________________[C++ CLASS DEFINITION]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGFCluster
// Purpose:        Class defs describing module XIA DGF-4C
// Description:    
// Keywords:
//////////////////////////////////////////////////////////////////////////////

class TMrbDGFCluster : public TMrbNamedX {

	public:
		enum	{	kMrbXiaChansPerModule	=	4	};

	public:

		TMrbDGFCluster(Int_t ClusterIndex = 0, const Char_t * ClusterName = "Clu0");
		virtual ~TMrbDGFCluster() {};

		inline Int_t GetClusterIndex() { return(this->GetIndex()); };
		inline void SetClusterNo(Int_t ClusterNo) { fClusterNo = ClusterNo; };
		inline Int_t GetClusterNo() { return(fClusterNo); };

		Bool_t AddMember(TMrbDGFClusterMember * CluMember);
		inline TMrbDGFClusterMember * GetMember(Int_t CapsNo) {
			if (fMembers.GetEntriesFast() > CapsNo) return((TMrbDGFClusterMember *) fMembers[CapsNo]); else return(NULL);
		}

		inline Int_t GetNofMembers() { return(fMembers.GetEntriesFast()); };
		inline Int_t GetCrate() { return(fCrate); };
		inline const Char_t * GetColor() { return(fColor.Data()); };
		inline const Char_t * GetSide() { return(fSide.Data()); };
		inline const Char_t * GetHeight() { return(fHeight.Data()); };
		inline const Char_t * GetAngle() { return(fAngle.Data()); };

		void Print(Option_t * Option) const { TObject::Print(Option); }
		void Print(ostream & OutStrm, Bool_t CmtFlag = kFALSE);
		virtual inline void Print(Bool_t CmtFlag) { Print(cout, CmtFlag); };
		
		Bool_t SetChannelLayout(const Char_t * LayoutName, Int_t NofChannels, const Char_t * ChannelNames); // define channel names to be used
		const Char_t * GetChannelName(Int_t Channel, const Char_t * Layout = "6fold");					// get channel name from layout
		const Char_t * GetChannelLayout(Int_t ModuleNumber, const Char_t * LayoutName = "6fold");		// get channel layout per module

	protected:
		Int_t fClusterNo;
		Int_t fCrate;
		TString fColor;
		TString fSide;
		TString fHeight;
		TString fAngle;

		TObjArray fMembers;

		TMrbLofNamedX fLofChannelLayouts; 	// layouts how to name dgf channels

	ClassDef(TMrbDGFCluster, 1)		// [XIA DGF-4C] DGF cluster data
};

//______________________________________________________[C++ CLASS DEFINITION]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbLofDGFClusters
// Purpose:        Class defs describing module XIA DGF-4C
// Description:    
// Keywords:
//////////////////////////////////////////////////////////////////////////////

class TMrbLofDGFClusters : public TMrbLofNamedX {

	public:
		TMrbLofDGFClusters(const Char_t * CluListName = "LofDGFClusters") : TMrbLofNamedX(CluListName) {};
		virtual ~TMrbLofDGFClusters() {};

	public:
		Int_t ReadFile(const Char_t * ClusterFile = "cluster.def");

		TMrbDGFCluster * GetCluster(Int_t CluNumber);

		inline Int_t GetNofClusters() { return(this->GetEntriesFast()); };

		void Print(Option_t * Option) const { TObject::Print(Option); }
		void Print(ostream & OutStrm);
		virtual inline void Print() { Print(cout); };
		
	ClassDef(TMrbLofDGFClusters, 1)		// [XIA DGF-4C] List of DGF clusters
};

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