ROOT logo
//__________________________________________________[C++ CLASS IMPLEMENTATION]
//////////////////////////////////////////////////////////////////////////////
// Name:           xiadgf/src/TMrbDGFData.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: TMrbDGFData.cxx,v 1.15 2007-07-27 11:17:23 Rudolf.Lutter Exp $       
// Date:           
//////////////////////////////////////////////////////////////////////////////

namespace std {} using namespace std;

#include <cstdlib>
#include <iostream>
#include <sstream>
#include <iomanip>
#include <fstream>

#include "Rtypes.h"
#include "TEnv.h"
#include "TObjString.h"

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

#include "TMrbDGFData.h"
#include "TMrbDGF.h"
#include "TMrbDGFCommon.h"

#include "TMrbSystem.h"

#include "SetColor.h"

ClassImp(TMrbDGFData)

extern TMrbLogger * gMrbLog;

TMrbDGFData::TMrbDGFData() {
//__________________________________________________________________[C++ CTOR]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGFData
// Purpose:        Data base to hold DSP / FPGA data
// Description:    
// Keywords:       
//////////////////////////////////////////////////////////////////////////////

	if (gMrbLog == NULL) gMrbLog = new TMrbLogger();
	Setup();
	this->CheckXiaRelease();
	this->PrintXiaRelease();
}

void TMrbDGFData::Setup() {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGFData::Setup
// Purpose:        Setup data base
// Arguments:      --
// Results:        --
// Exceptions:
// Description:    Initializes DGF's data base.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	fLofDGFFileTypes.SetName("DGF File Types"); 		 			// initialize public lists
	fLofDGFFileTypes.AddNamedX(kMrbDGFFileTypes);

	fLofFPGATypes.SetName("FPGA Types");
	fLofFPGATypes.AddNamedX(kMrbFPGATypes);
	fLofFPGATypes.SetPatternMode();

	fLofDGFStatusDBits.SetName("Soft Status (Data)");
	fLofDGFStatusDBits.AddNamedX(kMrbDGFStatusDBits);
	fLofDGFStatusDBits.SetPatternMode();

	fLofCamacICSRBits.SetName("Camac Control & Status (System)");
	fLofCamacICSRBits.AddNamedX(kMrbCamacICSRBits);
	fLofCamacICSRBits.SetPatternMode();

	fLofCamacCSRBits.SetName("Camac Control & Status");
	fLofCamacCSRBits.AddNamedX(kMrbCamacCSRBits);
	fLofCamacCSRBits.SetPatternMode();

	fLofModCSRABits.SetName("Module Control & Status Reg A");
	fLofModCSRABits.AddNamedX(kMrbModCSRABits);
	fLofModCSRABits.SetPatternMode();

	fLofModCSRBBits.SetName("Module Control Reg B");
	fLofModCSRBBits.AddNamedX(kMrbModCSRBBits);
	fLofModCSRBBits.SetPatternMode();

	fLofChanCSRABits.SetName("Channel Control & Status Reg A");
	fLofChanCSRABits.AddNamedX(kMrbChanCSRABits);
	fLofChanCSRABits.SetPatternMode();

	fLofUserPsaCSRBits.SetName("UserPSA CSR Bits");
	fLofUserPsaCSRBits.AddNamedX(kMrbUserPsaCSRBits);

	fLofRunTasks.SetName("Run Tasks");
	fLofRunTasks.AddNamedX(kMrbRunTasks);

	fLofControlTasks.SetName("Control Tasks");
	fLofControlTasks.AddNamedX(kMrbControlTasks);

	fDSPType = kFileUndef; 				// no code loaded so far
	fDSPSize = -1;
	fDSPCode.Set(kDSPMaxSize);

	fSystemFPGAType = kFileUndef;
	fSystemFPGASize = -1;
	fSystemFPGACode.Set(kFPGAMaxSize);

	fFippiFPGAType[kRevD] = kFileUndef;
	fFippiFPGASize[kRevD] = -1;
	fFippiFPGACode[kRevD].Set(kFPGAMaxSize);

	fFippiFPGAType[kRevE] = kFileUndef;
	fFippiFPGASize[kRevE] = -1;
	fFippiFPGACode[kRevE].Set(kFPGAMaxSize);

	this->Reset();
}

void TMrbDGFData::Reset() {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGFData::Reset
// Purpose:        Reset to initial values
// Arguments:      --
// Results:        --
// Exceptions:
// Description:    Initializes DGF's data base.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	fNofParams = 0; 				// clear param names
	fParamNames.Delete();
	fStatusD = 0;					// clear status
}

Int_t TMrbDGFData::ReadFPGACode(EMrbFPGAType FPGAType, const Char_t * CodeFile, Int_t Rev, Bool_t Forced) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGFData::ReadFPGACode
// Purpose:        Read FPGA code
// Arguments:      EMrbFPGAType FPGAType -- fpga type (system or fippi)
//                 Char_t * CodeFile     -- file name
//                 Int_t Rev             -- module revision
//                 Bool_t Forced         -- read even if code already loaded
// Results:        Int_t NofWords        -- number of words read
// Exceptions:
// Description:    Reads FPGA code. Data format depends on file extension:
//                       .fip  -- ascii
//                       .bin  -- binary
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	TString sysfip;
	TString resource;

	TString ext;
	TMrbSystem ux;

	if (this->FPGACodeRead(FPGAType, Rev) && !Forced) return(fSystemFPGASize);

	if (FPGAType == kSystemFPGA) {
		sysfip = "System";
		resource = "TMrbDGF.SystemFPGACode";
	} else {
		sysfip = "Fippi";
		resource = "TMrbDGF.FippiFPGACode";
	}

	if (*CodeFile == '\0') CodeFile = gEnv->GetValue(resource.Data(), "");
	if (*CodeFile == '\0') {
		gMrbLog->Err() << "[" << sysfip << "FPGA] File name missing" << endl;
		gMrbLog->Flush(this->ClassName(), "ReadFPGACode");
		return(-1);
	}

	ux.GetExtension(ext, CodeFile);
	if (ext.CompareTo(".fip") == 0) 		return(this->ReadFPGACodeAscii(FPGAType, CodeFile, Rev, Forced));
	else if (ext.CompareTo(".bin") == 0)	return(this->ReadFPGACodeBinary(FPGAType, CodeFile, Rev, Forced));
	else {
		gMrbLog->Err() << "[" << sysfip << "FPGA] Unknown file extension - " << CodeFile << endl;
		gMrbLog->Flush(this->ClassName(), "ReadFPGACode");
		return(-1);
	}
}

Int_t TMrbDGFData::ReadFPGACode(const Char_t * FPGAType, const Char_t * CodeFile, Int_t Rev, Bool_t Forced) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGFData::ReadFPGACode
// Purpose:        Read FPGA code
// Arguments:      Char_t * FPGAType     -- fpga type (system or fippi)
//                 Char_t * CodeFile     -- file name
//                 Int_t Rev             -- module revision
//                 Bool_t Forced         -- read even if code already loaded
// Results:        Int_t NofWords        -- number of words read
// Exceptions:
// Description:    Reads FPGA code. Data format depends on file extension
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	TMrbNamedX * sysfip;

	sysfip = fLofFPGATypes.FindByName(FPGAType, TMrbLofNamedX::kFindUnique | TMrbLofNamedX::kFindIgnoreCase);
	if (sysfip == NULL) {
		gMrbLog->Err() << "Illegal FPGA type - " << FPGAType << endl;
		gMrbLog->Flush(this->ClassName(), "ReadFPGACode");
		return(-1);
	}
	return(this->ReadFPGACode((EMrbFPGAType) sysfip->GetIndex(), CodeFile, Rev, Forced));
}

Int_t TMrbDGFData::ReadFPGACodeBinary(EMrbFPGAType FPGAType, const Char_t * CodeFile, Int_t Rev, Bool_t Forced) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGFData::ReadFPGACodeBinary
// Purpose:        Read FPGA code from binary file
// Arguments:      EMrbFPGAType FPGAType -- fpga type (system or fippi)
//                 Char_t * CodeFile     -- file name
//                 Int_t Rev             -- module revision
//                 Bool_t Forced         -- read even if code already loaded
// Results:        Int_t NofWords        -- number of words read
// Exceptions:
// Description:    Reads FPGA code.
//                   Input:    byte-oriented binary
//                   Output:   UShort_t, MSB = 0
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	Char_t byte;
	ifstream fpga;
	Int_t size;
	TString dataPath;
	TString codeFile;

	TString sysfip;
	TString resource;

	UShort_t * dp;

	if (this->FPGACodeRead(FPGAType, Rev) && !Forced) return(fSystemFPGASize);

	if (FPGAType == kSystemFPGA) {
		sysfip = "System";
		resource = "TMrbDGF.SystemFPGACodeBinary";
	} else {
		sysfip = "Fippi";
		resource = "TMrbDGF.FippiFPGACodeBinary";
	}

	dataPath = gEnv->GetValue("TMrbDGF.LoadPath", ".:$(MARABOU)/data/xiadgf/v2.70");
	gSystem->ExpandPathName(dataPath);

	if (*CodeFile == '\0') CodeFile = gEnv->GetValue(resource.Data(), "");
	if (*CodeFile == '\0') {
		gMrbLog->Err() << "[" << sysfip << "FPGA] File name missing" << endl;
		gMrbLog->Flush(this->ClassName(), "ReadFPGACodeBinary");
		return(-1);
	}

	codeFile = CodeFile;
	if (!codeFile.BeginsWith("../") && !codeFile.BeginsWith("/")) {
		TString fileSpec;
		TMrbSystem ux;
		ux.Which(fileSpec, dataPath.Data(), CodeFile);
		if (fileSpec.IsNull()) {
			gMrbLog->Err() << "[" << sysfip << "FPGA] No such file - " << CodeFile << endl;
			gMrbLog->Err() << "(Searched on path " << dataPath << ")" << endl;
			gMrbLog->Flush(this->ClassName(), "ReadFPGACodeBinary");
			return(-1);
		}
		codeFile = fileSpec;
	}
 
	fpga.open(codeFile, ios::binary | ios::in);
	if (!fpga.good()) {
		gMrbLog->Err() << "[" << sysfip << "FPGA] " << gSystem->GetError() << " - " << codeFile << endl;
		gMrbLog->Flush(this->ClassName(), "ReadFPGACodeBinary");
		return(-1);
	}
	if (FPGAType == kSystemFPGA) {
		fSystemFPGAFile = codeFile;
		fSystemFPGAType = kFileBinary;
		size = 0;
		dp = (UShort_t *) fSystemFPGACode.GetArray();
		for (;;) {
			fpga.get(byte);
			if (fpga.eof()) break;
			*dp = (UShort_t) byte;
			dp++;
			size++;
		}
		fSystemFPGASize = size;
		fStatusD |= kSystemFPGACodeRead;
	} else {
		fFippiFPGAFile[Rev] = codeFile;
		fFippiFPGAType[Rev] = kFileBinary;
		size = 0;
		dp = (UShort_t *) fFippiFPGACode[Rev].GetArray();
		for (;;) {
			fpga.get(byte);
			if (fpga.eof()) break;
			*dp = (UShort_t) byte;
			dp++;
			size++;
		}
		fFippiFPGASize[Rev] = size;
		if (Rev == kRevE)	fStatusD |= kFippiFPGARevECodeRead;
		else							fStatusD |= kFippiFPGARevDCodeRead;
	}
	fpga.close();

	if (fVerboseMode) {
		gMrbLog->Out() << "[" << sysfip << "FPGA] " << size << " bytes read from " << codeFile << endl;
		gMrbLog->Flush(this->ClassName(), "ReadFPGACodeBinary", setblue);
	}

	return(size);
}

Int_t TMrbDGFData::ReadFPGACodeBinary(const Char_t * FPGAType, const Char_t * CodeFile, Int_t Rev, Bool_t Forced) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGFData::ReadFPGACodeBinary
// Purpose:        Read FPGA code from binary file
// Arguments:      Char_t * FPGAType     -- fpga type (system or fippi)
//                 Char_t * CodeFile     -- file name
//                 Int_t Rev             -- module revision
//                 Bool_t Forced         -- read even if code already loaded
// Results:        Int_t NofWords        -- number of words read
// Exceptions:
// Description:    Reads FPGA code.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	TMrbNamedX * sysfip;

	sysfip = fLofFPGATypes.FindByName(FPGAType, TMrbLofNamedX::kFindUnique | TMrbLofNamedX::kFindIgnoreCase);
	if (sysfip == NULL) {
		gMrbLog->Err() << "Illegal FPGA type - " << FPGAType << endl;
		gMrbLog->Flush(this->ClassName(), "ReadFPGACodeBinary");
		return(-1);
	}
	return(this->ReadFPGACodeBinary((EMrbFPGAType) sysfip->GetIndex(), CodeFile, Rev, Forced));
}

Int_t TMrbDGFData::ReadFPGACodeAscii(EMrbFPGAType FPGAType, const Char_t * CodeFile, Int_t Rev, Bool_t Forced) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGFData::ReadFPGACodeAscii
// Purpose:        Read FPGA code from ascii file
// Arguments:      EMrbFPGAType FPGAType -- fpga type (system or fippi)
//                 Char_t * CodeFile     -- file name
//                 Int_t Rev             -- module revision
//                 Bool_t Forced         -- read even if code already loaded
// Results:        Int_t NofWords        -- number of words read
// Exceptions:
// Description:    Reads FPGA code.
//                   Input:    hex code ascii
//                   Output:   UShort_t, MSB = 0
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	Int_t i;
	TString lineOfCode;
	ifstream fpga;
	Int_t size;
	Int_t lng;
	Int_t line;
	UInt_t data;
	UShort_t *dp;
	TString dataPath;
	TString codeFile;
	TString hexDigits;
	Bool_t hStart, hEnd;

	TString sysfip;
	TString resource;

	if (this->FPGACodeRead(FPGAType, Rev) && !Forced) return(fSystemFPGASize);

	if (FPGAType == kSystemFPGA) {
		sysfip = "System";
		resource = "TMrbDGF.SystemFPGACodeAscii";
	} else {
		sysfip = "Fippi";
		resource = "TMrbDGF.FippiFPGACodeAscii";
	}

	dataPath = gEnv->GetValue("TMrbDGF.LoadPath", ".:$(MARABOU)/data/xiadgf/v1.0");
	gSystem->ExpandPathName(dataPath);

	if (*CodeFile == '\0') CodeFile = gEnv->GetValue(resource.Data(), "");
	if (*CodeFile == '\0') {
		gMrbLog->Err() << "[" << sysfip << "FPGA] File name missing" << endl;
		gMrbLog->Flush(this->ClassName(), "ReadFPGACodeAscii");
		return(-1);
	}

	codeFile = CodeFile;
	if (!codeFile.BeginsWith("../") && !codeFile.BeginsWith("/")) {
		TString fileSpec;
		TMrbSystem ux;
		ux.Which(fileSpec, dataPath.Data(), CodeFile);
		if (fileSpec.IsNull()) {
			gMrbLog->Err() << "[" << sysfip << "FPGA] No such file - " << CodeFile << endl;
			gMrbLog->Err() << "(Searched on path " << dataPath << ")" << endl;
			gMrbLog->Flush(this->ClassName(), "ReadFPGACodeAscii");
			return(-1);
		}
		codeFile = fileSpec;
	}
  
	fpga.open(codeFile, ios::binary | ios::in);
	if (!fpga.good()) {
		gMrbLog->Err() << "[" << sysfip << "FPGA] " << gSystem->GetError() << " - " << codeFile << endl;
		gMrbLog->Flush(this->ClassName(), "ReadFPGACodeAscii");
		return(-1);
	}

	if (FPGAType == kSystemFPGA) {
		fSystemFPGAFile = codeFile;
		fSystemFPGAType = kFileAscii;
		dp = (UShort_t *) fSystemFPGACode.GetArray();
	} else {
		fFippiFPGAFile[Rev] = codeFile;
		fFippiFPGAType[Rev] = kFileAscii;
		dp = (UShort_t *) fFippiFPGACode[Rev].GetArray();
	}

	size = 0;
	line = 0;
	hStart = kFALSE;
	hEnd = kFALSE;
	for (;;) {
		lineOfCode.ReadLine(fpga, kFALSE);
		if (fpga.eof()) break;
		line++;
		lineOfCode = lineOfCode.Strip(TString::kTrailing, '\r');
		lineOfCode = lineOfCode.Strip(TString::kBoth);
		lng = lineOfCode.Length();
		if (lng == 0) continue;
		if (!hEnd) {
			if (lineOfCode(0) == '*') {
				if (fVerboseMode && !hStart) {
					cout	<< "===========================================================================================" << endl
							<< " Header of " << sysfip << "FPGA code file " << codeFile << endl
							<< "..........................................................................................." << endl;
				}
				hStart = kTRUE;
				if (fVerboseMode) cout << " " << lineOfCode << endl;
				continue;
			} else if (hStart) {
				if (fVerboseMode) cout	<< "-------------------------------------------------------------------------------------------" << endl;
				hEnd = kTRUE;
			}
		}
		if (lng % 2) {
			gMrbLog->Err() << "[" << sysfip << "FPGA] " << codeFile << " (line " << line << "): Odd byte count" << endl;
			gMrbLog->Flush(this->ClassName(), "ReadFPGACodeAscii");
			fpga.close();
			return(-1);
		}

		hexDigits = "0123456789ABCDEFabcdef";
		for (i = 0; i < lng; i++) {
			data = hexDigits.Index(lineOfCode(i));
			if (data == 0xffffffff) {
				gMrbLog->Err()	<< codeFile << " (line " << line << ", byte " << i
								<< "): Not a hex digit - " << lineOfCode(i) << endl;
				gMrbLog->Flush(this->ClassName(), "ReadFPGACodeAscii");
				fpga.close();
				return(-1);
			}
			if (i % 2) {
				*dp |= data;
				dp++;
				size++;
			} else {
				*dp = data << 4;
			}
		}
 	}
	fpga.close();

	if (FPGAType == kSystemFPGA) {
		fSystemFPGASize = size;
		fStatusD |= kSystemFPGACodeRead;
	} else {
		fFippiFPGASize[Rev] = size;
		if (Rev == kRevE)	fStatusD |= kFippiFPGARevECodeRead;
		else							fStatusD |= kFippiFPGARevDCodeRead;
	}

	if (fVerboseMode) {
		gMrbLog->Out() << "[" << sysfip << "FPGA] " << size << " bytes read from " << codeFile << endl;
		gMrbLog->Flush(this->ClassName(), "ReadFPGACodeAscii", setblue);
	}
	return(size);
}

Int_t TMrbDGFData::ReadFPGACodeAscii(const Char_t * FPGAType, const Char_t * CodeFile, Int_t Rev, Bool_t Forced) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGFData::ReadFPGACodeAscii
// Purpose:        Read FPGA code from ascii file
// Arguments:      Char_t * FPGAType     -- fpga type (system or fippi)
//                 Char_t * CodeFile     -- file name
//                 Int_t Rev             -- module revision
//                 Bool_t Forced         -- read even if code already loaded
// Results:        Int_t NofWords        -- number of words read
// Exceptions:
// Description:    Reads FPGA code.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	TMrbNamedX * sysfip;

	sysfip = fLofFPGATypes.FindByName(FPGAType, TMrbLofNamedX::kFindUnique | TMrbLofNamedX::kFindIgnoreCase);
	if (sysfip == NULL) {
		gMrbLog->Err() << "Illegal FPGA type - " << FPGAType << endl;
		gMrbLog->Flush(this->ClassName(), "ReadFPGACodeAscii");
		return(-1);
	}
	return(this->ReadFPGACodeAscii((EMrbFPGAType) sysfip->GetIndex(), CodeFile, Rev, Forced));
}

Int_t TMrbDGFData::ReadDSPCode(const Char_t * CodeFile, Bool_t Forced) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGFData::ReadDSPCode
// Purpose:        Read DSP code
// Arguments:      Char_t * CodeFile     -- file name
//                 Bool_t Forced         -- read even if code already loaded
// Results:        Int_t NofWords        -- number of words read
// Exceptions:
// Description:    Reads DSP code. Data format depends on file extension:
//                      .exe  -- ascii
//                      .bin  -- binary
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	TString ext;
	TMrbSystem ux;

	if (this->DSPCodeRead() && !Forced) return(fDSPSize);

	if (*CodeFile == '\0') CodeFile = gEnv->GetValue("TMrbDGF.DSPCode", "");
	if (*CodeFile == '\0') {
		gMrbLog->Err() << "File name missing" << endl;
		gMrbLog->Flush(this->ClassName(), "ReadDSPCode");
		return(-1);
	}

	ux.GetExtension(ext, CodeFile);
	if (ext.CompareTo(".exe") == 0) 		return(this->ReadDSPCodeAscii(CodeFile, Forced));
	else if (ext.CompareTo(".bin") == 0)	return(this->ReadDSPCodeBinary(CodeFile, Forced));
	else {
		gMrbLog->Err() << "Unknown file extension - " << CodeFile << endl;
		gMrbLog->Flush(this->ClassName(), "ReadDSPCode");
		return(-1);
	}
}

Int_t TMrbDGFData::ReadDSPCodeBinary(const Char_t * CodeFile, Bool_t Forced) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGFData::ReadDSPCodeBinary
// Purpose:        Read DSP code from binary file
// Arguments:      Char_t * CodeFile     -- file name
//                 Bool_t Forced         -- read even if code already loaded
// Results:        Int_t NofWords        -- number of words read
// Exceptions:
// Description:    Reads DSP code.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	Int_t i;
	ifstream dsp;
	Int_t size;
	TString dataPath;
	TString codeFile;
	Int_t byte0, byte1, byte2, byte3;
	
	if (this->DSPCodeRead() && !Forced) return(fDSPSize);

	dataPath = gEnv->GetValue("TMrbDGF.LoadPath", ".:$(MARABOU)/data/xiadgf/v1.0");
	gSystem->ExpandPathName(dataPath);

	if (*CodeFile == '\0') CodeFile = gEnv->GetValue("TMrbDGF.DSPCodeBinary", "");
	if (*CodeFile == '\0') {
		gMrbLog->Err() << "File name missing" << endl;
		gMrbLog->Flush(this->ClassName(), "ReadDSPCodeBinary");
		return(-1);
	}

	codeFile = CodeFile;
	if (!codeFile.BeginsWith("../") && !codeFile.BeginsWith("/")) {
		TString fileSpec;
		TMrbSystem ux;
		ux.Which(fileSpec, dataPath.Data(), CodeFile);
		if (fileSpec.IsNull()) {
			gMrbLog->Err()	<< "No such file - " << CodeFile << endl
							<< "(Searched on path " << dataPath << ")" << endl;
			gMrbLog->Flush(this->ClassName(), "ReadDSPCodeBinary");
			return(-1);
		}
		codeFile = fileSpec;
	}
 
	dsp.open(codeFile, ios::binary | ios::in);
	if (!dsp.good()) {
		gMrbLog->Err() << gSystem->GetError() << " - " << codeFile << endl;
		gMrbLog->Flush(this->ClassName(), "ReadDSPCodeBinary");
		return(-1);
	}
	fDSPFile = codeFile;
	fDSPType = kFileBinary;

	dsp.read((Char_t *) fDSPCode.GetArray(), kDSPMaxSize); 	// read the whole bunch of code
	size = dsp.gcount();													// get real byte count
	dsp.close();
	
	if (size % 4) {
		gMrbLog->Err() << codeFile << ": Odd file size - " << size << " bytes" << endl;
		gMrbLog->Flush(this->ClassName(), "ReadDSPCodeBinary");
		return(-1);
	}
	size /= 2;													// count in 16 bit words
	
	for (i = 0; i < size; i += 2) {
		byte0 = (fDSPCode[i] >> 8) & 0x00ff;
		byte1 = fDSPCode[i] & 0x00ff;
		byte2 = (fDSPCode[i + 1] >> 8) & 0x00ff;
		byte3 = fDSPCode[i + 1] & 0x00ff;
		if (byte2 != 0) {
			gMrbLog->Err() << "Data inconsistent - byte #2 != 0" << endl;
			gMrbLog->Flush(this->ClassName(), "ReadDSPCodeBinary");
			return(-1);
		}
		fDSPCode[i] = (byte3 << 8) + byte0;
		fDSPCode[i + 1] = byte1;
	}

	fDSPSize = size;
	fStatusD |= kDSPCodeRead;

	if (fVerboseMode) {
		gMrbLog->Out() << size << " words read from " << codeFile << endl;
		gMrbLog->Flush(this->ClassName(), "ReadDSPCodeBinary", setblue);
	}

	return(size);
}

Int_t TMrbDGFData::ReadDSPCodeAscii(const Char_t * CodeFile, Bool_t Forced) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGFData::ReadDSPCodeAscii
// Purpose:        Read DSP code from WaveMetrics ascii file
// Arguments:      Char_t * CodeFile     -- file name
//                 Bool_t Forced         -- read even if code already loaded
// Results:        Int_t NofWords        -- number of words read
// Exceptions:
// Description:    Reads DSP code.
//                 Format: WaveMetrics (ASCII)
//                 Code: 24 bits per line, 0xHHHHLL -> 0xHHHH 0x00LL
//                 Lines starting with '@' indicate address specifier in next line
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	Int_t i;
	Int_t data;
	ifstream dsp;
	TString dataPath;
	TString codeFile;
	TMrbString line;
	TString c;
	Bool_t addrFlag;
	Int_t addr;
	Int_t lCnt;
				
	TString hexDigits = "0123456789abcdefABCDEF";
	
	if (this->DSPCodeRead() && !Forced) return(fDSPSize);

	dataPath = gEnv->GetValue("TMrbDGF.LoadPath", ".:$(MARABOU)/data/xiadgf/v1.0");
	gSystem->ExpandPathName(dataPath);

	if (*CodeFile == '\0') CodeFile = gEnv->GetValue("TMrbDGF.DSPCodeAscii", "");
	if (*CodeFile == '\0') {
		gMrbLog->Err() << "File name missing" << endl;
		gMrbLog->Flush(this->ClassName(), "ReadDSPCodeAscii");
		return(-1);
	}

	codeFile = CodeFile;
	if (!codeFile.BeginsWith("../") && !codeFile.BeginsWith("/")) {
		TString fileSpec;
		TMrbSystem ux;
		ux.Which(fileSpec, dataPath.Data(), CodeFile);
		if (fileSpec.IsNull()) {
			gMrbLog->Err()	<< "No such file - " << CodeFile << endl
							<< "(Searched on path " << dataPath << ")" << endl;
			gMrbLog->Flush(this->ClassName(), "ReadDSPCodeAscii");
			return(-1);
		}
		codeFile = fileSpec;
	}
 
	dsp.open(codeFile, ios::in);
	if (!dsp.good()) {
		gMrbLog->Err() << gSystem->GetError() << " - " << codeFile << endl;
		gMrbLog->Flush(this->ClassName(), "ReadDSPCodeAscii");
		return(-1);
	}
	fDSPFile = codeFile;
	fDSPType = kFileAscii;

	fDSPCode.Set(kDSPMaxSize);
	fDSPCode.Reset();
		
	addrFlag = kFALSE;
	addr = 0;
	lCnt = 0;
	while(kTRUE) {
		line.ReadLine(dsp, kFALSE);
		if (dsp.eof()) {
			dsp.close();
			break;
		}
		lCnt++;
		line = line.Strip(TString::kBoth);
		c = line(line.Length() - 1);
		if (hexDigits.Index(c, 0) < 0) line = line(0, line.Length() - 1);
		if (line(0) == '@') {
			addrFlag = kTRUE;
		} else {
			c = line(0);
			if (hexDigits.Index(c, 0) >= 0) {
				if (!line.ToInteger(data, 16)) {
					gMrbLog->Err() << fDSPFile << " (line " << lCnt << ": Not a HEX number - " << line << endl;
					gMrbLog->Flush(this->ClassName(), "ReadDSPCodeAscii");
				}
				if (addrFlag) {
					addr = 2 * data;
				} else {
					fDSPCode[addr++] = (data >> 8) & 0xFFFF;		// 0xHHHHLL -> word #1: high order bits 0xHHHH
					fDSPCode[addr++] = data & 0xFF; 				// 0xHHHHLL -> word #2: low order bits 0x00LL
				}
			}
			addrFlag = kFALSE;
		}
	}

	fDSPSize = addr;
	fStatusD |= kDSPCodeRead;

	ofstream xxx;
	xxx.open("dsp.dat", ios::out);
	for (i = 0; i < addr; i++) xxx << setbase(16) << fDSPCode[i] << setbase(10) << endl;
	xxx.close();
	
	if (fVerboseMode) {
		gMrbLog->Out() << addr << " words read from " << codeFile << endl;
		gMrbLog->Flush(this->ClassName(), "ReadDSPCodeAscii", setblue);
	}

	return(addr);
}
	

Int_t TMrbDGFData::ReadNameTable(const Char_t * ParamFile, Bool_t Forced) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGFData::ReadNameTable
// Purpose:        Read param names from file
// Arguments:      Char_t * ParamFile    -- file name
//                 Bool_t Forced         -- read even if names already read
// Results:        Int_t NofParams       -- number of params read
// Exceptions:
// Description:    Reads param names and offsets from file.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	if (this->ParamNamesRead() && !Forced) return(fNofParams);

	if (*ParamFile == '\0') ParamFile = gEnv->GetValue("TMrbDGF.ParamNames", "");
	if (*ParamFile == '\0') {
		gMrbLog->Err() << "File name missing" << endl;
		gMrbLog->Flush(this->ClassName(), "ReadNameTable");
		return(-1);
	}

	fParamNames.Delete();		// clear name table
	fNofParams = 0;

	Int_t sts = this->AddToNameTable(ParamFile);
	if (sts > 0) fStatusD |= kParamNamesRead;
	return(sts);
}

Int_t TMrbDGFData::AddToNameTable(const Char_t * ParamFile, const Char_t * Comment) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGFData::AddToNameTable
// Purpose:        Add params from file to name table
// Arguments:      Char_t * ParamFile    -- file name
//                 Char_t * Comment      -- comment to be stored in param title
// Results:        Int_t NofParams       -- number of params read
// Exceptions:
// Description:    Reads params from file and adds to name table.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	TString dataPath = gEnv->GetValue("TMrbDGF.LoadPath", ".:$(MARABOU)/data/xiadgf/v2.70");
	gSystem->ExpandPathName(dataPath);

	TString paramFile = ParamFile;
	if (!paramFile.BeginsWith("../") && !paramFile.BeginsWith("/")) {
		TString fileSpec;
		TMrbSystem ux;
		ux.Which(fileSpec, dataPath.Data(), ParamFile);
		if (fileSpec.IsNull()) {
			gMrbLog->Err() << "No such file - " << ParamFile << ", searched on \"" << dataPath << "\"" << endl;
			gMrbLog->Flush(this->ClassName(), "AddToNameTable");
			return(-1);
		}
		paramFile = fileSpec;
	}

	ifstream param(paramFile, ios::in);
	if (!param.good()) {
		gMrbLog->Err() << gSystem->GetError() << " - " << paramFile << endl;
		gMrbLog->Flush(this->ClassName(), "AddToNameTable");
		return(-1);
	}
	fParamFile = paramFile;

	Int_t nofParams = 0;
	for (;;) {
		TMrbString pLine;
		pLine.ReadLine(param, kFALSE);
		if (param.eof()) break;
		pLine = pLine.Strip(TString::kBoth);
		pLine = pLine.Strip(TString::kBoth, '\r');
		if (pLine.Length() == 0 || pLine(0) == '#') continue;
		TObjArray * pl = pLine.Tokenize(" \t");
		Int_t n = pl->GetEntries();
		if (n == 2) {
			Int_t pOffset = atoi(((TObjString *) pl->At(0))->GetString().Data());
			TString pName = ((TObjString *) pl->At(1))->GetString().Data();
			pName.Strip(TString::kBoth);
			if (pName.Length() > 0) nofParams += this->AddToNameTable(pName.Data(), pOffset, Comment);
		}
		delete pl;
	}
	param.close();

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

	return(nofParams);
}

Int_t TMrbDGFData::AddToNameTable(const Char_t * ParamName, Int_t Offset, const Char_t * Comment) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGFData::AddToNameTable
// Purpose:        Add params from file to name table
// Arguments:      Char_t * ParamName    -- param name
//                 Int_t Offset          -- offset
//                 Char_t * Comment      -- comment to be stored in param title
// Results:        Int_t NofParams       -- 0 or 1
// Exceptions:
// Description:    Adds param to name table.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	if (Offset < 0) return(0);

	TString paramName = ParamName;
	paramName = paramName.Strip(TString::kBoth);
	paramName = paramName.Strip(TString::kBoth, '\r');
	if (paramName.IsNull()) return(0);

	TMrbNamedX * nx = fParamNames.FindByName(paramName.Data());
	Int_t nofParams = -1;
	if (nx != NULL) {
		Int_t pOffset = nx->GetIndex();
		if (pOffset < 0) pOffset = -pOffset;
		if (pOffset != Offset) {
			gMrbLog->Wrn()	<< "Param name already defined - " << paramName
							<< ", offset = " << nx->GetIndex() << " (previous), "
							<< Offset << " (now)" << endl;
			gMrbLog->Flush(this->ClassName(), "AddToNameTable");
			nx->Set(Offset, nx->GetName());
		}
		nofParams = 0;
	}
	if (nofParams != 0) {
		nx = fParamNames.FindByIndex(Offset);
		if (nx != NULL) {
			TString pn = nx->GetName();
			if (pn.CompareTo(paramName.Data()) != 0) {
				gMrbLog->Wrn()	<< "Param index already in use - " << Offset
								<< ", name = " << nx->GetName() << " (previous), "
								<< paramName << " (now)" << endl;
				gMrbLog->Flush(this->ClassName(), "AddToNameTable");
				nx->Set(-Offset, nx->GetName());
				nofParams = 1;
			} else {
				nofParams = 0;
			}
		}
	}
	if (nofParams != 0) {
		TString cmt = (Comment != NULL && *Comment != '\0') ? Comment : "";
		nx = new TMrbNamedX(Offset, paramName.Data(), cmt.Data(), nx);
		fParamNames.AddNamedX(nx);
		fNofParams++;
		nofParams = 1;
	}

	fParamNames.Sort(kFALSE);
	return(nofParams);
}

TMrbNamedX * TMrbDGFData::FindParam(Int_t Channel, const Char_t * ParamName) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGFData::FindParam
// Purpose:        Search a param for a given channel
// Arguments:      Int_t Channel         -- channel number
//                 Char_t * ParamName    -- param name
// Results:        TMrbNamedX * Param       -- param name & index
// Exceptions:
// Description:    Searches a param for a given channel.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	TMrbString paramName;

	paramName = ParamName;
	paramName += Channel;
	return(this->FindParam(paramName.Data()));
}

Bool_t TMrbDGFData::FPGACodeRead(EMrbFPGAType FPGAType, Int_t Rev) const {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::FGPACodeRead
// Purpose:        Test if FPGA code is read
// Arguments:      EMrbFPGAType FPGAType    -- fpga type (system or fippi)
//                 EMrbDGFRevision Rev      -- module revision (if fippi)
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    Tests if FPGA code has been read.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	UInt_t bit;
	if (FPGAType == kSystemFPGA) {
		bit = kSystemFPGACodeRead;
	} else if (Rev == kRevE) {
		bit = kFippiFPGARevECodeRead;
	} else {
		bit = kFippiFPGARevDCodeRead;
	}
	return((fStatusD & bit) != 0);
}

Bool_t TMrbDGFData::FPGACodeRead(const Char_t * FPGAType, Int_t Rev) const {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::FGPACodeRead
// Purpose:        Test if FPGA code is read
// Arguments:      Char_t * FPGAType    -- fpga type (system or fippi)
//                 Int_t Rev            -- module revision (if fippi)
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    Tests if FPGA code has been read.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	TMrbNamedX * sysfip;

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

void TMrbDGFData::Print() const {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGFData::Print
// Purpose:        Print status
// Arguments:      --
// Results:        --
// Exceptions:
// Description:    Outputs status info.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	cout	<< "===========================================================================================" << endl;
	cout	<< " DGF-4C";
	if (fLocalData) cout << " *LOCAL* "; else cout << " Common ";
	cout	<< "Data Section" << endl
			<< "..........................................................................................." << endl;
	if (this->FPGACodeRead(kSystemFPGA)) {
		cout	<< " Code for SystemFPGA read from file        : " << fSystemFPGAFile << endl;
		cout	<< " Size of FPGA code                         : " << fSystemFPGASize << " bytes" << endl;
	} else {
		cout	<< " Code for SystemFPGA                       : none" << endl;
	}
	if (this->FPGACodeRead(kFippiFPGA, kRevD)) {
		cout	<< " Code for FippiFPGA (RevD) read from file  : " << fFippiFPGAFile[kRevD] << endl;
		cout	<< " Size of FPGA code                         : " << fFippiFPGASize[kRevD] << " bytes" << endl;
	} else {
		cout	<< " Code for FippiFPGA (RevD)                 : none" << endl;
	}
	if (this->FPGACodeRead(kFippiFPGA, kRevE)) {
		cout	<< " Code for FippiFPGA (RevE) read from file  : " << fFippiFPGAFile[kRevE] << endl;
		cout	<< " Size of FPGA code                         : " << fFippiFPGASize[kRevE] << " bytes" << endl;
	} else {
		cout	<< " Code for FippiFPGA (RevE)                 : none" << endl;
	}
	if (this->DSPCodeRead()) {
		cout	<< " DSP code read from file                   : " << fDSPFile << endl;
		cout	<< " Size of DSP code                          : " << fDSPSize << " words" << endl;
	} else {
		cout	<< " DSP code                                  : none" << endl;
	}
	if (this->ParamNamesRead()) {
		cout	<< " Param names read from file                : " << fParamFile << endl;
		cout	<< " Number of params                          : " << fNofParams << endl;
	} else {
		cout	<< " Param names                               : none" << endl;
	}
	cout	<< "-------------------------------------------------------------------------------------------" << endl;
}

Bool_t TMrbDGFData::CheckXiaRelease() {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGFData::CheckXiaRelease
// Purpose:        Determine XIA's release number
// Arguments:      kTRUE/kFALSE
// Results:        --
// Exceptions:
// Description:    Looks for env var TMrbDGF.XiaRelease.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	TMrbString release, relDate;
	
	fXiaRelease = 0;
	
	release = gEnv->GetValue("TMrbDGF.XiaRelease", "");
	relDate = gEnv->GetValue("TMrbDGF.XiaDate", "");

	if (release.Length() == 0) {
		gMrbLog->Err() << "Release number missing (environment var \"TMrbDGF.XiaRelease\")" << endl;
		gMrbLog->Flush(this->ClassName(), "CheckXiaRelease");
		return(kFALSE);
	} else if (release.Index("v1.0", 0) == 0) {
		fXiaRelease = 100;
		gMrbLog->Err() << "Release no longer supported - " << release << "(" << relDate << ")" << endl;
		gMrbLog->Flush(this->ClassName(), "CheckXiaRelease");
		return(kFALSE);
	} else if (release.Index("v2.0", 0) == 0) {
		fXiaRelease = 200;
		gMrbLog->Err() << "Release no longer supported - " << release << "(" << relDate << ")" << endl;
		gMrbLog->Flush(this->ClassName(), "CheckXiaRelease");
		return(kFALSE);
	} else if (release.Index("v2.70", 0) == 0) {
		fXiaRelease = 270;
		return(kTRUE);
	} else if (release.Index("v2.80", 0) == 0) {
		fXiaRelease = 280;
		return(kTRUE);
	} else if (release.Index("v2.7mb", 0) == 0) {
		fXiaRelease = 271;
		return(kTRUE);
	} else if (release.Index("v3.00", 0) == 0) {
		fXiaRelease = 300;
		return(kTRUE);
	} else if (release.Index("v3.04", 0) == 0) {
		fXiaRelease = 304;
		return(kTRUE);
	} else {
		gMrbLog->Err() << "Malformed release - TMrbDGF.XiaRelease = " << release << endl;
		gMrbLog->Flush(this->ClassName(), "CheckXiaRelease");
		return(kFALSE);
	}
}

void TMrbDGFData::PrintXiaRelease() const {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGFData::PrintXiaRelease
// Purpose:        Output XIA's release number
// Arguments:      --
// Results:        --
// Exceptions:
// Description:    Outputs current XIA release to stdout.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	if (fXiaRelease == 0) {
		gMrbLog->Err()	<< "XIA Release is undefined" << endl;
		gMrbLog->Flush(this->ClassName(), "PrintXiaRelease");
	} else {
		gMrbLog->Out()	<< "XIA Release "
						<< gEnv->GetValue("TMrbDGF.XiaRelease", "") << " ("
						<< gEnv->GetValue("TMrbDGF.XiaDate", "") << ")" << endl;
		gMrbLog->Flush(this->ClassName(), "PrintXiaRelease", setblue);
	}
}

 TMrbDGFData.cxx:1
 TMrbDGFData.cxx:2
 TMrbDGFData.cxx:3
 TMrbDGFData.cxx:4
 TMrbDGFData.cxx:5
 TMrbDGFData.cxx:6
 TMrbDGFData.cxx:7
 TMrbDGFData.cxx:8
 TMrbDGFData.cxx:9
 TMrbDGFData.cxx:10
 TMrbDGFData.cxx:11
 TMrbDGFData.cxx:12
 TMrbDGFData.cxx:13
 TMrbDGFData.cxx:14
 TMrbDGFData.cxx:15
 TMrbDGFData.cxx:16
 TMrbDGFData.cxx:17
 TMrbDGFData.cxx:18
 TMrbDGFData.cxx:19
 TMrbDGFData.cxx:20
 TMrbDGFData.cxx:21
 TMrbDGFData.cxx:22
 TMrbDGFData.cxx:23
 TMrbDGFData.cxx:24
 TMrbDGFData.cxx:25
 TMrbDGFData.cxx:26
 TMrbDGFData.cxx:27
 TMrbDGFData.cxx:28
 TMrbDGFData.cxx:29
 TMrbDGFData.cxx:30
 TMrbDGFData.cxx:31
 TMrbDGFData.cxx:32
 TMrbDGFData.cxx:33
 TMrbDGFData.cxx:34
 TMrbDGFData.cxx:35
 TMrbDGFData.cxx:36
 TMrbDGFData.cxx:37
 TMrbDGFData.cxx:38
 TMrbDGFData.cxx:39
 TMrbDGFData.cxx:40
 TMrbDGFData.cxx:41
 TMrbDGFData.cxx:42
 TMrbDGFData.cxx:43
 TMrbDGFData.cxx:44
 TMrbDGFData.cxx:45
 TMrbDGFData.cxx:46
 TMrbDGFData.cxx:47
 TMrbDGFData.cxx:48
 TMrbDGFData.cxx:49
 TMrbDGFData.cxx:50
 TMrbDGFData.cxx:51
 TMrbDGFData.cxx:52
 TMrbDGFData.cxx:53
 TMrbDGFData.cxx:54
 TMrbDGFData.cxx:55
 TMrbDGFData.cxx:56
 TMrbDGFData.cxx:57
 TMrbDGFData.cxx:58
 TMrbDGFData.cxx:59
 TMrbDGFData.cxx:60
 TMrbDGFData.cxx:61
 TMrbDGFData.cxx:62
 TMrbDGFData.cxx:63
 TMrbDGFData.cxx:64
 TMrbDGFData.cxx:65
 TMrbDGFData.cxx:66
 TMrbDGFData.cxx:67
 TMrbDGFData.cxx:68
 TMrbDGFData.cxx:69
 TMrbDGFData.cxx:70
 TMrbDGFData.cxx:71
 TMrbDGFData.cxx:72
 TMrbDGFData.cxx:73
 TMrbDGFData.cxx:74
 TMrbDGFData.cxx:75
 TMrbDGFData.cxx:76
 TMrbDGFData.cxx:77
 TMrbDGFData.cxx:78
 TMrbDGFData.cxx:79
 TMrbDGFData.cxx:80
 TMrbDGFData.cxx:81
 TMrbDGFData.cxx:82
 TMrbDGFData.cxx:83
 TMrbDGFData.cxx:84
 TMrbDGFData.cxx:85
 TMrbDGFData.cxx:86
 TMrbDGFData.cxx:87
 TMrbDGFData.cxx:88
 TMrbDGFData.cxx:89
 TMrbDGFData.cxx:90
 TMrbDGFData.cxx:91
 TMrbDGFData.cxx:92
 TMrbDGFData.cxx:93
 TMrbDGFData.cxx:94
 TMrbDGFData.cxx:95
 TMrbDGFData.cxx:96
 TMrbDGFData.cxx:97
 TMrbDGFData.cxx:98
 TMrbDGFData.cxx:99
 TMrbDGFData.cxx:100
 TMrbDGFData.cxx:101
 TMrbDGFData.cxx:102
 TMrbDGFData.cxx:103
 TMrbDGFData.cxx:104
 TMrbDGFData.cxx:105
 TMrbDGFData.cxx:106
 TMrbDGFData.cxx:107
 TMrbDGFData.cxx:108
 TMrbDGFData.cxx:109
 TMrbDGFData.cxx:110
 TMrbDGFData.cxx:111
 TMrbDGFData.cxx:112
 TMrbDGFData.cxx:113
 TMrbDGFData.cxx:114
 TMrbDGFData.cxx:115
 TMrbDGFData.cxx:116
 TMrbDGFData.cxx:117
 TMrbDGFData.cxx:118
 TMrbDGFData.cxx:119
 TMrbDGFData.cxx:120
 TMrbDGFData.cxx:121
 TMrbDGFData.cxx:122
 TMrbDGFData.cxx:123
 TMrbDGFData.cxx:124
 TMrbDGFData.cxx:125
 TMrbDGFData.cxx:126
 TMrbDGFData.cxx:127
 TMrbDGFData.cxx:128
 TMrbDGFData.cxx:129
 TMrbDGFData.cxx:130
 TMrbDGFData.cxx:131
 TMrbDGFData.cxx:132
 TMrbDGFData.cxx:133
 TMrbDGFData.cxx:134
 TMrbDGFData.cxx:135
 TMrbDGFData.cxx:136
 TMrbDGFData.cxx:137
 TMrbDGFData.cxx:138
 TMrbDGFData.cxx:139
 TMrbDGFData.cxx:140
 TMrbDGFData.cxx:141
 TMrbDGFData.cxx:142
 TMrbDGFData.cxx:143
 TMrbDGFData.cxx:144
 TMrbDGFData.cxx:145
 TMrbDGFData.cxx:146
 TMrbDGFData.cxx:147
 TMrbDGFData.cxx:148
 TMrbDGFData.cxx:149
 TMrbDGFData.cxx:150
 TMrbDGFData.cxx:151
 TMrbDGFData.cxx:152
 TMrbDGFData.cxx:153
 TMrbDGFData.cxx:154
 TMrbDGFData.cxx:155
 TMrbDGFData.cxx:156
 TMrbDGFData.cxx:157
 TMrbDGFData.cxx:158
 TMrbDGFData.cxx:159
 TMrbDGFData.cxx:160
 TMrbDGFData.cxx:161
 TMrbDGFData.cxx:162
 TMrbDGFData.cxx:163
 TMrbDGFData.cxx:164
 TMrbDGFData.cxx:165
 TMrbDGFData.cxx:166
 TMrbDGFData.cxx:167
 TMrbDGFData.cxx:168
 TMrbDGFData.cxx:169
 TMrbDGFData.cxx:170
 TMrbDGFData.cxx:171
 TMrbDGFData.cxx:172
 TMrbDGFData.cxx:173
 TMrbDGFData.cxx:174
 TMrbDGFData.cxx:175
 TMrbDGFData.cxx:176
 TMrbDGFData.cxx:177
 TMrbDGFData.cxx:178
 TMrbDGFData.cxx:179
 TMrbDGFData.cxx:180
 TMrbDGFData.cxx:181
 TMrbDGFData.cxx:182
 TMrbDGFData.cxx:183
 TMrbDGFData.cxx:184
 TMrbDGFData.cxx:185
 TMrbDGFData.cxx:186
 TMrbDGFData.cxx:187
 TMrbDGFData.cxx:188
 TMrbDGFData.cxx:189
 TMrbDGFData.cxx:190
 TMrbDGFData.cxx:191
 TMrbDGFData.cxx:192
 TMrbDGFData.cxx:193
 TMrbDGFData.cxx:194
 TMrbDGFData.cxx:195
 TMrbDGFData.cxx:196
 TMrbDGFData.cxx:197
 TMrbDGFData.cxx:198
 TMrbDGFData.cxx:199
 TMrbDGFData.cxx:200
 TMrbDGFData.cxx:201
 TMrbDGFData.cxx:202
 TMrbDGFData.cxx:203
 TMrbDGFData.cxx:204
 TMrbDGFData.cxx:205
 TMrbDGFData.cxx:206
 TMrbDGFData.cxx:207
 TMrbDGFData.cxx:208
 TMrbDGFData.cxx:209
 TMrbDGFData.cxx:210
 TMrbDGFData.cxx:211
 TMrbDGFData.cxx:212
 TMrbDGFData.cxx:213
 TMrbDGFData.cxx:214
 TMrbDGFData.cxx:215
 TMrbDGFData.cxx:216
 TMrbDGFData.cxx:217
 TMrbDGFData.cxx:218
 TMrbDGFData.cxx:219
 TMrbDGFData.cxx:220
 TMrbDGFData.cxx:221
 TMrbDGFData.cxx:222
 TMrbDGFData.cxx:223
 TMrbDGFData.cxx:224
 TMrbDGFData.cxx:225
 TMrbDGFData.cxx:226
 TMrbDGFData.cxx:227
 TMrbDGFData.cxx:228
 TMrbDGFData.cxx:229
 TMrbDGFData.cxx:230
 TMrbDGFData.cxx:231
 TMrbDGFData.cxx:232
 TMrbDGFData.cxx:233
 TMrbDGFData.cxx:234
 TMrbDGFData.cxx:235
 TMrbDGFData.cxx:236
 TMrbDGFData.cxx:237
 TMrbDGFData.cxx:238
 TMrbDGFData.cxx:239
 TMrbDGFData.cxx:240
 TMrbDGFData.cxx:241
 TMrbDGFData.cxx:242
 TMrbDGFData.cxx:243
 TMrbDGFData.cxx:244
 TMrbDGFData.cxx:245
 TMrbDGFData.cxx:246
 TMrbDGFData.cxx:247
 TMrbDGFData.cxx:248
 TMrbDGFData.cxx:249
 TMrbDGFData.cxx:250
 TMrbDGFData.cxx:251
 TMrbDGFData.cxx:252
 TMrbDGFData.cxx:253
 TMrbDGFData.cxx:254
 TMrbDGFData.cxx:255
 TMrbDGFData.cxx:256
 TMrbDGFData.cxx:257
 TMrbDGFData.cxx:258
 TMrbDGFData.cxx:259
 TMrbDGFData.cxx:260
 TMrbDGFData.cxx:261
 TMrbDGFData.cxx:262
 TMrbDGFData.cxx:263
 TMrbDGFData.cxx:264
 TMrbDGFData.cxx:265
 TMrbDGFData.cxx:266
 TMrbDGFData.cxx:267
 TMrbDGFData.cxx:268
 TMrbDGFData.cxx:269
 TMrbDGFData.cxx:270
 TMrbDGFData.cxx:271
 TMrbDGFData.cxx:272
 TMrbDGFData.cxx:273
 TMrbDGFData.cxx:274
 TMrbDGFData.cxx:275
 TMrbDGFData.cxx:276
 TMrbDGFData.cxx:277
 TMrbDGFData.cxx:278
 TMrbDGFData.cxx:279
 TMrbDGFData.cxx:280
 TMrbDGFData.cxx:281
 TMrbDGFData.cxx:282
 TMrbDGFData.cxx:283
 TMrbDGFData.cxx:284
 TMrbDGFData.cxx:285
 TMrbDGFData.cxx:286
 TMrbDGFData.cxx:287
 TMrbDGFData.cxx:288
 TMrbDGFData.cxx:289
 TMrbDGFData.cxx:290
 TMrbDGFData.cxx:291
 TMrbDGFData.cxx:292
 TMrbDGFData.cxx:293
 TMrbDGFData.cxx:294
 TMrbDGFData.cxx:295
 TMrbDGFData.cxx:296
 TMrbDGFData.cxx:297
 TMrbDGFData.cxx:298
 TMrbDGFData.cxx:299
 TMrbDGFData.cxx:300
 TMrbDGFData.cxx:301
 TMrbDGFData.cxx:302
 TMrbDGFData.cxx:303
 TMrbDGFData.cxx:304
 TMrbDGFData.cxx:305
 TMrbDGFData.cxx:306
 TMrbDGFData.cxx:307
 TMrbDGFData.cxx:308
 TMrbDGFData.cxx:309
 TMrbDGFData.cxx:310
 TMrbDGFData.cxx:311
 TMrbDGFData.cxx:312
 TMrbDGFData.cxx:313
 TMrbDGFData.cxx:314
 TMrbDGFData.cxx:315
 TMrbDGFData.cxx:316
 TMrbDGFData.cxx:317
 TMrbDGFData.cxx:318
 TMrbDGFData.cxx:319
 TMrbDGFData.cxx:320
 TMrbDGFData.cxx:321
 TMrbDGFData.cxx:322
 TMrbDGFData.cxx:323
 TMrbDGFData.cxx:324
 TMrbDGFData.cxx:325
 TMrbDGFData.cxx:326
 TMrbDGFData.cxx:327
 TMrbDGFData.cxx:328
 TMrbDGFData.cxx:329
 TMrbDGFData.cxx:330
 TMrbDGFData.cxx:331
 TMrbDGFData.cxx:332
 TMrbDGFData.cxx:333
 TMrbDGFData.cxx:334
 TMrbDGFData.cxx:335
 TMrbDGFData.cxx:336
 TMrbDGFData.cxx:337
 TMrbDGFData.cxx:338
 TMrbDGFData.cxx:339
 TMrbDGFData.cxx:340
 TMrbDGFData.cxx:341
 TMrbDGFData.cxx:342
 TMrbDGFData.cxx:343
 TMrbDGFData.cxx:344
 TMrbDGFData.cxx:345
 TMrbDGFData.cxx:346
 TMrbDGFData.cxx:347
 TMrbDGFData.cxx:348
 TMrbDGFData.cxx:349
 TMrbDGFData.cxx:350
 TMrbDGFData.cxx:351
 TMrbDGFData.cxx:352
 TMrbDGFData.cxx:353
 TMrbDGFData.cxx:354
 TMrbDGFData.cxx:355
 TMrbDGFData.cxx:356
 TMrbDGFData.cxx:357
 TMrbDGFData.cxx:358
 TMrbDGFData.cxx:359
 TMrbDGFData.cxx:360
 TMrbDGFData.cxx:361
 TMrbDGFData.cxx:362
 TMrbDGFData.cxx:363
 TMrbDGFData.cxx:364
 TMrbDGFData.cxx:365
 TMrbDGFData.cxx:366
 TMrbDGFData.cxx:367
 TMrbDGFData.cxx:368
 TMrbDGFData.cxx:369
 TMrbDGFData.cxx:370
 TMrbDGFData.cxx:371
 TMrbDGFData.cxx:372
 TMrbDGFData.cxx:373
 TMrbDGFData.cxx:374
 TMrbDGFData.cxx:375
 TMrbDGFData.cxx:376
 TMrbDGFData.cxx:377
 TMrbDGFData.cxx:378
 TMrbDGFData.cxx:379
 TMrbDGFData.cxx:380
 TMrbDGFData.cxx:381
 TMrbDGFData.cxx:382
 TMrbDGFData.cxx:383
 TMrbDGFData.cxx:384
 TMrbDGFData.cxx:385
 TMrbDGFData.cxx:386
 TMrbDGFData.cxx:387
 TMrbDGFData.cxx:388
 TMrbDGFData.cxx:389
 TMrbDGFData.cxx:390
 TMrbDGFData.cxx:391
 TMrbDGFData.cxx:392
 TMrbDGFData.cxx:393
 TMrbDGFData.cxx:394
 TMrbDGFData.cxx:395
 TMrbDGFData.cxx:396
 TMrbDGFData.cxx:397
 TMrbDGFData.cxx:398
 TMrbDGFData.cxx:399
 TMrbDGFData.cxx:400
 TMrbDGFData.cxx:401
 TMrbDGFData.cxx:402
 TMrbDGFData.cxx:403
 TMrbDGFData.cxx:404
 TMrbDGFData.cxx:405
 TMrbDGFData.cxx:406
 TMrbDGFData.cxx:407
 TMrbDGFData.cxx:408
 TMrbDGFData.cxx:409
 TMrbDGFData.cxx:410
 TMrbDGFData.cxx:411
 TMrbDGFData.cxx:412
 TMrbDGFData.cxx:413
 TMrbDGFData.cxx:414
 TMrbDGFData.cxx:415
 TMrbDGFData.cxx:416
 TMrbDGFData.cxx:417
 TMrbDGFData.cxx:418
 TMrbDGFData.cxx:419
 TMrbDGFData.cxx:420
 TMrbDGFData.cxx:421
 TMrbDGFData.cxx:422
 TMrbDGFData.cxx:423
 TMrbDGFData.cxx:424
 TMrbDGFData.cxx:425
 TMrbDGFData.cxx:426
 TMrbDGFData.cxx:427
 TMrbDGFData.cxx:428
 TMrbDGFData.cxx:429
 TMrbDGFData.cxx:430
 TMrbDGFData.cxx:431
 TMrbDGFData.cxx:432
 TMrbDGFData.cxx:433
 TMrbDGFData.cxx:434
 TMrbDGFData.cxx:435
 TMrbDGFData.cxx:436
 TMrbDGFData.cxx:437
 TMrbDGFData.cxx:438
 TMrbDGFData.cxx:439
 TMrbDGFData.cxx:440
 TMrbDGFData.cxx:441
 TMrbDGFData.cxx:442
 TMrbDGFData.cxx:443
 TMrbDGFData.cxx:444
 TMrbDGFData.cxx:445
 TMrbDGFData.cxx:446
 TMrbDGFData.cxx:447
 TMrbDGFData.cxx:448
 TMrbDGFData.cxx:449
 TMrbDGFData.cxx:450
 TMrbDGFData.cxx:451
 TMrbDGFData.cxx:452
 TMrbDGFData.cxx:453
 TMrbDGFData.cxx:454
 TMrbDGFData.cxx:455
 TMrbDGFData.cxx:456
 TMrbDGFData.cxx:457
 TMrbDGFData.cxx:458
 TMrbDGFData.cxx:459
 TMrbDGFData.cxx:460
 TMrbDGFData.cxx:461
 TMrbDGFData.cxx:462
 TMrbDGFData.cxx:463
 TMrbDGFData.cxx:464
 TMrbDGFData.cxx:465
 TMrbDGFData.cxx:466
 TMrbDGFData.cxx:467
 TMrbDGFData.cxx:468
 TMrbDGFData.cxx:469
 TMrbDGFData.cxx:470
 TMrbDGFData.cxx:471
 TMrbDGFData.cxx:472
 TMrbDGFData.cxx:473
 TMrbDGFData.cxx:474
 TMrbDGFData.cxx:475
 TMrbDGFData.cxx:476
 TMrbDGFData.cxx:477
 TMrbDGFData.cxx:478
 TMrbDGFData.cxx:479
 TMrbDGFData.cxx:480
 TMrbDGFData.cxx:481
 TMrbDGFData.cxx:482
 TMrbDGFData.cxx:483
 TMrbDGFData.cxx:484
 TMrbDGFData.cxx:485
 TMrbDGFData.cxx:486
 TMrbDGFData.cxx:487
 TMrbDGFData.cxx:488
 TMrbDGFData.cxx:489
 TMrbDGFData.cxx:490
 TMrbDGFData.cxx:491
 TMrbDGFData.cxx:492
 TMrbDGFData.cxx:493
 TMrbDGFData.cxx:494
 TMrbDGFData.cxx:495
 TMrbDGFData.cxx:496
 TMrbDGFData.cxx:497
 TMrbDGFData.cxx:498
 TMrbDGFData.cxx:499
 TMrbDGFData.cxx:500
 TMrbDGFData.cxx:501
 TMrbDGFData.cxx:502
 TMrbDGFData.cxx:503
 TMrbDGFData.cxx:504
 TMrbDGFData.cxx:505
 TMrbDGFData.cxx:506
 TMrbDGFData.cxx:507
 TMrbDGFData.cxx:508
 TMrbDGFData.cxx:509
 TMrbDGFData.cxx:510
 TMrbDGFData.cxx:511
 TMrbDGFData.cxx:512
 TMrbDGFData.cxx:513
 TMrbDGFData.cxx:514
 TMrbDGFData.cxx:515
 TMrbDGFData.cxx:516
 TMrbDGFData.cxx:517
 TMrbDGFData.cxx:518
 TMrbDGFData.cxx:519
 TMrbDGFData.cxx:520
 TMrbDGFData.cxx:521
 TMrbDGFData.cxx:522
 TMrbDGFData.cxx:523
 TMrbDGFData.cxx:524
 TMrbDGFData.cxx:525
 TMrbDGFData.cxx:526
 TMrbDGFData.cxx:527
 TMrbDGFData.cxx:528
 TMrbDGFData.cxx:529
 TMrbDGFData.cxx:530
 TMrbDGFData.cxx:531
 TMrbDGFData.cxx:532
 TMrbDGFData.cxx:533
 TMrbDGFData.cxx:534
 TMrbDGFData.cxx:535
 TMrbDGFData.cxx:536
 TMrbDGFData.cxx:537
 TMrbDGFData.cxx:538
 TMrbDGFData.cxx:539
 TMrbDGFData.cxx:540
 TMrbDGFData.cxx:541
 TMrbDGFData.cxx:542
 TMrbDGFData.cxx:543
 TMrbDGFData.cxx:544
 TMrbDGFData.cxx:545
 TMrbDGFData.cxx:546
 TMrbDGFData.cxx:547
 TMrbDGFData.cxx:548
 TMrbDGFData.cxx:549
 TMrbDGFData.cxx:550
 TMrbDGFData.cxx:551
 TMrbDGFData.cxx:552
 TMrbDGFData.cxx:553
 TMrbDGFData.cxx:554
 TMrbDGFData.cxx:555
 TMrbDGFData.cxx:556
 TMrbDGFData.cxx:557
 TMrbDGFData.cxx:558
 TMrbDGFData.cxx:559
 TMrbDGFData.cxx:560
 TMrbDGFData.cxx:561
 TMrbDGFData.cxx:562
 TMrbDGFData.cxx:563
 TMrbDGFData.cxx:564
 TMrbDGFData.cxx:565
 TMrbDGFData.cxx:566
 TMrbDGFData.cxx:567
 TMrbDGFData.cxx:568
 TMrbDGFData.cxx:569
 TMrbDGFData.cxx:570
 TMrbDGFData.cxx:571
 TMrbDGFData.cxx:572
 TMrbDGFData.cxx:573
 TMrbDGFData.cxx:574
 TMrbDGFData.cxx:575
 TMrbDGFData.cxx:576
 TMrbDGFData.cxx:577
 TMrbDGFData.cxx:578
 TMrbDGFData.cxx:579
 TMrbDGFData.cxx:580
 TMrbDGFData.cxx:581
 TMrbDGFData.cxx:582
 TMrbDGFData.cxx:583
 TMrbDGFData.cxx:584
 TMrbDGFData.cxx:585
 TMrbDGFData.cxx:586
 TMrbDGFData.cxx:587
 TMrbDGFData.cxx:588
 TMrbDGFData.cxx:589
 TMrbDGFData.cxx:590
 TMrbDGFData.cxx:591
 TMrbDGFData.cxx:592
 TMrbDGFData.cxx:593
 TMrbDGFData.cxx:594
 TMrbDGFData.cxx:595
 TMrbDGFData.cxx:596
 TMrbDGFData.cxx:597
 TMrbDGFData.cxx:598
 TMrbDGFData.cxx:599
 TMrbDGFData.cxx:600
 TMrbDGFData.cxx:601
 TMrbDGFData.cxx:602
 TMrbDGFData.cxx:603
 TMrbDGFData.cxx:604
 TMrbDGFData.cxx:605
 TMrbDGFData.cxx:606
 TMrbDGFData.cxx:607
 TMrbDGFData.cxx:608
 TMrbDGFData.cxx:609
 TMrbDGFData.cxx:610
 TMrbDGFData.cxx:611
 TMrbDGFData.cxx:612
 TMrbDGFData.cxx:613
 TMrbDGFData.cxx:614
 TMrbDGFData.cxx:615
 TMrbDGFData.cxx:616
 TMrbDGFData.cxx:617
 TMrbDGFData.cxx:618
 TMrbDGFData.cxx:619
 TMrbDGFData.cxx:620
 TMrbDGFData.cxx:621
 TMrbDGFData.cxx:622
 TMrbDGFData.cxx:623
 TMrbDGFData.cxx:624
 TMrbDGFData.cxx:625
 TMrbDGFData.cxx:626
 TMrbDGFData.cxx:627
 TMrbDGFData.cxx:628
 TMrbDGFData.cxx:629
 TMrbDGFData.cxx:630
 TMrbDGFData.cxx:631
 TMrbDGFData.cxx:632
 TMrbDGFData.cxx:633
 TMrbDGFData.cxx:634
 TMrbDGFData.cxx:635
 TMrbDGFData.cxx:636
 TMrbDGFData.cxx:637
 TMrbDGFData.cxx:638
 TMrbDGFData.cxx:639
 TMrbDGFData.cxx:640
 TMrbDGFData.cxx:641
 TMrbDGFData.cxx:642
 TMrbDGFData.cxx:643
 TMrbDGFData.cxx:644
 TMrbDGFData.cxx:645
 TMrbDGFData.cxx:646
 TMrbDGFData.cxx:647
 TMrbDGFData.cxx:648
 TMrbDGFData.cxx:649
 TMrbDGFData.cxx:650
 TMrbDGFData.cxx:651
 TMrbDGFData.cxx:652
 TMrbDGFData.cxx:653
 TMrbDGFData.cxx:654
 TMrbDGFData.cxx:655
 TMrbDGFData.cxx:656
 TMrbDGFData.cxx:657
 TMrbDGFData.cxx:658
 TMrbDGFData.cxx:659
 TMrbDGFData.cxx:660
 TMrbDGFData.cxx:661
 TMrbDGFData.cxx:662
 TMrbDGFData.cxx:663
 TMrbDGFData.cxx:664
 TMrbDGFData.cxx:665
 TMrbDGFData.cxx:666
 TMrbDGFData.cxx:667
 TMrbDGFData.cxx:668
 TMrbDGFData.cxx:669
 TMrbDGFData.cxx:670
 TMrbDGFData.cxx:671
 TMrbDGFData.cxx:672
 TMrbDGFData.cxx:673
 TMrbDGFData.cxx:674
 TMrbDGFData.cxx:675
 TMrbDGFData.cxx:676
 TMrbDGFData.cxx:677
 TMrbDGFData.cxx:678
 TMrbDGFData.cxx:679
 TMrbDGFData.cxx:680
 TMrbDGFData.cxx:681
 TMrbDGFData.cxx:682
 TMrbDGFData.cxx:683
 TMrbDGFData.cxx:684
 TMrbDGFData.cxx:685
 TMrbDGFData.cxx:686
 TMrbDGFData.cxx:687
 TMrbDGFData.cxx:688
 TMrbDGFData.cxx:689
 TMrbDGFData.cxx:690
 TMrbDGFData.cxx:691
 TMrbDGFData.cxx:692
 TMrbDGFData.cxx:693
 TMrbDGFData.cxx:694
 TMrbDGFData.cxx:695
 TMrbDGFData.cxx:696
 TMrbDGFData.cxx:697
 TMrbDGFData.cxx:698
 TMrbDGFData.cxx:699
 TMrbDGFData.cxx:700
 TMrbDGFData.cxx:701
 TMrbDGFData.cxx:702
 TMrbDGFData.cxx:703
 TMrbDGFData.cxx:704
 TMrbDGFData.cxx:705
 TMrbDGFData.cxx:706
 TMrbDGFData.cxx:707
 TMrbDGFData.cxx:708
 TMrbDGFData.cxx:709
 TMrbDGFData.cxx:710
 TMrbDGFData.cxx:711
 TMrbDGFData.cxx:712
 TMrbDGFData.cxx:713
 TMrbDGFData.cxx:714
 TMrbDGFData.cxx:715
 TMrbDGFData.cxx:716
 TMrbDGFData.cxx:717
 TMrbDGFData.cxx:718
 TMrbDGFData.cxx:719
 TMrbDGFData.cxx:720
 TMrbDGFData.cxx:721
 TMrbDGFData.cxx:722
 TMrbDGFData.cxx:723
 TMrbDGFData.cxx:724
 TMrbDGFData.cxx:725
 TMrbDGFData.cxx:726
 TMrbDGFData.cxx:727
 TMrbDGFData.cxx:728
 TMrbDGFData.cxx:729
 TMrbDGFData.cxx:730
 TMrbDGFData.cxx:731
 TMrbDGFData.cxx:732
 TMrbDGFData.cxx:733
 TMrbDGFData.cxx:734
 TMrbDGFData.cxx:735
 TMrbDGFData.cxx:736
 TMrbDGFData.cxx:737
 TMrbDGFData.cxx:738
 TMrbDGFData.cxx:739
 TMrbDGFData.cxx:740
 TMrbDGFData.cxx:741
 TMrbDGFData.cxx:742
 TMrbDGFData.cxx:743
 TMrbDGFData.cxx:744
 TMrbDGFData.cxx:745
 TMrbDGFData.cxx:746
 TMrbDGFData.cxx:747
 TMrbDGFData.cxx:748
 TMrbDGFData.cxx:749
 TMrbDGFData.cxx:750
 TMrbDGFData.cxx:751
 TMrbDGFData.cxx:752
 TMrbDGFData.cxx:753
 TMrbDGFData.cxx:754
 TMrbDGFData.cxx:755
 TMrbDGFData.cxx:756
 TMrbDGFData.cxx:757
 TMrbDGFData.cxx:758
 TMrbDGFData.cxx:759
 TMrbDGFData.cxx:760
 TMrbDGFData.cxx:761
 TMrbDGFData.cxx:762
 TMrbDGFData.cxx:763
 TMrbDGFData.cxx:764
 TMrbDGFData.cxx:765
 TMrbDGFData.cxx:766
 TMrbDGFData.cxx:767
 TMrbDGFData.cxx:768
 TMrbDGFData.cxx:769
 TMrbDGFData.cxx:770
 TMrbDGFData.cxx:771
 TMrbDGFData.cxx:772
 TMrbDGFData.cxx:773
 TMrbDGFData.cxx:774
 TMrbDGFData.cxx:775
 TMrbDGFData.cxx:776
 TMrbDGFData.cxx:777
 TMrbDGFData.cxx:778
 TMrbDGFData.cxx:779
 TMrbDGFData.cxx:780
 TMrbDGFData.cxx:781
 TMrbDGFData.cxx:782
 TMrbDGFData.cxx:783
 TMrbDGFData.cxx:784
 TMrbDGFData.cxx:785
 TMrbDGFData.cxx:786
 TMrbDGFData.cxx:787
 TMrbDGFData.cxx:788
 TMrbDGFData.cxx:789
 TMrbDGFData.cxx:790
 TMrbDGFData.cxx:791
 TMrbDGFData.cxx:792
 TMrbDGFData.cxx:793
 TMrbDGFData.cxx:794
 TMrbDGFData.cxx:795
 TMrbDGFData.cxx:796
 TMrbDGFData.cxx:797
 TMrbDGFData.cxx:798
 TMrbDGFData.cxx:799
 TMrbDGFData.cxx:800
 TMrbDGFData.cxx:801
 TMrbDGFData.cxx:802
 TMrbDGFData.cxx:803
 TMrbDGFData.cxx:804
 TMrbDGFData.cxx:805
 TMrbDGFData.cxx:806
 TMrbDGFData.cxx:807
 TMrbDGFData.cxx:808
 TMrbDGFData.cxx:809
 TMrbDGFData.cxx:810
 TMrbDGFData.cxx:811
 TMrbDGFData.cxx:812
 TMrbDGFData.cxx:813
 TMrbDGFData.cxx:814
 TMrbDGFData.cxx:815
 TMrbDGFData.cxx:816
 TMrbDGFData.cxx:817
 TMrbDGFData.cxx:818
 TMrbDGFData.cxx:819
 TMrbDGFData.cxx:820
 TMrbDGFData.cxx:821
 TMrbDGFData.cxx:822
 TMrbDGFData.cxx:823
 TMrbDGFData.cxx:824
 TMrbDGFData.cxx:825
 TMrbDGFData.cxx:826
 TMrbDGFData.cxx:827
 TMrbDGFData.cxx:828
 TMrbDGFData.cxx:829
 TMrbDGFData.cxx:830
 TMrbDGFData.cxx:831
 TMrbDGFData.cxx:832
 TMrbDGFData.cxx:833
 TMrbDGFData.cxx:834
 TMrbDGFData.cxx:835
 TMrbDGFData.cxx:836
 TMrbDGFData.cxx:837
 TMrbDGFData.cxx:838
 TMrbDGFData.cxx:839
 TMrbDGFData.cxx:840
 TMrbDGFData.cxx:841
 TMrbDGFData.cxx:842
 TMrbDGFData.cxx:843
 TMrbDGFData.cxx:844
 TMrbDGFData.cxx:845
 TMrbDGFData.cxx:846
 TMrbDGFData.cxx:847
 TMrbDGFData.cxx:848
 TMrbDGFData.cxx:849
 TMrbDGFData.cxx:850
 TMrbDGFData.cxx:851
 TMrbDGFData.cxx:852
 TMrbDGFData.cxx:853
 TMrbDGFData.cxx:854
 TMrbDGFData.cxx:855
 TMrbDGFData.cxx:856
 TMrbDGFData.cxx:857
 TMrbDGFData.cxx:858
 TMrbDGFData.cxx:859
 TMrbDGFData.cxx:860
 TMrbDGFData.cxx:861
 TMrbDGFData.cxx:862
 TMrbDGFData.cxx:863
 TMrbDGFData.cxx:864
 TMrbDGFData.cxx:865
 TMrbDGFData.cxx:866
 TMrbDGFData.cxx:867
 TMrbDGFData.cxx:868
 TMrbDGFData.cxx:869
 TMrbDGFData.cxx:870
 TMrbDGFData.cxx:871
 TMrbDGFData.cxx:872
 TMrbDGFData.cxx:873
 TMrbDGFData.cxx:874
 TMrbDGFData.cxx:875
 TMrbDGFData.cxx:876
 TMrbDGFData.cxx:877
 TMrbDGFData.cxx:878
 TMrbDGFData.cxx:879
 TMrbDGFData.cxx:880
 TMrbDGFData.cxx:881
 TMrbDGFData.cxx:882
 TMrbDGFData.cxx:883
 TMrbDGFData.cxx:884
 TMrbDGFData.cxx:885
 TMrbDGFData.cxx:886
 TMrbDGFData.cxx:887
 TMrbDGFData.cxx:888
 TMrbDGFData.cxx:889
 TMrbDGFData.cxx:890
 TMrbDGFData.cxx:891
 TMrbDGFData.cxx:892
 TMrbDGFData.cxx:893
 TMrbDGFData.cxx:894
 TMrbDGFData.cxx:895
 TMrbDGFData.cxx:896
 TMrbDGFData.cxx:897
 TMrbDGFData.cxx:898
 TMrbDGFData.cxx:899
 TMrbDGFData.cxx:900
 TMrbDGFData.cxx:901
 TMrbDGFData.cxx:902
 TMrbDGFData.cxx:903
 TMrbDGFData.cxx:904
 TMrbDGFData.cxx:905
 TMrbDGFData.cxx:906
 TMrbDGFData.cxx:907
 TMrbDGFData.cxx:908
 TMrbDGFData.cxx:909
 TMrbDGFData.cxx:910
 TMrbDGFData.cxx:911
 TMrbDGFData.cxx:912
 TMrbDGFData.cxx:913
 TMrbDGFData.cxx:914
 TMrbDGFData.cxx:915
 TMrbDGFData.cxx:916
 TMrbDGFData.cxx:917
 TMrbDGFData.cxx:918
 TMrbDGFData.cxx:919
 TMrbDGFData.cxx:920
 TMrbDGFData.cxx:921
 TMrbDGFData.cxx:922
 TMrbDGFData.cxx:923
 TMrbDGFData.cxx:924
 TMrbDGFData.cxx:925
 TMrbDGFData.cxx:926
 TMrbDGFData.cxx:927
 TMrbDGFData.cxx:928
 TMrbDGFData.cxx:929
 TMrbDGFData.cxx:930
 TMrbDGFData.cxx:931
 TMrbDGFData.cxx:932
 TMrbDGFData.cxx:933
 TMrbDGFData.cxx:934
 TMrbDGFData.cxx:935
 TMrbDGFData.cxx:936
 TMrbDGFData.cxx:937
 TMrbDGFData.cxx:938
 TMrbDGFData.cxx:939
 TMrbDGFData.cxx:940
 TMrbDGFData.cxx:941
 TMrbDGFData.cxx:942
 TMrbDGFData.cxx:943
 TMrbDGFData.cxx:944
 TMrbDGFData.cxx:945
 TMrbDGFData.cxx:946
 TMrbDGFData.cxx:947
 TMrbDGFData.cxx:948
 TMrbDGFData.cxx:949
 TMrbDGFData.cxx:950
 TMrbDGFData.cxx:951
 TMrbDGFData.cxx:952
 TMrbDGFData.cxx:953
 TMrbDGFData.cxx:954
 TMrbDGFData.cxx:955
 TMrbDGFData.cxx:956
 TMrbDGFData.cxx:957
 TMrbDGFData.cxx:958
 TMrbDGFData.cxx:959
 TMrbDGFData.cxx:960
 TMrbDGFData.cxx:961
 TMrbDGFData.cxx:962
 TMrbDGFData.cxx:963
 TMrbDGFData.cxx:964
 TMrbDGFData.cxx:965
 TMrbDGFData.cxx:966
 TMrbDGFData.cxx:967
 TMrbDGFData.cxx:968
 TMrbDGFData.cxx:969
 TMrbDGFData.cxx:970
 TMrbDGFData.cxx:971
 TMrbDGFData.cxx:972
 TMrbDGFData.cxx:973
 TMrbDGFData.cxx:974
 TMrbDGFData.cxx:975
 TMrbDGFData.cxx:976
 TMrbDGFData.cxx:977
 TMrbDGFData.cxx:978
 TMrbDGFData.cxx:979
 TMrbDGFData.cxx:980
 TMrbDGFData.cxx:981
 TMrbDGFData.cxx:982
 TMrbDGFData.cxx:983
 TMrbDGFData.cxx:984
 TMrbDGFData.cxx:985
 TMrbDGFData.cxx:986
 TMrbDGFData.cxx:987
 TMrbDGFData.cxx:988
 TMrbDGFData.cxx:989
 TMrbDGFData.cxx:990
 TMrbDGFData.cxx:991
 TMrbDGFData.cxx:992
 TMrbDGFData.cxx:993
 TMrbDGFData.cxx:994
 TMrbDGFData.cxx:995
 TMrbDGFData.cxx:996
 TMrbDGFData.cxx:997
 TMrbDGFData.cxx:998
 TMrbDGFData.cxx:999
 TMrbDGFData.cxx:1000
 TMrbDGFData.cxx:1001
 TMrbDGFData.cxx:1002
 TMrbDGFData.cxx:1003
 TMrbDGFData.cxx:1004
 TMrbDGFData.cxx:1005
 TMrbDGFData.cxx:1006
 TMrbDGFData.cxx:1007
 TMrbDGFData.cxx:1008
 TMrbDGFData.cxx:1009
 TMrbDGFData.cxx:1010
 TMrbDGFData.cxx:1011
 TMrbDGFData.cxx:1012
 TMrbDGFData.cxx:1013
 TMrbDGFData.cxx:1014
 TMrbDGFData.cxx:1015
 TMrbDGFData.cxx:1016
 TMrbDGFData.cxx:1017
 TMrbDGFData.cxx:1018
 TMrbDGFData.cxx:1019
 TMrbDGFData.cxx:1020
 TMrbDGFData.cxx:1021
 TMrbDGFData.cxx:1022
 TMrbDGFData.cxx:1023
 TMrbDGFData.cxx:1024
 TMrbDGFData.cxx:1025
 TMrbDGFData.cxx:1026
 TMrbDGFData.cxx:1027
 TMrbDGFData.cxx:1028
 TMrbDGFData.cxx:1029
 TMrbDGFData.cxx:1030
 TMrbDGFData.cxx:1031
 TMrbDGFData.cxx:1032
 TMrbDGFData.cxx:1033
 TMrbDGFData.cxx:1034
 TMrbDGFData.cxx:1035
 TMrbDGFData.cxx:1036
 TMrbDGFData.cxx:1037
 TMrbDGFData.cxx:1038
 TMrbDGFData.cxx:1039
 TMrbDGFData.cxx:1040
 TMrbDGFData.cxx:1041
 TMrbDGFData.cxx:1042
 TMrbDGFData.cxx:1043
 TMrbDGFData.cxx:1044
 TMrbDGFData.cxx:1045
 TMrbDGFData.cxx:1046
 TMrbDGFData.cxx:1047
 TMrbDGFData.cxx:1048
 TMrbDGFData.cxx:1049
 TMrbDGFData.cxx:1050
 TMrbDGFData.cxx:1051
 TMrbDGFData.cxx:1052
 TMrbDGFData.cxx:1053
 TMrbDGFData.cxx:1054
 TMrbDGFData.cxx:1055
 TMrbDGFData.cxx:1056
 TMrbDGFData.cxx:1057
 TMrbDGFData.cxx:1058
 TMrbDGFData.cxx:1059
 TMrbDGFData.cxx:1060
 TMrbDGFData.cxx:1061
 TMrbDGFData.cxx:1062
 TMrbDGFData.cxx:1063
 TMrbDGFData.cxx:1064
 TMrbDGFData.cxx:1065
 TMrbDGFData.cxx:1066
 TMrbDGFData.cxx:1067
 TMrbDGFData.cxx:1068
 TMrbDGFData.cxx:1069
 TMrbDGFData.cxx:1070
 TMrbDGFData.cxx:1071
 TMrbDGFData.cxx:1072
 TMrbDGFData.cxx:1073
 TMrbDGFData.cxx:1074
 TMrbDGFData.cxx:1075
 TMrbDGFData.cxx:1076
 TMrbDGFData.cxx:1077
 TMrbDGFData.cxx:1078
 TMrbDGFData.cxx:1079
 TMrbDGFData.cxx:1080
 TMrbDGFData.cxx:1081
 TMrbDGFData.cxx:1082
 TMrbDGFData.cxx:1083
 TMrbDGFData.cxx:1084
 TMrbDGFData.cxx:1085
 TMrbDGFData.cxx:1086
 TMrbDGFData.cxx:1087
 TMrbDGFData.cxx:1088
 TMrbDGFData.cxx:1089
 TMrbDGFData.cxx:1090
 TMrbDGFData.cxx:1091
 TMrbDGFData.cxx:1092
 TMrbDGFData.cxx:1093
 TMrbDGFData.cxx:1094
 TMrbDGFData.cxx:1095
 TMrbDGFData.cxx:1096
 TMrbDGFData.cxx:1097
 TMrbDGFData.cxx:1098
 TMrbDGFData.cxx:1099
 TMrbDGFData.cxx:1100
 TMrbDGFData.cxx:1101
 TMrbDGFData.cxx:1102
 TMrbDGFData.cxx:1103
 TMrbDGFData.cxx:1104
 TMrbDGFData.cxx:1105
 TMrbDGFData.cxx:1106
 TMrbDGFData.cxx:1107
 TMrbDGFData.cxx:1108
 TMrbDGFData.cxx:1109
 TMrbDGFData.cxx:1110
 TMrbDGFData.cxx:1111
 TMrbDGFData.cxx:1112
 TMrbDGFData.cxx:1113
 TMrbDGFData.cxx:1114
 TMrbDGFData.cxx:1115
 TMrbDGFData.cxx:1116
 TMrbDGFData.cxx:1117
 TMrbDGFData.cxx:1118
 TMrbDGFData.cxx:1119
 TMrbDGFData.cxx:1120
 TMrbDGFData.cxx:1121
 TMrbDGFData.cxx:1122
 TMrbDGFData.cxx:1123
 TMrbDGFData.cxx:1124
 TMrbDGFData.cxx:1125
 TMrbDGFData.cxx:1126
 TMrbDGFData.cxx:1127
 TMrbDGFData.cxx:1128
 TMrbDGFData.cxx:1129
 TMrbDGFData.cxx:1130
 TMrbDGFData.cxx:1131
 TMrbDGFData.cxx:1132
 TMrbDGFData.cxx:1133