ROOT logo
//__________________________________________________[C++ CLASS IMPLEMENTATION]
//////////////////////////////////////////////////////////////////////////////
// Name:           xiadgf/src/TMrbDGFEventBuffer.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: TMrbDGFEventBuffer.cxx,v 1.7 2006-07-19 09:08:58 Rudolf.Lutter Exp $       
// Date:           
//////////////////////////////////////////////////////////////////////////////

namespace std {} using namespace std;

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

#include "TROOT.h"
#include "TFile.h"

#include "TMrbLogger.h"

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

#include "SetColor.h"

extern TMrbDGFData * gMrbDGFdata;				// common data base for all DGF modules
extern TMrbLogger * gMrbLog;

ClassImp(TMrbDGFEventBuffer)

TMrbDGFEventBuffer::TMrbDGFEventBuffer(const Char_t * BufferName, TObject * Module, Int_t Index, Int_t Event0) :
																		TNamed(BufferName, "DGF-4C Event Buffer") {
//__________________________________________________________________[C++ CTOR]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGFEventBuffer
// Purpose:        DGF's list mode buffer
// Description:    Describes the list mode buffer.
// Keywords:       
//////////////////////////////////////////////////////////////////////////////

	if (gMrbLog == NULL) gMrbLog = new TMrbLogger();
	
	Reset();
	fModule = Module;
	fGlobIndex = Index;
	fGlobEventNo = Event0;
	fHistogram = NULL;
	fTauFit = NULL;
}

void TMrbDGFEventBuffer::Reset() {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGFEventBuffer::Reset
// Purpose:        Reset to initial values
// Arguments:      --
// Results:        --
// Exceptions:
// Description:    Resets event buffer
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	fNofWords = 0;
	fNofEvents = 0;
	fEventIndex.Delete(); 	// reset event index
	fTraceError = 0;
	this->Set(0);			// reset data
}

void TMrbDGFEventBuffer::MakeIndex() {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGFEventBuffer::MakeIndex
// Purpose:        Analyze buffer data
// Arguments:      --
// Results:        --
// Exceptions:
// Description:    Analyzes buffer data: number of events, indices etc.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	Int_t i;
	Int_t bufIdx;
	Int_t chnAddr;
	Int_t hit;
	Int_t nofChannels;
	TMrbDGFEvent * evt;

	bufIdx = 0;
	fNofWords = fArray[bufIdx + TMrbDGFEventBuffer::kBufNofWords];
	fNofEvents = 0;
	fEventIndex.Delete();

	bufIdx += TMrbDGFEventBuffer::kBufHeaderLength;
	while (bufIdx < fNofWords) {
		evt = new TMrbDGFEvent();
		fNofEvents++;
		nofChannels = 0;
		hit = fArray[bufIdx];				// hit pattern
		evt->SetHitPattern(hit);
		bufIdx += TMrbDGFEventBuffer::kEventHeaderLength;
		for (i = 0; i < TMrbDGFData::kNofChannels; i++) {
			if (hit & 1) {					// test channel by channel
				chnAddr = bufIdx;			// active channel: insert it in index
				bufIdx += fArray[bufIdx];
				nofChannels++;
			} else {
				chnAddr = 0; 				// channel inactive: skip it
			}
			evt->SetChannel(i, chnAddr);
			hit >>= 1;						// try next channel
		}
		evt->SetNofChannels(nofChannels);
		fEventIndex.AddLast((TObject *) evt);
	}
}

Int_t TMrbDGFEventBuffer::GetNofChannels(Int_t EventNumber) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGFEventBuffer::GetNofChannels
// Purpose:        Return number of active channels
// Arguments:      Int_t EventNumber    -- event number
// Results:        Int_t NofChannels    -- number of active channels
// Exceptions:
// Description:    Returns the number of active channels for a given event.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	TMrbDGFEvent * evt;

	if (EventNumber >= fNofEvents) {
		gMrbLog->Err()	<< "Event number out of range - " << EventNumber
						<< " (should be in [0," << fNofEvents - 1 << "])" << endl;
		gMrbLog->Flush(this->ClassName(), "GetNofChannels");
		return(-1);
	}
	evt = (TMrbDGFEvent *) fEventIndex.At(EventNumber);
	return(evt->GetNofChannels());
}

UInt_t TMrbDGFEventBuffer::GetHitPattern(Int_t EventNumber) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGFEventBuffer::GetHitPattern
// Purpose:        Return pattern of active channels
// Arguments:      Int_t EventNumber    -- event number
// Results:        UInt_t HitPattern    -- pattern
// Exceptions:
// Description:    Returns the pattern of active channels.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	TMrbDGFEvent * evt;

	if (EventNumber >= fNofEvents) {
		gMrbLog->Err()	<< "Event number out of range - " << EventNumber
						<< " (should be in [0," << fNofEvents - 1 << "])" << endl;
		gMrbLog->Flush(this->ClassName(), "GetHitPattern");
		return(0xffffffff);
	}
	evt = (TMrbDGFEvent *) fEventIndex.At(EventNumber);
	return(evt->GetHitPattern());
}

Int_t TMrbDGFEventBuffer::GetChannel(Int_t EventNumber, Int_t Channel, TArrayI & Data) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGFEventBuffer::GetChannel
// Purpose:        Return data for a given channel
// Arguments:      Int_t EventNumber    -- event number
//                 Int_t Channel        -- channel number
//                 TArrayI & Data       -- where to store channel data
// Results:        Int_t NofWords       -- number of words
// Exceptions:
// Description:    Returns data of a given channel.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	TMrbDGFEvent * evt;
	Int_t i, k, wc;
	Int_t chnAddr;

	if (EventNumber >= fNofEvents) {
		gMrbLog->Err()	<< "Event number out of range - " << EventNumber
						<< " (should be in [0," << fNofEvents - 1 << "])" << endl;
		gMrbLog->Flush(this->ClassName(), "GetChannel");
		return(-1);
	}
	if (Channel >= TMrbDGFData::kNofChannels) {
		gMrbLog->Err()	<< "Channel number out of range - " << Channel
						<< " (should be in [0," << TMrbDGFData::kNofChannels - 1 << "])" << endl;
		gMrbLog->Flush(this->ClassName(), "GetChannel");
		return(-1);
	}
	evt = (TMrbDGFEvent *) fEventIndex.At(EventNumber);
	chnAddr = evt->GetChannel(Channel);
	if (chnAddr > 0) {
		wc = fArray[chnAddr + TMrbDGFEventBuffer::kChanNofWords] - TMrbDGFEventBuffer::kChanHeaderLength;
		Data.Set(wc);
		k = chnAddr + TMrbDGFEventBuffer::kChanHeaderLength;
		for (i = 0; i < wc; i++, k++) Data[i] = fArray[k];
		return(wc);
	}
	return(-1);
}	

Int_t TMrbDGFEventBuffer::GetNofWords(Int_t EventNumber, Int_t Channel) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGFEventBuffer::GetNofWords
// Purpose:        Return number of data words for a channel
// Arguments:      Int_t EventNumber    -- event number
//                 Int_t Channel        -- channel number
// Results:        Int_t NofWords       -- number of words
// Exceptions:
// Description:    Returns number of words for a given channel.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	TMrbDGFEvent * evt;
	Int_t chnAddr;
	Int_t wc;

	if (EventNumber >= fNofEvents) {
		gMrbLog->Err()	<< "Event number out of range - " << EventNumber
						<< " (should be in [0," << fNofEvents - 1 << "])" << endl;
		gMrbLog->Flush(this->ClassName(), "GetNofWords");
		return(-1);
	}
	if (Channel >= TMrbDGFData::kNofChannels) {
		gMrbLog->Err()	<< "Channel number out of range - " << Channel
						<< " (should be in [0," << TMrbDGFData::kNofChannels - 1 << "])" << endl;
		gMrbLog->Flush(this->ClassName(), "GetNofWords");
		return(-1);
	}
	evt = (TMrbDGFEvent *) fEventIndex.At(EventNumber);
	chnAddr = evt->GetChannel(Channel);
	wc = (chnAddr == 0) ? 0 : fArray[chnAddr + TMrbDGFEventBuffer::kChanNofWords];
	return(wc);
}	

Double_t TMrbDGFEventBuffer::CalcTau(Int_t EventNumber, Int_t Channel, Int_t GlobalEventNo,
								Double_t A0, Double_t A1, Double_t A2, Int_t From, Int_t To,
								Bool_t Verbose, Bool_t DrawIt) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGFEventBuffer::CalcTau
// Purpose:        Calculate tau value
// Arguments:      Int_t EventNumber    -- event number
//                 Int_t Channel        -- channel number
//                 Int_t GlobalEventNo  -- global event number
//                 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
//                 Int_t Verbose        -- verbose mode?
//                 Bool_t DrawIt        -- draw histo + fit
// Results:        Double_t Tau         -- tau value
// Exceptions:
// Description:    Performs a fit on trace data
//                     f(x) = a(0) + a(1) * exp(a(2) * x)
//                 then calculates tau
//                     tau = 1 / (40 * a(2))
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	TArrayI data;

	Int_t wc = this->GetChannel(EventNumber, Channel, data);
	if (wc < 0) {
		gMrbLog->Err() << "No trace data for event " << EventNumber << ", channel " << Channel << endl;
		gMrbLog->Flush(this->ClassName(), "CalcTau");
		return(-1);
	}
	
	if (To == 0) To = wc - 1;

	if (From >= To) {
		gMrbLog->Err() << "Illegal fit region - [" << From << "," << To << "]" << endl;
		gMrbLog->Flush(this->ClassName(), "CalcTau");
		return(-1);
	}

	TMrbDGFEvent * evt = (TMrbDGFEvent *) fEventIndex.At(EventNumber);
	Int_t evtNo = (GlobalEventNo > 0) ? GlobalEventNo : EventNumber;

	TMrbString hName = "ht"; hName += evtNo; hName += "c"; hName += Channel;
	TMrbString hTitle = "Fitted trace data for evt "; hTitle += evtNo; hTitle += ", chn "; hTitle += Channel;

	if (fHistogram != NULL) {
		gROOT->GetList()->Remove(fHistogram);
		delete fHistogram;
	}

	fHistogram = new TH1F(hName.Data(), hTitle.Data(), wc, 0., (Float_t) wc);

	for (Int_t i = 1; i <= wc; i++) {
		fHistogram->SetBinContent(i, (Stat_t) data[i - 1]);
		if (fTraceError > 0) fHistogram->SetBinError(i, fTraceError);
	}

	if (fTauFit != NULL) {
		gROOT->GetList()->Remove(fTauFit);
		delete fTauFit;
	}

	hName = "ft"; hName += evtNo; hName += "c"; hName += Channel;
	fTauFit = new TF1(hName.Data(), "[0] + [1]*exp(-[2]*x)", (Double_t) From, (Double_t) To);

	fTauFit->SetParameters(A0, A1, A2);
	fTauFit->SetParName(0,"exp_const ");
	fTauFit->SetParName(1,"exp_ampl ");
	fTauFit->SetParName(2,"exp_tau ");
	fTauFit->SetLineColor(4);
	fTauFit->SetLineWidth(3);

	if (DrawIt) fHistogram->Draw();

	TString fitOpt = "R";
	if (!Verbose) fitOpt += "Q";
	if (!DrawIt) fitOpt += "0";
	fitOpt += "+";
	fHistogram->Fit(hName.Data(), fitOpt, "SAME");

	Double_t tau = 1. / (40. * fTauFit->GetParameter(2));
	if (Verbose) {
		gMrbLog->Out()	<< "Event " << EventNumber << ", channel " << Channel
						<< " --> fitted tau value = " << tau << endl;
		gMrbLog->Flush(this->ClassName(), "CalcTau()", setblue);
	}
	evt->SetTau(Channel, tau);				// store tau value
	return(tau);
}	

Double_t TMrbDGFEventBuffer::GetTau(Int_t EventNumber, Int_t Channel) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGFEventBuffer::GetTau
// Purpose:        Recall calculated tau value
// Arguments:      Int_t EventNumber    -- event number
//                 Int_t Channel        -- channel number
// Results:        Double_t Tau         -- tau value
// Exceptions:
// Description:    Returns tau value
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	TMrbDGFEvent * evt;

	if (EventNumber >= fNofEvents) {
		gMrbLog->Err()	<< "Event number out of range - " << EventNumber
						<< " (should be in [0," << fNofEvents - 1 << "])" << endl;
		gMrbLog->Flush(this->ClassName(), "GetTau");
		return(-1);
	}
	if (Channel >= TMrbDGFData::kNofChannels) {
		gMrbLog->Err()	<< "Channel number out of range - " << Channel
						<< " (should be in [0," << TMrbDGFData::kNofChannels - 1 << "])" << endl;
		gMrbLog->Flush(this->ClassName(), "GetTau");
		return(-1);
	}
	evt = (TMrbDGFEvent *) fEventIndex.At(EventNumber);
	return(evt->GetTau(Channel));
}

TH1F * TMrbDGFEventBuffer::FillHistogram(Int_t EventNumber, Int_t Channel, Bool_t DrawIt) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGFEventBuffer::FillHistogram
// Purpose:        Fill a histogram with trace data
// Arguments:      Int_t EventNumber    -- event number
//                 Int_t Channel        -- channel number
//                 Bool_t DrawIt        -- draw histogram
// Results:        TH1F * Histogram     -- address of internal histogram
// Exceptions:
// Description:    Fills a histogram with event (trace) data and draws it.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	TArrayI data;

	Int_t wc = this->GetChannel(EventNumber, Channel, data);
	if (wc < 0) return(NULL);

	if (fHistogram != NULL) {
		gROOT->GetList()->Remove(fHistogram);
		delete fHistogram;
	}

	TMrbString hName = "h"; hName += EventNumber; hName += "c"; hName += Channel;
	TMrbString hTitle = "Trace data for evt "; hTitle += EventNumber; hTitle += ", chn "; hTitle += Channel;
	fHistogram = new TH1F(hName.Data(), hTitle.Data(), wc, 0., (Float_t) wc);

	for (Int_t i = 1; i <= wc; i++) {
		fHistogram->SetBinContent(i, (Stat_t) data[i - 1]);
		if (fTraceError > 0) fHistogram->SetBinError(i, fTraceError);
	}
	if (DrawIt) fHistogram->Draw();
	return(fHistogram);
}	

Bool_t TMrbDGFEventBuffer::SaveTraces(const Char_t * TraceFile, Int_t EventNumber, Int_t Channel) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGFEventBuffer::SaveTraces
// Purpose:        Save trace data to root file
// Arguments:      Char_t * TraceFile   -- file name
//                 Int_t EventNumber    -- event number
//                 Int_t Channel        -- channel number
// Results:        Int_t NofWords       -- number of words
// Exceptions:
// Description:    Saves trace data as histograms in root format.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	Int_t i, j, k, wc;
	TArrayI data;
	TMrbString traceFile;
	TMrbString hName, hTitle;
	Int_t nofTraces, nofEvents;
	Int_t evtNo, chnNo;
	ofstream hList;
	TString hListName;
	TMrbString hln;

	if (fNofEvents == 0) {
		gMrbLog->Err() << "Event buffer is empty" << endl;
		gMrbLog->Flush(this->ClassName(), "SaveTraces");
		return(kFALSE);
	}

	TFile * tFile = NULL;
	TH1F * h = NULL;

	if (TraceFile == NULL || *TraceFile == '\0') {		// default name is "dgfTrace.<module>.<channel>.root
		traceFile = "dgfTrace.";
		if (fModule != NULL) {
			traceFile += ((TMrbDGF *) fModule)->GetName();
			traceFile += ".";
		}
		if (Channel != -1) {
			traceFile += "chn";
			traceFile += Channel;
		}
		traceFile += ".root";
	} else {
		traceFile = TraceFile;
	}
	
	hListName = traceFile;
	Int_t idx = hListName.Index(".root", 0);
	if (idx > 0) hListName.Resize(idx);
	hln = "rm -f "; hln += hListName; hln += "-*.histlist";
	gSystem->Exec(hln.Data());

	nofTraces = 0;
	nofEvents = 0;
	for (i = 0; i < fNofEvents; i++) {
		evtNo = (EventNumber == -1) ? i : EventNumber;
		if (i == evtNo) {
			nofEvents++;
			for (j = 0; j < TMrbDGFData::kNofChannels; j++) {
				chnNo = (Channel == -1) ? j : Channel;
				if (j == chnNo) {
					wc = this->GetChannel(i, j, data);
					if (wc > 0) {
						nofTraces++;
						if ((nofTraces % 16) == 1) {
							if (nofTraces != 1 && hList.good()) hList.close();
							hln = hListName; hln += "-"; hln += nofTraces; hln += ".histlist";
							hList.open(hln.Data(), ios::out);
						}
						if (tFile == NULL) {
							tFile = new TFile(traceFile.Data(), "RECREATE");
							if (!tFile->IsOpen()) {
								gMrbLog->Err() << "Can't open file " << traceFile << endl;
								gMrbLog->Flush(this->ClassName(), "SaveTraces");
								return(kFALSE);
							}
						}
						hName = "ht"; hName += i; hName += "c"; hName += j;
						hTitle = "Trace data for evt "; hTitle += i; hTitle += ", chn "; hTitle += j;
						if (h) delete h;
						h = new TH1F(hName.Data(), hTitle.Data(), wc, 0., (Float_t) wc);
						for (k = 1; k <= wc; k++) {
							h->SetBinContent(k, (Stat_t) data[k - 1]);
							if (fTraceError > 0) h->SetBinError(k, fTraceError);
						}
						h->Write();
						if (hList.good()) hList << traceFile << " " << h->GetName() << endl;
					}
					if (Channel != -1) break;
				}
			}
			if (EventNumber != -1) break;
		}
	}
	if (tFile) tFile->Close();
	if (hList.good()) hList.close();

	if (nofTraces == 0) {
		gMrbLog->Err() << "No events/traces found" << endl;
		gMrbLog->Flush(this->ClassName(), "SaveTraces");
		return(kFALSE);
	} else {
		gMrbLog->Out() << nofEvents << " event(s) (" << nofTraces << " trace(s)) saved to " << TraceFile << endl;
		gMrbLog->Flush(this->ClassName(), "SaveTraces()", setblue);
		return(kTRUE);
	}
}	

void TMrbDGFEventBuffer::Print(ostream & OutStrm, Int_t EventNumber, const Char_t * ModuleInfo) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGFEventBuffer::Print
// Purpose:        Print buffer headers
// Arguments:      ostream & OutStrm       -- output stream
//                 Int_t EventNumber       -- event number
//                 Char_t * ModuleInfo     -- module info
// Results:        --
// Exceptions:
// Description:    Outputs buffer / event / channel headers. 
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	TString timStr;
	TMrbDGFEvent * evt;
	Int_t chnAddr;
	Int_t i;
	UShort_t evtTime[3];

	if (EventNumber < 0) {
		if (fNofWords > 0) {
			evtTime[0] = fArray[TMrbDGFEventBuffer::kRunStartTime];
			evtTime[1] = fArray[TMrbDGFEventBuffer::kRunStartTime + 1];
			evtTime[2] = fArray[TMrbDGFEventBuffer::kRunStartTime + 2];
			OutStrm	<< "===========================================================================================" << endl;
			if (ModuleInfo) {
				OutStrm	<< " DGF-4C Event buffer: Module " << ModuleInfo << endl;
			} else {
				OutStrm	<< " DGF-4C Event buffer" << endl;
			}
			OutStrm	<< "..........................................................................................." << endl
						<< " Number of data words        : " << fNofWords << endl
						<< " Module number               : " << fArray[TMrbDGFEventBuffer::kModNumber] << endl
						<< " Format descriptor           : 0x"
						<< setbase(16) << fArray[TMrbDGFEventBuffer::kFormat] << setbase(10) << endl
						<< " Run start time              : " << this->BufferTime2Ascii(timStr, evtTime)
						<< setbase(16) << " (0x" << fArray[TMrbDGFEventBuffer::kRunStartTime]
						<< " 0x" << fArray[TMrbDGFEventBuffer::kRunStartTime + 1]
						<< " 0x" << fArray[TMrbDGFEventBuffer::kRunStartTime + 2]
						<< ")" << endl
						<< " Number of events            : " << fNofEvents << endl
						<< " Common trace error          : " << fTraceError << endl;
			if (fGlobIndex != -1) OutStrm	<< " Global buffer index         : " << fGlobIndex << endl;
			OutStrm	<< "-------------------------------------------------------------------------------------------" << endl;
			for (Int_t i = 0; i < this->GetNofEvents(); i++) this->Print(OutStrm, i);
		} else {
			gMrbLog->Err() << "Event buffer is empty" << endl;
			gMrbLog->Flush(this->ClassName(), "Print");
		}
	} else if (EventNumber >= fNofEvents) {
		gMrbLog->Err()	<< "Event number out of range - " << EventNumber
							<< " (should be in [0," << fNofEvents - 1 << "])" << endl;
		gMrbLog->Flush(this->ClassName(), "Print");
	} else {
		evt = (TMrbDGFEvent *) fEventIndex.At(EventNumber);
		evtTime[0] = fArray[TMrbDGFEventBuffer::kRunStartTime];
		evtTime[1] = fArray[TMrbDGFEventBuffer::kBufHeaderLength + TMrbDGFEventBuffer::kEventTime];
		evtTime[2] = fArray[TMrbDGFEventBuffer::kBufHeaderLength + TMrbDGFEventBuffer::kEventTime + 1];
		OutStrm	<< "===========================================================================================" << endl;
		if (fGlobIndex == -1)	OutStrm	<< " Event # " << EventNumber << endl;
		else					OutStrm	<< " Event # " << EventNumber << " (local), "
											<< (EventNumber - fGlobEventNo) << " (global)" << endl;
		OutStrm	<< "..........................................................................................." << endl
					<< " Event time                  : " << this->BufferTime2Ascii(timStr, evtTime)
					<< setbase(16) << " ([0x" << fArray[TMrbDGFEventBuffer::kRunStartTime]
					<< "] 0x" << fArray[TMrbDGFEventBuffer::kBufHeaderLength + TMrbDGFEventBuffer::kEventTime]
					<< " 0x" << fArray[TMrbDGFEventBuffer::kBufHeaderLength + TMrbDGFEventBuffer::kEventTime + 1]
					<< ")" << endl
					<< " Number of active channels   : " << evt->GetNofChannels() << endl
					<< " Hit pattern                 : " << evt->GetHitPattern() << endl
					<< "-------------------------------------------------------------------------------------------" << endl;
		if (evt->GetNofChannels() > 0) {
			for (i = 0; i < TMrbDGFData::kNofChannels; i++) {
				chnAddr = evt->GetChannel(i);
				if (chnAddr > 0) {
					if (i > 0) OutStrm	<< "..........................................................................................." << endl;
					OutStrm	<< " Channel # " << i << endl
								<< "..........................................................................................." << endl
								<< " Number of data words        : " << fArray[chnAddr + TMrbDGFEventBuffer::kChanNofWords] << endl
								<< " Fast Trigger                : " << fArray[chnAddr + TMrbDGFEventBuffer::kFastTrigger] << endl
								<< " Energy                      : " << fArray[chnAddr + TMrbDGFEventBuffer::kEnergy] << endl
								<< " Const fraction trigger time : " << fArray[chnAddr + TMrbDGFEventBuffer::kConstFractTriggerTime] << endl;
				}
			}
			OutStrm	<< "-------------------------------------------------------------------------------------------" << endl;
		}
	}
}

Bool_t TMrbDGFEventBuffer::WriteToFile(const Char_t * FileName, const Char_t * ModuleInfo) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGF::WriteToFile
// Purpose:        Print event buffer to file
// Arguments:      Char_t * FileName             -- file name
//                 char _t * ModuleInfo          -- module info
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    Outputs event data to file.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	Int_t nofWords;
	TString fileName;
	ofstream bufOut;
	
	this->MakeIndex();
	nofWords = this->GetNofWords();
	if (nofWords == 0) {
		gMrbLog->Err()	<< ModuleInfo << ": Event buffer is empty" << endl;
		gMrbLog->Flush(this->ClassName(), "WriteToFile");
		return(kFALSE);
	}

	fileName = FileName;
	fileName = fileName.Strip(TString::kBoth);
	
	bufOut.open(fileName.Data(), ios::out);
	if (!bufOut.good()) {
		gMrbLog->Err() << gSystem->GetError() << " - " << fileName << endl;
		gMrbLog->Flush(this->ClassName(), "WriteToFile");
		return(kFALSE);
	}

	this->Print(bufOut, -1, ModuleInfo);
	bufOut.close();
	gMrbLog->Out()	<< ModuleInfo << ": Event buffer written to file " << fileName
						<< " (" << nofWords << " word(s))" << endl;
	gMrbLog->Flush(this->ClassName(), "WriteToFile", setblue);
	return(kTRUE);
}
	
const Char_t * TMrbDGFEventBuffer::BufferTime2Ascii(TString & TimeString, UShort_t * TimeArray) const {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGFEventBuffer::BufferTime2Ascii
// Purpose:        Convert 48-bit time to ascii
// Arguments:      TString & TimeString  -- where to store event time
//                 UShort_t * TimeArray  -- original 48 bit time
// Results:        Char_t * TimeString   -- same as arg#1
// Exceptions:
// Description:    Converts a 48-bit event time to ascii.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	TimeString = Form("%18lld", TimeArray);
	TimeString = TimeString.Strip(TString::kBoth);
	return(TimeString.Data());
}

 TMrbDGFEventBuffer.cxx:1
 TMrbDGFEventBuffer.cxx:2
 TMrbDGFEventBuffer.cxx:3
 TMrbDGFEventBuffer.cxx:4
 TMrbDGFEventBuffer.cxx:5
 TMrbDGFEventBuffer.cxx:6
 TMrbDGFEventBuffer.cxx:7
 TMrbDGFEventBuffer.cxx:8
 TMrbDGFEventBuffer.cxx:9
 TMrbDGFEventBuffer.cxx:10
 TMrbDGFEventBuffer.cxx:11
 TMrbDGFEventBuffer.cxx:12
 TMrbDGFEventBuffer.cxx:13
 TMrbDGFEventBuffer.cxx:14
 TMrbDGFEventBuffer.cxx:15
 TMrbDGFEventBuffer.cxx:16
 TMrbDGFEventBuffer.cxx:17
 TMrbDGFEventBuffer.cxx:18
 TMrbDGFEventBuffer.cxx:19
 TMrbDGFEventBuffer.cxx:20
 TMrbDGFEventBuffer.cxx:21
 TMrbDGFEventBuffer.cxx:22
 TMrbDGFEventBuffer.cxx:23
 TMrbDGFEventBuffer.cxx:24
 TMrbDGFEventBuffer.cxx:25
 TMrbDGFEventBuffer.cxx:26
 TMrbDGFEventBuffer.cxx:27
 TMrbDGFEventBuffer.cxx:28
 TMrbDGFEventBuffer.cxx:29
 TMrbDGFEventBuffer.cxx:30
 TMrbDGFEventBuffer.cxx:31
 TMrbDGFEventBuffer.cxx:32
 TMrbDGFEventBuffer.cxx:33
 TMrbDGFEventBuffer.cxx:34
 TMrbDGFEventBuffer.cxx:35
 TMrbDGFEventBuffer.cxx:36
 TMrbDGFEventBuffer.cxx:37
 TMrbDGFEventBuffer.cxx:38
 TMrbDGFEventBuffer.cxx:39
 TMrbDGFEventBuffer.cxx:40
 TMrbDGFEventBuffer.cxx:41
 TMrbDGFEventBuffer.cxx:42
 TMrbDGFEventBuffer.cxx:43
 TMrbDGFEventBuffer.cxx:44
 TMrbDGFEventBuffer.cxx:45
 TMrbDGFEventBuffer.cxx:46
 TMrbDGFEventBuffer.cxx:47
 TMrbDGFEventBuffer.cxx:48
 TMrbDGFEventBuffer.cxx:49
 TMrbDGFEventBuffer.cxx:50
 TMrbDGFEventBuffer.cxx:51
 TMrbDGFEventBuffer.cxx:52
 TMrbDGFEventBuffer.cxx:53
 TMrbDGFEventBuffer.cxx:54
 TMrbDGFEventBuffer.cxx:55
 TMrbDGFEventBuffer.cxx:56
 TMrbDGFEventBuffer.cxx:57
 TMrbDGFEventBuffer.cxx:58
 TMrbDGFEventBuffer.cxx:59
 TMrbDGFEventBuffer.cxx:60
 TMrbDGFEventBuffer.cxx:61
 TMrbDGFEventBuffer.cxx:62
 TMrbDGFEventBuffer.cxx:63
 TMrbDGFEventBuffer.cxx:64
 TMrbDGFEventBuffer.cxx:65
 TMrbDGFEventBuffer.cxx:66
 TMrbDGFEventBuffer.cxx:67
 TMrbDGFEventBuffer.cxx:68
 TMrbDGFEventBuffer.cxx:69
 TMrbDGFEventBuffer.cxx:70
 TMrbDGFEventBuffer.cxx:71
 TMrbDGFEventBuffer.cxx:72
 TMrbDGFEventBuffer.cxx:73
 TMrbDGFEventBuffer.cxx:74
 TMrbDGFEventBuffer.cxx:75
 TMrbDGFEventBuffer.cxx:76
 TMrbDGFEventBuffer.cxx:77
 TMrbDGFEventBuffer.cxx:78
 TMrbDGFEventBuffer.cxx:79
 TMrbDGFEventBuffer.cxx:80
 TMrbDGFEventBuffer.cxx:81
 TMrbDGFEventBuffer.cxx:82
 TMrbDGFEventBuffer.cxx:83
 TMrbDGFEventBuffer.cxx:84
 TMrbDGFEventBuffer.cxx:85
 TMrbDGFEventBuffer.cxx:86
 TMrbDGFEventBuffer.cxx:87
 TMrbDGFEventBuffer.cxx:88
 TMrbDGFEventBuffer.cxx:89
 TMrbDGFEventBuffer.cxx:90
 TMrbDGFEventBuffer.cxx:91
 TMrbDGFEventBuffer.cxx:92
 TMrbDGFEventBuffer.cxx:93
 TMrbDGFEventBuffer.cxx:94
 TMrbDGFEventBuffer.cxx:95
 TMrbDGFEventBuffer.cxx:96
 TMrbDGFEventBuffer.cxx:97
 TMrbDGFEventBuffer.cxx:98
 TMrbDGFEventBuffer.cxx:99
 TMrbDGFEventBuffer.cxx:100
 TMrbDGFEventBuffer.cxx:101
 TMrbDGFEventBuffer.cxx:102
 TMrbDGFEventBuffer.cxx:103
 TMrbDGFEventBuffer.cxx:104
 TMrbDGFEventBuffer.cxx:105
 TMrbDGFEventBuffer.cxx:106
 TMrbDGFEventBuffer.cxx:107
 TMrbDGFEventBuffer.cxx:108
 TMrbDGFEventBuffer.cxx:109
 TMrbDGFEventBuffer.cxx:110
 TMrbDGFEventBuffer.cxx:111
 TMrbDGFEventBuffer.cxx:112
 TMrbDGFEventBuffer.cxx:113
 TMrbDGFEventBuffer.cxx:114
 TMrbDGFEventBuffer.cxx:115
 TMrbDGFEventBuffer.cxx:116
 TMrbDGFEventBuffer.cxx:117
 TMrbDGFEventBuffer.cxx:118
 TMrbDGFEventBuffer.cxx:119
 TMrbDGFEventBuffer.cxx:120
 TMrbDGFEventBuffer.cxx:121
 TMrbDGFEventBuffer.cxx:122
 TMrbDGFEventBuffer.cxx:123
 TMrbDGFEventBuffer.cxx:124
 TMrbDGFEventBuffer.cxx:125
 TMrbDGFEventBuffer.cxx:126
 TMrbDGFEventBuffer.cxx:127
 TMrbDGFEventBuffer.cxx:128
 TMrbDGFEventBuffer.cxx:129
 TMrbDGFEventBuffer.cxx:130
 TMrbDGFEventBuffer.cxx:131
 TMrbDGFEventBuffer.cxx:132
 TMrbDGFEventBuffer.cxx:133
 TMrbDGFEventBuffer.cxx:134
 TMrbDGFEventBuffer.cxx:135
 TMrbDGFEventBuffer.cxx:136
 TMrbDGFEventBuffer.cxx:137
 TMrbDGFEventBuffer.cxx:138
 TMrbDGFEventBuffer.cxx:139
 TMrbDGFEventBuffer.cxx:140
 TMrbDGFEventBuffer.cxx:141
 TMrbDGFEventBuffer.cxx:142
 TMrbDGFEventBuffer.cxx:143
 TMrbDGFEventBuffer.cxx:144
 TMrbDGFEventBuffer.cxx:145
 TMrbDGFEventBuffer.cxx:146
 TMrbDGFEventBuffer.cxx:147
 TMrbDGFEventBuffer.cxx:148
 TMrbDGFEventBuffer.cxx:149
 TMrbDGFEventBuffer.cxx:150
 TMrbDGFEventBuffer.cxx:151
 TMrbDGFEventBuffer.cxx:152
 TMrbDGFEventBuffer.cxx:153
 TMrbDGFEventBuffer.cxx:154
 TMrbDGFEventBuffer.cxx:155
 TMrbDGFEventBuffer.cxx:156
 TMrbDGFEventBuffer.cxx:157
 TMrbDGFEventBuffer.cxx:158
 TMrbDGFEventBuffer.cxx:159
 TMrbDGFEventBuffer.cxx:160
 TMrbDGFEventBuffer.cxx:161
 TMrbDGFEventBuffer.cxx:162
 TMrbDGFEventBuffer.cxx:163
 TMrbDGFEventBuffer.cxx:164
 TMrbDGFEventBuffer.cxx:165
 TMrbDGFEventBuffer.cxx:166
 TMrbDGFEventBuffer.cxx:167
 TMrbDGFEventBuffer.cxx:168
 TMrbDGFEventBuffer.cxx:169
 TMrbDGFEventBuffer.cxx:170
 TMrbDGFEventBuffer.cxx:171
 TMrbDGFEventBuffer.cxx:172
 TMrbDGFEventBuffer.cxx:173
 TMrbDGFEventBuffer.cxx:174
 TMrbDGFEventBuffer.cxx:175
 TMrbDGFEventBuffer.cxx:176
 TMrbDGFEventBuffer.cxx:177
 TMrbDGFEventBuffer.cxx:178
 TMrbDGFEventBuffer.cxx:179
 TMrbDGFEventBuffer.cxx:180
 TMrbDGFEventBuffer.cxx:181
 TMrbDGFEventBuffer.cxx:182
 TMrbDGFEventBuffer.cxx:183
 TMrbDGFEventBuffer.cxx:184
 TMrbDGFEventBuffer.cxx:185
 TMrbDGFEventBuffer.cxx:186
 TMrbDGFEventBuffer.cxx:187
 TMrbDGFEventBuffer.cxx:188
 TMrbDGFEventBuffer.cxx:189
 TMrbDGFEventBuffer.cxx:190
 TMrbDGFEventBuffer.cxx:191
 TMrbDGFEventBuffer.cxx:192
 TMrbDGFEventBuffer.cxx:193
 TMrbDGFEventBuffer.cxx:194
 TMrbDGFEventBuffer.cxx:195
 TMrbDGFEventBuffer.cxx:196
 TMrbDGFEventBuffer.cxx:197
 TMrbDGFEventBuffer.cxx:198
 TMrbDGFEventBuffer.cxx:199
 TMrbDGFEventBuffer.cxx:200
 TMrbDGFEventBuffer.cxx:201
 TMrbDGFEventBuffer.cxx:202
 TMrbDGFEventBuffer.cxx:203
 TMrbDGFEventBuffer.cxx:204
 TMrbDGFEventBuffer.cxx:205
 TMrbDGFEventBuffer.cxx:206
 TMrbDGFEventBuffer.cxx:207
 TMrbDGFEventBuffer.cxx:208
 TMrbDGFEventBuffer.cxx:209
 TMrbDGFEventBuffer.cxx:210
 TMrbDGFEventBuffer.cxx:211
 TMrbDGFEventBuffer.cxx:212
 TMrbDGFEventBuffer.cxx:213
 TMrbDGFEventBuffer.cxx:214
 TMrbDGFEventBuffer.cxx:215
 TMrbDGFEventBuffer.cxx:216
 TMrbDGFEventBuffer.cxx:217
 TMrbDGFEventBuffer.cxx:218
 TMrbDGFEventBuffer.cxx:219
 TMrbDGFEventBuffer.cxx:220
 TMrbDGFEventBuffer.cxx:221
 TMrbDGFEventBuffer.cxx:222
 TMrbDGFEventBuffer.cxx:223
 TMrbDGFEventBuffer.cxx:224
 TMrbDGFEventBuffer.cxx:225
 TMrbDGFEventBuffer.cxx:226
 TMrbDGFEventBuffer.cxx:227
 TMrbDGFEventBuffer.cxx:228
 TMrbDGFEventBuffer.cxx:229
 TMrbDGFEventBuffer.cxx:230
 TMrbDGFEventBuffer.cxx:231
 TMrbDGFEventBuffer.cxx:232
 TMrbDGFEventBuffer.cxx:233
 TMrbDGFEventBuffer.cxx:234
 TMrbDGFEventBuffer.cxx:235
 TMrbDGFEventBuffer.cxx:236
 TMrbDGFEventBuffer.cxx:237
 TMrbDGFEventBuffer.cxx:238
 TMrbDGFEventBuffer.cxx:239
 TMrbDGFEventBuffer.cxx:240
 TMrbDGFEventBuffer.cxx:241
 TMrbDGFEventBuffer.cxx:242
 TMrbDGFEventBuffer.cxx:243
 TMrbDGFEventBuffer.cxx:244
 TMrbDGFEventBuffer.cxx:245
 TMrbDGFEventBuffer.cxx:246
 TMrbDGFEventBuffer.cxx:247
 TMrbDGFEventBuffer.cxx:248
 TMrbDGFEventBuffer.cxx:249
 TMrbDGFEventBuffer.cxx:250
 TMrbDGFEventBuffer.cxx:251
 TMrbDGFEventBuffer.cxx:252
 TMrbDGFEventBuffer.cxx:253
 TMrbDGFEventBuffer.cxx:254
 TMrbDGFEventBuffer.cxx:255
 TMrbDGFEventBuffer.cxx:256
 TMrbDGFEventBuffer.cxx:257
 TMrbDGFEventBuffer.cxx:258
 TMrbDGFEventBuffer.cxx:259
 TMrbDGFEventBuffer.cxx:260
 TMrbDGFEventBuffer.cxx:261
 TMrbDGFEventBuffer.cxx:262
 TMrbDGFEventBuffer.cxx:263
 TMrbDGFEventBuffer.cxx:264
 TMrbDGFEventBuffer.cxx:265
 TMrbDGFEventBuffer.cxx:266
 TMrbDGFEventBuffer.cxx:267
 TMrbDGFEventBuffer.cxx:268
 TMrbDGFEventBuffer.cxx:269
 TMrbDGFEventBuffer.cxx:270
 TMrbDGFEventBuffer.cxx:271
 TMrbDGFEventBuffer.cxx:272
 TMrbDGFEventBuffer.cxx:273
 TMrbDGFEventBuffer.cxx:274
 TMrbDGFEventBuffer.cxx:275
 TMrbDGFEventBuffer.cxx:276
 TMrbDGFEventBuffer.cxx:277
 TMrbDGFEventBuffer.cxx:278
 TMrbDGFEventBuffer.cxx:279
 TMrbDGFEventBuffer.cxx:280
 TMrbDGFEventBuffer.cxx:281
 TMrbDGFEventBuffer.cxx:282
 TMrbDGFEventBuffer.cxx:283
 TMrbDGFEventBuffer.cxx:284
 TMrbDGFEventBuffer.cxx:285
 TMrbDGFEventBuffer.cxx:286
 TMrbDGFEventBuffer.cxx:287
 TMrbDGFEventBuffer.cxx:288
 TMrbDGFEventBuffer.cxx:289
 TMrbDGFEventBuffer.cxx:290
 TMrbDGFEventBuffer.cxx:291
 TMrbDGFEventBuffer.cxx:292
 TMrbDGFEventBuffer.cxx:293
 TMrbDGFEventBuffer.cxx:294
 TMrbDGFEventBuffer.cxx:295
 TMrbDGFEventBuffer.cxx:296
 TMrbDGFEventBuffer.cxx:297
 TMrbDGFEventBuffer.cxx:298
 TMrbDGFEventBuffer.cxx:299
 TMrbDGFEventBuffer.cxx:300
 TMrbDGFEventBuffer.cxx:301
 TMrbDGFEventBuffer.cxx:302
 TMrbDGFEventBuffer.cxx:303
 TMrbDGFEventBuffer.cxx:304
 TMrbDGFEventBuffer.cxx:305
 TMrbDGFEventBuffer.cxx:306
 TMrbDGFEventBuffer.cxx:307
 TMrbDGFEventBuffer.cxx:308
 TMrbDGFEventBuffer.cxx:309
 TMrbDGFEventBuffer.cxx:310
 TMrbDGFEventBuffer.cxx:311
 TMrbDGFEventBuffer.cxx:312
 TMrbDGFEventBuffer.cxx:313
 TMrbDGFEventBuffer.cxx:314
 TMrbDGFEventBuffer.cxx:315
 TMrbDGFEventBuffer.cxx:316
 TMrbDGFEventBuffer.cxx:317
 TMrbDGFEventBuffer.cxx:318
 TMrbDGFEventBuffer.cxx:319
 TMrbDGFEventBuffer.cxx:320
 TMrbDGFEventBuffer.cxx:321
 TMrbDGFEventBuffer.cxx:322
 TMrbDGFEventBuffer.cxx:323
 TMrbDGFEventBuffer.cxx:324
 TMrbDGFEventBuffer.cxx:325
 TMrbDGFEventBuffer.cxx:326
 TMrbDGFEventBuffer.cxx:327
 TMrbDGFEventBuffer.cxx:328
 TMrbDGFEventBuffer.cxx:329
 TMrbDGFEventBuffer.cxx:330
 TMrbDGFEventBuffer.cxx:331
 TMrbDGFEventBuffer.cxx:332
 TMrbDGFEventBuffer.cxx:333
 TMrbDGFEventBuffer.cxx:334
 TMrbDGFEventBuffer.cxx:335
 TMrbDGFEventBuffer.cxx:336
 TMrbDGFEventBuffer.cxx:337
 TMrbDGFEventBuffer.cxx:338
 TMrbDGFEventBuffer.cxx:339
 TMrbDGFEventBuffer.cxx:340
 TMrbDGFEventBuffer.cxx:341
 TMrbDGFEventBuffer.cxx:342
 TMrbDGFEventBuffer.cxx:343
 TMrbDGFEventBuffer.cxx:344
 TMrbDGFEventBuffer.cxx:345
 TMrbDGFEventBuffer.cxx:346
 TMrbDGFEventBuffer.cxx:347
 TMrbDGFEventBuffer.cxx:348
 TMrbDGFEventBuffer.cxx:349
 TMrbDGFEventBuffer.cxx:350
 TMrbDGFEventBuffer.cxx:351
 TMrbDGFEventBuffer.cxx:352
 TMrbDGFEventBuffer.cxx:353
 TMrbDGFEventBuffer.cxx:354
 TMrbDGFEventBuffer.cxx:355
 TMrbDGFEventBuffer.cxx:356
 TMrbDGFEventBuffer.cxx:357
 TMrbDGFEventBuffer.cxx:358
 TMrbDGFEventBuffer.cxx:359
 TMrbDGFEventBuffer.cxx:360
 TMrbDGFEventBuffer.cxx:361
 TMrbDGFEventBuffer.cxx:362
 TMrbDGFEventBuffer.cxx:363
 TMrbDGFEventBuffer.cxx:364
 TMrbDGFEventBuffer.cxx:365
 TMrbDGFEventBuffer.cxx:366
 TMrbDGFEventBuffer.cxx:367
 TMrbDGFEventBuffer.cxx:368
 TMrbDGFEventBuffer.cxx:369
 TMrbDGFEventBuffer.cxx:370
 TMrbDGFEventBuffer.cxx:371
 TMrbDGFEventBuffer.cxx:372
 TMrbDGFEventBuffer.cxx:373
 TMrbDGFEventBuffer.cxx:374
 TMrbDGFEventBuffer.cxx:375
 TMrbDGFEventBuffer.cxx:376
 TMrbDGFEventBuffer.cxx:377
 TMrbDGFEventBuffer.cxx:378
 TMrbDGFEventBuffer.cxx:379
 TMrbDGFEventBuffer.cxx:380
 TMrbDGFEventBuffer.cxx:381
 TMrbDGFEventBuffer.cxx:382
 TMrbDGFEventBuffer.cxx:383
 TMrbDGFEventBuffer.cxx:384
 TMrbDGFEventBuffer.cxx:385
 TMrbDGFEventBuffer.cxx:386
 TMrbDGFEventBuffer.cxx:387
 TMrbDGFEventBuffer.cxx:388
 TMrbDGFEventBuffer.cxx:389
 TMrbDGFEventBuffer.cxx:390
 TMrbDGFEventBuffer.cxx:391
 TMrbDGFEventBuffer.cxx:392
 TMrbDGFEventBuffer.cxx:393
 TMrbDGFEventBuffer.cxx:394
 TMrbDGFEventBuffer.cxx:395
 TMrbDGFEventBuffer.cxx:396
 TMrbDGFEventBuffer.cxx:397
 TMrbDGFEventBuffer.cxx:398
 TMrbDGFEventBuffer.cxx:399
 TMrbDGFEventBuffer.cxx:400
 TMrbDGFEventBuffer.cxx:401
 TMrbDGFEventBuffer.cxx:402
 TMrbDGFEventBuffer.cxx:403
 TMrbDGFEventBuffer.cxx:404
 TMrbDGFEventBuffer.cxx:405
 TMrbDGFEventBuffer.cxx:406
 TMrbDGFEventBuffer.cxx:407
 TMrbDGFEventBuffer.cxx:408
 TMrbDGFEventBuffer.cxx:409
 TMrbDGFEventBuffer.cxx:410
 TMrbDGFEventBuffer.cxx:411
 TMrbDGFEventBuffer.cxx:412
 TMrbDGFEventBuffer.cxx:413
 TMrbDGFEventBuffer.cxx:414
 TMrbDGFEventBuffer.cxx:415
 TMrbDGFEventBuffer.cxx:416
 TMrbDGFEventBuffer.cxx:417
 TMrbDGFEventBuffer.cxx:418
 TMrbDGFEventBuffer.cxx:419
 TMrbDGFEventBuffer.cxx:420
 TMrbDGFEventBuffer.cxx:421
 TMrbDGFEventBuffer.cxx:422
 TMrbDGFEventBuffer.cxx:423
 TMrbDGFEventBuffer.cxx:424
 TMrbDGFEventBuffer.cxx:425
 TMrbDGFEventBuffer.cxx:426
 TMrbDGFEventBuffer.cxx:427
 TMrbDGFEventBuffer.cxx:428
 TMrbDGFEventBuffer.cxx:429
 TMrbDGFEventBuffer.cxx:430
 TMrbDGFEventBuffer.cxx:431
 TMrbDGFEventBuffer.cxx:432
 TMrbDGFEventBuffer.cxx:433
 TMrbDGFEventBuffer.cxx:434
 TMrbDGFEventBuffer.cxx:435
 TMrbDGFEventBuffer.cxx:436
 TMrbDGFEventBuffer.cxx:437
 TMrbDGFEventBuffer.cxx:438
 TMrbDGFEventBuffer.cxx:439
 TMrbDGFEventBuffer.cxx:440
 TMrbDGFEventBuffer.cxx:441
 TMrbDGFEventBuffer.cxx:442
 TMrbDGFEventBuffer.cxx:443
 TMrbDGFEventBuffer.cxx:444
 TMrbDGFEventBuffer.cxx:445
 TMrbDGFEventBuffer.cxx:446
 TMrbDGFEventBuffer.cxx:447
 TMrbDGFEventBuffer.cxx:448
 TMrbDGFEventBuffer.cxx:449
 TMrbDGFEventBuffer.cxx:450
 TMrbDGFEventBuffer.cxx:451
 TMrbDGFEventBuffer.cxx:452
 TMrbDGFEventBuffer.cxx:453
 TMrbDGFEventBuffer.cxx:454
 TMrbDGFEventBuffer.cxx:455
 TMrbDGFEventBuffer.cxx:456
 TMrbDGFEventBuffer.cxx:457
 TMrbDGFEventBuffer.cxx:458
 TMrbDGFEventBuffer.cxx:459
 TMrbDGFEventBuffer.cxx:460
 TMrbDGFEventBuffer.cxx:461
 TMrbDGFEventBuffer.cxx:462
 TMrbDGFEventBuffer.cxx:463
 TMrbDGFEventBuffer.cxx:464
 TMrbDGFEventBuffer.cxx:465
 TMrbDGFEventBuffer.cxx:466
 TMrbDGFEventBuffer.cxx:467
 TMrbDGFEventBuffer.cxx:468
 TMrbDGFEventBuffer.cxx:469
 TMrbDGFEventBuffer.cxx:470
 TMrbDGFEventBuffer.cxx:471
 TMrbDGFEventBuffer.cxx:472
 TMrbDGFEventBuffer.cxx:473
 TMrbDGFEventBuffer.cxx:474
 TMrbDGFEventBuffer.cxx:475
 TMrbDGFEventBuffer.cxx:476
 TMrbDGFEventBuffer.cxx:477
 TMrbDGFEventBuffer.cxx:478
 TMrbDGFEventBuffer.cxx:479
 TMrbDGFEventBuffer.cxx:480
 TMrbDGFEventBuffer.cxx:481
 TMrbDGFEventBuffer.cxx:482
 TMrbDGFEventBuffer.cxx:483
 TMrbDGFEventBuffer.cxx:484
 TMrbDGFEventBuffer.cxx:485
 TMrbDGFEventBuffer.cxx:486
 TMrbDGFEventBuffer.cxx:487
 TMrbDGFEventBuffer.cxx:488
 TMrbDGFEventBuffer.cxx:489
 TMrbDGFEventBuffer.cxx:490
 TMrbDGFEventBuffer.cxx:491
 TMrbDGFEventBuffer.cxx:492
 TMrbDGFEventBuffer.cxx:493
 TMrbDGFEventBuffer.cxx:494
 TMrbDGFEventBuffer.cxx:495
 TMrbDGFEventBuffer.cxx:496
 TMrbDGFEventBuffer.cxx:497
 TMrbDGFEventBuffer.cxx:498
 TMrbDGFEventBuffer.cxx:499
 TMrbDGFEventBuffer.cxx:500
 TMrbDGFEventBuffer.cxx:501
 TMrbDGFEventBuffer.cxx:502
 TMrbDGFEventBuffer.cxx:503
 TMrbDGFEventBuffer.cxx:504
 TMrbDGFEventBuffer.cxx:505
 TMrbDGFEventBuffer.cxx:506
 TMrbDGFEventBuffer.cxx:507
 TMrbDGFEventBuffer.cxx:508
 TMrbDGFEventBuffer.cxx:509
 TMrbDGFEventBuffer.cxx:510
 TMrbDGFEventBuffer.cxx:511
 TMrbDGFEventBuffer.cxx:512
 TMrbDGFEventBuffer.cxx:513
 TMrbDGFEventBuffer.cxx:514
 TMrbDGFEventBuffer.cxx:515
 TMrbDGFEventBuffer.cxx:516
 TMrbDGFEventBuffer.cxx:517
 TMrbDGFEventBuffer.cxx:518
 TMrbDGFEventBuffer.cxx:519
 TMrbDGFEventBuffer.cxx:520
 TMrbDGFEventBuffer.cxx:521
 TMrbDGFEventBuffer.cxx:522
 TMrbDGFEventBuffer.cxx:523
 TMrbDGFEventBuffer.cxx:524
 TMrbDGFEventBuffer.cxx:525
 TMrbDGFEventBuffer.cxx:526
 TMrbDGFEventBuffer.cxx:527
 TMrbDGFEventBuffer.cxx:528
 TMrbDGFEventBuffer.cxx:529
 TMrbDGFEventBuffer.cxx:530
 TMrbDGFEventBuffer.cxx:531
 TMrbDGFEventBuffer.cxx:532
 TMrbDGFEventBuffer.cxx:533
 TMrbDGFEventBuffer.cxx:534
 TMrbDGFEventBuffer.cxx:535
 TMrbDGFEventBuffer.cxx:536
 TMrbDGFEventBuffer.cxx:537
 TMrbDGFEventBuffer.cxx:538
 TMrbDGFEventBuffer.cxx:539
 TMrbDGFEventBuffer.cxx:540
 TMrbDGFEventBuffer.cxx:541
 TMrbDGFEventBuffer.cxx:542
 TMrbDGFEventBuffer.cxx:543
 TMrbDGFEventBuffer.cxx:544
 TMrbDGFEventBuffer.cxx:545
 TMrbDGFEventBuffer.cxx:546
 TMrbDGFEventBuffer.cxx:547
 TMrbDGFEventBuffer.cxx:548
 TMrbDGFEventBuffer.cxx:549
 TMrbDGFEventBuffer.cxx:550
 TMrbDGFEventBuffer.cxx:551
 TMrbDGFEventBuffer.cxx:552
 TMrbDGFEventBuffer.cxx:553
 TMrbDGFEventBuffer.cxx:554
 TMrbDGFEventBuffer.cxx:555
 TMrbDGFEventBuffer.cxx:556
 TMrbDGFEventBuffer.cxx:557
 TMrbDGFEventBuffer.cxx:558
 TMrbDGFEventBuffer.cxx:559
 TMrbDGFEventBuffer.cxx:560
 TMrbDGFEventBuffer.cxx:561
 TMrbDGFEventBuffer.cxx:562
 TMrbDGFEventBuffer.cxx:563
 TMrbDGFEventBuffer.cxx:564
 TMrbDGFEventBuffer.cxx:565
 TMrbDGFEventBuffer.cxx:566
 TMrbDGFEventBuffer.cxx:567
 TMrbDGFEventBuffer.cxx:568
 TMrbDGFEventBuffer.cxx:569
 TMrbDGFEventBuffer.cxx:570
 TMrbDGFEventBuffer.cxx:571
 TMrbDGFEventBuffer.cxx:572
 TMrbDGFEventBuffer.cxx:573
 TMrbDGFEventBuffer.cxx:574
 TMrbDGFEventBuffer.cxx:575
 TMrbDGFEventBuffer.cxx:576
 TMrbDGFEventBuffer.cxx:577
 TMrbDGFEventBuffer.cxx:578
 TMrbDGFEventBuffer.cxx:579
 TMrbDGFEventBuffer.cxx:580
 TMrbDGFEventBuffer.cxx:581
 TMrbDGFEventBuffer.cxx:582
 TMrbDGFEventBuffer.cxx:583
 TMrbDGFEventBuffer.cxx:584
 TMrbDGFEventBuffer.cxx:585
 TMrbDGFEventBuffer.cxx:586
 TMrbDGFEventBuffer.cxx:587
 TMrbDGFEventBuffer.cxx:588
 TMrbDGFEventBuffer.cxx:589
 TMrbDGFEventBuffer.cxx:590
 TMrbDGFEventBuffer.cxx:591
 TMrbDGFEventBuffer.cxx:592
 TMrbDGFEventBuffer.cxx:593
 TMrbDGFEventBuffer.cxx:594
 TMrbDGFEventBuffer.cxx:595
 TMrbDGFEventBuffer.cxx:596
 TMrbDGFEventBuffer.cxx:597
 TMrbDGFEventBuffer.cxx:598
 TMrbDGFEventBuffer.cxx:599
 TMrbDGFEventBuffer.cxx:600
 TMrbDGFEventBuffer.cxx:601
 TMrbDGFEventBuffer.cxx:602
 TMrbDGFEventBuffer.cxx:603
 TMrbDGFEventBuffer.cxx:604
 TMrbDGFEventBuffer.cxx:605
 TMrbDGFEventBuffer.cxx:606
 TMrbDGFEventBuffer.cxx:607
 TMrbDGFEventBuffer.cxx:608
 TMrbDGFEventBuffer.cxx:609
 TMrbDGFEventBuffer.cxx:610
 TMrbDGFEventBuffer.cxx:611
 TMrbDGFEventBuffer.cxx:612
 TMrbDGFEventBuffer.cxx:613
 TMrbDGFEventBuffer.cxx:614
 TMrbDGFEventBuffer.cxx:615
 TMrbDGFEventBuffer.cxx:616
 TMrbDGFEventBuffer.cxx:617
 TMrbDGFEventBuffer.cxx:618
 TMrbDGFEventBuffer.cxx:619
 TMrbDGFEventBuffer.cxx:620
 TMrbDGFEventBuffer.cxx:621
 TMrbDGFEventBuffer.cxx:622
 TMrbDGFEventBuffer.cxx:623
 TMrbDGFEventBuffer.cxx:624
 TMrbDGFEventBuffer.cxx:625
 TMrbDGFEventBuffer.cxx:626
 TMrbDGFEventBuffer.cxx:627
 TMrbDGFEventBuffer.cxx:628
 TMrbDGFEventBuffer.cxx:629
 TMrbDGFEventBuffer.cxx:630
 TMrbDGFEventBuffer.cxx:631
 TMrbDGFEventBuffer.cxx:632
 TMrbDGFEventBuffer.cxx:633
 TMrbDGFEventBuffer.cxx:634
 TMrbDGFEventBuffer.cxx:635
 TMrbDGFEventBuffer.cxx:636
 TMrbDGFEventBuffer.cxx:637
 TMrbDGFEventBuffer.cxx:638
 TMrbDGFEventBuffer.cxx:639
 TMrbDGFEventBuffer.cxx:640
 TMrbDGFEventBuffer.cxx:641
 TMrbDGFEventBuffer.cxx:642
 TMrbDGFEventBuffer.cxx:643
 TMrbDGFEventBuffer.cxx:644
 TMrbDGFEventBuffer.cxx:645
 TMrbDGFEventBuffer.cxx:646
 TMrbDGFEventBuffer.cxx:647
 TMrbDGFEventBuffer.cxx:648
 TMrbDGFEventBuffer.cxx:649
 TMrbDGFEventBuffer.cxx:650
 TMrbDGFEventBuffer.cxx:651
 TMrbDGFEventBuffer.cxx:652
 TMrbDGFEventBuffer.cxx:653
 TMrbDGFEventBuffer.cxx:654
 TMrbDGFEventBuffer.cxx:655
 TMrbDGFEventBuffer.cxx:656
 TMrbDGFEventBuffer.cxx:657
 TMrbDGFEventBuffer.cxx:658
 TMrbDGFEventBuffer.cxx:659
 TMrbDGFEventBuffer.cxx:660
 TMrbDGFEventBuffer.cxx:661
 TMrbDGFEventBuffer.cxx:662
 TMrbDGFEventBuffer.cxx:663
 TMrbDGFEventBuffer.cxx:664
 TMrbDGFEventBuffer.cxx:665
 TMrbDGFEventBuffer.cxx:666
 TMrbDGFEventBuffer.cxx:667
 TMrbDGFEventBuffer.cxx:668
 TMrbDGFEventBuffer.cxx:669
 TMrbDGFEventBuffer.cxx:670
 TMrbDGFEventBuffer.cxx:671
 TMrbDGFEventBuffer.cxx:672