ROOT logo
#ifndef __DGFInstrumentPanel_h__
#define __DGFInstrumentPanel_h__

//_________________________________________________[C++ CLASS DEFINITION FILE]
//////////////////////////////////////////////////////////////////////////////
// Name:           DGFInstrumentPanel.h
// Purpose:        Class defs for the XIA DGF-4C GUI
// Class:          DGFInstrumentPanel
// Description:    A GUI to operate a XIA DGF-4C
// Author:         R. Lutter
// Revision:       $Id: DGFInstrumentPanel.h,v 1.22 2008-12-29 13:48:24 Rudolf.Lutter Exp $       
// Date:           
// URL:            
// Keywords:       
//////////////////////////////////////////////////////////////////////////////

#include "TList.h"

#include "TGWindow.h"
#include "TGFrame.h"
#include "TGButton.h"
#include "TGMenu.h"

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

#include "TGMrbTextButton.h"
#include "TGMrbRadioButton.h"
#include "TGMrbLabelEntry.h"
#include "TGMrbLabelCombo.h"
#include "TGMrbMacroBrowser.h"

#include "DGFModule.h"
#include "DGFControlCommon.h"

//______________________________________________________[C++ CLASS DEFINITION]
//////////////////////////////////////////////////////////////////////////////
// Name:           DGFInstrumentPanel
// Purpose:        Main frame to define module params
// Constructors:   
// Description:    A dialog window to enter module params
// Keywords:       
//////////////////////////////////////////////////////////////////////////////

class DGFInstrumentPanel : public TGCompositeFrame {

	public:

		// cmd ids to dispatch over X events in this panel
		enum EVMEServerCmdId 	{
									kDGFInstrSelectModule = 100, 		//		module
									kDGFInstrSelectChannel, 			//		channel
									kDGFInstrEnergyPeakTimeEntry, 		//		energy peak time
									kDGFInstrEnergyGapTimeEntry,	  	//		energy gap time
									kDGFInstrEnergyAveragingEntry,		//		average
									kDGFInstrEnergyTauEntry,			//		tau value
									kDGFInstrTriggerPeakTimeEntry, 		//		trigger peak time
									kDGFInstrTriggerGapTimeEntry,   	//		trigger gap time
									kDGFInstrTriggerThresholdEntry,		//		threshold
									kDGFInstrTraceLengthEntry,	  		//		length
									kDGFInstrTraceDelayEntry, 			//		delay
									kDGFInstrTraceXPSAOffsetEntry, 		//		xia-psa:	offset
									kDGFInstrTraceXPSALengthEntry,		//					length
									kDGFInstrTraceUPSAOnOffButton, 		//		user-psa:	on/off
									kDGFInstrTraceUPSABaselineEntry, 	//					baseline
									kDGFInstrTraceUPSAEnergyCutoffEntry,	//				energy cutoff
									kDGFInstrTraceUPSATriggerThreshEntry,	//				trigger threshold
									kDGFInstrTraceUPSAT90ThreshEntry,	//					T90 threshold
									kDGFInstrTraceUPSALengthEntry,		//					length
									kDGFInstrTraceUPSAOffsetEntry,		//					offset
									kDGFInstrTraceUPSATFAEnergyCutoffEntry, 	//			TFA energy cutoff
									kDGFInstrStatRegModICSREntry, 		//		module switchbus
									kDGFInstrStatRegModICSREditButton,	//		edit
									kDGFInstrStatRegChanCSRAEntry, 		//		channel csra
									kDGFInstrStatRegChanCSRAEditButton,	//		edit
									kDGFInstrStatRegUserPsaCSREntry, 		//		user psa
									kDGFInstrStatRegUserPsaCSREditButton,	//		edit
									kDGFInstrStatCoincPatternEntry, 		//		coinc pattern
									kDGFInstrStatCoincPatternEditButton,	//		edit
									kDGFInstrStatRunTaskEntry,  			//		runtask
									kDGFInstrStatRunTaskEditButton, 		//		edit
									kDGFInstrDACGainEntry, 				//		DAC
									kDGFInstrDACVVEntry,			  	//		V/V
									kDGFInstrDACOffsetEntry,		 	//		DAC
									kDGFInstrDACVoltEntry,		  		//		Volt
									kDGFInstrCFDRegEntry,		  		//		CFD register
									kDGFInstrCFDOnOffButton,			//		CFD on/off
									kDGFInstrCFDDelayBeforeLEEntry, 	//		CFD delay before LE
									kDGFInstrCFDDelayBipolarEntry,	 	//		CFD delay bipolar
									kDGFInstrCFDWalkEntry,  		 	//		CFD walk
									kDGFInstrCFDFractionButton, 		//		CFD walk
									kDGFInstrMCAEnergyEntry, 			//		energy
									kDGFInstrMCAEnergyBinsEntry,		//		combine bins
									kDGFInstrMCABaselineDCEntry,		//		DC
									kDGFInstrMCABaselineBinsEntry,		//		combine bins
									kDGFInstrButtonUpdateFPGAs,			//		update fpgas
									kDGFInstrButtonShowParams,			//		show params
								};

		enum EDGFInstrCDFOnOff 	{
										kDGFInstrCFDOn	=	BIT(0),
										kDGFInstrCFDOff =	BIT(1)
								};

		enum EDGFInstrCDFFraction 	{
										kDGFInstrCFDFract00	=	BIT(0),
										kDGFInstrCFDFract01	=	BIT(1),
										kDGFInstrCFDFract10	=	BIT(2),
									};

		enum EDGFInstrUPSAOnOff 	{
										kDGFInstrUPSAOn 	=	BIT(0),
										kDGFInstrUPSAOff	=	BIT(1)
								};

	public:
		DGFInstrumentPanel(TGCompositeFrame * TabFrame);
		virtual ~DGFInstrumentPanel() {
			fFocusList.Clear();
			fHeap.Delete();
		};

		Bool_t InitializeValues(Bool_t ReadFromDSP = kFALSE);					// initialize entry fields with dgf values

		void PerformAction(Int_t FrameId, Int_t Selection); 	// slot methods
		void EntryChanged(Int_t FrameId, Int_t Selection);
		void SelectModule(Int_t FrameId, Int_t Selection);
		void RadioButtonPressed(Int_t FrameId, Int_t Selection);
		void EditBits(Int_t ButtonId);

	protected:
		Bool_t WriteDSP(DGFModule * Module, Int_t ChannelId);					// update DSP
		Bool_t ReadDSP(DGFModule * Module, Int_t ChannelId);					// read DSP
		Bool_t ShowModuleSettings();											// show settings
		Bool_t UpdateValue(Int_t EntryId, Int_t ModuleId, Int_t ChannelId);		// update entry value
		void MoveFocus(Int_t EntryId);											// move focus to next entry
		Bool_t SetGFLT(Bool_t OnFlag = kTRUE);									// set/clear gflt
		Bool_t UpdateCFD(TMrbDGF * Module, Int_t Channel);						// update cfd
		Bool_t InitializeCFD(Int_t OnOff, Int_t Fraction);						// init cfd
		Bool_t UpdateUPSA(TMrbDGF * Module, Int_t Channel);						// update user psa
		Bool_t InitializeUPSA();												// init upsa

	protected:
		TList fHeap;								//! list of objects created on heap

		TGGroupFrame * fSelectFrame; 				// select
		TGMrbLabelCombo * fSelectModule; 			//		module
		TGMrbRadioButtonList * fSelectChannel;		//		channel

		TGHorizontalFrame * fInstrFrame;			// horiz frame containing 2 rows
		TGVerticalFrame * fLeftFrame; 				//  	left row
		TGGroupFrame * fFilterFrame;				//			filter
		TGGroupFrame * fEnergyFilterFrame;			//				energy
		TGMrbLabelEntry * fEnergyPeakTimeEntry; 	//					peak time
		TGMrbLabelEntry * fEnergyGapTimeEntry;  	//					gap time
		TGMrbLabelEntry * fEnergyAveragingEntry;	//					average
		TGMrbLabelEntry * fEnergyTauEntry;			//					tau value
		TGGroupFrame * fTriggerFilterFrame;			//				trigger
		TGMrbLabelEntry * fTriggerPeakTimeEntry; 	//					peak time
		TGMrbLabelEntry * fTriggerGapTimeEntry;  	//					gap time
		TGMrbLabelEntry * fTriggerThresholdEntry;	//					threshold
		TGGroupFrame * fTraceFrame;					//			trace
		TGVerticalFrame * fTraceLeftFrame;
		TGVerticalFrame * fTraceRightFrame;
		TGGroupFrame * fTraceLengthDelayFrame;		//				length & delay
		TGMrbLabelEntry * fTraceLengthEntry;	  	//					length
		TGMrbLabelEntry * fTraceDelayEntry; 		//					delay
		TGGroupFrame * fTraceXPSAFrame;				//				xia-psa
		TGMrbLabelEntry * fTraceXPSAOffsetEntry;	//					offset
		TGMrbLabelEntry * fTraceXPSALengthEntry; 	//					length
		TGGroupFrame * fTraceUPSAFrame;				//				user-psa
		TGMrbRadioButtonList * fTraceUPSAOnOffButton;	//				on/off
		TGMrbLabelEntry * fTraceUPSABaselineEntry; 	//					baseline
		TGMrbLabelEntry * fTraceUPSAEnergyCutoffEntry; 	//				energy cutoff
		TGMrbLabelEntry * fTraceUPSATriggerThreshEntry; 	//			trigger threshold
		TGMrbLabelEntry * fTraceUPSAT90ThreshEntry; 	//					t90 threshold
		TGMrbLabelEntry * fTraceUPSALengthEntry; 	//					length
		TGMrbLabelEntry * fTraceUPSAOffsetEntry;	//					offset
		TGMrbLabelEntry * fTraceUPSATFAEnergyCutoffEntry;	//			TFA energy cutoff
		TGGroupFrame * fStatRegFrame;				//			status regs
		TGGroupFrame * fStatRegEntryFrame;			//
		TGMrbLabelEntry * fStatRegModICSREntry; 	//				switchbus
		TMrbNamedX * fModICSREditButton;			//
		TGMrbLabelEntry * fStatRegChanCSRAEntry; 	//				channel csra
		TMrbNamedX * fChanCSRAEditButton;			//
		TGMrbLabelEntry * fStatCoincPatternEntry; 	//				coinc pattern
		TMrbNamedX * fCoincPatternEditButton;		//
		TGMrbLabelEntry * fStatRegUserPsaCSREntry; 	//				user psa
		TMrbNamedX * fUserPsaCSREditButton;			//
		TGMrbLabelEntry * fStatRunTaskEntry; 		//				runtask
		TMrbNamedX * fRunTaskEditButton;			//

		TGVerticalFrame * fRightFrame; 				//		right row
		TGGroupFrame * fDACFrame;					//			DAC
		TGGroupFrame * fDACGainFrame;				//				gain
		TGMrbLabelEntry * fDACGainEntry; 			//					DAC
		TGMrbLabelEntry * fDACVVEntry;			  	//					V/V
		TGGroupFrame * fDACOffsetFrame; 			//				offset
		TGMrbLabelEntry * fDACOffsetEntry;		 	//					DAC
		TGMrbLabelEntry * fDACVoltEntry;		  	//					Volt
		TGGroupFrame * fCFDFrame;					//			CFD
		TGGroupFrame * fCFDDataFrame;				//				data
		TGMrbLabelEntry * fCFDRegEntry; 		  	//
		TGMrbLabelEntry * fCFDDelayBeforeLEEntry;	//
		TGMrbLabelEntry * fCFDDelayBipolarEntry;	//
		TGMrbLabelEntry * fCFDWalkEntry;		  	//
		TGMrbLabelEntry * fCFDFractionEntry;	  	//
		TGMrbRadioButtonList * fCFDOnOffButton;
		TGMrbRadioButtonList * fCFDFractionButton;
		TGGroupFrame * fMCAFrame;					//			MCA
		TGGroupFrame * fMCAEnergyFrame;				//				energy
		TGMrbLabelEntry * fMCAEnergyEntry; 			//					energy
		TGMrbLabelEntry * fMCAEnergyBinsEntry;		//					combine bins
		TGGroupFrame * fMCABaselineFrame;			//				baseline
		TGMrbLabelEntry * fMCABaselineDCEntry;		//					DC
		TGMrbLabelEntry * fMCABaselineBinsEntry;	//					combine bins

		TGMrbTextButtonGroup * fModuleButtonFrame;	// buttons

		TGLabel * fDummyLabel;

		TMrbLofNamedX fLofModuleKeys;				//! ... key list
		TMrbLofNamedX fLofChannels;					//! channel numbers

		TMrbLofNamedX fInstrChnActions;				// list of actions
		TMrbLofNamedX fInstrModuleActions;
		TMrbLofNamedX fInstrUPSAOnOff;
		TMrbLofNamedX fInstrCFDOnOff;
		TMrbLofNamedX fInstrCFDFraction;

		TGMrbFocusList fFocusList;

	ClassDef(DGFInstrumentPanel, 0) 	// [DGFControl] Edit module/channel settings
};

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