ROOT logo
//__________________________________________________[C++ CLASS IMPLEMENTATION]
//////////////////////////////////////////////////////////////////////////////
// Name:           mbssetup/src/TMbsReadoutProc.cxx
// Purpose:        MBS setup
// Description:    Implements class methods to define a MBS setup 
// Keywords:
// Author:         R. Lutter
// Mailto:         <a href=mailto:rudi.lutter@physik.uni-muenchen.de>R. Lutter</a>
// Revision:       $Id: TMbsReadoutProc.cxx,v 1.24 2011-03-08 10:31:22 Marabou Exp $       
// Date:           
//////////////////////////////////////////////////////////////////////////////

namespace std {} using namespace std;

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

#include "Rtypes.h"

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

#include "TMbsSetup.h"
#include "TMbsReadoutProc.h"

#include "SetColor.h"

extern TSystem * gSystem;
extern TMrbLogger * gMrbLog;
extern TMbsSetup * gMbsSetup;

ClassImp(TMbsReadoutProc)

TMbsReadoutProc::TMbsReadoutProc(Int_t ProcNo) {
//__________________________________________________________________[C++ CTOR]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMbsReadoutProc
// Purpose:        Define a MBS readout process
// Arguments:      --
// Results:        --
// Exceptions:
// Description:    Class constructor
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	TMrbString rdoName;

	if (gMrbLog == NULL) gMrbLog = new TMrbLogger("mbssetup.log");
	
	fId = ProcNo;		// store process number
	if (fId >= 0) {
		rdoName = "Readout";
		rdoName += fId;
		TMrbLofNamedX lofSubs;
		lofSubs.AddNamedX(0, "$rdoNo", Form("%d", fId));
		gMbsSetup->CopyDefaults("Readout$rdoNo", kFALSE, kFALSE, &lofSubs);	// get defaults
	}
	fTriggerModule = new TMbsTriggerModule(fId);		// alloc trigger module
}

void TMbsReadoutProc::RemoveSetup() {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMbsReadoutProc::RemoveSetup
// Purpose:        Remove entries from setup data base
// Arguments:      --
// Results:        --
// Exceptions:
// Description:    Remove resources "TMbsSetup.ReadoutNNN.*".
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	TMrbString rdoName;

	if (fId >= 0) {
		rdoName = "Readout";
		rdoName += fId;
		gMbsSetup->Remove(rdoName.Data(), kFALSE);	// remove entries
	}
}

void TMbsReadoutProc::Reset() {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMbsReadoutProc::Reset
// Purpose:        Reset to defaults
// Arguments:      --
// Results:        --
// Exceptions:
// Description:    Resets resources "TMbsSetup.ReadoutNNN.*" to default values.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	TMrbString rdoName;

	if (fId >= 0) {
		rdoName = "Readout";
		rdoName += fId;
		TMrbLofNamedX lofSubs;
		lofSubs.AddNamedX(0, "$rdoNo", Form("%d", fId));
		gMbsSetup->CopyDefaults("Readout$rdoNo", kFALSE, kFALSE, &lofSubs);	// get defaults
	}
}

Bool_t TMbsReadoutProc::SetProcName(const Char_t * ProcName) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMbsReadoutProc::SetProcName
// Purpose:        Set readout name
// Arguments:      Char_t * ProcName    -- readout name
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    Defines resource "TMbsSetup.ReadoutNNN.Name".
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	TInetAddress * ia;
	TString r;
	TString procName;
	TString procType;
	TMrbNamedX * ptype;
	Int_t n;
	
	if (fId < 0) return(kFALSE);

	procName = ProcName;
	procName.ToLower();					// use always lower case names

	ia = new TInetAddress(gSystem->GetHostByName(ProcName));
	procName = ia->GetHostName();
	if (procName.CompareTo("UnknownHost") == 0) {
		gMrbLog->Err() << "No such processor - " << ProcName << endl;
		gMrbLog->Flush(this->ClassName(), "SetName");
		return(kFALSE);
	} else {
		gMbsSetup->Set(gMbsSetup->Resource(r, "Readout", fId, "Name"), ProcName);
		gMbsSetup->Set(gMbsSetup->Resource(r, "Readout", fId, "Address"), ia->GetHostName());
		cout	<< this->ClassName() << "::SetName(): " << ProcName
				<< " has addr " << ia->GetHostName()
				<< " (" << ia->GetHostAddress() << ")"
				<< endl;

		ptype = this->GetType();
		if (ptype == NULL) {
			procType = ProcName;				// try to determine proc type
			if ((n = procType.Index("-")) >= 0) {
				procType = procType(0, n);
				ptype = gMbsSetup->fLofProcs.FindByName(procType.Data(),
												TMrbLofNamedX::kFindExact | TMrbLofNamedX::kFindIgnoreCase);
			}
		}
		if (ptype == NULL) {
			gMrbLog->Err() << ProcName << " is of unknown type - must be defined separately" << endl;
			gMrbLog->Flush(this->ClassName(), "SetName");
			return(kFALSE);
		} else {
			if (this->SetType((EMbsProcType) ptype->GetIndex())) {
				cout	<< this->ClassName() << "::SetName(): " << ProcName
						<< " is of type " << ptype->GetName()
						<< "(" << ptype->GetIndex() << ")"
						<< endl;
			} else {
				return(kFALSE);
			}
		}
		return(kTRUE);
	}
}

const Char_t * TMbsReadoutProc::GetProcName() {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMbsReadoutProc::GetProcName
// Purpose:        Get name of readout processor
// Arguments:      --
// Results:        Char_t * ProcName    -- readout name
// Exceptions:
// Description:    Reads resource "TMbsSetup.ReadoutNNN.Name".
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	TString r;
	gMbsSetup->Get(fName, gMbsSetup->Resource(r, "Readout", fId, "Name"));
	return(fName.Data());
}

const Char_t * TMbsReadoutProc::GetProcAddr() {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMbsReadoutProc::GetProcAddr
// Purpose:        Get readout addr
// Arguments:      --
// Results:        Char_t * ProcAddr    -- readout addr
// Exceptions:
// Description:    Reads resource "TMbsSetup.ReadoutNNN.Address".
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	TString r;
	gMbsSetup->Get(fAddr, gMbsSetup->Resource(r, "Readout", fId, "Address"));
	return(fAddr.Data());
}

Bool_t TMbsReadoutProc::SetType(const Char_t * ProcType) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMbsReadoutProc::SetType
// Purpose:        Set readout type
// Arguments:      Char_t * ProcType    -- processor type
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    Defines resource "TMbsSetup.ReadoutNNN.Type".
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	TString r;
	TMrbNamedX * procType;
	TMrbString proc;

	if (fId < 0) return(kFALSE);

	procType = gMbsSetup->fLofProcs.FindByName(ProcType, TMrbLofNamedX::kFindExact | TMrbLofNamedX::kFindIgnoreCase);
	if (procType == NULL) {
		gMrbLog->Err() << "Wrong processor type - " << ProcType << endl;
		gMrbLog->Flush(this->ClassName(), "SetType");
		cerr	<< this->ClassName() << "::SetType(): Legal types are - "
				<< endl;
		gMbsSetup->fLofProcs.Print(cerr, "   > ");
		return(kFALSE);
	}

	proc = procType->GetName();
	proc += "(";
	proc += procType->GetIndex();
	proc += ")";
	gMbsSetup->Set(gMbsSetup->Resource(r, "Readout", fId, "Type"), proc.Data());
	return(kTRUE);
}

Bool_t TMbsReadoutProc::SetType(EMbsProcType ProcType) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMbsReadoutProc::SetType
// Purpose:        Set readout type
// Arguments:      EMbsProcType ProcType    -- processor type
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    Defines resource "TMbsSetup.ReadoutNNN.Type".
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	TString r;
	TMrbNamedX * procType;
	TMrbString proc;

	if (fId < 0) return(kFALSE);

	procType = gMbsSetup->fLofProcs.FindByIndex(ProcType);
	if (procType == NULL) {
		gMrbLog->Err() << "Wrong processor type - " << ProcType << endl;
		gMrbLog->Flush(this->ClassName(), "SetType");
		cerr	<< this->ClassName() << "::SetType(): Legal types are - "
				<< endl;
		gMbsSetup->fLofProcs.Print(cerr, "   > ");
		return(kFALSE);
	}

	proc = procType->GetName();
	proc += "(";
	proc += procType->GetIndex();
	proc += ")";
	gMbsSetup->Set(gMbsSetup->Resource(r, "Readout", fId, "Type"), proc.Data());
	return(kTRUE);
}

TMrbNamedX * TMbsReadoutProc::GetType() const {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMbsReadoutProc::GetType
// Purpose:        Read readout type
// Arguments:      --
// Results:        TMrbNamedX * ProcType
// Exceptions:
// Description:    Reads resource "TMbsSetup.ReadoutNNN.Type".
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	TString r;
	TMrbNamedX * procType;
	TString resValue;
	Int_t n;

	gMbsSetup->Get(resValue, gMbsSetup->Resource(r, "Readout", fId, "Type"));
	if ((n = resValue.Index("(")) >= 0) resValue = resValue(0, n);
	if (resValue.IsNull()) resValue = gEnv->GetValue("TMbsSetup.ProcType", "undef");
	procType = gMbsSetup->fLofProcs.FindByName(resValue, TMrbLofNamedX::kFindExact | TMrbLofNamedX::kFindIgnoreCase);
	return(procType);
}

Bool_t TMbsReadoutProc::SetPath(const Char_t * Path, Bool_t Create) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMbsReadoutProc::SetPath
// Purpose:        Define subdir where to write setup files
// Arguments:      Char_t * Path       -- path name
//                 Bool_t Create       -- kTRUE if path has to be created
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    Sets resource "TMbsSetup.ReadoutNNN.Path".
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	Long_t dmy;
	Long_t flags;
	TString pathName;
	TString remoteHome;
	TString r;

	if (fId < 0) return(kFALSE);

	pathName = gMbsSetup->GetHomeDir();	// get home dir
	if (pathName.IsNull()) {
		remoteHome = gMbsSetup->RemoteHomeDir();
		if (remoteHome.IsNull()) {
			gMrbLog->Err() << "Can't set path \"" << Path << "\" -" << endl;
			gMrbLog->Flush(this->ClassName(), "SetPath");
			gMrbLog->Err() << "\"TMbsSetup.HomeDir\" has to be set properly first" << endl;
			gMrbLog->Flush(this->ClassName(), "SetPath");
			return(kFALSE);
		} else {
			gMbsSetup->SetHomeDir(remoteHome.Data());
			pathName = remoteHome;
		}
	}

	pathName = gMbsSetup->GetPath();	// get mbs working dir
	if (pathName.IsNull()) {
		gMrbLog->Err() << "Can't set path \"" << Path << "\" -" << endl;
		gMrbLog->Flush(this->ClassName(), "SetPath");
		gMrbLog->Err() << "\"TMbsSetup.Path\" has to be set properly first" << endl;
		gMrbLog->Flush(this->ClassName(), "SetPath");
		return(kFALSE);
	}

	if (!pathName.BeginsWith("/") && !pathName.BeginsWith("./")) {
		pathName = gMbsSetup->GetHomeDir();
		pathName += "/";
		pathName += gMbsSetup->GetPath();
	}
	pathName += "/";
	pathName += Path; 			// append subdir
	
	Long64_t dmy64;
	if (gSystem->GetPathInfo(pathName.Data(), &dmy, &dmy64, &flags, &dmy) != 0 || (flags & 0x2) == 0) {
		if (Create) {
			if (gSystem->MakeDirectory(pathName.Data()) == 0) {
				cout	<< this->ClassName() << "::SetPath(): Creating directory " << pathName
						<< endl;
			} else {
				gMrbLog->Err() << "Can't create directory - " << pathName << endl;
				gMrbLog->Flush(this->ClassName(), "SetPath");
				return(kFALSE);
			}
		} else {
			gMrbLog->Err() << "No such directory - " << pathName << endl;
			gMrbLog->Flush(this->ClassName(), "SetPath");
			return(kFALSE);
		}
	}
	gMbsSetup->Set(gMbsSetup->Resource(r, "Readout", fId, "Path"), Path);
	return(kTRUE);
}

const Char_t * TMbsReadoutProc::GetPath() {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMbsReadoutProc::GetPath
// Purpose:        Read subdir where to write setup files
// Arguments:      --
// Results:        Char_t * Path       -- path name
// Exceptions:
// Description:    Gets resource "TMbsSetup.ReadoutNNN.Path".
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	TString r;
	gMbsSetup->Get(fPath, gMbsSetup->Resource(r, "Readout", fId, "Path"));
	return(fPath.Data());
}

Bool_t TMbsReadoutProc::SetCrate(Int_t Crate) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMbsReadoutProc::SetCrate
// Purpose:        Define crate number
// Arguments:      Int_t Crate    -- crate number
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    Sets resource "TMbsSetup.ReadoutNNN.Crate".
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	TString r;

	if (fId < 0) return(kFALSE);

	gMbsSetup->Set(gMbsSetup->Resource(r, "Readout", fId, "Crate"), Crate);
	return(kTRUE);
}

Int_t TMbsReadoutProc::GetCrate() const {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMbsReadoutProc::GetCrate
// Purpose:        Return crate number
// Arguments:      --
// Results:        Int_t Crate  -- crate number
// Exceptions:
// Description:    Reads resource "TMbsSetup.ReadoutNNN.Crate".
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	TString r;
	return(gMbsSetup->Get(gMbsSetup->Resource(r, "Readout", fId, "Crate"), 0));
}

Bool_t TMbsReadoutProc::SetCratesToBeRead(Int_t C1, Int_t C2, Int_t C3, Int_t C4, Int_t C5) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMbsReadoutProc::SetCratesToBeRead
// Purpose:        Define crates connected to this readout
// Arguments:      Int_t Cxx     -- crate number
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    Sets resource "TMbsSetup.ReadoutNNN.CratesToBeRead".
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	Int_t i;
	Int_t nofCrates;
	TString cstr;
	Int_t crate;
	TString r;

	TArrayI lofCrates(5);

	lofCrates[0] = C1;
	lofCrates[1] = C2;
	lofCrates[2] = C3;
	lofCrates[3] = C4;
	lofCrates[4] = C5;

	nofCrates = 0;
	for (i = 0; i < 5; i++) {
		crate = lofCrates[i];
		if (crate == -1) break;
		if (crate < 0 || crate >= kNofCrates) {
			gMrbLog->Err() << "Illegal crate - " << crate << " (should be in [0," << kNofCrates << "])" << endl;
			gMrbLog->Flush(this->ClassName(), "SetCratesToBeRead");
			return(kFALSE);
		}
		nofCrates++;
	}
	if (nofCrates == 0) {
		cstr.Resize(0);
	} else {
		cstr = gMbsSetup->EncodeArray(lofCrates, nofCrates);
		cstr = cstr(1, cstr.Length() - 2);				// strip parens "(...)"
	}
	return(gMbsSetup->Set(gMbsSetup->Resource(r, "Readout", fId, "CratesToBeRead"), cstr.Data()));
}

Int_t TMbsReadoutProc::GetCratesToBeRead(TArrayI & LofCrates) const {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMbsReadoutProc::GetCratesToBeRead
// Purpose:        Return crates connected to this readout
// Arguments:      TArrayI & LofCrates    -- where to store crate numbers
// Results:        Int_t nofCrates        -- number if crates
// Exceptions:
// Description:    Reads resource "TMbsSetup.ReadoutNNN.CratesToBeRead".
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	Int_t n1, n2;
	TString crateString;
	TString crate;
	TString cstr;
	Int_t one;
	Int_t crateNo;
	Int_t nofCrates;
	TString r;

	gMbsSetup->Get(crateString, gMbsSetup->Resource(r, "Readout", fId, "CratesToBeRead"));
	crateString += ",";

	n1 = 0;
	nofCrates = 0;
	while ((n2 = crateString.Index(",", n1)) != -1) {
		crate = crateString(n1, n2 - n1);
		crate = crate.Strip(TString::kBoth);
		cstr = crate + " 1";
		one = 0;
		istringstream s(cstr.Data());
		s >> crateNo >> one;
		if (one != 1) {
			gMrbLog->Err() << "Illegal crate number - " << crate << endl;
			gMrbLog->Flush(this->ClassName(), "GetCratesToBeRead");
		} else {
			LofCrates[nofCrates] = crateNo;
			nofCrates++;
		}
		n1 = n2 + 1;
	}
	return(nofCrates);
}

Bool_t TMbsReadoutProc::SetController(const Char_t * ContrlType) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMbsReadoutProc::SetController
// Purpose:        Set crate controller
// Arguments:      Char_t * ContrlType    -- controller type
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    Defines resource "TMbsSetup.ReadoutNNN.Controller".
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	TString r;
	TMrbNamedX * contrlType;
	TMrbString cntrl;

	if (fId < 0) return(kFALSE);

	contrlType = gMbsSetup->fLofControllers.FindByName(ContrlType, TMrbLofNamedX::kFindExact | TMrbLofNamedX::kFindIgnoreCase);
	if (contrlType == NULL) {
		gMrbLog->Err() << "Wrong type - " << ContrlType << endl;
		gMrbLog->Flush(this->ClassName(), "SetController");
		cerr	<< this->ClassName() << "::SetController(): Legal controllers are - "
				<< endl;
		gMbsSetup->fLofControllers.Print(cerr, "   > ");
		return(kFALSE);
	}

	cntrl = contrlType->GetName();
	cntrl += "(";
	cntrl += contrlType->GetIndex();
	cntrl += ")";
	gMbsSetup->Set(gMbsSetup->Resource(r, "Readout", fId, "Controller"), cntrl.Data());
	return(kTRUE);
}

Bool_t TMbsReadoutProc::SetController(EMbsControllerType ContrlType) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMbsReadoutProc::SetController
// Purpose:        Set crate controller
// Arguments:      EMbsControllerType ContrlType    -- controller type
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    Defines resource "TMbsSetup.ReadoutNNN.Controller".
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	TString r;
	TMrbNamedX * contrlType;
	TMrbString cntrl;

	if (fId < 0) return(kFALSE);

	contrlType = gMbsSetup->fLofControllers.FindByIndex(ContrlType);
	if (contrlType == NULL) {
		gMrbLog->Err() << "Wrong type - " << ContrlType << endl;
		gMrbLog->Flush(this->ClassName(), "SetController");
		cerr	<< this->ClassName() << "::SetController(): Legal controllers are - "
				<< endl;
		gMbsSetup->fLofControllers.Print(cerr, "   > ");
		return(kFALSE);
	}

	cntrl = contrlType->GetName();
	cntrl += "(";
	cntrl += contrlType->GetIndex();
	cntrl += ")";
	gMbsSetup->Set(gMbsSetup->Resource(r, "Readout", fId, "Controller"), cntrl.Data());
	return(kTRUE);
}

TMrbNamedX * TMbsReadoutProc::GetController() const {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMbsReadoutProc::GetController
// Purpose:        Read crate controller
// Arguments:      --
// Results:        TMrbNamedX * ContrlType
// Exceptions:
// Description:    Reads resource "TMbsSetup.ReadoutNNN.Controller".
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	TString r;
	TMrbNamedX * contrlType;
	TString resValue;
	Int_t n;

	gMbsSetup->Get(resValue, gMbsSetup->Resource(r, "Readout", fId, "Controller"));
	if ((n = resValue.Index("(")) >= 0) resValue = resValue(0, n);
	contrlType = gMbsSetup->fLofControllers.FindByName(resValue, TMrbLofNamedX::kFindExact | TMrbLofNamedX::kFindIgnoreCase);
	return(contrlType);
}

Bool_t TMbsReadoutProc::SetVSBAddr(UInt_t Addr) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMbsReadoutProc::SetVSBAddr
// Purpose:        Define vsb address
// Arguments:      UInt_t Addr    -- address
// Results:        --
// Exceptions:
// Description:    Sets resource "TMbsSetup.ReadoutNNN.VSBAddr".
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	TString r;
	gMbsSetup->Set(gMbsSetup->Resource(r, "Readout", fId, "VSBAddr"), (Int_t) Addr, 16);
	return(kTRUE);
}

UInt_t TMbsReadoutProc::GetVSBAddr() const {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMbsReadoutProc::GetVSBAddr
// Purpose:        Return vsb address
// Arguments:      --
// Results:        UInt_t Addr  -- address
// Exceptions:
// Description:    Reads resource "TMbsSetup.ReadoutNNN.VSBAddr".
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	TString r;
	return(gMbsSetup->Get(gMbsSetup->Resource(r, "Readout", fId, "VSBAddr"), 0));
}

Bool_t TMbsReadoutProc::SetPipeType(Int_t Type) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMbsReadoutProc::SetPipeType
// Purpose:        Define pipe type
// Arguments:      Int_t Type    -- type
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    Sets resource "TMbsSetup.ReadoutNNN.LocalPipeType".
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	TString r;
	gMbsSetup->Set(gMbsSetup->Resource(r, "Readout", fId, "LocalPipeType"), Type, 16);
	return(kTRUE);
}

Bool_t TMbsReadoutProc::SetPipeBase(UInt_t Addr) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMbsReadoutProc::SetPipeBase
// Purpose:        Define pipe address
// Arguments:      UInt_t Addr    -- address
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    Sets resource "TMbsSetup.ReadoutNNN.LocalPipeBase".
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	TString r;
	gMbsSetup->Set(gMbsSetup->Resource(r, "Readout", fId, "LocalPipeBase"), (Int_t) Addr, 16);
	return(kTRUE);
}

Int_t TMbsReadoutProc::GetPipeType() const {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMbsReadoutProc::GetPipeType
// Purpose:        Return pipe type
// Arguments:      --
// Results:        Int_t Type  -- type
// Exceptions:
// Description:    Reads resource "TMbsSetup.ReadoutNNN.LocalPipeBase".
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	TString r;
	return(gMbsSetup->Get(gMbsSetup->Resource(r, "Readout", fId, "LocalPipeType"), -1));
}

UInt_t TMbsReadoutProc::GetPipeBase() const {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMbsReadoutProc::GetPipeBase
// Purpose:        Return pipe address
// Arguments:      --
// Results:        UInt_t Addr  -- address
// Exceptions:
// Description:    Reads resource "TMbsSetup.ReadoutNNN.LocalPipeBase".
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	TString r;
	return(gMbsSetup->Get(gMbsSetup->Resource(r, "Readout", fId, "LocalPipeBase"), 0));
}

Bool_t TMbsReadoutProc::SetPipeSegLength(Int_t Length) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMbsReadoutProc::SetPipeSegLength
// Purpose:        Define pipe segement length
// Arguments:      Int_t Length     -- length in bytes
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    Sets resource "TMbsSetup.ReadoutNNN.LocalPipeSegmentLength".
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	TString r;
	gMbsSetup->Set(gMbsSetup->Resource(r, "Readout", fId, "LocalPipeSegmentLength"), Length, 16);
	return(kTRUE);
}

Int_t TMbsReadoutProc::GetPipeSegLength() const {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMbsReadoutProc::GetPipeSegLength
// Purpose:        Return pipe segment length
// Arguments:      --
// Results:        Int_t Length     -- length in bytes
// Exceptions:
// Description:    Reads resource "TMbsSetup.ReadoutNNN.LocalPipeSegmentLength".
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	TString r;
	return(gMbsSetup->Get(gMbsSetup->Resource(r, "Readout", fId, "LocalPipeSegmentLength"), 0));
}

Bool_t TMbsReadoutProc::SetPipeLength(Int_t NofSevts) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMbsReadoutProc::SetPipeLength
// Purpose:        Define number of subevents in pipe
// Arguments:      Int_t NofSevts     -- number of subevents
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    Sets resource "TMbsSetup.ReadoutNNN.LocalPipeLength".
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	TString r;
	gMbsSetup->Set(gMbsSetup->Resource(r, "Readout", fId, "LocalPipeLength"), NofSevts);
	return(kTRUE);
}

Int_t TMbsReadoutProc::GetPipeLength() const {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMbsReadoutProc::GetPipeSegLength
// Purpose:        Return number of subevents in pipe
// Arguments:      --
// Results:        Int_t NofSevts     -- number of subevents
// Exceptions:
// Description:    Reads resource "TMbsSetup.ReadoutNNN.LocalPipeLength".
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	TString r;
	return(gMbsSetup->Get(gMbsSetup->Resource(r, "Readout", fId, "LocalPipeLength"), 0));
}

Bool_t TMbsReadoutProc::SetSevtSize(Int_t Trigger, Int_t SevtSize) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMbsReadoutProc::SetSevtSize
// Purpose:        Define subevent size
// Arguments:      Int_t Trigger   -- trigger number (0 = global size)
//                 Int_t SevtSize  -- subevent size
// Results:        --
// Exceptions:
// Description:    Sets resource "TMbsSetup.ReadoutNNN.SevtSize[.TriggerX]".
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	TString r;

	if (Trigger < 0 || Trigger > kNofTriggers) {
		gMrbLog->Err() << "Illegal trigger - " << Trigger << endl;
		gMrbLog->Flush(this->ClassName(), "SetSevtSize");
		return(kFALSE);
	}

	if (Trigger == 0) {
		gMbsSetup->Set(gMbsSetup->Resource(r, "Readout", fId, "SevtSize"), SevtSize);
	} else {
		gMbsSetup->Set(gMbsSetup->Resource(r, "Readout", fId, "SevtSize.Trigger", Trigger), SevtSize);
	}
	return(kTRUE);
}

Int_t TMbsReadoutProc::GetSevtSize(Int_t Trigger) const {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMbsReadoutProc::GetSevtSize
// Purpose:        Return subevent size
// Arguments:      Int_t Trigger   -- trigger number (0 = global)
// Results:        Int_t SevtSize  -- subevent size
// Exceptions:
// Description:    Reads resource "TMbsSetup.ReadoutNNN.SevtSize[.TriggerX]".
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	TString r;

	if (Trigger < 0 || Trigger > kNofTriggers) {
		gMrbLog->Err() << "Illegal trigger - " << Trigger << endl;
		gMrbLog->Flush(this->ClassName(), "GetSevtSize");
		return(0);
	}

	if (Trigger == 0) {
		return(gMbsSetup->Get(gMbsSetup->Resource(r, "Readout", fId, "SevtSize"), 0));
	} else {
		return(gMbsSetup->Get(gMbsSetup->Resource(r, "Readout", fId, "SevtSize.Trigger", Trigger), 0));
	}
}

Bool_t TMbsReadoutProc::SetCodeName(const Char_t * CodeName) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMbsReadoutProc::SetCodeName
// Purpose:        Define name of makefile
// Arguments:      Char_t * CodeName     -- name of code files
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    Sets resource "TMbsSetup.ReadoutNNN.CodeName".
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	TString r;
	gMbsSetup->Set(gMbsSetup->Resource(r, "Readout", fId, "CodeName"), CodeName);
	return(kTRUE);
}

const Char_t * TMbsReadoutProc::GetCodeName() {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMbsReadoutProc::GetCodeName
// Purpose:        Return name of code file
// Arguments:      --
// Results:        Char_t * CodeName       -- file name
// Exceptions:
// Description:    Gets resource "TMbsSetup.ReadoutNNN.CodeName".
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	TString r;
	gMbsSetup->Get(fCode, gMbsSetup->Resource(r, "Readout", fId, "CodeName"));
	return(fCode.Data());
}

Bool_t TMbsReadoutProc::CopyMakefile(const Char_t * SrcDir) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMbsReadoutProc::LinkSourceCode
// Purpose:        Establish links to readout source
// Arguments:      Char_t * SrcDir       -- dir where readout code resides
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    Copies Makefile from source dir to readout destination.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	TString mkFile;
	TString srcDir;
	TString srcPath;
	TString rdoPath;
	TString destPath;
	TString fname;
	Bool_t isOK;

	TMrbNamedX * setupMode;
	EMbsSetupMode smode;

	isOK = kTRUE;

	setupMode = gMbsSetup->GetMode();
	smode = (EMbsSetupMode) (setupMode ? setupMode->GetIndex() : 0);

	srcDir = SrcDir;
	if (srcDir.IsNull()) srcDir = gSystem->WorkingDirectory();

	mkFile = this->GetCodeName();
	if (mkFile.Length() == 0) {
		gMrbLog->Err() << "Source file not defined" << endl;
		gMrbLog->Flush(this->ClassName(), "CopyMakefile");
		isOK = kFALSE;
	}

	rdoPath = gMbsSetup->GetPath();
	if (rdoPath.Length() == 0) {
		gMrbLog->Err() << "Setup path not defined" << endl;
		gMrbLog->Flush(this->ClassName(), "CopyMakefile");
		isOK = kFALSE;
	} else if (!rdoPath.BeginsWith("/")) {
		destPath = gMbsSetup->GetHomeDir();
		if (destPath.Length() == 0) {
			gMrbLog->Err() << "Remote home directory not defined" << endl;
			gMrbLog->Flush(this->ClassName(), "CopyMakefile");
			isOK = kFALSE;
		} else {
			destPath += "/";
			destPath += rdoPath;
		}
	} else {
		destPath = rdoPath;
	}
	destPath += "/";

	if (smode == kModeMultiProc) {
		rdoPath = this->GetPath();
		if (rdoPath.Length() == 0) {
			gMrbLog->Err() << "Readout path not defined" << endl;
			gMrbLog->Flush(this->ClassName(), "CopyMakefile");
			isOK = kFALSE;
		} else {
			destPath += rdoPath;
			destPath += "/";
		}
	}

	if (!isOK) return(kFALSE);

	srcPath = srcDir;
	srcPath += "/";

	fname = mkFile + ".mk";
	TString fpath;
	TMrbSystem ux;
	ux.Which(fpath, srcDir.Data(), fname.Data());
	if (fpath.IsNull()) {
		gMrbLog->Err() << "No such file - " << fname << endl;
		gMrbLog->Flush(this->ClassName(), "CopyMakefile");
		isOK = kFALSE;
	}

	TString cmd = "cp " + srcPath + fname + " " + destPath;
	gSystem->Exec(cmd.Data());
	gMrbLog->Out() << "Copying " << srcPath + fname << " --> " << destPath << endl;
	gMrbLog->Flush(this->ClassName(), "CopyMakefile", setblue);

	return(isOK);
}

Bool_t TMbsReadoutProc::CompileReadout(const Char_t * Version) {
//________________________________________________________________[C++ METHOD]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMbsReadoutProc::CompileReadout
// Purpose:        Compile source code on remote host
// Arguments:      Char_t * Version   -- MBS version (prod, deve, vNN)
// Results:        kTRUE/kFALSE
// Exceptions:
// Description:    Compiles readout source.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

	Bool_t isOK = kTRUE;

	TMrbNamedX * setupMode = gMbsSetup->GetMode();
	EMbsSetupMode smode = (EMbsSetupMode) (setupMode ? setupMode->GetIndex() : 0);

	TString codeName = this->GetCodeName();
	if (codeName.Length() == 0) {
		gMrbLog->Err() << "Name of source code not defined" << endl;
		gMrbLog->Flush(this->ClassName(), "CompileReadout");
		isOK = kFALSE;
	}

	TString version = Version;
	if (version.Contains(".")) {
		version.ReplaceAll(".", "");
		version.Prepend("v");
	} else if (!version.BeginsWith("v")) {
		gMrbLog->Err() << "Malformed Mbs version - " << Version << endl;
		gMrbLog->Flush(this->ClassName(), "CompileReadout");
		isOK = kFALSE;
	}

	TString path = gMbsSetup->GetPath();
	TString homeDir;
	TString srcPath;
	if (path.Length() == 0) {
		gMrbLog->Err() << "Setup path not defined" << endl;
		gMrbLog->Flush(this->ClassName(), "CompileReadout");
		isOK = kFALSE;
	} else if (!path.BeginsWith("/")) {
		homeDir = gMbsSetup->GetHomeDir();
		if (homeDir.Length() == 0) {
			gMrbLog->Err() << "Remote home directory not defined" << endl;
			gMrbLog->Flush(this->ClassName(), "CompileReadout");
			isOK = kFALSE;
		} else {
			homeDir += "/";
			srcPath = homeDir;
			srcPath += path;
		}
	} else {
		srcPath = path;
	}
	srcPath += "/";

	if (smode == kModeMultiProc) {
		path = this->GetPath();
		if (path.Length() == 0) {
			gMrbLog->Err() << "Readout path not defined" << endl;
			gMrbLog->Flush(this->ClassName(), "CompileReadout");
			isOK = kFALSE;
		} else {
			srcPath += path;
			srcPath += "/";
		}
	}

	if (!isOK) return(kFALSE);

	TString mkFile = codeName + ".mk";
	TMrbSystem ux;
	TString mkpath;
	ux.Which(mkpath, srcPath.Data(), mkFile.Data());
	if (mkpath.IsNull()) {
		gMrbLog->Err() << "No such file - " << mkFile << " (searched on " << srcPath << ")" << endl;
		gMrbLog->Flush(this->ClassName(), "CompileReadout");
		isOK = kFALSE;
	}

	if (!isOK) return(kFALSE);

	TString proc = this->GetProcName();
	if (proc.Length() == 0) {
		gMrbLog->Err() << "Readout proc not defined" << endl;
		gMrbLog->Flush(this->ClassName(), "CompileReadout");
		return(kFALSE);
	}

	TString compileIt = codeName + ".sh";
	path = srcPath + compileIt;
	gSystem->Unlink(path.Data());

	ofstream sh(path.Data(), ios::out);
	if (!sh.good()) {
		gMrbLog->Err() << gSystem->GetError() << " - " << compileIt << endl;
		gMrbLog->Flush(this->ClassName(), "CompileReadout");
		return(kFALSE);
	}

	sh << "#!/bin/tcsh" << endl;
	sh << "#" << compileIt << ": shell script to compile readout source " << codeName << ".c" << endl;
	sh << endl;
	sh << "cd " << srcPath << endl;
	sh << "source /sys/gsi_lynx_env" << endl;
	sh << "set path = ( /bin /bin/ces /usr/bin /usr/local/bin /etc /usr/etc . ~/tools)" << endl;
	sh << "source /mbs/login " << Version << endl;
	sh << "make -f " << mkFile << " clean all" << endl;
	sh.close();

	TString errFile = srcPath;
	errFile += codeName + ".err";
	gSystem->Unlink(errFile.Data());

	cout	<< this->ClassName() << "::CompileReadout(): Compiling " << codeName << ".c"
			<< " on host " << proc << " (MBS version = " << Version << ") ..."
			<< endl << endl;

	TString cmd = Form("rsh %s 'cd %s; tcsh %s' 2>%s", proc.Data(), srcPath.Data(), compileIt.Data(), errFile.Data());
	gSystem->Exec(cmd.Data());

	Int_t nofErrors = 0;
	Int_t nofWarnings = 0;

	TString diagLine;
	ifstream diag(errFile, ios::in);
	if (!diag.good()) {
		gMrbLog->Err() << gSystem->GetError() << " - " << gSystem->BaseName(errFile.Data()) << endl;
		gMrbLog->Flush(this->ClassName(), "CompileReadout");
		isOK = kFALSE;
	} else {
		for (;;) {
			diagLine.ReadLine(diag, kFALSE);
			diagLine = diagLine.Strip(TString::kBoth);
			if (diag.eof()) {
				break;
			}
			if (diagLine.Index("warning:", 0) != -1) {
				nofWarnings++;
				cerr	<< setred
						<< diagLine
						<< setblack << endl;
			} else if (diagLine.Index("error:", 0) != -1) {
				nofErrors++;
				cerr	<< setred
						<< diagLine
						<< setblack << endl;
				isOK = kFALSE;
			} else if (diagLine.Index("Readout.c:", 0) != -1) {
				nofErrors++;
				cerr	<< setred
						<< diagLine
						<< setblack << endl;
				isOK = kFALSE;
			} else if (diagLine.Index("Error", 0) != -1) {
				nofErrors++;
				cerr	<< setred
						<< diagLine
						<< setblack << endl;
				isOK = kFALSE;
			} else if (diagLine.Index("Stop.", 0) != -1) {
				nofErrors++;
				cerr	<< setred
						<< diagLine
						<< setblack << endl;
				isOK = kFALSE;
			}
		}
		diag.close();

		if (nofErrors == 0 && nofWarnings == 0) {
			gMrbLog->Out() << "Readout task compiled & linked - ok" << endl;
			gMrbLog->Flush(this->ClassName(), "CompileReadout");
		} else if (nofErrors > 0) {
			gMrbLog->Err()	<< "Readout task compiled & linked - some error(s) & warning(s)" << endl;
			gMrbLog->Flush(this->ClassName(), "CompileReadout");
		} else {
			gMrbLog->Out()	<< "Readout task compiled & linked - see warning(s)" << endl;
			gMrbLog->Flush(this->ClassName(), "CompileReadout", setblue);
		}
	}

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