ROOT logo
//__________________________________________________[C++ CLASS IMPLEMENTATION]
//////////////////////////////////////////////////////////////////////////////
// Name:           transport/src/TMrbTransport.cxx
//
// Purpose:        MARaBOU transport mechanism
//
// Description:    Implements class methods to read MBS data from file or server
//
// Author:         R. Lutter
// Mailto:         <a href=mailto:rudi.lutter@physik.uni-muenchen.de>R. Lutter</a>
// Revision:       $Id: TMrbTransport.cxx,v 1.17 2006-11-07 12:25:31 Rudolf.Lutter Exp $       
// Date:           
//////////////////////////////////////////////////////////////////////////////

namespace std {} using namespace std;

#include <stdio.h>
#include <iostream>
#include <errno.h>

#include "mbsio.h"
#include "mbsio_protos.h"

#include "TEnv.h"

#include "TMrbNamedX.h"
#include "TMrbTransport.h"
#include "TMrbLogger.h"

#include "SetColor.h"

// global pthread mutex to protect TMapped data
extern pthread_mutex_t global_data_mutex;

TMrbTransport * gMrbTransport = NULL;

static Char_t mbs_error_string[1024];

static SMrbNamedXShort kMrbXptLofTransportModes[]		=	{	// legal transport modes and their names
									{TMrbTransport::kSync,		"SYNCHRONOUS"		},  // synchronous: via transport manager
									{TMrbTransport::kAsync, 	"ASYNCHRONOUS"		},  // asynchronous: via stream server
									{TMrbTransport::kFile,		"FILE"				},  // file: data from (local) lmd file
									{TMrbTransport::kRemote,	"REMOTEFILE"		},  // remotefile: data from remote lmd file
									{0, 						NULL				}
								};

static SMrbNamedXShort kMrbXptLofBufferElements[]		=	{	// legal buffer elements and their names
									{TMrbTransport::kBufferHeader,		"BUFFERHEADER"		},
									{TMrbTransport::kFileHeader,		"FILEHEADER"		},
									{TMrbTransport::kEventHeader,		"EVENTHEADER"		},
									{TMrbTransport::kSubeventHeader,	"SUBEVENTHEADER"	},
									{TMrbTransport::kSubeventData,		"DATA"				},
									{0, 								NULL				}
								};

extern TMrbLogger * gMrbLog;					// message logger

ClassImp(TMrbTransport)

TMrbTransport::TMrbTransport(const Char_t * XptName, const Char_t * XptTitle) {
//__________________________________________________________________[C++ CTOR]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbTransport
//
// Purpose:        Create a MARaBOU transport object
// Arguments:      Char_t * XptName  -- name of transport
//                 Char_t * XptTitle -- (opt.) title
// Exceptions:
// Description:    Class constructor
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	if (gMrbLog == NULL) gMrbLog = new TMrbLogger();

	if (*XptTitle == '\0') {
		SetTitle("MARaBOU transport");
	} else {
		SetTitle(XptTitle);
	}
	SetName(XptName);

	fInputFile.Remove(0);				// initialize data section
	fTransportMode = kUndefined;
	fBufferSize = -1;
	fMBSDataIO = NULL;

	fStopFlag = kFALSE;

	mbs_pass_errors(mbs_error_string);	// pass mbsio errors to local buffer

										// initialize lists of key words	
	fLofTransportModes.SetName("Transport Modes");	// ... transport modes
	fLofTransportModes.SetPatternMode();
	fLofTransportModes.AddNamedX(kMrbXptLofTransportModes);	

	fLofBufferElements.SetName("Buffer Elements");	// ...buffer elements
	fLofBufferElements.SetPatternMode();
	fLofBufferElements.AddNamedX(kMrbXptLofBufferElements);

	gMrbTransport = this; 				// holds addr of current readout def
}

Bool_t TMrbTransport::Open(const Char_t * File, const Char_t * Mode, Int_t BufferSize) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbTransport::Open
// Purpose:        Open connection (file or network)
// Arguments:      Char_t * File     -- file name or network addr
//                 Char_t * Mode     -- transport mode (FILE, SYNC, ASYNC, or REMOTE)
//                 Int_t BufferSize  -- buffer size (default is 16k)
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    Opens a connection to MBS: either reading from file or via network.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	MBSDataIO *mbs;
	TMrbNamedX * pmod;

	ClearError();

	pmod = fLofTransportModes.FindByName(Mode, TMrbLofNamedX::kFindUnique | TMrbLofNamedX::kFindIgnoreCase);

	if (BufferSize <= 0) {
		gMrbLog->Err()	<< "Illegal buffer size - " << BufferSize << endl;
		gMrbLog->Flush(this->ClassName(), "Open");
		SetError();
		return(kFALSE);
	} else if (pmod == NULL) {
		gMrbLog->Err()	<< "Illegal transport mode - " << Mode << endl;
		gMrbLog->Flush(this->ClassName(), "Open");
		SetError();
		return(kFALSE);
	} else if ((mbs = mbs_open_file((Char_t *) File, (Char_t *) pmod->GetName(), BufferSize, NULL)) != NULL) {
		fInputFile = File;
		fTransportMode = (TMrbTransport::EMrbTransportMode) pmod->GetIndex();
		fBufferSize = BufferSize;
		fMBSDataIO = mbs;
		Int_t scaleDown = gEnv->GetValue("TMrbTransport.ScaleDown", 100);
		Int_t dumpInterval = gEnv->GetValue("TMrbTransport.DumpInterval", 0);
		TString showItems = gEnv->GetValue("TMrbTransport.ShowItems", "ES");
		this->SetShow(showItems.Data(), scaleDown);
		this->SetDumpInterval(dumpInterval);
		this->SetStat(scaleDown);
		return(kTRUE);
	} else {
		PrintMbsIoError("Open");
		SetError();
		return(kFALSE);
	}
}

Bool_t TMrbTransport::Close() {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbTransport::Close
// Purpose:        Close connection (file or network)
// Arguments:      --
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    Closes an open connection to MBS.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	ClearError();

	if (fMBSDataIO == NULL || fMBSDataIO->fileno == -1) return(kTRUE);

	if (!mbs_close_file(fMBSDataIO)) {
		PrintMbsIoError("Close");
		SetError();
		return(kFALSE);
	} else {
		return(kTRUE);
	}
}

Bool_t TMrbTransport::FreeBuffers() {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbTransport::FreeBuffers
// Purpose:        Free data base buffers
// Arguments:      --
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    Removes data base.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	ClearError();

	if (fMBSDataIO == NULL) return(kTRUE);

	mbs_free_dbase(fMBSDataIO);
	fMBSDataIO = NULL;
	return(kTRUE);
}

Int_t TMrbTransport::ReadEvents(Int_t NofEvents) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbTransport::ReadEvents
// Purpose:        Read events from buffer
// Arguments:      Int_t NofEvents  -- number of events to be read (0 = ad infinitum)
// Results:        Int_t Rstatus    -- status info
// Exceptions:
// Description:    Reads a given number of events from MBS buffer.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	Int_t i;
	Int_t nofEventsProcessed;
	Int_t nofErrors;
	Int_t abortOnError;
	UInt_t eventType = 0;

	ClearError();

	nofEventsProcessed = 0;
	nofErrors = 0;

	if (fMBSDataIO == NULL) {
		gMrbLog->Err()	<< "MBSIO not active" << endl;
		gMrbLog->Flush(this->ClassName(), "ReadEvents");
		SetError();
		return(kFALSE);
	}

	abortOnError = 0;
	if (NofEvents == 0) {
		for (;;) {
//			pthread_mutex_lock(&global_data_mutex);
			do {
				eventType = mbs_next_event(fMBSDataIO);
				if (this->IsToBeStopped()) {
					gMrbLog->Out()	<< "Detecting STOP flag" << endl;
					gMrbLog->Flush(this->ClassName(), "ReadEvents");
					eventType = MBS_ETYPE_EOW; 
				}
			} while (eventType == MBS_ETYPE_WAIT);
//			pthread_mutex_unlock(&global_data_mutex);
			if (eventType == MBS_ETYPE_EOF) {
				gMrbLog->Out()	<< "End of file " << fInputFile << endl;
				gMrbLog->Flush(this->ClassName(), "ReadEvents");
				SetError();
				Close();
				break;
			} else if (eventType == MBS_ETYPE_ERROR) {
				nofErrors++;
				SetError();
				abortOnError++;
				if (abortOnError > TMrbTransport::kMaxErrors) {
					gMrbLog->Err()	<< "Aborting after " << abortOnError << " subsequent errors" << endl;
					gMrbLog->Flush(this->ClassName(), "ReadEvents");
					eventType = MBS_ETYPE_ABORT;
         			break;
				}
			} else if (eventType == MBS_ETYPE_ABORT) {
				nofErrors++;
				SetError();
				PrintMbsIoError("ReadEvents");
				gMrbLog->Err()	<< "Aborting" << endl;
				gMrbLog->Flush(this->ClassName(), "ReadEvents");
				break;
			} else {
				if (eventType == MBS_ETYPE_START) {
					gMrbLog->Out()	<< "Event START (trigger 14)" << endl;
					gMrbLog->Flush(this->ClassName(), "ReadEvents");
					SetError();
				} else if (eventType == MBS_ETYPE_STOP) {
					gMrbLog->Out()	<< "Event STOP (trigger 15)" << endl;
					gMrbLog->Flush(this->ClassName(), "ReadEvents");
					SetError();
				}
				if (!ProcessEvent((s_vehe *) fMBSDataIO->evt_data)) {
					eventType = MBS_ETYPE_ERROR;
					break;
				}
				abortOnError = 0;
				nofEventsProcessed++;
			}
		}
	} else {
		for (i = 0; i < NofEvents; i++) {
			eventType = MBS_ETYPE_WAIT;
//			pthread_mutex_lock(&global_data_mutex);
			while (eventType == MBS_ETYPE_WAIT) {
				eventType = mbs_next_event(fMBSDataIO);
				if (this->IsToBeStopped()) {
					gMrbLog->Out()	<< "Detecting STOP flag" << endl;
					gMrbLog->Flush(this->ClassName(), "ReadEvents");
					eventType = MBS_ETYPE_EOF; break; 
				}
			}
//			pthread_mutex_unlock(&global_data_mutex);
			if (eventType == MBS_ETYPE_EOF) {
				gMrbLog->Out()	<< "End of file " << fInputFile << endl;
				gMrbLog->Flush(this->ClassName(), "ReadEvents");
				Close();
				SetError();
				break;
			} else if (eventType == MBS_ETYPE_ERROR) {
				nofErrors++;
				PrintMbsIoError("ReadEvents");
				SetError();
				abortOnError++;
				if (abortOnError > TMrbTransport::kMaxErrors) {
					gMrbLog->Err()	<< "Aborting after " << abortOnError << " subsequent errors" << endl;
					gMrbLog->Flush(this->ClassName(), "ReadEvents");
					eventType = MBS_ETYPE_ABORT;
					break;
				}
			} else if (eventType == MBS_ETYPE_ABORT) {
				nofErrors++;
				PrintMbsIoError("ReadEvents");
				SetError();
				gMrbLog->Err()	<< "Aborting" << endl;
				gMrbLog->Flush(this->ClassName(), "ReadEvents");
				break;
			} else {
				if (eventType == MBS_ETYPE_START) {
					gMrbLog->Out()	<< "Event START (trigger 14)" << endl;
					gMrbLog->Flush(this->ClassName(), "ReadEvents");
					SetError();
				} else if (eventType == MBS_ETYPE_STOP) {
					gMrbLog->Out()	<< "Event STOP (trigger 15)" << endl;
					gMrbLog->Flush(this->ClassName(), "ReadEvents");
					SetError();
				}
				if (!this->ProcessEvent((s_vehe *) fMBSDataIO->evt_data)) {
					eventType = MBS_ETYPE_ERROR;
					break;
				}
				abortOnError = 0;
				nofEventsProcessed++;
			}
		}
	}
	if (nofErrors > 0) {
		gMrbLog->Err()	<< this->ClassName() << "::ReadEvents(): " << nofEventsProcessed
						<< " event(s), " << nofErrors
						<< " error(s)" << endl;
		gMrbLog->Flush(this->ClassName(), "ReadEvents");
	} else {
		gMrbLog->Out()	<< this->ClassName() << "::ReadEvents(): " << nofEventsProcessed
						<< " event(s), " << " no errors" << endl;
		gMrbLog->Flush(this->ClassName(), "ReadEvents", setblue);
	}
	return(eventType);
}

UInt_t TMrbTransport::NextSubevent(UShort_t * SevtData) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbTransport::NextSubevent
// Purpose:        Get next subevent
// Arguments:      UShort_t SevtData  -- pointer to (unpacked) subevent data
// Results:        Int_t Swc          -- word count
// Exceptions:
// Description:    Unpacks next subevent from current event.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	UInt_t SevtType;

	ClearError();
	SevtType = mbs_next_sevent(fMBSDataIO);
	if (SevtType == MBS_STYPE_EOE) {			// end of event
		return(0);
	} else if (SevtType == MBS_STYPE_ERROR || SevtType == MBS_STYPE_ABORT) {	// error
		PrintMbsIoError("NextSubevent");
		SetError();
		return(0xffffffff);
	} else {									// legal data
		mbs_pass_sevent(fMBSDataIO, SevtData);
		return(fMBSDataIO->sevt_wc);
	}
}

Bool_t TMrbTransport::ProcessEvent(s_vehe * EventData) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbTransport::ProcessEvent
// Purpose:        Process event data
// Arguments:      s_vehe * EventData  -- pointer to event data (including header)
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    This is the event filling function.
//                 User will be called by method Analyze().
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	UShort_t Data[1024];

	for (;;) {
		if (NextSubevent(Data) <= 0) break;
	}
	return(kTRUE);
}					


const UShort_t * TMrbTransport::NextSubevent() {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbTransport::NextSubevent
// Purpose:        Get next subevent
// Arguments:      none
// Results:        const UShort_t * SevtData  -- pointer to current (unpacked) data
// Exceptions:
// Description:    Unpacks next subevent from current event.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	UInt_t SevtType;

	ClearError();
	SevtType = mbs_next_sevent(fMBSDataIO);
	if (SevtType == MBS_STYPE_EOE) {			// end of event
		return(NULL);
	} else if (SevtType == MBS_STYPE_ERROR || SevtType == MBS_STYPE_ABORT) {	// error
		PrintMbsIoError("NextSubevent");
		SetError();
		return(NULL);
	} else {									// legal data
		return((UShort_t *) fMBSDataIO->sevt_data);
	}
}

Bool_t TMrbTransport::Show(const Char_t * BufElemKey, const Char_t * Output) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbTransport::Show
// Purpose:        Show buffer elem data
// Arguments:      Char_t * BufElemKey  -- buffer elem key (one char out of "FBES")
//                 Char_t * Output      -- output stream (NULL = stdout)
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    Outputs samples of buffer element data.
//                 Buffer element may be: F(ileheader), B(uffer), E(vent), or S(ubevent)
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	FILE * out;
	Bool_t sts;
	TMrbNamedX *pbe;
	TString keyName;

	ClearError();

	if (Output != NULL) {
		out = fopen(Output, "a");
		if (out == NULL) {
			gMrbLog->Err()	<< "Can't open file \"" << Output << "\"" << endl;
			gMrbLog->Flush(this->ClassName(), "Show");
			SetError();
			return(kFALSE);
		}
	} else {
		out = stdout;
	}

	if ((pbe = fLofBufferElements.FindByName(BufElemKey, TMrbLofNamedX::kFindUnique | TMrbLofNamedX::kFindIgnoreCase)) == NULL) {
		gMrbLog->Err()	<< "Illegal buffer element - " << BufElemKey << endl;
		gMrbLog->Flush(this->ClassName(), "Show");
		return(kFALSE);
	}

	keyName = pbe->GetName();
	keyName.Resize(1);
	sts = mbs_show(fMBSDataIO, keyName.Data(), out);

	if (Output != NULL) fclose(out);

	if (!sts) {
		PrintMbsIoError("Show");
		SetError();
	}
	return(sts);
}

Bool_t TMrbTransport::SetShow(const Char_t * BufElemStr, Int_t ScaleDown, const Char_t * Output) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbTransport::SetShow
// Purpose:        Define show profile
// Arguments:      Char_t * BufElemStr  -- string of buffer elem keys (out of "FBES")
//                 Int_t ScaleDown      -- scale down
//                 Char_t * Output      -- output stream (NULL = stdout)
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    Defines which buffer elements to be shown automatically.
//                 Buffer elements may be: F(ileheader), B(uffer), E(vent), or S(ubevent)
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	FILE *out;
	Bool_t sts;
	UInt_t xbe;
	TString sbe;

	ClearError();

	if (Output != NULL) {
		out = fopen(Output, "a");
		if (out == NULL) {
			gMrbLog->Err()	<< "Can't open file \"" << Output << "\"" << endl;
			gMrbLog->Flush(this->ClassName(), "SetShow");
			SetError();
			return(kFALSE);
		}
	} else {
		out = stdout;
	}

	xbe = fLofBufferElements.FindPattern(BufElemStr, TMrbLofNamedX::kFindUnique | TMrbLofNamedX::kFindIgnoreCase);
	if (xbe == 0) {
		gMrbLog->Err()	<< "Illegal buffer element(s) - " << BufElemStr << endl;
		gMrbLog->Flush(this->ClassName(), "SetShow");
		return(kFALSE);
	}
	sbe.Remove(0);
	if (xbe & kBufferHeader) sbe += 'B';
	if (xbe & kFileHeader) sbe += 'F';
	if (xbe & kEventHeader) sbe += 'E';
	if (xbe & kSubeventHeader) sbe += 'S';

	sts = mbs_set_show(fMBSDataIO, sbe.Data(), ScaleDown, out);
	if (!sts) {
		PrintMbsIoError("SetShow");
		SetError();
	}
	return(sts);
}

Bool_t TMrbTransport::ShowStat(const Char_t * Output) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbTransport::ShowStat
// Purpose:        Show events statistics
// Arguments:      Char_t * Output  -- output stream (NULL = stdout)
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    Outputs events statistics.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	FILE *out;
	Bool_t sts;

	ClearError();

	if (Output != NULL) {
		out = fopen(Output, "a");
		if (out == NULL) {
			gMrbLog->Err()	<< "Can't open file \"" << Output << "\"" << endl;
			gMrbLog->Flush(this->ClassName(), "ShowStat");
			SetError();
			return(kFALSE);
		}
	} else {
		out = stdout;
	}

	sts = mbs_show_stat(fMBSDataIO, out);
	if (Output != NULL) fclose(out);
	if (!sts) {
		PrintMbsIoError("ShowStat");
		SetError();
	}
	return(sts);
}

Bool_t TMrbTransport::SetStat(Int_t ScaleDown, const Char_t * Output) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbTransport::SetStat
// Purpose:        Define statistics profile
// Arguments:      Int_t ScaleDown  -- scale down
//                 Char_t * Output  -- output stream (NULL = stdout)
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    Defines a scale down factor for automatic stats output.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	FILE *out;
	Bool_t sts;

	ClearError();

	if (Output != NULL) {
		out = fopen(Output, "a");
		if (out == NULL) {
			gMrbLog->Err()	<< "Can't open file \"" << Output << "\"" << endl;
			gMrbLog->Flush(this->ClassName(), "SetStat");
			SetError();
			return(kFALSE);
		}
	} else {
		out = stdout;
	}

	sts = mbs_set_stat(fMBSDataIO, ScaleDown, out);
	if (!sts) {
		PrintMbsIoError("SetStat");
		SetError();
	}
	return(sts);
}

Bool_t TMrbTransport::SetStream(Int_t MaxStreams, Int_t SlowDown) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbTransport::SetStream
// Purpose:        Define stream profile
// Arguments:      Int_t MaxStreams  -- max number of streams to be processed (0 = ad infinitum)
//                 Int_t SlowDown    -- number of secs to wait after each request
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    Defines how many streams to be processed.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	Bool_t sts;

	ClearError();

	sts = mbs_set_stream(fMBSDataIO, MaxStreams, SlowDown);
	if (!sts) {
		PrintMbsIoError("SetStream");
		SetError();
	}
	return(sts);
}

Bool_t TMrbTransport::SetDumpInterval(Int_t NofRecs) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbTransport::SetDumpInterval
// Purpose:        Define dump interval
// Arguments:      Int_t NofRecs   -- dump interval
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    Defines when to dump records to disk.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	ClearError();

	mbs_set_dump(fMBSDataIO, NofRecs);
	return(kTRUE);
}

Bool_t TMrbTransport::OpenMEDFile(const Char_t * MEDFile) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbTransport::OpenMEDFile
// Purpose:        Open MED file 
// Arguments:      Char_t * MEDFile    -- file name
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    Opens a file to write data as MBS events.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	Bool_t sts;

	ClearError();

	sts = mbs_open_med(MEDFile);
	if (sts) {
		gMrbLog->Out()	<< "Writing MBS event data to file " << MEDFile << endl;
		gMrbLog->Flush(this->ClassName(), "OpenMEDFile", setblue);
	} else {
		PrintMbsIoError("OpenMEDFile");
		SetError();
	}
	return(sts);
}

Bool_t TMrbTransport::CloseMEDFile() {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbTransport::CloseMEDFile
// Purpose:        Close MED file 
// Arguments:      --
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    Closes MED file which is currently open
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	ClearError();

	mbs_close_med();
	gMrbLog->Out()	<< "MED file closed" << endl;
	gMrbLog->Flush(this->ClassName(), "CloseMEDFile", setblue);
	return(kTRUE);
}

Bool_t TMrbTransport::OpenLMDFile(const Char_t * LMDFile) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbTransport::OpenLMDFile
// Purpose:        Open LMD file 
// Arguments:      Char_t * LMDFile    -- lmd file
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    Opens a file to write original LMD data.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	Bool_t sts;

	ClearError();

	sts = mbs_open_lmd(LMDFile);
	if (sts) {
		gMrbLog->Out()	<< "Writing LMD data to file " << LMDFile << endl;
		gMrbLog->Flush(this->ClassName(), "OpenLMDFile", setblue);
	} else {
		PrintMbsIoError("OpenLMDFile");
		SetError();
	}
	return(sts);
}

Bool_t TMrbTransport::CloseLMDFile() {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbTransport::CloseLMDFile
// Purpose:        Close LMD file 
// Arguments:      --
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    Closes LMD file which is currently open
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	ClearError();

	mbs_close_lmd();
	gMrbLog->Out()	<< "LMD file closed" << endl;
	gMrbLog->Flush(this->ClassName(), "CloseLMDFile", setblue);
	return(kTRUE);
}

Bool_t TMrbTransport::OpenLogFile(const Char_t * LogFile) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbTransport::OpenLogFile
// Purpose:        Open file for log output
// Arguments:      Char_t * LogFile    -- log file
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    Opens a file for data/error logging.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	Bool_t sts;

	ClearError();

	sts = mbs_open_log(LogFile);
	if (!sts) {
		PrintMbsIoError("OpenLogFile");
		SetError();
	}
	return(sts);
}

Bool_t TMrbTransport::PrintMbsIoError(const Char_t * Prefix) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbTransport::PrintMbsIoError
// Purpose:        Output errors coming from mbsio package
// Arguments:      Char_t * Prefix  -- prefix to be output in front
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    Reports errors passed over by mbsio package.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	fErrorString = (Char_t *) mbs_error_string;

	gMrbLog->Err()	<< Prefix << "(): Error in mbsio package -" << endl;
	gMrbLog->Flush(this->ClassName(), "PrintMbsIoError");
	gMrbLog->Err()	<< fErrorString << endl;
	gMrbLog->Flush(this->ClassName(), "PrintMbsIoError");
	fErrorString.Remove(0);
	
	return(kTRUE);
}

Bool_t TMrbTransport::Version() {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbTransport::Version
// Purpose:        Output version
// Arguments:      --
// Results:        kTRUE
// Exceptions:
// Description:    Outputs some welcome text.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	TString vtext;
	TString frame;
	Int_t fl, i1, i2;

	frame = "+--------------------------------------------+";
	vtext = "TMrbTransport v%I% (%G%)";
	fl = frame.Length() - 2;
	i1 = (fl - vtext.Length())/2;
	i2 = fl - vtext.Length() - i1;

	cout << "  " << frame << endl;

	cout << "  |";
	cout << setw(i1) << " ";
	cout << vtext;
	cout << setw(i2) << " ";
	cout << "|" << endl; 

	cout << "  |                TMrbTransport               |" << endl;
	cout << "  |    MARaBOU class to connect to MBS data    |" << endl;
	cout << "  |            via file or tcp server          |" << endl;
	cout << "  |               (c) R. Lutter                |" << endl;
	cout << "  " << frame << endl << endl;

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