ROOT logo
//__________________________________________________[C++ CLASS IMPLEMENTATION]
///////////////////////////////////////////////////////////////////////////////
// Name:           xiadgf/src/TMrbDGF.cxx
// Purpose:        Methods to operate a module XIA DGF-4C
// Description:    Implements class methods for module XIA DGF-4C
// Header files:   TMrbDGF.h          -- class defs
// Keywords:
// Author:         R. Lutter
// Mailto:         <a href=mailto:rudi.lutter@physik.uni-muenchen.de>R. Lutter</a>
// Revision:       $Id: TMrbDGF.cxx,v 1.49 2008-08-18 08:19:51 Rudolf.Lutter Exp $       
// Date:           
//////////////////////////////////////////////////////////////////////////////

namespace std {} using namespace std;

#include <cstdlib>
#include <time.h>
#include <iostream>
#include <sstream>
#include <iomanip>
#include <fstream>
#include <math.h>

#include "Rtypes.h"
#include "TRegexp.h"
#include "TFile.h"
#include "TDatime.h"
#include "TROOT.h"
#include "TObjString.h"

#include "TMrbSystem.h"
#include "TMrbLogger.h"

#include "TMrbDGFData.h"
#include "TMrbDGF.h"
#include "TMrbDGFCommon.h"
#include "TMrbDGFEvent.h"
#include "TMrbDGFEventBuffer.h"
#include "TMrbDGFHistogramBuffer.h"

#include "SetColor.h"

const SMrbNamedXShort kMrbTriggerPolarity[] =
							{
								{1, 			"positive" 		},
								{-1, 			"negative" 		},
								{0, 			NULL			}
							};

const SMrbNamedXShort kMrbAccuTimeScale[] =
							{
								{1,				"secs" 			},
								{60,	 		"mins"			},
								{3600,	 		"hours"			},
								{0, 			NULL			}
							};

const SMrbNamedXShort kMrbSwitchBusModes[] =
							{
								{TMrbDGFData::kSwitchBusNormal,				"Normal" 	},
								{TMrbDGFData::kTerminateDSP,				"DSP-Terminate" 	},
								{TMrbDGFData::kTerminateFast,				"Fast-Terminate"	},
								{0, 										NULL				}
							};

TMrbDGFData * gMrbDGFData = NULL;				// common data base for all DGF modules
extern TMrbLogger * gMrbLog;

ClassImp(TMrbDGF)

TMrbDGF::TMrbDGF(	const Char_t * DGFName,
					const Char_t * HostName, Int_t Crate, Int_t Station,
					Bool_t Connect,
					Bool_t Offline,
					Bool_t LocalData) : TNamed(DGFName, "") {
//__________________________________________________________________[C++ CTOR]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF
// Purpose:        Define a module of type DGF-4C
// Arguments:      Char_t * DGFName     -- module name
//                 Char_t * HostName    -- host to be connected to
//                 Int_t Crate          -- crate number Cxx
//                 Int_t Station        -- camac station Nxx
//                 Bool_t Connect       -- kTRUE: connect to CAMAC
//                 Bool_t Offline       -- kTRUE: don't access hardware
//                 Bool_t LocalData     -- kTRUE: TMrbDGFData will be held locally
// Results:        --
// Exceptions:
// Description:    Class constructor
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	TMrbEsoneCnaf cnaf;
	TMrbString title;

	if (gMrbLog == NULL) gMrbLog = new TMrbLogger();
	
	fStatusM = 0;				// setup not done, not connected
	if (Offline) fStatusM = TMrbDGF::kOffline;
	fCamac.SetOffline(Offline);	
	
	if (!cnaf.CheckCnaf(TMrbEsoneCnaf::kCnafCrate, Crate) || !cnaf.CheckCnaf(TMrbEsoneCnaf::kCnafStation, Station)) {
		gMrbLog->Err() << "DGF in " << Crate << ".N" << Station << " - illegal camac address" << endl;
		gMrbLog->Flush(this->ClassName());
		this->MakeZombie();
	} else if (Connect && fCamac.ConnectToHost(HostName, kTRUE) == 0) { 	// try to (re)connect to camac via given host
		gMrbLog->Err() << "DGF in C" << Crate << ".N" << Station << " - can't connect to host " << HostName << endl;
		gMrbLog->Flush(this->ClassName());
		this->MakeZombie();
	} else {
		title = "DGF-4C \"";							// title: DGF-4C "xyz" in Cx.Ny
		title += this->GetName();
		title += "\" in C";
		title += Crate;
		title += ".N";
		title += Station;
		this->SetTitle(title.Data());

		fStatusM |= TMrbDGF::kSetupOk;					// setup ok
		if (Connect) fStatusM |= TMrbDGF::kConnected;	// connected to camac
		fCamacHost = HostName;							// store host name
		fCrate = Crate; 								// store crate & station
		fStation = Station;

		fTauDistr = NULL;								// tau distribution
		fGaussian = NULL;								// gaussian fit

		fInhibitNewRun = kFALSE;						// 'new run' enabled

		this->SetClusterID();
		this->SetRevision();							// module revision unknown

		SetupDGF(LocalData);							// initialize data base
	}
}

TMrbDGF::TMrbDGF(	const Char_t * DGFName,
					const Char_t * HostName,
					const Char_t * CamacAddr,
					Bool_t Connect,
					Bool_t Offline,
					Bool_t LocalData) : TNamed(DGFName, "Xia DGF-4C") {
//__________________________________________________________________[C++ CTOR]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF
// Purpose:        Define a module of type DGF-4C
// Arguments:      Char_t * DGFName     -- module name
//                 Char_t * HostName    -- host to be connected to
//                 Char_t * CamacAddr   -- camac addr: Cxx.Nxx
//                 Bool_t Connect       -- kTRUE: connect to CAMAC
//                 Bool_t Offline       -- kTRUE: don't access hardware
//                 Bool_t LocalData     -- kTRUE: TMrbDGFData will be held locally
// Results:        --
// Exceptions:
// Description:    Class constructor
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	TMrbEsoneCnaf cnaf;
	TMrbString title;

	if (gMrbLog == NULL) gMrbLog = new TMrbLogger();
	
	fStatusM = 0;			// setup not done, not connected
	if (Offline) fStatusM = TMrbDGF::kOffline;
	fCamac.SetOffline(Offline);	

	if (!cnaf.Ascii2Int(CamacAddr)) {	// check crate & station
		gMrbLog->Err() << "DGF in " << CamacAddr << " - illegal camac address" << endl;
		gMrbLog->Flush(this->ClassName());
		this->MakeZombie();
	} else if (Connect && fCamac.ConnectToHost(HostName) == 0) { 		// try to connect to camac via given host
		gMrbLog->Err() << "DGF in " << CamacAddr
				<< " - can't connect to host " << HostName << endl;
		gMrbLog->Flush(this->ClassName());
		this->MakeZombie();
	} else {
		title = "DGF-4C \"";							// title: DGF-4C "xyz" in Cx.Ny
		title += this->GetName();
		title += "\" in ";
		title += cnaf.Int2Ascii();
		this->SetTitle(title.Data());

		fStatusM |= TMrbDGF::kSetupOk;					// setup ok
		if (Connect) fStatusM |= TMrbDGF::kConnected;	// connected to camac
		fCamacHost = HostName;							// store host name
		fCrate = cnaf.GetC(); 	// store crate & station
		fStation = cnaf.GetN();

		fTauDistr = NULL;								// tau distribution
		fGaussian = NULL;								// gaussian fit

		fInhibitNewRun = kFALSE;						// 'new run' enabled

		this->SetClusterID();
		this->SetRevision();							// module revision unknown

		SetupDGF(LocalData);							// initialize data base
	}
}

Bool_t TMrbDGF::Connect() {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::Connect
// Purpose:        Connect to CAMAC
// Arguments:      --
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    Connect to CAMAC thru TMrbEsone.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	if (!IsOffline()) {
		gMrbLog->Err() << this->GetTitle() << " is OFFLINE - can't connect to host " << fCamacHost << endl;
		gMrbLog->Flush(this->ClassName(), "Connect");
		return(kFALSE);
	}
	if (!SetupOk()) {
		gMrbLog->Err() << this->GetTitle() << " - something went wrong during setup " << fCamacHost << endl;
		gMrbLog->Flush(this->ClassName(), "Connect");
		return(kFALSE);
	}
	if (IsConnected()) {
		gMrbLog->Err() << this->GetTitle() << " - already connected to host " << fCamacHost << endl;
		gMrbLog->Flush(this->ClassName(), "Connect");
		return(kTRUE);
	}
	if (fCamac.ConnectToHost(fCamacHost) == 0) { 		// try to connect to camac via given host
		gMrbLog->Err() << this->GetTitle() << " - can't connect to host " << fCamacHost << endl;
		gMrbLog->Flush(this->ClassName(), "Connect");
		return(kFALSE);
	}
	fStatusM |= TMrbDGF::kConnected;
	return(kTRUE);
}

Bool_t TMrbDGF::SetCamacHost(const Char_t * HostName) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::SetCamacHost
// Purpose:        Redefine camac host
// Arguments:      Char_t * HostName    -- host name
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    Redefines camac host. Method mainly used by DGFControl.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	if (IsConnected()) {
		gMrbLog->Err() << this->GetTitle() << " - already connected to host " << fCamacHost << endl;
		gMrbLog->Flush(this->ClassName(), "SetCamacHost");
		return(kFALSE);
	}
	fCamacHost = HostName;
	return(kTRUE);
}

Bool_t TMrbDGF::SetCrate(Int_t Crate) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::SetCrate
// Purpose:        Redefine camac crate
// Arguments:      Int_t Crate    -- crate number
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    (Re)define camac crate. Method used by DGFControl.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	TMrbEsoneCnaf cnaf;

	if (this->IsConnected()) {
		gMrbLog->Err() << this->GetTitle() << " - already connected to host " << fCamacHost << endl;
		gMrbLog->Flush(this->ClassName(), "SetCrate");
		return(kFALSE);
	}

	if (!cnaf.CheckCnaf(TMrbEsoneCnaf::kCnafCrate, Crate)) return(kFALSE);

	fCrate = Crate;
	return(kTRUE);
}

Bool_t TMrbDGF::SetStation(Int_t Station) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::SetStation
// Purpose:        Redefine camac station
// Arguments:      Int_t Station    -- station number
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    (Re)define camac station. Method used by DGFControl.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	TMrbEsoneCnaf cnaf;

	if (IsConnected()) {
		gMrbLog->Err() << this->GetTitle() << " - already connected to host " << fCamacHost << endl;
		gMrbLog->Flush(this->ClassName(), "SetStation");
		return(kFALSE);
	}

	if (!cnaf.CheckCnaf(TMrbEsoneCnaf::kCnafStation, Station)) return(kFALSE);

	fStation = Station;
	return(kTRUE);
}

void TMrbDGF::SetupDGF(Bool_t LocalData) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::SetupDGF
// Purpose:        Setup data base
// Arguments:      Bool_t LocalData     -- kTRUE: TMrbDGFData will be held locally
// Results:        --
// Exceptions:
// Description:    Initializes DGF.
//                 Code for DSP and FPGA normally resides in a
//                 TMrbDGFData object common to all DGF modules.
//                 Setting LocalData = kTRUE allows to use private
//                 code for this DGF. 
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	if (LocalData) {
		fDGFData = new TMrbDGFData();
	} else {
		if (gMrbDGFData == NULL) gMrbDGFData = new TMrbDGFData();
		fDGFData = gMrbDGFData;
	}

	if (!this->Data()->CheckXiaRelease()) {
		this->MakeZombie();
		return;
	}
	
	gMrbDGFData->fVerboseMode = gEnv->GetValue("TMrbDGF.VerboseMode", kFALSE);

	fLofDGFStatusMBits.SetName("Soft Status (Module)");
	fLofDGFStatusMBits.AddNamedX(kMrbDGFStatusMBits);
	fLofDGFStatusMBits.SetPatternMode();

	fLofDGFSwitchBusModes.SetName("Switch Bus Modes");
	fLofDGFSwitchBusModes.AddNamedX(kMrbSwitchBusModes);
	fLofDGFSwitchBusModes.SetPatternMode();

	this->ResetDGF();

	if (LocalData) fStatusM |= TMrbDGF::kLocalData;
}

void TMrbDGF::ResetDGF() {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::ResetDGF
// Purpose:        Reset to initial values
// Arguments:      --
// Results:        --
// Exceptions:
// Description:    Resets DGF.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	fParams.Set(TMrbDGFData::kNofDSPInputParams + TMrbDGFData::kNofDSPOutputParams);			// clear param section
}

void TMrbDGF::ClearRegisters() {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::ClearRegisters
// Purpose:        Initialize main registers
// Arguments:      --
// Results:        --
// Exceptions:
// Description:    Initializes registers: MODCSRA, CHANCSRA, COINPATTERN
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	this->SetModCSRA(0, TMrbDGF::kBitSet, kTRUE);
	for (Int_t chn = 0; chn < TMrbDGFData::kNofChannels; chn++) this->SetChanCSRA(chn, 0, TMrbDGF::kBitSet, kTRUE);
	this->SetParValue("COINCPATTERN", 0, kTRUE);
}

Bool_t TMrbDGF::DownloadFPGACode(TMrbDGFData::EMrbFPGAType FPGAType) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::DownloadFPGACode
// Purpose:        Download FPGA data
// Arguments:      EMrbFPGAType FPGAType   -- fpga type (system or fippi)
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    Loads code down to FPGA.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	UInt_t sts;
	Int_t size = 0;
	UShort_t * dp = NULL;
	TMrbDGFData::EMrbDGFRevision rev;

	TString sysfip;
	UInt_t csrBits = 0;
	Int_t subAddr = 0;
	TString cnaf;

	TArrayI cData;

	Bool_t dataOk;
	if (!this->CheckConnect("DownLoadFPGACode")) return(kFALSE);

	dataOk = kFALSE;
	if (FPGAType == TMrbDGFData::kSystemFPGA) {
		if (fDGFData->FPGACodeRead(TMrbDGFData::kSystemFPGA)) {
			csrBits = TMrbDGFData::kSystemFPGAReset;								// address system fpga
			size = fDGFData->GetFPGACodeSize(TMrbDGFData::kSystemFPGA); 			// size of FPGA data
			dp = (UShort_t *) fDGFData->GetFPGACodeAddr(TMrbDGFData::kSystemFPGA);	// addr of FPGA data
			subAddr = A(10);														// exec A10.F17
			cnaf = ".A10.F17";
			sysfip = "System";
			dataOk = kTRUE;
		}
	} else {
		rev = (TMrbDGFData::EMrbDGFRevision) this->GetRevision()->GetIndex();
		if (fDGFData->FPGACodeRead(TMrbDGFData::kFippiFPGA, rev)) {
			csrBits = TMrbDGFData::kFippiFPGAReset; 									// address fippi fpga
			size = fDGFData->GetFPGACodeSize(TMrbDGFData::kFippiFPGA, rev);  			// size of FPGA data
			dp = (UShort_t *) fDGFData->GetFPGACodeAddr(TMrbDGFData::kFippiFPGA, rev);	// addr of FPGA data
			subAddr = A(9);																// exec A9.F17
			cnaf = ".A9.F17";
			sysfip = (rev == TMrbDGFData::kRevD) ? "Fippi(D)" : "Fippi(E)";
			dataOk = kTRUE;
		}
	}

	if (dataOk) {
		if (!this->WriteICSR(csrBits)) {										// reset FPGA
			gMrbLog->Err()	<< "[" << sysfip << " FPGA] "
							<< fName << " in C" << fCrate << ".N" << fStation
							<< ": Reset failed" << endl;
			gMrbLog->Flush(this->ClassName(), "DownloadFPGACode");
			return(kFALSE);
		}
		this->Wait();															// wait for reset to complete
		this->CopyData(cData, dp, size);										// copy FPGA data to camac buffer
		if (fCamac.BlockXfer(fCrate, fStation, subAddr, F(17), cData, 0, size, kTRUE) == -1) {		// start block xfer, 16 bit
			gMrbLog->Err()	<< "[" << sysfip << " FPGA] "
							<< fName << " in C" << fCrate << ".N" << fStation
							<< cnaf << ": Block xfer failed" << endl;
			gMrbLog->Flush(this->ClassName(), "DownloadFPGACode");
			return(kFALSE);
		}
		this->Wait();															// wait for download to complete
		sts = this->ReadICSR() & csrBits;								// read status
		if (sts != 0) { 														// error?
			gMrbLog->Err()	<< "[" << sysfip << " FPGA] "
							<< fName << " in C" << fCrate << ".N" << fStation
							<< ": Data xfer failed - error 0x" << setbase(16) << sts << setbase(10) << endl;
			gMrbLog->Flush(this->ClassName(), "DownloadFPGACode");
			return(kFALSE);
		}

		if (FPGAType == TMrbDGFData::kSystemFPGA) {
			fStatusM |= TMrbDGF::kSystemFPGACodeLoaded;
			if (gMrbDGFData->fVerboseMode) {
				gMrbLog->Out()	<< "[System FPGA] " << fName << " in C" << fCrate << ".N" << fStation
								<< ": Code successfully loaded (" << size << " bytes)" << endl;
				gMrbLog->Flush(this->ClassName(), "DownloadFPGACode", setblue);
			}
		} else {
			fStatusM |= TMrbDGF::kFippiFPGACodeLoaded;
			if (gMrbDGFData->fVerboseMode) {
				gMrbLog->Out()	<< "[Fippi FPGA] " << fName << " in C" << fCrate << ".N" << fStation
								<< ": Code (Rev" << fRevision.GetName() << ") successfully loaded ("
								<< size << " bytes)" << endl;
				gMrbLog->Flush(this->ClassName(), "DownloadFPGACode", setblue);
			}
		}

		return(kTRUE);
	} else {
		gMrbLog->Err() << "[" << sysfip << "FPGA] No FPGA data" << endl;
		gMrbLog->Flush(this->ClassName(), "DownloadFPGACode");
		return(kFALSE);
	}
}

Bool_t TMrbDGF::DownloadFPGACode(const Char_t * FPGAType) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::DownloadFPGACode
// Purpose:        Download FPGA data
// Arguments:      Char_t * FPGAType   -- fpga type (system or fippi)
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    Loads code down to FPGA.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	TMrbNamedX * sysfip;

	sysfip = gMrbDGFData->fLofFPGATypes.FindByName(FPGAType, TMrbLofNamedX::kFindUnique | TMrbLofNamedX::kFindIgnoreCase);
	if (sysfip == NULL) {
		gMrbLog->Err() << "Illegal FPGA type - " << FPGAType << endl;
		gMrbLog->Flush(this->ClassName(), "DownloadFPGACode");
		return(kFALSE);
	}
	return(this->DownloadFPGACode((TMrbDGFData::EMrbFPGAType) sysfip->GetIndex()));
}

Bool_t TMrbDGF::SetSwitchBusDefault(Bool_t IndiFlag, const Char_t * Prefix, TEnv * Env) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::SetSwitchBusDefault
// Purpose:        Set switch bus register to default value
// Arguments:      Bool_t IndiFlag            -- kTRUE if switch bus to be set individually
//                 Char_t * Prefix            -- resource prefix
//                 TEnv * Env                 -- resource data base
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    Sets switchbus bits:
//                      IndiFlag = kTRUE      inspect TMrbDGF.<name>.SwitchBusTerm
//                      IndiFlag = kFALSE     terminate if module doesn't contain a core
//                                            (segment id like "B:ssss")
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	UInt_t switchBus;
	TString resource, segmentID;
	Bool_t terminate;

	TEnv * env = Env ? Env : gEnv;

	if (!this->CheckConnect("SetSwitchBusDefault")) return(kFALSE);

	if (IndiFlag) {
		if (Prefix == NULL || *Prefix == '\0') Prefix = "TMrbDGF";
		resource = this->GetName();
		resource(0,1).ToUpper();
		resource.Prepend(".Module.");
		resource.Prepend(Prefix);
		resource += ".SwitchBusTerm";
		terminate = env->GetValue(resource.Data(), kFALSE);
	} else {
		segmentID = this->GetClusterID()->GetTitle();
		terminate = (segmentID.Index("c", 0) >= 0);
	}

	if (terminate)	switchBus = TMrbDGFData::kTerminateDSP | TMrbDGFData::kTerminateFast;
	else 			switchBus = 0;
	
	switchBus &= TMrbDGFData::kSwitchBus;
	this->SetSwitchBus(switchBus, TMrbDGF::kBitSet);
	return(kTRUE);
}

Bool_t TMrbDGF::SetSwitchBus(UInt_t Bits, TMrbDGF::EMrbBitOp BitOp) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::SetSwitchBus
// Purpose:        Set switch bus register
// Arguments:      UInt_t Bits       -- bits
//                 EMrbBitOp BitOp   -- set, or, clear ...
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    Sets register bits.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	UInt_t icsrBits;

	if (!this->CheckConnect("SetSwitchBus")) return(kFALSE);

	switch (BitOp) {
		case TMrbDGF::kBitSet:
			icsrBits = Bits & TMrbDGFData::kSwitchBus;
			break;
		case TMrbDGF::kBitOr:
			icsrBits = this->ReadICSR();
			icsrBits |= Bits;
			break;
		case TMrbDGF::kBitClear:  
			icsrBits = this->ReadICSR();
			icsrBits &= ~Bits;
			break;
		case TMrbDGF::kBitMask:
			icsrBits = this->ReadICSR();
			icsrBits &= Bits;
			break;
		default:
			gMrbLog->Err() << "Illegal bit operator - " << BitOp << endl;
			gMrbLog->Flush(this->ClassName(), "SetSwitchBus");
			return(kFALSE);
	}
	
	icsrBits &= TMrbDGFData::kSwitchBus;
	this->WriteICSR(icsrBits);
	if (gMrbDGFData->fVerboseMode) {
		cout	<< setblue << this->ClassName() << "::SetSwitchBus(): [" << this->GetName()
				<< "] Setting switch bus to 0x" << setbase(16) << icsrBits << setbase(10)
				<< setblack << endl;
	}
	return(kTRUE);
}

Bool_t TMrbDGF::SetSwitchBus(const Char_t * DSPTrigger, const Char_t * FastTrigger) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::SetSwitchBus
// Purpose:        Set switch bus register
// Arguments:      Char_t * DSPTrigger   -- DSP trigger settings
//                 Char_t * FastTrigger  -- fast trigger settings
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    Sets register bits.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	UInt_t icsrBits;
	TString trig;
	TMrbNamedX *swbm;

	trig = "DSP-"; trig += DSPTrigger;

	swbm = fLofDGFSwitchBusModes.FindByName(trig.Data(), TMrbLofNamedX::kFindUnique | TMrbLofNamedX::kFindIgnoreCase);
	if (swbm == NULL) {
		gMrbLog->Err() << "Illegal DSP trigger mode - " << DSPTrigger << endl;
		gMrbLog->Flush(this->ClassName(), "SetSwitchBus");
		return(kFALSE);
	}
	icsrBits = swbm->GetIndex();

	if (FastTrigger == NULL) FastTrigger = DSPTrigger;
	trig = "Fast-"; trig += FastTrigger;

	swbm = fLofDGFSwitchBusModes.FindByName(trig.Data(), TMrbLofNamedX::kFindUnique | TMrbLofNamedX::kFindIgnoreCase);
	if (swbm == NULL) {
		gMrbLog->Err() << "Illegal fast trigger mode - " << FastTrigger << endl;
		gMrbLog->Flush(this->ClassName(), "SetSwitchBus");
		return(kFALSE);
	}
	icsrBits |= swbm->GetIndex();

	icsrBits &= TMrbDGFData::kSwitchBus;
	this->WriteICSR(icsrBits);
	cout	<< setblue << this->ClassName() << "::SetSwitchBus(): [" << this->GetName()
			<< "] Setting switch bus to 0x" << setbase(16) << icsrBits << setbase(10)
			<< setblack << endl;
	return(kTRUE);
}

UInt_t TMrbDGF::GetSwitchBus() {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::GetSwitchBus
// Purpose:        Read switch bus register
// Arguments:      --
// Results:        UInt_t SwitchBus    -- switch bus bits
// Exceptions:
// Description:    Reads ICSR (switchbus) bits
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	UInt_t switchBus = this->ReadICSR() & TMrbDGFData::kSwitchBus;
	return(switchBus);
}

Bool_t TMrbDGF::ActivateUserPSACode(Bool_t Activate) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::ActivateUserPSACode
// Purpose:        Activate user PSA
// Arguments:      Bool_t Activate            -- kTRUE/kFALSE
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    Activates user PSA code
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	UInt_t csrBit;
	if (Activate) {
		csrBit = this->GetParValue("MODCSRB");
		csrBit |= 1;
		this->SetParValue("MODCSRB", csrBit);
		for (Int_t chn = 0; chn < TMrbDGFData::kNofChannels; chn++) {
			csrBit = this->GetParValue(chn, "CHANCSRB");
			csrBit |= 1;
			this->SetParValue(chn, "CHANCSRB", csrBit);
		}
		if (gMrbDGFData->fVerboseMode) {
			cout	<< fName << " in C" << fCrate << ".N" << fStation
					<< ": User PSA code activated" << endl;
		}
	} else {
		csrBit = this->GetParValue("MODCSRB");
		csrBit &= ~1;
		this->SetParValue("MODCSRB", csrBit);
		for (Int_t chn = 0; chn < TMrbDGFData::kNofChannels; chn++) {
			csrBit = this->GetParValue(chn, "CHANCSRB");
			csrBit &= ~1;
			this->SetParValue(chn, "CHANCSRB", csrBit);
		}
		if (gMrbDGFData->fVerboseMode) {
			cout	<< fName << " in C" << fCrate << ".N" << fStation
					<< ": User PSA code deactivated" << endl;
		}
	}
	return(kTRUE);
}

Bool_t TMrbDGF::DownloadDSPCode(Int_t Retry, Bool_t TriedOnce) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::DownloadDSPCode
// Purpose:        Download DSP data
// Arguments:      Int_t Retry       -- number of retries on error
//                 Bool_t TriedOnce  -- kTRUE if already tried once
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    Loads code down to DSP.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	Int_t size = 0;
	Bool_t downloadFailed;
	Int_t retriesNeeded;
	TArrayI cData;

	if (!this->CheckConnect("DownLoadDSPCode")) return(kFALSE);

	downloadFailed = kFALSE;
	retriesNeeded = 0;

	if (fDGFData->DSPCodeRead()) {
		for (Int_t retry = 0; retry < Retry; retry++) {
			if (!this->WriteCSR(TMrbDGFData::kDSPReset)) downloadFailed = kTRUE; 		// reset DSP
			this->Wait();																// wait for reset to complete

			size = fDGFData->fDSPSize;											// size of DSP data
			this->CopyData(cData, fDGFData->fDSPCode.GetArray(), size); 		// copy DSP data to camac buffer
			if (!downloadFailed) {
				if (this->WriteTSAR(1)) {											// start with addr 1
					if (fCamac.BlockXfer(fCrate, fStation, A(0), F(16), cData, 2, size - 2, kTRUE) == -1) {	// start block xfer, 16 bit
						gMrbLog->Err()	<< fName << " in C" << fCrate << ".N" << fStation
										<< ".A0.F16 failed - DSPAddr=1, wc=" << size - 2 << endl;
						gMrbLog->Flush(this->ClassName(), "DownloadDSPCode");
						downloadFailed = kTRUE;
					}
				} else {
					downloadFailed = kTRUE;
				}
			}

			if (!downloadFailed && this->WriteTSAR(0)) { 							// writing to addr 0 will start DSP pgm
				if (fCamac.BlockXfer(fCrate, fStation, A(0), F(16), cData, 0, 2, kTRUE) == -1) {	// start block xfer
					gMrbLog->Err()	<< fName << " in C" << fCrate << ".N" << fStation
									<< ".A0.F16 failed - DSPAddr=0, wc=2" << endl;
					gMrbLog->Flush(this->ClassName(), "DownloadDSPCode");
					downloadFailed = kTRUE;
				}
			}

			this->Wait();														// wait to settle down

			if (this->ReadCSR() & TMrbDGFData::kDSPError) downloadFailed = kTRUE;

			if (!downloadFailed) {
				retriesNeeded = retry;
				if (TriedOnce) retriesNeeded++;
				break;
			}
		}
		
		if (downloadFailed) {
			gMrbLog->Err()	<< fName << " in C" << fCrate << ".N" << fStation
								<< ": Downloading DSP failed (" << Retry << " retries)" << endl;
			gMrbLog->Flush(this->ClassName(), "DownloadDSPCode");
			this->WriteCSR(TMrbDGFData::kDSPReset);
			return(kFALSE);
		} else if (retriesNeeded > 0) {
			gMrbLog->Out()	<< fName << " in C" << fCrate << ".N" << fStation
								<< ": Downloading DSP ok after " << retriesNeeded << " retries" << endl;
			gMrbLog->Flush(this->ClassName(), "DownloadDSPCode", setblue);
		}

		fStatusM |= TMrbDGF::kDSPCodeLoaded;

		if (gMrbDGFData->fVerboseMode) {
			gMrbLog->Out()	<< fName << " in C" << fCrate << ".N" << fStation
							<< ": DSP code successfully loaded (" << size << " words)" << endl;
			gMrbLog->Flush(this->ClassName(), "DownloadDSPCode", setblue);
			return(kTRUE);
		}
	} else {
		gMrbLog->Err() << "No DSP data" << endl;
		gMrbLog->Flush(this->ClassName(), "DownloadDSPCode");
		return(kFALSE);
	}
	return(kTRUE);
}

Bool_t TMrbDGF::UploadDSPCode(TArrayS & DSPCode) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::UploadDSPCode
// Purpose:        Load DSP data back to memory
// Arguments:      TArrayS & DSPCode   -- where to write DSP data
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    Reads code back from DSP.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	Int_t size;
	TArrayI cData;

	if (!this->CheckConnect("UpLoadDSPCode")) return(kFALSE);

	if (this->DSPCodeLoaded()) {
		size = fDGFData->fDSPSize;								// size of DSP data
		if (!this->WriteTSAR(0)) return(kFALSE); 				// where DSP pgm begins
		Int_t fc = fCamac.HasFastCamac();
		if (fc == -1) fc = 0;
		cData.Set(size);
		if (fCamac.BlockXfer(fCrate, fStation, A(0), F(fc), cData, 0, size, kTRUE) == -1) {	// start block xfer, 16 bit
			gMrbLog->Err()	<< fName << " in C" << fCrate << ".N" << fStation
							<< ".A0.F" << fc << " failed - DSPAddr=0, wc=" << size << endl;
			gMrbLog->Flush(this->ClassName(), "UploadDSPCode");
			return(kFALSE);
		}
		this->CopyData(DSPCode, cData.GetArray(), size);
		if (gMrbDGFData->fVerboseMode) {
			gMrbLog->Out()	<< fName << " in C" << fCrate << ".N" << fStation
							<< ": DSP code successfully read back (" << size << " words)" << endl;
			gMrbLog->Flush(this->ClassName(), "UploadDSPCode", setblue);
		}
		return(kTRUE);
	} else {
		gMrbLog->Err()	<< fName << " in C" << fCrate << ".N" << fStation
						<< ": DSP code must be DOWNloaded first" << endl;
		gMrbLog->Flush(this->ClassName(), "UploadDSPCode");
		return(kFALSE);
	}
}

Bool_t TMrbDGF::ReadParamMemory(Bool_t ReadInputParams, Bool_t ReadOutputParams) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::ReadParamMemory
// Purpose:        Read param values from DSP to memory
// Arguments:      Bool_t ReadInputParams   -- if input params should be read
//                 Bool_t ReadOutputParams  -- if output params should be read
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    Reads param values from DSP.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	Int_t nofParams;
	Int_t startAddr;
	Int_t idx;
	TArrayI cData;

	if (!this->CheckConnect("ReadParamMemory")) return(kFALSE);
	if (!this->CheckActive("ReadParamMemory")) return(kFALSE);
	if (this->IsOffline()) return(kTRUE);

	if (fDGFData->ParamNamesRead()) {
		if (ReadInputParams && ReadOutputParams) {
			nofParams = TMrbDGFData::kNofDSPInputParams + TMrbDGFData::kNofDSPOutputParams; // size of both sections
			startAddr = TMrbDGFData::kDSPInparStartAddr;
			idx = 0;
		} else if (ReadOutputParams) {
			nofParams = TMrbDGFData::kNofDSPOutputParams;				 	// size of pointers section
			startAddr = TMrbDGFData::kDSPOutparStartAddr;
			idx = TMrbDGFData::kNofDSPInputParams;
		} else if (ReadInputParams) {
			nofParams = TMrbDGFData::kNofDSPInputParams;				 	// size of input section
			startAddr = TMrbDGFData::kDSPInparStartAddr;
			idx = 0;
		} else {
			return(kFALSE);
		}
		
		cData.Set(nofParams);
		if (!this->WriteTSAR(startAddr)) return(kFALSE); 										// where to read from
		if (fCamac.BlockXfer(fCrate, fStation, A(0), F(0), cData, 0, nofParams, kTRUE) == -1) {	// start block xfer, 16 bit
			gMrbLog->Err()	<< fName << " in C" << fCrate << ".N" << fStation
							<< ".A0.F0 failed - DSPAddr=0x" << setbase(16) << TMrbDGFData::kDSPInparStartAddr
							<< setbase(10) << ", wc=" << nofParams << endl;
			gMrbLog->Flush(this->ClassName(), "ReadParamMemory");
			return(kFALSE);
		}
		fParams.Set(TMrbDGFData::kNofDSPInputParams + TMrbDGFData::kNofDSPOutputParams);										// copy camac data to param area
		for (Int_t i = 0; i < nofParams; i++, idx++) fParams[idx] = (UShort_t) cData[i];
		fStatusM |= TMrbDGF::kParamValuesRead;
		if (ReadInputParams) fStatusM &= ~TMrbDGF::kParamsIncoreChanged;
		
		if (gMrbDGFData->fVerboseMode) {
			gMrbLog->Out()	<< fName << " in C" << fCrate << ".N" << fStation
							<< ": " << nofParams << " words read from DSP (addr=0x" << setbase(16)
							<< startAddr << setbase(10) << ")";
			if (ReadInputParams && !ReadOutputParams) gMrbLog->Out() << " (*INPUT SECTION ONLY*)";
			if (!ReadInputParams && ReadOutputParams) gMrbLog->Out() << " (*OUTPUT SECTION ONLY*)";
			gMrbLog->Out() << endl;
			gMrbLog->Flush(this->ClassName(), "ReadParamMemory", setblue);
		}
		
		return(kTRUE);
	} else {
		gMrbLog->Err()	<< fName << " in C" << fCrate << ".N" << fStation
						<< ": You have to read param names first" << endl;
		gMrbLog->Flush(this->ClassName(), "ReadParamMemory");
		return(kFALSE);
	}
}

Bool_t TMrbDGF::ReadParamMemory(Int_t Channel) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::ReadParamMemory
// Purpose:        Read param memory for a single channel
// Arguments:      Int_t Channel   -- channel number
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    Reads param data from DSP. Channel == -1 -> module params only
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	TMrbString par;

	if (this->IsOffline()) return(kTRUE);

	if (Channel == -1) {
		return(this->ReadParamMemory((const Char_t *) NULL));
	} else {
		if (!this->CheckChannel("ReadParamMemory", Channel)) return(kFALSE);
		par = "*";
		par += Channel;
		return(this->ReadParamMemory(par.Data()));
	}
}

Bool_t TMrbDGF::ReadParamMemory(const Char_t * ParamName) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::ReadParamMemory
// Purpose:        Read DSP data for a group of params
// Arguments:      Char_t * ParamName  -- param name, may be wild-carded
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    Reads DSP data.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	TString pName;
	TString pType;
	TMrbNamedX * key;
	Int_t nofParams;
	Int_t from, to;
	Int_t idx;
	TString paramName;

	if (this->IsOffline()) return(kTRUE);

	if (!fDGFData->ParamNamesRead()) {
		gMrbLog->Err() << "No param names read" << endl;
		gMrbLog->Flush(this->ClassName(), "ReadParamMemory");
		return(kFALSE);
	}

	if (ParamName == NULL) {					 	// read module params only (0 .. 63)
		from = 0;
		to = TMrbDGFData::kNofDSPInparModule - 1;
		paramName = "*";
	} else {										// read params for a given channel mask
		from = 0;
		to = TMrbDGFData::kNofDSPInputParams + TMrbDGFData::kNofDSPOutputParams;
		paramName = ParamName;
	}

	TRegexp paramMask(paramName.Data(), kTRUE);

	key = fDGFData->FirstParam();
	nofParams = 0;
	while (key) {
		pName = key->GetName();
		if (pName.Index(paramMask) >= 0) {
			idx = key->GetIndex();
			if (idx >= from && idx <= to) {
				this->GetParValue(pName.Data(), kTRUE);
				nofParams++;
			}
		}
		key = fDGFData->NextParam(key);
	}

	if (nofParams > 0) {
		if (gMrbDGFData->fVerboseMode) {
			if (ParamName == NULL) {
				gMrbLog->Out()	<< fName << " in C" << fCrate << ".N" << fStation
								<< ": " << nofParams << " params read from DSP (*MODULE PARAMS ONLY*)" << endl;
				gMrbLog->Flush(this->ClassName(), "ReadParamMemory", setblue);
			} else {
				gMrbLog->Out()	<< fName << " in C" << fCrate << ".N" << fStation
							<< ": " << nofParams << " params read from DSP (masked by \"" << ParamName << "\")"	<< endl;
				gMrbLog->Flush(this->ClassName(), "ReadParamMemory", setblue);
			}
		}
		return(kTRUE);
	} else {
		if (ParamName == NULL) {
			gMrbLog->Err() << fName << " in C" << fCrate << ".N" << fStation << ": No module params found" << endl;
			gMrbLog->Flush(this->ClassName(), "ReadParamMemory");
		} else {
			gMrbLog->Err()	<< fName << " in C" << fCrate << ".N" << fStation << ": No such params - "
							<< ParamName << endl;
			gMrbLog->Flush(this->ClassName(), "ReadParamMemory");
		}
		return(kFALSE);
	}
}

Bool_t TMrbDGF::ReadParamMemory(Int_t FromParam, Int_t ToParam) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::ReadParamMemory
// Purpose:        Partially read param memory
// Arguments:      UInt_t FromParam    -- param to start with
//                 UInt_t ToParam      -- param to end with
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    Reads param data from DSP. Partial read.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	Int_t nofParams;
	Int_t startAddr;
	Int_t idx = 0;
	Int_t i;
	TArrayI cData;

	if (!this->CheckConnect("ReadParamMemory")) return(kFALSE);
	if (!this->CheckActive("ReadParamMemory")) return(kFALSE);
	if (this->IsOffline()) return(kTRUE);

	if (FromParam > ToParam
	||	FromParam < 0
	||	ToParam > TMrbDGFData::kNofDSPInputParams + TMrbDGFData::kNofDSPOutputParams) {
		gMrbLog->Err()	<< fName << " in C" << fCrate << ".N" << fStation
						<< "- addr error, param index should be in [0,"
						<< TMrbDGFData::kNofDSPInputParams + TMrbDGFData::kNofDSPOutputParams << "]" << endl;
		gMrbLog->Flush(this->ClassName(), "ReadParamMemory");
		return(kFALSE);
	}
			
	nofParams = ToParam - FromParam + 1;
	startAddr = TMrbDGFData::kDSPInparStartAddr + FromParam * sizeof(Int_t);
	if (!this->WriteTSAR(startAddr)) return(kFALSE); 							// where to read from
	cData.Set(nofParams);
	if (fCamac.BlockXfer(fCrate, fStation, A(0), F(0), cData, 0, nofParams, kTRUE) == -1) {	// start block xfer, 16 bit
		gMrbLog->Err()	<< fName << " in C" << fCrate << ".N" << fStation
						<< ".A0.F0 failed - DSPAddr=0x" << setbase(16) << startAddr
						<< setbase(10) << ", wc=" << nofParams << endl;
		gMrbLog->Flush(this->ClassName(), "ReadParamMemory");
		return(kFALSE);
	}
	fParams.Set(TMrbDGFData::kNofDSPInputParams + TMrbDGFData::kNofDSPOutputParams);										// copy camac data to param area
	for (i = 0; i < nofParams; i++, idx++) fParams[idx] = (UShort_t) cData[i];

	if (gMrbDGFData->fVerboseMode) {
		gMrbLog->Out()	<< fName << " in C" << fCrate << ".N" << fStation
						<< ": " << nofParams << " words read from DSP (addr=0x" << setbase(16)
						<< startAddr << setbase(10) << ")" << endl;
		gMrbLog->Flush(this->ClassName(), "ReadParamMemory", setblue);
	}
	return(kTRUE);
}

Bool_t TMrbDGF::WriteParamMemory(Bool_t Reprogram) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::WriteParamMemory
// Purpose:        Write param values from memory to DSP
// Arguments:      Bool_t Reprogram    -- kTRUE if DAC and FPGA should be re-programmed
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    Writes param values to DSP.
//                 Only param DATA will be written (256 words).
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	Int_t nofParams;
	TArrayI cData;

	if (!this->CheckConnect("WriteParamMemory")) return(kFALSE);
	if (!this->CheckActive("WriteParamMemory")) return(kFALSE);
	if (this->IsOffline()) return(kTRUE);

	if (this->ParamValuesRead()) {
		this->WriteTSAR(TMrbDGFData::kDSPInparStartAddr);				// where to write to
		nofParams = TMrbDGFData::kNofDSPInputParams;					// size of params section (input only)
		this->CopyData(cData, fParams.GetArray(), nofParams);			// xfer param data to camac buffer
		if (fCamac.BlockXfer(fCrate, fStation, A(0), F(16), cData, 0, nofParams, kTRUE) == -1) {	// start block xfer, 16 bit
			gMrbLog->Err()	<< fName << " in C" << fCrate << ".N" << fStation
							<< ".A0.F16 failed - DSPAddr=0x" << setbase(16) << TMrbDGFData::kDSPInparStartAddr
							<< setbase(10) << ", wc=" << nofParams << endl;
			gMrbLog->Flush(this->ClassName(), "WriteParamMemory");
			return(kFALSE);
		}
		if (gMrbDGFData->fVerboseMode) {
			gMrbLog->Out() << fName << " in C" << fCrate << ".N" << fStation
					<< ": " << nofParams << " words written to DSP (addr=0x"
					<< setbase(16) << TMrbDGFData::kDSPInparStartAddr << setbase(10) << ")" << endl;
			gMrbLog->Flush(this->ClassName(), "WriteParamMemory", setblue);
		}

		if (Reprogram) {
			if (gMrbDGFData->fVerboseMode) {
				cout	<< setmagenta
						<< this->ClassName() << "::WriteParamMemory(): Reprogramming DACs and FPGA - Wait ... "
						<< ends << setblack << flush;
			}
			this->SetParValue("RUNTASK", TMrbDGFData::kRunSlowControl, kTRUE);		// reprogram DACs
			this->SetParValue("CONTROLTASK", TMrbDGFData::kProgramDACs, kTRUE);
			this->StartRun();
			this->WaitActive(1);

			TArrayS calAdcs(TMrbDGF::kCalibrationSize);
			calAdcs.Reset();
			UInt_t addr = this->GetParValue("AOUTBUFFER", kTRUE);
			this->WriteTSAR(addr);															// write to AOUTBUFFER
			this->CopyData(cData, calAdcs.GetArray(), TMrbDGF::kCalibrationSize); 	// write zeroes -> no calibration
			if (fCamac.BlockXfer(fCrate, fStation, A(0), F(16), cData, 0, TMrbDGF::kCalibrationSize, kTRUE) == -1) {	// start block xfer, 16 bit
				gMrbLog->Err()	<< fName << " in C" << fCrate << ".N" << fStation
								<< ".A0.F16 failed - DSPAddr=0x" << setbase(16) << addr
								<< setbase(10) << ", wc=" << nofParams << ", ActionCount=-1" << endl;
				gMrbLog->Flush(this->ClassName(), "WriteParamMemory");
				return(kFALSE);
			}
		
			this->SetParValue("CONTROLTASK", TMrbDGFData::kUpdateFPGA, kTRUE);	// reprogram FPGA
			this->StartRun();
			this->WaitActive(1);

			if (gMrbDGFData->fVerboseMode) {
				cout	<< setmagenta << " done." << setblack << endl;
				gMrbLog->Out() << fName << " in C" << fCrate << ".N" << fStation << ": DACs and FPGA reprogrammed" << endl;
				gMrbLog->Flush(this->ClassName(), "WriteParamMemory", setblue);
			}
		}
		return(kTRUE);
	} else {
		gMrbLog->Err() << fName << " in C" << fCrate << ".N" << fStation << ": No param data read so far" << endl;
		gMrbLog->Flush(this->ClassName(), "WriteParamMemory");
		return(kFALSE);
	}
}

Bool_t TMrbDGF::WriteParamMemory(Int_t Channel) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::WriteParamMemory
// Purpose:        Update param memory for a single param
// Arguments:      Int_t Channel   -- channel number
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    Outputs param data.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	TMrbString par;

	if (!this->CheckChannel("WriteParamMemory", Channel)) return(kFALSE);
	par = "*";
	par += Channel;
	return(this->WriteParamMemory(par.Data()));
}

Bool_t TMrbDGF::WriteParamMemory(const Char_t * ParamName) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::WriteParamMemory
// Purpose:        Update memory for a group of params
// Arguments:      Char_t * ParamName  -- param name, may be wild-carded
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    Outputs param data.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	TString pName;
	TString pType;
	TMrbNamedX * key;
	Int_t nofParams;

	TRegexp paramMask(ParamName, kTRUE);

	if (!fDGFData->ParamNamesRead()) {
		gMrbLog->Err() << "No param names read" << endl;
		gMrbLog->Flush(this->ClassName(), "WriteParamMemory");
		return(kFALSE);
	}

	key = fDGFData->FirstParam();
	nofParams = 0;
	while (key) {
		pName = key->GetName();
		if (pName.Index(paramMask) >= 0 && key->GetIndex() <= TMrbDGFData::kNofDSPInputParams) {
			this->SetParValue(pName.Data(), this->GetParValue(pName.Data(), kFALSE), kTRUE);
			nofParams++;
		}
		key = fDGFData->NextParam(key);
	}

	if (nofParams > 0) {
		if (gMrbDGFData->fVerboseMode) {
			gMrbLog->Out()	<< fName << " in C" << fCrate << ".N" << fStation
							<< ": " << nofParams << " params written to DSP (masked by \""
							<< ParamName << "\")" << endl;
			gMrbLog->Flush(this->ClassName(), "WriteParamMemory", setblue);
			}
			return(kTRUE);
	} else {
		gMrbLog->Err() << fName << " in C" << fCrate << ".N" << fStation << ": No such params - " << ParamName << endl;
		gMrbLog->Flush(this->ClassName(), "WriteParamMemory");
		return(kFALSE);
	}
}

Bool_t TMrbDGF::CopyParamMemory(TMrbDGF * Module, Bool_t CopyInputParams, Bool_t CopyOutputParams) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::CopyParamMemory
// Purpose:        Read param values from other module
// Arguments:      TMrbDgf * Module         -- where to read params from
//                 Bool_t CopyInputParams   -- copy input params only
//                 Bool_t CopyOutputParams   -- copy output params only
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    Reads param values from neighbouring module.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	Int_t nofParams;
	Int_t idx;
	Int_t i;
	Short_t * dp;

	if (fDGFData->ParamNamesRead()) {
		if (CopyInputParams && CopyOutputParams) {
			nofParams = TMrbDGFData::kNofDSPInputParams + TMrbDGFData::kNofDSPOutputParams; // size of both sections
			idx = 0;
		} else if (CopyOutputParams) {
			nofParams = TMrbDGFData::kNofDSPOutputParams;				 	// size of pointers section
			idx = TMrbDGFData::kNofDSPInputParams;
		} else if (CopyInputParams) {
			nofParams = TMrbDGFData::kNofDSPInputParams;				 	// size of input section
			idx = 0;
		} else {
			return(kFALSE);
		}
		fParams.Set(TMrbDGFData::kNofDSPInputParams + TMrbDGFData::kNofDSPOutputParams);										// copy camac data to param area
		dp = Module->GetParamAddr() + idx;
		for (i = idx; i < nofParams; i++) fParams[i] = (UShort_t) *dp++;

		fStatusM |= TMrbDGF::kParamValuesRead;
		if (gMrbDGFData->fVerboseMode) {
			gMrbLog->Out()	<< fName << " in C" << fCrate << ".N" << fStation
							<< ": " << nofParams << " words read from module " << Module->GetName()
							<< " in C" << Module->GetCrate() << ".N" << Module->GetStation();
			if (CopyInputParams && !CopyOutputParams) gMrbLog->Out() << " (*INPUT SECTION ONLY*)";
			if (!CopyInputParams && CopyOutputParams) gMrbLog->Out() << " (*OUTPUT SECTION ONLY*)";
			gMrbLog->Out() << endl;
			gMrbLog->Flush(this->ClassName(), "CopyParamMemory", setblue);
		}
		return(kTRUE);
	} else {
		gMrbLog->Err() << fName << " in C" << fCrate << ".N" << fStation << ": You have to read param names first" << endl;
		gMrbLog->Flush(this->ClassName(), "CopyParamMemory");
		return(kFALSE);
	}
}

Bool_t TMrbDGF::CopyParamMemory(TMrbDGF * Module, Int_t Channel) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::CopyParamMemory
// Purpose:        Copy param memory for a single channel
// Arguments:      TMrbDGF * Module   -- where to copy data from
//                 Int_t Channel      -- channel number
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    Reads param data from neighbouring module. Channel == -1 -> module params only
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	TMrbString par;

	if (Channel == -1) {
		return(this->CopyParamMemory(NULL));
	} else {
		if (!this->CheckChannel("CopyParamMemory", Channel)) return(kFALSE);
		par = "*";
		par += Channel;
		return(this->CopyParamMemory(Module, par.Data()));
	}
}

Bool_t TMrbDGF::CopyParamMemory(TMrbDGF * Module, const Char_t * ParamName) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::CopyParamMemory
// Purpose:        Read param data for a group of params
// Arguments:      TMrbDGF * Module     -- where to copy from
//                 Char_t * ParamName   -- param name, may be wild-carded
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    Reads param data from neighbouring module.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	TString pName;
	TString pType;
	TMrbNamedX * key;
	Int_t nofParams;
	Int_t from, to;
	Int_t idx;
	TString paramName;

	if (!fDGFData->ParamNamesRead()) {
		gMrbLog->Err() << "No param names read" << endl;
		gMrbLog->Flush(this->ClassName(), "CopyParamMemory");
		return(kFALSE);
	}

	if (ParamName == NULL || *ParamName == '*') { 	// read module params only (0 .. 63)
		from = 0;
		to = TMrbDGFData::kNofDSPInparModule - 1;
		paramName = "*";
	} else {										// read params for a given channel mask
		from = 0;
		to = TMrbDGFData::kNofDSPInputParams;
		paramName = ParamName;
	}

	TRegexp paramMask(paramName.Data(), kTRUE);

	key = fDGFData->FirstParam();
	nofParams = 0;
	while (key) {
		pName = key->GetName();
		if (pName.Index(paramMask) >= 0) {
			idx = key->GetIndex();
			if (idx >= from && idx <= to) {
				this->SetParValue(pName.Data(), Module->GetParValue(pName.Data(), kFALSE), kFALSE);
				nofParams++;
			}
		}
		key = fDGFData->NextParam(key);
	}

	if (nofParams > 0) {
		if (gMrbDGFData->fVerboseMode) {
			if (ParamName == NULL) {
				gMrbLog->Out()	<< fName << " in C" << fCrate << ".N" << fStation
								<< ": " << nofParams << " params read from modue "
								<< Module->GetName() << " in C" << Module->GetCrate() << ".N" << Module->GetStation()
								<< " (*MODULE PARAMS ONLY*)" << endl;
				gMrbLog->Flush(this->ClassName(), "CopyParamMemory", setblue);
			} else {
				gMrbLog->Out()	<< fName << " in C" << fCrate << ".N" << fStation
								<< ": " << nofParams << " params read from module "
								<< Module->GetName() << " in C" << Module->GetCrate() << ".N" << Module->GetStation()
								<< " (masked by \"" << ParamName << "\")" << endl;
				gMrbLog->Flush(this->ClassName(), "CopyParamMemory", setblue);
			}
		}
		return(kTRUE);
	} else {
		if (ParamName == NULL) {
			gMrbLog->Err() << fName << " in C" << fCrate << ".N" << fStation << ": No module params found" << endl;
			gMrbLog->Flush(this->ClassName(), "CopyParamMemory");
		} else {
			gMrbLog->Err() << fName << " in C" << fCrate << ".N" << fStation << ": No such params - " << ParamName << endl;
			gMrbLog->Flush(this->ClassName(), "CopyParamMemory");
		}
		return(kFALSE);
	}
}

Bool_t TMrbDGF::SetParValue(const Char_t * ParamName, Int_t Value, Bool_t UpdateDSP) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::SetParValue
// Purpose:        Set a param value
// Arguments:      Char_t * ParamName   -- param name
//                 Int_t Value          -- value
//                 Bool_t UpdateDSP     -- kTRUE if DSP memory is to be updated
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    Sets the value of a given parameter in memory.
//                 Writes param value back to DSP if immediate flag is set.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	TMrbNamedX * param;
	Int_t pOffset;

	param = fDGFData->FindParam(ParamName); 			// find param offset by param name
	if (param == NULL) {
		gMrbLog->Err() << "No such param - " << ParamName << endl;
		gMrbLog->Flush(this->ClassName(), "SetParValue");
		return(kFALSE);
	}

	pOffset = param->GetIndex();						// offset has to be in the data region
	if (pOffset < 0) pOffset = -pOffset;				// change index for shadow params
	if (pOffset > TMrbDGFData::kNofDSPInputParams) {
		TString pName = param->GetName();
		if (pName.CompareTo("SYNCHDONE") != 0) {
			gMrbLog->Err() << "Param \"" << ParamName << "\" is in the OUTPUT section - can't be set" << endl;
			gMrbLog->Flush(this->ClassName(), "SetParValue");
			return(kFALSE);
		}
	}

	fParams[pOffset] = (UShort_t) (Value & 0xffff);		// set value in memory
	if (UpdateDSP && !this->IsOffline()) {				// update param data in DSP?
		if (!this->CheckConnect("SetParValue")) return(kFALSE);
		if (!this->CheckActive("SetParValue")) return(kFALSE);
		this->WritePSA(pOffset);						// where to write to
		Int_t cVal = Value & 0xffff;
		if (!fCamac.ExecCnaf(fCrate, fStation, A(0), F(16), cVal, kTRUE)) { 		// exec cnaf, 16 bit
			gMrbLog->Err()	<< fName << " in C" << fCrate << ".N" << fStation << ".A0.F16 failed" << endl;
			gMrbLog->Flush(this->ClassName(), "SetParValue");
			return(kFALSE);
		}
	}

	if (!UpdateDSP) fStatusM |= TMrbDGF::kParamsIncoreChanged;
	return(kTRUE);
}

Bool_t TMrbDGF::SetParValue(Int_t Offset, Int_t Value, Bool_t UpdateDSP) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::SetParValue
// Purpose:        Set a param value
// Arguments:      Int_t Offset         -- offset
//                 Int_t Value          -- value
//                 Bool_t UpdateDSP     -- kTRUE if DSP memory is to be updated
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    Sets the value of a given parameter in memory.
//                 Writes param value back to DSP if update flag is set.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	fParams[Offset] = (UShort_t) (Value & 0xffff);		// set value in memory
	if (UpdateDSP && !this->IsOffline()) {				// update param data in DSP?
		if (!this->CheckConnect("SetParValue")) return(kFALSE);
		if (!this->CheckActive("SetParValue")) return(kFALSE);
		this->WritePSA(Offset);						// where to write to
		Int_t cVal = Value & 0xffff;
		if (!fCamac.ExecCnaf(fCrate, fStation, A(0), F(16), cVal, kTRUE)) { 		// exec cnaf, 16 bit
			gMrbLog->Err()	<< fName << " in C" << fCrate << ".N" << fStation << ".A0.F16 failed" << endl;
			gMrbLog->Flush(this->ClassName(), "SetParValue");
			return(kFALSE);
		}
	}

	if (!UpdateDSP) fStatusM |= TMrbDGF::kParamsIncoreChanged;
	return(kTRUE);
}

Int_t TMrbDGF::GetParValue(const Char_t * ParamName, Bool_t ReadFromDSP) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::GetParValue
// Purpose:        Get param value or pointer
// Arguments:      Char_t * ParamName   -- param name
//                 Bool_t ReadFromDSP   -- kTRUE if param to be read from DSP
// Results:        Int_t Value          -- value
// Exceptions:
// Description:    Reads the value of a given parameter from memory or DSP.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	TMrbNamedX * param;
	Int_t pValue;
	Int_t pOffset;

	param = fDGFData->FindParam(ParamName); 			// find param offset by param name
	if (param == NULL) {
		gMrbLog->Err() << "No such param - " << ParamName << endl;
		gMrbLog->Flush(this->ClassName(), "GetParValue");
		return(-1);
	}

	pOffset = param->GetIndex();						// offset has to be in the data region
	if (pOffset < 0) pOffset = -pOffset;				// (may be shadowed)

	pValue = fParams[pOffset] & 0xffff;					// incore value

	if (ReadFromDSP && !this->IsOffline()) {									// reread from DSP?
		if (!this->CheckConnect("GetParValue")) return(-1);
		if (!this->CheckActive("GetParValue")) return(-1);
		this->WritePSA(pOffset);						// where to read from
		if (!fCamac.ExecCnaf(fCrate, fStation, A(0), F(0), pValue, kTRUE)) {	// exec cnaf, 16 bit
			gMrbLog->Err()	<< fName << " in C" << fCrate << ".N" << fStation << ".A0.F0 failed" << endl;
			gMrbLog->Flush(this->ClassName(), "GetParValue");
			return(-1);
		}
		fParams[pOffset] = (UInt_t) pValue & 0xffff;	// update incore data
	}

	return(pValue);
}

Bool_t TMrbDGF::SetParValue(Int_t Channel, const Char_t * ParamName, Int_t Value, Bool_t UpdateDSP) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::SetParValue
// Purpose:        Set param value for a single channel
// Arguments:      Int_t Channel        -- channel number
//                 Char_t * ParamName   -- param name
//                 Int_t Value          -- value
//                 Bool_t UpdateDSP     -- kTRUE if DSP memory is to be updated
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    Sets param value of a given channel in memory.
//                 Writes param value back to DSP if immediate flag is set.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	TMrbString paramName;

	if (!this->CheckChannel("SetParValue", Channel)) return(kFALSE);
	paramName = ParamName;
	paramName += Channel;
	return(this->SetParValue(paramName.Data(), Value, UpdateDSP));
}

Int_t TMrbDGF::GetParValue(Int_t Channel, const Char_t * ParamName, Bool_t ReadFromDSP) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::GetParValue
// Purpose:        Get param value or pointer for a given channel
// Arguments:      Int_t Channel        -- channel number
//                 Char_t * ParamName   -- param name
//                 Bool_t ReadFromDSP   -- kTRUE if param to be read from DSP
// Results:        Int_t Value          -- value
// Exceptions:
// Description:    Reads param value of a given channel from memory or DSP.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	TMrbString paramName;

	if (!this->CheckChannel("GetParValue", Channel)) return(-1);
	paramName = ParamName;
	paramName += Channel;
	return(this->GetParValue(paramName.Data(), ReadFromDSP));
}

Int_t TMrbDGF::GetParValue(Int_t Offset, Bool_t ReadFromDSP) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::GetParValue
// Purpose:        Get param value
// Arguments:      Int_t Offset         -- param offset
//                 Bool_t ReadFromDSP   -- kTRUE if param to be read from DSP
// Results:        Int_t Value          -- value
// Exceptions:
// Description:    Reads the value of a given parameter from memory or DSP.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	Int_t pValue;

	pValue = fParams[Offset] & 0xffff;					// incore value

	if (ReadFromDSP && !this->IsOffline()) {									// reread from DSP?
		if (!this->CheckConnect("GetParValue")) return(-1);
		if (!this->CheckActive("GetParValue")) return(-1);
		this->WritePSA(Offset);						// where to read from
		if (!fCamac.ExecCnaf(fCrate, fStation, A(0), F(0), pValue, kTRUE)) {	// exec cnaf, 16 bit
			gMrbLog->Err()	<< fName << " in C" << fCrate << ".N" << fStation << ".A0.F0 failed" << endl;
			gMrbLog->Flush(this->ClassName(), "GetParValue");
			return(-1);
		}
		fParams[Offset] = (UInt_t) pValue & 0xffff;	// update incore data
	}

	return(pValue);
}

Bool_t TMrbDGF::FPGACodeLoaded(TMrbDGFData::EMrbFPGAType FPGAType) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::FGPACodeLoaded
// Purpose:        Test if FPGA code is loaded
// Arguments:      EMrbFPGAType FPGAType    -- fpga type (system or fippi)
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    Tests if FPGA code has been loaded.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	UInt_t bit = (FPGAType == TMrbDGFData::kSystemFPGA) ?
								TMrbDGF::kSystemFPGACodeLoaded :
								TMrbDGF::kFippiFPGACodeLoaded;
	return((fStatusM & bit) != 0);
}

Bool_t TMrbDGF::FPGACodeLoaded(const Char_t * FPGAType) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::FGPACodeLoaded
// Purpose:        Test if FPGA code is loaded
// Arguments:      Char_t * FPGAType    -- fpga type (system or fippi)
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    Tests if FPGA code has been loaded.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	TMrbNamedX * sysfip;

	sysfip = gMrbDGFData->fLofFPGATypes.FindByName(FPGAType, TMrbLofNamedX::kFindUnique | TMrbLofNamedX::kFindIgnoreCase);
	if (sysfip == NULL) {
		gMrbLog->Err() << "Illegal FPGA type - " << FPGAType << endl;
		gMrbLog->Flush(this->ClassName(), "FPGACodeLoaded");
		return(kFALSE);
	}
	return(this->FPGACodeLoaded((TMrbDGFData::EMrbFPGAType) sysfip->GetIndex()));
}

void TMrbDGF::Print(ostream & OutStrm) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::Print
// Purpose:        Print status
// Arguments:      ostream & OutStrm     -- output stream
// Results:        --
// Exceptions:
// Description:    Outputs status info.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	UInt_t vDSP, vvDSP, vFPGA, vvFPGA, vHard, vvHard, vIntrfc, vvIntrfc;

	vDSP = vvDSP = vFPGA = vvFPGA = vHard = vvHard = vIntrfc = vvIntrfc = 0;

	if (IsConnected() && this->DSPCodeLoaded()) {							// get version numbers from DSP
		vDSP = this->GetParValue("SOFTWAREID", kTRUE);
		vvDSP = this->GetParValue("SOFTVARIANT", kTRUE);
		vFPGA = this->GetParValue("FIPPIID", kTRUE);
		vvFPGA = this->GetParValue("FIPPIVARIANT", kTRUE);
		vHard = this->GetParValue("HARDWAREID", kTRUE);
		vvHard = this->GetParValue("HARDVARIANT", kTRUE);
		vIntrfc = this->GetParValue("INTRFCID", kTRUE);
		vvIntrfc = this->GetParValue("INTRFCVARIANT", kTRUE);
	}

	cout	<< "===========================================================================================" << endl
			<< " DGF-4C Module Section" << endl
			<< "..........................................................................................." << endl;
	cout	<< " Module name                  :	" << this->GetName() << endl;
	if (IsConnected()) {
		cout	<< " Connected to host            :	" << fCamacHost << endl;
	} else {
		cout	<< " CAMAC host (NOT connected)   :	" << fCamacHost << endl;
	}
	cout	<< " Crate                        : C" << fCrate << endl;
	cout	<< " Station                      : N" << fStation << endl;
	cout	<< " Local data base              : ";

	if (this->HasLocalDataBase()) cout << "Yes"; else cout << "No"; cout << endl;

	cout	<< " XIA Release                  : "	<< gEnv->GetValue("TMrbDGF.XiaRelease", "unknown")
													<< " (" << gEnv->GetValue("TMrbDGF.XiaDate", "")
													<< ")" << endl;
	
	cout	<< " DGF hardware                 : Version "
			<< setiosflags(ios::uppercase) << setbase(16)
			<< vHard << " (" << vvHard << ")"
			<< setbase(10) << resetiosflags(ios::uppercase)
			<< endl;

	cout	<< " DGF interface                : Version "
			<< setiosflags(ios::uppercase) << setbase(16)
			<< vIntrfc << " (" << vvIntrfc << ")"
			<< setbase(10) << resetiosflags(ios::uppercase)
			<< endl;

	cout	<< " FPGA code loaded [System]    : ";
	if (this->FPGACodeLoaded(TMrbDGFData::kSystemFPGA)) {
		cout	<< "Version " << setiosflags(ios::uppercase) << setbase(16)
				<< vFPGA << " (" << vvFPGA << ")"
				<< setbase(10) << resetiosflags(ios::uppercase);
	} else {
		cout << "No";
	}
	cout << endl;

	cout	<< " FPGA code loaded [Fippi]     : ";
	if (this->FPGACodeLoaded(TMrbDGFData::kFippiFPGA)) {
		cout	<< "Version " << setiosflags(ios::uppercase) << setbase(16)
				<< vFPGA << " (" << vvFPGA << ")"
				<< setbase(10) << resetiosflags(ios::uppercase);
	} else {
		cout << "No";
	}
	cout << endl;

	cout	<< " DSP code loaded              : ";
	if (this->DSPCodeLoaded()) {
		cout	<< "Version " << setiosflags(ios::uppercase) << setbase(16)
				<< vDSP << " (" << vvDSP << ")"
				<< setbase(10) << resetiosflags(ios::uppercase);
	} else {
		cout << "No";
	}
	cout << endl;

	cout	<< " Param values read            : ";
	if (this->ParamValuesRead()) cout << fDGFData->GetNofParams(); else cout << "No"; cout << endl;

	cout	<< " Trigger channels             : ";
	this->PrintTriggerMask(kFALSE);
	cout << endl;
	cout	<< " Good channels                : ";
	this->PrintChannelMask(kFALSE);
	cout << endl;

	cout	<< "-------------------------------------------------------------------------------------------" << endl;
	if (HasLocalDataBase()) fDGFData->Print();
}

Bool_t TMrbDGF::WriteParamsToFile(const Char_t * FileName, const Char_t * ParamName) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::WriteParamsToFile
// Purpose:        Print param(s)
// Arguments:      Char_t * FileName      -- file name
//                 Char_t * ParamName     -- param name (may be wildcarded)
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    Outputs param data to file.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	if (this->IsOffline()) return(kTRUE);

	TString fileName = FileName;
	fileName = fileName.Strip(TString::kBoth);
	if (fileName.Length() == 0) fileName = this->GetName();
	if (fileName.Index(".", 0) == -1) fileName += ".par";
	
	ofstream paramOut;
	paramOut.open(fileName.Data(), ios::out);
	if (!paramOut.good()) {
		gMrbLog->Err() << gSystem->GetError() << " - " << fileName << endl;
		gMrbLog->Flush(this->ClassName(), "WriteParamsToFile");
		return(kFALSE);
	}
	
	Bool_t sts = PrintParams(paramOut, ParamName);
	paramOut.close();
	gMrbLog->Out()	<< fName << " in C" << fCrate << ".N" << fStation << ": Params written to file " << fileName << endl;
	gMrbLog->Flush(this->ClassName(), "WriteParamsToFile", setblue);
	return(sts);
}

Bool_t TMrbDGF::WriteParamsToFile(const Char_t * FileName, Int_t Channel) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::WriteParamsToFile
// Purpose:        Print param(s)
// Arguments:      Char_t * FileName      -- file name
//                 Int_t Channel          -- channel no (-1 -> all channels)
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    Outputs param data to file.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	Bool_t sts;
	TString fileName;
	ofstream paramOut;
	
	if (this->IsOffline()) return(kTRUE);

	fileName = FileName;
	fileName = fileName.Strip(TString::kBoth);
	if (fileName.Length() == 0) fileName = this->GetName();
	if (fileName.Index(".", 0) == -1) fileName += ".par";
	
	paramOut.open(fileName.Data(), ios::out);
	if (!paramOut.good()) {
		gMrbLog->Err() << gSystem->GetError() << " - " << fileName << endl;
		gMrbLog->Flush(this->ClassName(), "WriteParamsToFile");
		return(kFALSE);
	}
	
	sts = PrintParams(paramOut, Channel);
	paramOut.close();
	gMrbLog->Out()	<< fName << " in C" << fCrate << ".N" << fStation << ": Params written to file " << fileName << endl;
	gMrbLog->Flush(this->ClassName(), "WriteParamsToFile", setblue);
	return(sts);
}

Bool_t TMrbDGF::PrintParams(ostream & OutStrm, const Char_t * ParamName) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::PrintParams
// Purpose:        Print param(s)
// Arguments:      ostream & OutStrm       -- output stream
//                 Char_t * ParamName      -- param name (may be wildcarded)
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    Outputs param data.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	TRegexp paramMask(ParamName, kTRUE);

	if (!fDGFData->ParamNamesRead()) {
		gMrbLog->Err() << "No param names read" << endl;
		gMrbLog->Flush(this->ClassName(), "PrintParams");
		return(kFALSE);
	}

	TMrbNamedX * key = fDGFData->FirstParam();
	Bool_t found = kFALSE;
	while (key) {
		if (key->GetIndex() >= 0) {
			TString pName = key->GetName();
			if (pName.Index(paramMask) >= 0) {
				if (!found) {
					OutStrm	<< "===========================================================================================" << endl
							<< "DGF-4C Param Section: Module " << this->GetTitle() << endl
							<< "..........................................................................................." << endl;
					OutStrm << Form("%-15s%-10s%10s%10s%10s%5s%s", "ParamName", "Type", "Offset", "(dec)", "(hex)", "", "Comment") << endl;
					OutStrm	<< "..........................................................................................." << endl;
				}
				found = kTRUE;
				Int_t pOffset = key->GetIndex();
				TString pCmt = key->GetTitle();
				if (pCmt.Length() > 0) pCmt = Form("[%s]", pCmt.Data());
				TString synNames;
				pCmt += this->GetSynonyms(synNames, key);
				TString pType = (pOffset < TMrbDGFData::kNofDSPInputParams) ? "Input" : "Output";
				OutStrm << Form("%-15s%-10s%10d", pName.Data(), pType.Data(), pOffset);
				if (this->ParamValuesRead()) {
					OutStrm	<< Form("%10d%#10x", (UShort_t) fParams[pOffset], (UShort_t) fParams[pOffset]);
				} else if (pOffset <= TMrbDGFData::kNofDSPInputParams) {
					OutStrm	<< Form("%-20s", "undef");
				}
				OutStrm	<< Form("%5s%s", "", pCmt.Data()) << endl;
			}
		}
		key = fDGFData->NextParam(key);
	}

	if (found) {
		OutStrm	<< "-------------------------------------------------------------------------------------------" << endl;
		return(kTRUE);
	} else {
		gMrbLog->Err() << "No param found matching \"" << ParamName << "\"" << endl;
		gMrbLog->Flush(this->ClassName(), "PrintParams");
		return(kFALSE);
	}
}

Bool_t TMrbDGF::PrintParams(ostream & OutStrm, Int_t Channel) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::PrintParams
// Purpose:        Print param(s)
// Arguments:      ostream & OutStrm       -- output stream
//                 Int_t Channel           -- channel
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    Outputs param data for a given channel.
//                 Channel = -1 --> output module params.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	if (!fDGFData->ParamNamesRead()) {
		gMrbLog->Err() << "No param names read" << endl;
		gMrbLog->Flush(this->ClassName(), "PrintParams");
		return(kFALSE);
	}

	TString title;
	Int_t from, to;
	if (Channel == -1) { 			// output module params only (0 .. 63)
		from = 0;
		to = from + TMrbDGFData::kNofDSPInparModule - 1;
		title = "Common input params";
	} else if (Channel < TMrbDGFData::kNofChannels) {		// output params for a given channel
		from = TMrbDGFData::kNofDSPInparModule + Channel * TMrbDGFData::kNofDSPInparChannel;
		to = from + TMrbDGFData::kNofDSPInparChannel - 1;
		title = "Input params for channel ";
		title += Channel;
	} else {
		gMrbLog->Err() << "Illegal channel number - " << Channel << endl;
		gMrbLog->Flush(this->ClassName(), "PrintParams");
		return(kFALSE);
	}

	TMrbNamedX * key = fDGFData->FirstParam();
	Bool_t found = kFALSE;
	while (key) {
		Int_t pOffset = key->GetIndex();
		if (pOffset >= 0 && pOffset >= from && pOffset <= to) {
			if (!found) {
				OutStrm	<< "===========================================================================================" << endl
						<< " DGF-4C Param Section: Module " << this->GetTitle()
						<< " - " << title << endl
						<< "..........................................................................................." << endl;
				OutStrm << Form("%-15s%-10s%10s%10s%10s%5s%s", "ParamName", "Type", "Offset", "(dec)", "(hex)", "", "Comment") << endl;
				OutStrm	<< "..........................................................................................." << endl;
			}
			found = kTRUE;
			TString pName = key->GetName();
			TString pCmt = key->GetTitle();
			if (pCmt.Length() > 0) pCmt = Form("[%s]", pCmt.Data());
			TString synNames;
			pCmt += this->GetSynonyms(synNames, key);
			OutStrm << Form("%-15s%-10s%10d", pName.Data(), "Input", pOffset);
			if (this->ParamValuesRead()) {
				OutStrm	<< Form("%10d%#10x", (UShort_t) fParams[pOffset], (UShort_t) fParams[pOffset]);
			} else {
				OutStrm	<< Form("%-20s", "undef");
			}
			OutStrm	<< Form("%5s%s", "", pCmt.Data()) << endl;
		}
		key = fDGFData->NextParam(key);
	}

	OutStrm	<< "-------------------------------------------------------------------------------------------" << endl;
	return(kTRUE);
}

Bool_t TMrbDGF::PrintStatus(ostream & OutStrm, Int_t Channel) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::PrintStatus
// Purpose:        Print status info
// Arguments:      ostream & OutStrm       -- output stream
//                 Int_t Channel           -- channel number
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    Outputs register contents for a given channel.
//                 Channel = -1 --> output module regs.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	UInt_t reg;
	TMrbNamedX * pKey;

	if (!this->CheckConnect("PrintStatus")) return(kFALSE);

	if (Channel == -1) {
		cout	<< "===========================================================================================" << endl
				<< " DGF-4C Status: " << this->GetTitle() << endl
				<< "..........................................................................................." << endl;
		reg = this->ReadICSR();
		cout	<< " CAMAC Control & Status (System, F1.A9), data=0x" << setbase(16) << reg << setbase(10) << endl
				<< "..........................................................................................." << endl;
		fDGFData->fLofCamacICSRBits.Print(cout, "      ", reg);
	
		reg = this->ReadCSR();
		cout	<< " CAMAC Control & Status (F1.A0), data=0x" << setbase(16) << reg << setbase(10) << endl
				<< "..........................................................................................." << endl;
		fDGFData->fLofCamacCSRBits.Print(cout, "      ", reg);
	
		if (!fDGFData->ParamNamesRead()) {
			gMrbLog->Err() << "No param names read" << endl;
			gMrbLog->Flush(this->ClassName(), "PrintStatus");
			cout	<< "-------------------------------------------------------------------------------------------" << endl;
			return(kFALSE);
		}
		if (!this->ParamValuesRead()) {
			gMrbLog->Err() << "No param values read" << endl;
			gMrbLog->Flush(this->ClassName(), "PrintStatus");
			cout	<< "-------------------------------------------------------------------------------------------" << endl;
			return(kFALSE);
		}
		reg = this->GetParValue("RUNTASK");
		pKey = fDGFData->fLofRunTasks.FindByIndex(reg);
		cout	<< "..........................................................................................." << endl
				<< " Param RUNTASK (Offset=" << fDGFData->FindParam("RUNTASK")->GetIndex()
				<< "), data=0x" << setbase(16) << reg << setbase(10) << endl
				<< "..........................................................................................." << endl;
		if (pKey != NULL) {
			cout	<< "      " << pKey->GetName() << " (" << reg << ")" << endl;
		} else {
			cout	<< "      Illegal Value (" << reg << ")" << endl;
		}

		reg = this->GetParValue("CONTROLTASK");
		pKey = fDGFData->fLofControlTasks.FindByIndex(reg);
		cout	<< "..........................................................................................." << endl
				<< " Param CONTROLTASK (Offset=" << fDGFData->FindParam("CONTROLTASK")->GetIndex()
				<< "), data=0x" << setbase(16) << reg << setbase(10) << endl
				<< "..........................................................................................." << endl;
		if (pKey != NULL) {
			cout	<< "      " << pKey->GetName() << " (" << reg << ")" << endl;
		} else {
			cout	<< "      Illegal Value (" << reg << ")" << endl;
		}

		cout	<< "-------------------------------------------------------------------------------------------" << endl;
		return(kTRUE);
	} else if (Channel >= 0 && Channel < TMrbDGFData::kNofChannels) {
		if (!fDGFData->ParamNamesRead()) {
			gMrbLog->Err() << "No param names read" << endl;
			gMrbLog->Flush(this->ClassName(), "PrintStatus");
			return(kFALSE);
		}
		if (!this->ParamValuesRead()) {
			gMrbLog->Err() << "No param values read" << endl;
			gMrbLog->Flush(this->ClassName(), "PrintStatus");
			return(kFALSE);
		}
		reg = this->GetParValue(Channel, "CHANCSRA");
		cout	<< "===========================================================================================" << endl
				<< " DGF-4C Status: " << this->GetTitle() << endl
				<< "..........................................................................................." << endl;
		cout	<< " Channel " << Channel << " Control & Status Reg, Param CHANCSRA" << Channel
				<< " (Offset=" << fDGFData->FindParam(Channel, "CHANCSRA")->GetIndex()
				<< "), data=0x" << setbase(16) << reg << setbase(10) << endl
				<< "..........................................................................................." << endl;
		fDGFData->fLofChanCSRABits.Print(cout, "      ", reg);
		cout	<< "-------------------------------------------------------------------------------------------" << endl;
		return(kTRUE);
	} else {
		gMrbLog->Err() << "Illegal channel number - " << Channel << endl;
		gMrbLog->Flush(this->ClassName(), "PrintStatus");
		return(kFALSE);
	}
}

Int_t TMrbDGF::LoadParams(const Char_t * ParamFile, const Char_t * AltParamFile, Bool_t UpdateDSP) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::LoadParams
// Purpose:        Read param values from file
// Arguments:      Char_t * ParamFile     -- file name
//                 Char_t * AltParamFile  -- alternative file name
//                 Bool_t UpdateDSP       -- kTRUE if DSP is to be updated
// Results:        Int_t NofParams        -- number of params read
// Exceptions:
// Description:    Reads a set param values from file.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	Int_t pOffset;
	Int_t pValue;
	TString pName;
	TMrbNamedX * pKey;
	ifstream pf;
	Int_t nofParams;
	TString paramFile;
	TString pLine;
	TObjArray * pFields;
	TString pStr;
	Int_t line;
	Int_t nFields;
	TMrbSystem uxSys;
		
	if (!fDGFData->ParamNamesRead()) {
		gMrbLog->Err() << "No param names read" << endl;
		gMrbLog->Flush(this->ClassName(), "LoadParams");
		return(-1);
	}

	if (gSystem->AccessPathName(ParamFile, kFileExists) == 0) {
		paramFile = ParamFile;
	} else if (*AltParamFile != '\0' && gSystem->AccessPathName(AltParamFile, kFileExists) == 0) {
		paramFile = AltParamFile;
	} else {
			gMrbLog->Err() << "Param file not found - " << ParamFile << endl;
			gMrbLog->Flush(this->ClassName(), "LoadParams");
			if (*AltParamFile != '\0') {
				gMrbLog->Err() << "Alternative param file not found - " << AltParamFile << endl;
				gMrbLog->Flush(this->ClassName(), "LoadParams");
			}
			return(-1);
	}

	if (uxSys.CheckExtension(paramFile.Data(), ".par")) {
		pf.open(paramFile, ios::in);
		if (!pf.good()) {
			gMrbLog->Err() << gSystem->GetError() << " - " << paramFile << endl;
			gMrbLog->Flush(this->ClassName(), "LoadParams");
			return(-1);
		}

		line = 0;
		nofParams = 0;
		for (;;) {
			pLine.ReadLine(pf, kFALSE);
			line++;
			if (pf.eof()) break;
			pLine = pLine.Strip(TString::kBoth);
			if (pLine.Length() == 0) continue;						// empty line
			if (pLine(0) == '#') continue;							// comment
			pLine = pLine.Strip(TString::kBoth);
			pFields = pLine.Tokenize(":");
			nFields = pFields->GetEntries();
			if (nFields < 3) {
				gMrbLog->Err() << paramFile << " (line " << line << "): Wrong number of fields - " << nFields << endl;
				gMrbLog->Flush(this->ClassName(), "LoadParams");
				delete pFields;
				continue;
			}
			pName = ((TObjString *) pFields->At(0))->GetString();
			pKey = fDGFData->FindParam(pName.Data());
			if (pKey == NULL) {
				gMrbLog->Err() << paramFile << " (line " << line << "): No such param - " << pName << endl;
				gMrbLog->Flush(this->ClassName(), "LoadParams");
				delete pFields;
				continue;
			} else {
				nofParams++;
				pStr = ((TObjString *) pFields->At(1))->GetString();
				pOffset = pStr.Atoi();
				pStr = ((TObjString *) pFields->At(2))->GetString();
				pValue = pStr.Atoi();
				fParams[pOffset] = pValue;
			}
			delete pFields;
		}
		pf.close();
	} else if (uxSys.CheckExtension(paramFile.Data(), ".pdmp")) {
		pf.open(paramFile, ios::in);
		if (!pf.good()) {
			gMrbLog->Err() << gSystem->GetError() << " - " << paramFile << endl;
			gMrbLog->Flush(this->ClassName(), "LoadParams");
			return(-1);
		}

		line = 0;
		nofParams = 0;
		for (;;) {
			pLine.ReadLine(pf, kFALSE);
			if (pf.eof()) break;
			pLine = pLine.Strip(TString::kBoth);
			if (pLine.Length() == 0) continue;						// empty line
			if (pLine(0) == '#') continue;							// comment
			nofParams++;
			pStr = pLine;
			pValue = pStr.Atoi();			
			fParams[line] = pValue;
			line++;
		}
		pf.close();
	} else {
		gMrbLog->Err() << "Wrong file extension - " << paramFile << " (should be .par or .pdmp)" << endl;
		gMrbLog->Flush(this->ClassName(), "LoadParams");
		return(-1);
	}

	fStatusM |= TMrbDGF::kParamValuesRead;

	if (UpdateDSP && !this->IsOffline()) {
		if (!this->CheckConnect("LoadParams")) return(-1);
		this->WriteParamMemory();
	}

	if (gMrbDGFData->fVerboseMode) {
		gMrbLog->Out() << nofParams << " params read from " << paramFile << endl;
		gMrbLog->Flush(this->ClassName(), "LoadParams", setblue);
	}

	return(nofParams);
}

Int_t TMrbDGF::LoadParamsToEnv(TEnv * Env, const Char_t * ParamFile, const Char_t * AltParamFile) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::LoadParamsToEnv
// Purpose:        Read param values to ROOT environment
// Arguments:      TEnv * Env             -- environment to store params
//                 Char_t * ParamFile     -- file name
//                 Char_t * AltParamFile  -- alternate file name
// Results:        Int_t NofParams      -- number of params read
// Exceptions:
// Description:    Reads a set param values from file and stores them into
//                 ROOT environment.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	TString pName;
	TMrbNamedX * pKey;
	ifstream pf;
	Int_t nofParams;
	TString paramFile;
	TString pLine;
	TObjArray * pFields;
	TString pStr;
	Int_t line;
	Int_t nFields;
	TMrbSystem uxSys;

	if (!fDGFData->ParamNamesRead()) {
		gMrbLog->Err() << "No param names read" << endl;
		gMrbLog->Flush(this->ClassName(), "LoadParamsToEnv");
		return(0);
	}

	if (gSystem->AccessPathName(ParamFile, kFileExists) == 0) {
		paramFile = ParamFile;
	} else if (*AltParamFile != '\0' && gSystem->AccessPathName(AltParamFile, kFileExists) == 0) {
		paramFile = AltParamFile;
	} else {
			gMrbLog->Err() << "Param file not found - " << ParamFile << endl;
			gMrbLog->Flush(this->ClassName(), "LoadParamsToEnv");
			if (*AltParamFile != '\0') {
				gMrbLog->Err() << "Alternative param file not found - " << AltParamFile << endl;
				gMrbLog->Flush(this->ClassName(), "LoadParamsToEnv");
			}
			return(-1);
	}

	if (uxSys.CheckExtension(paramFile.Data(), ".par")) {
		pf.open(paramFile, ios::in);
		if (!pf.good()) {
			gMrbLog->Err() << gSystem->GetError() << " - " << paramFile << endl;
			gMrbLog->Flush(this->ClassName(), "LoadParamsToEnv");
			return(0);
		}

		line = 0;
		nofParams = 0;
		for (;;) {
			pLine.ReadLine(pf, kFALSE);
			line++;
			if (pf.eof()) break;
			pLine = pLine.Strip(TString::kBoth);
			if (pLine.Length() == 0) continue;						// empty line: ignore
			if (pLine(0) == '#' && pLine(1) != '+') continue;		// comment (#): ignore
			Int_t ncmt = pLine.Index("#", 0);
			if (ncmt > 0) pLine.Resize(ncmt);
			pLine = pLine.Strip(TString::kBoth);
			pFields = pLine.Tokenize(":");
			nFields = pFields->GetEntries();
			pName = ((TObjString *) pFields->At(0))->GetString();
			if (pName(0) == '#') {									// special entry (#+): strip off leading chars
				if (nFields != 2) {
					gMrbLog->Err() << paramFile << " (line " << line << "): Wrong number of fields - " << nFields << endl;
					gMrbLog->Flush(this->ClassName(), "LoadParamsToEnv");
					delete pFields;
					continue;
				}
				pStr = pName(2, pName.Length() - 2);
				pStr = pStr.Strip(TString::kBoth);
				pStr += "=";
				pStr += ((TObjString *) pFields->At(1))->GetString();
			} else {
				if (nFields < 3) {
					gMrbLog->Err() << paramFile << " (line " << line << "): Wrong number of fields - " << nFields << endl;
					gMrbLog->Flush(this->ClassName(), "LoadParamsToEnv");
					delete pFields;
					continue;
				}
				pKey = fDGFData->FindParam(pName.Data());
				if (pKey == NULL) {
					gMrbLog->Err() << paramFile << " (line " << line << "): No such param - " << pName << endl;
					gMrbLog->Flush(this->ClassName(), "LoadParamsToEnv");
					delete pFields;
					continue;
				}
				nofParams++;
				pStr = ((TObjString *) pFields->At(0))->GetString();
				pStr += "=";
				pStr += ((TObjString *) pFields->At(2))->GetString();
			}
			Env->SetValue(pStr.Data(), kEnvUser);
			delete pFields;
		}
		pf.close();
	} else {
		gMrbLog->Err() << "Wrong file extension - " << paramFile << " (should be .par)" << endl;
		gMrbLog->Flush(this->ClassName(), "LoadParamsToEnv");
		return(0);
	}

	if (gMrbDGFData->fVerboseMode) {
		gMrbLog->Out() << nofParams << " params loaded from " << paramFile << endl;
		gMrbLog->Flush(this->ClassName(), "LoadParamsToEnv", setblue);
	}

	return(nofParams);
}

Int_t TMrbDGF::SaveParams(const Char_t * ParamFile, Bool_t ReadFromDSP) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::SaveParams
// Purpose:        Save params to file
// Arguments:      Char_t * ParamFile   -- file name
//                 Bool_t ReadFromDSP   -- kTRUE if params to be read from DSP
// Results:        Int_t NofParams      -- number of params written
// Exceptions:
// Description:    Saves params to file (input params only).
//                 Format is "unix style":
//                       <name>:<offset>:<value>:<hexval>:<comment>
//                 Additional entries may be used to identify the module:
//                       FileType:par
//                       Module:<name>
//                       Revision:<rev>
//                       Crate:<crate>
//                       Station:<station>
//                       Cluster:<id>
//                       XiaRelease:<release>
//                       XiaDate:<date>
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	if (!fDGFData->ParamNamesRead()) {
		gMrbLog->Err() << "No param names read" << endl;
		gMrbLog->Flush(this->ClassName(), "SaveParams");
		return(-1);
	}

	if (ReadFromDSP && !this->IsOffline()) {
		if (!this->CheckConnect("SaveParams")) return(-1);
		this->ReadParamMemory(kTRUE, kTRUE);
	}

	if (!this->ParamValuesRead()) {
		gMrbLog->Err() << "No param values read" << endl;
		gMrbLog->Flush(this->ClassName(), "SaveParams");
		return(-1);
	}

	TString paramFile = ParamFile;
	if (paramFile.Index("/") != 0 && paramFile.Index("./", 0) != 0) {
		TString paramPath = gEnv->GetValue("TMrbDGF.SettingsPath", ".");
		paramFile = paramPath + "/";
		paramFile += ParamFile;
	}
	Int_t nofParams = 0;
	if (paramFile.Index(".par") > 0) {			// write ascii data
		ofstream pf(paramFile, ios::out);
		if (!pf.good()) {
			gMrbLog->Err() << gSystem->GetError() << " - " << paramFile << endl;
			gMrbLog->Flush(this->ClassName(), "SaveParams");
			return(-1);
		}

		pf << "#----------------------------------------------------------------------------------------" << endl;
		pf << "# Name          : "								<< paramFile << endl;
		pf << "# Contents      : Settings for DGF-4C "			<< this->GetName()
																<< " in C" << this->GetCrate()
																<< ".N" << this->GetStation() << endl;
		TDatime dt;
		pf << "# Creation date : " 								<< dt.AsString() << endl;
		pf << "# Created by    : " 								<< gSystem->Getenv("USER") << endl;
		pf << "#" << endl;
		pf << "# Data format   : <name>:<offset>:<value>:<hexval> # <comment>" << endl;
		pf << "#----------------------------------------------------------------------------------------" << endl;
		pf << "#+FileType:par" << endl;
		pf << "#+Module:"										<< this->GetName() << endl;
		pf << "#+Revision:" 									<< this->GetRevision()->GetName() << endl;
		pf << "#+Crate:"										<< this->GetCrate() << endl;
		pf << "#+Station:" 										<< this->GetStation() << endl;
		TMrbString info;
		pf << "#+Cluster:"										<< this->GetClusterInfo(info) << endl;
		pf << "#+XiaRelease:"									<< gEnv->GetValue("TMrbDGF.XiaRelease", "") << endl;
		pf << "#+XiaDate:" 										<< gEnv->GetValue("TMrbDGF.XiaDate", "") << endl;
		pf << "#........................................................................................" << endl;
		pf << endl;
		TMrbNamedX * pKey = fDGFData->FirstParam();
		while (pKey != NULL) {
			Int_t pOffset = pKey->GetIndex();
			if (pOffset >= 0) { 				// skip shadow params
				if (pOffset < TMrbDGFData::kNofDSPInputParams) {
					TString pCmt = pKey->GetTitle();
					if (pCmt.Length() > 0) pCmt = Form("[%s]", pCmt.Data());
					TMrbNamedX * shadow = (TMrbNamedX *) pKey->GetAssignedObject();
					while (shadow) {
						pCmt += " =";
						pCmt += shadow->GetName();
						shadow = (TMrbNamedX *) shadow->GetAssignedObject();
					}
					Int_t pValue = fParams[pOffset];
					pf	<< pKey->GetName()
						<< ":" << pOffset
						<< ":" << pValue << ":0x" << setbase(16) << pValue << setbase(10);
					if (pCmt.Length() > 0) pf << " # " << pCmt;
					pf << endl;
					nofParams++;
				}
			}
			pKey = fDGFData->NextParam(pKey);
		}
		pf.close();
	} else {
		gMrbLog->Err() << "Wrong file extension - " << paramFile << " (should be .par)" << endl;
		gMrbLog->Flush(this->ClassName(), "SaveParams");
		return(-1);
	}

	if (gMrbDGFData->fVerboseMode) {
		gMrbLog->Out() << nofParams << " params written to " << paramFile << endl;
		gMrbLog->Flush(this->ClassName(), "SaveParams", setblue);
	}

	return(nofParams);
}

Int_t TMrbDGF::LoadPsaParams(const Char_t * ParamFile, const Char_t * AltParamFile, Bool_t UpdateDSP) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::LoadPsaParams
// Purpose:        Read PSA params from file
// Arguments:      Char_t * ParamFile    -- file name
//                 Char_t * AltParamFile -- alternative param file
//                 Bool_t UpdateDSP      -- kTRUE if DSP is to be updated
// Results:        Int_t NofParams       -- number of params read
// Exceptions:
// Description:    Reads a set PSA values from file.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	Int_t pOffset;
	Int_t pValue;
	TString pName;
	TMrbNamedX * pKey;
	ifstream pf;
	Int_t nofParams;
	TString paramFile;
	TString pLine;
	TObjArray * pFields;
	TMrbString pStr;
	Int_t line;
	Int_t nFields;
	TMrbSystem uxSys;
		
	Int_t psaVal[16];

	if (!fDGFData->ParamNamesRead()) {
		gMrbLog->Err() << "No param names read" << endl;
		gMrbLog->Flush(this->ClassName(), "LoadPsaParams");
		return(-1);
	}

	paramFile = ParamFile;
	if (uxSys.CheckExtension(paramFile.Data(), ".psa")) {
		pf.open(paramFile, ios::in);
		if (!pf.good()) {
			if (*AltParamFile != '\0') {
				paramFile = AltParamFile;
				pf.open(paramFile, ios::in);
				if (!pf.good()) return(-1); 	// give up if none of these files exist
			} else {
				return(-1);
			}
		}
		line = 0;
		nofParams = 0;
		Int_t pOffset0 = -1;
		while (nofParams < 16) {
			pLine.ReadLine(pf, kFALSE);
			line++;
			if (pf.eof()) break;
			pLine = pLine.Strip(TString::kBoth);
			if (pLine.Length() == 0) continue;						// empty line
			if (pLine(0) == '#') continue;							// comment
			Int_t ncmt = pLine.Index("#", 0);
			if (ncmt > 0) pLine.Resize(ncmt);
			pLine = pLine.Strip(TString::kBoth);
			pFields = pLine.Tokenize(":");
			nFields = pFields->GetEntries();
			if (nFields < 3) {
				gMrbLog->Err() << paramFile << " (line " << line << "): Wrong number of fields - " << nFields << endl;
				gMrbLog->Flush(this->ClassName(), "LoadPsaParams");
				delete pFields;
				continue;
			}
			pName = ((TObjString *) pFields->At(0))->GetString();
			pKey = fDGFData->FindParam(pName.Data());
			pStr = ((TObjString *) pFields->At(1))->GetString();
			pOffset = pStr.Atoi();
			if (pOffset0 == -1) pOffset0 = pOffset;
			if (pKey == NULL) {
				gMrbLog->Wrn()	<< paramFile << " (line " << line << "): No such PSA name - " << pName
								<< ", using param index = " << pOffset << " instead" << endl;
				gMrbLog->Flush(this->ClassName(), "LoadPsaParams");
			}
			if (pOffset - pOffset0 > 16) {
				gMrbLog->Err() << paramFile << " (line " << line << "): [" << pName << "] PSA offset > 16" << endl;
				gMrbLog->Flush(this->ClassName(), "LoadPsaParams");
				delete pFields;
				continue;
			}
			pStr = ((TObjString *) pFields->At(2))->GetString();
			pValue = pStr.Atoi();			
			psaVal[pOffset - pOffset0] = pValue;
			nofParams++;
			delete pFields;
		}
		pf.close();
	} else if (uxSys.CheckExtension(paramFile.Data(), ".psadmp")) {
		pf.open(paramFile, ios::in);
		if (!pf.good()) {
			gMrbLog->Err() << gSystem->GetError() << " - " << paramFile << endl;
			gMrbLog->Flush(this->ClassName(), "LoadPsaParams");
			return(-1);
		}

		line = 0;
		nofParams = 0;
		while (nofParams < 16) {
			pLine.ReadLine(pf, kFALSE);
			line++;
			if (pf.eof()) break;
			pLine = pLine.Strip(TString::kBoth);
			if (pLine.Length() == 0) continue;						// empty line
			if (pLine(0) == '#') continue;							// comment
			Int_t ncmt = pLine.Index("#", 0);
			if (ncmt > 0) pLine.Resize(ncmt);
			pLine = pLine.Strip(TString::kBoth);
			pStr = pLine;
			pStr.ToInteger(pValue);				
			psaVal[nofParams] = pValue;
			nofParams++;
		}
		pf.close();
	} else {
		gMrbLog->Err() << "Wrong file extension - " << paramFile << " (should be .psa or .psadmp)" << endl;
		gMrbLog->Flush(this->ClassName(), "LoadPsaParams");
		return(-1);
	}

	if (UpdateDSP && !this->IsOffline()) {
		if (!this->CheckConnect("LoadPsaParams")) return(-1);
		pKey = fDGFData->FindParam("USERPSADATA");
		if (pKey == NULL) {
			gMrbLog->Err() << "No such param - USERPSADATA" << endl;
			gMrbLog->Flush(this->ClassName(), "LoadPsaParams");
			return(-1);
		}
		pOffset = pKey->GetIndex();
		if (pOffset < 0) pOffset = -pOffset;		// param "USERPSADATA" is shadowed normally
		for (Int_t i = 0; i < nofParams; i++) {
			this->SetParValue(pOffset + i, psaVal[i]);
		}
	}

	if (gMrbDGFData->fVerboseMode) {
		gMrbLog->Out() << nofParams << " PSA params read from " << paramFile << endl;
		gMrbLog->Flush(this->ClassName(), "LoadPsaParams", setblue);
	}

	return(nofParams);
}

Int_t TMrbDGF::SaveValues(const Char_t * ValueFile, Bool_t ReadFromDSP) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::SaveValues
// Purpose:        Save high-level values to file
// Arguments:      Char_t * ParamFile   -- file name
//                 Bool_t ReadFromDSP   -- kTRUE if params to be read from DSP
// Results:        Int_t NofValues      -- number of values written
// Exceptions:
// Description:    Saves high-level values to file.
//                 Format is "unix style":
//                       <name>:<chn>:<value>:<unit>
//                 Additional entries may be used to identify the module:
//                       FileType:val
//                       Module:<name>
//                       Revision:<rev>
//                       Crate:<crate>
//                       Station:<station>
//                       Cluster:<id>
//                       XiaRelease:<release>
//                       XiaDate:<date>
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	TString pName;
	ofstream vf;
	Int_t nofValues;
	TString valueFile;
	TString valuePath;
	TDatime dt;
	TString strVal;
	TMrbString info;
	
	if (!fDGFData->ParamNamesRead()) {
		gMrbLog->Err() << "No param names read" << endl;
		gMrbLog->Flush(this->ClassName(), "SaveValues");
		return(-1);
	}

	if (ReadFromDSP && !this->IsOffline()) {
		if (!this->CheckConnect("SaveValues")) return(-1);
		this->ReadParamMemory(kTRUE, kTRUE);
	}

	if (!this->ParamValuesRead()) {
		gMrbLog->Err() << "No param values read" << endl;
		gMrbLog->Flush(this->ClassName(), "SaveValues");
		return(-1);
	}

	valueFile = ValueFile;
	if (valueFile.Index("/") != 0 && valueFile.Index("./", 0) != 0) {
		valuePath = gEnv->GetValue("TMrbDGF.SettingsPath", ".");
		valueFile = valuePath + "/";
		valueFile += ValueFile;
	}
	if (valueFile.Index(".val") > 0) {			// write ascii data
		vf.open(valueFile, ios::out);
		if (!vf.good()) {
			gMrbLog->Err() << gSystem->GetError() << " - " << valueFile << endl;
			gMrbLog->Flush(this->ClassName(), "SaveParams");
			return(-1);
		}

		vf << "#----------------------------------------------------------------------------------------" << endl;
		vf << "# Name          : "								<< valueFile << endl;
		vf << "# Contents      : Settings for DGF-4C "			<< this->GetName()
																<< " in C" << this->GetCrate()
																<< ".N" << this->GetStation() << endl;
		vf << "# Creation date : " 								<< dt.AsString() << endl;
		vf << "# Created by    : " 								<< gSystem->Getenv("USER") << endl;
		vf << "#" << endl;
		vf << "# Data format   : <name>:<chn>:<value>:<unit>" << endl;
		vf << "#----------------------------------------------------------------------------------------" << endl;
		vf << "#+FileType:val" << endl;
		vf << "#+Module:"										<< this->GetName() << endl;
		vf << "#+Revision:"										<< this->GetRevision()->GetName() << endl;
		vf << "#+Crate:"										<< this->GetCrate() << endl;
		vf << "#+Station:" 										<< this->GetStation() << endl;
		vf << "#+Cluster:"										<< this->GetClusterInfo(info) << endl;
		vf << "#+XiaRelease:"									<< gEnv->GetValue("TMrbDGF.XiaRelease", "") << endl;
		vf << "#+XiaDate:" 										<< gEnv->GetValue("TMrbDGF.XiaDate", "") << endl;
		vf << "#........................................................................................" << endl;
		nofValues = 0;
		for (Int_t chn = 0; chn < TMrbDGFData::kNofChannels; chn++) {
			vf << endl;
			vf << "# Channel " << chn << ": ............................................................................" << endl;
			vf << "Polarity:"		<< chn << ":"		<< this->GetTriggerPolarity(chn)			<< endl;	nofValues++;
			vf << "Tau:"			<< chn << ":"		<< this->GetTau(chn)			<< ":us"	<< endl;	nofValues++;
			vf << "Gain:"			<< chn << ":"		<< this->GetGain(chn)						<< endl;	nofValues++;
			vf << "Offset:"			<< chn << ":"		<< this->GetOffset(chn) 		<< ":V" 	<< endl;	nofValues++;
			vf << "SlowPeak:"		<< chn << ":"		<< this->GetPeakTime(chn)		<< ":us"	<< endl;	nofValues++;
			vf << "SlowGap:"		<< chn << ":"		<< this->GetGapTime(chn)		<< ":us"	<< endl;	nofValues++;
			vf << "FastPeak:"		<< chn << ":"		<< this->GetFastPeakTime(chn)	<< ":us"	<< endl;	nofValues++;
			vf << "FastGap:"		<< chn << ":"		<< this->GetFastGapTime(chn)	<< ":us"	<< endl;	nofValues++;
			vf << "Threshold:"		<< chn << ":"		<< this->GetThreshold(chn)					<< endl;	nofValues++;
			vf << "Delay:"			<< chn << ":"		<< this->GetDelay(chn)			<< ":us"	<< endl;	nofValues++;
		}
		vf.close();
	} else {
		gMrbLog->Err() << "Wrong file extension - " << valueFile << " (should be .val)" << endl;
		gMrbLog->Flush(this->ClassName(), "SaveParams");
		return(-1);
	}

	if (gMrbDGFData->fVerboseMode) {
		gMrbLog->Out() << nofValues << " values written to " << valueFile << endl;
		gMrbLog->Flush(this->ClassName(), "SaveValues", setblue);
	}

	return(nofValues);
}

Bool_t TMrbDGF::SaveParams(TArrayS & TempStorage) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::SaveParams
// Purpose:        Save (input) params temporarily
// Arguments:      TArrayS & TempStorage    -- where to store param values
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    Save params from DSP to internal storage.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	Int_t nofParams;
	Int_t startAddr;
	TArrayI cData;

	if (!this->CheckConnect("SaveParams")) return(kFALSE);
	if (!this->CheckActive("SaveParams")) return(kFALSE);
	if (!fDGFData->ParamNamesRead()) return(kFALSE);
	if (this->IsOffline()) return(kTRUE);

	nofParams = TMrbDGFData::kNofDSPInputParams;				 	// size of input section
	startAddr = TMrbDGFData::kDSPInparStartAddr;
		
	this->WriteTSAR(startAddr); 									// where to read from
	cData.Set(nofParams + 1);										// save params + switchbus

	if (fCamac.BlockXfer(fCrate, fStation, A(0), F(0), cData, 0, nofParams, kTRUE) == -1) {	// start block xfer, 16 bit
		gMrbLog->Err()	<< fName << " in C" << fCrate << ".N" << fStation
						<< ".A0.F0 failed - DSPAddr=0x" << setbase(16) << TMrbDGFData::kDSPInparStartAddr
						<< setbase(10) << ", wc=" << nofParams << endl;
		gMrbLog->Flush(this->ClassName(), "SaveParams");
		return(kFALSE);
	}

	cData[nofParams] = this->GetSwitchBus();						// save switchbus separately

	this->CopyData(TempStorage, cData.GetArray(), nofParams + 1);
	return(kTRUE);
}

Bool_t TMrbDGF::SaveParams(EMrbDGFSaveIdx SaveIdx) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::SaveParams
// Purpose:        Save (input) params temporarily
// Arguments:      EMrbDGFSaveIdx SaveIdx    -- where to store param values
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    Save params from DSP to internal storage.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	switch (SaveIdx) {
		case kSaveTrace:			return(this->SaveParams(fTmpParTrace));
		case kSaveUntrigTrace:	return(this->SaveParams(fTmpParUntrigTrace));
		case kSaveDacRamp:		return(this->SaveParams(fTmpParDacRamp));
		case kSaveTaufit:			return(this->SaveParams(fTmpParTaufit));
		case kSaveAccuHist:		return(this->SaveParams(fTmpParAccuHist));
	}
	return(kFALSE);
}

Bool_t TMrbDGF::RestoreParams(TArrayS & TempStorage) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::RestoreParams
// Purpose:        Restore (input) params to DSP
// Arguments:      TArrayS & TempStorage    -- where to get param values from
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    Restores DSP from temp storage.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	Int_t nofParams;
	TArrayI cData;

	if (!this->CheckConnect("WriteParamMemory")) return(kFALSE);
	if (!this->CheckActive("WriteParamMemory")) return(kFALSE);
	if (!this->ParamValuesRead()) return(kFALSE);
	if (this->IsOffline()) return(kTRUE);

	this->WriteTSAR(TMrbDGFData::kDSPInparStartAddr);				// where to write to
	nofParams = TMrbDGFData::kNofDSPInputParams;					// size of params section (input only)
	this->CopyData(cData, TempStorage.GetArray(), nofParams + 1);	// params + switchbus

	if (fCamac.BlockXfer(fCrate, fStation, A(0), F(16), cData, 0, nofParams, kTRUE) == -1) {	// start block xfer, 16 bit
		gMrbLog->Err()	<< fName << " in C" << fCrate << ".N" << fStation
						<< ".A0.F16 failed - DSPAddr=0x" << setbase(16) << TMrbDGFData::kDSPInparStartAddr
						<< setbase(10) << ", wc=" << nofParams << endl;
		gMrbLog->Flush(this->ClassName(), "WriteParamMemory");
		return(kFALSE);
	}
	this->SetSwitchBus(cData[nofParams], TMrbDGF::kBitSet);			// restore switchbus separately
	return(kTRUE);
}

Bool_t TMrbDGF::RestoreParams(EMrbDGFSaveIdx SaveIdx) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::RestoreParams
// Purpose:        Restore (input) params to DSP
// Arguments:      EMrbDGFSaveIdx SaveIdx    -- where to restore params from
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    Restores DSP from temp storage.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	switch (SaveIdx) {
		case kSaveTrace:			return(this->RestoreParams(fTmpParTrace));
		case kSaveUntrigTrace:	return(this->RestoreParams(fTmpParUntrigTrace));
		case kSaveDacRamp:		return(this->RestoreParams(fTmpParDacRamp));
		case kSaveTaufit:			return(this->RestoreParams(fTmpParTaufit));
		case kSaveAccuHist:		return(this->RestoreParams(fTmpParAccuHist));
	}
	return(kFALSE);
}

//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::WriteICSR
//                 TMrbDGF::ReadICSR
//                 TMrbDGF::WriteCSR
//                 TMrbDGF::ReadCSR
//                 TMrbDGF::WriteTSAR
//                 TMrbDGF::ReadTSAR
//                 TMrbDGF::WriteWCR
//                 TMrbDGF::ReadWCR
// Purpose:        Camac I/O from/to DGF regs
// Arguments:      UInt_t Data   -- data to be written to DGF reg
// Results:        UInt_t Data   -- data read from DGF reg
// Exceptions:
// Description:    Performs i/o from/to dgf regs.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

Bool_t TMrbDGF::WriteICSR(UInt_t Data) {
// Write DGF Control Status Reg
	if (this->IsOffline()) return(kTRUE);
	Int_t cVal = (Int_t) Data;
	if (!fCamac.ExecCnaf(fCrate, fStation, A(8), F(17), cVal, kTRUE)) {
		gMrbLog->Err()	<< fName << " in C" << fCrate << ".N" << fStation << ".A8.F17 failed" << endl;
		gMrbLog->Flush(this->ClassName(), "WriteICSR");
		return(kFALSE);
	}
	return(kTRUE);
}

UInt_t TMrbDGF::ReadICSR() {
// Read DGF Control Status Reg
	if (this->IsOffline()) return(0);
	Int_t cVal;
	if (!fCamac.ExecCnaf(fCrate, fStation, A(8), F(1), cVal, kTRUE)) {
		gMrbLog->Err()	<< fName << " in C" << fCrate << ".N" << fStation << ".A8.F1 failed" << endl;
		gMrbLog->Flush(this->ClassName(), "ReadICSR");
		return(0xffffffff);
	}
	return((UInt_t) cVal & TMrbDGFData::kCamacICSRMask);
}

Bool_t TMrbDGF::WriteCSR(UInt_t Data) {
// Write DGF Control Status Reg
	if (this->IsOffline()) return(kTRUE);
	Int_t cVal = (Int_t) Data;
	if (!fCamac.ExecCnaf(fCrate, fStation, A(0), F(17), cVal, kTRUE)) {
		gMrbLog->Err()	<< fName << " in C" << fCrate << ".N" << fStation << ".A0.F17 failed" << endl;
		gMrbLog->Flush(this->ClassName(), "WriteCSR");
		return(kFALSE);
	}
	return(kTRUE);
}

UInt_t TMrbDGF::ReadCSR() {
// Read DGF Control Status Reg
	UInt_t csr;
	Int_t cVal;
	if (this->IsOffline()) return(0);
	if (!fCamac.ExecCnaf(fCrate, fStation, A(0), F(1), cVal, kTRUE)) {
		gMrbLog->Err()	<< fName << " in C" << fCrate << ".N" << fStation << ".A0.F1 failed" << endl;
		gMrbLog->Flush(this->ClassName(), "ReadCSR");
		return(0xffffffff);
	}
	csr = (UInt_t) cVal & TMrbDGFData::kCamacCSRMask;
	if (csr & TMrbDGFData::kDSPError) {
		gMrbLog->Err() << "DSP error for module " << fName << " in C" << fCrate << ".N" << fStation << endl;
		gMrbLog->Flush(this->ClassName(), "ReadCSR");
	}
	return(csr);
}

Bool_t TMrbDGF::WriteTSAR(UInt_t Addr) {
	UInt_t addr;
// Write DGF Transfer Start Addr Reg
	if (this->IsOffline()) return(kTRUE);
	Int_t cVal = (Int_t) Addr;
	if (!fCamac.ExecCnaf(fCrate, fStation, A(1), F(17), cVal, kTRUE)) {
		gMrbLog->Err()	<< fName << " in C" << fCrate << ".N" << fStation
						<< ".A1.F17 failed - DSPAddr=0x" << setbase(16) << Addr << setbase(10) << endl;
		gMrbLog->Flush(this->ClassName(), "WriteTSAR");
		return(kFALSE);
	}
	if (!fCamac.ExecCnaf(fCrate, fStation, A(1), F(1), cVal, kTRUE)) {
		gMrbLog->Err()	<< fName << " in C" << fCrate << ".N" << fStation << ".A1.F1 failed" << endl;
		gMrbLog->Flush(this->ClassName(), "WriteTSAR");
		return(kFALSE);
	}
	addr = (UInt_t) cVal;
	if (Addr != addr) {
		gMrbLog->Err()	<< fName << " in C" << fCrate << ".N" << fStation
						<< " - addr = " << setbase(16) << addr << ", should be " << Addr << setbase(10) << endl;
		gMrbLog->Flush(this->ClassName(), "WriteTSAR");
		return(kFALSE);
	}
	return(kTRUE);
}

UInt_t TMrbDGF::ReadTSAR() {
// Read DGF Transfer Start Addr Reg
	if (this->IsOffline()) return(0);
	Int_t cVal;
	if (!fCamac.ExecCnaf(fCrate, fStation, A(1), F(1), cVal, kTRUE)) {
		gMrbLog->Err()	<< fName << " in C" << fCrate << ".N" << fStation << ".A1.F1 failed" << endl;
		gMrbLog->Flush(this->ClassName(), "ReadTSAR");
		return(0xffffffff);
	}
	return((UInt_t) cVal);
}

Bool_t TMrbDGF::WriteWCR(Int_t Data) {
// Write DGF Word Count Reg
	if (this->IsOffline()) return(kTRUE);
	Int_t cVal = Data;
	if (!fCamac.ExecCnaf(fCrate, fStation, A(2), F(17), cVal, kTRUE)) {
		gMrbLog->Err()	<< fName << " in C" << fCrate << ".N" << fStation << ".A2.F17 failed" << endl;
		gMrbLog->Flush(this->ClassName(), "WriteWCR");
		return(kFALSE);
	}
	return(kTRUE);
}

Int_t TMrbDGF::ReadWCR() {
// Read DGF Word Count Reg
	if (this->IsOffline()) return(0);
	Int_t cVal;
	if (!fCamac.ExecCnaf(fCrate, fStation, A(2), F(1), cVal, kTRUE)) {
		gMrbLog->Err()	<< fName << " in C" << fCrate << ".N" << fStation << ".A2.F1 failed" << endl;
		gMrbLog->Flush(this->ClassName(), "ReadWCR");
		return(-1);
	}
	return(cVal);
}

Int_t TMrbDGF::ReadEventBuffer(TMrbDGFEventBuffer & Buffer) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::ReadEventBuffer
// Purpose:        Copy event data from DSP to user
// Arguments:      TMrbDFGEventBuffer * Buffer    -- where to copy data
// Results:        Int_t NofWords                 -- number of data words
// Exceptions:
// Description:    Reads data from DGF's event buffer.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	Int_t nofWords;
	Int_t wc;
	UInt_t addr;

	Buffer.Reset();

	if (!this->CheckConnect("ReadEventBuffer")) return(-1);
	if (!this->CheckActive("ReadEventBuffer")) return(-1);

	nofWords = this->ReadWCR();
	if (nofWords <= 0) {
		gMrbLog->Err() << fName << " in C" << fCrate << ".N" << fStation << ": Word count is zero" << endl;
		gMrbLog->Flush(this->ClassName(), "ReadEventBuffer");
		nofWords = 8192;
	}

	addr = this->GetParValue("AOUTBUFFER", kTRUE);
	wc = this->GetParValue("LOUTBUFFER", kTRUE);
	Buffer.Set(wc);
	this->WriteTSAR(addr);

	if (fCamac.BlockXfer(fCrate, fStation, A(0), F(0), Buffer, 0, wc, kTRUE) == -1) {
		gMrbLog->Err()	<< fName << " in C" << fCrate << ".N" << fStation
						<< ".A0.F0: Reading histogram energies failed - DSPAddr=0x" << setbase(16) << addr
						<< setbase(10) << ", wc=" << wc << endl;
		gMrbLog->Flush(this->ClassName(), "ReadEventBuffer");
		return(-1);
	}

	Buffer.MakeIndex();
	return(nofWords);
}

Bool_t TMrbDGF::CheckBufferSize(const Char_t * Method, Int_t BufSize) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::CheckBufferSize
// Purpose:        Check buffer size

// Arguments:      Char_t * Method    -- calling method
//                 Int_t BufSize      -- buffer size
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    Checks if there is enough space in DSP's output buffer.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	Int_t bs = (Int_t) this->GetParValue("LOUTBUFFER", kTRUE);
	if (BufSize > bs) {
		gMrbLog->Err() << "Buffer overflow - " << BufSize << " words requested, " << bs << " available" << endl;
		gMrbLog->Flush(this->ClassName(), Method);
		return(kFALSE);
	}
	return(kTRUE);
}
	
Bool_t TMrbDGF::StartRun(Bool_t NewRun) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::StartRun
// Purpose:        DGF Run Control: Start run
// Arguments:      --
// Results:        --
// Exceptions:
// Description:    Checks status reg for active bit. If absent starts run.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	UInt_t csr;

	if (!this->CheckConnect("StartRun")) return(kFALSE);
	if (!this->CheckActive("StartRun")) return(kFALSE);
	csr = this->ReadCSR();
	if (csr == 0xffffffff) {
		gMrbLog->Err() << "Can't start " << this->GetTitle() << endl;
		gMrbLog->Flush(this->ClassName(), "StartRun");
		return(kFALSE);
	}

	if (fInhibitNewRun) {
		if (NewRun && gMrbDGFData->fVerboseMode) {
			cout << setmagenta << this->ClassName() << "::StartRun(): NewRun bit disabled" << setblack << endl;
		}
		NewRun = kFALSE;
	}

	if (NewRun) csr |= TMrbDGFData::kNewRun;

	this->WriteCSR(csr | TMrbDGFData::kRunEna);
	this->Wait();
	fStatusM &= ~TMrbDGF::kDSPAborted;
	fStatusM |= TMrbDGF::kDSPRunning;
	return(kTRUE);
}

Bool_t TMrbDGF::StopRun() {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::StopRun
// Purpose:        DGF Run Control: Stop run
// Arguments:      --
// Results:        --
// Exceptions:
// Description:    Stops run and waits for active bit to disappear.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	Int_t i;
	UInt_t csr;

	if (!this->CheckConnect("StopRun")) return(kFALSE);

	csr = this->ReadCSR();
	if (csr != 0xffffffff) {
		this->WriteCSR(csr & ~(TMrbDGFData::kRunEna | TMrbDGFData::kNewRun));
		this->Wait();
		for (i = 0; i < TMrbDGF::kTimeout; i++) {
			csr = this->ReadCSR();
			if (csr == 0xffffffff) break;
			if ((csr & TMrbDGFData::kActive) == 0) {
				fStatusM &= ~(TMrbDGF::kDSPRunning | TMrbDGF::kDSPAborted);
				return(kTRUE);
			}
		}
	}
	gMrbLog->Err() << "Can't stop " << this->GetTitle() << " (RUNACTIVE bit stuck)" << endl;
	gMrbLog->Flush(this->ClassName(), "StopRun");
	return(kFALSE);
}

Double_t TMrbDGF::Rounded(Double_t Value) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::Rounded
// Purpose:        Return value rounded up
// Arguments:      Double_t Value       -- original value
// Results:        Double_t RValue      -- rounded value
// Exceptions:
// Description:    Rounds up a value.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	Double_t v;
	if (Value == 0.) return(0.);
	v = fabs(Value) + 0.5;
	if (Value > 0.) return(v); else return(-v);
}

UInt_t * TMrbDGF::ToFixedPoint(Double_t Value, UInt_t * DspFixPt) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::ToFixedPoint
// Purpose:        Convert to DSP FixedPoint
// Arguments:      Double_t Value         -- value
//                 UInt_t * DspFixPt      -- where to store DSP data 
// Results:        UInt_t * DspFixPt      -- result
// Exceptions:
// Description:    Converts number to DSP fixed point format.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	Double_t valFloor;
	valFloor = floor(fabs(Value));
	DspFixPt[0] = (UShort_t) valFloor;
	DspFixPt[1] = (UShort_t) fabs(65536 * (Value - valFloor));
	if (gMrbDGFData->fVerboseMode) {
		cout	<< this->ClassName() << "::ToFixedPoint(): Value=" << Value
				<< " --> high word [0]=" << DspFixPt[0] << " (0x" << setbase(16) << DspFixPt[0] << setbase(10)
				<< "), low word [1]=" << DspFixPt[1] << " (0x" << setbase(16) << DspFixPt[1] << setbase(10) << ")"
				<< endl;
	}
	return(DspFixPt);
}

Double_t TMrbDGF::FromFixedPoint(UInt_t * DspFixPt) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::FromFixedPoint
// Purpose:        Convert from DSP FixedPoint
// Arguments:      UInt_t * DspFixPt      -- where to read DSP data from 
// Results:        Double_t Value         -- resulting value
// Exceptions:
// Description:    Converts number from DSP fixed point format.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	Double_t value;
	value = (Double_t) DspFixPt[1] / 65636 + (Double_t) DspFixPt[0];
#ifdef DEBUG
	cout	<< this->ClassName() << "::FromFixedPoint(): high word [0]="
			<< DspFixPt[0] << " (0x" << setbase(16) << DspFixPt[0] << setbase(10)
			<< "), low word [1]=" << DspFixPt[1] << " (0x" << setbase(16) << DspFixPt[1] << setbase(10) << ")"
			<< " --> Value = " << value << endl;
#endif
	return(value);
}

UInt_t * TMrbDGF::ToDouble(Double_t Value, UInt_t * DspDouble) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::ToDouble
// Purpose:        Convert to DSP Double
// Arguments:      Double_t Value         -- value
//                 UInt_t * DspDouble     -- where to store DSP data 
// Results:        UInt_t * DspDouble     -- result
// Exceptions:
// Description:    Converts number to DSP double format.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	Bool_t sign;
	Double_t mantissa;
	Int_t exp;
	Int_t m0, m1;

	sign = kFALSE;

	if (Value == 0.) {
			DspDouble[0]=0;
			DspDouble[1]=0;
			DspDouble[2]=0;
			return(DspDouble);
	}

	if (Value < 0.) {
		sign = kTRUE;
		Value = -Value;
	}

	exp = (Int_t) this->Rounded(log(Value) / log(2.) + 0.5);
	mantissa = Value / pow(2., exp);
  
	m1 = (Int_t) (mantissa * pow(2., 15));
	m0 = (Int_t) (mantissa * pow(2., 31) - m1 * pow(2., 16) + 0.5);
  
	if ((sign == kFALSE) & ((m1 & 0x8000) != 0)) {
		m0 = m0 / 2 + (m1 % 2) * 0x8000;
		m1 = m1 / 2;
		exp++;
    } else if (sign == kTRUE) {
		m1 = 65535 - m1;
		m0 = 65535 - m0;
		m0++;
		if (m0 > 65535) {
			m0 = 0;
			m1++;
		}
	}

	DspDouble[0] = exp;
	DspDouble[1] = m1;
	DspDouble[2] = m0;

#ifdef DEBUG
	cout	<< this->ClassName() << "::ToDouble(): Value=" << Value
			<< " --> exp=" << exp
			<< ", m1=" << m1 << " (0x" << setbase(16) << m1 << setbase(10)
			<< "), m0=" << m0 << " (0x" << setbase(16) << m0 << setbase(10) << ")"
			<< endl;
#endif
	return(DspDouble);
}

Bool_t TMrbDGF::SetModCSRA(UInt_t Bits, EMrbBitOp BitOp, Bool_t UpdateDSP) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::SetModCSRA
// Purpose:        Set bits in control/status reg
// Arguments:      UInt_t Bits          -- bit mask
//                 EMrbBitOp BitOp      -- set / or / clear / mask
//                 Bool_t UpdateDSP     -- kTRUE if DSP is to be updated
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    Manipulates bits in module control/status reg
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	UInt_t reg;

	if (UpdateDSP && !this->CheckConnect("SetModCSRA")) return(kFALSE);

	switch (BitOp) {
		case TMrbDGF::kBitSet:
			this->SetParValue("MODCSRA", Bits, UpdateDSP);
			break;
		case TMrbDGF::kBitOr:
			reg = this->GetParValue("MODCSRA");
			reg |= Bits;
			this->SetParValue("MODCSRA", reg, UpdateDSP);
			break;
		case TMrbDGF::kBitClear:  
			reg = this->GetParValue("MODCSRA");
			reg &= ~Bits;
			this->SetParValue("MODCSRA", reg, UpdateDSP);
			break;
		case TMrbDGF::kBitMask:
			reg = this->GetParValue("MODCSRA");
			reg &= Bits;
			this->SetParValue("MODCSRA", reg, UpdateDSP);
			break;
		default:
			gMrbLog->Err() << "Illegal bit operator - " << BitOp << endl;
			gMrbLog->Flush(this->ClassName(), "SetModCSRA");
			return(kFALSE);
	}
	return(kTRUE);
}

UInt_t  TMrbDGF::GetModCSRA(Bool_t ReadFromDSP) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::GetModCSRA
// Purpose:        Read control/status reg
// Arguments:      Bool_t ReadFromDSP  -- kTRUE if data should be read from DSP
// Results:        UInt_t Bits         -- CSRA bits
// Exceptions:
// Description:    Returns current value of the channel control/status reg
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	if (ReadFromDSP && !this->CheckConnect("GetModCSRA")) return(0xffffffff);
	return(this->GetParValue("MODCSRA", ReadFromDSP));
}

Bool_t TMrbDGF::SetChanCSRA(Int_t Channel, UInt_t Bits, EMrbBitOp BitOp, Bool_t UpdateDSP) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::SetChanCSRA
// Purpose:        Set bits in control/status reg
// Arguments:      Int_t Channel       -- channel number
//                 UInt_t Bits          -- bit mask
//                 EMrbBitOp BitOp      -- set / or / clear / mask
//                 Bool_t UpdateDSP     -- kTRUE if DSP is to be updated
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    Manipulates bits in channel control/status reg
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	UInt_t reg;

	if (UpdateDSP && !this->CheckConnect("SetChanCSRA")) return(kFALSE);
	if (!this->CheckChannel("SetChanCSRA", Channel)) return(kFALSE);

	switch (BitOp) {
		case TMrbDGF::kBitSet:
			this->SetParValue(Channel, "CHANCSRA", Bits, UpdateDSP);
			break;
		case TMrbDGF::kBitOr:
			reg = this->GetParValue(Channel, "CHANCSRA", UpdateDSP);
			reg |= Bits;
			this->SetParValue(Channel, "CHANCSRA", reg, UpdateDSP);
			reg = this->GetParValue(Channel, "CHANCSRA", UpdateDSP);
			break;
		case TMrbDGF::kBitClear:  
			reg = this->GetParValue(Channel, "CHANCSRA", UpdateDSP);
			reg &= ~Bits;
			this->SetParValue(Channel, "CHANCSRA", reg, UpdateDSP);
			break;
		case TMrbDGF::kBitMask:
			reg = this->GetParValue(Channel, "CHANCSRA", UpdateDSP);
			reg &= Bits;
			this->SetParValue(Channel, "CHANCSRA", reg, UpdateDSP);
			break;
		default:
			gMrbLog->Err() << "Illegal bit operator - " << BitOp << endl;
			gMrbLog->Flush(this->ClassName(), "SetChanCSRA");
			return(kFALSE);
	}
	return(kTRUE);
}

UInt_t  TMrbDGF::GetChanCSRA(Int_t Channel, Bool_t ReadFromDSP) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::GetChanCSRA
// Purpose:        Read control/status reg
// Arguments:      Int_t Channel       -- channel number
//                 Bool_t ReadFromDSP  -- kTRUE if data should be read from DSP
// Results:        UInt_t Bits         -- CSRA bits
// Exceptions:
// Description:    Returns current value of the channel control/status reg
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	UInt_t csra;

	if (ReadFromDSP && !this->CheckConnect("GetChanCSRA")) return(0xffffffff);
	if (!this->CheckChannel("GetChanCSRA", Channel)) return(0xffffffff);

	csra = this->GetParValue(Channel, "CHANCSRA", ReadFromDSP);
	return(csra);
}

Bool_t TMrbDGF::SetUserPsaCSR(Int_t Channel, UInt_t Bits, EMrbBitOp BitOp, Bool_t UpdateDSP) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::SetUserPsaCSR
// Purpose:        Set bits in psa control reg
// Arguments:      Int_t Channel       -- channel number
//                 UInt_t Bits          -- bit mask
//                 EMrbBitOp BitOp      -- set / or / clear / mask
//                 Bool_t UpdateDSP     -- kTRUE if DSP is to be updated
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    Manipulates bits in psa control reg
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	UInt_t reg;

	if (UpdateDSP && !this->CheckConnect("SetUserPsaCSR")) return(kFALSE);
	if (!this->CheckChannel("SetUserPsaCSR", Channel)) return(kFALSE);

	TMrbNamedX * param = fDGFData->FindParam("USERPSADATA"); 			// find param offset by param name
	if (param == NULL) {
		gMrbLog->Err() << "No such param - USERPSADATA" << endl;
		gMrbLog->Flush(this->ClassName(), "SetUserPsaCSR");
		return(kFALSE);
	}

	Int_t pOffset = param->GetIndex();
	if (pOffset < 0) pOffset = -pOffset;		// param "USERPSADATA" is shadowed normally
	pOffset += TMrbDGFData::kPsaPSACh0 + Channel;

	switch (BitOp) {
		case TMrbDGF::kBitSet:
			this->SetParValue(pOffset, Bits, UpdateDSP);
			break;
		case TMrbDGF::kBitOr:
			reg = this->GetParValue(pOffset, UpdateDSP);
			reg |= Bits;
			this->SetParValue(pOffset, reg, UpdateDSP);
			reg = this->GetParValue(pOffset, UpdateDSP);
			break;
		case TMrbDGF::kBitClear:  
			reg = this->GetParValue(pOffset, UpdateDSP);
			reg &= ~Bits;
			this->SetParValue(pOffset, reg, UpdateDSP);
			break;
		case TMrbDGF::kBitMask:
			reg = this->GetParValue(pOffset, UpdateDSP);
			reg &= Bits;
			this->SetParValue(pOffset, reg, UpdateDSP);
			break;
		default:
			gMrbLog->Err() << "Illegal bit operator - " << BitOp << endl;
			gMrbLog->Flush(this->ClassName(), "SetUserPsaCSR");
			return(kFALSE);
	}
	return(kTRUE);
}

UInt_t  TMrbDGF::GetUserPsaCSR(Int_t Channel, Bool_t ReadFromDSP) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::GetUserPsaCSR
// Purpose:        Read psa control reg
// Arguments:      Int_t Channel       -- channel number
//                 Bool_t ReadFromDSP  -- kTRUE if data should be read from DSP
// Results:        UInt_t Bits         -- CSRA bits
// Exceptions:
// Description:    Returns current value of the psa control reg
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	if (ReadFromDSP && !this->CheckConnect("GetUserPsaCSR")) return(0xffffffff);
	if (!this->CheckChannel("GetUserPsaCSR", Channel)) return(0xffffffff);

	TMrbNamedX * param = fDGFData->FindParam("USERPSADATA"); 			// find param offset by param name
	if (param == NULL) {
		gMrbLog->Err() << "No such param - USERPSADATA" << endl;
		gMrbLog->Flush(this->ClassName(), "GetUserPsaCSR");
		return(0xffffffff);
	}

	Int_t pOffset = param->GetIndex();
	if (pOffset < 0) pOffset = -pOffset;		// param "USERPSADATA" may be shadowed
	pOffset += TMrbDGFData::kPsaPSACh0 + Channel;

	UInt_t csr = this->GetParValue(pOffset, ReadFromDSP);
	return(csr);
}

Int_t  TMrbDGF::GetUserPsaData4(Int_t Offset, Int_t Channel, Bool_t ReadFromDSP) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::GetUserPsaData4
// Purpose:        Read psa data
// Arguments:      Int_t Offset        -- offset from param UserPsaData
//                 Int_t Channel       -- channel number
//                 Bool_t ReadFromDSP  -- kTRUE if data should be read from DSP
// Results:        Int_t PsaData       -- data (4 bits)
// Exceptions:
// Description:    Returns 4 bits out of 16 from psa data given by offset
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	if (ReadFromDSP && !this->CheckConnect("GetUserPsaData4")) return(0xffffffff);
	if (!this->CheckChannel("GetUserPsaData4", Channel)) return(0xffffffff);

	TMrbNamedX * param = fDGFData->FindParam("USERPSADATA"); 			// find param offset by param name
	if (param == NULL) {
		gMrbLog->Err() << "No such param - USERPSADATA" << endl;
		gMrbLog->Flush(this->ClassName(), "GetUserPsaData4");
		return(0xffffffff);
	}

	Int_t pOffset = param->GetIndex();
	if (pOffset < 0) pOffset = -pOffset;		// param "USERPSADATA" may be shadowed
	pOffset += Offset;
	Int_t pVal = this->GetParValue(pOffset, ReadFromDSP);
	return ((pVal >> (4 * (3 - Channel))) & 0xF);
}

Int_t  TMrbDGF::GetUserPsaData8(Int_t Offset, Int_t Channel, Bool_t ReadFromDSP) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::GetUserPsaData8
// Purpose:        Read psa data
// Arguments:      Int_t Offset        -- offset from param UserPsaData
//                 Int_t Channel       -- channel number
//                 Bool_t ReadFromDSP  -- kTRUE if data should be read from DSP
// Results:        Int_t PsaData       -- data (8 bits)
// Exceptions:
// Description:    Returns 8 bits out of 2*16 from psa data given by offset
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	if (ReadFromDSP && !this->CheckConnect("GetUserPsaData8")) return(0xffffffff);
	if (!this->CheckChannel("GetUserPsaData8", Channel)) return(0xffffffff);

	TMrbNamedX * param = fDGFData->FindParam("USERPSADATA"); 			// find param offset by param name
	if (param == NULL) {
		gMrbLog->Err() << "No such param - USERPSADATA" << endl;
		gMrbLog->Flush(this->ClassName(), "GetUserPsaData8");
		return(0xffffffff);
	}

	Int_t pOffset = param->GetIndex();
	if (pOffset < 0) pOffset = -pOffset;		// param "USERPSADATA" may be shadowed
	pOffset += Offset;
	if (Channel > 1) {
		pOffset++;
		Channel -= 2;
	}
	Int_t pVal = this->GetParValue(pOffset, ReadFromDSP);
	return ((pVal >> (8 * (1 - Channel))) & 0xFF);
}

Bool_t TMrbDGF::SetUserPsaData4(Int_t Offset, Int_t Channel, Int_t Value, Bool_t UpdateDSP) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::SetUserPsaData4
// Purpose:        Write psa data
// Arguments:      Int_t Offset        -- offset from param UserPsaData
//                 Int_t Channel       -- channel number
//                 Int_t Value         -- data (4 bits)
//                 Bool_t UpdateDSP    -- kTRUE if DSP has to be updated afterwards
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    Merges 4 Bits into a 16-bit psa word.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	if (UpdateDSP && !this->CheckConnect("SetUserPsaData4")) return(kFALSE);
	if (!this->CheckChannel("SetUserPsaData4", Channel)) return(kFALSE);

	TMrbNamedX * param = fDGFData->FindParam("USERPSADATA"); 			// find param offset by param name
	if (param == NULL) {
		gMrbLog->Err() << "No such param - USERPSADATA" << endl;
		gMrbLog->Flush(this->ClassName(), "SetUserPsaData4");
		return(kFALSE);
	}

	Int_t pOffset = param->GetIndex();;
	if (pOffset < 0) pOffset = -pOffset;		// param "USERPSADATA" may be shadowed
	pOffset += Offset;
	Int_t pVal = this->GetParValue(pOffset, UpdateDSP);

	Int_t b4[4];
	for (Int_t i = 3; i >= 0; i--, pVal >>= 4) b4[i] = pVal & 0xF;
	b4[Channel] = Value & 0xF;
	pVal = 0;
	for (Int_t i = 0; i <= 3; i++) { pVal <<= 4; pVal |= b4[i]; }
	this->SetParValue(pOffset, pVal, UpdateDSP);
	pVal = this->GetParValue(pOffset, UpdateDSP);
	return(kTRUE);
}

Bool_t TMrbDGF::SetUserPsaData8(Int_t Offset, Int_t Channel, Int_t Value, Bool_t UpdateDSP) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::SetUserPsaData8
// Purpose:        Write psa data
// Arguments:      Int_t Offset        -- offset from param UserPsaData
//                 Int_t Channel       -- channel number
//                 Int_t Value         -- data (8 bits)
//                 Bool_t UpdateDSP    -- kTRUE if DSP has to be updated afterwards
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    Merges 8 Bits into one of 2 16-bit psa words.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	if (UpdateDSP && !this->CheckConnect("SetUserPsaData8")) return(kFALSE);
	if (!this->CheckChannel("SetUserPsaData8", Channel)) return(kFALSE);

	TMrbNamedX * param = fDGFData->FindParam("USERPSADATA"); 			// find param offset by param name
	if (param == NULL) {
		gMrbLog->Err() << "No such param - USERPSADATA" << endl;
		gMrbLog->Flush(this->ClassName(), "SetUserPsaData8");
		return(kFALSE);
	}

	Int_t pOffset = param->GetIndex();
	if (pOffset < 0) pOffset = -pOffset;		// param "USERPSADATA" may be shadowed
	pOffset += Offset;
	if (Channel > 1) {
		pOffset++;
		Channel -= 2;
	}
	Int_t pVal = this->GetParValue(pOffset, UpdateDSP);

	Int_t b8[2];
	for (Int_t i = 1; i >= 0; i--, pVal >>= 8) b8[i] = pVal & 0xFF;
	b8[Channel] = Value & 0xFF;
	pVal = 0;
	for (Int_t i = 0; i <= 1; i++) { pVal <<= 8; pVal |= b8[i]; }
	this->SetParValue(pOffset, pVal, UpdateDSP);
	return(kTRUE);
}

Bool_t TMrbDGF::SetCoincPattern(UInt_t Pattern, Bool_t UpdateDSP) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::SetCoincPattern
// Purpose:        Set coinc pattern bits
// Arguments:      Bool_t UpdateDSP    -- kTRUE if data should be written to DSP
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    Sets module's coinc pattern.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	if (UpdateDSP && !this->CheckConnect("SetCoincPattern")) return(kFALSE);
	this->SetParValue("COINCPATTERN", Pattern, UpdateDSP);
	return(kTRUE);
}

UInt_t TMrbDGF::GetCoincPattern(Bool_t ReadFromDSP) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::GetCoincPattern
// Purpose:        Return coinc pattern bits
// Arguments:      Bool_t ReadFromDSP    -- kTRUE if data should be read from DSP
// Results:        UInt_t Pattern        -- pattern bits
// Exceptions:
// Description:    Returns module's coinc pattern.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	if (ReadFromDSP && !this->CheckConnect("GetCoincPattern")) return(0);
	return(this->GetParValue("COINCPATTERN", ReadFromDSP));
}

Bool_t TMrbDGF::SetCoincWait(Bool_t ReadFromDSP) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::SetCoincWait
// Purpose:        Set coinc time in dsp
// Arguments:      Bool_t ReadFromDSP     -- kTRUE if value is to be read from DSP first
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    Calculates coincidence time window and sets dsp value.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	Int_t coincWait;

	if (!this->CheckConnect("SetCoincWait")) return(kFALSE);
	coincWait = this->CalcCoincWait(ReadFromDSP);
	if (coincWait == -1) return(kFALSE);
	return(this->SetParValue("COINCWAIT", coincWait, kTRUE));
}

Bool_t TMrbDGF::SetDelay(Int_t Channel, Double_t Delay, Bool_t UpdateDSP) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::SetDelay
// Purpose:        Set channel delay
// Arguments:      Int_t Channel        -- channel number
//                 Double_t Delay       -- delay in us
//                 Bool_t UpdateDSP     -- kTRUE if DSP is to be updated
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    Sets delay for a given channel.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	Int_t trgDelay = 0;
	Int_t pafLength, peakSep, peakSample, dec, dec2;

	if (UpdateDSP && !this->CheckConnect("SetDelay")) return(kFALSE);
	if (!this->CheckChannel("SetDelay", Channel)) return(kFALSE);

    dec = this->GetParValue("DECIMATION");
	dec2 = 1 << dec;
    peakSep = this->GetParValue(Channel, "PEAKSEP");
    peakSample = this->GetParValue(Channel, "PEAKSAMPLE");
    
	trgDelay = (peakSample + 6) * dec2;

	pafLength = trgDelay + (Int_t) (Delay * 40 + .5) + 8;
	this->SetParValue(Channel, "PAFLENGTH", pafLength, UpdateDSP);
    this->SetParValue(Channel, "TRIGGERDELAY", trgDelay, UpdateDSP);
   
	if (gMrbDGFData->fVerboseMode) {
		cout 	<< this->ClassName() << "::SetDelay(): PEAKSEP" << Channel
				<< "=" << peakSep
				<< ", TRIGGERDELAY" << Channel << "=" << trgDelay
				<< ", PAFLENGTH" << Channel << "=" << pafLength
				<< endl;
	}
	return(kTRUE);
}

Double_t TMrbDGF::GetDelay(Int_t Channel, Bool_t ReadFromDSP) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::GetDelay
// Purpose:        Recalculates channel delay from dgf params
// Arguments:      Int_t Channel        -- channel number
//                 Bool_t ReadFromDSP   -- kTRUE if param to be read from DSP
// Results:        Double_t Delay       -- delay in us
// Exceptions:
// Description:    Returns delay for a given channel.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	Int_t trgDelay, pafLength;
	Double_t delayVal;

	if (ReadFromDSP && !this->CheckConnect("GetDelay")) return(-1);
	if (!this->CheckChannel("GetDelay", Channel)) return(-1);

	pafLength = this->GetParValue(Channel, "PAFLENGTH", ReadFromDSP);
    trgDelay = this->GetParValue(Channel, "TRIGGERDELAY", ReadFromDSP);
   
	delayVal = (Double_t) (pafLength - trgDelay - 8);
	return(delayVal / 40.);
}

Int_t TMrbDGF::SetGain(Int_t Channel, Double_t Gain, Bool_t UpdateDSP) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::SetGain
// Purpose:        Set gain
// Arguments:      Int_t Channel        -- channel number
//                 Double_t Gain        -- gain
//                 Bool_t UpdateDSP     -- kTRUE if DSP is to be updated
// Results:        Int_t GainVal        -- converted GAINDAC value
// Exceptions:
// Description:    Sets GAINDAC for a given channel.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	Double_t dacVal;
	Int_t idacVal;

	if (UpdateDSP && !this->CheckConnect("SetGain")) return(-1);
	if (!this->CheckChannel("SetGain", Channel)) return(-1);

//	if (Gain < 0.01) return(32768); 	// gain negative?
	if (Gain < 0.1639) Gain = 0.1639;
	dacVal = 65535 - 32768 * log10(Gain / 0.1639);
	idacVal = (Int_t) (dacVal + 0.5);

	this->SetParValue(Channel, "GAINDAC", idacVal, UpdateDSP);
	return(idacVal);
}

Double_t TMrbDGF::GetGain(Int_t Channel, Bool_t ReadFromDSP) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::GetGain
// Purpose:        Recalculate gain value
// Arguments:      Int_t Channel        -- channel number
//                 Bool_t ReadFromDSP   -- kTRUE if param to be read from DSP
// Results:        Double_t Gain        -- gain value
// Exceptions:
// Description:    Returns gain for a given channel.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	Double_t gainVal;

	if (ReadFromDSP && !this->CheckConnect("GetGain")) return(-1);
	if (!this->CheckChannel("GetGain", Channel)) return(-1);

	gainVal = (Double_t) (65535 - this->GetParValue(Channel, "GAINDAC", ReadFromDSP)) / 32768;
	gainVal = 0.1639 * pow(10., gainVal);
	return(gainVal);
}

Int_t TMrbDGF::SetOffset(Int_t Channel, Double_t Offset, Bool_t UpdateDSP) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::SetOffset
// Purpose:        Set offset
// Arguments:      Int_t Channel        -- channel number
//                 Double_t Offset      -- offset
//                 Bool_t UpdateDSP     -- kTRUE if DSP is to be updated
// Results:        Int_t OffsetVal      -- converted TRACKDAC value
// Exceptions:
// Description:    Sets TRACKDAC for a given channel.
//                 Offset in Volts (after DAC amplification).
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	Double_t dacVal;
	Int_t idacVal;

	if (UpdateDSP && !this->CheckConnect("SetOffset")) return(0);
	if (!this->CheckChannel("SetOffset", Channel)) return(0);

	dacVal = 32768 - (Offset / 3) * 32768;
	idacVal = (UInt_t) dacVal;
	this->SetParValue(Channel, "TRACKDAC", idacVal, UpdateDSP);

	return(idacVal);
}

Double_t TMrbDGF::GetOffset(Int_t Channel, Bool_t ReadFromDSP) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::GetOffset
// Purpose:        Recalculate offset
// Arguments:      Int_t Channel        -- channel number
//                 Bool_t ReadFromDSP   -- kTRUE if param to be read from DSP
// Results:        Double_t Offset      -- offset value
// Exceptions:
// Description:    Returns offset for a given channel.
//                 Offset in Volts (after DAC amplification).
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	Double_t offset;

	if (ReadFromDSP && !this->CheckConnect("GetOffset")) return(-1);
	if (!this->CheckChannel("GetOffset", Channel)) return(-1);

	offset = (Double_t) this->GetParValue(Channel, "TRACKDAC", ReadFromDSP);
	offset = 3 * (1 - offset / 32768);
	return(offset);
}

Bool_t TMrbDGF::SetTraceLength(Int_t Channel, Double_t TraceLength, Bool_t UpdateDSP) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::SetTraceLength
// Purpose:        Set trace length
// Arguments:      Int_t Channel        -- channel number
//                 Double_t TraceLength -- tracelength in us
//                 Bool_t UpdateDSP     -- kTRUE if DSP is to be updated
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    Sets TRACKDAC in us for a given channel.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	Int_t traceLength;

	if (UpdateDSP && !this->CheckConnect("SetTraceLength")) return(kFALSE);
	if (!this->CheckChannel("SetTraceLength", Channel)) return(kFALSE);
	traceLength = (Int_t) (TraceLength * 40 +.5);
	this->SetParValue(Channel, "TRACELENGTH", traceLength);
	return(kTRUE);
}

Double_t TMrbDGF::GetTraceLength(Int_t Channel, Bool_t ReadFromDSP) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::GetTraceLength
// Purpose:        Return trave length in us
// Arguments:      Int_t Channel        -- channel number
//                 Bool_t ReadFromDSP   -- kTRUE if param to be read from DSP
// Results:        Double_t TraceLength -- trace length in us
// Exceptions:
// Description:    Returns trace length for a given channel.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	Double_t traceLength;

	if (ReadFromDSP && !this->CheckConnect("GetTraceLength")) return(-1);
	if (!this->CheckChannel("GetTraceLength", Channel)) return(-1);

	traceLength = (Double_t) this->GetParValue(Channel, "TRACELENGTH", ReadFromDSP);
	return(traceLength / 40);
}

Bool_t TMrbDGF::SetPSALength(Int_t Channel, Double_t PsaLength, Bool_t UpdateDSP) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::SetPSALength
// Purpose:        Set psa length
// Arguments:      Int_t Channel        -- channel number
//                 Double_t PsaLength   -- psa length in us
//                 Bool_t UpdateDSP     -- kTRUE if DSP is to be updated
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    Sets PSALENGTH for given channel. Input is in us.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	Int_t psaLength;

	if (UpdateDSP && !this->CheckConnect("SetPSALength")) return(kFALSE);
	if (!this->CheckChannel("SetPSALength", Channel)) return(kFALSE);
	psaLength = (Int_t) (PsaLength * 40 +.5);
	this->SetParValue(Channel, "PSALENGTH", psaLength);
	return(kTRUE);
}

Double_t TMrbDGF::GetPSALength(Int_t Channel, Bool_t ReadFromDSP) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::GetPSALength
// Purpose:        Return psa length in us
// Arguments:      Int_t Channel        -- channel number
//                 Bool_t ReadFromDSP   -- kTRUE if param to be read from DSP
// Results:        Double_t PsaLength   -- psa length in us
// Exceptions:
// Description:    Returns psa length for a given channel.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	Double_t psaLength;

	if (ReadFromDSP && !this->CheckConnect("GetPSALength")) return(-1);
	if (!this->CheckChannel("GetPSALength", Channel)) return(-1);

	psaLength = (Double_t) this->GetParValue(Channel, "PSALENGTH", ReadFromDSP);
	return(psaLength / 40);
}

Bool_t TMrbDGF::SetPSAOffset(Int_t Channel, Double_t PsaOffset, Bool_t UpdateDSP) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::SetPSAOffset
// Purpose:        Set psa offset
// Arguments:      Int_t Channel        -- channel number
//                 Double_t PsaLength   -- psa length in us
//                 Bool_t UpdateDSP     -- kTRUE if DSP is to be updated
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    Sets PSAOFFSET for given channel. Input is in us.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	Int_t psaOffset;

	if (UpdateDSP && !this->CheckConnect("SetPSAOffset")) return(kFALSE);
	if (!this->CheckChannel("SetPSAOffset", Channel)) return(kFALSE);
	psaOffset = (Int_t) (PsaOffset * 40 +.5);
	this->SetParValue(Channel, "PSAOFFSET", psaOffset);
	return(kTRUE);
}

Double_t TMrbDGF::GetPSAOffset(Int_t Channel, Bool_t ReadFromDSP) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::GetPSAOffset
// Purpose:        Return psa offset in us
// Arguments:      Int_t Channel        -- channel number
//                 Bool_t ReadFromDSP   -- kTRUE if param to be read from DSP
// Results:        Double_t PsaOffset   -- psa length in us
// Exceptions:
// Description:    Returns psa offset for a given channel.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	Double_t psaOffset;

	if (ReadFromDSP && !this->CheckConnect("GetPSAOffset")) return(-1);
	if (!this->CheckChannel("GetPSAOffset", Channel)) return(-1);

	psaOffset = (Double_t) this->GetParValue(Channel, "PSAOFFSET", ReadFromDSP);
	return(psaOffset / 40);
}

Bool_t TMrbDGF::SetCFD(Int_t Channel, Int_t CfdVal, Bool_t UpdateDSP) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::SetCFD
// Purpose:        Set hardware CFD
// Arguments:      Int_t Channel        -- channel number
//                 Int_t CfdVal         -- cfd value
//                 Bool_t UpdateDSP     -- kTRUE if DSP is to be updated
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    Sets TRACKDAC for a given channel.
//                 Offset in Volts (after DAC amplification).
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	if (UpdateDSP && !this->CheckConnect("SetCFD")) return(kFALSE);
	if (!this->CheckChannel("SetCFD", Channel)) return(kFALSE);

	this->SetParValue(Channel, "CFDREG", CfdVal, UpdateDSP);

	return(kTRUE);
}

Int_t TMrbDGF::GetCFD(Int_t Channel, Bool_t ReadFromDSP) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::GetCFD
// Purpose:        Read hardware CFD
// Arguments:      Int_t Channel        -- channel number
//                 Bool_t ReadFromDSP   -- kTRUE if param to be read from DSP
// Results:        Int_t CfdVal         -- cfd value
// Exceptions:
// Description:    Returns cfd for a given channel.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	if (ReadFromDSP && !this->CheckConnect("GetCFD")) return(-1);
	if (!this->CheckChannel("GetCFD", Channel)) return(-1);

	Int_t cfdVal = this->GetParValue(Channel, "CFDREG", ReadFromDSP);
	return(cfdVal);
}

Bool_t TMrbDGF::UpdateSlowFilter(Int_t Channel, Bool_t UpdateDSP) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::UpdateSlowFilter
// Purpose:        Update slow filter
// Arguments:      Int_t Channel        -- channel number
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    Update params responsible for slow filter.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	Int_t slowLength, slowGap, peakSep, pafLength, trigDelay, dec;
	Int_t peakSample;
	Double_t userDelay;

	if (UpdateDSP && !this->CheckConnect("UpdateSlowFilter")) return(kFALSE);
	if (!this->CheckChannel("UpdateSlowFilter", Channel)) return(kFALSE);

	slowLength = this->GetParValue(Channel, "SLOWLENGTH");
	slowGap = this->GetParValue(Channel, "SLOWGAP");
	pafLength = this->GetParValue(Channel, "PAFLENGTH");
	peakSep = this->GetParValue(Channel, "PEAKSEP");
	trigDelay = this->GetParValue(Channel, "TRIGGERDELAY");

	dec = this->GetParValue("DECIMATION");

	userDelay = (pafLength - 8 - trigDelay) * 0.025;	// extract user delay

	switch (dec) {
		case 0: peakSample = slowLength + slowGap - 7; if (peakSample < 0) peakSample = 0; break;
		case 1: peakSample = slowLength + slowGap - 4; if (peakSample < 2) peakSample = 2; break;
		case 2: peakSample = slowLength + slowGap - 2; break;
		default:
		case 3:
		case 4:
		case 6: peakSample = slowLength + slowGap - 1; break;
	}
	peakSep = peakSample + 5;
	if (peakSep > 33) peakSep = peakSample + 1;

	this->SetParValue(Channel, "PEAKSAMPLE", peakSample, UpdateDSP);	// set new values
	this->SetParValue(Channel, "PEAKSEP", peakSep, UpdateDSP);

	this->SetDelay(Channel, userDelay, UpdateDSP);		// re-calculate user delay

	if (gMrbDGFData->fVerboseMode) {
		cout	<< this->ClassName() << "::UpdateSlowFilter(): PEAKSAMPLE" << Channel << "=" << peakSample
				<< ", PEAKSEP" << Channel << "=" << peakSep
				<< ", SLOWLENGTH" << Channel << "=" << slowLength
				<< ", SLOWGAP" << Channel << "=" << slowGap
				<< endl;
	}
	return(kTRUE);
}

Double_t TMrbDGF::GetDeltaT(Bool_t ReadFromDSP) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::GetDeltaT
// Purpose:        Get time granularity
// Arguments:      Bool_t ReadFromDSP     -- kTRUE if value is to be read from DSP
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    Calculates time granularity.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	Double_t dt; 
	Int_t dec;

	if (ReadFromDSP && !this->CheckConnect("GetDeltaT")) return(-1);

	dec = this->GetParValue("DECIMATION", ReadFromDSP);
	dt = (1 << dec) * 0.025;				// deltaT
	return(dt);
}

Int_t TMrbDGF::CalcCoincWait(Bool_t ReadFromDSP) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::CalcCoincWait
// Purpose:        Calculate coinc time window
// Arguments:      Bool_t ReadFromDSP     -- kTRUE if value is to be read from DSP
// Results:        Int_t CoincWait        -- coinc window in units of 25ns
// Exceptions:
// Description:    Calculates coincidence time window.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	Int_t chn;
	Int_t dec;
	Int_t coincWait;
	Int_t pt;

	if (ReadFromDSP && !this->CheckConnect("CalcCoincWait")) return(-1);

	dec = this->GetParValue("DECIMATION", ReadFromDSP);

	coincWait = (Int_t) ceil(1.5 * (1 << dec) - 70);
	if (coincWait < 1) coincWait = 1;

	for (chn = 0; chn < TMrbDGFData::kNofChannels; chn++) { 	// calculate corrections for each channel
		if (this->IsGoodChannel(chn)) {
			pt =	this->GetParValue(chn, "PAFLENGTH", ReadFromDSP) -
					this->GetParValue(chn, "TRIGGERDELAY", ReadFromDSP) - 70;
			if (pt > coincWait) coincWait = pt;
		}
	}
	return(coincWait);
}

Bool_t TMrbDGF::ResetPGTime(Int_t Channel, Bool_t UpdateDSP) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::ResetPGTime
// Purpose:        Reset peak and gap time
// Arguments:      Int_t Channel        -- channel number
//                 Bool_t UpdateDSP     -- kTRUE if DSP is to be updated
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    Resets peak and gap time values to 0.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	if (UpdateDSP && !this->CheckConnect("ResetPGTime")) return(kFALSE);
	if (!this->CheckChannel("ResetPGTime", Channel)) return(kFALSE);

	this->SetParValue(Channel, "SLOWLENGTH", 0, UpdateDSP);
	this->SetParValue(Channel, "SLOWGAP", 0, UpdateDSP);
	return(kTRUE);
}

Bool_t TMrbDGF::SetPeakTime(Int_t Channel, Double_t PeakTime, Bool_t UpdateDSP) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::SetPeakTime
// Purpose:        Set peak time
// Arguments:      Int_t Channel        -- channel number
//                 Double_t PeakTime    -- length in ns
//                 Bool_t UpdateDSP     -- kTRUE if DSP is to be updated
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    Sets peak time (length of slow filter) for a channel.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	Double_t dt, peakTime; 
	Int_t slowLength, slowGap, dec;

	if (UpdateDSP && !this->CheckConnect("SetPeakTime")) return(kFALSE);
	if (!this->CheckChannel("SetPeakTime", Channel)) return(kFALSE);

	dec = this->GetParValue("DECIMATION");

	dt = (1 << dec) * 0.025;				// deltaT
	slowGap = this->GetParValue(Channel, "SLOWGAP");
	slowLength = (Int_t) (PeakTime / dt + 0.5);
  
	if (slowLength + slowGap > 31) slowLength = 31 - slowGap;	// has to be < 32
	this->SetParValue(Channel, "SLOWLENGTH", slowLength, UpdateDSP);

	this->UpdateSlowFilter(Channel, UpdateDSP);

	peakTime = slowLength * dt;

	if (gMrbDGFData->fVerboseMode) {
		cout	<< this->ClassName() << "::SetPeakTime(): deltaT=" << dt
				<< ", SLOWLENGTH" << Channel << "=" << slowLength
				<< ", PeakTime=" << peakTime
				<< endl;
	}
	return(kTRUE);
}

Double_t TMrbDGF::GetPeakTime(Int_t Channel, Bool_t ReadFromDSP) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::GetPeakTime
// Purpose:        Recalculate peak time
// Arguments:      Int_t Channel        -- channel number
//                 Bool_t ReadFromDSP   -- kTRUE if param to be read from DSP
// Results:        Double_t PeakTime    -- peak time, rounded up
// Exceptions:
// Description:    Returns peak time (length of slow filter) for a channel.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	Double_t dt, peakTime; 
	Int_t slowLength, dec;

	if (ReadFromDSP && !this->CheckConnect("GetPeakTime")) return(-1);
	if (!this->CheckChannel("GetPeakTime", Channel)) return(-1);

	dec = this->GetParValue("DECIMATION");
	dt = (1 << dec) * 0.025;				// deltaT
	slowLength = this->GetParValue(Channel, "SLOWLENGTH", ReadFromDSP);
	peakTime = slowLength * dt;
	return(peakTime);
}

Bool_t TMrbDGF::SetGapTime(Int_t Channel, Double_t GapTime, Bool_t UpdateDSP) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::SetGapTime
// Purpose:        Set gap time
// Arguments:      Int_t Channel        -- channel number
//                 Double_t GapTime     -- length in ns
//                 Bool_t UpdateDSP     -- kTRUE if DSP is to be updated
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    Sets gap time for a channel.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	Double_t dt, gapTime; 
	Int_t slowLength, slowGap, dec;

	if (UpdateDSP && !this->CheckConnect("SetGapTime")) return(kFALSE);
	if (!this->CheckChannel("SetGapTime", Channel)) return(kFALSE);

	dec = this->GetParValue("DECIMATION");

	dt = (1 << dec) * 0.025;						// deltaT

	slowLength = this->GetParValue(Channel, "SLOWLENGTH");
	slowGap = (Int_t) (GapTime / dt + 0.5);
	if (slowLength + slowGap > 31) slowGap = 31 - slowLength;

	this->SetParValue(Channel, "SLOWGAP", slowGap, UpdateDSP);

	this->UpdateSlowFilter(Channel, UpdateDSP);

	gapTime = dt * slowGap;
	if (gMrbDGFData->fVerboseMode) {
		cout	<< this->ClassName() << "::SetGapTime(): deltaT=" << dt
				<< ", SLOWGAP" << Channel << "=" << slowGap
				<< ", GapTime=" << gapTime
				<< endl;
	}
	return(kTRUE);
}

Double_t TMrbDGF::GetGapTime(Int_t Channel, Bool_t ReadFromDSP) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::GetGapTime
// Purpose:        Recalculate gap time
// Arguments:      Int_t Channel        -- channel number
//                 Bool_t ReadFromDSP   -- kTRUE if param to be read from DSP
// Results:        Double_t GapTime     -- gap time
// Exceptions:
// Description:    Returns gap time for a channel.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	Double_t dt, gapTime; 
	Int_t slowGap, dec;

	if (ReadFromDSP && !this->CheckConnect("GetGapTime")) return(-1);
	if (!this->CheckChannel("GetGapTime", Channel)) return(-1);

	dec = this->GetParValue("DECIMATION");
	dt = (1 << dec) * 0.025;						// deltaT
	slowGap = this->GetParValue(Channel, "SLOWGAP", ReadFromDSP);
	gapTime = slowGap * dt;
	return(gapTime);
}

Bool_t TMrbDGF::ResetFastPGTime(Int_t Channel, Bool_t UpdateDSP) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::ResetFastPGTime
// Purpose:        Reset fast peak and gap times
// Arguments:      Int_t Channel        -- channel number
//                 Bool_t UpdateDSP     -- kTRUE if DSP is to be updated
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    Resets fast peak and gap time values to 0.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	if (UpdateDSP && !this->CheckConnect("ResetFastPGTime")) return(kFALSE);
	if (!this->CheckChannel("ResetFastPGTime", Channel)) return(kFALSE);

	this->SetParValue(Channel, "FASTLENGTH", 0, UpdateDSP);
	this->SetParValue(Channel, "FASTGAP", 0, UpdateDSP);
	this->SetParValue(Channel, "MINWIDTH", 0, UpdateDSP);
	return(kTRUE);
}

void TMrbDGF::SetFastFilter(Int_t Channel, Int_t Length, Int_t Gap, Bool_t UpdateDSP) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::SetFastFilter
// Purpose:        Set fast filter
// Arguments:      Int_t Channel        -- channel number
//                 Int_t Length         -- length
//                 Int_t Gap            -- gap
//                 Bool_t UpdateDSP     -- kTRUE if DSP is to be updated
// Results:        --
// Exceptions:
// Description:    Sets fast filter params.
//                 Method obsolete, replaced by SetFastPeakTime/SetFastGapTime.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	if (UpdateDSP && !this->CheckConnect("SetFastFilter")) return;
	if (!this->CheckChannel("SetFastFilter", Channel)) return;

	if (Gap + Length > 31) Gap = 31 - Length;
   
	this->SetParValue(Channel, "FASTLENGTH", Length, UpdateDSP);
	this->SetParValue(Channel, "FASTGAP", Gap, UpdateDSP);
	this->SetParValue(Channel, "MINWIDTH", Gap + Length, UpdateDSP);

	if (gMrbDGFData->fVerboseMode) {
		cout	<< this->ClassName() << "::SetFastFilter(): FASTLENGTH" << Channel << "=" << Length
				<< ", FASTGAP" << Channel << "=" << Gap
				<< endl;
	}
}

Bool_t TMrbDGF::SetFastPeakTime(Int_t Channel, Double_t PeakTime, Bool_t UpdateDSP) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::SetFastPeakTime
// Purpose:        Set fast filter peaking time
// Arguments:      Int_t Channel        -- channel number
//                 Double_t PeakTime    -- peaking time in us
//                 Bool_t UpdateDSP     -- kTRUE if DSP is to be updated
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    Sets fast filter peaking time.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	Int_t length, gap;

	if (UpdateDSP && !this->CheckConnect("SetFastPeakTime")) return(kFALSE);
	if (!this->CheckChannel("SetFastPeakTime", Channel)) return(kFALSE);

	gap = this->GetParValue(Channel, "FASTGAP");
	length = (Int_t) (PeakTime * 40. + .5);
//	if (length < 1) length = 1;
//	if (length > 4) length = 4;
//	if (gap + length > 31) gap = 31 - length;
	if (gap + length > 31) length = 31 - gap;
   
	this->SetParValue(Channel, "FASTLENGTH", length, UpdateDSP);
	this->SetParValue(Channel, "FASTGAP", gap, UpdateDSP);
	this->SetParValue(Channel, "MINWIDTH", gap + length, UpdateDSP);

	if (gMrbDGFData->fVerboseMode) {
		cout	<< this->ClassName() << "::SetFastPeakTime(): FASTLENGTH" << Channel << "=" << length
				<< ", FASTGAP" << Channel << "=" << gap
				<< endl;
	}
	return(kTRUE);
}

Double_t TMrbDGF::GetFastPeakTime(Int_t Channel, Bool_t ReadFromDSP) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::GetFastPeakTime
// Purpose:        Return fast filter peaking time
// Arguments:      Int_t Channel        -- channel number
//                 Bool_t ReadFromDSP   -- kTRUE if value is to read form DSP
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    Returns current fast filter peaking time.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	Int_t length;
	Double_t peakTime;

	if (ReadFromDSP && !this->CheckConnect("GetFastPeakTime")) return(-1);
	if (!this->CheckChannel("GetFastPeakTime", Channel)) return(-1);

	length = this->GetParValue(Channel, "FASTLENGTH", ReadFromDSP);
	peakTime = ((Double_t) length) / 40;
	return(peakTime);
}

Bool_t TMrbDGF::SetFastGapTime(Int_t Channel, Double_t GapTime, Bool_t UpdateDSP) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::SetFastGapTime
// Purpose:        Set fast filter gap time
// Arguments:      Int_t Channel        -- channel number
//                 Double_t GapTime     -- peaking time in us
//                 Bool_t UpdateDSP     -- kTRUE if DSP is to be updated
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    Sets fast filter gap time.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	Int_t length, gap;

	if (UpdateDSP && !this->CheckConnect("SetFastGapTime")) return(kFALSE);
	if (!this->CheckChannel("SetFastGapTime", Channel)) return(kFALSE);

	length = this->GetParValue(Channel, "FASTLENGTH");
	gap = (Int_t) (GapTime * 40. + .5);
//	if (gap < 1) gap = 1;
//	if (gap > 4) gap = 4;
//	if (gap + length > 31) length = 31 - gap;
	if (gap + length > 31) gap = 31 - length;
   
	this->SetParValue(Channel, "FASTLENGTH", length, UpdateDSP);
	this->SetParValue(Channel, "FASTGAP", gap, UpdateDSP);
	this->SetParValue(Channel, "MINWIDTH", gap + length, UpdateDSP);

	if (gMrbDGFData->fVerboseMode) {
		cout	<< this->ClassName() << "::SetFastGapTime(): FASTLENGTH" << Channel << "=" << length
				<< ", FASTGAP" << Channel << "=" << gap
				<< endl;
	}
	return(kTRUE);
}

Double_t TMrbDGF::GetFastGapTime(Int_t Channel, Bool_t ReadFromDSP) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::GetFastGapTime
// Purpose:        Return fast filter gap time
// Arguments:      Int_t Channel        -- channel number
//                 Bool_t ReadFromDSP   -- kTRUE if value is to read form DSP
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    Returns current fast filter gap time.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	Int_t intGap;
	Double_t gapTime;

	if (ReadFromDSP && !this->CheckConnect("GetFastGapTime")) return(-1);
	if (!this->CheckChannel("GetFastGapTime", Channel)) return(-1);

	intGap = this->GetParValue(Channel, "FASTGAP", ReadFromDSP);
	gapTime = ((Double_t) intGap) / 40;
	return(gapTime);
}

Bool_t TMrbDGF::SetThreshold(Int_t Channel, Int_t ADCThresh, Bool_t UpdateDSP) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::SetThreshold
// Purpose:        Set threshold
// Arguments:      Int_t Channel        -- channel number
//                 Int_t ADCThresh      -- threshold (ADC counts)
//                 Bool_t UpdateDSP     -- kTRUE if DSP is to be updated
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    Sets threshold.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	Int_t threshVal, fastLength;

	if (UpdateDSP && !this->CheckConnect("SetThreshold")) return(kFALSE);
	if (!this->CheckChannel("SetThreshold", Channel)) return(kFALSE);

	fastLength = this->GetParValue(Channel, "FASTLENGTH");

	this->SetParValue(Channel, "FASTADCTHR", ADCThresh, UpdateDSP);
	threshVal = ADCThresh * fastLength;
	this->SetParValue(Channel, "FASTTHRESH", threshVal);
 
	if (gMrbDGFData->fVerboseMode) {
		cout	<< this->ClassName() << "::SetThreshold(): FASTTHRESH"
				<< Channel << "=" << threshVal
				<< endl;
	}
	return(kTRUE);
}  

Int_t TMrbDGF::GetThreshold(Int_t Channel, Bool_t ReadFromDSP) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::GetThreshold
// Purpose:        Set threshold
// Arguments:      Int_t Channel        -- channel number
//                 Bool_t ReadFromDSP   -- kTRUE if param to be read from DSP
// Results:        Int_t Threshold      -- threshold
// Exceptions:
// Description:    Returns threshold value.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	if (ReadFromDSP && !this->CheckConnect("GetThreshold")) return(-1);
	if (!this->CheckChannel("GetThreshold", Channel)) return(-1);

	return(this->GetParValue(Channel, "FASTADCTHR", ReadFromDSP));
}  

Bool_t TMrbDGF::SetTau(Int_t Channel, Double_t Tau, Bool_t UpdateDSP) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::SetTau
// Purpose:        Set tau
// Arguments:      Int_t Channel        -- channel number
//                 Double Tau           -- tau
//                 Bool_t UpdateDSP     -- kTRUE if DSP is to be updated
// Results:        kFALSE/kTRUE
// Exceptions:
// Description:    Sets preamp tau.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	UInt_t PreAmpTau[2];

	if (UpdateDSP && !this->CheckConnect("SetTau")) return(kFALSE);
	if (!this->CheckChannel("SetTau", Channel)) return(kFALSE);

	this->ToFixedPoint(Tau, PreAmpTau);

	this->SetParValue(Channel, "PREAMPTAUA", PreAmpTau[0], UpdateDSP);
	this->SetParValue(Channel, "PREAMPTAUB", PreAmpTau[1], UpdateDSP);
	return(kTRUE);
}

Double_t TMrbDGF::GetTau(Int_t Channel, Bool_t ReadFromDSP) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::GetTau
// Purpose:        Get tau value
// Arguments:      Int_t Channel        -- channel number
//                 Bool_t ReadFromDSP   -- kTRUE if value is to be read from DSP
// Results:        kFALSE/kTRUE
// Exceptions:
// Description:    Returns preamp tau.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	UInt_t PreAmpTau[2];
	Double_t tau;

	if (ReadFromDSP && !this->CheckConnect("GetTau")) return(kFALSE);
	if (!this->CheckChannel("GetTau", Channel)) return(kFALSE);

	PreAmpTau[0] = this->GetParValue(Channel, "PREAMPTAUA", ReadFromDSP);
	PreAmpTau[1] = this->GetParValue(Channel, "PREAMPTAUB", ReadFromDSP);

	tau = this->FromFixedPoint(PreAmpTau);
	return(tau);
}

Bool_t TMrbDGF::SetBinning(Int_t Channel, Int_t EnBin, Bool_t UpdateDSP) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::SetBinning
// Purpose:        Set binning
// Arguments:      Int_t Channel       -- channel number
//                 Int_t EnBin         -- energy binning
//                 Bool_t UpdateDSP    -- kTRUE if DSP is to be updated
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    Sets binning values.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	Int_t val;

	if (UpdateDSP && !this->CheckConnect("SetBinning")) return(kFALSE);
	if (!this->CheckChannel("SetBinning", Channel)) return(kFALSE);

	val = (EnBin == 0) ? 0 : (65536 - EnBin);
	this->SetParValue(Channel, "LOG2EBIN", val);

	return(kTRUE);
}

Int_t TMrbDGF::ReadHistograms(TMrbDGFHistogramBuffer & Buffer, UInt_t ChannelPattern) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::ReadHistogram
// Purpose:        Read MCA data
// Arguments:      TMrbDGFHistogramBuffer   -- histogram buffer
//                 UInt_t ChannelPattern    -- pattern of active channels
// Results:        Int_t NofWords           -- number of words read
// Exceptions:
// Description:    Reads MCA data from DSP. Use ESONE server
//                 For XiaRelease = 2.0 (32k memory)
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	Int_t i, j, k, chn;
	UInt_t addr;
	Int_t wc;
	Int_t nofChannels;
	Int_t data;
	Int_t cTask;
	Int_t nofWords;
	TArrayI cData;
		
	if (!this->CheckConnect("ReadHistograms")) return(-1);
	if (!this->CheckActive("ReadHistograms")) return(-1);

	Buffer.Reset(); 						// reset buffer layout
	nofChannels = 0;						// calc number of DGF channels in use
	for (chn = 0; chn < TMrbDGFData::kNofChannels; chn++) {
		if (ChannelPattern & (1 << chn)) {
			Buffer.SetActive(chn, nofChannels);
			nofChannels++;
		}
	}
	Buffer.SetNofChannels(nofChannels);

	addr = this->GetParValue("AOUTBUFFER");
	wc = this->GetParValue("LOUTBUFFER");
	cData.Set(wc);

	nofWords = TMrbDGFData::kMCAPageSize * nofChannels;
	Buffer.SetSize(nofWords);		// size of energy region
	Buffer.Set(nofWords);			// reset data region
	
	Int_t fc = fCamac.HasFastCamac();
	if (fc == -1) fc = 0;

	k = 0;			// buffer index
	nofWords = 0;
	for (chn = 0; chn < TMrbDGFData::kNofChannels; chn++) {
		if (Buffer.IsActive(chn)) {
			this->SetParValue("HOSTIO", chn, kTRUE);
			for (j = 0; j < 8; j++) {
				this->SetParValue("RUNTASK", TMrbDGFData::kRunSlowControl, kTRUE);		// reprogram DACs
				cTask = (j == 0) ? TMrbDGFData::kReadHistoFirstPage : TMrbDGFData::kReadHistoNextPage;
				this->SetParValue("CONTROLTASK", cTask, kTRUE); 	// xfer histo page to i/o buffer
				this->StartRun();
				this->WaitActive(1);								// wait for xfer to complete
				this->WriteTSAR(addr); 							// read data from i/o buffer
				if (fCamac.BlockXfer(fCrate, fStation, A(0), F(0), cData, 0, wc, kTRUE) == -1) {	// xfer energies, 2 * 16 bits
					gMrbLog->Err()	<< fName << " in C" << fCrate << ".N" << fStation
									<< ".A0.F0: Reading histogram energies failed - DSPAddr=0x" << setbase(16) << addr
									<< setbase(10) << ", wc=" << wc << endl;
					gMrbLog->Flush(this->ClassName(), "ReadHistograms");
					return(-1);
				}
				nofWords += wc / 2;
				data = 0;
				for (i = 0; i < wc; i++) {
					if (i & 1) {
						data |= cData[i];
						Buffer[k] = (Int_t) data;
						k++;
					} else {
						data = cData[i] << 8;
					}
				}
			}
		}
	}
	return(nofWords);
}

Int_t TMrbDGF::ReadHistogramsViaRsh(TMrbDGFHistogramBuffer & Buffer, UInt_t ChannelPattern) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::ReadHistogramsViaRsh
// Purpose:        Read MCA data
// Arguments:      TMrbDGFHistogramBuffer   -- histogram buffer
//                 UInt_t ChannelPattern    -- pattern of active channels
// Results:        Int_t NofWords           -- number of words read
// Exceptions:
// Description:    Reads MCA data via remote shell.
//                 For XiaRelease = 2.0 (32k memory)
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	Int_t chn;
	Int_t nofChannels;
	Int_t nofWords;
		
	if (!this->CheckConnect("ReadHistogramsViaRsh")) return(-1);
	if (!this->CheckActive("ReadHistogramsViaRsh")) return(-1);

	Buffer.Reset(); 						// reset buffer layout
	nofChannels = 0;						// calc number of DGF channels in use
	for (chn = 0; chn < TMrbDGFData::kNofChannels; chn++) {
		if (ChannelPattern & (1 << chn)) {
			Buffer.SetActive(chn, nofChannels);
			nofChannels++;
		}
	}
	Buffer.SetNofChannels(nofChannels);

	nofWords = TMrbDGFData::kMCAPageSize * nofChannels;
	Buffer.SetSize(nofWords);		// size of energy region
	Buffer.Set(nofWords);			// reset data region
	
	TString datFile = this->GetName();			// store binary data in file <dgf>.histoDump.dat
	datFile += ".histoDump.dat";

	TString hdPgm = gEnv->GetValue("TMrbDGF.ProgramToDumpHistos", "$MARABOU/powerpc/bin/v22/histoDump");
	gSystem->ExpandPathName(hdPgm);
	TString hdPath = gSystem->Getenv("PWD");
	if (hdPath.IsNull()) hdPath = gSystem->WorkingDirectory();
	TString cmd = Form("rsh %s 'cd %s; %s %d %d %#x %s b q'",
							fCamacHost.Data(),
							hdPath.Data(),
							hdPgm.Data(),
							this->GetCrate(),
							this->GetStation(),
							ChannelPattern,
							datFile.Data());
	if (gMrbDGFData->fVerboseMode) {
		gMrbLog->Out()	<< "Calling program \"" << fCamacHost << ":" << hdPgm << "\" via rsh" << endl;
		gMrbLog->Flush(this->ClassName(), "ReadHistogramsViaRsh", setblue);
		gMrbLog->Out()	<< ">> " << cmd << " <<" << endl;
		gMrbLog->Flush(this->ClassName(), "ReadHistogramsViaRsh", setblue);
	}
	gSystem->Exec(cmd.Data());

	Bool_t fileOk = kFALSE;
	TString hsFile = ".";
	hsFile += datFile;
	hsFile += ".ok";
	for (Int_t i = 0; i < 100; i++) {			// wait for handshake file
		if (!gSystem->AccessPathName(hsFile.Data(), (EAccessMode) F_OK)) {
			fileOk = kTRUE;
			break;
		}
		gSystem->ProcessEvents();
		usleep(1000);
	}
	if (!fileOk) {
		gMrbLog->Err()	<< "Handshake error - can't open file " << hsFile << endl;
		gMrbLog->Flush(this->ClassName(), "ReadHistogramsViaRsh");
		return(-1);
	}
	TEnv * hdEnv = new TEnv(hsFile.Data());
	if (hdEnv->GetValue("HistoDump.Errors", 0) != 0) {
		gMrbLog->Err()	<< "Reading MCA data failed" << endl;
		gMrbLog->Flush(this->ClassName(), "ReadHistogramsViaRsh");
		delete hdEnv;
		return(-1);
	}
	nofWords = hdEnv->GetValue("HistoDump.NofDataWords", 0);
	if (nofWords != nofChannels * 32 * 1024) {
		gMrbLog->Err()	<< "Number of data words unexpected -  " << nofWords
						<< " (should be " << nofChannels << " * 32k = " << nofChannels * 32 * 1024 << ")" << endl;
		gMrbLog->Flush(this->ClassName(), "ReadHistogramsViaRsh");
		delete hdEnv;
		return(-1);
	}
	FILE * f = fopen(datFile.Data(), "r");
	if (f == NULL) {
		gMrbLog->Err() << gSystem->GetError() << " - " << datFile << endl;
		gMrbLog->Flush(this->ClassName(), "ReadHistogramsViaRsh");
	}
	fread(Buffer.GetArray(), nofChannels * 32 * 1024 * sizeof(UInt_t), 1, f);
	for (Int_t i = 0; i < nofChannels * 32 * 1024; i++) {
		Int_t d = Buffer[i];
		Int_t res  = (d >> 24) & 0xff;
		res += (d >> 8)  & 0xff00;
		res += (d << 8)  & 0xff0000;
		res += (d << 24) & 0xff000000;
		Buffer[i] = res;
	}
	delete hdEnv;
	return(nofWords);
}

Bool_t TMrbDGF::AccuHistograms(Int_t Time, const Char_t * Scale, UInt_t ChannelPattern) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::AccuHistograms
// Purpose:        Accumulate MCA histogram
// Arguments:      Int_t Time             -- measuring time
//                 Char_t * Scale         -- time scale ("s", "m", "h")
//                 UInt_t ChannelPattern  -- pattern of active channels
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    Starts a MCA accumulation.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	TString tScale;
	Int_t waitInv;
	Int_t secsToWait;
	
	TMrbLofNamedX timeScale;
	TMrbNamedX * tp;

	if (!this->CheckConnect("AccuHistograms")) return(kFALSE);
	if (!this->CheckChannelMask("AccuHistograms")) return(kFALSE);

	timeScale.AddNamedX(kMrbAccuTimeScale);
	tp = timeScale.FindByName(Scale, TMrbLofNamedX::kFindUnique | TMrbLofNamedX::kFindIgnoreCase);
	if (tp == NULL) {
		gMrbLog->Err() << "Illegal time scale - " << Scale
				<< " (should be \"secs\", \"mins\", or \"hours\")" << endl;
		gMrbLog->Flush(this->ClassName(), "AccuHistograms");
		return(kFALSE);
	}
	tScale = tp->GetName();
	waitInv = tp->GetIndex();
	secsToWait = Time * waitInv;
	
	if (!this->AccuHist_Init(ChannelPattern)) return(kFALSE);
	if (!this->AccuHist_Start()) return(kFALSE);
	if (!this->AccuHist_Stop(secsToWait)) return(kFALSE);
	this->RestoreParams(kSaveAccuHist);
	return(kTRUE);
}

Bool_t TMrbDGF::AccuHist_Init(UInt_t ChannelPattern) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::AccuHist_Init
// Purpose:        Initialize histogramming
// Arguments:      UInt_t ChannelPattern  -- pattern of active channels
// Results:        kTRUE/kFALSE
//////////////////////////////////////////////////////////////////////////////

	Int_t chn;
	UInt_t csr;
	Bool_t sts;

	if (!this->CheckConnect("AccuHistograms")) return(kFALSE);

	this->SaveParams(kSaveAccuHist);

	for (chn = 0; chn < TMrbDGFData::kNofChannels; chn++) {
		if (ChannelPattern & (1 << chn)) {
			if (this->IsCore(chn)) {
				csr =		TMrbDGFData::kGroupTriggerOnly
						|	TMrbDGFData::kEnableTrigger
						|	TMrbDGFData::kTriggerPositive
						|	TMrbDGFData::kGoodChannel
						|	TMrbDGFData::kHistoEnergies;
			} else {
				csr =		TMrbDGFData::kGroupTriggerOnly
						|	TMrbDGFData::kReadAlways
						|	TMrbDGFData::kGoodChannel
						|	TMrbDGFData::kHistoEnergies;
			}
			this->SetChanCSRA(chn, csr, TMrbDGF::kBitSet, kTRUE);
		} else {
			this->SetChanCSRA(chn, TMrbDGFData::kChanCSRAMask, TMrbDGF::kBitClear, kTRUE);
		}
		this->SetParValue(chn, "TRACELENGTH", 0);
		this->SetParValue(chn, "TRIGGERDELAY", 1);
		this->SetParValue(chn, "PAFLENGTH", 9);
	}

 	this->SetParValue("MODCSRA", 0);
 	this->SetParValue("MODCSRB", 0);
 	this->SetParValue("MAXEVENTS", 0);
 	this->SetParValue("SYNCHWAIT", 0);
 	this->SetParValue("INSYNCH", 1);
 	this->SetParValue("COINCPATTERN", 0xffff);
 	this->SetParValue("COINCWAIT", 40);

	sts = this->WriteParamMemory(kTRUE);
	if (!sts) this->RestoreParams(kSaveAccuHist);
	return(sts);
}

Bool_t TMrbDGF::AccuHist_Start(Bool_t ClearMCA) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::AccuHist_Start
// Purpose:        Start histogramming
// Results:        kTRUE/kFALSE
//////////////////////////////////////////////////////////////////////////////

	this->SetParValue("RUNTASK", TMrbDGFData::kRunMCA, kTRUE);
	this->StartRun(ClearMCA);			// start (+ clear)
	fStatusW = TMrbDGF::kWaitActive;
	return(kTRUE);
}

Bool_t TMrbDGF::AccuHist_Stop(Int_t SecsToWait) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::AccuHist_Stop
// Purpose:        Stop histogramming
// Results:        kTRUE/kFALSE
//////////////////////////////////////////////////////////////////////////////

	fSecsToWait = SecsToWait;
	if (fSecsToWait > 0) {
		fAccuTimer = new TTimer(this, 1000, kFALSE);
		fAccuTimer->Start();
		fStopWatch = 0;
	} else {
		this->StopRun();
		this->RestoreParams(kSaveAccuHist);
	}
	return(kTRUE);
}

Bool_t TMrbDGF::HandleTimer(TTimer * Timer) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::AccuHist_Stop
// Purpose:        Stop histogramming
// Results:        kTRUE/kFALSE
//////////////////////////////////////////////////////////////////////////////

	fStopWatch++;

	Bool_t stopIt = (fStopWatch > fSecsToWait);

	if (this->IsAborted()) {
		gMrbLog->Err() << "Aborted after " << fStopWatch << " secs. Stopping current run." << endl;
		gMrbLog->Flush(this->ClassName(), "HandleTimer");
		fStatusW = TMrbDGF::kWaitAborted;
		stopIt = kTRUE;
	}

	if (stopIt) {
		Timer->Stop();
		this->StopRun();
		this->RestoreParams(kSaveAccuHist);
	}

	return(kTRUE);
}

Int_t TMrbDGF::GetTrace(TMrbDGFEventBuffer & Buffer, Int_t TraceLength,
								UInt_t ChannelPattern, Int_t XwaitStates, Bool_t AutoTrigFlag) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::GetTrace
// Purpose:        Perform tracing
// Arguments:      TMrbDGFEventBuffer & Buffer    -- where to store trace data
//                 Int_t TraceLength              -- trace length
//                 UInt_t ChannelPattern          -- channel pattern
//                 Int_t XwaitStates              -- extra wait states
//                 Bool_t AutoTrigFlag            -- kTRUE: enable trigger for each active channel
//                                                -- kFALSE: use trigger settings as found
// Results:        Int_t NofTraceData             -- number of trace data taken
// Exceptions:
// Description:    Get trace from module.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	if (!this->GetTrace_Init(TraceLength, ChannelPattern, XwaitStates, AutoTrigFlag)) return(-1);
	if (!this->GetTrace_Start()) return(-1);
	return(this->GetTrace_Stop(Buffer));
}

Bool_t TMrbDGF::GetTrace_Init(Int_t TraceLength, UInt_t ChannelPattern, Int_t XwaitStates, Bool_t AutoTrigFlag) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::GetTrace_Init
// Purpose:        Initialize tracing
// Results:        kTRUE/kFALSE
//////////////////////////////////////////////////////////////////////////////

	Int_t nofWords;
	Bool_t sts;
	Int_t nofChannels;
	
	if (!this->CheckConnect("GetTrace")) return(kFALSE);
	
	this->SaveParams(TMrbDGF::kSaveTrace);			// save current settings
	
	this->SetParValue("MAXEVENTS", 1);
 	this->SetParValue("SYNCHWAIT", 0);
 	this->SetParValue("INSYNCH", 1);
 	this->SetParValue("COINCPATTERN", 0xffff);
 	this->SetCoincWait();
  
	SetParValue("MODCSRB", 0);
	for (Int_t i = 0; i < TMrbDGFData::kNofChannels; i++) SetParValue(i, "CHANCSRB", 0);
	nofChannels = 0;
	for (Int_t chn = 0; chn < TMrbDGFData::kNofChannels; chn++) {
		if (ChannelPattern & (1 << chn)) {
			if (AutoTrigFlag) {
				this->SetChanCSRA(chn,	TMrbDGFData::kEnableTrigger |
												TMrbDGFData::kGoodChannel
												| TMrbDGFData::kGroupTriggerOnly
												| TMrbDGFData::kReadAlways,
												TMrbDGF::kBitOr, kTRUE);
				this->SetChanCSRA(chn,	TMrbDGFData::kGFLTValidate,
												TMrbDGF::kBitClear, kTRUE);
			}
			this->SetParValue(chn, "TRACELENGTH", TraceLength);
			this->SetParValue(chn, "XWAIT", XwaitStates);
			nofChannels++;
		} else {
			this->SetChanCSRA(chn,	TMrbDGFData::kEnableTrigger |
											TMrbDGFData::kGoodChannel,
											TMrbDGF::kBitClear, kTRUE);
			this->SetParValue(chn, "TRACELENGTH", 0);
			this->SetParValue(chn, "XWAIT", 0);
		}
	}

#if 0
	Int_t ngc = this->GetNofGoodChannels();
	if (ngc != nofChannels) {
		gMrbLog->Err()	<< fName << " in C" << fCrate << ".N" << fStation
						<< ": Wrong number of good channels - "
						<< ngc << " (should be " << nofChannels << ")" << endl;
		gMrbLog->Flush(this->ClassName(), "GetTrace");
		this->RestoreParams(TMrbDGF::kSaveTrace);
		return(kFALSE);
	}
#endif

	nofWords = TMrbDGFEventBuffer::kBufHeaderLength + TMrbDGFEventBuffer::kEventHeaderLength;
	nofWords += nofChannels * (TMrbDGFEventBuffer::kChanHeaderLength + TraceLength);

	if (!this->CheckBufferSize("GetTrace", nofWords)) {
		this->RestoreParams(TMrbDGF::kSaveTrace);
		return(kFALSE);
	}

	sts = this->WriteParamMemory();
	if (!sts) this->RestoreParams(TMrbDGF::kSaveTrace);
	return(sts);
}

Bool_t TMrbDGF::GetTrace_Start() {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::GetTrace_Start
// Purpose:        Start tracing
// Results:        kTRUE/kFALSE
//////////////////////////////////////////////////////////////////////////////

	this->SetParValue("RUNTASK", TMrbDGFData::kRunStdListMode, kTRUE);
	this->StartRun();
	return(kTRUE);
}

Int_t TMrbDGF::GetTrace_Stop(TMrbDGFEventBuffer & Buffer, Int_t SecsToWait) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::GetTrace_Read
// Purpose:        Stop tracing and read data
// Results:        Int_t NofWords   -- number of trace data read
//////////////////////////////////////////////////////////////////////////////

	Int_t nofWords;

	if (SecsToWait > 0) {
		sleep(1);
		this->WaitActive(SecsToWait);
	}
	this->StopRun();
	this->RestoreParams(TMrbDGF::kSaveTrace);
	if (this->GetWaitStatus() != TMrbDGF::kWaitOk) return(-1);
	nofWords = this->ReadEventBuffer(Buffer);
	Buffer.SetTraceError(0);
	return(nofWords);
}

Int_t TMrbDGF::GetUntrigTrace(TArrayI & Buffer, UInt_t ChannelPattern, Int_t XwaitStates) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::GetUntrigTrace
// Purpose:        Get a untriggered trace
// Arguments:      TArrayI & Buffer               -- where to store trace data
//                 UInt_t ChannelPattern          -- channel pattern
//                 Int_t XwaitStates              -- extra wait states
// Results:        Int_t NofTraceData             -- number of trace data taken
// Exceptions:
// Description:    Takes data from an untriggered trace.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	Int_t nofWords, n;

	if (!this->GetUntrigTrace_Init(Buffer, ChannelPattern, XwaitStates)) return(-1);

	nofWords = 0;
	for (Int_t chn = 0; chn < TMrbDGFData::kNofChannels; chn++) {
		if (ChannelPattern & (1 << chn)) {
			if (!this->GetUntrigTrace_Start(chn)) return(-1);
			if ((n = this->GetUntrigTrace_Stop(chn, Buffer)) != -1) nofWords += n;
		}
	}
	this->GetUntrigTrace_Restore();
	return(nofWords);
}

Bool_t TMrbDGF::GetUntrigTrace_Init(TArrayI & Buffer, UInt_t ChannelPattern, Int_t XwaitStates) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::GetUntrigTrace_Init
// Purpose:        Initialize untriggered trace
// Results:        kTRUE/kFALSE
//////////////////////////////////////////////////////////////////////////////

	Int_t deltaT, xWait;
	Int_t unuseda;
	Bool_t sts;
		
	if (!this->CheckConnect("GetUntrigTrace")) return(kFALSE);
	
	this->SaveParams(TMrbDGF::kSaveUntrigTrace);						// save current settings

	if (XwaitStates <= 3) {
		xWait = XwaitStates;
		deltaT = 3;
	} else if (XwaitStates <= 5) {
		xWait = XwaitStates;
		deltaT = xWait;
	} else if (XwaitStates <= 11) {
		xWait = XwaitStates;
		deltaT = xWait + 3;
	} else {
		xWait = (XwaitStates + 3) / 4;
		xWait *= 4;
		deltaT = xWait + 3;
	}
	for (Int_t chn = 0; chn < TMrbDGFData::kNofChannels; chn++) {
		if (ChannelPattern & (1 << chn)) {
			this->SetParValue(chn, "XWAIT", xWait);
			unuseda = (deltaT >= 11) ? (Int_t) (floor(65536. / ((deltaT - 3) /4 ))) : 0;
			this->SetParValue(chn, "UNUSEDA", unuseda);
		}
	}
	Buffer.Reset();
	Buffer.Set(TMrbDGFData::kUntrigTraceLength * TMrbDGFData::kNofChannels);

	sts = this->WriteParamMemory();
	if (!sts) this->RestoreParams(TMrbDGF::kSaveUntrigTrace);
	return(sts);
}

Bool_t TMrbDGF::GetUntrigTrace_Start(Int_t Channel) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::GetUntrigTrace_Start
// Purpose:        Start untriggered trace for a given channel
// Results:        kTRUE/kFALSE
//////////////////////////////////////////////////////////////////////////////

	this->SetParValue("HOSTIO", Channel, kTRUE);
	this->SetParValue("RUNTASK", TMrbDGFData::kRunSlowControl, kTRUE);
	this->SetParValue("CONTROLTASK", TMrbDGFData::kSampleADCs, kTRUE);
	this->StartRun();
	return(kTRUE);
}

Int_t TMrbDGF::GetUntrigTrace_Stop(Int_t Channel, TArrayI & Buffer, Int_t SecsToWait) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::GetUntrigTrace_Stop
// Purpose:        Stop untriggered trace and read data
// Results:        Int_t NofWords   -- number of words read
//////////////////////////////////////////////////////////////////////////////

	UInt_t addr;
	Int_t wc;
	Int_t offset;
	Int_t data;
	TArrayI cData;

	if (SecsToWait > 0) {
		sleep(1);
		this->WaitActive(SecsToWait);
	}
	this->StopRun();

	if (this->GetWaitStatus() != TMrbDGF::kWaitOk) return(-1);

	addr = this->GetParValue("AOUTBUFFER");
	wc = this->GetParValue("LOUTBUFFER");
	this->WriteTSAR(addr);

	cData.Set(wc);
	if (fCamac.BlockXfer(fCrate, fStation, A(0), F(0), cData, 0, wc, kTRUE) == -1) {
		gMrbLog->Err()	<< fName << " in C" << fCrate << ".N" << fStation
						<< ".A0.F0: Reading untriggered traces failed - DSPAddr=0x" << setbase(16) << addr
						<< setbase(10) << ", wc=" << wc << ", ActionCount=-1" << endl;
		gMrbLog->Flush(this->ClassName(), "GetUntrigTrace");
		return(-1);
	}

	offset = Channel * wc;
	Int_t min = 1000000;
	Int_t max = 0;
	for (Int_t i = 0; i < wc; i++) {
		data = cData[i];
		if (data > max) max = data;
		if (data < min) min = data;
		Buffer[i + offset] = data;
	}
	if (min == max) {
		gMrbLog->Err()	<< fName << " in C" << fCrate << ".N" << fStation << " (channel " << Channel
						<< ") - data const = " << min << endl;
		gMrbLog->Flush(this->ClassName(), "GetUntrigTrace");
	}
	return(wc);
}

Bool_t TMrbDGF::GetUntrigTrace_Restore() {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::GetUntrigTrace_Restore
// Purpose:        Restore settings after untrig trace
// Results:        
//////////////////////////////////////////////////////////////////////////////

	this->RestoreParams(TMrbDGF::kSaveUntrigTrace);
	return(kTRUE);
}

Int_t TMrbDGF::GetDacRamp(TArrayI & Buffer) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::GetDacRamp
// Purpose:        Calibrate dac offsets
// Arguments:      TArrayI & Buffer               -- where to store trace data
// Results:        Int_t nofWords                 -- number of data words
// Exceptions:
// Description:    Starts a ramp cycle.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	if (!this->GetDacRamp_Init()) return(-1);
	if (!this->GetDacRamp_Start()) return(-1);
	return(this->GetDacRamp_Stop(Buffer));
}

Bool_t TMrbDGF::GetDacRamp_Init() {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::GetDacRamp_Init
// Purpose:        Initialize ramp
// Results:        kTRUE/kFALSE
//////////////////////////////////////////////////////////////////////////////

	Bool_t sts;

	if (!this->CheckConnect("GetDacRamp")) return(kFALSE);
	
	this->SaveParams(TMrbDGF::kSaveDacRamp);			// save current settings
	
	for (Int_t chn = 0; chn < TMrbDGFData::kNofChannels; chn++) {
		this->SetParValue(chn, "FASTTHRESH", 1020);
		this->SetParValue(chn, "FASTADCTHR", 255);
		this->SetParValue(chn, "BLCUT", 0);
	}
	sts = this->WriteParamMemory();
	if (!sts) this->RestoreParams(TMrbDGF::kSaveDacRamp);
	return(sts);
}
	
Bool_t TMrbDGF::GetDacRamp_Start() {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::GetDacRamp_Start
// Purpose:        Start ramp
// Results:        kTRUE/kFALSE
//////////////////////////////////////////////////////////////////////////////

	this->SetParValue("RUNTASK", TMrbDGFData::kRunSlowControl, kTRUE);
	this->SetParValue("CONTROLTASK", TMrbDGFData::kCalibrate, kTRUE);
	this->StartRun();
	return(kTRUE);
}

Int_t TMrbDGF::GetDacRamp_Stop(TArrayI & Buffer, Int_t SecsToWait) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::GetDacRamp_Stop
// Purpose:        Stop ramp and read data
// Results:        Int_t NofWords  -- number of words read
//////////////////////////////////////////////////////////////////////////////

	UInt_t addr;
	Int_t wc;
		
	this->WaitActive(SecsToWait);
	this->StopRun();
	this->RestoreParams(TMrbDGF::kSaveDacRamp);		// restore current settings
	
	Buffer.Reset();

	addr = this->GetParValue("AOUTBUFFER");
	wc = this->GetParValue("LOUTBUFFER");
	Buffer.Set(wc);
	this->WriteTSAR(addr);

	if (fCamac.BlockXfer(fCrate, fStation, A(0), F(0), Buffer, 0, wc, kTRUE) == -1) {
		gMrbLog->Err()	<< fName << " in C" << fCrate << ".N" << fStation
						<< ".A0.F0: Reading DAC values failed - DSPAddr=0x" << setbase(16) << addr
						<< setbase(10) << ", wc=" << wc << endl;
		gMrbLog->Flush(this->ClassName(), "GetDacRamp");
		return(-1);
	}

	return(wc);
}

Double_t TMrbDGF::TauFit(Int_t Channel, Int_t NofTraces, Int_t TraceLength,
													Double_t A0, Double_t A1,
													Int_t From, Int_t To,
													Stat_t TraceError, Stat_t ChiSquare, Bool_t DrawIt) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::TauFit
// Purpose:        Perform fit on tau distribution
// Arguments:      Int_t Channel        -- channel number
//                 Int_t NofTraces      -- number of traces to collect
//                 Int_t TraceLength    -- trace length
//                 Double_t A0          -- start value for a(0)
//                 Double_t A1          -- start value for a(1)
//                 Int_t From           -- fit region, lower limit
//                 Int_t To             -- fit region, upper limit
//                 Stat_t TraceError    -- const error for trace data
//                 Stat_t ChiSquare     -- chi square
//                 Bool_t DrawIt        -- draw histo + fit
// Results:        Double_t Tau         -- resulting tau value
// Exceptions:
// Description:    Collects the given number of traces and performs a tau fit.
//                 Stores tau values in a histogram and fits results with a gaussian.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	TMrbDGFEventBuffer buffer;
	Int_t i, j;
	Int_t bs, nt;
	Double_t tau, tauSum, tauMean;
	Int_t nofTraces, nofGoodTaus, nofBadTaus;
	TString fitOpt;
	ofstream hList, hGood, hBad;
	TMrbString hln;

	if (!this->CheckConnect("TauFit")) return(-1);
	if (!this->CheckChannel("TauFit", Channel)) return(-1);
	if (!this->CheckChannelMask("TauFit")) return(-1);

	if (this->GetNofGoodChannels() != 1) {
		gMrbLog->Err() << "Can't fit more than 1 channel" << endl;
		gMrbLog->Flush(this->ClassName(), "TauFit");
		return(-1);
	}

	this->SaveParams(TMrbDGF::kSaveTaufit); 		// save current settings

	buffer.SetModule(this); 	// connect to dgf module
	
	bs = this->GetParValue("LOUTBUFFER", kTRUE);
	nt = bs / (TraceLength + TMrbDGFEventBuffer::kTotalHeaderLength);
	if (nt == 0) {
		gMrbLog->Err()	<< "Illegal trace length - " << TraceLength
						<< " (+ " << TMrbDGFEventBuffer::kTotalHeaderLength
						<< " header words), buffer size = " << bs << endl;
		gMrbLog->Flush(this->ClassName(), "TauFit");
		this->RestoreParams(TMrbDGF::kSaveTaufit);
		return(-1);
	}

	this->SetChanCSRA(Channel,
						TMrbDGFData::kGoodChannel |
						TMrbDGFData::kEnableTrigger,
						TMrbDGF::kBitOr, kTRUE);

	this->SetParValue("MAXEVENTS", nt);
 	this->SetParValue("SYNCHWAIT", 0);
 	this->SetParValue("INSYNCH", 1);
 	this->SetParValue("COINCPATTERN", 0xffff);
 	this->SetCoincWait();
  
	this->SetParValue(Channel, "TRACELENGTH", TraceLength);

	this->WriteParamMemory();

	this->SetParValue("RUNTASK", TMrbDGFData::kRunStdListMode, kTRUE);

	if (fTauDistr) {
		gROOT->GetList()->Remove(fTauDistr);
		delete fTauDistr;
	}

	fTauDistr = new TH1F("hTau", "tau distribution", 100, 0., 100.);

	buffer.SetTraceError(TraceError);

	TFile * f = new TFile("tau.root", "RECREATE");
	gSystem->Exec("rm -f tau-*.histlist");

	cout	<< this->ClassName() << "::TauFit(): Collecting " << NofTraces << " traces (chi2 < " << ChiSquare
			<< ") - wait " << ends << flush;
	tauSum = 0;
	nofTraces = 0;
	nofGoodTaus = 0;
	nofBadTaus = 0;
	for (i = 0; i < NofTraces; i += nt) {
		cout	<< "." << ends << flush;
		this->StartRun();
		this->WaitActive(10);
		this->StopRun();
		if (this->ReadEventBuffer(buffer) > 0) {
			for (j = 0; j < buffer.GetNofEvents(); j++) {
				nofTraces++;
				tau = buffer.CalcTau(j, Channel, nofTraces, A0, A1, From, To, kFALSE, kTRUE);
				if ((nofTraces % 16) == 1) {
					if (nofTraces != 1) hList.close();
					hln = "tau-";
					hln += nofTraces;
					hln += ".histlist";
					hList.open(hln.Data(), ios::out);
				}
				buffer.Histogram()->Write();
				hList << "tau.root " << buffer.Histogram()->GetName() << endl;
				if (buffer.Fit()->GetChisquare() < ChiSquare) {
					nofGoodTaus++;
					if ((nofGoodTaus % 16) == 1) {
						if (nofGoodTaus != 1) hGood.close();
						hln = "tau-good-"; hln += nofGoodTaus; hln += ".histlist";
						hGood.open(hln.Data(), ios::out);
					}
					hGood << "tau.root " << buffer.Histogram()->GetName() << endl;
					tauSum += tau;
					fTauDistr->Fill((Axis_t) tau, 1.);
				} else {
					nofBadTaus++;
					if ((nofBadTaus % 16) == 1) {
						if (nofBadTaus != 1) hBad.close();
						hln = "tau-bad-"; hln += nofBadTaus; hln += ".histlist";
						hBad.open(hln.Data(), ios::out);
					}
					hBad << "tau.root " << buffer.Histogram()->GetName() << endl;
				}
			}
		} else if (this->GetWaitStatus() != TMrbDGF::kWaitOk) return(-1);
	}
	cout	<< " done." << endl;

	this->RestoreParams(TMrbDGF::kSaveTaufit);			// restore current settings

	tauMean = tauSum / nofGoodTaus;
	fGaussian = new TF1("fTau", "gaus", tauMean - 6, tauMean + 6);
	fGaussian->SetParameters(tauSum, tauMean, 3);
	fGaussian->SetParName(0,"gaus_const");
	fGaussian->SetParName(1,"gaus_mean");
	fGaussian->SetParName(2,"gaus_sigma");
	fGaussian->SetLineColor(4);
	fGaussian->SetLineWidth(3);

	if (DrawIt) fTauDistr->Draw();

	fitOpt = "R";
	if (!DrawIt) fitOpt += "N";
	fitOpt += "+";
	fTauDistr->Fit("fTau", fitOpt, "SAME");

	fTauDistr->Write();
	f->Close();
	hList.close();
	hGood.close();
	hBad.close();

	tau = fGaussian->GetParameter(1);

	if (gMrbDGFData->fVerboseMode) {
		gMrbLog->Out() << "Fitted tau value = " << tau << endl;
		gMrbLog->Flush(this->ClassName(), "TauFit", setblue);
	}
	return(tau);
}

TMrbDGF::EMrbWaitStatus TMrbDGF::WaitActive(Int_t Timeout) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::WaitActive
// Purpose:        Wait for active bit to drop
// Arguments:      Int_t Timeout    -- timeout in seconds
// Results:        Status: error, timeout, abort, ok
// Exceptions:
// Description:    Waits until bit TMrbDGFData::kActive disapears in the csr.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	UInt_t csr;
	time_t start;

	fStatusW = TMrbDGF::kWaitActive;
	
	start = time(NULL);
	for (;;) {
		csr = this->ReadCSR();
		if (csr == 0xffffffff) {
			gMrbLog->Err()	<< fName << " in C" << fCrate << ".N" << fStation
							<< ": Unexpected error. Giving up." << endl;
			gMrbLog->Flush(this->ClassName(), "WaitActive");
			fStatusW = TMrbDGF::kWaitError;
			break;
		}
		if ((csr & TMrbDGFData::kActive) == 0) {
			fStatusW = TMrbDGF::kWaitOk;
			break;
		}

		gSystem->ProcessEvents();
		if (this->IsAborted()) {
			gMrbLog->Err()	<< fName << " in C" << fCrate << ".N" << fStation
							<< ": Aborted after " << (time(NULL) - start) << " secs. Stopping current run." << endl;
			gMrbLog->Flush(this->ClassName(), "WaitActive");
			fStatusW = TMrbDGF::kWaitAborted;
			break;
		}
		if ((time(NULL) - start) > Timeout) {
			gMrbLog->Err()	<< fName << " in C" << fCrate << ".N" << fStation
							<< ": Timed out after " << Timeout << " secs" << endl;
			gMrbLog->Flush(this->ClassName(), "WaitActive");
			fStatusW = TMrbDGF::kWaitTimedOut;
			break;
		}
	}
	return(fStatusW);
}

TMrbDGF::EMrbWaitStatus TMrbDGF::WaitLAM(Int_t Timeout) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::WaitLAM
// Purpose:        Wait for LAM
// Arguments:      Int_t Timeout    -- timeout in seconds
// Results:        Status: error, timeout, abort, ok
// Exceptions:
// Description:    Waits until bit TMrbDGFData::kLAMActive shows up in the csr.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	UInt_t csr;
	time_t start;

	fStatusW = TMrbDGF::kWaitForLAM;
	
	start = time(NULL);
	for (;;) {
		csr = this->ReadCSR();
		if (csr == 0xffffffff) {
			gMrbLog->Err()	<< fName << " in C" << fCrate << ".N" << fStation
							<< ": Unexpected error. Giving up." << endl;
			gMrbLog->Flush(this->ClassName(), "WaitLAM");
			fStatusW = TMrbDGF::kWaitError;
			break;
		}
		if ((csr & TMrbDGFData::kLAMActive) != 0) {
			fStatusW = TMrbDGF::kWaitOk;
			break;
		}

		gSystem->ProcessEvents();
		if (this->IsAborted()) {
			gMrbLog->Err()	<< fName << " in C" << fCrate << ".N" << fStation
							<< ": Aborted after " << (time(NULL) - start) << " secs. Stopping current run." << endl;
			gMrbLog->Flush(this->ClassName(), "WaitLAM");
			fStatusW = TMrbDGF::kWaitAborted;
			break;
		}
		if ((time(NULL) - start) > Timeout) {
			gMrbLog->Err()	<< fName << " in C" << fCrate << ".N" << fStation
							<< ": Timed out after " << Timeout << " secs" << endl;
			gMrbLog->Flush(this->ClassName(), "WaitLAM");
			fStatusW = TMrbDGF::kWaitTimedOut;
			break;
		}
	}
	return(fStatusW);
}

Bool_t TMrbDGF::CheckConnect(const Char_t * Method) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::CheckConnect
// Purpose:        Check if connected to CAMAC
// Arguments:      Char_t * Method      -- calling method
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    Checks connection to CAMAC, outputs error message if not connected.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	if (IsConnected()) return(kTRUE);

	gMrbLog->Err() << this->GetTitle() << " - assigned to host " << fCamacHost << ", but NOT connected" << endl;
	gMrbLog->Flush(this->ClassName(), Method);
	return(kFALSE);
}

Bool_t TMrbDGF::CheckActive(const Char_t * Method) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::CheckActive
// Purpose:        Check if active bit set
// Arguments:      Char_t * Method      -- calling method
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    Checks if bit "ACTIVE" is set in CSR.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	UInt_t csr;

	return(kTRUE);
	
	csr = this->ReadCSR();
	if (csr == 0xffffffff) {
		gMrbLog->Err() << "Unexpected error. Giving up." << endl;
		gMrbLog->Flush(this->ClassName(), "CheckActive");
		return(kFALSE);
	}
	if ((csr & TMrbDGFData::kActive) != 0) {
		gMrbLog->Err() << this->GetTitle() << " is active - access is refused" << endl;
		gMrbLog->Flush(this->ClassName(), Method);
		return(kFALSE);
	}
	return(kTRUE);
}

Bool_t TMrbDGF::CheckChannel(const Char_t * Method, Int_t Channel) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::CheckChannel
// Purpose:        Check channel number
// Arguments:      Char_t * Method      -- calling method
//                 Int_t Channel        -- channel number
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    Checks if channel number is legal (0 ... 3)
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	if (Channel >= 0 && Channel < TMrbDGFData::kNofChannels) return(kTRUE);

	gMrbLog->Err() << this->GetTitle() << " - illegal channel number " << Channel << endl;
	gMrbLog->Flush(this->ClassName(), Method);
	return(kFALSE);
}

Bool_t TMrbDGF::CheckChannelMask(const Char_t * Method) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::CheckChannelMask
// Purpose:        Check channel mask
// Arguments:      Char_t * Method      -- calling method
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    Checks if any channel is active.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	if (this->GetChannelMask() == 0) {
		gMrbLog->Err() << this->GetTitle() << " - no good (=active) channels" << endl;
		gMrbLog->Flush(this->ClassName(), Method);
		return(kFALSE);
	} else return(kTRUE);
}

Bool_t TMrbDGF::CheckTriggerMask(const Char_t * Method) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::CheckTriggerMask
// Purpose:        Check trigger mask
// Arguments:      Char_t * Method      -- calling method
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    Checks if any trigger defined.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	if (this->GetTriggerMask() == 0) {
		gMrbLog->Err() << this->GetTitle() << " - no trigger channels" << endl;
		gMrbLog->Flush(this->ClassName(), Method);
		return(kFALSE);
	} else return(kTRUE);
}

Bool_t TMrbDGF::SetTriggerMask(UInt_t ChannelMask, Int_t Polarity, Bool_t UpdateDSP) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::SetTriggerMask
// Purpose:        Set mask of trigger channels
// Arguments:      UInt_t ChannelMask     -- channel mask
//                 Int_t Polarity         -- trigger polarity (+1/-1)
//                 Bool_t UpdateDSP       -- kTRUE: write data to DSP
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    Set pattern of trigger channels.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	EMrbBitOp bitOp;

	if (UpdateDSP && !this->CheckConnect("SetTriggerMask")) return(kFALSE);

	if ((ChannelMask & 0xfffffff0) != 0) {
		gMrbLog->Err() << "Illegal mask bits - 0x" << setbase(16) << ChannelMask << setbase(10) << endl;
		gMrbLog->Flush(this->ClassName(), "SetTriggerMask");
		return(kFALSE);
	}

	if (Polarity == 1)			bitOp = kBitOr;
	else if (Polarity == -1)	bitOp = kBitClear;
	else {
		gMrbLog->Err() << "Illegal trigger polarity - " << Polarity << " (should be +1/-1)" << endl;
		gMrbLog->Flush(this->ClassName(), "SetTriggerMask");
		return(kFALSE);
	}
	
	for (Int_t chn = 0; chn < TMrbDGFData::kNofChannels; chn++) {
		if (ChannelMask & 1) {
			this->SetChanCSRA(chn, TMrbDGFData::kEnableTrigger, kBitOr, UpdateDSP);
			this->SetChanCSRA(chn, TMrbDGFData::kTriggerPositive, bitOp, UpdateDSP);
		} else {
			this->SetChanCSRA(chn, TMrbDGFData::kEnableTrigger | TMrbDGFData::kTriggerPositive, kBitClear, UpdateDSP);
		}
		ChannelMask >>= 1;
	}

	return(kTRUE);
}

Bool_t TMrbDGF::SetTriggerMask(const Char_t * ChannelMask, const Char_t * Polarity, Bool_t UpdateDSP) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::SetTriggerMask
// Purpose:        Set mask of trigger channels
// Arguments:      const Char_t * ChannelMask     -- channel mask
//                 const Char_t * Polarity        -- trigger polarity
//                 Bool_t UpdateDSP               -- kTRUE: write data to DSP
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    Set pattern of good (=active) channels. Format: any out of "0123"
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	TString cMask, cIds, c;
	UInt_t channelMask;
	Int_t n;
	Int_t lng;
	TMrbLofNamedX trigPol;
	TMrbNamedX * tp;

	if (UpdateDSP && !this->CheckConnect("SetTriggerMask")) return(kFALSE);

	trigPol.AddNamedX(kMrbTriggerPolarity);
	tp = trigPol.FindByName(Polarity, TMrbLofNamedX::kFindUnique | TMrbLofNamedX::kFindIgnoreCase);
	if (tp == NULL) {
		gMrbLog->Err() << "Illegal trigger polarity - " << Polarity << " (should be \"pos\" or \"neg\")" << endl;
		gMrbLog->Flush(this->ClassName(), "SetTriggerMask");
		return(kFALSE);
	}

	cIds = "0123";

	cMask = ChannelMask;
	lng = cMask.Length();
	if (lng == 0 || lng > TMrbDGFData::kNofChannels) {
		gMrbLog->Err() << "Illegal channel mask - " << ChannelMask << endl;
		gMrbLog->Flush(this->ClassName(), "SetChannelMask");
		return(kFALSE);
	}

	channelMask = 0;
	for (Int_t i = 0; i < lng; i++) {
		c = cMask(i);
		n = cIds.Index(c, 0);
		if (n == -1) {
			gMrbLog->Err() << "Illegal channel number - " << c << " (ignored)" << endl;
			gMrbLog->Flush(this->ClassName(), "SetChannelMask");
		} else {
			channelMask |= 1 << n;
		}
	}
	return(this->SetTriggerMask(channelMask, tp->GetIndex(), UpdateDSP));
}

Bool_t TMrbDGF::SetTriggerMask(UInt_t ChannelMask, const Char_t * Polarity, Bool_t UpdateDSP) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::SetTriggerMask
// Purpose:        Set mask of trigger channels
// Arguments:      UInt_t ChannelMask             -- channel mask
//                 const Char_t * Polarity        -- trigger polarity
//                 Bool_t UpdateDSP               -- kTRUE: write data to DSP
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    Set pattern of good (=active) channels.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	TMrbLofNamedX trigPol;
	TMrbNamedX * tp;

	if (UpdateDSP && !this->CheckConnect("SetTriggerMask")) return(kFALSE);

	trigPol.AddNamedX(kMrbTriggerPolarity);
	tp = trigPol.FindByName(Polarity, TMrbLofNamedX::kFindUnique | TMrbLofNamedX::kFindIgnoreCase);
	if (tp == NULL) {
		gMrbLog->Err() << "Illegal trigger polarity - " << Polarity << " (should be \"pos\" or \"neg\")" << endl;
		gMrbLog->Flush(this->ClassName(), "SetTriggerMask");
		return(kFALSE);
	}

	return(this->SetTriggerMask(ChannelMask, tp->GetIndex(), UpdateDSP));
}

Bool_t TMrbDGF::SetTriggerBit(Int_t Channel, Int_t Polarity, EMrbBitOp SetOrClear, Bool_t UpdateDSP) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::SetTriggerBit
// Purpose:        Set a single trigger
// Arguments:      Int_t Channel          -- channel number
//                 Int_t Polarity         -- trigger polarity (+1/-1)
//                 EMrbBitOp SetOrClear   -- set / clear
//                 Bool_t UpdateDSP       -- kTRUE: write data to DSP
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    Sets a single trigger.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	EMrbBitOp posPol;

	if (UpdateDSP && !this->CheckConnect("SetTriggerBit")) return(kFALSE);
	if (!this->CheckChannel("SetTriggerBit", Channel)) return(kFALSE);

	if (Polarity == 1)			posPol = kBitOr;
	else if (Polarity == -1)	posPol = kBitClear;
	else {
		gMrbLog->Err() << "Illegal trigger polarity - " << Polarity << " (should be +1/-1)" << endl;
		gMrbLog->Flush(this->ClassName(), "SetTriggerBit");
		return(kFALSE);
	}
	
	if (SetOrClear == kBitSet) {
		this->SetChanCSRA(Channel, TMrbDGFData::kEnableTrigger, kBitOr, UpdateDSP);
		this->SetChanCSRA(Channel, TMrbDGFData::kTriggerPositive, posPol, UpdateDSP);
	} else {
		this->SetChanCSRA(Channel, TMrbDGFData::kEnableTrigger | TMrbDGFData::kTriggerPositive, kBitClear, UpdateDSP);
	}
	return(kTRUE);
}

Bool_t TMrbDGF::SetTriggerBit(Int_t Channel, const Char_t * Polarity, EMrbBitOp SetOrClear, Bool_t UpdateDSP) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::SetTriggerBit
// Purpose:        Set a single trigger
// Arguments:      Int_t Channel          -- channel number
//                 Char_t * Polarity      -- trigger polarity (pos/neg)
//                 EMrbBitOp SetOrClear   -- set / clear
//                 Bool_t UpdateDSP       -- kTRUE: write data to DSP
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    Sets a single trigger.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	TMrbLofNamedX trigPol;
	TMrbNamedX * tp;

	if (UpdateDSP && !this->CheckConnect("SetTriggerBit")) return(kFALSE);
	if (!this->CheckChannel("SetTriggerBit", Channel)) return(kFALSE);

	trigPol.AddNamedX(kMrbTriggerPolarity);
	tp = trigPol.FindByName(Polarity, TMrbLofNamedX::kFindUnique | TMrbLofNamedX::kFindIgnoreCase);
	if (tp == NULL) {
		gMrbLog->Err() << "Illegal trigger polarity - " << Polarity << " (should be \"pos\" or \"neg\")" << endl;
		gMrbLog->Flush(this->ClassName(), "SetTriggerBit");
		return(kFALSE);
	}
	if (SetOrClear == kBitSet || SetOrClear == kBitOr) SetOrClear = kBitOr; else SetOrClear = kBitClear;
	return(this->SetTriggerBit(Channel, tp->GetIndex(), SetOrClear, UpdateDSP));
}

Bool_t TMrbDGF::HasTriggerBitSet(Int_t Channel, Bool_t ReadFromDSP) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::HasTriggerBitSet
// Purpose:        Check if trigger channel
// Arguments:      Int_t Channel       -- channel number
//                 Bool_t ReadFromDSP  -- kTRUE: read channel CSR first
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    Tests if channel has trigger bit set.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	UInt_t csra;

	csra = this->GetChanCSRA(Channel, ReadFromDSP);
	if (csra == 0xffffffff) return(kFALSE);
	return((csra & TMrbDGFData::kEnableTrigger) != 0);
}

UInt_t TMrbDGF::GetTriggerMask(Bool_t ReadFromDSP) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::GetTriggerMask
// Purpose:        Return pattern of trigger channels
// Arguments:      Bool_t ReadFromDSP  -- kTRUE: read channel CSR first
// Results:        UInt_t TriggerMask  -- mask bits
// Exceptions:
// Description:    Returns a pattern of trigger channels.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	UInt_t channelMask;
	UInt_t bit;

	if (ReadFromDSP && !this->CheckConnect("GetChannelMask")) return(0);

	bit = 1;
	channelMask = 0;
	for (Int_t chn = 0; chn < TMrbDGFData::kNofChannels; chn++) {
		if (this->HasTriggerBitSet(chn, ReadFromDSP)) channelMask |= bit;
		bit <<= 1;
	}
	return(channelMask);
}

Bool_t TMrbDGF::SetTriggerPolarity(Int_t Channel, Int_t Polarity, Bool_t UpdateDSP) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::SetTriggerPolarity
// Purpose:        Set a single trigger
// Arguments:      Int_t Channel          -- channel number
//                 Int_t Polarity         -- trigger polarity (+1/-1)
//                 Bool_t UpdateDSP       -- kTRUE: write data to DSP
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    Sets trigger polarity.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	EMrbBitOp posPol;

	if (UpdateDSP && !this->CheckConnect("SetTriggerPOlarity")) return(kFALSE);
	if (!this->CheckChannel("SetTriggerPolarity", Channel)) return(kFALSE);

	if (Polarity == 1)			posPol = kBitOr;
	else if (Polarity == -1)	posPol = kBitClear;
	else {
		gMrbLog->Err() << "Illegal trigger polarity - " << Polarity << " (should be +1/-1)" << endl;
		gMrbLog->Flush(this->ClassName(), "SetTriggerPolarity");
		return(kFALSE);
	}
	
	this->SetChanCSRA(Channel, TMrbDGFData::kTriggerPositive, posPol, UpdateDSP);
	return(kTRUE);
}

Int_t TMrbDGF::GetTriggerPolarity(Int_t Channel, Bool_t ReadFromDSP) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::GetTriggerPolarity
// Purpose:        Get trigger polarity
// Arguments:      Int_t Channel          -- channel number
//                 Bool_t ReadFromDSP     -- kTRUE: read data from DSP
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    Returns polarity bit.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	UInt_t csra;

	if (ReadFromDSP && !this->CheckConnect("GetTriggerPolarity")) return(0);
	if (!this->CheckChannel("GetTriggerPolarity", Channel)) return(0);

	csra = this->GetChanCSRA(Channel, ReadFromDSP);
	if (csra == 0xffffffff) return(0);
	if (csra & TMrbDGFData::kTriggerPositive) return(1); else return(-1);
}

void TMrbDGF::PrintTriggerMask(Bool_t CrFlag, Bool_t ReadFromDSP) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::PrintTriggerMask
// Purpose:        Output trigger channels
// Arguments:      Bool_t CrFlag       -- kTRUE if CR to be output
//                 Bool_t ReadFromDSP  -- kTRUE: read channel CSR first
// Results:        --
// Exceptions:
// Description:    Outputs list of trigger channels.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	if (ReadFromDSP && !this->CheckConnect("PrintTriggerMask")) return;

	if (this->GetChannelMask(ReadFromDSP) == 0) {
		cout << setred << "None" << setblack;
	} else {
		for (Int_t chn = 0; chn < TMrbDGFData::kNofChannels; chn++) {
			if (this->HasTriggerBitSet(chn)) {
				if (this->GetTriggerPolarity(chn) == 1) cout << setblue << chn << ":pos " << setblack;
				else									cout << setblue << chn << ":neg " << setblack;
			} else {
				cout << setred << chn << ":off " << setblack;
			}
		}
	}
	if (CrFlag) cout << endl; else cout << flush;
}

Bool_t TMrbDGF::SetChannelMask(UInt_t ChannelMask, Bool_t UpdateDSP) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::SetChannelMask
// Purpose:        Set mask of good (=active) channels
// Arguments:      UInt_t ChannelMask     -- channel mask
//                 Bool_t UpdateDSP       -- kTRUE: write data to DSP
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    Set pattern of good (=active) channels.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	EMrbBitOp bitOp;

	if (UpdateDSP && !this->CheckConnect("SetChannelMask")) return(kFALSE);

	if ((ChannelMask & 0xfffffff0) != 0) {
		gMrbLog->Err() << "Illegal mask bits - 0x" << setbase(16) << ChannelMask << setbase(10) << endl;
		gMrbLog->Flush(this->ClassName(), "SetChannelMask");
		return(kFALSE);
	}

	for (Int_t chn = 0; chn < TMrbDGFData::kNofChannels; chn++) {
		if (ChannelMask & 1)	bitOp = kBitOr;
		else					bitOp = kBitClear;
		this->SetChanCSRA(chn, TMrbDGFData::kGoodChannel, bitOp, UpdateDSP);
		ChannelMask >>= 1;
	}
	return(kTRUE);
}

Bool_t TMrbDGF::SetChannelMask(const Char_t * ChannelMask, Bool_t UpdateDSP) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::SetChannelMask
// Purpose:        Set mask of good (=active) channels
// Arguments:      const Char_t * ChannelMask     -- channel mask
//                 Bool_t UpdateDSP               -- kTRUE: write data to DSP
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    Set pattern of good (=active) channels. Format: any out of "0123"
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	TString cMask, cIds, c;
	UInt_t channelMask;
	Int_t n;
	Int_t lng;

	if (UpdateDSP && !this->CheckConnect("SetChannelMask")) return(kFALSE);

	cIds = "0123";

	cMask = ChannelMask;
	lng = cMask.Length();
	if (lng == 0 || lng > TMrbDGFData::kNofChannels) {
		gMrbLog->Err() << "Illegal channel mask - " << ChannelMask << endl;
		gMrbLog->Flush(this->ClassName(), "SetChannelMask");
		return(kFALSE);
	}

	channelMask = 0;
	for (Int_t i = 0; i < lng; i++) {
		c = cMask(i);
		n = cIds.Index(c, 0);
		if (n == -1) {
			gMrbLog->Err() << "Illegal channel number - " << c << " (ignored)" << endl;
			gMrbLog->Flush(this->ClassName(), "SetChannelMask");
		} else {
			channelMask |= 1 << n;
		}
	}
	return(this->SetChannelMask(channelMask, UpdateDSP));
}

Bool_t TMrbDGF::SetXwait(Int_t Xwait, Bool_t UpdateDSP) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::SetXwait
// Purpose:        Set XWAIT parameter
// Arguments:      Int_t Xwait            -- wait states
//                 Bool_t UpdateDSP       -- kTRUE: write data to DSP
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    Sets channel param(s) XWAITn.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	if (UpdateDSP && !this->CheckConnect("SetXwait")) return(kFALSE);

	for (Int_t chn = 0; chn < TMrbDGFData::kNofChannels; chn++) this->SetParValue(chn, "XWAIT", Xwait, UpdateDSP);
	return(kTRUE);
}

Bool_t TMrbDGF::SetSynchWait(Bool_t SynchFlag, Bool_t UpdateDSP) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::SetSynchWait
// Purpose:        Set SYNCHWAIT flag
// Arguments:      Bool_t SynchFlag       -- synch wait flag
//                 Bool_t UpdateDSP       -- kTRUE: write data to DSP
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    Sets module param SYNCHWAIT.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	Int_t synchVal;
	TString synchMsg;
		
	if (UpdateDSP && !this->CheckConnect("SetSynchWait")) return(kFALSE);

	if (SynchFlag) {
		synchVal = 1;
		synchMsg = "Start/stop synchronized (SYNCHWAIT=1)";
	} else {
		synchVal = 0;
		synchMsg = "Start/stop asynchronous (SYNCHWAIT=0)";
	}
	
	this->SetParValue("SYNCHWAIT", synchVal, UpdateDSP);
	
	if (gMrbDGFData->fVerboseMode) {
		gMrbLog->Out()	<< fName << " in C" << fCrate << ".N" << fStation
						<< ": " << synchMsg << endl;
		gMrbLog->Flush(this->ClassName(), "SetSynchWait", setblue);
	}
		
	return(kTRUE);
}

Bool_t TMrbDGF::SetInSynch(Bool_t SynchFlag, Bool_t UpdateDSP) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::SetInSynch
// Purpose:        Set INSYNCH flag
// Arguments:      Bool_t SynchFlag       -- synch flag
//                 Bool_t UpdateDSP       -- kTRUE: write data to DSP
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    Sets module param INSYNCH.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	Int_t synchVal;
	TString synchMsg;
		
	if (UpdateDSP && !this->CheckConnect("SetInSynch")) return(kFALSE);

	if (SynchFlag) {
		synchVal = 0;
		synchMsg = "Clock synchronized with new run (INSYNCH=0)";
	} else {
		synchVal = 1;
		synchMsg = "Clock running thru (INSYNCH=1)";
	}
	
	this->SetParValue("INSYNCH", synchVal, UpdateDSP);
	
	if (gMrbDGFData->fVerboseMode) {
		gMrbLog->Out()	<< fName << " in C" << fCrate << ".N" << fStation
						<< ": " << synchMsg << endl;
		gMrbLog->Flush(this->ClassName(), "SetInSynch", setblue);
	}
		
	return(kTRUE);
}

Bool_t TMrbDGF::SetGoodChannel(Int_t Channel, EMrbBitOp SetOrClear, Bool_t UpdateDSP) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::SetGoodChannel
// Purpose:        Set "good channel" bit
// Arguments:      Int_t Channel          -- channel number
//                 EMrbBitOp SetOrClear   -- set / clear
//                 Bool_t UpdateDSP       -- kTRUE: write data to DSP
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    Mark channel active.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	if (UpdateDSP && !this->CheckConnect("SetGoodChannel")) return(kFALSE);
	if (!this->CheckChannel("SetGoodChannel", Channel)) return(kFALSE);

	if (SetOrClear == kBitSet || SetOrClear == kBitOr) SetOrClear = kBitOr; else SetOrClear = kBitClear;
	this->SetChanCSRA(Channel, TMrbDGFData::kGoodChannel, SetOrClear, UpdateDSP);
	return(kTRUE);
}

Bool_t TMrbDGF::IsGoodChannel(Int_t Channel, Bool_t ReadFromDSP) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::IsGoodChannel
// Purpose:        Check if channel active
// Arguments:      Int_t Channel       -- channel number
//                 Bool_t ReadFromDSP  -- kTRUE: read channel CSR first
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    Tests if given channel active.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	UInt_t csra;

	csra = this->GetChanCSRA(Channel, ReadFromDSP);
	if (csra == 0xffffffff) return(kFALSE);
	return((csra & TMrbDGFData::kGoodChannel) != 0);
}

UInt_t TMrbDGF::GetChannelMask(Bool_t ReadFromDSP) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::GetChannelMask
// Purpose:        Return channel mask
// Arguments:      Bool_t ReadFromDSP  -- kTRUE: read channel CSR first
// Results:        UInt_t ChannelMask  -- mask bits
// Exceptions:
// Description:    Returns a pattern of good (=active) channels.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	UInt_t channelMask;
	UInt_t bit;

	if (ReadFromDSP && !this->CheckConnect("GetChannelMask")) return(0);

	bit = 1;
	channelMask = 0;
	for (Int_t chn = 0; chn < TMrbDGFData::kNofChannels; chn++) {
		if (this->IsGoodChannel(chn, ReadFromDSP)) channelMask |= bit;
		bit <<= 1;
	}
	return(channelMask);
}

void TMrbDGF::PrintChannelMask(Bool_t CrFlag, Bool_t ReadFromDSP) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::PrintChannelMask
// Purpose:        Output good (=active) channels
// Arguments:      Bool_t CrFlag       -- kTRUE if CR to be output
//                 Bool_t ReadFromDSP  -- kTRUE: read channel CSR first
// Results:        --
// Exceptions:
// Description:    List of good (=active) channels.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	if (ReadFromDSP && !this->CheckConnect("PrintChannelMask")) return;

	if (this->GetChannelMask(ReadFromDSP) == 0) {
		cout << setred << "None" << setblack;
	} else {
		for (Int_t chn = 0; chn < TMrbDGFData::kNofChannels; chn++) {
			if (this->IsGoodChannel(chn)) {
				cout << setblue << chn << ":on " << setblack;
			} else {
				cout << setred << chn << ":off " << setblack;
			}
		}
	}
	if (CrFlag) cout << endl; else cout << flush;
}

Int_t TMrbDGF::GetNofGoodChannels(Bool_t ReadFromDSP) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::GetNofGoodChannels
// Purpose:        Return number of good (=active) channels
// Arguments:      Bool_t ReadFromDSP   -- kTRUE: read channel CSR first
// Results:        Int_t NofChannels    -- number of good (=active) channels
// Exceptions:
// Description:    Calculate number of good (=active) channels.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	if (ReadFromDSP && !this->CheckConnect("GetNofGoodChannels")) return(0);

	Int_t nofChannels = 0;
	for (Int_t chn = 0; chn < TMrbDGFData::kNofChannels; chn++) {
		if (this->IsGoodChannel(chn, ReadFromDSP)) nofChannels++;
	}
	return(nofChannels);
}

Bool_t TMrbDGF::ModifyCoincPattern(UInt_t Pattern, EMrbBitOp AddOrRemove, Bool_t UpdateDSP) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::ModifyCoincPattern
// Purpose:        Add/remove a hit pattern
// Arguments:      UInt_t Pattern         -- hit pattern
//                 EMbrBitOp AddOrRemove  -- add or remove?
//                 Bool_t UpdateDSP       -- kTRUE: write value to DSP
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    Activate a certain hit pattern.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	UInt_t coinc;

	if (UpdateDSP && !this->CheckConnect("ModifyCoincPattern")) return(0);

	if ((Pattern == 0) || (Pattern & 0xfffffff0) != 0) {
		gMrbLog->Err()	<< "Illegal hit pattern - 0x" << setbase(16) << setiosflags(ios::uppercase) << Pattern
						<< resetiosflags(ios::uppercase) << setbase(10) << " (should be in [0x1, 0xF])" << endl;
		gMrbLog->Flush(this->ClassName(), "ModifyCoincPattern");
		return(kFALSE);
	}

	Int_t pat = (Int_t) Pattern;
	UInt_t bit = 1 << (pat - 1);
	coinc = this->GetCoincPattern();
	if (AddOrRemove == kBitSet || AddOrRemove == kBitOr)	coinc |= bit;
	else													coinc &= ~bit;
	return(this->SetCoincPattern(coinc, UpdateDSP));
}

Bool_t TMrbDGF::CoincPatternSet(UInt_t Pattern, Bool_t ReadFromDSP) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::CoincPatternSet
// Purpose:        Test if hit pattern active
// Arguments:      UInt_t Pattern       -- pattern to be tested
//                 Bool_t ReadFromDSP   -- read value from DSP first
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    Checks if hit pattern is active.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	UInt_t coinc;

	if (ReadFromDSP && !this->CheckConnect("CoincPatternSet")) return(0);

	if ((Pattern == 0) || (Pattern & 0xfffffff0) != 0) {
		gMrbLog->Err()	<< "Illegal hit pattern - 0x" << setbase(16) << setiosflags(ios::uppercase) << Pattern
						<< resetiosflags(ios::uppercase) << setbase(10) << " (should be in [0x1, 0xF])" << endl;
		gMrbLog->Flush(this->ClassName(), "CoincPatternSet");
		return(kFALSE);
	}

	Int_t pat = (Int_t) Pattern;
	Int_t bit = 1 << (pat - 1);
	coinc = this->GetCoincPattern();
	return((coinc & bit) != 0);
}

const Char_t * TMrbDGF::GetClusterInfo(TMrbString & Info) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::GetClusterInfo
// Purpose:        Return cluster info
// Arguments:      TString & Info   -- where to store info string
// Results:        Char_t * Info    -- info string
// Exceptions:
// Description:    Returns cluster info.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	Info = "CLU";
	Info += this->GetClusterSerial();
	Info += " ";
	TMrbString h;
	h.FromInteger(this->GetClusterHexNum(), 0, 16);
	Info += h;
	Info += " ";
	Info += this->GetClusterColor();
	Info += " (";
	Info += this->GetClusterSegments();
	Info += ")";
	return(Info.Data());
}

Bool_t TMrbDGF::IsCore(Int_t Channel) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::IsCore
// Purpose:        Check if channel is core channel
// Arguments:      Int_t Channel    -- channel number
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    Decodes cluster id - something like A<csss>
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	TString id = fClusterID.GetTitle();
	Int_t idx = id.Index("<", 0);
	if (idx == -1) return(kFALSE);
	return(id(idx + 1 + Channel) == 'c');
}

void TMrbDGF::SetRevision(Int_t ManufactIndex) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::SetRevision
// Purpose:        Set revision number
// Arguments:      Int_t ManufactIndex  -- revision index as given by manufacturer
// Results:        --
// Exceptions:
// Description:    Defines module revision.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	ManufactIndex &= 0xF;
	switch (ManufactIndex) {
		case TMrbDGFData::kOrigRevD:
			fRevision.Set(TMrbDGFData::kRevD, "D");
			break;
		case TMrbDGFData::kOrigRevE:
			fRevision.Set(TMrbDGFData::kRevE, "E");
			break;
		default:
			fRevision.Set(TMrbDGFData::kRevUnknown, "unknown");
			break;
	}
}

TMrbNamedX * TMrbDGF::GetRevision(Bool_t Renew) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::GetRevision
// Purpose:        Return module revision
// Arguments:      Bool_t Renew           -- read again from module if kTRUE
// Results:        TMrbNamedX * Revision  -- revision (code & 1char-id)
// Exceptions:
// Description:    Defines module revision.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	TMrbDGFData::EMrbDGFRevision rev;

	if (Renew || fRevision.GetIndex() == TMrbDGFData::kRevUnknown) {
		Int_t cVal;
		if (!fCamac.ExecCnaf(fCrate, fStation, A(13), F(1), cVal, kTRUE)) {	// exec cnaf, 16 bit
			gMrbLog->Err()	<< fName << " in C" << fCrate << ".N" << fStation << ".A13.F1 failed" << endl;
			gMrbLog->Flush(this->ClassName(), "GetParValue");
		}
		rev = (TMrbDGFData::EMrbDGFRevision) (cVal & 0xf);
		this->SetRevision(rev);
		if (fRevision.GetIndex() == TMrbDGFData::kRevUnknown) {
			gMrbLog->Err()	<< fName << " in C" << fCrate << ".N" << fStation
							<< ": Module revision UNKNOWN (" << rev << ") - using RevD" << endl;
			gMrbLog->Flush(this->ClassName(), "GetRevision");
			this->SetRevision(TMrbDGFData::kOrigRevD);
		}
	}

	return(&fRevision);
}

void TMrbDGF::SetVerboseMode(Bool_t VerboseFlag) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::SetVerboseMode
// Purpose:        Turn verbosity flag on/off
// Arguments:      Bool_t VerboseFlag  -- kTRUE/kFALSE
// Results:        --
// Exceptions:
// Description:    Verbose mode on/off
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	if (gMrbDGFData) gMrbDGFData->SetVerboseMode(VerboseFlag);
}

const Char_t * TMrbDGF::GetSynonyms(TString & Synonyms, TMrbNamedX * Param) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::SetVerboseMode
// Purpose:        Collect synonyms for a given param
// Arguments:      TString & Synonyms  -- where to store synonyms
//                 TMrbNamedX * Param  -- param
// Results:        --
// Exceptions:
// Description:    Steps thru chain of synonyms if present.
//                 Returns string with syn names.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	TMrbNamedX * nx = Param;
	Synonyms = "";
	while ((nx = (TMrbNamedX *) nx->GetAssignedObject())) {
		Synonyms += " =";
		Synonyms += nx->GetName();
	}
	return(Synonyms.Data());
}
 TMrbDGF.cxx:1
 TMrbDGF.cxx:2
 TMrbDGF.cxx:3
 TMrbDGF.cxx:4
 TMrbDGF.cxx:5
 TMrbDGF.cxx:6
 TMrbDGF.cxx:7
 TMrbDGF.cxx:8
 TMrbDGF.cxx:9
 TMrbDGF.cxx:10
 TMrbDGF.cxx:11
 TMrbDGF.cxx:12
 TMrbDGF.cxx:13
 TMrbDGF.cxx:14
 TMrbDGF.cxx:15
 TMrbDGF.cxx:16
 TMrbDGF.cxx:17
 TMrbDGF.cxx:18
 TMrbDGF.cxx:19
 TMrbDGF.cxx:20
 TMrbDGF.cxx:21
 TMrbDGF.cxx:22
 TMrbDGF.cxx:23
 TMrbDGF.cxx:24
 TMrbDGF.cxx:25
 TMrbDGF.cxx:26
 TMrbDGF.cxx:27
 TMrbDGF.cxx:28
 TMrbDGF.cxx:29
 TMrbDGF.cxx:30
 TMrbDGF.cxx:31
 TMrbDGF.cxx:32
 TMrbDGF.cxx:33
 TMrbDGF.cxx:34
 TMrbDGF.cxx:35
 TMrbDGF.cxx:36
 TMrbDGF.cxx:37
 TMrbDGF.cxx:38
 TMrbDGF.cxx:39
 TMrbDGF.cxx:40
 TMrbDGF.cxx:41
 TMrbDGF.cxx:42
 TMrbDGF.cxx:43
 TMrbDGF.cxx:44
 TMrbDGF.cxx:45
 TMrbDGF.cxx:46
 TMrbDGF.cxx:47
 TMrbDGF.cxx:48
 TMrbDGF.cxx:49
 TMrbDGF.cxx:50
 TMrbDGF.cxx:51
 TMrbDGF.cxx:52
 TMrbDGF.cxx:53
 TMrbDGF.cxx:54
 TMrbDGF.cxx:55
 TMrbDGF.cxx:56
 TMrbDGF.cxx:57
 TMrbDGF.cxx:58
 TMrbDGF.cxx:59
 TMrbDGF.cxx:60
 TMrbDGF.cxx:61
 TMrbDGF.cxx:62
 TMrbDGF.cxx:63
 TMrbDGF.cxx:64
 TMrbDGF.cxx:65
 TMrbDGF.cxx:66
 TMrbDGF.cxx:67
 TMrbDGF.cxx:68
 TMrbDGF.cxx:69
 TMrbDGF.cxx:70
 TMrbDGF.cxx:71
 TMrbDGF.cxx:72
 TMrbDGF.cxx:73
 TMrbDGF.cxx:74
 TMrbDGF.cxx:75
 TMrbDGF.cxx:76
 TMrbDGF.cxx:77
 TMrbDGF.cxx:78
 TMrbDGF.cxx:79
 TMrbDGF.cxx:80
 TMrbDGF.cxx:81
 TMrbDGF.cxx:82
 TMrbDGF.cxx:83
 TMrbDGF.cxx:84
 TMrbDGF.cxx:85
 TMrbDGF.cxx:86
 TMrbDGF.cxx:87
 TMrbDGF.cxx:88
 TMrbDGF.cxx:89
 TMrbDGF.cxx:90
 TMrbDGF.cxx:91
 TMrbDGF.cxx:92
 TMrbDGF.cxx:93
 TMrbDGF.cxx:94
 TMrbDGF.cxx:95
 TMrbDGF.cxx:96
 TMrbDGF.cxx:97
 TMrbDGF.cxx:98
 TMrbDGF.cxx:99
 TMrbDGF.cxx:100
 TMrbDGF.cxx:101
 TMrbDGF.cxx:102
 TMrbDGF.cxx:103
 TMrbDGF.cxx:104
 TMrbDGF.cxx:105
 TMrbDGF.cxx:106
 TMrbDGF.cxx:107
 TMrbDGF.cxx:108
 TMrbDGF.cxx:109
 TMrbDGF.cxx:110
 TMrbDGF.cxx:111
 TMrbDGF.cxx:112
 TMrbDGF.cxx:113
 TMrbDGF.cxx:114
 TMrbDGF.cxx:115
 TMrbDGF.cxx:116
 TMrbDGF.cxx:117
 TMrbDGF.cxx:118
 TMrbDGF.cxx:119
 TMrbDGF.cxx:120
 TMrbDGF.cxx:121
 TMrbDGF.cxx:122
 TMrbDGF.cxx:123
 TMrbDGF.cxx:124
 TMrbDGF.cxx:125
 TMrbDGF.cxx:126
 TMrbDGF.cxx:127
 TMrbDGF.cxx:128
 TMrbDGF.cxx:129
 TMrbDGF.cxx:130
 TMrbDGF.cxx:131
 TMrbDGF.cxx:132
 TMrbDGF.cxx:133
 TMrbDGF.cxx:134
 TMrbDGF.cxx:135
 TMrbDGF.cxx:136
 TMrbDGF.cxx:137
 TMrbDGF.cxx:138
 TMrbDGF.cxx:139
 TMrbDGF.cxx:140
 TMrbDGF.cxx:141
 TMrbDGF.cxx:142
 TMrbDGF.cxx:143
 TMrbDGF.cxx:144
 TMrbDGF.cxx:145
 TMrbDGF.cxx:146
 TMrbDGF.cxx:147
 TMrbDGF.cxx:148
 TMrbDGF.cxx:149
 TMrbDGF.cxx:150
 TMrbDGF.cxx:151
 TMrbDGF.cxx:152
 TMrbDGF.cxx:153
 TMrbDGF.cxx:154
 TMrbDGF.cxx:155
 TMrbDGF.cxx:156
 TMrbDGF.cxx:157
 TMrbDGF.cxx:158
 TMrbDGF.cxx:159
 TMrbDGF.cxx:160
 TMrbDGF.cxx:161
 TMrbDGF.cxx:162
 TMrbDGF.cxx:163
 TMrbDGF.cxx:164
 TMrbDGF.cxx:165
 TMrbDGF.cxx:166
 TMrbDGF.cxx:167
 TMrbDGF.cxx:168
 TMrbDGF.cxx:169
 TMrbDGF.cxx:170
 TMrbDGF.cxx:171
 TMrbDGF.cxx:172
 TMrbDGF.cxx:173
 TMrbDGF.cxx:174
 TMrbDGF.cxx:175
 TMrbDGF.cxx:176
 TMrbDGF.cxx:177
 TMrbDGF.cxx:178
 TMrbDGF.cxx:179
 TMrbDGF.cxx:180
 TMrbDGF.cxx:181
 TMrbDGF.cxx:182
 TMrbDGF.cxx:183
 TMrbDGF.cxx:184
 TMrbDGF.cxx:185
 TMrbDGF.cxx:186
 TMrbDGF.cxx:187
 TMrbDGF.cxx:188
 TMrbDGF.cxx:189
 TMrbDGF.cxx:190
 TMrbDGF.cxx:191
 TMrbDGF.cxx:192
 TMrbDGF.cxx:193
 TMrbDGF.cxx:194
 TMrbDGF.cxx:195
 TMrbDGF.cxx:196
 TMrbDGF.cxx:197
 TMrbDGF.cxx:198
 TMrbDGF.cxx:199
 TMrbDGF.cxx:200
 TMrbDGF.cxx:201
 TMrbDGF.cxx:202
 TMrbDGF.cxx:203
 TMrbDGF.cxx:204
 TMrbDGF.cxx:205
 TMrbDGF.cxx:206
 TMrbDGF.cxx:207
 TMrbDGF.cxx:208
 TMrbDGF.cxx:209
 TMrbDGF.cxx:210
 TMrbDGF.cxx:211
 TMrbDGF.cxx:212
 TMrbDGF.cxx:213
 TMrbDGF.cxx:214
 TMrbDGF.cxx:215
 TMrbDGF.cxx:216
 TMrbDGF.cxx:217
 TMrbDGF.cxx:218
 TMrbDGF.cxx:219
 TMrbDGF.cxx:220
 TMrbDGF.cxx:221
 TMrbDGF.cxx:222
 TMrbDGF.cxx:223
 TMrbDGF.cxx:224
 TMrbDGF.cxx:225
 TMrbDGF.cxx:226
 TMrbDGF.cxx:227
 TMrbDGF.cxx:228
 TMrbDGF.cxx:229
 TMrbDGF.cxx:230
 TMrbDGF.cxx:231
 TMrbDGF.cxx:232
 TMrbDGF.cxx:233
 TMrbDGF.cxx:234
 TMrbDGF.cxx:235
 TMrbDGF.cxx:236
 TMrbDGF.cxx:237
 TMrbDGF.cxx:238
 TMrbDGF.cxx:239
 TMrbDGF.cxx:240
 TMrbDGF.cxx:241
 TMrbDGF.cxx:242
 TMrbDGF.cxx:243
 TMrbDGF.cxx:244
 TMrbDGF.cxx:245
 TMrbDGF.cxx:246
 TMrbDGF.cxx:247
 TMrbDGF.cxx:248
 TMrbDGF.cxx:249
 TMrbDGF.cxx:250
 TMrbDGF.cxx:251
 TMrbDGF.cxx:252
 TMrbDGF.cxx:253
 TMrbDGF.cxx:254
 TMrbDGF.cxx:255
 TMrbDGF.cxx:256
 TMrbDGF.cxx:257
 TMrbDGF.cxx:258
 TMrbDGF.cxx:259
 TMrbDGF.cxx:260
 TMrbDGF.cxx:261
 TMrbDGF.cxx:262
 TMrbDGF.cxx:263
 TMrbDGF.cxx:264
 TMrbDGF.cxx:265
 TMrbDGF.cxx:266
 TMrbDGF.cxx:267
 TMrbDGF.cxx:268
 TMrbDGF.cxx:269
 TMrbDGF.cxx:270
 TMrbDGF.cxx:271
 TMrbDGF.cxx:272
 TMrbDGF.cxx:273
 TMrbDGF.cxx:274
 TMrbDGF.cxx:275
 TMrbDGF.cxx:276
 TMrbDGF.cxx:277
 TMrbDGF.cxx:278
 TMrbDGF.cxx:279
 TMrbDGF.cxx:280
 TMrbDGF.cxx:281
 TMrbDGF.cxx:282
 TMrbDGF.cxx:283
 TMrbDGF.cxx:284
 TMrbDGF.cxx:285
 TMrbDGF.cxx:286
 TMrbDGF.cxx:287
 TMrbDGF.cxx:288
 TMrbDGF.cxx:289
 TMrbDGF.cxx:290
 TMrbDGF.cxx:291
 TMrbDGF.cxx:292
 TMrbDGF.cxx:293
 TMrbDGF.cxx:294
 TMrbDGF.cxx:295
 TMrbDGF.cxx:296
 TMrbDGF.cxx:297
 TMrbDGF.cxx:298
 TMrbDGF.cxx:299
 TMrbDGF.cxx:300
 TMrbDGF.cxx:301
 TMrbDGF.cxx:302
 TMrbDGF.cxx:303
 TMrbDGF.cxx:304
 TMrbDGF.cxx:305
 TMrbDGF.cxx:306
 TMrbDGF.cxx:307
 TMrbDGF.cxx:308
 TMrbDGF.cxx:309
 TMrbDGF.cxx:310
 TMrbDGF.cxx:311
 TMrbDGF.cxx:312
 TMrbDGF.cxx:313
 TMrbDGF.cxx:314
 TMrbDGF.cxx:315
 TMrbDGF.cxx:316
 TMrbDGF.cxx:317
 TMrbDGF.cxx:318
 TMrbDGF.cxx:319
 TMrbDGF.cxx:320
 TMrbDGF.cxx:321
 TMrbDGF.cxx:322
 TMrbDGF.cxx:323
 TMrbDGF.cxx:324
 TMrbDGF.cxx:325
 TMrbDGF.cxx:326
 TMrbDGF.cxx:327
 TMrbDGF.cxx:328
 TMrbDGF.cxx:329
 TMrbDGF.cxx:330
 TMrbDGF.cxx:331
 TMrbDGF.cxx:332
 TMrbDGF.cxx:333
 TMrbDGF.cxx:334
 TMrbDGF.cxx:335
 TMrbDGF.cxx:336
 TMrbDGF.cxx:337
 TMrbDGF.cxx:338
 TMrbDGF.cxx:339
 TMrbDGF.cxx:340
 TMrbDGF.cxx:341
 TMrbDGF.cxx:342
 TMrbDGF.cxx:343
 TMrbDGF.cxx:344
 TMrbDGF.cxx:345
 TMrbDGF.cxx:346
 TMrbDGF.cxx:347
 TMrbDGF.cxx:348
 TMrbDGF.cxx:349
 TMrbDGF.cxx:350
 TMrbDGF.cxx:351
 TMrbDGF.cxx:352
 TMrbDGF.cxx:353
 TMrbDGF.cxx:354
 TMrbDGF.cxx:355
 TMrbDGF.cxx:356
 TMrbDGF.cxx:357
 TMrbDGF.cxx:358
 TMrbDGF.cxx:359
 TMrbDGF.cxx:360
 TMrbDGF.cxx:361
 TMrbDGF.cxx:362
 TMrbDGF.cxx:363
 TMrbDGF.cxx:364
 TMrbDGF.cxx:365
 TMrbDGF.cxx:366
 TMrbDGF.cxx:367
 TMrbDGF.cxx:368
 TMrbDGF.cxx:369
 TMrbDGF.cxx:370
 TMrbDGF.cxx:371
 TMrbDGF.cxx:372
 TMrbDGF.cxx:373
 TMrbDGF.cxx:374
 TMrbDGF.cxx:375
 TMrbDGF.cxx:376
 TMrbDGF.cxx:377
 TMrbDGF.cxx:378
 TMrbDGF.cxx:379
 TMrbDGF.cxx:380
 TMrbDGF.cxx:381
 TMrbDGF.cxx:382
 TMrbDGF.cxx:383
 TMrbDGF.cxx:384
 TMrbDGF.cxx:385
 TMrbDGF.cxx:386
 TMrbDGF.cxx:387
 TMrbDGF.cxx:388
 TMrbDGF.cxx:389
 TMrbDGF.cxx:390
 TMrbDGF.cxx:391
 TMrbDGF.cxx:392
 TMrbDGF.cxx:393
 TMrbDGF.cxx:394
 TMrbDGF.cxx:395
 TMrbDGF.cxx:396
 TMrbDGF.cxx:397
 TMrbDGF.cxx:398
 TMrbDGF.cxx:399
 TMrbDGF.cxx:400
 TMrbDGF.cxx:401
 TMrbDGF.cxx:402
 TMrbDGF.cxx:403
 TMrbDGF.cxx:404
 TMrbDGF.cxx:405
 TMrbDGF.cxx:406
 TMrbDGF.cxx:407
 TMrbDGF.cxx:408
 TMrbDGF.cxx:409
 TMrbDGF.cxx:410
 TMrbDGF.cxx:411
 TMrbDGF.cxx:412
 TMrbDGF.cxx:413
 TMrbDGF.cxx:414
 TMrbDGF.cxx:415
 TMrbDGF.cxx:416
 TMrbDGF.cxx:417
 TMrbDGF.cxx:418
 TMrbDGF.cxx:419
 TMrbDGF.cxx:420
 TMrbDGF.cxx:421
 TMrbDGF.cxx:422
 TMrbDGF.cxx:423
 TMrbDGF.cxx:424
 TMrbDGF.cxx:425
 TMrbDGF.cxx:426
 TMrbDGF.cxx:427
 TMrbDGF.cxx:428
 TMrbDGF.cxx:429
 TMrbDGF.cxx:430
 TMrbDGF.cxx:431
 TMrbDGF.cxx:432
 TMrbDGF.cxx:433
 TMrbDGF.cxx:434
 TMrbDGF.cxx:435
 TMrbDGF.cxx:436
 TMrbDGF.cxx:437
 TMrbDGF.cxx:438
 TMrbDGF.cxx:439
 TMrbDGF.cxx:440
 TMrbDGF.cxx:441
 TMrbDGF.cxx:442
 TMrbDGF.cxx:443
 TMrbDGF.cxx:444
 TMrbDGF.cxx:445
 TMrbDGF.cxx:446
 TMrbDGF.cxx:447
 TMrbDGF.cxx:448
 TMrbDGF.cxx:449
 TMrbDGF.cxx:450
 TMrbDGF.cxx:451
 TMrbDGF.cxx:452
 TMrbDGF.cxx:453
 TMrbDGF.cxx:454
 TMrbDGF.cxx:455
 TMrbDGF.cxx:456
 TMrbDGF.cxx:457
 TMrbDGF.cxx:458
 TMrbDGF.cxx:459
 TMrbDGF.cxx:460
 TMrbDGF.cxx:461
 TMrbDGF.cxx:462
 TMrbDGF.cxx:463
 TMrbDGF.cxx:464
 TMrbDGF.cxx:465
 TMrbDGF.cxx:466
 TMrbDGF.cxx:467
 TMrbDGF.cxx:468
 TMrbDGF.cxx:469
 TMrbDGF.cxx:470
 TMrbDGF.cxx:471
 TMrbDGF.cxx:472
 TMrbDGF.cxx:473
 TMrbDGF.cxx:474
 TMrbDGF.cxx:475
 TMrbDGF.cxx:476
 TMrbDGF.cxx:477
 TMrbDGF.cxx:478
 TMrbDGF.cxx:479
 TMrbDGF.cxx:480
 TMrbDGF.cxx:481
 TMrbDGF.cxx:482
 TMrbDGF.cxx:483
 TMrbDGF.cxx:484
 TMrbDGF.cxx:485
 TMrbDGF.cxx:486
 TMrbDGF.cxx:487
 TMrbDGF.cxx:488
 TMrbDGF.cxx:489
 TMrbDGF.cxx:490
 TMrbDGF.cxx:491
 TMrbDGF.cxx:492
 TMrbDGF.cxx:493
 TMrbDGF.cxx:494
 TMrbDGF.cxx:495
 TMrbDGF.cxx:496
 TMrbDGF.cxx:497
 TMrbDGF.cxx:498
 TMrbDGF.cxx:499
 TMrbDGF.cxx:500
 TMrbDGF.cxx:501
 TMrbDGF.cxx:502
 TMrbDGF.cxx:503
 TMrbDGF.cxx:504
 TMrbDGF.cxx:505
 TMrbDGF.cxx:506
 TMrbDGF.cxx:507
 TMrbDGF.cxx:508
 TMrbDGF.cxx:509
 TMrbDGF.cxx:510
 TMrbDGF.cxx:511
 TMrbDGF.cxx:512
 TMrbDGF.cxx:513
 TMrbDGF.cxx:514
 TMrbDGF.cxx:515
 TMrbDGF.cxx:516
 TMrbDGF.cxx:517
 TMrbDGF.cxx:518
 TMrbDGF.cxx:519
 TMrbDGF.cxx:520
 TMrbDGF.cxx:521
 TMrbDGF.cxx:522
 TMrbDGF.cxx:523
 TMrbDGF.cxx:524
 TMrbDGF.cxx:525
 TMrbDGF.cxx:526
 TMrbDGF.cxx:527
 TMrbDGF.cxx:528
 TMrbDGF.cxx:529
 TMrbDGF.cxx:530
 TMrbDGF.cxx:531
 TMrbDGF.cxx:532
 TMrbDGF.cxx:533
 TMrbDGF.cxx:534
 TMrbDGF.cxx:535
 TMrbDGF.cxx:536
 TMrbDGF.cxx:537
 TMrbDGF.cxx:538
 TMrbDGF.cxx:539
 TMrbDGF.cxx:540
 TMrbDGF.cxx:541
 TMrbDGF.cxx:542
 TMrbDGF.cxx:543
 TMrbDGF.cxx:544
 TMrbDGF.cxx:545
 TMrbDGF.cxx:546
 TMrbDGF.cxx:547
 TMrbDGF.cxx:548
 TMrbDGF.cxx:549
 TMrbDGF.cxx:550
 TMrbDGF.cxx:551
 TMrbDGF.cxx:552
 TMrbDGF.cxx:553
 TMrbDGF.cxx:554
 TMrbDGF.cxx:555
 TMrbDGF.cxx:556
 TMrbDGF.cxx:557
 TMrbDGF.cxx:558
 TMrbDGF.cxx:559
 TMrbDGF.cxx:560
 TMrbDGF.cxx:561
 TMrbDGF.cxx:562
 TMrbDGF.cxx:563
 TMrbDGF.cxx:564
 TMrbDGF.cxx:565
 TMrbDGF.cxx:566
 TMrbDGF.cxx:567
 TMrbDGF.cxx:568
 TMrbDGF.cxx:569
 TMrbDGF.cxx:570
 TMrbDGF.cxx:571
 TMrbDGF.cxx:572
 TMrbDGF.cxx:573
 TMrbDGF.cxx:574
 TMrbDGF.cxx:575
 TMrbDGF.cxx:576
 TMrbDGF.cxx:577
 TMrbDGF.cxx:578
 TMrbDGF.cxx:579
 TMrbDGF.cxx:580
 TMrbDGF.cxx:581
 TMrbDGF.cxx:582
 TMrbDGF.cxx:583
 TMrbDGF.cxx:584
 TMrbDGF.cxx:585
 TMrbDGF.cxx:586
 TMrbDGF.cxx:587
 TMrbDGF.cxx:588
 TMrbDGF.cxx:589
 TMrbDGF.cxx:590
 TMrbDGF.cxx:591
 TMrbDGF.cxx:592
 TMrbDGF.cxx:593
 TMrbDGF.cxx:594
 TMrbDGF.cxx:595
 TMrbDGF.cxx:596
 TMrbDGF.cxx:597
 TMrbDGF.cxx:598
 TMrbDGF.cxx:599
 TMrbDGF.cxx:600
 TMrbDGF.cxx:601
 TMrbDGF.cxx:602
 TMrbDGF.cxx:603
 TMrbDGF.cxx:604
 TMrbDGF.cxx:605
 TMrbDGF.cxx:606
 TMrbDGF.cxx:607
 TMrbDGF.cxx:608
 TMrbDGF.cxx:609
 TMrbDGF.cxx:610
 TMrbDGF.cxx:611
 TMrbDGF.cxx:612
 TMrbDGF.cxx:613
 TMrbDGF.cxx:614
 TMrbDGF.cxx:615
 TMrbDGF.cxx:616
 TMrbDGF.cxx:617
 TMrbDGF.cxx:618
 TMrbDGF.cxx:619
 TMrbDGF.cxx:620
 TMrbDGF.cxx:621
 TMrbDGF.cxx:622
 TMrbDGF.cxx:623
 TMrbDGF.cxx:624
 TMrbDGF.cxx:625
 TMrbDGF.cxx:626
 TMrbDGF.cxx:627
 TMrbDGF.cxx:628
 TMrbDGF.cxx:629
 TMrbDGF.cxx:630
 TMrbDGF.cxx:631
 TMrbDGF.cxx:632
 TMrbDGF.cxx:633
 TMrbDGF.cxx:634
 TMrbDGF.cxx:635
 TMrbDGF.cxx:636
 TMrbDGF.cxx:637
 TMrbDGF.cxx:638
 TMrbDGF.cxx:639
 TMrbDGF.cxx:640
 TMrbDGF.cxx:641
 TMrbDGF.cxx:642
 TMrbDGF.cxx:643
 TMrbDGF.cxx:644
 TMrbDGF.cxx:645
 TMrbDGF.cxx:646
 TMrbDGF.cxx:647
 TMrbDGF.cxx:648
 TMrbDGF.cxx:649
 TMrbDGF.cxx:650
 TMrbDGF.cxx:651
 TMrbDGF.cxx:652
 TMrbDGF.cxx:653
 TMrbDGF.cxx:654
 TMrbDGF.cxx:655
 TMrbDGF.cxx:656
 TMrbDGF.cxx:657
 TMrbDGF.cxx:658
 TMrbDGF.cxx:659
 TMrbDGF.cxx:660
 TMrbDGF.cxx:661
 TMrbDGF.cxx:662
 TMrbDGF.cxx:663
 TMrbDGF.cxx:664
 TMrbDGF.cxx:665
 TMrbDGF.cxx:666
 TMrbDGF.cxx:667
 TMrbDGF.cxx:668
 TMrbDGF.cxx:669
 TMrbDGF.cxx:670
 TMrbDGF.cxx:671
 TMrbDGF.cxx:672
 TMrbDGF.cxx:673
 TMrbDGF.cxx:674
 TMrbDGF.cxx:675
 TMrbDGF.cxx:676
 TMrbDGF.cxx:677
 TMrbDGF.cxx:678
 TMrbDGF.cxx:679
 TMrbDGF.cxx:680
 TMrbDGF.cxx:681
 TMrbDGF.cxx:682
 TMrbDGF.cxx:683
 TMrbDGF.cxx:684
 TMrbDGF.cxx:685
 TMrbDGF.cxx:686
 TMrbDGF.cxx:687
 TMrbDGF.cxx:688
 TMrbDGF.cxx:689
 TMrbDGF.cxx:690
 TMrbDGF.cxx:691
 TMrbDGF.cxx:692
 TMrbDGF.cxx:693
 TMrbDGF.cxx:694
 TMrbDGF.cxx:695
 TMrbDGF.cxx:696
 TMrbDGF.cxx:697
 TMrbDGF.cxx:698
 TMrbDGF.cxx:699
 TMrbDGF.cxx:700
 TMrbDGF.cxx:701
 TMrbDGF.cxx:702
 TMrbDGF.cxx:703
 TMrbDGF.cxx:704
 TMrbDGF.cxx:705
 TMrbDGF.cxx:706
 TMrbDGF.cxx:707
 TMrbDGF.cxx:708
 TMrbDGF.cxx:709
 TMrbDGF.cxx:710
 TMrbDGF.cxx:711
 TMrbDGF.cxx:712
 TMrbDGF.cxx:713
 TMrbDGF.cxx:714
 TMrbDGF.cxx:715
 TMrbDGF.cxx:716
 TMrbDGF.cxx:717
 TMrbDGF.cxx:718
 TMrbDGF.cxx:719
 TMrbDGF.cxx:720
 TMrbDGF.cxx:721
 TMrbDGF.cxx:722
 TMrbDGF.cxx:723
 TMrbDGF.cxx:724
 TMrbDGF.cxx:725
 TMrbDGF.cxx:726
 TMrbDGF.cxx:727
 TMrbDGF.cxx:728
 TMrbDGF.cxx:729
 TMrbDGF.cxx:730
 TMrbDGF.cxx:731
 TMrbDGF.cxx:732
 TMrbDGF.cxx:733
 TMrbDGF.cxx:734
 TMrbDGF.cxx:735
 TMrbDGF.cxx:736
 TMrbDGF.cxx:737
 TMrbDGF.cxx:738
 TMrbDGF.cxx:739
 TMrbDGF.cxx:740
 TMrbDGF.cxx:741
 TMrbDGF.cxx:742
 TMrbDGF.cxx:743
 TMrbDGF.cxx:744
 TMrbDGF.cxx:745
 TMrbDGF.cxx:746
 TMrbDGF.cxx:747
 TMrbDGF.cxx:748
 TMrbDGF.cxx:749
 TMrbDGF.cxx:750
 TMrbDGF.cxx:751
 TMrbDGF.cxx:752
 TMrbDGF.cxx:753
 TMrbDGF.cxx:754
 TMrbDGF.cxx:755
 TMrbDGF.cxx:756
 TMrbDGF.cxx:757
 TMrbDGF.cxx:758
 TMrbDGF.cxx:759
 TMrbDGF.cxx:760
 TMrbDGF.cxx:761
 TMrbDGF.cxx:762
 TMrbDGF.cxx:763
 TMrbDGF.cxx:764
 TMrbDGF.cxx:765
 TMrbDGF.cxx:766
 TMrbDGF.cxx:767
 TMrbDGF.cxx:768
 TMrbDGF.cxx:769
 TMrbDGF.cxx:770
 TMrbDGF.cxx:771
 TMrbDGF.cxx:772
 TMrbDGF.cxx:773
 TMrbDGF.cxx:774
 TMrbDGF.cxx:775
 TMrbDGF.cxx:776
 TMrbDGF.cxx:777
 TMrbDGF.cxx:778
 TMrbDGF.cxx:779
 TMrbDGF.cxx:780
 TMrbDGF.cxx:781
 TMrbDGF.cxx:782
 TMrbDGF.cxx:783
 TMrbDGF.cxx:784
 TMrbDGF.cxx:785
 TMrbDGF.cxx:786
 TMrbDGF.cxx:787
 TMrbDGF.cxx:788
 TMrbDGF.cxx:789
 TMrbDGF.cxx:790
 TMrbDGF.cxx:791
 TMrbDGF.cxx:792
 TMrbDGF.cxx:793
 TMrbDGF.cxx:794
 TMrbDGF.cxx:795
 TMrbDGF.cxx:796
 TMrbDGF.cxx:797
 TMrbDGF.cxx:798
 TMrbDGF.cxx:799
 TMrbDGF.cxx:800
 TMrbDGF.cxx:801
 TMrbDGF.cxx:802
 TMrbDGF.cxx:803
 TMrbDGF.cxx:804
 TMrbDGF.cxx:805
 TMrbDGF.cxx:806
 TMrbDGF.cxx:807
 TMrbDGF.cxx:808
 TMrbDGF.cxx:809
 TMrbDGF.cxx:810
 TMrbDGF.cxx:811
 TMrbDGF.cxx:812
 TMrbDGF.cxx:813
 TMrbDGF.cxx:814
 TMrbDGF.cxx:815
 TMrbDGF.cxx:816
 TMrbDGF.cxx:817
 TMrbDGF.cxx:818
 TMrbDGF.cxx:819
 TMrbDGF.cxx:820
 TMrbDGF.cxx:821
 TMrbDGF.cxx:822
 TMrbDGF.cxx:823
 TMrbDGF.cxx:824
 TMrbDGF.cxx:825
 TMrbDGF.cxx:826
 TMrbDGF.cxx:827
 TMrbDGF.cxx:828
 TMrbDGF.cxx:829
 TMrbDGF.cxx:830
 TMrbDGF.cxx:831
 TMrbDGF.cxx:832
 TMrbDGF.cxx:833
 TMrbDGF.cxx:834
 TMrbDGF.cxx:835
 TMrbDGF.cxx:836
 TMrbDGF.cxx:837
 TMrbDGF.cxx:838
 TMrbDGF.cxx:839
 TMrbDGF.cxx:840
 TMrbDGF.cxx:841
 TMrbDGF.cxx:842
 TMrbDGF.cxx:843
 TMrbDGF.cxx:844
 TMrbDGF.cxx:845
 TMrbDGF.cxx:846
 TMrbDGF.cxx:847
 TMrbDGF.cxx:848
 TMrbDGF.cxx:849
 TMrbDGF.cxx:850
 TMrbDGF.cxx:851
 TMrbDGF.cxx:852
 TMrbDGF.cxx:853
 TMrbDGF.cxx:854
 TMrbDGF.cxx:855
 TMrbDGF.cxx:856
 TMrbDGF.cxx:857
 TMrbDGF.cxx:858
 TMrbDGF.cxx:859
 TMrbDGF.cxx:860
 TMrbDGF.cxx:861
 TMrbDGF.cxx:862
 TMrbDGF.cxx:863
 TMrbDGF.cxx:864
 TMrbDGF.cxx:865
 TMrbDGF.cxx:866
 TMrbDGF.cxx:867
 TMrbDGF.cxx:868
 TMrbDGF.cxx:869
 TMrbDGF.cxx:870
 TMrbDGF.cxx:871
 TMrbDGF.cxx:872
 TMrbDGF.cxx:873
 TMrbDGF.cxx:874
 TMrbDGF.cxx:875
 TMrbDGF.cxx:876
 TMrbDGF.cxx:877
 TMrbDGF.cxx:878
 TMrbDGF.cxx:879
 TMrbDGF.cxx:880
 TMrbDGF.cxx:881
 TMrbDGF.cxx:882
 TMrbDGF.cxx:883
 TMrbDGF.cxx:884
 TMrbDGF.cxx:885
 TMrbDGF.cxx:886
 TMrbDGF.cxx:887
 TMrbDGF.cxx:888
 TMrbDGF.cxx:889
 TMrbDGF.cxx:890
 TMrbDGF.cxx:891
 TMrbDGF.cxx:892
 TMrbDGF.cxx:893
 TMrbDGF.cxx:894
 TMrbDGF.cxx:895
 TMrbDGF.cxx:896
 TMrbDGF.cxx:897
 TMrbDGF.cxx:898
 TMrbDGF.cxx:899
 TMrbDGF.cxx:900
 TMrbDGF.cxx:901
 TMrbDGF.cxx:902
 TMrbDGF.cxx:903
 TMrbDGF.cxx:904
 TMrbDGF.cxx:905
 TMrbDGF.cxx:906
 TMrbDGF.cxx:907
 TMrbDGF.cxx:908
 TMrbDGF.cxx:909
 TMrbDGF.cxx:910
 TMrbDGF.cxx:911
 TMrbDGF.cxx:912
 TMrbDGF.cxx:913
 TMrbDGF.cxx:914
 TMrbDGF.cxx:915
 TMrbDGF.cxx:916
 TMrbDGF.cxx:917
 TMrbDGF.cxx:918
 TMrbDGF.cxx:919
 TMrbDGF.cxx:920
 TMrbDGF.cxx:921
 TMrbDGF.cxx:922
 TMrbDGF.cxx:923
 TMrbDGF.cxx:924
 TMrbDGF.cxx:925
 TMrbDGF.cxx:926
 TMrbDGF.cxx:927
 TMrbDGF.cxx:928
 TMrbDGF.cxx:929
 TMrbDGF.cxx:930
 TMrbDGF.cxx:931
 TMrbDGF.cxx:932
 TMrbDGF.cxx:933
 TMrbDGF.cxx:934
 TMrbDGF.cxx:935
 TMrbDGF.cxx:936
 TMrbDGF.cxx:937
 TMrbDGF.cxx:938
 TMrbDGF.cxx:939
 TMrbDGF.cxx:940
 TMrbDGF.cxx:941
 TMrbDGF.cxx:942
 TMrbDGF.cxx:943
 TMrbDGF.cxx:944
 TMrbDGF.cxx:945
 TMrbDGF.cxx:946
 TMrbDGF.cxx:947
 TMrbDGF.cxx:948
 TMrbDGF.cxx:949
 TMrbDGF.cxx:950
 TMrbDGF.cxx:951
 TMrbDGF.cxx:952
 TMrbDGF.cxx:953
 TMrbDGF.cxx:954
 TMrbDGF.cxx:955
 TMrbDGF.cxx:956
 TMrbDGF.cxx:957
 TMrbDGF.cxx:958
 TMrbDGF.cxx:959
 TMrbDGF.cxx:960
 TMrbDGF.cxx:961
 TMrbDGF.cxx:962
 TMrbDGF.cxx:963
 TMrbDGF.cxx:964
 TMrbDGF.cxx:965
 TMrbDGF.cxx:966
 TMrbDGF.cxx:967
 TMrbDGF.cxx:968
 TMrbDGF.cxx:969
 TMrbDGF.cxx:970
 TMrbDGF.cxx:971
 TMrbDGF.cxx:972
 TMrbDGF.cxx:973
 TMrbDGF.cxx:974
 TMrbDGF.cxx:975
 TMrbDGF.cxx:976
 TMrbDGF.cxx:977
 TMrbDGF.cxx:978
 TMrbDGF.cxx:979
 TMrbDGF.cxx:980
 TMrbDGF.cxx:981
 TMrbDGF.cxx:982
 TMrbDGF.cxx:983
 TMrbDGF.cxx:984
 TMrbDGF.cxx:985
 TMrbDGF.cxx:986
 TMrbDGF.cxx:987
 TMrbDGF.cxx:988
 TMrbDGF.cxx:989
 TMrbDGF.cxx:990
 TMrbDGF.cxx:991
 TMrbDGF.cxx:992
 TMrbDGF.cxx:993
 TMrbDGF.cxx:994
 TMrbDGF.cxx:995
 TMrbDGF.cxx:996
 TMrbDGF.cxx:997
 TMrbDGF.cxx:998
 TMrbDGF.cxx:999
 TMrbDGF.cxx:1000
 TMrbDGF.cxx:1001
 TMrbDGF.cxx:1002
 TMrbDGF.cxx:1003
 TMrbDGF.cxx:1004
 TMrbDGF.cxx:1005
 TMrbDGF.cxx:1006
 TMrbDGF.cxx:1007
 TMrbDGF.cxx:1008
 TMrbDGF.cxx:1009
 TMrbDGF.cxx:1010
 TMrbDGF.cxx:1011
 TMrbDGF.cxx:1012
 TMrbDGF.cxx:1013
 TMrbDGF.cxx:1014
 TMrbDGF.cxx:1015
 TMrbDGF.cxx:1016
 TMrbDGF.cxx:1017
 TMrbDGF.cxx:1018
 TMrbDGF.cxx:1019
 TMrbDGF.cxx:1020
 TMrbDGF.cxx:1021
 TMrbDGF.cxx:1022
 TMrbDGF.cxx:1023
 TMrbDGF.cxx:1024
 TMrbDGF.cxx:1025
 TMrbDGF.cxx:1026
 TMrbDGF.cxx:1027
 TMrbDGF.cxx:1028
 TMrbDGF.cxx:1029
 TMrbDGF.cxx:1030
 TMrbDGF.cxx:1031
 TMrbDGF.cxx:1032
 TMrbDGF.cxx:1033
 TMrbDGF.cxx:1034
 TMrbDGF.cxx:1035
 TMrbDGF.cxx:1036
 TMrbDGF.cxx:1037
 TMrbDGF.cxx:1038
 TMrbDGF.cxx:1039
 TMrbDGF.cxx:1040
 TMrbDGF.cxx:1041
 TMrbDGF.cxx:1042
 TMrbDGF.cxx:1043
 TMrbDGF.cxx:1044
 TMrbDGF.cxx:1045
 TMrbDGF.cxx:1046
 TMrbDGF.cxx:1047
 TMrbDGF.cxx:1048
 TMrbDGF.cxx:1049
 TMrbDGF.cxx:1050
 TMrbDGF.cxx:1051
 TMrbDGF.cxx:1052
 TMrbDGF.cxx:1053
 TMrbDGF.cxx:1054
 TMrbDGF.cxx:1055
 TMrbDGF.cxx:1056
 TMrbDGF.cxx:1057
 TMrbDGF.cxx:1058
 TMrbDGF.cxx:1059
 TMrbDGF.cxx:1060
 TMrbDGF.cxx:1061
 TMrbDGF.cxx:1062
 TMrbDGF.cxx:1063
 TMrbDGF.cxx:1064
 TMrbDGF.cxx:1065
 TMrbDGF.cxx:1066
 TMrbDGF.cxx:1067
 TMrbDGF.cxx:1068
 TMrbDGF.cxx:1069
 TMrbDGF.cxx:1070
 TMrbDGF.cxx:1071
 TMrbDGF.cxx:1072
 TMrbDGF.cxx:1073
 TMrbDGF.cxx:1074
 TMrbDGF.cxx:1075
 TMrbDGF.cxx:1076
 TMrbDGF.cxx:1077
 TMrbDGF.cxx:1078
 TMrbDGF.cxx:1079
 TMrbDGF.cxx:1080
 TMrbDGF.cxx:1081
 TMrbDGF.cxx:1082
 TMrbDGF.cxx:1083
 TMrbDGF.cxx:1084
 TMrbDGF.cxx:1085
 TMrbDGF.cxx:1086
 TMrbDGF.cxx:1087
 TMrbDGF.cxx:1088
 TMrbDGF.cxx:1089
 TMrbDGF.cxx:1090
 TMrbDGF.cxx:1091
 TMrbDGF.cxx:1092
 TMrbDGF.cxx:1093
 TMrbDGF.cxx:1094
 TMrbDGF.cxx:1095
 TMrbDGF.cxx:1096
 TMrbDGF.cxx:1097
 TMrbDGF.cxx:1098
 TMrbDGF.cxx:1099
 TMrbDGF.cxx:1100
 TMrbDGF.cxx:1101
 TMrbDGF.cxx:1102
 TMrbDGF.cxx:1103
 TMrbDGF.cxx:1104
 TMrbDGF.cxx:1105
 TMrbDGF.cxx:1106
 TMrbDGF.cxx:1107
 TMrbDGF.cxx:1108
 TMrbDGF.cxx:1109
 TMrbDGF.cxx:1110
 TMrbDGF.cxx:1111
 TMrbDGF.cxx:1112
 TMrbDGF.cxx:1113
 TMrbDGF.cxx:1114
 TMrbDGF.cxx:1115
 TMrbDGF.cxx:1116
 TMrbDGF.cxx:1117
 TMrbDGF.cxx:1118
 TMrbDGF.cxx:1119
 TMrbDGF.cxx:1120
 TMrbDGF.cxx:1121
 TMrbDGF.cxx:1122
 TMrbDGF.cxx:1123
 TMrbDGF.cxx:1124
 TMrbDGF.cxx:1125
 TMrbDGF.cxx:1126
 TMrbDGF.cxx:1127
 TMrbDGF.cxx:1128
 TMrbDGF.cxx:1129
 TMrbDGF.cxx:1130
 TMrbDGF.cxx:1131
 TMrbDGF.cxx:1132
 TMrbDGF.cxx:1133
 TMrbDGF.cxx:1134
 TMrbDGF.cxx:1135
 TMrbDGF.cxx:1136
 TMrbDGF.cxx:1137
 TMrbDGF.cxx:1138
 TMrbDGF.cxx:1139
 TMrbDGF.cxx:1140
 TMrbDGF.cxx:1141
 TMrbDGF.cxx:1142
 TMrbDGF.cxx:1143
 TMrbDGF.cxx:1144
 TMrbDGF.cxx:1145
 TMrbDGF.cxx:1146
 TMrbDGF.cxx:1147
 TMrbDGF.cxx:1148
 TMrbDGF.cxx:1149
 TMrbDGF.cxx:1150
 TMrbDGF.cxx:1151
 TMrbDGF.cxx:1152
 TMrbDGF.cxx:1153
 TMrbDGF.cxx:1154
 TMrbDGF.cxx:1155
 TMrbDGF.cxx:1156
 TMrbDGF.cxx:1157
 TMrbDGF.cxx:1158
 TMrbDGF.cxx:1159
 TMrbDGF.cxx:1160
 TMrbDGF.cxx:1161
 TMrbDGF.cxx:1162
 TMrbDGF.cxx:1163
 TMrbDGF.cxx:1164
 TMrbDGF.cxx:1165
 TMrbDGF.cxx:1166
 TMrbDGF.cxx:1167
 TMrbDGF.cxx:1168
 TMrbDGF.cxx:1169
 TMrbDGF.cxx:1170
 TMrbDGF.cxx:1171
 TMrbDGF.cxx:1172
 TMrbDGF.cxx:1173
 TMrbDGF.cxx:1174
 TMrbDGF.cxx:1175
 TMrbDGF.cxx:1176
 TMrbDGF.cxx:1177
 TMrbDGF.cxx:1178
 TMrbDGF.cxx:1179
 TMrbDGF.cxx:1180
 TMrbDGF.cxx:1181
 TMrbDGF.cxx:1182
 TMrbDGF.cxx:1183
 TMrbDGF.cxx:1184
 TMrbDGF.cxx:1185
 TMrbDGF.cxx:1186
 TMrbDGF.cxx:1187
 TMrbDGF.cxx:1188
 TMrbDGF.cxx:1189
 TMrbDGF.cxx:1190
 TMrbDGF.cxx:1191
 TMrbDGF.cxx:1192
 TMrbDGF.cxx:1193
 TMrbDGF.cxx:1194
 TMrbDGF.cxx:1195
 TMrbDGF.cxx:1196
 TMrbDGF.cxx:1197
 TMrbDGF.cxx:1198
 TMrbDGF.cxx:1199
 TMrbDGF.cxx:1200
 TMrbDGF.cxx:1201
 TMrbDGF.cxx:1202
 TMrbDGF.cxx:1203
 TMrbDGF.cxx:1204
 TMrbDGF.cxx:1205
 TMrbDGF.cxx:1206
 TMrbDGF.cxx:1207
 TMrbDGF.cxx:1208
 TMrbDGF.cxx:1209
 TMrbDGF.cxx:1210
 TMrbDGF.cxx:1211
 TMrbDGF.cxx:1212
 TMrbDGF.cxx:1213
 TMrbDGF.cxx:1214
 TMrbDGF.cxx:1215
 TMrbDGF.cxx:1216
 TMrbDGF.cxx:1217
 TMrbDGF.cxx:1218
 TMrbDGF.cxx:1219
 TMrbDGF.cxx:1220
 TMrbDGF.cxx:1221
 TMrbDGF.cxx:1222
 TMrbDGF.cxx:1223
 TMrbDGF.cxx:1224
 TMrbDGF.cxx:1225
 TMrbDGF.cxx:1226
 TMrbDGF.cxx:1227
 TMrbDGF.cxx:1228
 TMrbDGF.cxx:1229
 TMrbDGF.cxx:1230
 TMrbDGF.cxx:1231
 TMrbDGF.cxx:1232
 TMrbDGF.cxx:1233
 TMrbDGF.cxx:1234
 TMrbDGF.cxx:1235
 TMrbDGF.cxx:1236
 TMrbDGF.cxx:1237
 TMrbDGF.cxx:1238
 TMrbDGF.cxx:1239
 TMrbDGF.cxx:1240
 TMrbDGF.cxx:1241
 TMrbDGF.cxx:1242
 TMrbDGF.cxx:1243
 TMrbDGF.cxx:1244
 TMrbDGF.cxx:1245
 TMrbDGF.cxx:1246
 TMrbDGF.cxx:1247
 TMrbDGF.cxx:1248
 TMrbDGF.cxx:1249
 TMrbDGF.cxx:1250
 TMrbDGF.cxx:1251
 TMrbDGF.cxx:1252
 TMrbDGF.cxx:1253
 TMrbDGF.cxx:1254
 TMrbDGF.cxx:1255
 TMrbDGF.cxx:1256
 TMrbDGF.cxx:1257
 TMrbDGF.cxx:1258
 TMrbDGF.cxx:1259
 TMrbDGF.cxx:1260
 TMrbDGF.cxx:1261
 TMrbDGF.cxx:1262
 TMrbDGF.cxx:1263
 TMrbDGF.cxx:1264
 TMrbDGF.cxx:1265
 TMrbDGF.cxx:1266
 TMrbDGF.cxx:1267
 TMrbDGF.cxx:1268
 TMrbDGF.cxx:1269
 TMrbDGF.cxx:1270
 TMrbDGF.cxx:1271
 TMrbDGF.cxx:1272
 TMrbDGF.cxx:1273
 TMrbDGF.cxx:1274
 TMrbDGF.cxx:1275
 TMrbDGF.cxx:1276
 TMrbDGF.cxx:1277
 TMrbDGF.cxx:1278
 TMrbDGF.cxx:1279
 TMrbDGF.cxx:1280
 TMrbDGF.cxx:1281
 TMrbDGF.cxx:1282
 TMrbDGF.cxx:1283
 TMrbDGF.cxx:1284
 TMrbDGF.cxx:1285
 TMrbDGF.cxx:1286
 TMrbDGF.cxx:1287
 TMrbDGF.cxx:1288
 TMrbDGF.cxx:1289
 TMrbDGF.cxx:1290
 TMrbDGF.cxx:1291
 TMrbDGF.cxx:1292
 TMrbDGF.cxx:1293
 TMrbDGF.cxx:1294
 TMrbDGF.cxx:1295
 TMrbDGF.cxx:1296
 TMrbDGF.cxx:1297
 TMrbDGF.cxx:1298
 TMrbDGF.cxx:1299
 TMrbDGF.cxx:1300
 TMrbDGF.cxx:1301
 TMrbDGF.cxx:1302
 TMrbDGF.cxx:1303
 TMrbDGF.cxx:1304
 TMrbDGF.cxx:1305
 TMrbDGF.cxx:1306
 TMrbDGF.cxx:1307
 TMrbDGF.cxx:1308
 TMrbDGF.cxx:1309
 TMrbDGF.cxx:1310
 TMrbDGF.cxx:1311
 TMrbDGF.cxx:1312
 TMrbDGF.cxx:1313
 TMrbDGF.cxx:1314
 TMrbDGF.cxx:1315
 TMrbDGF.cxx:1316
 TMrbDGF.cxx:1317
 TMrbDGF.cxx:1318
 TMrbDGF.cxx:1319
 TMrbDGF.cxx:1320
 TMrbDGF.cxx:1321
 TMrbDGF.cxx:1322
 TMrbDGF.cxx:1323
 TMrbDGF.cxx:1324
 TMrbDGF.cxx:1325
 TMrbDGF.cxx:1326
 TMrbDGF.cxx:1327
 TMrbDGF.cxx:1328
 TMrbDGF.cxx:1329
 TMrbDGF.cxx:1330
 TMrbDGF.cxx:1331
 TMrbDGF.cxx:1332
 TMrbDGF.cxx:1333
 TMrbDGF.cxx:1334
 TMrbDGF.cxx:1335
 TMrbDGF.cxx:1336
 TMrbDGF.cxx:1337
 TMrbDGF.cxx:1338
 TMrbDGF.cxx:1339
 TMrbDGF.cxx:1340
 TMrbDGF.cxx:1341
 TMrbDGF.cxx:1342
 TMrbDGF.cxx:1343
 TMrbDGF.cxx:1344
 TMrbDGF.cxx:1345
 TMrbDGF.cxx:1346
 TMrbDGF.cxx:1347
 TMrbDGF.cxx:1348
 TMrbDGF.cxx:1349
 TMrbDGF.cxx:1350
 TMrbDGF.cxx:1351
 TMrbDGF.cxx:1352
 TMrbDGF.cxx:1353
 TMrbDGF.cxx:1354
 TMrbDGF.cxx:1355
 TMrbDGF.cxx:1356
 TMrbDGF.cxx:1357
 TMrbDGF.cxx:1358
 TMrbDGF.cxx:1359
 TMrbDGF.cxx:1360
 TMrbDGF.cxx:1361
 TMrbDGF.cxx:1362
 TMrbDGF.cxx:1363
 TMrbDGF.cxx:1364
 TMrbDGF.cxx:1365
 TMrbDGF.cxx:1366
 TMrbDGF.cxx:1367
 TMrbDGF.cxx:1368
 TMrbDGF.cxx:1369
 TMrbDGF.cxx:1370
 TMrbDGF.cxx:1371
 TMrbDGF.cxx:1372
 TMrbDGF.cxx:1373
 TMrbDGF.cxx:1374
 TMrbDGF.cxx:1375
 TMrbDGF.cxx:1376
 TMrbDGF.cxx:1377
 TMrbDGF.cxx:1378
 TMrbDGF.cxx:1379
 TMrbDGF.cxx:1380
 TMrbDGF.cxx:1381
 TMrbDGF.cxx:1382
 TMrbDGF.cxx:1383
 TMrbDGF.cxx:1384
 TMrbDGF.cxx:1385
 TMrbDGF.cxx:1386
 TMrbDGF.cxx:1387
 TMrbDGF.cxx:1388
 TMrbDGF.cxx:1389
 TMrbDGF.cxx:1390
 TMrbDGF.cxx:1391
 TMrbDGF.cxx:1392
 TMrbDGF.cxx:1393
 TMrbDGF.cxx:1394
 TMrbDGF.cxx:1395
 TMrbDGF.cxx:1396
 TMrbDGF.cxx:1397
 TMrbDGF.cxx:1398
 TMrbDGF.cxx:1399
 TMrbDGF.cxx:1400
 TMrbDGF.cxx:1401
 TMrbDGF.cxx:1402
 TMrbDGF.cxx:1403
 TMrbDGF.cxx:1404
 TMrbDGF.cxx:1405
 TMrbDGF.cxx:1406
 TMrbDGF.cxx:1407
 TMrbDGF.cxx:1408
 TMrbDGF.cxx:1409
 TMrbDGF.cxx:1410
 TMrbDGF.cxx:1411
 TMrbDGF.cxx:1412
 TMrbDGF.cxx:1413
 TMrbDGF.cxx:1414
 TMrbDGF.cxx:1415
 TMrbDGF.cxx:1416
 TMrbDGF.cxx:1417
 TMrbDGF.cxx:1418
 TMrbDGF.cxx:1419
 TMrbDGF.cxx:1420
 TMrbDGF.cxx:1421
 TMrbDGF.cxx:1422
 TMrbDGF.cxx:1423
 TMrbDGF.cxx:1424
 TMrbDGF.cxx:1425
 TMrbDGF.cxx:1426
 TMrbDGF.cxx:1427
 TMrbDGF.cxx:1428
 TMrbDGF.cxx:1429
 TMrbDGF.cxx:1430
 TMrbDGF.cxx:1431
 TMrbDGF.cxx:1432
 TMrbDGF.cxx:1433
 TMrbDGF.cxx:1434
 TMrbDGF.cxx:1435
 TMrbDGF.cxx:1436
 TMrbDGF.cxx:1437
 TMrbDGF.cxx:1438
 TMrbDGF.cxx:1439
 TMrbDGF.cxx:1440
 TMrbDGF.cxx:1441
 TMrbDGF.cxx:1442
 TMrbDGF.cxx:1443
 TMrbDGF.cxx:1444
 TMrbDGF.cxx:1445
 TMrbDGF.cxx:1446
 TMrbDGF.cxx:1447
 TMrbDGF.cxx:1448
 TMrbDGF.cxx:1449
 TMrbDGF.cxx:1450
 TMrbDGF.cxx:1451
 TMrbDGF.cxx:1452
 TMrbDGF.cxx:1453
 TMrbDGF.cxx:1454
 TMrbDGF.cxx:1455
 TMrbDGF.cxx:1456
 TMrbDGF.cxx:1457
 TMrbDGF.cxx:1458
 TMrbDGF.cxx:1459
 TMrbDGF.cxx:1460
 TMrbDGF.cxx:1461
 TMrbDGF.cxx:1462
 TMrbDGF.cxx:1463
 TMrbDGF.cxx:1464
 TMrbDGF.cxx:1465
 TMrbDGF.cxx:1466
 TMrbDGF.cxx:1467
 TMrbDGF.cxx:1468
 TMrbDGF.cxx:1469
 TMrbDGF.cxx:1470
 TMrbDGF.cxx:1471
 TMrbDGF.cxx:1472
 TMrbDGF.cxx:1473
 TMrbDGF.cxx:1474
 TMrbDGF.cxx:1475
 TMrbDGF.cxx:1476
 TMrbDGF.cxx:1477
 TMrbDGF.cxx:1478
 TMrbDGF.cxx:1479
 TMrbDGF.cxx:1480
 TMrbDGF.cxx:1481
 TMrbDGF.cxx:1482
 TMrbDGF.cxx:1483
 TMrbDGF.cxx:1484
 TMrbDGF.cxx:1485
 TMrbDGF.cxx:1486
 TMrbDGF.cxx:1487
 TMrbDGF.cxx:1488
 TMrbDGF.cxx:1489
 TMrbDGF.cxx:1490
 TMrbDGF.cxx:1491
 TMrbDGF.cxx:1492
 TMrbDGF.cxx:1493
 TMrbDGF.cxx:1494
 TMrbDGF.cxx:1495
 TMrbDGF.cxx:1496
 TMrbDGF.cxx:1497
 TMrbDGF.cxx:1498
 TMrbDGF.cxx:1499
 TMrbDGF.cxx:1500
 TMrbDGF.cxx:1501
 TMrbDGF.cxx:1502
 TMrbDGF.cxx:1503
 TMrbDGF.cxx:1504
 TMrbDGF.cxx:1505
 TMrbDGF.cxx:1506
 TMrbDGF.cxx:1507
 TMrbDGF.cxx:1508
 TMrbDGF.cxx:1509
 TMrbDGF.cxx:1510
 TMrbDGF.cxx:1511
 TMrbDGF.cxx:1512
 TMrbDGF.cxx:1513
 TMrbDGF.cxx:1514
 TMrbDGF.cxx:1515
 TMrbDGF.cxx:1516
 TMrbDGF.cxx:1517
 TMrbDGF.cxx:1518
 TMrbDGF.cxx:1519
 TMrbDGF.cxx:1520
 TMrbDGF.cxx:1521
 TMrbDGF.cxx:1522
 TMrbDGF.cxx:1523
 TMrbDGF.cxx:1524
 TMrbDGF.cxx:1525
 TMrbDGF.cxx:1526
 TMrbDGF.cxx:1527
 TMrbDGF.cxx:1528
 TMrbDGF.cxx:1529
 TMrbDGF.cxx:1530
 TMrbDGF.cxx:1531
 TMrbDGF.cxx:1532
 TMrbDGF.cxx:1533
 TMrbDGF.cxx:1534
 TMrbDGF.cxx:1535
 TMrbDGF.cxx:1536
 TMrbDGF.cxx:1537
 TMrbDGF.cxx:1538
 TMrbDGF.cxx:1539
 TMrbDGF.cxx:1540
 TMrbDGF.cxx:1541
 TMrbDGF.cxx:1542
 TMrbDGF.cxx:1543
 TMrbDGF.cxx:1544
 TMrbDGF.cxx:1545
 TMrbDGF.cxx:1546
 TMrbDGF.cxx:1547
 TMrbDGF.cxx:1548
 TMrbDGF.cxx:1549
 TMrbDGF.cxx:1550
 TMrbDGF.cxx:1551
 TMrbDGF.cxx:1552
 TMrbDGF.cxx:1553
 TMrbDGF.cxx:1554
 TMrbDGF.cxx:1555
 TMrbDGF.cxx:1556
 TMrbDGF.cxx:1557
 TMrbDGF.cxx:1558
 TMrbDGF.cxx:1559
 TMrbDGF.cxx:1560
 TMrbDGF.cxx:1561
 TMrbDGF.cxx:1562
 TMrbDGF.cxx:1563
 TMrbDGF.cxx:1564
 TMrbDGF.cxx:1565
 TMrbDGF.cxx:1566
 TMrbDGF.cxx:1567
 TMrbDGF.cxx:1568
 TMrbDGF.cxx:1569
 TMrbDGF.cxx:1570
 TMrbDGF.cxx:1571
 TMrbDGF.cxx:1572
 TMrbDGF.cxx:1573
 TMrbDGF.cxx:1574
 TMrbDGF.cxx:1575
 TMrbDGF.cxx:1576
 TMrbDGF.cxx:1577
 TMrbDGF.cxx:1578
 TMrbDGF.cxx:1579
 TMrbDGF.cxx:1580
 TMrbDGF.cxx:1581
 TMrbDGF.cxx:1582
 TMrbDGF.cxx:1583
 TMrbDGF.cxx:1584
 TMrbDGF.cxx:1585
 TMrbDGF.cxx:1586
 TMrbDGF.cxx:1587
 TMrbDGF.cxx:1588
 TMrbDGF.cxx:1589
 TMrbDGF.cxx:1590
 TMrbDGF.cxx:1591
 TMrbDGF.cxx:1592
 TMrbDGF.cxx:1593
 TMrbDGF.cxx:1594
 TMrbDGF.cxx:1595
 TMrbDGF.cxx:1596
 TMrbDGF.cxx:1597
 TMrbDGF.cxx:1598
 TMrbDGF.cxx:1599
 TMrbDGF.cxx:1600
 TMrbDGF.cxx:1601
 TMrbDGF.cxx:1602
 TMrbDGF.cxx:1603
 TMrbDGF.cxx:1604
 TMrbDGF.cxx:1605
 TMrbDGF.cxx:1606
 TMrbDGF.cxx:1607
 TMrbDGF.cxx:1608
 TMrbDGF.cxx:1609
 TMrbDGF.cxx:1610
 TMrbDGF.cxx:1611
 TMrbDGF.cxx:1612
 TMrbDGF.cxx:1613
 TMrbDGF.cxx:1614
 TMrbDGF.cxx:1615
 TMrbDGF.cxx:1616
 TMrbDGF.cxx:1617
 TMrbDGF.cxx:1618
 TMrbDGF.cxx:1619
 TMrbDGF.cxx:1620
 TMrbDGF.cxx:1621
 TMrbDGF.cxx:1622
 TMrbDGF.cxx:1623
 TMrbDGF.cxx:1624
 TMrbDGF.cxx:1625
 TMrbDGF.cxx:1626
 TMrbDGF.cxx:1627
 TMrbDGF.cxx:1628
 TMrbDGF.cxx:1629
 TMrbDGF.cxx:1630
 TMrbDGF.cxx:1631
 TMrbDGF.cxx:1632
 TMrbDGF.cxx:1633
 TMrbDGF.cxx:1634
 TMrbDGF.cxx:1635
 TMrbDGF.cxx:1636
 TMrbDGF.cxx:1637
 TMrbDGF.cxx:1638
 TMrbDGF.cxx:1639
 TMrbDGF.cxx:1640
 TMrbDGF.cxx:1641
 TMrbDGF.cxx:1642
 TMrbDGF.cxx:1643
 TMrbDGF.cxx:1644
 TMrbDGF.cxx:1645
 TMrbDGF.cxx:1646
 TMrbDGF.cxx:1647
 TMrbDGF.cxx:1648
 TMrbDGF.cxx:1649
 TMrbDGF.cxx:1650
 TMrbDGF.cxx:1651
 TMrbDGF.cxx:1652
 TMrbDGF.cxx:1653
 TMrbDGF.cxx:1654
 TMrbDGF.cxx:1655
 TMrbDGF.cxx:1656
 TMrbDGF.cxx:1657
 TMrbDGF.cxx:1658
 TMrbDGF.cxx:1659
 TMrbDGF.cxx:1660
 TMrbDGF.cxx:1661
 TMrbDGF.cxx:1662
 TMrbDGF.cxx:1663
 TMrbDGF.cxx:1664
 TMrbDGF.cxx:1665
 TMrbDGF.cxx:1666
 TMrbDGF.cxx:1667
 TMrbDGF.cxx:1668
 TMrbDGF.cxx:1669
 TMrbDGF.cxx:1670
 TMrbDGF.cxx:1671
 TMrbDGF.cxx:1672
 TMrbDGF.cxx:1673
 TMrbDGF.cxx:1674
 TMrbDGF.cxx:1675
 TMrbDGF.cxx:1676
 TMrbDGF.cxx:1677
 TMrbDGF.cxx:1678
 TMrbDGF.cxx:1679
 TMrbDGF.cxx:1680
 TMrbDGF.cxx:1681
 TMrbDGF.cxx:1682
 TMrbDGF.cxx:1683
 TMrbDGF.cxx:1684
 TMrbDGF.cxx:1685
 TMrbDGF.cxx:1686
 TMrbDGF.cxx:1687
 TMrbDGF.cxx:1688
 TMrbDGF.cxx:1689
 TMrbDGF.cxx:1690
 TMrbDGF.cxx:1691
 TMrbDGF.cxx:1692
 TMrbDGF.cxx:1693
 TMrbDGF.cxx:1694
 TMrbDGF.cxx:1695
 TMrbDGF.cxx:1696
 TMrbDGF.cxx:1697
 TMrbDGF.cxx:1698
 TMrbDGF.cxx:1699
 TMrbDGF.cxx:1700
 TMrbDGF.cxx:1701
 TMrbDGF.cxx:1702
 TMrbDGF.cxx:1703
 TMrbDGF.cxx:1704
 TMrbDGF.cxx:1705
 TMrbDGF.cxx:1706
 TMrbDGF.cxx:1707
 TMrbDGF.cxx:1708
 TMrbDGF.cxx:1709
 TMrbDGF.cxx:1710
 TMrbDGF.cxx:1711
 TMrbDGF.cxx:1712
 TMrbDGF.cxx:1713
 TMrbDGF.cxx:1714
 TMrbDGF.cxx:1715
 TMrbDGF.cxx:1716
 TMrbDGF.cxx:1717
 TMrbDGF.cxx:1718
 TMrbDGF.cxx:1719
 TMrbDGF.cxx:1720
 TMrbDGF.cxx:1721
 TMrbDGF.cxx:1722
 TMrbDGF.cxx:1723
 TMrbDGF.cxx:1724
 TMrbDGF.cxx:1725
 TMrbDGF.cxx:1726
 TMrbDGF.cxx:1727
 TMrbDGF.cxx:1728
 TMrbDGF.cxx:1729
 TMrbDGF.cxx:1730
 TMrbDGF.cxx:1731
 TMrbDGF.cxx:1732
 TMrbDGF.cxx:1733
 TMrbDGF.cxx:1734
 TMrbDGF.cxx:1735
 TMrbDGF.cxx:1736
 TMrbDGF.cxx:1737
 TMrbDGF.cxx:1738
 TMrbDGF.cxx:1739
 TMrbDGF.cxx:1740
 TMrbDGF.cxx:1741
 TMrbDGF.cxx:1742
 TMrbDGF.cxx:1743
 TMrbDGF.cxx:1744
 TMrbDGF.cxx:1745
 TMrbDGF.cxx:1746
 TMrbDGF.cxx:1747
 TMrbDGF.cxx:1748
 TMrbDGF.cxx:1749
 TMrbDGF.cxx:1750
 TMrbDGF.cxx:1751
 TMrbDGF.cxx:1752
 TMrbDGF.cxx:1753
 TMrbDGF.cxx:1754
 TMrbDGF.cxx:1755
 TMrbDGF.cxx:1756
 TMrbDGF.cxx:1757
 TMrbDGF.cxx:1758
 TMrbDGF.cxx:1759
 TMrbDGF.cxx:1760
 TMrbDGF.cxx:1761
 TMrbDGF.cxx:1762
 TMrbDGF.cxx:1763
 TMrbDGF.cxx:1764
 TMrbDGF.cxx:1765
 TMrbDGF.cxx:1766
 TMrbDGF.cxx:1767
 TMrbDGF.cxx:1768
 TMrbDGF.cxx:1769
 TMrbDGF.cxx:1770
 TMrbDGF.cxx:1771
 TMrbDGF.cxx:1772
 TMrbDGF.cxx:1773
 TMrbDGF.cxx:1774
 TMrbDGF.cxx:1775
 TMrbDGF.cxx:1776
 TMrbDGF.cxx:1777
 TMrbDGF.cxx:1778
 TMrbDGF.cxx:1779
 TMrbDGF.cxx:1780
 TMrbDGF.cxx:1781
 TMrbDGF.cxx:1782
 TMrbDGF.cxx:1783
 TMrbDGF.cxx:1784
 TMrbDGF.cxx:1785
 TMrbDGF.cxx:1786
 TMrbDGF.cxx:1787
 TMrbDGF.cxx:1788
 TMrbDGF.cxx:1789
 TMrbDGF.cxx:1790
 TMrbDGF.cxx:1791
 TMrbDGF.cxx:1792
 TMrbDGF.cxx:1793
 TMrbDGF.cxx:1794
 TMrbDGF.cxx:1795
 TMrbDGF.cxx:1796
 TMrbDGF.cxx:1797
 TMrbDGF.cxx:1798
 TMrbDGF.cxx:1799
 TMrbDGF.cxx:1800
 TMrbDGF.cxx:1801
 TMrbDGF.cxx:1802
 TMrbDGF.cxx:1803
 TMrbDGF.cxx:1804
 TMrbDGF.cxx:1805
 TMrbDGF.cxx:1806
 TMrbDGF.cxx:1807
 TMrbDGF.cxx:1808
 TMrbDGF.cxx:1809
 TMrbDGF.cxx:1810
 TMrbDGF.cxx:1811
 TMrbDGF.cxx:1812
 TMrbDGF.cxx:1813
 TMrbDGF.cxx:1814
 TMrbDGF.cxx:1815
 TMrbDGF.cxx:1816
 TMrbDGF.cxx:1817
 TMrbDGF.cxx:1818
 TMrbDGF.cxx:1819
 TMrbDGF.cxx:1820
 TMrbDGF.cxx:1821
 TMrbDGF.cxx:1822
 TMrbDGF.cxx:1823
 TMrbDGF.cxx:1824
 TMrbDGF.cxx:1825
 TMrbDGF.cxx:1826
 TMrbDGF.cxx:1827
 TMrbDGF.cxx:1828
 TMrbDGF.cxx:1829
 TMrbDGF.cxx:1830
 TMrbDGF.cxx:1831
 TMrbDGF.cxx:1832
 TMrbDGF.cxx:1833
 TMrbDGF.cxx:1834
 TMrbDGF.cxx:1835
 TMrbDGF.cxx:1836
 TMrbDGF.cxx:1837
 TMrbDGF.cxx:1838
 TMrbDGF.cxx:1839
 TMrbDGF.cxx:1840
 TMrbDGF.cxx:1841
 TMrbDGF.cxx:1842
 TMrbDGF.cxx:1843
 TMrbDGF.cxx:1844
 TMrbDGF.cxx:1845
 TMrbDGF.cxx:1846
 TMrbDGF.cxx:1847
 TMrbDGF.cxx:1848
 TMrbDGF.cxx:1849
 TMrbDGF.cxx:1850
 TMrbDGF.cxx:1851
 TMrbDGF.cxx:1852
 TMrbDGF.cxx:1853
 TMrbDGF.cxx:1854
 TMrbDGF.cxx:1855
 TMrbDGF.cxx:1856
 TMrbDGF.cxx:1857
 TMrbDGF.cxx:1858
 TMrbDGF.cxx:1859
 TMrbDGF.cxx:1860
 TMrbDGF.cxx:1861
 TMrbDGF.cxx:1862
 TMrbDGF.cxx:1863
 TMrbDGF.cxx:1864
 TMrbDGF.cxx:1865
 TMrbDGF.cxx:1866
 TMrbDGF.cxx:1867
 TMrbDGF.cxx:1868
 TMrbDGF.cxx:1869
 TMrbDGF.cxx:1870
 TMrbDGF.cxx:1871
 TMrbDGF.cxx:1872
 TMrbDGF.cxx:1873
 TMrbDGF.cxx:1874
 TMrbDGF.cxx:1875
 TMrbDGF.cxx:1876
 TMrbDGF.cxx:1877
 TMrbDGF.cxx:1878
 TMrbDGF.cxx:1879
 TMrbDGF.cxx:1880
 TMrbDGF.cxx:1881
 TMrbDGF.cxx:1882
 TMrbDGF.cxx:1883
 TMrbDGF.cxx:1884
 TMrbDGF.cxx:1885
 TMrbDGF.cxx:1886
 TMrbDGF.cxx:1887
 TMrbDGF.cxx:1888
 TMrbDGF.cxx:1889
 TMrbDGF.cxx:1890
 TMrbDGF.cxx:1891
 TMrbDGF.cxx:1892
 TMrbDGF.cxx:1893
 TMrbDGF.cxx:1894
 TMrbDGF.cxx:1895
 TMrbDGF.cxx:1896
 TMrbDGF.cxx:1897
 TMrbDGF.cxx:1898
 TMrbDGF.cxx:1899
 TMrbDGF.cxx:1900
 TMrbDGF.cxx:1901
 TMrbDGF.cxx:1902
 TMrbDGF.cxx:1903
 TMrbDGF.cxx:1904
 TMrbDGF.cxx:1905
 TMrbDGF.cxx:1906
 TMrbDGF.cxx:1907
 TMrbDGF.cxx:1908
 TMrbDGF.cxx:1909
 TMrbDGF.cxx:1910
 TMrbDGF.cxx:1911
 TMrbDGF.cxx:1912
 TMrbDGF.cxx:1913
 TMrbDGF.cxx:1914
 TMrbDGF.cxx:1915
 TMrbDGF.cxx:1916
 TMrbDGF.cxx:1917
 TMrbDGF.cxx:1918
 TMrbDGF.cxx:1919
 TMrbDGF.cxx:1920
 TMrbDGF.cxx:1921
 TMrbDGF.cxx:1922
 TMrbDGF.cxx:1923
 TMrbDGF.cxx:1924
 TMrbDGF.cxx:1925
 TMrbDGF.cxx:1926
 TMrbDGF.cxx:1927
 TMrbDGF.cxx:1928
 TMrbDGF.cxx:1929
 TMrbDGF.cxx:1930
 TMrbDGF.cxx:1931
 TMrbDGF.cxx:1932
 TMrbDGF.cxx:1933
 TMrbDGF.cxx:1934
 TMrbDGF.cxx:1935
 TMrbDGF.cxx:1936
 TMrbDGF.cxx:1937
 TMrbDGF.cxx:1938
 TMrbDGF.cxx:1939
 TMrbDGF.cxx:1940
 TMrbDGF.cxx:1941
 TMrbDGF.cxx:1942
 TMrbDGF.cxx:1943
 TMrbDGF.cxx:1944
 TMrbDGF.cxx:1945
 TMrbDGF.cxx:1946
 TMrbDGF.cxx:1947
 TMrbDGF.cxx:1948
 TMrbDGF.cxx:1949
 TMrbDGF.cxx:1950
 TMrbDGF.cxx:1951
 TMrbDGF.cxx:1952
 TMrbDGF.cxx:1953
 TMrbDGF.cxx:1954
 TMrbDGF.cxx:1955
 TMrbDGF.cxx:1956
 TMrbDGF.cxx:1957
 TMrbDGF.cxx:1958
 TMrbDGF.cxx:1959
 TMrbDGF.cxx:1960
 TMrbDGF.cxx:1961
 TMrbDGF.cxx:1962
 TMrbDGF.cxx:1963
 TMrbDGF.cxx:1964
 TMrbDGF.cxx:1965
 TMrbDGF.cxx:1966
 TMrbDGF.cxx:1967
 TMrbDGF.cxx:1968
 TMrbDGF.cxx:1969
 TMrbDGF.cxx:1970
 TMrbDGF.cxx:1971
 TMrbDGF.cxx:1972
 TMrbDGF.cxx:1973
 TMrbDGF.cxx:1974
 TMrbDGF.cxx:1975
 TMrbDGF.cxx:1976
 TMrbDGF.cxx:1977
 TMrbDGF.cxx:1978
 TMrbDGF.cxx:1979
 TMrbDGF.cxx:1980
 TMrbDGF.cxx:1981
 TMrbDGF.cxx:1982
 TMrbDGF.cxx:1983
 TMrbDGF.cxx:1984
 TMrbDGF.cxx:1985
 TMrbDGF.cxx:1986
 TMrbDGF.cxx:1987
 TMrbDGF.cxx:1988
 TMrbDGF.cxx:1989
 TMrbDGF.cxx:1990
 TMrbDGF.cxx:1991
 TMrbDGF.cxx:1992
 TMrbDGF.cxx:1993
 TMrbDGF.cxx:1994
 TMrbDGF.cxx:1995
 TMrbDGF.cxx:1996
 TMrbDGF.cxx:1997
 TMrbDGF.cxx:1998
 TMrbDGF.cxx:1999
 TMrbDGF.cxx:2000
 TMrbDGF.cxx:2001
 TMrbDGF.cxx:2002
 TMrbDGF.cxx:2003
 TMrbDGF.cxx:2004
 TMrbDGF.cxx:2005
 TMrbDGF.cxx:2006
 TMrbDGF.cxx:2007
 TMrbDGF.cxx:2008
 TMrbDGF.cxx:2009
 TMrbDGF.cxx:2010
 TMrbDGF.cxx:2011
 TMrbDGF.cxx:2012
 TMrbDGF.cxx:2013
 TMrbDGF.cxx:2014
 TMrbDGF.cxx:2015
 TMrbDGF.cxx:2016
 TMrbDGF.cxx:2017
 TMrbDGF.cxx:2018
 TMrbDGF.cxx:2019
 TMrbDGF.cxx:2020
 TMrbDGF.cxx:2021
 TMrbDGF.cxx:2022
 TMrbDGF.cxx:2023
 TMrbDGF.cxx:2024
 TMrbDGF.cxx:2025
 TMrbDGF.cxx:2026
 TMrbDGF.cxx:2027
 TMrbDGF.cxx:2028
 TMrbDGF.cxx:2029
 TMrbDGF.cxx:2030
 TMrbDGF.cxx:2031
 TMrbDGF.cxx:2032
 TMrbDGF.cxx:2033
 TMrbDGF.cxx:2034
 TMrbDGF.cxx:2035
 TMrbDGF.cxx:2036
 TMrbDGF.cxx:2037
 TMrbDGF.cxx:2038
 TMrbDGF.cxx:2039
 TMrbDGF.cxx:2040
 TMrbDGF.cxx:2041
 TMrbDGF.cxx:2042
 TMrbDGF.cxx:2043
 TMrbDGF.cxx:2044
 TMrbDGF.cxx:2045
 TMrbDGF.cxx:2046
 TMrbDGF.cxx:2047
 TMrbDGF.cxx:2048
 TMrbDGF.cxx:2049
 TMrbDGF.cxx:2050
 TMrbDGF.cxx:2051
 TMrbDGF.cxx:2052
 TMrbDGF.cxx:2053
 TMrbDGF.cxx:2054
 TMrbDGF.cxx:2055
 TMrbDGF.cxx:2056
 TMrbDGF.cxx:2057
 TMrbDGF.cxx:2058
 TMrbDGF.cxx:2059
 TMrbDGF.cxx:2060
 TMrbDGF.cxx:2061
 TMrbDGF.cxx:2062
 TMrbDGF.cxx:2063
 TMrbDGF.cxx:2064
 TMrbDGF.cxx:2065
 TMrbDGF.cxx:2066
 TMrbDGF.cxx:2067
 TMrbDGF.cxx:2068
 TMrbDGF.cxx:2069
 TMrbDGF.cxx:2070
 TMrbDGF.cxx:2071
 TMrbDGF.cxx:2072
 TMrbDGF.cxx:2073
 TMrbDGF.cxx:2074
 TMrbDGF.cxx:2075
 TMrbDGF.cxx:2076
 TMrbDGF.cxx:2077
 TMrbDGF.cxx:2078
 TMrbDGF.cxx:2079
 TMrbDGF.cxx:2080
 TMrbDGF.cxx:2081
 TMrbDGF.cxx:2082
 TMrbDGF.cxx:2083
 TMrbDGF.cxx:2084
 TMrbDGF.cxx:2085
 TMrbDGF.cxx:2086
 TMrbDGF.cxx:2087
 TMrbDGF.cxx:2088
 TMrbDGF.cxx:2089
 TMrbDGF.cxx:2090
 TMrbDGF.cxx:2091
 TMrbDGF.cxx:2092
 TMrbDGF.cxx:2093
 TMrbDGF.cxx:2094
 TMrbDGF.cxx:2095
 TMrbDGF.cxx:2096
 TMrbDGF.cxx:2097
 TMrbDGF.cxx:2098
 TMrbDGF.cxx:2099
 TMrbDGF.cxx:2100
 TMrbDGF.cxx:2101
 TMrbDGF.cxx:2102
 TMrbDGF.cxx:2103
 TMrbDGF.cxx:2104
 TMrbDGF.cxx:2105
 TMrbDGF.cxx:2106
 TMrbDGF.cxx:2107
 TMrbDGF.cxx:2108
 TMrbDGF.cxx:2109
 TMrbDGF.cxx:2110
 TMrbDGF.cxx:2111
 TMrbDGF.cxx:2112
 TMrbDGF.cxx:2113
 TMrbDGF.cxx:2114
 TMrbDGF.cxx:2115
 TMrbDGF.cxx:2116
 TMrbDGF.cxx:2117
 TMrbDGF.cxx:2118
 TMrbDGF.cxx:2119
 TMrbDGF.cxx:2120
 TMrbDGF.cxx:2121
 TMrbDGF.cxx:2122
 TMrbDGF.cxx:2123
 TMrbDGF.cxx:2124
 TMrbDGF.cxx:2125
 TMrbDGF.cxx:2126
 TMrbDGF.cxx:2127
 TMrbDGF.cxx:2128
 TMrbDGF.cxx:2129
 TMrbDGF.cxx:2130
 TMrbDGF.cxx:2131
 TMrbDGF.cxx:2132
 TMrbDGF.cxx:2133
 TMrbDGF.cxx:2134
 TMrbDGF.cxx:2135
 TMrbDGF.cxx:2136
 TMrbDGF.cxx:2137
 TMrbDGF.cxx:2138
 TMrbDGF.cxx:2139
 TMrbDGF.cxx:2140
 TMrbDGF.cxx:2141
 TMrbDGF.cxx:2142
 TMrbDGF.cxx:2143
 TMrbDGF.cxx:2144
 TMrbDGF.cxx:2145
 TMrbDGF.cxx:2146
 TMrbDGF.cxx:2147
 TMrbDGF.cxx:2148
 TMrbDGF.cxx:2149
 TMrbDGF.cxx:2150
 TMrbDGF.cxx:2151
 TMrbDGF.cxx:2152
 TMrbDGF.cxx:2153
 TMrbDGF.cxx:2154
 TMrbDGF.cxx:2155
 TMrbDGF.cxx:2156
 TMrbDGF.cxx:2157
 TMrbDGF.cxx:2158
 TMrbDGF.cxx:2159
 TMrbDGF.cxx:2160
 TMrbDGF.cxx:2161
 TMrbDGF.cxx:2162
 TMrbDGF.cxx:2163
 TMrbDGF.cxx:2164
 TMrbDGF.cxx:2165
 TMrbDGF.cxx:2166
 TMrbDGF.cxx:2167
 TMrbDGF.cxx:2168
 TMrbDGF.cxx:2169
 TMrbDGF.cxx:2170
 TMrbDGF.cxx:2171
 TMrbDGF.cxx:2172
 TMrbDGF.cxx:2173
 TMrbDGF.cxx:2174
 TMrbDGF.cxx:2175
 TMrbDGF.cxx:2176
 TMrbDGF.cxx:2177
 TMrbDGF.cxx:2178
 TMrbDGF.cxx:2179
 TMrbDGF.cxx:2180
 TMrbDGF.cxx:2181
 TMrbDGF.cxx:2182
 TMrbDGF.cxx:2183
 TMrbDGF.cxx:2184
 TMrbDGF.cxx:2185
 TMrbDGF.cxx:2186
 TMrbDGF.cxx:2187
 TMrbDGF.cxx:2188
 TMrbDGF.cxx:2189
 TMrbDGF.cxx:2190
 TMrbDGF.cxx:2191
 TMrbDGF.cxx:2192
 TMrbDGF.cxx:2193
 TMrbDGF.cxx:2194
 TMrbDGF.cxx:2195
 TMrbDGF.cxx:2196
 TMrbDGF.cxx:2197
 TMrbDGF.cxx:2198
 TMrbDGF.cxx:2199
 TMrbDGF.cxx:2200
 TMrbDGF.cxx:2201
 TMrbDGF.cxx:2202
 TMrbDGF.cxx:2203
 TMrbDGF.cxx:2204
 TMrbDGF.cxx:2205
 TMrbDGF.cxx:2206
 TMrbDGF.cxx:2207
 TMrbDGF.cxx:2208
 TMrbDGF.cxx:2209
 TMrbDGF.cxx:2210
 TMrbDGF.cxx:2211
 TMrbDGF.cxx:2212
 TMrbDGF.cxx:2213
 TMrbDGF.cxx:2214
 TMrbDGF.cxx:2215
 TMrbDGF.cxx:2216
 TMrbDGF.cxx:2217
 TMrbDGF.cxx:2218
 TMrbDGF.cxx:2219
 TMrbDGF.cxx:2220
 TMrbDGF.cxx:2221
 TMrbDGF.cxx:2222
 TMrbDGF.cxx:2223
 TMrbDGF.cxx:2224
 TMrbDGF.cxx:2225
 TMrbDGF.cxx:2226
 TMrbDGF.cxx:2227
 TMrbDGF.cxx:2228
 TMrbDGF.cxx:2229
 TMrbDGF.cxx:2230
 TMrbDGF.cxx:2231
 TMrbDGF.cxx:2232
 TMrbDGF.cxx:2233
 TMrbDGF.cxx:2234
 TMrbDGF.cxx:2235
 TMrbDGF.cxx:2236
 TMrbDGF.cxx:2237
 TMrbDGF.cxx:2238
 TMrbDGF.cxx:2239
 TMrbDGF.cxx:2240
 TMrbDGF.cxx:2241
 TMrbDGF.cxx:2242
 TMrbDGF.cxx:2243
 TMrbDGF.cxx:2244
 TMrbDGF.cxx:2245
 TMrbDGF.cxx:2246
 TMrbDGF.cxx:2247
 TMrbDGF.cxx:2248
 TMrbDGF.cxx:2249
 TMrbDGF.cxx:2250
 TMrbDGF.cxx:2251
 TMrbDGF.cxx:2252
 TMrbDGF.cxx:2253
 TMrbDGF.cxx:2254
 TMrbDGF.cxx:2255
 TMrbDGF.cxx:2256
 TMrbDGF.cxx:2257
 TMrbDGF.cxx:2258
 TMrbDGF.cxx:2259
 TMrbDGF.cxx:2260
 TMrbDGF.cxx:2261
 TMrbDGF.cxx:2262
 TMrbDGF.cxx:2263
 TMrbDGF.cxx:2264
 TMrbDGF.cxx:2265
 TMrbDGF.cxx:2266
 TMrbDGF.cxx:2267
 TMrbDGF.cxx:2268
 TMrbDGF.cxx:2269
 TMrbDGF.cxx:2270
 TMrbDGF.cxx:2271
 TMrbDGF.cxx:2272
 TMrbDGF.cxx:2273
 TMrbDGF.cxx:2274
 TMrbDGF.cxx:2275
 TMrbDGF.cxx:2276
 TMrbDGF.cxx:2277
 TMrbDGF.cxx:2278
 TMrbDGF.cxx:2279
 TMrbDGF.cxx:2280
 TMrbDGF.cxx:2281
 TMrbDGF.cxx:2282
 TMrbDGF.cxx:2283
 TMrbDGF.cxx:2284
 TMrbDGF.cxx:2285
 TMrbDGF.cxx:2286
 TMrbDGF.cxx:2287
 TMrbDGF.cxx:2288
 TMrbDGF.cxx:2289
 TMrbDGF.cxx:2290
 TMrbDGF.cxx:2291
 TMrbDGF.cxx:2292
 TMrbDGF.cxx:2293
 TMrbDGF.cxx:2294
 TMrbDGF.cxx:2295
 TMrbDGF.cxx:2296
 TMrbDGF.cxx:2297
 TMrbDGF.cxx:2298
 TMrbDGF.cxx:2299
 TMrbDGF.cxx:2300
 TMrbDGF.cxx:2301
 TMrbDGF.cxx:2302
 TMrbDGF.cxx:2303
 TMrbDGF.cxx:2304
 TMrbDGF.cxx:2305
 TMrbDGF.cxx:2306
 TMrbDGF.cxx:2307
 TMrbDGF.cxx:2308
 TMrbDGF.cxx:2309
 TMrbDGF.cxx:2310
 TMrbDGF.cxx:2311
 TMrbDGF.cxx:2312
 TMrbDGF.cxx:2313
 TMrbDGF.cxx:2314
 TMrbDGF.cxx:2315
 TMrbDGF.cxx:2316
 TMrbDGF.cxx:2317
 TMrbDGF.cxx:2318
 TMrbDGF.cxx:2319
 TMrbDGF.cxx:2320
 TMrbDGF.cxx:2321
 TMrbDGF.cxx:2322
 TMrbDGF.cxx:2323
 TMrbDGF.cxx:2324
 TMrbDGF.cxx:2325
 TMrbDGF.cxx:2326
 TMrbDGF.cxx:2327
 TMrbDGF.cxx:2328
 TMrbDGF.cxx:2329
 TMrbDGF.cxx:2330
 TMrbDGF.cxx:2331
 TMrbDGF.cxx:2332
 TMrbDGF.cxx:2333
 TMrbDGF.cxx:2334
 TMrbDGF.cxx:2335
 TMrbDGF.cxx:2336
 TMrbDGF.cxx:2337
 TMrbDGF.cxx:2338
 TMrbDGF.cxx:2339
 TMrbDGF.cxx:2340
 TMrbDGF.cxx:2341
 TMrbDGF.cxx:2342
 TMrbDGF.cxx:2343
 TMrbDGF.cxx:2344
 TMrbDGF.cxx:2345
 TMrbDGF.cxx:2346
 TMrbDGF.cxx:2347
 TMrbDGF.cxx:2348
 TMrbDGF.cxx:2349
 TMrbDGF.cxx:2350
 TMrbDGF.cxx:2351
 TMrbDGF.cxx:2352
 TMrbDGF.cxx:2353
 TMrbDGF.cxx:2354
 TMrbDGF.cxx:2355
 TMrbDGF.cxx:2356
 TMrbDGF.cxx:2357
 TMrbDGF.cxx:2358
 TMrbDGF.cxx:2359
 TMrbDGF.cxx:2360
 TMrbDGF.cxx:2361
 TMrbDGF.cxx:2362
 TMrbDGF.cxx:2363
 TMrbDGF.cxx:2364
 TMrbDGF.cxx:2365
 TMrbDGF.cxx:2366
 TMrbDGF.cxx:2367
 TMrbDGF.cxx:2368
 TMrbDGF.cxx:2369
 TMrbDGF.cxx:2370
 TMrbDGF.cxx:2371
 TMrbDGF.cxx:2372
 TMrbDGF.cxx:2373
 TMrbDGF.cxx:2374
 TMrbDGF.cxx:2375
 TMrbDGF.cxx:2376
 TMrbDGF.cxx:2377
 TMrbDGF.cxx:2378
 TMrbDGF.cxx:2379
 TMrbDGF.cxx:2380
 TMrbDGF.cxx:2381
 TMrbDGF.cxx:2382
 TMrbDGF.cxx:2383
 TMrbDGF.cxx:2384
 TMrbDGF.cxx:2385
 TMrbDGF.cxx:2386
 TMrbDGF.cxx:2387
 TMrbDGF.cxx:2388
 TMrbDGF.cxx:2389
 TMrbDGF.cxx:2390
 TMrbDGF.cxx:2391
 TMrbDGF.cxx:2392
 TMrbDGF.cxx:2393
 TMrbDGF.cxx:2394
 TMrbDGF.cxx:2395
 TMrbDGF.cxx:2396
 TMrbDGF.cxx:2397
 TMrbDGF.cxx:2398
 TMrbDGF.cxx:2399
 TMrbDGF.cxx:2400
 TMrbDGF.cxx:2401
 TMrbDGF.cxx:2402
 TMrbDGF.cxx:2403
 TMrbDGF.cxx:2404
 TMrbDGF.cxx:2405
 TMrbDGF.cxx:2406
 TMrbDGF.cxx:2407
 TMrbDGF.cxx:2408
 TMrbDGF.cxx:2409
 TMrbDGF.cxx:2410
 TMrbDGF.cxx:2411
 TMrbDGF.cxx:2412
 TMrbDGF.cxx:2413
 TMrbDGF.cxx:2414
 TMrbDGF.cxx:2415
 TMrbDGF.cxx:2416
 TMrbDGF.cxx:2417
 TMrbDGF.cxx:2418
 TMrbDGF.cxx:2419
 TMrbDGF.cxx:2420
 TMrbDGF.cxx:2421
 TMrbDGF.cxx:2422
 TMrbDGF.cxx:2423
 TMrbDGF.cxx:2424
 TMrbDGF.cxx:2425
 TMrbDGF.cxx:2426
 TMrbDGF.cxx:2427
 TMrbDGF.cxx:2428
 TMrbDGF.cxx:2429
 TMrbDGF.cxx:2430
 TMrbDGF.cxx:2431
 TMrbDGF.cxx:2432
 TMrbDGF.cxx:2433
 TMrbDGF.cxx:2434
 TMrbDGF.cxx:2435
 TMrbDGF.cxx:2436
 TMrbDGF.cxx:2437
 TMrbDGF.cxx:2438
 TMrbDGF.cxx:2439
 TMrbDGF.cxx:2440
 TMrbDGF.cxx:2441
 TMrbDGF.cxx:2442
 TMrbDGF.cxx:2443
 TMrbDGF.cxx:2444
 TMrbDGF.cxx:2445
 TMrbDGF.cxx:2446
 TMrbDGF.cxx:2447
 TMrbDGF.cxx:2448
 TMrbDGF.cxx:2449
 TMrbDGF.cxx:2450
 TMrbDGF.cxx:2451
 TMrbDGF.cxx:2452
 TMrbDGF.cxx:2453
 TMrbDGF.cxx:2454
 TMrbDGF.cxx:2455
 TMrbDGF.cxx:2456
 TMrbDGF.cxx:2457
 TMrbDGF.cxx:2458
 TMrbDGF.cxx:2459
 TMrbDGF.cxx:2460
 TMrbDGF.cxx:2461
 TMrbDGF.cxx:2462
 TMrbDGF.cxx:2463
 TMrbDGF.cxx:2464
 TMrbDGF.cxx:2465
 TMrbDGF.cxx:2466
 TMrbDGF.cxx:2467
 TMrbDGF.cxx:2468
 TMrbDGF.cxx:2469
 TMrbDGF.cxx:2470
 TMrbDGF.cxx:2471
 TMrbDGF.cxx:2472
 TMrbDGF.cxx:2473
 TMrbDGF.cxx:2474
 TMrbDGF.cxx:2475
 TMrbDGF.cxx:2476
 TMrbDGF.cxx:2477
 TMrbDGF.cxx:2478
 TMrbDGF.cxx:2479
 TMrbDGF.cxx:2480
 TMrbDGF.cxx:2481
 TMrbDGF.cxx:2482
 TMrbDGF.cxx:2483
 TMrbDGF.cxx:2484
 TMrbDGF.cxx:2485
 TMrbDGF.cxx:2486
 TMrbDGF.cxx:2487
 TMrbDGF.cxx:2488
 TMrbDGF.cxx:2489
 TMrbDGF.cxx:2490
 TMrbDGF.cxx:2491
 TMrbDGF.cxx:2492
 TMrbDGF.cxx:2493
 TMrbDGF.cxx:2494
 TMrbDGF.cxx:2495
 TMrbDGF.cxx:2496
 TMrbDGF.cxx:2497
 TMrbDGF.cxx:2498
 TMrbDGF.cxx:2499
 TMrbDGF.cxx:2500
 TMrbDGF.cxx:2501
 TMrbDGF.cxx:2502
 TMrbDGF.cxx:2503
 TMrbDGF.cxx:2504
 TMrbDGF.cxx:2505
 TMrbDGF.cxx:2506
 TMrbDGF.cxx:2507
 TMrbDGF.cxx:2508
 TMrbDGF.cxx:2509
 TMrbDGF.cxx:2510
 TMrbDGF.cxx:2511
 TMrbDGF.cxx:2512
 TMrbDGF.cxx:2513
 TMrbDGF.cxx:2514
 TMrbDGF.cxx:2515
 TMrbDGF.cxx:2516
 TMrbDGF.cxx:2517
 TMrbDGF.cxx:2518
 TMrbDGF.cxx:2519
 TMrbDGF.cxx:2520
 TMrbDGF.cxx:2521
 TMrbDGF.cxx:2522
 TMrbDGF.cxx:2523
 TMrbDGF.cxx:2524
 TMrbDGF.cxx:2525
 TMrbDGF.cxx:2526
 TMrbDGF.cxx:2527
 TMrbDGF.cxx:2528
 TMrbDGF.cxx:2529
 TMrbDGF.cxx:2530
 TMrbDGF.cxx:2531
 TMrbDGF.cxx:2532
 TMrbDGF.cxx:2533
 TMrbDGF.cxx:2534
 TMrbDGF.cxx:2535
 TMrbDGF.cxx:2536
 TMrbDGF.cxx:2537
 TMrbDGF.cxx:2538
 TMrbDGF.cxx:2539
 TMrbDGF.cxx:2540
 TMrbDGF.cxx:2541
 TMrbDGF.cxx:2542
 TMrbDGF.cxx:2543
 TMrbDGF.cxx:2544
 TMrbDGF.cxx:2545
 TMrbDGF.cxx:2546
 TMrbDGF.cxx:2547
 TMrbDGF.cxx:2548
 TMrbDGF.cxx:2549
 TMrbDGF.cxx:2550
 TMrbDGF.cxx:2551
 TMrbDGF.cxx:2552
 TMrbDGF.cxx:2553
 TMrbDGF.cxx:2554
 TMrbDGF.cxx:2555
 TMrbDGF.cxx:2556
 TMrbDGF.cxx:2557
 TMrbDGF.cxx:2558
 TMrbDGF.cxx:2559
 TMrbDGF.cxx:2560
 TMrbDGF.cxx:2561
 TMrbDGF.cxx:2562
 TMrbDGF.cxx:2563
 TMrbDGF.cxx:2564
 TMrbDGF.cxx:2565
 TMrbDGF.cxx:2566
 TMrbDGF.cxx:2567
 TMrbDGF.cxx:2568
 TMrbDGF.cxx:2569
 TMrbDGF.cxx:2570
 TMrbDGF.cxx:2571
 TMrbDGF.cxx:2572
 TMrbDGF.cxx:2573
 TMrbDGF.cxx:2574
 TMrbDGF.cxx:2575
 TMrbDGF.cxx:2576
 TMrbDGF.cxx:2577
 TMrbDGF.cxx:2578
 TMrbDGF.cxx:2579
 TMrbDGF.cxx:2580
 TMrbDGF.cxx:2581
 TMrbDGF.cxx:2582
 TMrbDGF.cxx:2583
 TMrbDGF.cxx:2584
 TMrbDGF.cxx:2585
 TMrbDGF.cxx:2586
 TMrbDGF.cxx:2587
 TMrbDGF.cxx:2588
 TMrbDGF.cxx:2589
 TMrbDGF.cxx:2590
 TMrbDGF.cxx:2591
 TMrbDGF.cxx:2592
 TMrbDGF.cxx:2593
 TMrbDGF.cxx:2594
 TMrbDGF.cxx:2595
 TMrbDGF.cxx:2596
 TMrbDGF.cxx:2597
 TMrbDGF.cxx:2598
 TMrbDGF.cxx:2599
 TMrbDGF.cxx:2600
 TMrbDGF.cxx:2601
 TMrbDGF.cxx:2602
 TMrbDGF.cxx:2603
 TMrbDGF.cxx:2604
 TMrbDGF.cxx:2605
 TMrbDGF.cxx:2606
 TMrbDGF.cxx:2607
 TMrbDGF.cxx:2608
 TMrbDGF.cxx:2609
 TMrbDGF.cxx:2610
 TMrbDGF.cxx:2611
 TMrbDGF.cxx:2612
 TMrbDGF.cxx:2613
 TMrbDGF.cxx:2614
 TMrbDGF.cxx:2615
 TMrbDGF.cxx:2616
 TMrbDGF.cxx:2617
 TMrbDGF.cxx:2618
 TMrbDGF.cxx:2619
 TMrbDGF.cxx:2620
 TMrbDGF.cxx:2621
 TMrbDGF.cxx:2622
 TMrbDGF.cxx:2623
 TMrbDGF.cxx:2624
 TMrbDGF.cxx:2625
 TMrbDGF.cxx:2626
 TMrbDGF.cxx:2627
 TMrbDGF.cxx:2628
 TMrbDGF.cxx:2629
 TMrbDGF.cxx:2630
 TMrbDGF.cxx:2631
 TMrbDGF.cxx:2632
 TMrbDGF.cxx:2633
 TMrbDGF.cxx:2634
 TMrbDGF.cxx:2635
 TMrbDGF.cxx:2636
 TMrbDGF.cxx:2637
 TMrbDGF.cxx:2638
 TMrbDGF.cxx:2639
 TMrbDGF.cxx:2640
 TMrbDGF.cxx:2641
 TMrbDGF.cxx:2642
 TMrbDGF.cxx:2643
 TMrbDGF.cxx:2644
 TMrbDGF.cxx:2645
 TMrbDGF.cxx:2646
 TMrbDGF.cxx:2647
 TMrbDGF.cxx:2648
 TMrbDGF.cxx:2649
 TMrbDGF.cxx:2650
 TMrbDGF.cxx:2651
 TMrbDGF.cxx:2652
 TMrbDGF.cxx:2653
 TMrbDGF.cxx:2654
 TMrbDGF.cxx:2655
 TMrbDGF.cxx:2656
 TMrbDGF.cxx:2657
 TMrbDGF.cxx:2658
 TMrbDGF.cxx:2659
 TMrbDGF.cxx:2660
 TMrbDGF.cxx:2661
 TMrbDGF.cxx:2662
 TMrbDGF.cxx:2663
 TMrbDGF.cxx:2664
 TMrbDGF.cxx:2665
 TMrbDGF.cxx:2666
 TMrbDGF.cxx:2667
 TMrbDGF.cxx:2668
 TMrbDGF.cxx:2669
 TMrbDGF.cxx:2670
 TMrbDGF.cxx:2671
 TMrbDGF.cxx:2672
 TMrbDGF.cxx:2673
 TMrbDGF.cxx:2674
 TMrbDGF.cxx:2675
 TMrbDGF.cxx:2676
 TMrbDGF.cxx:2677
 TMrbDGF.cxx:2678
 TMrbDGF.cxx:2679
 TMrbDGF.cxx:2680
 TMrbDGF.cxx:2681
 TMrbDGF.cxx:2682
 TMrbDGF.cxx:2683
 TMrbDGF.cxx:2684
 TMrbDGF.cxx:2685
 TMrbDGF.cxx:2686
 TMrbDGF.cxx:2687
 TMrbDGF.cxx:2688
 TMrbDGF.cxx:2689
 TMrbDGF.cxx:2690
 TMrbDGF.cxx:2691
 TMrbDGF.cxx:2692
 TMrbDGF.cxx:2693
 TMrbDGF.cxx:2694
 TMrbDGF.cxx:2695
 TMrbDGF.cxx:2696
 TMrbDGF.cxx:2697
 TMrbDGF.cxx:2698
 TMrbDGF.cxx:2699
 TMrbDGF.cxx:2700
 TMrbDGF.cxx:2701
 TMrbDGF.cxx:2702
 TMrbDGF.cxx:2703
 TMrbDGF.cxx:2704
 TMrbDGF.cxx:2705
 TMrbDGF.cxx:2706
 TMrbDGF.cxx:2707
 TMrbDGF.cxx:2708
 TMrbDGF.cxx:2709
 TMrbDGF.cxx:2710
 TMrbDGF.cxx:2711
 TMrbDGF.cxx:2712
 TMrbDGF.cxx:2713
 TMrbDGF.cxx:2714
 TMrbDGF.cxx:2715
 TMrbDGF.cxx:2716
 TMrbDGF.cxx:2717
 TMrbDGF.cxx:2718
 TMrbDGF.cxx:2719
 TMrbDGF.cxx:2720
 TMrbDGF.cxx:2721
 TMrbDGF.cxx:2722
 TMrbDGF.cxx:2723
 TMrbDGF.cxx:2724
 TMrbDGF.cxx:2725
 TMrbDGF.cxx:2726
 TMrbDGF.cxx:2727
 TMrbDGF.cxx:2728
 TMrbDGF.cxx:2729
 TMrbDGF.cxx:2730
 TMrbDGF.cxx:2731
 TMrbDGF.cxx:2732
 TMrbDGF.cxx:2733
 TMrbDGF.cxx:2734
 TMrbDGF.cxx:2735
 TMrbDGF.cxx:2736
 TMrbDGF.cxx:2737
 TMrbDGF.cxx:2738
 TMrbDGF.cxx:2739
 TMrbDGF.cxx:2740
 TMrbDGF.cxx:2741
 TMrbDGF.cxx:2742
 TMrbDGF.cxx:2743
 TMrbDGF.cxx:2744
 TMrbDGF.cxx:2745
 TMrbDGF.cxx:2746
 TMrbDGF.cxx:2747
 TMrbDGF.cxx:2748
 TMrbDGF.cxx:2749
 TMrbDGF.cxx:2750
 TMrbDGF.cxx:2751
 TMrbDGF.cxx:2752
 TMrbDGF.cxx:2753
 TMrbDGF.cxx:2754
 TMrbDGF.cxx:2755
 TMrbDGF.cxx:2756
 TMrbDGF.cxx:2757
 TMrbDGF.cxx:2758
 TMrbDGF.cxx:2759
 TMrbDGF.cxx:2760
 TMrbDGF.cxx:2761
 TMrbDGF.cxx:2762
 TMrbDGF.cxx:2763
 TMrbDGF.cxx:2764
 TMrbDGF.cxx:2765
 TMrbDGF.cxx:2766
 TMrbDGF.cxx:2767
 TMrbDGF.cxx:2768
 TMrbDGF.cxx:2769
 TMrbDGF.cxx:2770
 TMrbDGF.cxx:2771
 TMrbDGF.cxx:2772
 TMrbDGF.cxx:2773
 TMrbDGF.cxx:2774
 TMrbDGF.cxx:2775
 TMrbDGF.cxx:2776
 TMrbDGF.cxx:2777
 TMrbDGF.cxx:2778
 TMrbDGF.cxx:2779
 TMrbDGF.cxx:2780
 TMrbDGF.cxx:2781
 TMrbDGF.cxx:2782
 TMrbDGF.cxx:2783
 TMrbDGF.cxx:2784
 TMrbDGF.cxx:2785
 TMrbDGF.cxx:2786
 TMrbDGF.cxx:2787
 TMrbDGF.cxx:2788
 TMrbDGF.cxx:2789
 TMrbDGF.cxx:2790
 TMrbDGF.cxx:2791
 TMrbDGF.cxx:2792
 TMrbDGF.cxx:2793
 TMrbDGF.cxx:2794
 TMrbDGF.cxx:2795
 TMrbDGF.cxx:2796
 TMrbDGF.cxx:2797
 TMrbDGF.cxx:2798
 TMrbDGF.cxx:2799
 TMrbDGF.cxx:2800
 TMrbDGF.cxx:2801
 TMrbDGF.cxx:2802
 TMrbDGF.cxx:2803
 TMrbDGF.cxx:2804
 TMrbDGF.cxx:2805
 TMrbDGF.cxx:2806
 TMrbDGF.cxx:2807
 TMrbDGF.cxx:2808
 TMrbDGF.cxx:2809
 TMrbDGF.cxx:2810
 TMrbDGF.cxx:2811
 TMrbDGF.cxx:2812
 TMrbDGF.cxx:2813
 TMrbDGF.cxx:2814
 TMrbDGF.cxx:2815
 TMrbDGF.cxx:2816
 TMrbDGF.cxx:2817
 TMrbDGF.cxx:2818
 TMrbDGF.cxx:2819
 TMrbDGF.cxx:2820
 TMrbDGF.cxx:2821
 TMrbDGF.cxx:2822
 TMrbDGF.cxx:2823
 TMrbDGF.cxx:2824
 TMrbDGF.cxx:2825
 TMrbDGF.cxx:2826
 TMrbDGF.cxx:2827
 TMrbDGF.cxx:2828
 TMrbDGF.cxx:2829
 TMrbDGF.cxx:2830
 TMrbDGF.cxx:2831
 TMrbDGF.cxx:2832
 TMrbDGF.cxx:2833
 TMrbDGF.cxx:2834
 TMrbDGF.cxx:2835
 TMrbDGF.cxx:2836
 TMrbDGF.cxx:2837
 TMrbDGF.cxx:2838
 TMrbDGF.cxx:2839
 TMrbDGF.cxx:2840
 TMrbDGF.cxx:2841
 TMrbDGF.cxx:2842
 TMrbDGF.cxx:2843
 TMrbDGF.cxx:2844
 TMrbDGF.cxx:2845
 TMrbDGF.cxx:2846
 TMrbDGF.cxx:2847
 TMrbDGF.cxx:2848
 TMrbDGF.cxx:2849
 TMrbDGF.cxx:2850
 TMrbDGF.cxx:2851
 TMrbDGF.cxx:2852
 TMrbDGF.cxx:2853
 TMrbDGF.cxx:2854
 TMrbDGF.cxx:2855
 TMrbDGF.cxx:2856
 TMrbDGF.cxx:2857
 TMrbDGF.cxx:2858
 TMrbDGF.cxx:2859
 TMrbDGF.cxx:2860
 TMrbDGF.cxx:2861
 TMrbDGF.cxx:2862
 TMrbDGF.cxx:2863
 TMrbDGF.cxx:2864
 TMrbDGF.cxx:2865
 TMrbDGF.cxx:2866
 TMrbDGF.cxx:2867
 TMrbDGF.cxx:2868
 TMrbDGF.cxx:2869
 TMrbDGF.cxx:2870
 TMrbDGF.cxx:2871
 TMrbDGF.cxx:2872
 TMrbDGF.cxx:2873
 TMrbDGF.cxx:2874
 TMrbDGF.cxx:2875
 TMrbDGF.cxx:2876
 TMrbDGF.cxx:2877
 TMrbDGF.cxx:2878
 TMrbDGF.cxx:2879
 TMrbDGF.cxx:2880
 TMrbDGF.cxx:2881
 TMrbDGF.cxx:2882
 TMrbDGF.cxx:2883
 TMrbDGF.cxx:2884
 TMrbDGF.cxx:2885
 TMrbDGF.cxx:2886
 TMrbDGF.cxx:2887
 TMrbDGF.cxx:2888
 TMrbDGF.cxx:2889
 TMrbDGF.cxx:2890
 TMrbDGF.cxx:2891
 TMrbDGF.cxx:2892
 TMrbDGF.cxx:2893
 TMrbDGF.cxx:2894
 TMrbDGF.cxx:2895
 TMrbDGF.cxx:2896
 TMrbDGF.cxx:2897
 TMrbDGF.cxx:2898
 TMrbDGF.cxx:2899
 TMrbDGF.cxx:2900
 TMrbDGF.cxx:2901
 TMrbDGF.cxx:2902
 TMrbDGF.cxx:2903
 TMrbDGF.cxx:2904
 TMrbDGF.cxx:2905
 TMrbDGF.cxx:2906
 TMrbDGF.cxx:2907
 TMrbDGF.cxx:2908
 TMrbDGF.cxx:2909
 TMrbDGF.cxx:2910
 TMrbDGF.cxx:2911
 TMrbDGF.cxx:2912
 TMrbDGF.cxx:2913
 TMrbDGF.cxx:2914
 TMrbDGF.cxx:2915
 TMrbDGF.cxx:2916
 TMrbDGF.cxx:2917
 TMrbDGF.cxx:2918
 TMrbDGF.cxx:2919
 TMrbDGF.cxx:2920
 TMrbDGF.cxx:2921
 TMrbDGF.cxx:2922
 TMrbDGF.cxx:2923
 TMrbDGF.cxx:2924
 TMrbDGF.cxx:2925
 TMrbDGF.cxx:2926
 TMrbDGF.cxx:2927
 TMrbDGF.cxx:2928
 TMrbDGF.cxx:2929
 TMrbDGF.cxx:2930
 TMrbDGF.cxx:2931
 TMrbDGF.cxx:2932
 TMrbDGF.cxx:2933
 TMrbDGF.cxx:2934
 TMrbDGF.cxx:2935
 TMrbDGF.cxx:2936
 TMrbDGF.cxx:2937
 TMrbDGF.cxx:2938
 TMrbDGF.cxx:2939
 TMrbDGF.cxx:2940
 TMrbDGF.cxx:2941
 TMrbDGF.cxx:2942
 TMrbDGF.cxx:2943
 TMrbDGF.cxx:2944
 TMrbDGF.cxx:2945
 TMrbDGF.cxx:2946
 TMrbDGF.cxx:2947
 TMrbDGF.cxx:2948
 TMrbDGF.cxx:2949
 TMrbDGF.cxx:2950
 TMrbDGF.cxx:2951
 TMrbDGF.cxx:2952
 TMrbDGF.cxx:2953
 TMrbDGF.cxx:2954
 TMrbDGF.cxx:2955
 TMrbDGF.cxx:2956
 TMrbDGF.cxx:2957
 TMrbDGF.cxx:2958
 TMrbDGF.cxx:2959
 TMrbDGF.cxx:2960
 TMrbDGF.cxx:2961
 TMrbDGF.cxx:2962
 TMrbDGF.cxx:2963
 TMrbDGF.cxx:2964
 TMrbDGF.cxx:2965
 TMrbDGF.cxx:2966
 TMrbDGF.cxx:2967
 TMrbDGF.cxx:2968
 TMrbDGF.cxx:2969
 TMrbDGF.cxx:2970
 TMrbDGF.cxx:2971
 TMrbDGF.cxx:2972
 TMrbDGF.cxx:2973
 TMrbDGF.cxx:2974
 TMrbDGF.cxx:2975
 TMrbDGF.cxx:2976
 TMrbDGF.cxx:2977
 TMrbDGF.cxx:2978
 TMrbDGF.cxx:2979
 TMrbDGF.cxx:2980
 TMrbDGF.cxx:2981
 TMrbDGF.cxx:2982
 TMrbDGF.cxx:2983
 TMrbDGF.cxx:2984
 TMrbDGF.cxx:2985
 TMrbDGF.cxx:2986
 TMrbDGF.cxx:2987
 TMrbDGF.cxx:2988
 TMrbDGF.cxx:2989
 TMrbDGF.cxx:2990
 TMrbDGF.cxx:2991
 TMrbDGF.cxx:2992
 TMrbDGF.cxx:2993
 TMrbDGF.cxx:2994
 TMrbDGF.cxx:2995
 TMrbDGF.cxx:2996
 TMrbDGF.cxx:2997
 TMrbDGF.cxx:2998
 TMrbDGF.cxx:2999
 TMrbDGF.cxx:3000
 TMrbDGF.cxx:3001
 TMrbDGF.cxx:3002
 TMrbDGF.cxx:3003
 TMrbDGF.cxx:3004
 TMrbDGF.cxx:3005
 TMrbDGF.cxx:3006
 TMrbDGF.cxx:3007
 TMrbDGF.cxx:3008
 TMrbDGF.cxx:3009
 TMrbDGF.cxx:3010
 TMrbDGF.cxx:3011
 TMrbDGF.cxx:3012
 TMrbDGF.cxx:3013
 TMrbDGF.cxx:3014
 TMrbDGF.cxx:3015
 TMrbDGF.cxx:3016
 TMrbDGF.cxx:3017
 TMrbDGF.cxx:3018
 TMrbDGF.cxx:3019
 TMrbDGF.cxx:3020
 TMrbDGF.cxx:3021
 TMrbDGF.cxx:3022
 TMrbDGF.cxx:3023
 TMrbDGF.cxx:3024
 TMrbDGF.cxx:3025
 TMrbDGF.cxx:3026
 TMrbDGF.cxx:3027
 TMrbDGF.cxx:3028
 TMrbDGF.cxx:3029
 TMrbDGF.cxx:3030
 TMrbDGF.cxx:3031
 TMrbDGF.cxx:3032
 TMrbDGF.cxx:3033
 TMrbDGF.cxx:3034
 TMrbDGF.cxx:3035
 TMrbDGF.cxx:3036
 TMrbDGF.cxx:3037
 TMrbDGF.cxx:3038
 TMrbDGF.cxx:3039
 TMrbDGF.cxx:3040
 TMrbDGF.cxx:3041
 TMrbDGF.cxx:3042
 TMrbDGF.cxx:3043
 TMrbDGF.cxx:3044
 TMrbDGF.cxx:3045
 TMrbDGF.cxx:3046
 TMrbDGF.cxx:3047
 TMrbDGF.cxx:3048
 TMrbDGF.cxx:3049
 TMrbDGF.cxx:3050
 TMrbDGF.cxx:3051
 TMrbDGF.cxx:3052
 TMrbDGF.cxx:3053
 TMrbDGF.cxx:3054
 TMrbDGF.cxx:3055
 TMrbDGF.cxx:3056
 TMrbDGF.cxx:3057
 TMrbDGF.cxx:3058
 TMrbDGF.cxx:3059
 TMrbDGF.cxx:3060
 TMrbDGF.cxx:3061
 TMrbDGF.cxx:3062
 TMrbDGF.cxx:3063
 TMrbDGF.cxx:3064
 TMrbDGF.cxx:3065
 TMrbDGF.cxx:3066
 TMrbDGF.cxx:3067
 TMrbDGF.cxx:3068
 TMrbDGF.cxx:3069
 TMrbDGF.cxx:3070
 TMrbDGF.cxx:3071
 TMrbDGF.cxx:3072
 TMrbDGF.cxx:3073
 TMrbDGF.cxx:3074
 TMrbDGF.cxx:3075
 TMrbDGF.cxx:3076
 TMrbDGF.cxx:3077
 TMrbDGF.cxx:3078
 TMrbDGF.cxx:3079
 TMrbDGF.cxx:3080
 TMrbDGF.cxx:3081
 TMrbDGF.cxx:3082
 TMrbDGF.cxx:3083
 TMrbDGF.cxx:3084
 TMrbDGF.cxx:3085
 TMrbDGF.cxx:3086
 TMrbDGF.cxx:3087
 TMrbDGF.cxx:3088
 TMrbDGF.cxx:3089
 TMrbDGF.cxx:3090
 TMrbDGF.cxx:3091
 TMrbDGF.cxx:3092
 TMrbDGF.cxx:3093
 TMrbDGF.cxx:3094
 TMrbDGF.cxx:3095
 TMrbDGF.cxx:3096
 TMrbDGF.cxx:3097
 TMrbDGF.cxx:3098
 TMrbDGF.cxx:3099
 TMrbDGF.cxx:3100
 TMrbDGF.cxx:3101
 TMrbDGF.cxx:3102
 TMrbDGF.cxx:3103
 TMrbDGF.cxx:3104
 TMrbDGF.cxx:3105
 TMrbDGF.cxx:3106
 TMrbDGF.cxx:3107
 TMrbDGF.cxx:3108
 TMrbDGF.cxx:3109
 TMrbDGF.cxx:3110
 TMrbDGF.cxx:3111
 TMrbDGF.cxx:3112
 TMrbDGF.cxx:3113
 TMrbDGF.cxx:3114
 TMrbDGF.cxx:3115
 TMrbDGF.cxx:3116
 TMrbDGF.cxx:3117
 TMrbDGF.cxx:3118
 TMrbDGF.cxx:3119
 TMrbDGF.cxx:3120
 TMrbDGF.cxx:3121
 TMrbDGF.cxx:3122
 TMrbDGF.cxx:3123
 TMrbDGF.cxx:3124
 TMrbDGF.cxx:3125
 TMrbDGF.cxx:3126
 TMrbDGF.cxx:3127
 TMrbDGF.cxx:3128
 TMrbDGF.cxx:3129
 TMrbDGF.cxx:3130
 TMrbDGF.cxx:3131
 TMrbDGF.cxx:3132
 TMrbDGF.cxx:3133
 TMrbDGF.cxx:3134
 TMrbDGF.cxx:3135
 TMrbDGF.cxx:3136
 TMrbDGF.cxx:3137
 TMrbDGF.cxx:3138
 TMrbDGF.cxx:3139
 TMrbDGF.cxx:3140
 TMrbDGF.cxx:3141
 TMrbDGF.cxx:3142
 TMrbDGF.cxx:3143
 TMrbDGF.cxx:3144
 TMrbDGF.cxx:3145
 TMrbDGF.cxx:3146
 TMrbDGF.cxx:3147
 TMrbDGF.cxx:3148
 TMrbDGF.cxx:3149
 TMrbDGF.cxx:3150
 TMrbDGF.cxx:3151
 TMrbDGF.cxx:3152
 TMrbDGF.cxx:3153
 TMrbDGF.cxx:3154
 TMrbDGF.cxx:3155
 TMrbDGF.cxx:3156
 TMrbDGF.cxx:3157
 TMrbDGF.cxx:3158
 TMrbDGF.cxx:3159
 TMrbDGF.cxx:3160
 TMrbDGF.cxx:3161
 TMrbDGF.cxx:3162
 TMrbDGF.cxx:3163
 TMrbDGF.cxx:3164
 TMrbDGF.cxx:3165
 TMrbDGF.cxx:3166
 TMrbDGF.cxx:3167
 TMrbDGF.cxx:3168
 TMrbDGF.cxx:3169
 TMrbDGF.cxx:3170
 TMrbDGF.cxx:3171
 TMrbDGF.cxx:3172
 TMrbDGF.cxx:3173
 TMrbDGF.cxx:3174
 TMrbDGF.cxx:3175
 TMrbDGF.cxx:3176
 TMrbDGF.cxx:3177
 TMrbDGF.cxx:3178
 TMrbDGF.cxx:3179
 TMrbDGF.cxx:3180
 TMrbDGF.cxx:3181
 TMrbDGF.cxx:3182
 TMrbDGF.cxx:3183
 TMrbDGF.cxx:3184
 TMrbDGF.cxx:3185
 TMrbDGF.cxx:3186
 TMrbDGF.cxx:3187
 TMrbDGF.cxx:3188
 TMrbDGF.cxx:3189
 TMrbDGF.cxx:3190
 TMrbDGF.cxx:3191
 TMrbDGF.cxx:3192
 TMrbDGF.cxx:3193
 TMrbDGF.cxx:3194
 TMrbDGF.cxx:3195
 TMrbDGF.cxx:3196
 TMrbDGF.cxx:3197
 TMrbDGF.cxx:3198
 TMrbDGF.cxx:3199
 TMrbDGF.cxx:3200
 TMrbDGF.cxx:3201
 TMrbDGF.cxx:3202
 TMrbDGF.cxx:3203
 TMrbDGF.cxx:3204
 TMrbDGF.cxx:3205
 TMrbDGF.cxx:3206
 TMrbDGF.cxx:3207
 TMrbDGF.cxx:3208
 TMrbDGF.cxx:3209
 TMrbDGF.cxx:3210
 TMrbDGF.cxx:3211
 TMrbDGF.cxx:3212
 TMrbDGF.cxx:3213
 TMrbDGF.cxx:3214
 TMrbDGF.cxx:3215
 TMrbDGF.cxx:3216
 TMrbDGF.cxx:3217
 TMrbDGF.cxx:3218
 TMrbDGF.cxx:3219
 TMrbDGF.cxx:3220
 TMrbDGF.cxx:3221
 TMrbDGF.cxx:3222
 TMrbDGF.cxx:3223
 TMrbDGF.cxx:3224
 TMrbDGF.cxx:3225
 TMrbDGF.cxx:3226
 TMrbDGF.cxx:3227
 TMrbDGF.cxx:3228
 TMrbDGF.cxx:3229
 TMrbDGF.cxx:3230
 TMrbDGF.cxx:3231
 TMrbDGF.cxx:3232
 TMrbDGF.cxx:3233
 TMrbDGF.cxx:3234
 TMrbDGF.cxx:3235
 TMrbDGF.cxx:3236
 TMrbDGF.cxx:3237
 TMrbDGF.cxx:3238
 TMrbDGF.cxx:3239
 TMrbDGF.cxx:3240
 TMrbDGF.cxx:3241
 TMrbDGF.cxx:3242
 TMrbDGF.cxx:3243
 TMrbDGF.cxx:3244
 TMrbDGF.cxx:3245
 TMrbDGF.cxx:3246
 TMrbDGF.cxx:3247
 TMrbDGF.cxx:3248
 TMrbDGF.cxx:3249
 TMrbDGF.cxx:3250
 TMrbDGF.cxx:3251
 TMrbDGF.cxx:3252
 TMrbDGF.cxx:3253
 TMrbDGF.cxx:3254
 TMrbDGF.cxx:3255
 TMrbDGF.cxx:3256
 TMrbDGF.cxx:3257
 TMrbDGF.cxx:3258
 TMrbDGF.cxx:3259
 TMrbDGF.cxx:3260
 TMrbDGF.cxx:3261
 TMrbDGF.cxx:3262
 TMrbDGF.cxx:3263
 TMrbDGF.cxx:3264
 TMrbDGF.cxx:3265
 TMrbDGF.cxx:3266
 TMrbDGF.cxx:3267
 TMrbDGF.cxx:3268
 TMrbDGF.cxx:3269
 TMrbDGF.cxx:3270
 TMrbDGF.cxx:3271
 TMrbDGF.cxx:3272
 TMrbDGF.cxx:3273
 TMrbDGF.cxx:3274
 TMrbDGF.cxx:3275
 TMrbDGF.cxx:3276
 TMrbDGF.cxx:3277
 TMrbDGF.cxx:3278
 TMrbDGF.cxx:3279
 TMrbDGF.cxx:3280
 TMrbDGF.cxx:3281
 TMrbDGF.cxx:3282
 TMrbDGF.cxx:3283
 TMrbDGF.cxx:3284
 TMrbDGF.cxx:3285
 TMrbDGF.cxx:3286
 TMrbDGF.cxx:3287
 TMrbDGF.cxx:3288
 TMrbDGF.cxx:3289
 TMrbDGF.cxx:3290
 TMrbDGF.cxx:3291
 TMrbDGF.cxx:3292
 TMrbDGF.cxx:3293
 TMrbDGF.cxx:3294
 TMrbDGF.cxx:3295
 TMrbDGF.cxx:3296
 TMrbDGF.cxx:3297
 TMrbDGF.cxx:3298
 TMrbDGF.cxx:3299
 TMrbDGF.cxx:3300
 TMrbDGF.cxx:3301
 TMrbDGF.cxx:3302
 TMrbDGF.cxx:3303
 TMrbDGF.cxx:3304
 TMrbDGF.cxx:3305
 TMrbDGF.cxx:3306
 TMrbDGF.cxx:3307
 TMrbDGF.cxx:3308
 TMrbDGF.cxx:3309
 TMrbDGF.cxx:3310
 TMrbDGF.cxx:3311
 TMrbDGF.cxx:3312
 TMrbDGF.cxx:3313
 TMrbDGF.cxx:3314
 TMrbDGF.cxx:3315
 TMrbDGF.cxx:3316
 TMrbDGF.cxx:3317
 TMrbDGF.cxx:3318
 TMrbDGF.cxx:3319
 TMrbDGF.cxx:3320
 TMrbDGF.cxx:3321
 TMrbDGF.cxx:3322
 TMrbDGF.cxx:3323
 TMrbDGF.cxx:3324
 TMrbDGF.cxx:3325
 TMrbDGF.cxx:3326
 TMrbDGF.cxx:3327
 TMrbDGF.cxx:3328
 TMrbDGF.cxx:3329
 TMrbDGF.cxx:3330
 TMrbDGF.cxx:3331
 TMrbDGF.cxx:3332
 TMrbDGF.cxx:3333
 TMrbDGF.cxx:3334
 TMrbDGF.cxx:3335
 TMrbDGF.cxx:3336
 TMrbDGF.cxx:3337
 TMrbDGF.cxx:3338
 TMrbDGF.cxx:3339
 TMrbDGF.cxx:3340
 TMrbDGF.cxx:3341
 TMrbDGF.cxx:3342
 TMrbDGF.cxx:3343
 TMrbDGF.cxx:3344
 TMrbDGF.cxx:3345
 TMrbDGF.cxx:3346
 TMrbDGF.cxx:3347
 TMrbDGF.cxx:3348
 TMrbDGF.cxx:3349
 TMrbDGF.cxx:3350
 TMrbDGF.cxx:3351
 TMrbDGF.cxx:3352
 TMrbDGF.cxx:3353
 TMrbDGF.cxx:3354
 TMrbDGF.cxx:3355
 TMrbDGF.cxx:3356
 TMrbDGF.cxx:3357
 TMrbDGF.cxx:3358
 TMrbDGF.cxx:3359
 TMrbDGF.cxx:3360
 TMrbDGF.cxx:3361
 TMrbDGF.cxx:3362
 TMrbDGF.cxx:3363
 TMrbDGF.cxx:3364
 TMrbDGF.cxx:3365
 TMrbDGF.cxx:3366
 TMrbDGF.cxx:3367
 TMrbDGF.cxx:3368
 TMrbDGF.cxx:3369
 TMrbDGF.cxx:3370
 TMrbDGF.cxx:3371
 TMrbDGF.cxx:3372
 TMrbDGF.cxx:3373
 TMrbDGF.cxx:3374
 TMrbDGF.cxx:3375
 TMrbDGF.cxx:3376
 TMrbDGF.cxx:3377
 TMrbDGF.cxx:3378
 TMrbDGF.cxx:3379
 TMrbDGF.cxx:3380
 TMrbDGF.cxx:3381
 TMrbDGF.cxx:3382
 TMrbDGF.cxx:3383
 TMrbDGF.cxx:3384
 TMrbDGF.cxx:3385
 TMrbDGF.cxx:3386
 TMrbDGF.cxx:3387
 TMrbDGF.cxx:3388
 TMrbDGF.cxx:3389
 TMrbDGF.cxx:3390
 TMrbDGF.cxx:3391
 TMrbDGF.cxx:3392
 TMrbDGF.cxx:3393
 TMrbDGF.cxx:3394
 TMrbDGF.cxx:3395
 TMrbDGF.cxx:3396
 TMrbDGF.cxx:3397
 TMrbDGF.cxx:3398
 TMrbDGF.cxx:3399
 TMrbDGF.cxx:3400
 TMrbDGF.cxx:3401
 TMrbDGF.cxx:3402
 TMrbDGF.cxx:3403
 TMrbDGF.cxx:3404
 TMrbDGF.cxx:3405
 TMrbDGF.cxx:3406
 TMrbDGF.cxx:3407
 TMrbDGF.cxx:3408
 TMrbDGF.cxx:3409
 TMrbDGF.cxx:3410
 TMrbDGF.cxx:3411
 TMrbDGF.cxx:3412
 TMrbDGF.cxx:3413
 TMrbDGF.cxx:3414
 TMrbDGF.cxx:3415
 TMrbDGF.cxx:3416
 TMrbDGF.cxx:3417
 TMrbDGF.cxx:3418
 TMrbDGF.cxx:3419
 TMrbDGF.cxx:3420
 TMrbDGF.cxx:3421
 TMrbDGF.cxx:3422
 TMrbDGF.cxx:3423
 TMrbDGF.cxx:3424
 TMrbDGF.cxx:3425
 TMrbDGF.cxx:3426
 TMrbDGF.cxx:3427
 TMrbDGF.cxx:3428
 TMrbDGF.cxx:3429
 TMrbDGF.cxx:3430
 TMrbDGF.cxx:3431
 TMrbDGF.cxx:3432
 TMrbDGF.cxx:3433
 TMrbDGF.cxx:3434
 TMrbDGF.cxx:3435
 TMrbDGF.cxx:3436
 TMrbDGF.cxx:3437
 TMrbDGF.cxx:3438
 TMrbDGF.cxx:3439
 TMrbDGF.cxx:3440
 TMrbDGF.cxx:3441
 TMrbDGF.cxx:3442
 TMrbDGF.cxx:3443
 TMrbDGF.cxx:3444
 TMrbDGF.cxx:3445
 TMrbDGF.cxx:3446
 TMrbDGF.cxx:3447
 TMrbDGF.cxx:3448
 TMrbDGF.cxx:3449
 TMrbDGF.cxx:3450
 TMrbDGF.cxx:3451
 TMrbDGF.cxx:3452
 TMrbDGF.cxx:3453
 TMrbDGF.cxx:3454
 TMrbDGF.cxx:3455
 TMrbDGF.cxx:3456
 TMrbDGF.cxx:3457
 TMrbDGF.cxx:3458
 TMrbDGF.cxx:3459
 TMrbDGF.cxx:3460
 TMrbDGF.cxx:3461
 TMrbDGF.cxx:3462
 TMrbDGF.cxx:3463
 TMrbDGF.cxx:3464
 TMrbDGF.cxx:3465
 TMrbDGF.cxx:3466
 TMrbDGF.cxx:3467
 TMrbDGF.cxx:3468
 TMrbDGF.cxx:3469
 TMrbDGF.cxx:3470
 TMrbDGF.cxx:3471
 TMrbDGF.cxx:3472
 TMrbDGF.cxx:3473
 TMrbDGF.cxx:3474
 TMrbDGF.cxx:3475
 TMrbDGF.cxx:3476
 TMrbDGF.cxx:3477
 TMrbDGF.cxx:3478
 TMrbDGF.cxx:3479
 TMrbDGF.cxx:3480
 TMrbDGF.cxx:3481
 TMrbDGF.cxx:3482
 TMrbDGF.cxx:3483
 TMrbDGF.cxx:3484
 TMrbDGF.cxx:3485
 TMrbDGF.cxx:3486
 TMrbDGF.cxx:3487
 TMrbDGF.cxx:3488
 TMrbDGF.cxx:3489
 TMrbDGF.cxx:3490
 TMrbDGF.cxx:3491
 TMrbDGF.cxx:3492
 TMrbDGF.cxx:3493
 TMrbDGF.cxx:3494
 TMrbDGF.cxx:3495
 TMrbDGF.cxx:3496
 TMrbDGF.cxx:3497
 TMrbDGF.cxx:3498
 TMrbDGF.cxx:3499
 TMrbDGF.cxx:3500
 TMrbDGF.cxx:3501
 TMrbDGF.cxx:3502
 TMrbDGF.cxx:3503
 TMrbDGF.cxx:3504
 TMrbDGF.cxx:3505
 TMrbDGF.cxx:3506
 TMrbDGF.cxx:3507
 TMrbDGF.cxx:3508
 TMrbDGF.cxx:3509
 TMrbDGF.cxx:3510
 TMrbDGF.cxx:3511
 TMrbDGF.cxx:3512
 TMrbDGF.cxx:3513
 TMrbDGF.cxx:3514
 TMrbDGF.cxx:3515
 TMrbDGF.cxx:3516
 TMrbDGF.cxx:3517
 TMrbDGF.cxx:3518
 TMrbDGF.cxx:3519
 TMrbDGF.cxx:3520
 TMrbDGF.cxx:3521
 TMrbDGF.cxx:3522
 TMrbDGF.cxx:3523
 TMrbDGF.cxx:3524
 TMrbDGF.cxx:3525
 TMrbDGF.cxx:3526
 TMrbDGF.cxx:3527
 TMrbDGF.cxx:3528
 TMrbDGF.cxx:3529
 TMrbDGF.cxx:3530
 TMrbDGF.cxx:3531
 TMrbDGF.cxx:3532
 TMrbDGF.cxx:3533
 TMrbDGF.cxx:3534
 TMrbDGF.cxx:3535
 TMrbDGF.cxx:3536
 TMrbDGF.cxx:3537
 TMrbDGF.cxx:3538
 TMrbDGF.cxx:3539
 TMrbDGF.cxx:3540
 TMrbDGF.cxx:3541
 TMrbDGF.cxx:3542
 TMrbDGF.cxx:3543
 TMrbDGF.cxx:3544
 TMrbDGF.cxx:3545
 TMrbDGF.cxx:3546
 TMrbDGF.cxx:3547
 TMrbDGF.cxx:3548
 TMrbDGF.cxx:3549
 TMrbDGF.cxx:3550
 TMrbDGF.cxx:3551
 TMrbDGF.cxx:3552
 TMrbDGF.cxx:3553
 TMrbDGF.cxx:3554
 TMrbDGF.cxx:3555
 TMrbDGF.cxx:3556
 TMrbDGF.cxx:3557
 TMrbDGF.cxx:3558
 TMrbDGF.cxx:3559
 TMrbDGF.cxx:3560
 TMrbDGF.cxx:3561
 TMrbDGF.cxx:3562
 TMrbDGF.cxx:3563
 TMrbDGF.cxx:3564
 TMrbDGF.cxx:3565
 TMrbDGF.cxx:3566
 TMrbDGF.cxx:3567
 TMrbDGF.cxx:3568
 TMrbDGF.cxx:3569
 TMrbDGF.cxx:3570
 TMrbDGF.cxx:3571
 TMrbDGF.cxx:3572
 TMrbDGF.cxx:3573
 TMrbDGF.cxx:3574
 TMrbDGF.cxx:3575
 TMrbDGF.cxx:3576
 TMrbDGF.cxx:3577
 TMrbDGF.cxx:3578
 TMrbDGF.cxx:3579
 TMrbDGF.cxx:3580
 TMrbDGF.cxx:3581
 TMrbDGF.cxx:3582
 TMrbDGF.cxx:3583
 TMrbDGF.cxx:3584
 TMrbDGF.cxx:3585
 TMrbDGF.cxx:3586
 TMrbDGF.cxx:3587
 TMrbDGF.cxx:3588
 TMrbDGF.cxx:3589
 TMrbDGF.cxx:3590
 TMrbDGF.cxx:3591
 TMrbDGF.cxx:3592
 TMrbDGF.cxx:3593
 TMrbDGF.cxx:3594
 TMrbDGF.cxx:3595
 TMrbDGF.cxx:3596
 TMrbDGF.cxx:3597
 TMrbDGF.cxx:3598
 TMrbDGF.cxx:3599
 TMrbDGF.cxx:3600
 TMrbDGF.cxx:3601
 TMrbDGF.cxx:3602
 TMrbDGF.cxx:3603
 TMrbDGF.cxx:3604
 TMrbDGF.cxx:3605
 TMrbDGF.cxx:3606
 TMrbDGF.cxx:3607
 TMrbDGF.cxx:3608
 TMrbDGF.cxx:3609
 TMrbDGF.cxx:3610
 TMrbDGF.cxx:3611
 TMrbDGF.cxx:3612
 TMrbDGF.cxx:3613
 TMrbDGF.cxx:3614
 TMrbDGF.cxx:3615
 TMrbDGF.cxx:3616
 TMrbDGF.cxx:3617
 TMrbDGF.cxx:3618
 TMrbDGF.cxx:3619
 TMrbDGF.cxx:3620
 TMrbDGF.cxx:3621
 TMrbDGF.cxx:3622
 TMrbDGF.cxx:3623
 TMrbDGF.cxx:3624
 TMrbDGF.cxx:3625
 TMrbDGF.cxx:3626
 TMrbDGF.cxx:3627
 TMrbDGF.cxx:3628
 TMrbDGF.cxx:3629
 TMrbDGF.cxx:3630
 TMrbDGF.cxx:3631
 TMrbDGF.cxx:3632
 TMrbDGF.cxx:3633
 TMrbDGF.cxx:3634
 TMrbDGF.cxx:3635
 TMrbDGF.cxx:3636
 TMrbDGF.cxx:3637
 TMrbDGF.cxx:3638
 TMrbDGF.cxx:3639
 TMrbDGF.cxx:3640
 TMrbDGF.cxx:3641
 TMrbDGF.cxx:3642
 TMrbDGF.cxx:3643
 TMrbDGF.cxx:3644
 TMrbDGF.cxx:3645
 TMrbDGF.cxx:3646
 TMrbDGF.cxx:3647
 TMrbDGF.cxx:3648
 TMrbDGF.cxx:3649
 TMrbDGF.cxx:3650
 TMrbDGF.cxx:3651
 TMrbDGF.cxx:3652
 TMrbDGF.cxx:3653
 TMrbDGF.cxx:3654
 TMrbDGF.cxx:3655
 TMrbDGF.cxx:3656
 TMrbDGF.cxx:3657
 TMrbDGF.cxx:3658
 TMrbDGF.cxx:3659
 TMrbDGF.cxx:3660
 TMrbDGF.cxx:3661
 TMrbDGF.cxx:3662
 TMrbDGF.cxx:3663
 TMrbDGF.cxx:3664
 TMrbDGF.cxx:3665
 TMrbDGF.cxx:3666
 TMrbDGF.cxx:3667
 TMrbDGF.cxx:3668
 TMrbDGF.cxx:3669
 TMrbDGF.cxx:3670
 TMrbDGF.cxx:3671
 TMrbDGF.cxx:3672
 TMrbDGF.cxx:3673
 TMrbDGF.cxx:3674
 TMrbDGF.cxx:3675
 TMrbDGF.cxx:3676
 TMrbDGF.cxx:3677
 TMrbDGF.cxx:3678
 TMrbDGF.cxx:3679
 TMrbDGF.cxx:3680
 TMrbDGF.cxx:3681
 TMrbDGF.cxx:3682
 TMrbDGF.cxx:3683
 TMrbDGF.cxx:3684
 TMrbDGF.cxx:3685
 TMrbDGF.cxx:3686
 TMrbDGF.cxx:3687
 TMrbDGF.cxx:3688
 TMrbDGF.cxx:3689
 TMrbDGF.cxx:3690
 TMrbDGF.cxx:3691
 TMrbDGF.cxx:3692
 TMrbDGF.cxx:3693
 TMrbDGF.cxx:3694
 TMrbDGF.cxx:3695
 TMrbDGF.cxx:3696
 TMrbDGF.cxx:3697
 TMrbDGF.cxx:3698
 TMrbDGF.cxx:3699
 TMrbDGF.cxx:3700
 TMrbDGF.cxx:3701
 TMrbDGF.cxx:3702
 TMrbDGF.cxx:3703
 TMrbDGF.cxx:3704
 TMrbDGF.cxx:3705
 TMrbDGF.cxx:3706
 TMrbDGF.cxx:3707
 TMrbDGF.cxx:3708
 TMrbDGF.cxx:3709
 TMrbDGF.cxx:3710
 TMrbDGF.cxx:3711
 TMrbDGF.cxx:3712
 TMrbDGF.cxx:3713
 TMrbDGF.cxx:3714
 TMrbDGF.cxx:3715
 TMrbDGF.cxx:3716
 TMrbDGF.cxx:3717
 TMrbDGF.cxx:3718
 TMrbDGF.cxx:3719
 TMrbDGF.cxx:3720
 TMrbDGF.cxx:3721
 TMrbDGF.cxx:3722
 TMrbDGF.cxx:3723
 TMrbDGF.cxx:3724
 TMrbDGF.cxx:3725
 TMrbDGF.cxx:3726
 TMrbDGF.cxx:3727
 TMrbDGF.cxx:3728
 TMrbDGF.cxx:3729
 TMrbDGF.cxx:3730
 TMrbDGF.cxx:3731
 TMrbDGF.cxx:3732
 TMrbDGF.cxx:3733
 TMrbDGF.cxx:3734
 TMrbDGF.cxx:3735
 TMrbDGF.cxx:3736
 TMrbDGF.cxx:3737
 TMrbDGF.cxx:3738
 TMrbDGF.cxx:3739
 TMrbDGF.cxx:3740
 TMrbDGF.cxx:3741
 TMrbDGF.cxx:3742
 TMrbDGF.cxx:3743
 TMrbDGF.cxx:3744
 TMrbDGF.cxx:3745
 TMrbDGF.cxx:3746
 TMrbDGF.cxx:3747
 TMrbDGF.cxx:3748
 TMrbDGF.cxx:3749
 TMrbDGF.cxx:3750
 TMrbDGF.cxx:3751
 TMrbDGF.cxx:3752
 TMrbDGF.cxx:3753
 TMrbDGF.cxx:3754
 TMrbDGF.cxx:3755
 TMrbDGF.cxx:3756
 TMrbDGF.cxx:3757
 TMrbDGF.cxx:3758
 TMrbDGF.cxx:3759
 TMrbDGF.cxx:3760
 TMrbDGF.cxx:3761
 TMrbDGF.cxx:3762
 TMrbDGF.cxx:3763
 TMrbDGF.cxx:3764
 TMrbDGF.cxx:3765
 TMrbDGF.cxx:3766
 TMrbDGF.cxx:3767
 TMrbDGF.cxx:3768
 TMrbDGF.cxx:3769
 TMrbDGF.cxx:3770
 TMrbDGF.cxx:3771
 TMrbDGF.cxx:3772
 TMrbDGF.cxx:3773
 TMrbDGF.cxx:3774
 TMrbDGF.cxx:3775
 TMrbDGF.cxx:3776
 TMrbDGF.cxx:3777
 TMrbDGF.cxx:3778
 TMrbDGF.cxx:3779
 TMrbDGF.cxx:3780
 TMrbDGF.cxx:3781
 TMrbDGF.cxx:3782
 TMrbDGF.cxx:3783
 TMrbDGF.cxx:3784
 TMrbDGF.cxx:3785
 TMrbDGF.cxx:3786
 TMrbDGF.cxx:3787
 TMrbDGF.cxx:3788
 TMrbDGF.cxx:3789
 TMrbDGF.cxx:3790
 TMrbDGF.cxx:3791
 TMrbDGF.cxx:3792
 TMrbDGF.cxx:3793
 TMrbDGF.cxx:3794
 TMrbDGF.cxx:3795
 TMrbDGF.cxx:3796
 TMrbDGF.cxx:3797
 TMrbDGF.cxx:3798
 TMrbDGF.cxx:3799
 TMrbDGF.cxx:3800
 TMrbDGF.cxx:3801
 TMrbDGF.cxx:3802
 TMrbDGF.cxx:3803
 TMrbDGF.cxx:3804
 TMrbDGF.cxx:3805
 TMrbDGF.cxx:3806
 TMrbDGF.cxx:3807
 TMrbDGF.cxx:3808
 TMrbDGF.cxx:3809
 TMrbDGF.cxx:3810
 TMrbDGF.cxx:3811
 TMrbDGF.cxx:3812
 TMrbDGF.cxx:3813
 TMrbDGF.cxx:3814
 TMrbDGF.cxx:3815
 TMrbDGF.cxx:3816
 TMrbDGF.cxx:3817
 TMrbDGF.cxx:3818
 TMrbDGF.cxx:3819
 TMrbDGF.cxx:3820
 TMrbDGF.cxx:3821
 TMrbDGF.cxx:3822
 TMrbDGF.cxx:3823
 TMrbDGF.cxx:3824
 TMrbDGF.cxx:3825
 TMrbDGF.cxx:3826
 TMrbDGF.cxx:3827
 TMrbDGF.cxx:3828
 TMrbDGF.cxx:3829
 TMrbDGF.cxx:3830
 TMrbDGF.cxx:3831
 TMrbDGF.cxx:3832
 TMrbDGF.cxx:3833
 TMrbDGF.cxx:3834
 TMrbDGF.cxx:3835
 TMrbDGF.cxx:3836
 TMrbDGF.cxx:3837
 TMrbDGF.cxx:3838
 TMrbDGF.cxx:3839
 TMrbDGF.cxx:3840
 TMrbDGF.cxx:3841
 TMrbDGF.cxx:3842
 TMrbDGF.cxx:3843
 TMrbDGF.cxx:3844
 TMrbDGF.cxx:3845
 TMrbDGF.cxx:3846
 TMrbDGF.cxx:3847
 TMrbDGF.cxx:3848
 TMrbDGF.cxx:3849
 TMrbDGF.cxx:3850
 TMrbDGF.cxx:3851
 TMrbDGF.cxx:3852
 TMrbDGF.cxx:3853
 TMrbDGF.cxx:3854
 TMrbDGF.cxx:3855
 TMrbDGF.cxx:3856
 TMrbDGF.cxx:3857
 TMrbDGF.cxx:3858
 TMrbDGF.cxx:3859
 TMrbDGF.cxx:3860
 TMrbDGF.cxx:3861
 TMrbDGF.cxx:3862
 TMrbDGF.cxx:3863
 TMrbDGF.cxx:3864
 TMrbDGF.cxx:3865
 TMrbDGF.cxx:3866
 TMrbDGF.cxx:3867
 TMrbDGF.cxx:3868
 TMrbDGF.cxx:3869
 TMrbDGF.cxx:3870
 TMrbDGF.cxx:3871
 TMrbDGF.cxx:3872
 TMrbDGF.cxx:3873
 TMrbDGF.cxx:3874
 TMrbDGF.cxx:3875
 TMrbDGF.cxx:3876
 TMrbDGF.cxx:3877
 TMrbDGF.cxx:3878
 TMrbDGF.cxx:3879
 TMrbDGF.cxx:3880
 TMrbDGF.cxx:3881
 TMrbDGF.cxx:3882
 TMrbDGF.cxx:3883
 TMrbDGF.cxx:3884
 TMrbDGF.cxx:3885
 TMrbDGF.cxx:3886
 TMrbDGF.cxx:3887
 TMrbDGF.cxx:3888
 TMrbDGF.cxx:3889
 TMrbDGF.cxx:3890
 TMrbDGF.cxx:3891
 TMrbDGF.cxx:3892
 TMrbDGF.cxx:3893
 TMrbDGF.cxx:3894
 TMrbDGF.cxx:3895
 TMrbDGF.cxx:3896
 TMrbDGF.cxx:3897
 TMrbDGF.cxx:3898
 TMrbDGF.cxx:3899
 TMrbDGF.cxx:3900
 TMrbDGF.cxx:3901
 TMrbDGF.cxx:3902
 TMrbDGF.cxx:3903
 TMrbDGF.cxx:3904
 TMrbDGF.cxx:3905
 TMrbDGF.cxx:3906
 TMrbDGF.cxx:3907
 TMrbDGF.cxx:3908
 TMrbDGF.cxx:3909
 TMrbDGF.cxx:3910
 TMrbDGF.cxx:3911
 TMrbDGF.cxx:3912
 TMrbDGF.cxx:3913
 TMrbDGF.cxx:3914
 TMrbDGF.cxx:3915
 TMrbDGF.cxx:3916
 TMrbDGF.cxx:3917
 TMrbDGF.cxx:3918
 TMrbDGF.cxx:3919
 TMrbDGF.cxx:3920
 TMrbDGF.cxx:3921
 TMrbDGF.cxx:3922
 TMrbDGF.cxx:3923
 TMrbDGF.cxx:3924
 TMrbDGF.cxx:3925
 TMrbDGF.cxx:3926
 TMrbDGF.cxx:3927
 TMrbDGF.cxx:3928
 TMrbDGF.cxx:3929
 TMrbDGF.cxx:3930
 TMrbDGF.cxx:3931
 TMrbDGF.cxx:3932
 TMrbDGF.cxx:3933
 TMrbDGF.cxx:3934
 TMrbDGF.cxx:3935
 TMrbDGF.cxx:3936
 TMrbDGF.cxx:3937
 TMrbDGF.cxx:3938
 TMrbDGF.cxx:3939
 TMrbDGF.cxx:3940
 TMrbDGF.cxx:3941
 TMrbDGF.cxx:3942
 TMrbDGF.cxx:3943
 TMrbDGF.cxx:3944
 TMrbDGF.cxx:3945
 TMrbDGF.cxx:3946
 TMrbDGF.cxx:3947
 TMrbDGF.cxx:3948
 TMrbDGF.cxx:3949
 TMrbDGF.cxx:3950
 TMrbDGF.cxx:3951
 TMrbDGF.cxx:3952
 TMrbDGF.cxx:3953
 TMrbDGF.cxx:3954
 TMrbDGF.cxx:3955
 TMrbDGF.cxx:3956
 TMrbDGF.cxx:3957
 TMrbDGF.cxx:3958
 TMrbDGF.cxx:3959
 TMrbDGF.cxx:3960
 TMrbDGF.cxx:3961
 TMrbDGF.cxx:3962
 TMrbDGF.cxx:3963
 TMrbDGF.cxx:3964
 TMrbDGF.cxx:3965
 TMrbDGF.cxx:3966
 TMrbDGF.cxx:3967
 TMrbDGF.cxx:3968
 TMrbDGF.cxx:3969
 TMrbDGF.cxx:3970
 TMrbDGF.cxx:3971
 TMrbDGF.cxx:3972
 TMrbDGF.cxx:3973
 TMrbDGF.cxx:3974
 TMrbDGF.cxx:3975
 TMrbDGF.cxx:3976
 TMrbDGF.cxx:3977
 TMrbDGF.cxx:3978
 TMrbDGF.cxx:3979
 TMrbDGF.cxx:3980
 TMrbDGF.cxx:3981
 TMrbDGF.cxx:3982
 TMrbDGF.cxx:3983
 TMrbDGF.cxx:3984
 TMrbDGF.cxx:3985
 TMrbDGF.cxx:3986
 TMrbDGF.cxx:3987
 TMrbDGF.cxx:3988
 TMrbDGF.cxx:3989
 TMrbDGF.cxx:3990
 TMrbDGF.cxx:3991
 TMrbDGF.cxx:3992
 TMrbDGF.cxx:3993
 TMrbDGF.cxx:3994
 TMrbDGF.cxx:3995
 TMrbDGF.cxx:3996
 TMrbDGF.cxx:3997
 TMrbDGF.cxx:3998
 TMrbDGF.cxx:3999
 TMrbDGF.cxx:4000
 TMrbDGF.cxx:4001
 TMrbDGF.cxx:4002
 TMrbDGF.cxx:4003
 TMrbDGF.cxx:4004
 TMrbDGF.cxx:4005
 TMrbDGF.cxx:4006
 TMrbDGF.cxx:4007
 TMrbDGF.cxx:4008
 TMrbDGF.cxx:4009
 TMrbDGF.cxx:4010
 TMrbDGF.cxx:4011
 TMrbDGF.cxx:4012
 TMrbDGF.cxx:4013
 TMrbDGF.cxx:4014
 TMrbDGF.cxx:4015
 TMrbDGF.cxx:4016
 TMrbDGF.cxx:4017
 TMrbDGF.cxx:4018
 TMrbDGF.cxx:4019
 TMrbDGF.cxx:4020
 TMrbDGF.cxx:4021
 TMrbDGF.cxx:4022
 TMrbDGF.cxx:4023
 TMrbDGF.cxx:4024
 TMrbDGF.cxx:4025
 TMrbDGF.cxx:4026
 TMrbDGF.cxx:4027
 TMrbDGF.cxx:4028
 TMrbDGF.cxx:4029
 TMrbDGF.cxx:4030
 TMrbDGF.cxx:4031
 TMrbDGF.cxx:4032
 TMrbDGF.cxx:4033
 TMrbDGF.cxx:4034
 TMrbDGF.cxx:4035
 TMrbDGF.cxx:4036
 TMrbDGF.cxx:4037
 TMrbDGF.cxx:4038
 TMrbDGF.cxx:4039
 TMrbDGF.cxx:4040
 TMrbDGF.cxx:4041
 TMrbDGF.cxx:4042
 TMrbDGF.cxx:4043
 TMrbDGF.cxx:4044
 TMrbDGF.cxx:4045
 TMrbDGF.cxx:4046
 TMrbDGF.cxx:4047
 TMrbDGF.cxx:4048
 TMrbDGF.cxx:4049
 TMrbDGF.cxx:4050
 TMrbDGF.cxx:4051
 TMrbDGF.cxx:4052
 TMrbDGF.cxx:4053
 TMrbDGF.cxx:4054
 TMrbDGF.cxx:4055
 TMrbDGF.cxx:4056
 TMrbDGF.cxx:4057
 TMrbDGF.cxx:4058
 TMrbDGF.cxx:4059
 TMrbDGF.cxx:4060
 TMrbDGF.cxx:4061
 TMrbDGF.cxx:4062
 TMrbDGF.cxx:4063
 TMrbDGF.cxx:4064
 TMrbDGF.cxx:4065
 TMrbDGF.cxx:4066
 TMrbDGF.cxx:4067
 TMrbDGF.cxx:4068
 TMrbDGF.cxx:4069
 TMrbDGF.cxx:4070
 TMrbDGF.cxx:4071
 TMrbDGF.cxx:4072
 TMrbDGF.cxx:4073
 TMrbDGF.cxx:4074
 TMrbDGF.cxx:4075
 TMrbDGF.cxx:4076
 TMrbDGF.cxx:4077
 TMrbDGF.cxx:4078
 TMrbDGF.cxx:4079
 TMrbDGF.cxx:4080
 TMrbDGF.cxx:4081
 TMrbDGF.cxx:4082
 TMrbDGF.cxx:4083
 TMrbDGF.cxx:4084
 TMrbDGF.cxx:4085
 TMrbDGF.cxx:4086
 TMrbDGF.cxx:4087
 TMrbDGF.cxx:4088
 TMrbDGF.cxx:4089
 TMrbDGF.cxx:4090
 TMrbDGF.cxx:4091
 TMrbDGF.cxx:4092
 TMrbDGF.cxx:4093
 TMrbDGF.cxx:4094
 TMrbDGF.cxx:4095
 TMrbDGF.cxx:4096
 TMrbDGF.cxx:4097
 TMrbDGF.cxx:4098
 TMrbDGF.cxx:4099
 TMrbDGF.cxx:4100
 TMrbDGF.cxx:4101
 TMrbDGF.cxx:4102
 TMrbDGF.cxx:4103
 TMrbDGF.cxx:4104
 TMrbDGF.cxx:4105
 TMrbDGF.cxx:4106
 TMrbDGF.cxx:4107
 TMrbDGF.cxx:4108
 TMrbDGF.cxx:4109
 TMrbDGF.cxx:4110
 TMrbDGF.cxx:4111
 TMrbDGF.cxx:4112
 TMrbDGF.cxx:4113
 TMrbDGF.cxx:4114
 TMrbDGF.cxx:4115
 TMrbDGF.cxx:4116
 TMrbDGF.cxx:4117
 TMrbDGF.cxx:4118
 TMrbDGF.cxx:4119
 TMrbDGF.cxx:4120
 TMrbDGF.cxx:4121
 TMrbDGF.cxx:4122
 TMrbDGF.cxx:4123
 TMrbDGF.cxx:4124
 TMrbDGF.cxx:4125
 TMrbDGF.cxx:4126
 TMrbDGF.cxx:4127
 TMrbDGF.cxx:4128
 TMrbDGF.cxx:4129
 TMrbDGF.cxx:4130
 TMrbDGF.cxx:4131
 TMrbDGF.cxx:4132
 TMrbDGF.cxx:4133
 TMrbDGF.cxx:4134
 TMrbDGF.cxx:4135
 TMrbDGF.cxx:4136
 TMrbDGF.cxx:4137
 TMrbDGF.cxx:4138
 TMrbDGF.cxx:4139
 TMrbDGF.cxx:4140
 TMrbDGF.cxx:4141
 TMrbDGF.cxx:4142
 TMrbDGF.cxx:4143
 TMrbDGF.cxx:4144
 TMrbDGF.cxx:4145
 TMrbDGF.cxx:4146
 TMrbDGF.cxx:4147
 TMrbDGF.cxx:4148
 TMrbDGF.cxx:4149
 TMrbDGF.cxx:4150
 TMrbDGF.cxx:4151
 TMrbDGF.cxx:4152
 TMrbDGF.cxx:4153
 TMrbDGF.cxx:4154
 TMrbDGF.cxx:4155
 TMrbDGF.cxx:4156
 TMrbDGF.cxx:4157
 TMrbDGF.cxx:4158
 TMrbDGF.cxx:4159
 TMrbDGF.cxx:4160
 TMrbDGF.cxx:4161
 TMrbDGF.cxx:4162
 TMrbDGF.cxx:4163
 TMrbDGF.cxx:4164
 TMrbDGF.cxx:4165
 TMrbDGF.cxx:4166
 TMrbDGF.cxx:4167
 TMrbDGF.cxx:4168
 TMrbDGF.cxx:4169
 TMrbDGF.cxx:4170
 TMrbDGF.cxx:4171
 TMrbDGF.cxx:4172
 TMrbDGF.cxx:4173
 TMrbDGF.cxx:4174
 TMrbDGF.cxx:4175
 TMrbDGF.cxx:4176
 TMrbDGF.cxx:4177
 TMrbDGF.cxx:4178
 TMrbDGF.cxx:4179
 TMrbDGF.cxx:4180
 TMrbDGF.cxx:4181
 TMrbDGF.cxx:4182
 TMrbDGF.cxx:4183
 TMrbDGF.cxx:4184
 TMrbDGF.cxx:4185
 TMrbDGF.cxx:4186
 TMrbDGF.cxx:4187
 TMrbDGF.cxx:4188
 TMrbDGF.cxx:4189
 TMrbDGF.cxx:4190
 TMrbDGF.cxx:4191
 TMrbDGF.cxx:4192
 TMrbDGF.cxx:4193
 TMrbDGF.cxx:4194
 TMrbDGF.cxx:4195
 TMrbDGF.cxx:4196
 TMrbDGF.cxx:4197
 TMrbDGF.cxx:4198
 TMrbDGF.cxx:4199
 TMrbDGF.cxx:4200
 TMrbDGF.cxx:4201
 TMrbDGF.cxx:4202
 TMrbDGF.cxx:4203
 TMrbDGF.cxx:4204
 TMrbDGF.cxx:4205
 TMrbDGF.cxx:4206
 TMrbDGF.cxx:4207
 TMrbDGF.cxx:4208
 TMrbDGF.cxx:4209
 TMrbDGF.cxx:4210
 TMrbDGF.cxx:4211
 TMrbDGF.cxx:4212
 TMrbDGF.cxx:4213
 TMrbDGF.cxx:4214
 TMrbDGF.cxx:4215
 TMrbDGF.cxx:4216
 TMrbDGF.cxx:4217
 TMrbDGF.cxx:4218
 TMrbDGF.cxx:4219
 TMrbDGF.cxx:4220
 TMrbDGF.cxx:4221
 TMrbDGF.cxx:4222
 TMrbDGF.cxx:4223
 TMrbDGF.cxx:4224
 TMrbDGF.cxx:4225
 TMrbDGF.cxx:4226
 TMrbDGF.cxx:4227
 TMrbDGF.cxx:4228
 TMrbDGF.cxx:4229
 TMrbDGF.cxx:4230
 TMrbDGF.cxx:4231
 TMrbDGF.cxx:4232
 TMrbDGF.cxx:4233
 TMrbDGF.cxx:4234
 TMrbDGF.cxx:4235
 TMrbDGF.cxx:4236
 TMrbDGF.cxx:4237
 TMrbDGF.cxx:4238
 TMrbDGF.cxx:4239
 TMrbDGF.cxx:4240
 TMrbDGF.cxx:4241
 TMrbDGF.cxx:4242
 TMrbDGF.cxx:4243
 TMrbDGF.cxx:4244
 TMrbDGF.cxx:4245
 TMrbDGF.cxx:4246
 TMrbDGF.cxx:4247
 TMrbDGF.cxx:4248
 TMrbDGF.cxx:4249
 TMrbDGF.cxx:4250
 TMrbDGF.cxx:4251
 TMrbDGF.cxx:4252
 TMrbDGF.cxx:4253
 TMrbDGF.cxx:4254
 TMrbDGF.cxx:4255
 TMrbDGF.cxx:4256
 TMrbDGF.cxx:4257
 TMrbDGF.cxx:4258
 TMrbDGF.cxx:4259
 TMrbDGF.cxx:4260
 TMrbDGF.cxx:4261
 TMrbDGF.cxx:4262
 TMrbDGF.cxx:4263
 TMrbDGF.cxx:4264
 TMrbDGF.cxx:4265
 TMrbDGF.cxx:4266
 TMrbDGF.cxx:4267
 TMrbDGF.cxx:4268
 TMrbDGF.cxx:4269
 TMrbDGF.cxx:4270
 TMrbDGF.cxx:4271
 TMrbDGF.cxx:4272
 TMrbDGF.cxx:4273
 TMrbDGF.cxx:4274
 TMrbDGF.cxx:4275
 TMrbDGF.cxx:4276
 TMrbDGF.cxx:4277
 TMrbDGF.cxx:4278
 TMrbDGF.cxx:4279
 TMrbDGF.cxx:4280
 TMrbDGF.cxx:4281
 TMrbDGF.cxx:4282
 TMrbDGF.cxx:4283
 TMrbDGF.cxx:4284
 TMrbDGF.cxx:4285
 TMrbDGF.cxx:4286
 TMrbDGF.cxx:4287
 TMrbDGF.cxx:4288
 TMrbDGF.cxx:4289
 TMrbDGF.cxx:4290
 TMrbDGF.cxx:4291
 TMrbDGF.cxx:4292
 TMrbDGF.cxx:4293
 TMrbDGF.cxx:4294
 TMrbDGF.cxx:4295
 TMrbDGF.cxx:4296
 TMrbDGF.cxx:4297
 TMrbDGF.cxx:4298
 TMrbDGF.cxx:4299
 TMrbDGF.cxx:4300
 TMrbDGF.cxx:4301
 TMrbDGF.cxx:4302
 TMrbDGF.cxx:4303
 TMrbDGF.cxx:4304
 TMrbDGF.cxx:4305
 TMrbDGF.cxx:4306
 TMrbDGF.cxx:4307
 TMrbDGF.cxx:4308
 TMrbDGF.cxx:4309
 TMrbDGF.cxx:4310
 TMrbDGF.cxx:4311
 TMrbDGF.cxx:4312
 TMrbDGF.cxx:4313
 TMrbDGF.cxx:4314
 TMrbDGF.cxx:4315
 TMrbDGF.cxx:4316
 TMrbDGF.cxx:4317
 TMrbDGF.cxx:4318
 TMrbDGF.cxx:4319
 TMrbDGF.cxx:4320
 TMrbDGF.cxx:4321
 TMrbDGF.cxx:4322
 TMrbDGF.cxx:4323
 TMrbDGF.cxx:4324
 TMrbDGF.cxx:4325
 TMrbDGF.cxx:4326
 TMrbDGF.cxx:4327
 TMrbDGF.cxx:4328
 TMrbDGF.cxx:4329
 TMrbDGF.cxx:4330
 TMrbDGF.cxx:4331
 TMrbDGF.cxx:4332
 TMrbDGF.cxx:4333
 TMrbDGF.cxx:4334
 TMrbDGF.cxx:4335
 TMrbDGF.cxx:4336
 TMrbDGF.cxx:4337
 TMrbDGF.cxx:4338
 TMrbDGF.cxx:4339
 TMrbDGF.cxx:4340
 TMrbDGF.cxx:4341
 TMrbDGF.cxx:4342
 TMrbDGF.cxx:4343
 TMrbDGF.cxx:4344
 TMrbDGF.cxx:4345
 TMrbDGF.cxx:4346
 TMrbDGF.cxx:4347
 TMrbDGF.cxx:4348
 TMrbDGF.cxx:4349
 TMrbDGF.cxx:4350
 TMrbDGF.cxx:4351
 TMrbDGF.cxx:4352
 TMrbDGF.cxx:4353
 TMrbDGF.cxx:4354
 TMrbDGF.cxx:4355
 TMrbDGF.cxx:4356
 TMrbDGF.cxx:4357
 TMrbDGF.cxx:4358
 TMrbDGF.cxx:4359
 TMrbDGF.cxx:4360
 TMrbDGF.cxx:4361
 TMrbDGF.cxx:4362
 TMrbDGF.cxx:4363
 TMrbDGF.cxx:4364
 TMrbDGF.cxx:4365
 TMrbDGF.cxx:4366
 TMrbDGF.cxx:4367
 TMrbDGF.cxx:4368
 TMrbDGF.cxx:4369
 TMrbDGF.cxx:4370
 TMrbDGF.cxx:4371
 TMrbDGF.cxx:4372
 TMrbDGF.cxx:4373
 TMrbDGF.cxx:4374
 TMrbDGF.cxx:4375
 TMrbDGF.cxx:4376
 TMrbDGF.cxx:4377
 TMrbDGF.cxx:4378
 TMrbDGF.cxx:4379
 TMrbDGF.cxx:4380
 TMrbDGF.cxx:4381
 TMrbDGF.cxx:4382
 TMrbDGF.cxx:4383
 TMrbDGF.cxx:4384
 TMrbDGF.cxx:4385
 TMrbDGF.cxx:4386
 TMrbDGF.cxx:4387
 TMrbDGF.cxx:4388
 TMrbDGF.cxx:4389
 TMrbDGF.cxx:4390
 TMrbDGF.cxx:4391
 TMrbDGF.cxx:4392
 TMrbDGF.cxx:4393
 TMrbDGF.cxx:4394
 TMrbDGF.cxx:4395
 TMrbDGF.cxx:4396
 TMrbDGF.cxx:4397
 TMrbDGF.cxx:4398
 TMrbDGF.cxx:4399
 TMrbDGF.cxx:4400
 TMrbDGF.cxx:4401
 TMrbDGF.cxx:4402
 TMrbDGF.cxx:4403
 TMrbDGF.cxx:4404
 TMrbDGF.cxx:4405
 TMrbDGF.cxx:4406
 TMrbDGF.cxx:4407
 TMrbDGF.cxx:4408
 TMrbDGF.cxx:4409
 TMrbDGF.cxx:4410
 TMrbDGF.cxx:4411
 TMrbDGF.cxx:4412
 TMrbDGF.cxx:4413
 TMrbDGF.cxx:4414
 TMrbDGF.cxx:4415
 TMrbDGF.cxx:4416
 TMrbDGF.cxx:4417
 TMrbDGF.cxx:4418
 TMrbDGF.cxx:4419
 TMrbDGF.cxx:4420
 TMrbDGF.cxx:4421
 TMrbDGF.cxx:4422
 TMrbDGF.cxx:4423
 TMrbDGF.cxx:4424
 TMrbDGF.cxx:4425
 TMrbDGF.cxx:4426
 TMrbDGF.cxx:4427
 TMrbDGF.cxx:4428
 TMrbDGF.cxx:4429
 TMrbDGF.cxx:4430
 TMrbDGF.cxx:4431
 TMrbDGF.cxx:4432
 TMrbDGF.cxx:4433
 TMrbDGF.cxx:4434
 TMrbDGF.cxx:4435
 TMrbDGF.cxx:4436
 TMrbDGF.cxx:4437
 TMrbDGF.cxx:4438
 TMrbDGF.cxx:4439
 TMrbDGF.cxx:4440
 TMrbDGF.cxx:4441
 TMrbDGF.cxx:4442
 TMrbDGF.cxx:4443
 TMrbDGF.cxx:4444
 TMrbDGF.cxx:4445
 TMrbDGF.cxx:4446
 TMrbDGF.cxx:4447
 TMrbDGF.cxx:4448
 TMrbDGF.cxx:4449
 TMrbDGF.cxx:4450
 TMrbDGF.cxx:4451
 TMrbDGF.cxx:4452
 TMrbDGF.cxx:4453
 TMrbDGF.cxx:4454
 TMrbDGF.cxx:4455
 TMrbDGF.cxx:4456
 TMrbDGF.cxx:4457
 TMrbDGF.cxx:4458
 TMrbDGF.cxx:4459
 TMrbDGF.cxx:4460
 TMrbDGF.cxx:4461
 TMrbDGF.cxx:4462
 TMrbDGF.cxx:4463
 TMrbDGF.cxx:4464
 TMrbDGF.cxx:4465
 TMrbDGF.cxx:4466
 TMrbDGF.cxx:4467
 TMrbDGF.cxx:4468
 TMrbDGF.cxx:4469
 TMrbDGF.cxx:4470
 TMrbDGF.cxx:4471
 TMrbDGF.cxx:4472
 TMrbDGF.cxx:4473
 TMrbDGF.cxx:4474
 TMrbDGF.cxx:4475
 TMrbDGF.cxx:4476
 TMrbDGF.cxx:4477
 TMrbDGF.cxx:4478
 TMrbDGF.cxx:4479
 TMrbDGF.cxx:4480
 TMrbDGF.cxx:4481
 TMrbDGF.cxx:4482
 TMrbDGF.cxx:4483
 TMrbDGF.cxx:4484
 TMrbDGF.cxx:4485
 TMrbDGF.cxx:4486
 TMrbDGF.cxx:4487
 TMrbDGF.cxx:4488
 TMrbDGF.cxx:4489
 TMrbDGF.cxx:4490
 TMrbDGF.cxx:4491
 TMrbDGF.cxx:4492
 TMrbDGF.cxx:4493
 TMrbDGF.cxx:4494
 TMrbDGF.cxx:4495
 TMrbDGF.cxx:4496
 TMrbDGF.cxx:4497
 TMrbDGF.cxx:4498
 TMrbDGF.cxx:4499
 TMrbDGF.cxx:4500
 TMrbDGF.cxx:4501
 TMrbDGF.cxx:4502
 TMrbDGF.cxx:4503
 TMrbDGF.cxx:4504
 TMrbDGF.cxx:4505
 TMrbDGF.cxx:4506
 TMrbDGF.cxx:4507
 TMrbDGF.cxx:4508
 TMrbDGF.cxx:4509
 TMrbDGF.cxx:4510
 TMrbDGF.cxx:4511
 TMrbDGF.cxx:4512
 TMrbDGF.cxx:4513
 TMrbDGF.cxx:4514
 TMrbDGF.cxx:4515
 TMrbDGF.cxx:4516
 TMrbDGF.cxx:4517
 TMrbDGF.cxx:4518
 TMrbDGF.cxx:4519
 TMrbDGF.cxx:4520
 TMrbDGF.cxx:4521
 TMrbDGF.cxx:4522
 TMrbDGF.cxx:4523
 TMrbDGF.cxx:4524
 TMrbDGF.cxx:4525
 TMrbDGF.cxx:4526
 TMrbDGF.cxx:4527
 TMrbDGF.cxx:4528
 TMrbDGF.cxx:4529
 TMrbDGF.cxx:4530
 TMrbDGF.cxx:4531
 TMrbDGF.cxx:4532
 TMrbDGF.cxx:4533
 TMrbDGF.cxx:4534
 TMrbDGF.cxx:4535
 TMrbDGF.cxx:4536
 TMrbDGF.cxx:4537
 TMrbDGF.cxx:4538
 TMrbDGF.cxx:4539
 TMrbDGF.cxx:4540
 TMrbDGF.cxx:4541
 TMrbDGF.cxx:4542
 TMrbDGF.cxx:4543
 TMrbDGF.cxx:4544
 TMrbDGF.cxx:4545
 TMrbDGF.cxx:4546
 TMrbDGF.cxx:4547
 TMrbDGF.cxx:4548
 TMrbDGF.cxx:4549
 TMrbDGF.cxx:4550
 TMrbDGF.cxx:4551
 TMrbDGF.cxx:4552
 TMrbDGF.cxx:4553
 TMrbDGF.cxx:4554
 TMrbDGF.cxx:4555
 TMrbDGF.cxx:4556
 TMrbDGF.cxx:4557
 TMrbDGF.cxx:4558
 TMrbDGF.cxx:4559
 TMrbDGF.cxx:4560
 TMrbDGF.cxx:4561
 TMrbDGF.cxx:4562
 TMrbDGF.cxx:4563
 TMrbDGF.cxx:4564
 TMrbDGF.cxx:4565
 TMrbDGF.cxx:4566
 TMrbDGF.cxx:4567
 TMrbDGF.cxx:4568
 TMrbDGF.cxx:4569
 TMrbDGF.cxx:4570
 TMrbDGF.cxx:4571
 TMrbDGF.cxx:4572
 TMrbDGF.cxx:4573
 TMrbDGF.cxx:4574
 TMrbDGF.cxx:4575
 TMrbDGF.cxx:4576
 TMrbDGF.cxx:4577
 TMrbDGF.cxx:4578
 TMrbDGF.cxx:4579
 TMrbDGF.cxx:4580
 TMrbDGF.cxx:4581
 TMrbDGF.cxx:4582
 TMrbDGF.cxx:4583
 TMrbDGF.cxx:4584
 TMrbDGF.cxx:4585
 TMrbDGF.cxx:4586
 TMrbDGF.cxx:4587
 TMrbDGF.cxx:4588
 TMrbDGF.cxx:4589
 TMrbDGF.cxx:4590
 TMrbDGF.cxx:4591
 TMrbDGF.cxx:4592
 TMrbDGF.cxx:4593
 TMrbDGF.cxx:4594
 TMrbDGF.cxx:4595
 TMrbDGF.cxx:4596
 TMrbDGF.cxx:4597
 TMrbDGF.cxx:4598
 TMrbDGF.cxx:4599
 TMrbDGF.cxx:4600
 TMrbDGF.cxx:4601
 TMrbDGF.cxx:4602
 TMrbDGF.cxx:4603
 TMrbDGF.cxx:4604
 TMrbDGF.cxx:4605
 TMrbDGF.cxx:4606
 TMrbDGF.cxx:4607
 TMrbDGF.cxx:4608
 TMrbDGF.cxx:4609
 TMrbDGF.cxx:4610
 TMrbDGF.cxx:4611
 TMrbDGF.cxx:4612
 TMrbDGF.cxx:4613
 TMrbDGF.cxx:4614
 TMrbDGF.cxx:4615
 TMrbDGF.cxx:4616
 TMrbDGF.cxx:4617
 TMrbDGF.cxx:4618
 TMrbDGF.cxx:4619
 TMrbDGF.cxx:4620
 TMrbDGF.cxx:4621
 TMrbDGF.cxx:4622
 TMrbDGF.cxx:4623
 TMrbDGF.cxx:4624
 TMrbDGF.cxx:4625
 TMrbDGF.cxx:4626
 TMrbDGF.cxx:4627
 TMrbDGF.cxx:4628
 TMrbDGF.cxx:4629
 TMrbDGF.cxx:4630
 TMrbDGF.cxx:4631
 TMrbDGF.cxx:4632
 TMrbDGF.cxx:4633
 TMrbDGF.cxx:4634
 TMrbDGF.cxx:4635
 TMrbDGF.cxx:4636
 TMrbDGF.cxx:4637
 TMrbDGF.cxx:4638
 TMrbDGF.cxx:4639
 TMrbDGF.cxx:4640
 TMrbDGF.cxx:4641
 TMrbDGF.cxx:4642
 TMrbDGF.cxx:4643
 TMrbDGF.cxx:4644
 TMrbDGF.cxx:4645
 TMrbDGF.cxx:4646
 TMrbDGF.cxx:4647
 TMrbDGF.cxx:4648
 TMrbDGF.cxx:4649
 TMrbDGF.cxx:4650
 TMrbDGF.cxx:4651
 TMrbDGF.cxx:4652
 TMrbDGF.cxx:4653
 TMrbDGF.cxx:4654
 TMrbDGF.cxx:4655
 TMrbDGF.cxx:4656
 TMrbDGF.cxx:4657
 TMrbDGF.cxx:4658
 TMrbDGF.cxx:4659
 TMrbDGF.cxx:4660
 TMrbDGF.cxx:4661
 TMrbDGF.cxx:4662
 TMrbDGF.cxx:4663
 TMrbDGF.cxx:4664
 TMrbDGF.cxx:4665
 TMrbDGF.cxx:4666
 TMrbDGF.cxx:4667
 TMrbDGF.cxx:4668
 TMrbDGF.cxx:4669
 TMrbDGF.cxx:4670
 TMrbDGF.cxx:4671
 TMrbDGF.cxx:4672
 TMrbDGF.cxx:4673
 TMrbDGF.cxx:4674
 TMrbDGF.cxx:4675
 TMrbDGF.cxx:4676
 TMrbDGF.cxx:4677
 TMrbDGF.cxx:4678
 TMrbDGF.cxx:4679
 TMrbDGF.cxx:4680
 TMrbDGF.cxx:4681
 TMrbDGF.cxx:4682
 TMrbDGF.cxx:4683
 TMrbDGF.cxx:4684
 TMrbDGF.cxx:4685
 TMrbDGF.cxx:4686
 TMrbDGF.cxx:4687
 TMrbDGF.cxx:4688
 TMrbDGF.cxx:4689
 TMrbDGF.cxx:4690
 TMrbDGF.cxx:4691
 TMrbDGF.cxx:4692
 TMrbDGF.cxx:4693
 TMrbDGF.cxx:4694
 TMrbDGF.cxx:4695
 TMrbDGF.cxx:4696
 TMrbDGF.cxx:4697
 TMrbDGF.cxx:4698
 TMrbDGF.cxx:4699
 TMrbDGF.cxx:4700
 TMrbDGF.cxx:4701
 TMrbDGF.cxx:4702
 TMrbDGF.cxx:4703
 TMrbDGF.cxx:4704
 TMrbDGF.cxx:4705
 TMrbDGF.cxx:4706
 TMrbDGF.cxx:4707
 TMrbDGF.cxx:4708
 TMrbDGF.cxx:4709
 TMrbDGF.cxx:4710
 TMrbDGF.cxx:4711
 TMrbDGF.cxx:4712
 TMrbDGF.cxx:4713
 TMrbDGF.cxx:4714
 TMrbDGF.cxx:4715
 TMrbDGF.cxx:4716
 TMrbDGF.cxx:4717
 TMrbDGF.cxx:4718
 TMrbDGF.cxx:4719
 TMrbDGF.cxx:4720
 TMrbDGF.cxx:4721
 TMrbDGF.cxx:4722
 TMrbDGF.cxx:4723
 TMrbDGF.cxx:4724
 TMrbDGF.cxx:4725
 TMrbDGF.cxx:4726
 TMrbDGF.cxx:4727
 TMrbDGF.cxx:4728
 TMrbDGF.cxx:4729
 TMrbDGF.cxx:4730
 TMrbDGF.cxx:4731
 TMrbDGF.cxx:4732
 TMrbDGF.cxx:4733
 TMrbDGF.cxx:4734
 TMrbDGF.cxx:4735
 TMrbDGF.cxx:4736
 TMrbDGF.cxx:4737
 TMrbDGF.cxx:4738
 TMrbDGF.cxx:4739
 TMrbDGF.cxx:4740
 TMrbDGF.cxx:4741
 TMrbDGF.cxx:4742
 TMrbDGF.cxx:4743
 TMrbDGF.cxx:4744
 TMrbDGF.cxx:4745
 TMrbDGF.cxx:4746
 TMrbDGF.cxx:4747
 TMrbDGF.cxx:4748
 TMrbDGF.cxx:4749
 TMrbDGF.cxx:4750
 TMrbDGF.cxx:4751
 TMrbDGF.cxx:4752
 TMrbDGF.cxx:4753
 TMrbDGF.cxx:4754
 TMrbDGF.cxx:4755
 TMrbDGF.cxx:4756
 TMrbDGF.cxx:4757
 TMrbDGF.cxx:4758
 TMrbDGF.cxx:4759
 TMrbDGF.cxx:4760
 TMrbDGF.cxx:4761
 TMrbDGF.cxx:4762
 TMrbDGF.cxx:4763
 TMrbDGF.cxx:4764
 TMrbDGF.cxx:4765
 TMrbDGF.cxx:4766
 TMrbDGF.cxx:4767
 TMrbDGF.cxx:4768
 TMrbDGF.cxx:4769
 TMrbDGF.cxx:4770
 TMrbDGF.cxx:4771
 TMrbDGF.cxx:4772
 TMrbDGF.cxx:4773
 TMrbDGF.cxx:4774
 TMrbDGF.cxx:4775
 TMrbDGF.cxx:4776
 TMrbDGF.cxx:4777
 TMrbDGF.cxx:4778
 TMrbDGF.cxx:4779
 TMrbDGF.cxx:4780
 TMrbDGF.cxx:4781
 TMrbDGF.cxx:4782
 TMrbDGF.cxx:4783
 TMrbDGF.cxx:4784
 TMrbDGF.cxx:4785
 TMrbDGF.cxx:4786
 TMrbDGF.cxx:4787
 TMrbDGF.cxx:4788
 TMrbDGF.cxx:4789
 TMrbDGF.cxx:4790
 TMrbDGF.cxx:4791
 TMrbDGF.cxx:4792
 TMrbDGF.cxx:4793
 TMrbDGF.cxx:4794
 TMrbDGF.cxx:4795
 TMrbDGF.cxx:4796
 TMrbDGF.cxx:4797
 TMrbDGF.cxx:4798
 TMrbDGF.cxx:4799
 TMrbDGF.cxx:4800
 TMrbDGF.cxx:4801
 TMrbDGF.cxx:4802
 TMrbDGF.cxx:4803
 TMrbDGF.cxx:4804
 TMrbDGF.cxx:4805
 TMrbDGF.cxx:4806
 TMrbDGF.cxx:4807
 TMrbDGF.cxx:4808
 TMrbDGF.cxx:4809
 TMrbDGF.cxx:4810
 TMrbDGF.cxx:4811
 TMrbDGF.cxx:4812
 TMrbDGF.cxx:4813
 TMrbDGF.cxx:4814
 TMrbDGF.cxx:4815
 TMrbDGF.cxx:4816
 TMrbDGF.cxx:4817
 TMrbDGF.cxx:4818
 TMrbDGF.cxx:4819
 TMrbDGF.cxx:4820
 TMrbDGF.cxx:4821
 TMrbDGF.cxx:4822
 TMrbDGF.cxx:4823
 TMrbDGF.cxx:4824
 TMrbDGF.cxx:4825
 TMrbDGF.cxx:4826
 TMrbDGF.cxx:4827
 TMrbDGF.cxx:4828
 TMrbDGF.cxx:4829
 TMrbDGF.cxx:4830
 TMrbDGF.cxx:4831
 TMrbDGF.cxx:4832
 TMrbDGF.cxx:4833
 TMrbDGF.cxx:4834
 TMrbDGF.cxx:4835
 TMrbDGF.cxx:4836
 TMrbDGF.cxx:4837
 TMrbDGF.cxx:4838
 TMrbDGF.cxx:4839
 TMrbDGF.cxx:4840
 TMrbDGF.cxx:4841
 TMrbDGF.cxx:4842
 TMrbDGF.cxx:4843
 TMrbDGF.cxx:4844
 TMrbDGF.cxx:4845
 TMrbDGF.cxx:4846
 TMrbDGF.cxx:4847
 TMrbDGF.cxx:4848
 TMrbDGF.cxx:4849
 TMrbDGF.cxx:4850
 TMrbDGF.cxx:4851
 TMrbDGF.cxx:4852
 TMrbDGF.cxx:4853
 TMrbDGF.cxx:4854
 TMrbDGF.cxx:4855
 TMrbDGF.cxx:4856
 TMrbDGF.cxx:4857
 TMrbDGF.cxx:4858
 TMrbDGF.cxx:4859
 TMrbDGF.cxx:4860
 TMrbDGF.cxx:4861
 TMrbDGF.cxx:4862
 TMrbDGF.cxx:4863
 TMrbDGF.cxx:4864
 TMrbDGF.cxx:4865
 TMrbDGF.cxx:4866
 TMrbDGF.cxx:4867
 TMrbDGF.cxx:4868
 TMrbDGF.cxx:4869
 TMrbDGF.cxx:4870
 TMrbDGF.cxx:4871
 TMrbDGF.cxx:4872
 TMrbDGF.cxx:4873
 TMrbDGF.cxx:4874
 TMrbDGF.cxx:4875
 TMrbDGF.cxx:4876
 TMrbDGF.cxx:4877
 TMrbDGF.cxx:4878
 TMrbDGF.cxx:4879
 TMrbDGF.cxx:4880
 TMrbDGF.cxx:4881
 TMrbDGF.cxx:4882
 TMrbDGF.cxx:4883
 TMrbDGF.cxx:4884
 TMrbDGF.cxx:4885
 TMrbDGF.cxx:4886
 TMrbDGF.cxx:4887
 TMrbDGF.cxx:4888
 TMrbDGF.cxx:4889
 TMrbDGF.cxx:4890
 TMrbDGF.cxx:4891
 TMrbDGF.cxx:4892
 TMrbDGF.cxx:4893
 TMrbDGF.cxx:4894
 TMrbDGF.cxx:4895
 TMrbDGF.cxx:4896
 TMrbDGF.cxx:4897
 TMrbDGF.cxx:4898
 TMrbDGF.cxx:4899
 TMrbDGF.cxx:4900
 TMrbDGF.cxx:4901
 TMrbDGF.cxx:4902
 TMrbDGF.cxx:4903
 TMrbDGF.cxx:4904
 TMrbDGF.cxx:4905
 TMrbDGF.cxx:4906
 TMrbDGF.cxx:4907
 TMrbDGF.cxx:4908
 TMrbDGF.cxx:4909
 TMrbDGF.cxx:4910
 TMrbDGF.cxx:4911
 TMrbDGF.cxx:4912
 TMrbDGF.cxx:4913
 TMrbDGF.cxx:4914
 TMrbDGF.cxx:4915
 TMrbDGF.cxx:4916
 TMrbDGF.cxx:4917
 TMrbDGF.cxx:4918
 TMrbDGF.cxx:4919
 TMrbDGF.cxx:4920
 TMrbDGF.cxx:4921
 TMrbDGF.cxx:4922
 TMrbDGF.cxx:4923
 TMrbDGF.cxx:4924
 TMrbDGF.cxx:4925
 TMrbDGF.cxx:4926
 TMrbDGF.cxx:4927
 TMrbDGF.cxx:4928
 TMrbDGF.cxx:4929
 TMrbDGF.cxx:4930
 TMrbDGF.cxx:4931
 TMrbDGF.cxx:4932
 TMrbDGF.cxx:4933
 TMrbDGF.cxx:4934
 TMrbDGF.cxx:4935
 TMrbDGF.cxx:4936
 TMrbDGF.cxx:4937
 TMrbDGF.cxx:4938
 TMrbDGF.cxx:4939
 TMrbDGF.cxx:4940
 TMrbDGF.cxx:4941
 TMrbDGF.cxx:4942
 TMrbDGF.cxx:4943
 TMrbDGF.cxx:4944
 TMrbDGF.cxx:4945
 TMrbDGF.cxx:4946
 TMrbDGF.cxx:4947
 TMrbDGF.cxx:4948
 TMrbDGF.cxx:4949
 TMrbDGF.cxx:4950
 TMrbDGF.cxx:4951
 TMrbDGF.cxx:4952
 TMrbDGF.cxx:4953
 TMrbDGF.cxx:4954
 TMrbDGF.cxx:4955
 TMrbDGF.cxx:4956
 TMrbDGF.cxx:4957
 TMrbDGF.cxx:4958
 TMrbDGF.cxx:4959
 TMrbDGF.cxx:4960
 TMrbDGF.cxx:4961
 TMrbDGF.cxx:4962
 TMrbDGF.cxx:4963
 TMrbDGF.cxx:4964
 TMrbDGF.cxx:4965
 TMrbDGF.cxx:4966
 TMrbDGF.cxx:4967
 TMrbDGF.cxx:4968
 TMrbDGF.cxx:4969
 TMrbDGF.cxx:4970
 TMrbDGF.cxx:4971
 TMrbDGF.cxx:4972
 TMrbDGF.cxx:4973
 TMrbDGF.cxx:4974
 TMrbDGF.cxx:4975
 TMrbDGF.cxx:4976
 TMrbDGF.cxx:4977
 TMrbDGF.cxx:4978
 TMrbDGF.cxx:4979
 TMrbDGF.cxx:4980
 TMrbDGF.cxx:4981
 TMrbDGF.cxx:4982
 TMrbDGF.cxx:4983
 TMrbDGF.cxx:4984
 TMrbDGF.cxx:4985
 TMrbDGF.cxx:4986
 TMrbDGF.cxx:4987
 TMrbDGF.cxx:4988
 TMrbDGF.cxx:4989
 TMrbDGF.cxx:4990
 TMrbDGF.cxx:4991
 TMrbDGF.cxx:4992
 TMrbDGF.cxx:4993
 TMrbDGF.cxx:4994
 TMrbDGF.cxx:4995
 TMrbDGF.cxx:4996
 TMrbDGF.cxx:4997
 TMrbDGF.cxx:4998
 TMrbDGF.cxx:4999
 TMrbDGF.cxx:5000
 TMrbDGF.cxx:5001
 TMrbDGF.cxx:5002
 TMrbDGF.cxx:5003
 TMrbDGF.cxx:5004
 TMrbDGF.cxx:5005
 TMrbDGF.cxx:5006
 TMrbDGF.cxx:5007
 TMrbDGF.cxx:5008
 TMrbDGF.cxx:5009
 TMrbDGF.cxx:5010
 TMrbDGF.cxx:5011
 TMrbDGF.cxx:5012
 TMrbDGF.cxx:5013
 TMrbDGF.cxx:5014
 TMrbDGF.cxx:5015
 TMrbDGF.cxx:5016
 TMrbDGF.cxx:5017
 TMrbDGF.cxx:5018
 TMrbDGF.cxx:5019
 TMrbDGF.cxx:5020
 TMrbDGF.cxx:5021
 TMrbDGF.cxx:5022
 TMrbDGF.cxx:5023
 TMrbDGF.cxx:5024
 TMrbDGF.cxx:5025
 TMrbDGF.cxx:5026
 TMrbDGF.cxx:5027
 TMrbDGF.cxx:5028
 TMrbDGF.cxx:5029
 TMrbDGF.cxx:5030
 TMrbDGF.cxx:5031
 TMrbDGF.cxx:5032
 TMrbDGF.cxx:5033
 TMrbDGF.cxx:5034
 TMrbDGF.cxx:5035
 TMrbDGF.cxx:5036
 TMrbDGF.cxx:5037
 TMrbDGF.cxx:5038
 TMrbDGF.cxx:5039
 TMrbDGF.cxx:5040
 TMrbDGF.cxx:5041
 TMrbDGF.cxx:5042
 TMrbDGF.cxx:5043
 TMrbDGF.cxx:5044
 TMrbDGF.cxx:5045
 TMrbDGF.cxx:5046
 TMrbDGF.cxx:5047
 TMrbDGF.cxx:5048
 TMrbDGF.cxx:5049
 TMrbDGF.cxx:5050
 TMrbDGF.cxx:5051
 TMrbDGF.cxx:5052
 TMrbDGF.cxx:5053
 TMrbDGF.cxx:5054
 TMrbDGF.cxx:5055
 TMrbDGF.cxx:5056
 TMrbDGF.cxx:5057
 TMrbDGF.cxx:5058
 TMrbDGF.cxx:5059
 TMrbDGF.cxx:5060
 TMrbDGF.cxx:5061
 TMrbDGF.cxx:5062
 TMrbDGF.cxx:5063
 TMrbDGF.cxx:5064
 TMrbDGF.cxx:5065
 TMrbDGF.cxx:5066
 TMrbDGF.cxx:5067
 TMrbDGF.cxx:5068
 TMrbDGF.cxx:5069
 TMrbDGF.cxx:5070
 TMrbDGF.cxx:5071
 TMrbDGF.cxx:5072
 TMrbDGF.cxx:5073
 TMrbDGF.cxx:5074
 TMrbDGF.cxx:5075
 TMrbDGF.cxx:5076
 TMrbDGF.cxx:5077
 TMrbDGF.cxx:5078
 TMrbDGF.cxx:5079
 TMrbDGF.cxx:5080
 TMrbDGF.cxx:5081
 TMrbDGF.cxx:5082
 TMrbDGF.cxx:5083
 TMrbDGF.cxx:5084
 TMrbDGF.cxx:5085
 TMrbDGF.cxx:5086
 TMrbDGF.cxx:5087
 TMrbDGF.cxx:5088
 TMrbDGF.cxx:5089
 TMrbDGF.cxx:5090
 TMrbDGF.cxx:5091
 TMrbDGF.cxx:5092
 TMrbDGF.cxx:5093
 TMrbDGF.cxx:5094
 TMrbDGF.cxx:5095
 TMrbDGF.cxx:5096
 TMrbDGF.cxx:5097
 TMrbDGF.cxx:5098
 TMrbDGF.cxx:5099
 TMrbDGF.cxx:5100
 TMrbDGF.cxx:5101
 TMrbDGF.cxx:5102
 TMrbDGF.cxx:5103
 TMrbDGF.cxx:5104
 TMrbDGF.cxx:5105
 TMrbDGF.cxx:5106
 TMrbDGF.cxx:5107
 TMrbDGF.cxx:5108
 TMrbDGF.cxx:5109
 TMrbDGF.cxx:5110
 TMrbDGF.cxx:5111
 TMrbDGF.cxx:5112
 TMrbDGF.cxx:5113
 TMrbDGF.cxx:5114
 TMrbDGF.cxx:5115
 TMrbDGF.cxx:5116
 TMrbDGF.cxx:5117
 TMrbDGF.cxx:5118
 TMrbDGF.cxx:5119
 TMrbDGF.cxx:5120
 TMrbDGF.cxx:5121
 TMrbDGF.cxx:5122
 TMrbDGF.cxx:5123
 TMrbDGF.cxx:5124
 TMrbDGF.cxx:5125
 TMrbDGF.cxx:5126
 TMrbDGF.cxx:5127
 TMrbDGF.cxx:5128
 TMrbDGF.cxx:5129
 TMrbDGF.cxx:5130
 TMrbDGF.cxx:5131
 TMrbDGF.cxx:5132
 TMrbDGF.cxx:5133
 TMrbDGF.cxx:5134
 TMrbDGF.cxx:5135
 TMrbDGF.cxx:5136
 TMrbDGF.cxx:5137
 TMrbDGF.cxx:5138
 TMrbDGF.cxx:5139
 TMrbDGF.cxx:5140
 TMrbDGF.cxx:5141
 TMrbDGF.cxx:5142
 TMrbDGF.cxx:5143
 TMrbDGF.cxx:5144
 TMrbDGF.cxx:5145
 TMrbDGF.cxx:5146
 TMrbDGF.cxx:5147
 TMrbDGF.cxx:5148
 TMrbDGF.cxx:5149
 TMrbDGF.cxx:5150
 TMrbDGF.cxx:5151
 TMrbDGF.cxx:5152
 TMrbDGF.cxx:5153
 TMrbDGF.cxx:5154
 TMrbDGF.cxx:5155
 TMrbDGF.cxx:5156
 TMrbDGF.cxx:5157
 TMrbDGF.cxx:5158
 TMrbDGF.cxx:5159
 TMrbDGF.cxx:5160
 TMrbDGF.cxx:5161
 TMrbDGF.cxx:5162
 TMrbDGF.cxx:5163
 TMrbDGF.cxx:5164
 TMrbDGF.cxx:5165
 TMrbDGF.cxx:5166
 TMrbDGF.cxx:5167
 TMrbDGF.cxx:5168
 TMrbDGF.cxx:5169
 TMrbDGF.cxx:5170
 TMrbDGF.cxx:5171
 TMrbDGF.cxx:5172
 TMrbDGF.cxx:5173
 TMrbDGF.cxx:5174
 TMrbDGF.cxx:5175
 TMrbDGF.cxx:5176
 TMrbDGF.cxx:5177
 TMrbDGF.cxx:5178
 TMrbDGF.cxx:5179
 TMrbDGF.cxx:5180
 TMrbDGF.cxx:5181
 TMrbDGF.cxx:5182
 TMrbDGF.cxx:5183
 TMrbDGF.cxx:5184
 TMrbDGF.cxx:5185
 TMrbDGF.cxx:5186
 TMrbDGF.cxx:5187
 TMrbDGF.cxx:5188
 TMrbDGF.cxx:5189
 TMrbDGF.cxx:5190
 TMrbDGF.cxx:5191
 TMrbDGF.cxx:5192
 TMrbDGF.cxx:5193
 TMrbDGF.cxx:5194
 TMrbDGF.cxx:5195
 TMrbDGF.cxx:5196
 TMrbDGF.cxx:5197
 TMrbDGF.cxx:5198
 TMrbDGF.cxx:5199
 TMrbDGF.cxx:5200
 TMrbDGF.cxx:5201
 TMrbDGF.cxx:5202
 TMrbDGF.cxx:5203
 TMrbDGF.cxx:5204
 TMrbDGF.cxx:5205
 TMrbDGF.cxx:5206
 TMrbDGF.cxx:5207
 TMrbDGF.cxx:5208
 TMrbDGF.cxx:5209
 TMrbDGF.cxx:5210
 TMrbDGF.cxx:5211
 TMrbDGF.cxx:5212
 TMrbDGF.cxx:5213
 TMrbDGF.cxx:5214
 TMrbDGF.cxx:5215
 TMrbDGF.cxx:5216
 TMrbDGF.cxx:5217
 TMrbDGF.cxx:5218
 TMrbDGF.cxx:5219
 TMrbDGF.cxx:5220
 TMrbDGF.cxx:5221
 TMrbDGF.cxx:5222
 TMrbDGF.cxx:5223
 TMrbDGF.cxx:5224
 TMrbDGF.cxx:5225
 TMrbDGF.cxx:5226
 TMrbDGF.cxx:5227
 TMrbDGF.cxx:5228
 TMrbDGF.cxx:5229
 TMrbDGF.cxx:5230
 TMrbDGF.cxx:5231
 TMrbDGF.cxx:5232
 TMrbDGF.cxx:5233
 TMrbDGF.cxx:5234
 TMrbDGF.cxx:5235
 TMrbDGF.cxx:5236
 TMrbDGF.cxx:5237
 TMrbDGF.cxx:5238
 TMrbDGF.cxx:5239
 TMrbDGF.cxx:5240
 TMrbDGF.cxx:5241
 TMrbDGF.cxx:5242
 TMrbDGF.cxx:5243
 TMrbDGF.cxx:5244
 TMrbDGF.cxx:5245
 TMrbDGF.cxx:5246
 TMrbDGF.cxx:5247
 TMrbDGF.cxx:5248
 TMrbDGF.cxx:5249
 TMrbDGF.cxx:5250
 TMrbDGF.cxx:5251
 TMrbDGF.cxx:5252
 TMrbDGF.cxx:5253
 TMrbDGF.cxx:5254
 TMrbDGF.cxx:5255
 TMrbDGF.cxx:5256
 TMrbDGF.cxx:5257
 TMrbDGF.cxx:5258
 TMrbDGF.cxx:5259
 TMrbDGF.cxx:5260
 TMrbDGF.cxx:5261
 TMrbDGF.cxx:5262
 TMrbDGF.cxx:5263
 TMrbDGF.cxx:5264
 TMrbDGF.cxx:5265
 TMrbDGF.cxx:5266
 TMrbDGF.cxx:5267
 TMrbDGF.cxx:5268
 TMrbDGF.cxx:5269
 TMrbDGF.cxx:5270
 TMrbDGF.cxx:5271
 TMrbDGF.cxx:5272
 TMrbDGF.cxx:5273
 TMrbDGF.cxx:5274
 TMrbDGF.cxx:5275
 TMrbDGF.cxx:5276
 TMrbDGF.cxx:5277
 TMrbDGF.cxx:5278
 TMrbDGF.cxx:5279
 TMrbDGF.cxx:5280
 TMrbDGF.cxx:5281
 TMrbDGF.cxx:5282
 TMrbDGF.cxx:5283
 TMrbDGF.cxx:5284
 TMrbDGF.cxx:5285
 TMrbDGF.cxx:5286
 TMrbDGF.cxx:5287
 TMrbDGF.cxx:5288
 TMrbDGF.cxx:5289
 TMrbDGF.cxx:5290
 TMrbDGF.cxx:5291
 TMrbDGF.cxx:5292
 TMrbDGF.cxx:5293
 TMrbDGF.cxx:5294
 TMrbDGF.cxx:5295
 TMrbDGF.cxx:5296
 TMrbDGF.cxx:5297
 TMrbDGF.cxx:5298
 TMrbDGF.cxx:5299
 TMrbDGF.cxx:5300
 TMrbDGF.cxx:5301
 TMrbDGF.cxx:5302
 TMrbDGF.cxx:5303
 TMrbDGF.cxx:5304
 TMrbDGF.cxx:5305
 TMrbDGF.cxx:5306
 TMrbDGF.cxx:5307
 TMrbDGF.cxx:5308
 TMrbDGF.cxx:5309
 TMrbDGF.cxx:5310
 TMrbDGF.cxx:5311
 TMrbDGF.cxx:5312
 TMrbDGF.cxx:5313
 TMrbDGF.cxx:5314
 TMrbDGF.cxx:5315
 TMrbDGF.cxx:5316
 TMrbDGF.cxx:5317
 TMrbDGF.cxx:5318
 TMrbDGF.cxx:5319
 TMrbDGF.cxx:5320
 TMrbDGF.cxx:5321
 TMrbDGF.cxx:5322
 TMrbDGF.cxx:5323
 TMrbDGF.cxx:5324
 TMrbDGF.cxx:5325
 TMrbDGF.cxx:5326
 TMrbDGF.cxx:5327
 TMrbDGF.cxx:5328
 TMrbDGF.cxx:5329
 TMrbDGF.cxx:5330
 TMrbDGF.cxx:5331
 TMrbDGF.cxx:5332
 TMrbDGF.cxx:5333
 TMrbDGF.cxx:5334
 TMrbDGF.cxx:5335
 TMrbDGF.cxx:5336
 TMrbDGF.cxx:5337
 TMrbDGF.cxx:5338
 TMrbDGF.cxx:5339
 TMrbDGF.cxx:5340
 TMrbDGF.cxx:5341
 TMrbDGF.cxx:5342
 TMrbDGF.cxx:5343
 TMrbDGF.cxx:5344
 TMrbDGF.cxx:5345
 TMrbDGF.cxx:5346
 TMrbDGF.cxx:5347
 TMrbDGF.cxx:5348
 TMrbDGF.cxx:5349
 TMrbDGF.cxx:5350
 TMrbDGF.cxx:5351
 TMrbDGF.cxx:5352
 TMrbDGF.cxx:5353
 TMrbDGF.cxx:5354
 TMrbDGF.cxx:5355
 TMrbDGF.cxx:5356
 TMrbDGF.cxx:5357
 TMrbDGF.cxx:5358
 TMrbDGF.cxx:5359
 TMrbDGF.cxx:5360
 TMrbDGF.cxx:5361
 TMrbDGF.cxx:5362
 TMrbDGF.cxx:5363
 TMrbDGF.cxx:5364
 TMrbDGF.cxx:5365
 TMrbDGF.cxx:5366
 TMrbDGF.cxx:5367
 TMrbDGF.cxx:5368
 TMrbDGF.cxx:5369
 TMrbDGF.cxx:5370
 TMrbDGF.cxx:5371
 TMrbDGF.cxx:5372
 TMrbDGF.cxx:5373
 TMrbDGF.cxx:5374
 TMrbDGF.cxx:5375
 TMrbDGF.cxx:5376
 TMrbDGF.cxx:5377
 TMrbDGF.cxx:5378
 TMrbDGF.cxx:5379
 TMrbDGF.cxx:5380
 TMrbDGF.cxx:5381
 TMrbDGF.cxx:5382
 TMrbDGF.cxx:5383
 TMrbDGF.cxx:5384
 TMrbDGF.cxx:5385
 TMrbDGF.cxx:5386
 TMrbDGF.cxx:5387
 TMrbDGF.cxx:5388
 TMrbDGF.cxx:5389
 TMrbDGF.cxx:5390
 TMrbDGF.cxx:5391
 TMrbDGF.cxx:5392
 TMrbDGF.cxx:5393
 TMrbDGF.cxx:5394
 TMrbDGF.cxx:5395
 TMrbDGF.cxx:5396
 TMrbDGF.cxx:5397
 TMrbDGF.cxx:5398
 TMrbDGF.cxx:5399
 TMrbDGF.cxx:5400
 TMrbDGF.cxx:5401
 TMrbDGF.cxx:5402
 TMrbDGF.cxx:5403
 TMrbDGF.cxx:5404
 TMrbDGF.cxx:5405
 TMrbDGF.cxx:5406
 TMrbDGF.cxx:5407
 TMrbDGF.cxx:5408
 TMrbDGF.cxx:5409
 TMrbDGF.cxx:5410
 TMrbDGF.cxx:5411
 TMrbDGF.cxx:5412
 TMrbDGF.cxx:5413
 TMrbDGF.cxx:5414
 TMrbDGF.cxx:5415
 TMrbDGF.cxx:5416
 TMrbDGF.cxx:5417
 TMrbDGF.cxx:5418
 TMrbDGF.cxx:5419
 TMrbDGF.cxx:5420
 TMrbDGF.cxx:5421
 TMrbDGF.cxx:5422
 TMrbDGF.cxx:5423
 TMrbDGF.cxx:5424
 TMrbDGF.cxx:5425
 TMrbDGF.cxx:5426
 TMrbDGF.cxx:5427
 TMrbDGF.cxx:5428
 TMrbDGF.cxx:5429
 TMrbDGF.cxx:5430
 TMrbDGF.cxx:5431
 TMrbDGF.cxx:5432
 TMrbDGF.cxx:5433
 TMrbDGF.cxx:5434
 TMrbDGF.cxx:5435
 TMrbDGF.cxx:5436
 TMrbDGF.cxx:5437
 TMrbDGF.cxx:5438
 TMrbDGF.cxx:5439
 TMrbDGF.cxx:5440
 TMrbDGF.cxx:5441
 TMrbDGF.cxx:5442
 TMrbDGF.cxx:5443
 TMrbDGF.cxx:5444
 TMrbDGF.cxx:5445
 TMrbDGF.cxx:5446
 TMrbDGF.cxx:5447
 TMrbDGF.cxx:5448
 TMrbDGF.cxx:5449
 TMrbDGF.cxx:5450
 TMrbDGF.cxx:5451
 TMrbDGF.cxx:5452
 TMrbDGF.cxx:5453
 TMrbDGF.cxx:5454
 TMrbDGF.cxx:5455
 TMrbDGF.cxx:5456
 TMrbDGF.cxx:5457
 TMrbDGF.cxx:5458
 TMrbDGF.cxx:5459
 TMrbDGF.cxx:5460
 TMrbDGF.cxx:5461
 TMrbDGF.cxx:5462
 TMrbDGF.cxx:5463
 TMrbDGF.cxx:5464
 TMrbDGF.cxx:5465
 TMrbDGF.cxx:5466
 TMrbDGF.cxx:5467
 TMrbDGF.cxx:5468
 TMrbDGF.cxx:5469
 TMrbDGF.cxx:5470
 TMrbDGF.cxx:5471
 TMrbDGF.cxx:5472
 TMrbDGF.cxx:5473
 TMrbDGF.cxx:5474
 TMrbDGF.cxx:5475
 TMrbDGF.cxx:5476
 TMrbDGF.cxx:5477
 TMrbDGF.cxx:5478
 TMrbDGF.cxx:5479
 TMrbDGF.cxx:5480
 TMrbDGF.cxx:5481
 TMrbDGF.cxx:5482
 TMrbDGF.cxx:5483
 TMrbDGF.cxx:5484
 TMrbDGF.cxx:5485
 TMrbDGF.cxx:5486
 TMrbDGF.cxx:5487
 TMrbDGF.cxx:5488
 TMrbDGF.cxx:5489
 TMrbDGF.cxx:5490
 TMrbDGF.cxx:5491
 TMrbDGF.cxx:5492
 TMrbDGF.cxx:5493
 TMrbDGF.cxx:5494
 TMrbDGF.cxx:5495
 TMrbDGF.cxx:5496
 TMrbDGF.cxx:5497
 TMrbDGF.cxx:5498
 TMrbDGF.cxx:5499
 TMrbDGF.cxx:5500
 TMrbDGF.cxx:5501
 TMrbDGF.cxx:5502
 TMrbDGF.cxx:5503
 TMrbDGF.cxx:5504
 TMrbDGF.cxx:5505
 TMrbDGF.cxx:5506
 TMrbDGF.cxx:5507
 TMrbDGF.cxx:5508
 TMrbDGF.cxx:5509
 TMrbDGF.cxx:5510
 TMrbDGF.cxx:5511
 TMrbDGF.cxx:5512
 TMrbDGF.cxx:5513
 TMrbDGF.cxx:5514
 TMrbDGF.cxx:5515
 TMrbDGF.cxx:5516
 TMrbDGF.cxx:5517
 TMrbDGF.cxx:5518
 TMrbDGF.cxx:5519
 TMrbDGF.cxx:5520
 TMrbDGF.cxx:5521
 TMrbDGF.cxx:5522
 TMrbDGF.cxx:5523
 TMrbDGF.cxx:5524
 TMrbDGF.cxx:5525
 TMrbDGF.cxx:5526
 TMrbDGF.cxx:5527
 TMrbDGF.cxx:5528
 TMrbDGF.cxx:5529
 TMrbDGF.cxx:5530
 TMrbDGF.cxx:5531
 TMrbDGF.cxx:5532
 TMrbDGF.cxx:5533
 TMrbDGF.cxx:5534
 TMrbDGF.cxx:5535
 TMrbDGF.cxx:5536
 TMrbDGF.cxx:5537
 TMrbDGF.cxx:5538
 TMrbDGF.cxx:5539
 TMrbDGF.cxx:5540
 TMrbDGF.cxx:5541
 TMrbDGF.cxx:5542
 TMrbDGF.cxx:5543
 TMrbDGF.cxx:5544
 TMrbDGF.cxx:5545
 TMrbDGF.cxx:5546
 TMrbDGF.cxx:5547
 TMrbDGF.cxx:5548
 TMrbDGF.cxx:5549
 TMrbDGF.cxx:5550
 TMrbDGF.cxx:5551
 TMrbDGF.cxx:5552
 TMrbDGF.cxx:5553
 TMrbDGF.cxx:5554
 TMrbDGF.cxx:5555
 TMrbDGF.cxx:5556
 TMrbDGF.cxx:5557
 TMrbDGF.cxx:5558
 TMrbDGF.cxx:5559
 TMrbDGF.cxx:5560
 TMrbDGF.cxx:5561
 TMrbDGF.cxx:5562
 TMrbDGF.cxx:5563
 TMrbDGF.cxx:5564
 TMrbDGF.cxx:5565
 TMrbDGF.cxx:5566
 TMrbDGF.cxx:5567
 TMrbDGF.cxx:5568
 TMrbDGF.cxx:5569
 TMrbDGF.cxx:5570
 TMrbDGF.cxx:5571
 TMrbDGF.cxx:5572
 TMrbDGF.cxx:5573
 TMrbDGF.cxx:5574
 TMrbDGF.cxx:5575
 TMrbDGF.cxx:5576
 TMrbDGF.cxx:5577
 TMrbDGF.cxx:5578
 TMrbDGF.cxx:5579
 TMrbDGF.cxx:5580
 TMrbDGF.cxx:5581
 TMrbDGF.cxx:5582
 TMrbDGF.cxx:5583
 TMrbDGF.cxx:5584
 TMrbDGF.cxx:5585
 TMrbDGF.cxx:5586
 TMrbDGF.cxx:5587
 TMrbDGF.cxx:5588
 TMrbDGF.cxx:5589
 TMrbDGF.cxx:5590
 TMrbDGF.cxx:5591
 TMrbDGF.cxx:5592
 TMrbDGF.cxx:5593
 TMrbDGF.cxx:5594
 TMrbDGF.cxx:5595
 TMrbDGF.cxx:5596
 TMrbDGF.cxx:5597
 TMrbDGF.cxx:5598
 TMrbDGF.cxx:5599
 TMrbDGF.cxx:5600
 TMrbDGF.cxx:5601
 TMrbDGF.cxx:5602
 TMrbDGF.cxx:5603
 TMrbDGF.cxx:5604
 TMrbDGF.cxx:5605
 TMrbDGF.cxx:5606
 TMrbDGF.cxx:5607
 TMrbDGF.cxx:5608
 TMrbDGF.cxx:5609
 TMrbDGF.cxx:5610
 TMrbDGF.cxx:5611
 TMrbDGF.cxx:5612
 TMrbDGF.cxx:5613
 TMrbDGF.cxx:5614
 TMrbDGF.cxx:5615
 TMrbDGF.cxx:5616
 TMrbDGF.cxx:5617
 TMrbDGF.cxx:5618
 TMrbDGF.cxx:5619
 TMrbDGF.cxx:5620
 TMrbDGF.cxx:5621
 TMrbDGF.cxx:5622
 TMrbDGF.cxx:5623
 TMrbDGF.cxx:5624
 TMrbDGF.cxx:5625
 TMrbDGF.cxx:5626
 TMrbDGF.cxx:5627
 TMrbDGF.cxx:5628
 TMrbDGF.cxx:5629
 TMrbDGF.cxx:5630
 TMrbDGF.cxx:5631
 TMrbDGF.cxx:5632
 TMrbDGF.cxx:5633
 TMrbDGF.cxx:5634
 TMrbDGF.cxx:5635
 TMrbDGF.cxx:5636
 TMrbDGF.cxx:5637
 TMrbDGF.cxx:5638
 TMrbDGF.cxx:5639
 TMrbDGF.cxx:5640
 TMrbDGF.cxx:5641
 TMrbDGF.cxx:5642
 TMrbDGF.cxx:5643
 TMrbDGF.cxx:5644
 TMrbDGF.cxx:5645
 TMrbDGF.cxx:5646
 TMrbDGF.cxx:5647
 TMrbDGF.cxx:5648
 TMrbDGF.cxx:5649
 TMrbDGF.cxx:5650
 TMrbDGF.cxx:5651
 TMrbDGF.cxx:5652
 TMrbDGF.cxx:5653
 TMrbDGF.cxx:5654
 TMrbDGF.cxx:5655
 TMrbDGF.cxx:5656
 TMrbDGF.cxx:5657
 TMrbDGF.cxx:5658
 TMrbDGF.cxx:5659
 TMrbDGF.cxx:5660
 TMrbDGF.cxx:5661
 TMrbDGF.cxx:5662
 TMrbDGF.cxx:5663
 TMrbDGF.cxx:5664
 TMrbDGF.cxx:5665
 TMrbDGF.cxx:5666
 TMrbDGF.cxx:5667
 TMrbDGF.cxx:5668
 TMrbDGF.cxx:5669
 TMrbDGF.cxx:5670
 TMrbDGF.cxx:5671
 TMrbDGF.cxx:5672
 TMrbDGF.cxx:5673
 TMrbDGF.cxx:5674
 TMrbDGF.cxx:5675
 TMrbDGF.cxx:5676
 TMrbDGF.cxx:5677
 TMrbDGF.cxx:5678
 TMrbDGF.cxx:5679
 TMrbDGF.cxx:5680
 TMrbDGF.cxx:5681
 TMrbDGF.cxx:5682
 TMrbDGF.cxx:5683
 TMrbDGF.cxx:5684
 TMrbDGF.cxx:5685
 TMrbDGF.cxx:5686
 TMrbDGF.cxx:5687
 TMrbDGF.cxx:5688
 TMrbDGF.cxx:5689
 TMrbDGF.cxx:5690
 TMrbDGF.cxx:5691
 TMrbDGF.cxx:5692
 TMrbDGF.cxx:5693
 TMrbDGF.cxx:5694
 TMrbDGF.cxx:5695
 TMrbDGF.cxx:5696
 TMrbDGF.cxx:5697
 TMrbDGF.cxx:5698
 TMrbDGF.cxx:5699
 TMrbDGF.cxx:5700
 TMrbDGF.cxx:5701
 TMrbDGF.cxx:5702
 TMrbDGF.cxx:5703
 TMrbDGF.cxx:5704
 TMrbDGF.cxx:5705
 TMrbDGF.cxx:5706
 TMrbDGF.cxx:5707
 TMrbDGF.cxx:5708
 TMrbDGF.cxx:5709
 TMrbDGF.cxx:5710
 TMrbDGF.cxx:5711
 TMrbDGF.cxx:5712
 TMrbDGF.cxx:5713
 TMrbDGF.cxx:5714
 TMrbDGF.cxx:5715
 TMrbDGF.cxx:5716
 TMrbDGF.cxx:5717
 TMrbDGF.cxx:5718
 TMrbDGF.cxx:5719
 TMrbDGF.cxx:5720
 TMrbDGF.cxx:5721
 TMrbDGF.cxx:5722
 TMrbDGF.cxx:5723
 TMrbDGF.cxx:5724
 TMrbDGF.cxx:5725
 TMrbDGF.cxx:5726
 TMrbDGF.cxx:5727
 TMrbDGF.cxx:5728
 TMrbDGF.cxx:5729
 TMrbDGF.cxx:5730
 TMrbDGF.cxx:5731
 TMrbDGF.cxx:5732
 TMrbDGF.cxx:5733
 TMrbDGF.cxx:5734
 TMrbDGF.cxx:5735
 TMrbDGF.cxx:5736
 TMrbDGF.cxx:5737
 TMrbDGF.cxx:5738
 TMrbDGF.cxx:5739
 TMrbDGF.cxx:5740
 TMrbDGF.cxx:5741
 TMrbDGF.cxx:5742
 TMrbDGF.cxx:5743
 TMrbDGF.cxx:5744
 TMrbDGF.cxx:5745
 TMrbDGF.cxx:5746
 TMrbDGF.cxx:5747
 TMrbDGF.cxx:5748
 TMrbDGF.cxx:5749
 TMrbDGF.cxx:5750
 TMrbDGF.cxx:5751
 TMrbDGF.cxx:5752
 TMrbDGF.cxx:5753
 TMrbDGF.cxx:5754
 TMrbDGF.cxx:5755
 TMrbDGF.cxx:5756
 TMrbDGF.cxx:5757
 TMrbDGF.cxx:5758
 TMrbDGF.cxx:5759
 TMrbDGF.cxx:5760
 TMrbDGF.cxx:5761
 TMrbDGF.cxx:5762
 TMrbDGF.cxx:5763
 TMrbDGF.cxx:5764
 TMrbDGF.cxx:5765
 TMrbDGF.cxx:5766
 TMrbDGF.cxx:5767
 TMrbDGF.cxx:5768
 TMrbDGF.cxx:5769
 TMrbDGF.cxx:5770
 TMrbDGF.cxx:5771
 TMrbDGF.cxx:5772
 TMrbDGF.cxx:5773
 TMrbDGF.cxx:5774
 TMrbDGF.cxx:5775
 TMrbDGF.cxx:5776
 TMrbDGF.cxx:5777
 TMrbDGF.cxx:5778
 TMrbDGF.cxx:5779
 TMrbDGF.cxx:5780
 TMrbDGF.cxx:5781
 TMrbDGF.cxx:5782
 TMrbDGF.cxx:5783
 TMrbDGF.cxx:5784
 TMrbDGF.cxx:5785
 TMrbDGF.cxx:5786
 TMrbDGF.cxx:5787
 TMrbDGF.cxx:5788
 TMrbDGF.cxx:5789
 TMrbDGF.cxx:5790
 TMrbDGF.cxx:5791
 TMrbDGF.cxx:5792
 TMrbDGF.cxx:5793
 TMrbDGF.cxx:5794
 TMrbDGF.cxx:5795
 TMrbDGF.cxx:5796
 TMrbDGF.cxx:5797
 TMrbDGF.cxx:5798
 TMrbDGF.cxx:5799
 TMrbDGF.cxx:5800
 TMrbDGF.cxx:5801
 TMrbDGF.cxx:5802
 TMrbDGF.cxx:5803
 TMrbDGF.cxx:5804
 TMrbDGF.cxx:5805
 TMrbDGF.cxx:5806
 TMrbDGF.cxx:5807
 TMrbDGF.cxx:5808
 TMrbDGF.cxx:5809
 TMrbDGF.cxx:5810
 TMrbDGF.cxx:5811
 TMrbDGF.cxx:5812
 TMrbDGF.cxx:5813
 TMrbDGF.cxx:5814
 TMrbDGF.cxx:5815
 TMrbDGF.cxx:5816
 TMrbDGF.cxx:5817
 TMrbDGF.cxx:5818
 TMrbDGF.cxx:5819
 TMrbDGF.cxx:5820
 TMrbDGF.cxx:5821
 TMrbDGF.cxx:5822
 TMrbDGF.cxx:5823
 TMrbDGF.cxx:5824
 TMrbDGF.cxx:5825
 TMrbDGF.cxx:5826
 TMrbDGF.cxx:5827
 TMrbDGF.cxx:5828
 TMrbDGF.cxx:5829
 TMrbDGF.cxx:5830
 TMrbDGF.cxx:5831
 TMrbDGF.cxx:5832
 TMrbDGF.cxx:5833
 TMrbDGF.cxx:5834
 TMrbDGF.cxx:5835
 TMrbDGF.cxx:5836
 TMrbDGF.cxx:5837
 TMrbDGF.cxx:5838
 TMrbDGF.cxx:5839
 TMrbDGF.cxx:5840
 TMrbDGF.cxx:5841
 TMrbDGF.cxx:5842
 TMrbDGF.cxx:5843
 TMrbDGF.cxx:5844
 TMrbDGF.cxx:5845
 TMrbDGF.cxx:5846
 TMrbDGF.cxx:5847
 TMrbDGF.cxx:5848
 TMrbDGF.cxx:5849
 TMrbDGF.cxx:5850
 TMrbDGF.cxx:5851
 TMrbDGF.cxx:5852
 TMrbDGF.cxx:5853
 TMrbDGF.cxx:5854
 TMrbDGF.cxx:5855
 TMrbDGF.cxx:5856
 TMrbDGF.cxx:5857
 TMrbDGF.cxx:5858
 TMrbDGF.cxx:5859
 TMrbDGF.cxx:5860
 TMrbDGF.cxx:5861
 TMrbDGF.cxx:5862
 TMrbDGF.cxx:5863
 TMrbDGF.cxx:5864
 TMrbDGF.cxx:5865
 TMrbDGF.cxx:5866
 TMrbDGF.cxx:5867
 TMrbDGF.cxx:5868
 TMrbDGF.cxx:5869
 TMrbDGF.cxx:5870
 TMrbDGF.cxx:5871
 TMrbDGF.cxx:5872
 TMrbDGF.cxx:5873
 TMrbDGF.cxx:5874
 TMrbDGF.cxx:5875
 TMrbDGF.cxx:5876
 TMrbDGF.cxx:5877
 TMrbDGF.cxx:5878
 TMrbDGF.cxx:5879
 TMrbDGF.cxx:5880
 TMrbDGF.cxx:5881
 TMrbDGF.cxx:5882
 TMrbDGF.cxx:5883
 TMrbDGF.cxx:5884
 TMrbDGF.cxx:5885
 TMrbDGF.cxx:5886
 TMrbDGF.cxx:5887
 TMrbDGF.cxx:5888
 TMrbDGF.cxx:5889
 TMrbDGF.cxx:5890
 TMrbDGF.cxx:5891
 TMrbDGF.cxx:5892
 TMrbDGF.cxx:5893
 TMrbDGF.cxx:5894
 TMrbDGF.cxx:5895
 TMrbDGF.cxx:5896
 TMrbDGF.cxx:5897
 TMrbDGF.cxx:5898
 TMrbDGF.cxx:5899
 TMrbDGF.cxx:5900
 TMrbDGF.cxx:5901
 TMrbDGF.cxx:5902
 TMrbDGF.cxx:5903
 TMrbDGF.cxx:5904
 TMrbDGF.cxx:5905
 TMrbDGF.cxx:5906
 TMrbDGF.cxx:5907
 TMrbDGF.cxx:5908
 TMrbDGF.cxx:5909
 TMrbDGF.cxx:5910
 TMrbDGF.cxx:5911
 TMrbDGF.cxx:5912
 TMrbDGF.cxx:5913
 TMrbDGF.cxx:5914
 TMrbDGF.cxx:5915
 TMrbDGF.cxx:5916
 TMrbDGF.cxx:5917
 TMrbDGF.cxx:5918
 TMrbDGF.cxx:5919
 TMrbDGF.cxx:5920
 TMrbDGF.cxx:5921
 TMrbDGF.cxx:5922
 TMrbDGF.cxx:5923
 TMrbDGF.cxx:5924
 TMrbDGF.cxx:5925
 TMrbDGF.cxx:5926
 TMrbDGF.cxx:5927
 TMrbDGF.cxx:5928
 TMrbDGF.cxx:5929
 TMrbDGF.cxx:5930
 TMrbDGF.cxx:5931
 TMrbDGF.cxx:5932
 TMrbDGF.cxx:5933
 TMrbDGF.cxx:5934
 TMrbDGF.cxx:5935
 TMrbDGF.cxx:5936
 TMrbDGF.cxx:5937
 TMrbDGF.cxx:5938
 TMrbDGF.cxx:5939
 TMrbDGF.cxx:5940
 TMrbDGF.cxx:5941
 TMrbDGF.cxx:5942
 TMrbDGF.cxx:5943
 TMrbDGF.cxx:5944
 TMrbDGF.cxx:5945
 TMrbDGF.cxx:5946
 TMrbDGF.cxx:5947
 TMrbDGF.cxx:5948
 TMrbDGF.cxx:5949
 TMrbDGF.cxx:5950
 TMrbDGF.cxx:5951
 TMrbDGF.cxx:5952
 TMrbDGF.cxx:5953
 TMrbDGF.cxx:5954
 TMrbDGF.cxx:5955
 TMrbDGF.cxx:5956
 TMrbDGF.cxx:5957
 TMrbDGF.cxx:5958
 TMrbDGF.cxx:5959
 TMrbDGF.cxx:5960
 TMrbDGF.cxx:5961
 TMrbDGF.cxx:5962
 TMrbDGF.cxx:5963
 TMrbDGF.cxx:5964
 TMrbDGF.cxx:5965
 TMrbDGF.cxx:5966
 TMrbDGF.cxx:5967
 TMrbDGF.cxx:5968
 TMrbDGF.cxx:5969
 TMrbDGF.cxx:5970
 TMrbDGF.cxx:5971
 TMrbDGF.cxx:5972
 TMrbDGF.cxx:5973
 TMrbDGF.cxx:5974
 TMrbDGF.cxx:5975
 TMrbDGF.cxx:5976
 TMrbDGF.cxx:5977
 TMrbDGF.cxx:5978
 TMrbDGF.cxx:5979
 TMrbDGF.cxx:5980
 TMrbDGF.cxx:5981
 TMrbDGF.cxx:5982
 TMrbDGF.cxx:5983
 TMrbDGF.cxx:5984
 TMrbDGF.cxx:5985
 TMrbDGF.cxx:5986
 TMrbDGF.cxx:5987
 TMrbDGF.cxx:5988
 TMrbDGF.cxx:5989
 TMrbDGF.cxx:5990
 TMrbDGF.cxx:5991
 TMrbDGF.cxx:5992
 TMrbDGF.cxx:5993
 TMrbDGF.cxx:5994
 TMrbDGF.cxx:5995
 TMrbDGF.cxx:5996
 TMrbDGF.cxx:5997
 TMrbDGF.cxx:5998
 TMrbDGF.cxx:5999
 TMrbDGF.cxx:6000
 TMrbDGF.cxx:6001
 TMrbDGF.cxx:6002
 TMrbDGF.cxx:6003
 TMrbDGF.cxx:6004
 TMrbDGF.cxx:6005
 TMrbDGF.cxx:6006
 TMrbDGF.cxx:6007
 TMrbDGF.cxx:6008
 TMrbDGF.cxx:6009
 TMrbDGF.cxx:6010
 TMrbDGF.cxx:6011
 TMrbDGF.cxx:6012
 TMrbDGF.cxx:6013
 TMrbDGF.cxx:6014
 TMrbDGF.cxx:6015
 TMrbDGF.cxx:6016
 TMrbDGF.cxx:6017
 TMrbDGF.cxx:6018
 TMrbDGF.cxx:6019
 TMrbDGF.cxx:6020
 TMrbDGF.cxx:6021
 TMrbDGF.cxx:6022
 TMrbDGF.cxx:6023
 TMrbDGF.cxx:6024
 TMrbDGF.cxx:6025
 TMrbDGF.cxx:6026
 TMrbDGF.cxx:6027
 TMrbDGF.cxx:6028
 TMrbDGF.cxx:6029
 TMrbDGF.cxx:6030
 TMrbDGF.cxx:6031
 TMrbDGF.cxx:6032
 TMrbDGF.cxx:6033
 TMrbDGF.cxx:6034
 TMrbDGF.cxx:6035
 TMrbDGF.cxx:6036
 TMrbDGF.cxx:6037
 TMrbDGF.cxx:6038
 TMrbDGF.cxx:6039
 TMrbDGF.cxx:6040
 TMrbDGF.cxx:6041
 TMrbDGF.cxx:6042
 TMrbDGF.cxx:6043
 TMrbDGF.cxx:6044
 TMrbDGF.cxx:6045
 TMrbDGF.cxx:6046
 TMrbDGF.cxx:6047
 TMrbDGF.cxx:6048
 TMrbDGF.cxx:6049
 TMrbDGF.cxx:6050
 TMrbDGF.cxx:6051
 TMrbDGF.cxx:6052
 TMrbDGF.cxx:6053
 TMrbDGF.cxx:6054
 TMrbDGF.cxx:6055
 TMrbDGF.cxx:6056
 TMrbDGF.cxx:6057
 TMrbDGF.cxx:6058
 TMrbDGF.cxx:6059
 TMrbDGF.cxx:6060
 TMrbDGF.cxx:6061
 TMrbDGF.cxx:6062
 TMrbDGF.cxx:6063
 TMrbDGF.cxx:6064
 TMrbDGF.cxx:6065
 TMrbDGF.cxx:6066
 TMrbDGF.cxx:6067
 TMrbDGF.cxx:6068
 TMrbDGF.cxx:6069
 TMrbDGF.cxx:6070
 TMrbDGF.cxx:6071
 TMrbDGF.cxx:6072
 TMrbDGF.cxx:6073
 TMrbDGF.cxx:6074
 TMrbDGF.cxx:6075
 TMrbDGF.cxx:6076
 TMrbDGF.cxx:6077
 TMrbDGF.cxx:6078
 TMrbDGF.cxx:6079
 TMrbDGF.cxx:6080
 TMrbDGF.cxx:6081
 TMrbDGF.cxx:6082
 TMrbDGF.cxx:6083
 TMrbDGF.cxx:6084
 TMrbDGF.cxx:6085
 TMrbDGF.cxx:6086
 TMrbDGF.cxx:6087
 TMrbDGF.cxx:6088
 TMrbDGF.cxx:6089
 TMrbDGF.cxx:6090
 TMrbDGF.cxx:6091
 TMrbDGF.cxx:6092
 TMrbDGF.cxx:6093
 TMrbDGF.cxx:6094
 TMrbDGF.cxx:6095
 TMrbDGF.cxx:6096
 TMrbDGF.cxx:6097
 TMrbDGF.cxx:6098
 TMrbDGF.cxx:6099
 TMrbDGF.cxx:6100
 TMrbDGF.cxx:6101
 TMrbDGF.cxx:6102
 TMrbDGF.cxx:6103
 TMrbDGF.cxx:6104
 TMrbDGF.cxx:6105
 TMrbDGF.cxx:6106
 TMrbDGF.cxx:6107
 TMrbDGF.cxx:6108
 TMrbDGF.cxx:6109
 TMrbDGF.cxx:6110
 TMrbDGF.cxx:6111
 TMrbDGF.cxx:6112
 TMrbDGF.cxx:6113
 TMrbDGF.cxx:6114
 TMrbDGF.cxx:6115
 TMrbDGF.cxx:6116
 TMrbDGF.cxx:6117
 TMrbDGF.cxx:6118
 TMrbDGF.cxx:6119
 TMrbDGF.cxx:6120
 TMrbDGF.cxx:6121
 TMrbDGF.cxx:6122
 TMrbDGF.cxx:6123
 TMrbDGF.cxx:6124
 TMrbDGF.cxx:6125
 TMrbDGF.cxx:6126
 TMrbDGF.cxx:6127
 TMrbDGF.cxx:6128
 TMrbDGF.cxx:6129
 TMrbDGF.cxx:6130
 TMrbDGF.cxx:6131
 TMrbDGF.cxx:6132
 TMrbDGF.cxx:6133
 TMrbDGF.cxx:6134
 TMrbDGF.cxx:6135
 TMrbDGF.cxx:6136
 TMrbDGF.cxx:6137
 TMrbDGF.cxx:6138
 TMrbDGF.cxx:6139
 TMrbDGF.cxx:6140
 TMrbDGF.cxx:6141
 TMrbDGF.cxx:6142
 TMrbDGF.cxx:6143
 TMrbDGF.cxx:6144
 TMrbDGF.cxx:6145
 TMrbDGF.cxx:6146
 TMrbDGF.cxx:6147
 TMrbDGF.cxx:6148
 TMrbDGF.cxx:6149
 TMrbDGF.cxx:6150
 TMrbDGF.cxx:6151
 TMrbDGF.cxx:6152
 TMrbDGF.cxx:6153
 TMrbDGF.cxx:6154
 TMrbDGF.cxx:6155
 TMrbDGF.cxx:6156
 TMrbDGF.cxx:6157
 TMrbDGF.cxx:6158
 TMrbDGF.cxx:6159
 TMrbDGF.cxx:6160
 TMrbDGF.cxx:6161
 TMrbDGF.cxx:6162
 TMrbDGF.cxx:6163
 TMrbDGF.cxx:6164
 TMrbDGF.cxx:6165
 TMrbDGF.cxx:6166
 TMrbDGF.cxx:6167
 TMrbDGF.cxx:6168
 TMrbDGF.cxx:6169
 TMrbDGF.cxx:6170
 TMrbDGF.cxx:6171
 TMrbDGF.cxx:6172
 TMrbDGF.cxx:6173
 TMrbDGF.cxx:6174
 TMrbDGF.cxx:6175
 TMrbDGF.cxx:6176
 TMrbDGF.cxx:6177
 TMrbDGF.cxx:6178
 TMrbDGF.cxx:6179
 TMrbDGF.cxx:6180
 TMrbDGF.cxx:6181
 TMrbDGF.cxx:6182
 TMrbDGF.cxx:6183
 TMrbDGF.cxx:6184
 TMrbDGF.cxx:6185
 TMrbDGF.cxx:6186
 TMrbDGF.cxx:6187
 TMrbDGF.cxx:6188
 TMrbDGF.cxx:6189
 TMrbDGF.cxx:6190
 TMrbDGF.cxx:6191
 TMrbDGF.cxx:6192
 TMrbDGF.cxx:6193
 TMrbDGF.cxx:6194
 TMrbDGF.cxx:6195
 TMrbDGF.cxx:6196
 TMrbDGF.cxx:6197
 TMrbDGF.cxx:6198
 TMrbDGF.cxx:6199
 TMrbDGF.cxx:6200
 TMrbDGF.cxx:6201
 TMrbDGF.cxx:6202
 TMrbDGF.cxx:6203
 TMrbDGF.cxx:6204
 TMrbDGF.cxx:6205
 TMrbDGF.cxx:6206
 TMrbDGF.cxx:6207
 TMrbDGF.cxx:6208
 TMrbDGF.cxx:6209
 TMrbDGF.cxx:6210
 TMrbDGF.cxx:6211
 TMrbDGF.cxx:6212
 TMrbDGF.cxx:6213
 TMrbDGF.cxx:6214
 TMrbDGF.cxx:6215
 TMrbDGF.cxx:6216
 TMrbDGF.cxx:6217
 TMrbDGF.cxx:6218
 TMrbDGF.cxx:6219
 TMrbDGF.cxx:6220
 TMrbDGF.cxx:6221
 TMrbDGF.cxx:6222
 TMrbDGF.cxx:6223
 TMrbDGF.cxx:6224
 TMrbDGF.cxx:6225
 TMrbDGF.cxx:6226
 TMrbDGF.cxx:6227
 TMrbDGF.cxx:6228
 TMrbDGF.cxx:6229
 TMrbDGF.cxx:6230
 TMrbDGF.cxx:6231
 TMrbDGF.cxx:6232
 TMrbDGF.cxx:6233
 TMrbDGF.cxx:6234
 TMrbDGF.cxx:6235
 TMrbDGF.cxx:6236
 TMrbDGF.cxx:6237
 TMrbDGF.cxx:6238
 TMrbDGF.cxx:6239
 TMrbDGF.cxx:6240
 TMrbDGF.cxx:6241
 TMrbDGF.cxx:6242
 TMrbDGF.cxx:6243
 TMrbDGF.cxx:6244
 TMrbDGF.cxx:6245
 TMrbDGF.cxx:6246
 TMrbDGF.cxx:6247
 TMrbDGF.cxx:6248
 TMrbDGF.cxx:6249
 TMrbDGF.cxx:6250
 TMrbDGF.cxx:6251
 TMrbDGF.cxx:6252
 TMrbDGF.cxx:6253
 TMrbDGF.cxx:6254
 TMrbDGF.cxx:6255
 TMrbDGF.cxx:6256
 TMrbDGF.cxx:6257
 TMrbDGF.cxx:6258
 TMrbDGF.cxx:6259
 TMrbDGF.cxx:6260
 TMrbDGF.cxx:6261
 TMrbDGF.cxx:6262
 TMrbDGF.cxx:6263
 TMrbDGF.cxx:6264
 TMrbDGF.cxx:6265
 TMrbDGF.cxx:6266
 TMrbDGF.cxx:6267
 TMrbDGF.cxx:6268
 TMrbDGF.cxx:6269
 TMrbDGF.cxx:6270
 TMrbDGF.cxx:6271
 TMrbDGF.cxx:6272
 TMrbDGF.cxx:6273
 TMrbDGF.cxx:6274
 TMrbDGF.cxx:6275
 TMrbDGF.cxx:6276
 TMrbDGF.cxx:6277
 TMrbDGF.cxx:6278
 TMrbDGF.cxx:6279
 TMrbDGF.cxx:6280
 TMrbDGF.cxx:6281
 TMrbDGF.cxx:6282
 TMrbDGF.cxx:6283
 TMrbDGF.cxx:6284
 TMrbDGF.cxx:6285
 TMrbDGF.cxx:6286
 TMrbDGF.cxx:6287
 TMrbDGF.cxx:6288
 TMrbDGF.cxx:6289
 TMrbDGF.cxx:6290
 TMrbDGF.cxx:6291
 TMrbDGF.cxx:6292
 TMrbDGF.cxx:6293
 TMrbDGF.cxx:6294
 TMrbDGF.cxx:6295
 TMrbDGF.cxx:6296
 TMrbDGF.cxx:6297
 TMrbDGF.cxx:6298
 TMrbDGF.cxx:6299
 TMrbDGF.cxx:6300
 TMrbDGF.cxx:6301
 TMrbDGF.cxx:6302
 TMrbDGF.cxx:6303
 TMrbDGF.cxx:6304
 TMrbDGF.cxx:6305
 TMrbDGF.cxx:6306
 TMrbDGF.cxx:6307
 TMrbDGF.cxx:6308
 TMrbDGF.cxx:6309
 TMrbDGF.cxx:6310
 TMrbDGF.cxx:6311
 TMrbDGF.cxx:6312
 TMrbDGF.cxx:6313
 TMrbDGF.cxx:6314
 TMrbDGF.cxx:6315
 TMrbDGF.cxx:6316
 TMrbDGF.cxx:6317
 TMrbDGF.cxx:6318
 TMrbDGF.cxx:6319
 TMrbDGF.cxx:6320
 TMrbDGF.cxx:6321
 TMrbDGF.cxx:6322
 TMrbDGF.cxx:6323
 TMrbDGF.cxx:6324
 TMrbDGF.cxx:6325
 TMrbDGF.cxx:6326
 TMrbDGF.cxx:6327
 TMrbDGF.cxx:6328
 TMrbDGF.cxx:6329
 TMrbDGF.cxx:6330
 TMrbDGF.cxx:6331
 TMrbDGF.cxx:6332
 TMrbDGF.cxx:6333
 TMrbDGF.cxx:6334
 TMrbDGF.cxx:6335
 TMrbDGF.cxx:6336
 TMrbDGF.cxx:6337
 TMrbDGF.cxx:6338
 TMrbDGF.cxx:6339
 TMrbDGF.cxx:6340
 TMrbDGF.cxx:6341
 TMrbDGF.cxx:6342
 TMrbDGF.cxx:6343
 TMrbDGF.cxx:6344
 TMrbDGF.cxx:6345
 TMrbDGF.cxx:6346
 TMrbDGF.cxx:6347
 TMrbDGF.cxx:6348
 TMrbDGF.cxx:6349
 TMrbDGF.cxx:6350
 TMrbDGF.cxx:6351
 TMrbDGF.cxx:6352
 TMrbDGF.cxx:6353
 TMrbDGF.cxx:6354
 TMrbDGF.cxx:6355
 TMrbDGF.cxx:6356
 TMrbDGF.cxx:6357
 TMrbDGF.cxx:6358
 TMrbDGF.cxx:6359
 TMrbDGF.cxx:6360
 TMrbDGF.cxx:6361
 TMrbDGF.cxx:6362
 TMrbDGF.cxx:6363
 TMrbDGF.cxx:6364
 TMrbDGF.cxx:6365
 TMrbDGF.cxx:6366
 TMrbDGF.cxx:6367
 TMrbDGF.cxx:6368
 TMrbDGF.cxx:6369
 TMrbDGF.cxx:6370
 TMrbDGF.cxx:6371
 TMrbDGF.cxx:6372
 TMrbDGF.cxx:6373
 TMrbDGF.cxx:6374
 TMrbDGF.cxx:6375
 TMrbDGF.cxx:6376
 TMrbDGF.cxx:6377
 TMrbDGF.cxx:6378
 TMrbDGF.cxx:6379
 TMrbDGF.cxx:6380
 TMrbDGF.cxx:6381
 TMrbDGF.cxx:6382
 TMrbDGF.cxx:6383
 TMrbDGF.cxx:6384
 TMrbDGF.cxx:6385
 TMrbDGF.cxx:6386
 TMrbDGF.cxx:6387
 TMrbDGF.cxx:6388
 TMrbDGF.cxx:6389
 TMrbDGF.cxx:6390
 TMrbDGF.cxx:6391
 TMrbDGF.cxx:6392
 TMrbDGF.cxx:6393
 TMrbDGF.cxx:6394
 TMrbDGF.cxx:6395
 TMrbDGF.cxx:6396
 TMrbDGF.cxx:6397
 TMrbDGF.cxx:6398
 TMrbDGF.cxx:6399
 TMrbDGF.cxx:6400
 TMrbDGF.cxx:6401
 TMrbDGF.cxx:6402
 TMrbDGF.cxx:6403
 TMrbDGF.cxx:6404
 TMrbDGF.cxx:6405
 TMrbDGF.cxx:6406
 TMrbDGF.cxx:6407
 TMrbDGF.cxx:6408
 TMrbDGF.cxx:6409
 TMrbDGF.cxx:6410
 TMrbDGF.cxx:6411
 TMrbDGF.cxx:6412
 TMrbDGF.cxx:6413
 TMrbDGF.cxx:6414
 TMrbDGF.cxx:6415
 TMrbDGF.cxx:6416
 TMrbDGF.cxx:6417
 TMrbDGF.cxx:6418
 TMrbDGF.cxx:6419
 TMrbDGF.cxx:6420
 TMrbDGF.cxx:6421
 TMrbDGF.cxx:6422
 TMrbDGF.cxx:6423
 TMrbDGF.cxx:6424
 TMrbDGF.cxx:6425
 TMrbDGF.cxx:6426
 TMrbDGF.cxx:6427
 TMrbDGF.cxx:6428
 TMrbDGF.cxx:6429
 TMrbDGF.cxx:6430
 TMrbDGF.cxx:6431
 TMrbDGF.cxx:6432
 TMrbDGF.cxx:6433
 TMrbDGF.cxx:6434
 TMrbDGF.cxx:6435
 TMrbDGF.cxx:6436
 TMrbDGF.cxx:6437
 TMrbDGF.cxx:6438
 TMrbDGF.cxx:6439
 TMrbDGF.cxx:6440
 TMrbDGF.cxx:6441
 TMrbDGF.cxx:6442
 TMrbDGF.cxx:6443
 TMrbDGF.cxx:6444
 TMrbDGF.cxx:6445
 TMrbDGF.cxx:6446
 TMrbDGF.cxx:6447
 TMrbDGF.cxx:6448
 TMrbDGF.cxx:6449
 TMrbDGF.cxx:6450
 TMrbDGF.cxx:6451
 TMrbDGF.cxx:6452
 TMrbDGF.cxx:6453
 TMrbDGF.cxx:6454
 TMrbDGF.cxx:6455
 TMrbDGF.cxx:6456
 TMrbDGF.cxx:6457
 TMrbDGF.cxx:6458
 TMrbDGF.cxx:6459
 TMrbDGF.cxx:6460
 TMrbDGF.cxx:6461
 TMrbDGF.cxx:6462
 TMrbDGF.cxx:6463
 TMrbDGF.cxx:6464
 TMrbDGF.cxx:6465
 TMrbDGF.cxx:6466
 TMrbDGF.cxx:6467
 TMrbDGF.cxx:6468
 TMrbDGF.cxx:6469
 TMrbDGF.cxx:6470
 TMrbDGF.cxx:6471
 TMrbDGF.cxx:6472
 TMrbDGF.cxx:6473
 TMrbDGF.cxx:6474
 TMrbDGF.cxx:6475