#ifndef __TMrbConfig_h__
#define __TMrbConfig_h__
namespace std {} using namespace std;
#include <cstdlib>
#include <iostream>
#include <sstream>
#include <iomanip>
#include <fstream>
#include "Rtypes.h"
#include "TSystem.h"
#include "TObject.h"
#include "TNamed.h"
#include "TString.h"
#include "TObjString.h"
#include "TArrayI.h"
#include "TMrbNamedX.h"
#include "TMrbLofNamedX.h"
#include "TMrbTemplate.h"
#include "TMrbCNAF.h"
#include "TMrbLogger.h"
class TMrbEvent;
class TMrbSubevent;
class TMrbModule;
class TMrbModuleChannel;
class TMrbScaler;
class TMrbMesytec_Mux16;
class packNames : public TObject {
public:
packNames(const Char_t * f, const Char_t * t, const Char_t * x, const Char_t * c, Int_t b = -1) : F(f), T(t), X(x), C(c), B(b) {};
~packNames() {};
inline const TString & GetF() const { return(F); };
inline const TString & GetT() const { return(T); };
inline const TString & GetX() const { return(X); };
inline const TString & GetC() const { return(C); };
inline Int_t GetB() const { return(B); };
protected:
TString F; TString T; TString X; TString C; Int_t B;
};
class TMrbConfig : public TNamed {
public:
enum EMrbReadoutTag { kRdoPath = 1,
kRdoFile,
kRdoInclude,
kRdoLibs,
kRdoPosix,
kRdoPosixLib,
kRdoLynxPlatform,
kRdoAlign64,
kRdoDebug,
kRdoNameLC,
kRdoNameUC,
kRdoCreationDate,
kRdoAuthor,
kRdoUser,
kRdoTitle,
kRdoSetup,
kRdoCamacController,
kRdoDefineTriggers,
kRdoDefinePointers,
kRdoDeviceTables,
kRdoInitPointers,
kRdoInitEnvironment,
kRdoInitCommonCode,
kRdoInitModules,
kRdoOnStartAcquisition,
kRdoOnStopAcquisition,
kRdoOnTriggerXX,
kRdoIgnoreTriggerXX,
kRdoWriteSetup,
kRdoIncludesAndDefs,
kRdoUtilities,
kRdoDefinePrototypes,
kRdoDefineGlobals,
kRdoDefineGlobalsOnce,
kRdoDefineLocalVarsInit,
kRdoDefineLocalVarsReadout,
kRdoUserDefinedDefines,
kRdoClearModule
};
enum EMrbAnalyzeTag { kAnaFile = 1,
kAnaNameLC,
kAnaNameUC,
kAnaTitle,
kAnaCreationDate,
kAnaAuthor,
kAnaUser,
kAnaHtmlMakeSetup,
kAnaIncludeXhitDefs,
kAnaIncludesAndDefs,
kAnaPragmaLinkClasses,
kAnaClassImp,
kAnaReservedEvents,
kAnaMakeClassNames,
kAnaInitializeLists,
kAnaModuleTimeOffset,
kAnaAddUserEnv,
kAnaFindVars,
kAnaEventClassDef,
kAnaEventClassMethods,
kAnaEventUserClassMethods,
kAnaEventClassInstance,
kAnaEventUserClassInstance,
kAnaEventDefinePointers,
kAnaEventNameLC,
kAnaEventNameUC,
kAnaEventTitle,
kAnaEventAutoSave,
kAnaEventTrigger,
kAnaEventIdEnum,
kAnaEventPrivateData,
kAnaEventUserMethods,
kAnaEventUserData,
kAnaEventMethodToProcessEvent,
kAnaEventDispatchOverTrigger,
kAnaEventIgnoreTrigger,
kAnaEventTriggerStartAcq,
kAnaEventTriggerStopAcq,
kAnaEventReplayEvent,
kAnaEventBookParams,
kAnaEventBookHistograms,
kAnaEventFillHistograms,
kAnaEventFillRateHistograms,
kAnaEventSetupSevtList,
kAnaEventAllocHitBuffer,
kAnaEventSetFakeMode,
kAnaEventCreateTree,
kAnaEventAddBranches,
kAnaEventSetScaleDown,
kAnaEventInitializeTree,
kAnaEventSetReplayMode,
kAnaEventSetWriteTree,
kAnaEventInitializeBranches,
kAnaEventSetBranchStatus,
kAnaEventReplayTree,
kAnaEventFirstSubevent,
kAnaEventAnalyze,
kAnaEvtResetData,
kAnaEvtBaseClass,
kAnaSevtNameLC,
kAnaSevtNameUC,
kAnaSevtInheritsFrom,
kAnaSevtTitle,
kAnaSevtSetName,
kAnaSevtSerial,
kAnaSevtNofParams,
kAnaSevtNofModules,
kAnaSevtSerialEnum,
kAnaSevtBitsEnum,
kAnaSevtIndicesEnum,
kAnaSevtClassDef,
kAnaSevtClassMethods,
kAnaSevtClassInstance,
kAnaSevtGetAddr,
kAnaSevtUserMethods,
kAnaSevtUserData,
kAnaSevtFriends,
kAnaSevtCtor,
kAnaSevtDispatchOverType,
kAnaSevtDispatchOverSerial,
kAnaSevtDefineAddr,
kAnaSevtPrivateData,
kAnaSevtPrivateHistograms,
kAnaSevtFillSubevent,
kAnaSevtBookParams,
kAnaSevtBookHistograms,
kAnaSevtFillHistograms,
kAnaSevtFillHistogramsHB,
kAnaSevtInitializeBranch,
kAnaSevtXhitClass,
kAnaSevtResetData,
kAnaModuleIdEnum,
kAnaModuleSerialEnum,
kAnaModuleSpecialEnum,
kAnaHistoDefinePointers,
kAnaHistoInitializeArrays,
kAnaHistoBookUserDefined,
kAnaHistoFillArrays,
kAnaVarDefinePointers,
kAnaVarClassInstance,
kAnaVarArrDefinePointers,
kAnaVarArrClassInstance,
kAnaWdwDefinePointers,
kAnaWdwClassInstance,
kAnaWdwAdjustPointers,
kAnaFctClassInstance,
kAnaFctDefinePointers,
kAnaFctAdjustPointers,
kAnaUserInitializeBeforeHB,
kAnaUserInitializeAfterHB,
kAnaUserReloadParams,
kAnaUserFinishRun,
kAnaUserBookParams,
kAnaUserBookHistograms,
kAnaUserGlobals,
kAnaUserUtilities,
kAnaUserMessages,
kAnaUserDummyMethods,
kAnaUsingNameSpace,
kAnaUserDefinedGlobals,
kAnaUserDefinedEnums,
kAnaUserDefinedDefines,
kAnaMakeUserCxxFlags,
kAnaMakeUserHeaders,
kAnaMakeUlibHeaders,
kAnaMakeUserCode,
kAnaMakeUserLibs,
kAnaMakeUserRules,
kAnaMakeUlibRules,
kAnaMakeAll,
kAnaMakeClean,
kAnaMakeLibNew,
kAnaIncludeEvtSevtModGlobals,
kAnaInitializeEvtSevtMods,
kAnaLoadUserLibs
};
enum EMrbConfigTag { kCfgFile = 1,
kCfgNameLC,
kCfgNameUC,
kCfgTitle,
kCfgAuthor,
kCfgCreationDate,
kCfgCreateConfig,
kCfgDefineEvents,
kCfgDefineSubevents,
kCfgDefineModules,
kCfgAssignParams,
kCfgConnectToEvent,
kCfgWriteTimeStamp,
kCfgWriteDeadTime,
kCfgDefineVariables,
kCfgDefineWindows,
kCfgDefineFunctions,
kCfgDefineScalers,
kCfgMakeCode
};
enum EMrbRcFileTag { kRcExpData = 1,
kRcEvtData,
kRcSevtData,
kRcModuleData,
kRcModuleSettings,
kRcUserGlobals
};
enum EMrbUserMacroTag { kUmaFile = 1,
kUmaNameLC,
kUmaNameUC,
kUmaTitle,
kUmaAuthor,
kUmaCreationDate
};
enum EMrbUserEventTag { kUevFile = 1,
kUevNameLC,
kUevNameUC,
kUevConfigLC,
kUevConfigUC,
kUevTitle,
kUevAuthor,
kUevCreationDate
};
enum EMrbXhitTag { kXhitFile = 1,
kXhitNameLC,
kXhitNameUC,
kXhitConfigLC,
kXhitConfigUC,
kXhitTitle,
kXhitAuthor,
kXhitCreationDate,
kXhitDataLength
};
enum { kNoOptionSpecified = 0x80000000 };
enum EMrbReadoutOptions { kRdoOptOverwrite = BIT(0),
kRdoOptVerbose = BIT(1) };
enum { kRdoOptDefault = 0 };
enum EMrbAnalyzeOptions { kAnaOptSubevents = BIT(0),
kAnaOptParamsByName = BIT(1),
kAnaOptHistograms = BIT(2),
kAnaOptLeaves = BIT(3),
kAnaOptOverwrite = BIT(4),
kAnaOptReplayMode = BIT(5),
kAnaOptVerbose = BIT(7)
};
enum { kAnaOptDefault = kAnaOptSubevents |
kAnaOptParamsByName |
kAnaOptHistograms};
enum EMrbConfigOptions { kCfgOptOverwrite = BIT(0),
kCfgOptVerbose = BIT(1)
};
enum { kCfgOptDefault = 0 };
enum EMrbRcFileOptions { kRcOptOverwrite = BIT(0),
kRcOptByName = BIT(1),
kRcOptVerbose = BIT(2)
};
enum { kRcOptDefault = kRcOptByName };
enum EMrbIncludeOptions { kIclOptHeaderFile = BIT(0),
kIclOptUserMethod = BIT(1),
kIclOptClassTMrbAnalyze = BIT(2),
kIclOptClassTUsrEvent = BIT(3),
kIclOptUserLib = BIT(4),
kIclOptUserClass = BIT(5),
kIclOptInitialize = kIclOptUserMethod | kIclOptClassTMrbAnalyze | BIT(6),
kIclOptReloadParams = kIclOptUserMethod | kIclOptClassTMrbAnalyze | BIT(7),
kIclOptFinishRun = kIclOptUserMethod | kIclOptClassTMrbAnalyze | BIT(8),
kIclOptHandleMessages = kIclOptUserMethod | kIclOptClassTMrbAnalyze | BIT(9),
kIclOptBookHistograms = kIclOptUserMethod | kIclOptClassTUsrEvent | BIT(10),
kIclOptBookParams = kIclOptUserMethod | kIclOptClassTUsrEvent | BIT(11),
kIclOptProcessEvent = kIclOptUserMethod | kIclOptClassTUsrEvent | BIT(12),
kIclOptEventMethod = kIclOptUserMethod | kIclOptClassTUsrEvent | BIT(13),
kIclOptUserDefinedEvent = kIclOptUserClass | BIT(14),
kIclOptUtilities = BIT(15)
};
enum { kNofCrates = 100 };
enum { kNofControllers = 2 };
enum { kNofTriggers = 16 };
enum { kAutoSave = 10000000 };
enum EMrbTriggerStatus { kTriggerUnused = 0,
kTriggerAssigned,
kTriggerPattern,
kTriggerReserved,
kTriggerIgnored,
kTriggerOutOfRange
};
enum EMrbReservedTriggers {
kTriggerStartAcq = 14,
kTriggerStopAcq = 15
};
enum { kRdoOptEvtDefault = 0 };
enum { kAnaOptEvtDefault = kAnaOptSubevents | kAnaOptHistograms };
enum { kCfgOptEvtDefault = 0 };
enum { kRdoOptSevtDefault = 0 };
enum { kAnaOptSevtDefault = kAnaOptParamsByName | kAnaOptHistograms };
enum { kCfgOptSevtDefault = 0 };
enum EMrbModuleTag { kModuleDefs = 1,
kModuleInitCommonCode,
kModuleInitModule,
kModuleInitBLT,
kModuleInitChannel,
kModuleReadChannel,
kModuleIncrementChannel,
kModuleSkipChannels,
kModuleWriteSubaddr,
kModuleStoreData,
kModuleClearModule,
kModuleReadModule,
kModuleSetupReadout,
kModuleFinishReadout,
kModuleStartAcquisition,
kModuleStopAcquisition,
kModuleStartAcquisitionGroup,
kModuleStopAcquisitionGroup,
kModuleUtilities,
kModuleDefineGlobals,
kModuleDefineGlobalsOnce,
kModuleDefineLocalVarsInit,
kModuleDefineLocalVarsReadout,
kModuleDefinePrototypes,
kModuleDefineIncludePaths,
kModuleDefineLibraries,
};
enum EMrbChannelStatus {
kChannelSingle = 1,
kChannelArray,
kChannelArrElem
};
enum EMrbDataType { kDataChar = BIT(0),
kDataUShort = BIT(1),
kDataUInt = BIT(2),
kDataULong = BIT(3),
kDataFloat = BIT(4)
};
enum EMrbGlobalType { kGlobInt = 0,
kGlobFloat,
kGlobDouble,
kGlobBool,
kGlobString,
kGlobObject
};
enum EMrbCrateType { kCrateUnused = 0,
kCrateCamac = BIT(0),
kCrateVME = BIT(1),
kCrateAny = kCrateCamac | kCrateVME
};
enum EMrbControllerType { kControllerUnused = 0,
kControllerCBV = 5,
kControllerCC32 = 11
};
enum EMrbVMEMapping { kVMEMappingUndef = 0,
kVMEMappingDirect = BIT(0),
kVMEMappingStatic = BIT(1),
kVMEMappingDynamic = BIT(2),
kVMEMappingHasBLT = BIT(10),
kVMEMappingHasMBLT = BIT(11)
};
enum EMrbHistoType { kHistoTH1 = BIT(10),
kHistoTH2 = BIT(11),
kHistoTH3 = BIT(12),
kHistoTHC = BIT(1),
kHistoTHS = BIT(2),
kHistoTHI = BIT(3),
kHistoTHF = BIT(4),
kHistoTHD = BIT(5),
kHistoTHR = BIT(6),
kHistoTH1C = kHistoTH1 | kHistoTHC,
kHistoTH1S = kHistoTH1 | kHistoTHS,
kHistoTH1F = kHistoTH1 | kHistoTHF,
kHistoTH1D = kHistoTH1 | kHistoTHD,
kHistoTH2C = kHistoTH2 | kHistoTHC,
kHistoTH2I = kHistoTH2 | kHistoTHI,
kHistoTH2S = kHistoTH2 | kHistoTHS,
kHistoTH2F = kHistoTH2 | kHistoTHF,
kHistoTH2D = kHistoTH2 | kHistoTHD,
kHistoTH3C = kHistoTH3 | kHistoTHC,
kHistoTH3S = kHistoTH3 | kHistoTHS,
kHistoTH3F = kHistoTH3 | kHistoTHF,
kHistoTH3D = kHistoTH3 | kHistoTHD,
kHistoRate = kHistoTH1 | kHistoTHF | kHistoTHR
};
enum EMrbModuleType { kModuleCamac = TMrbConfig::kCrateCamac,
kModuleVME = TMrbConfig::kCrateVME,
kModuleRaw = BIT(2),
kModuleListMode = BIT(3),
kModuleSingleMode = BIT(4),
kModuleMultiEvent = BIT(5),
kModuleTimeStamp = BIT(6),
kModuleAdc = BIT(7),
kModuleTdc = BIT(8),
kModuleQdc = BIT(9),
kModuleDig = BIT(10),
kModulePatternUnit = BIT(11),
kModuleScaler = BIT(12),
kModuleIOReg = BIT(13),
kModuleControl = BIT(14)
};
enum EMrbManufacturers { kManufactOther = 0,
kManufactSilena = BIT(12),
kManufactOrtec = BIT(13),
kManufactLeCroy = BIT(14),
kManufactSen = BIT(15),
kManufactTUM = BIT(16),
kManufactNE = BIT(17),
kManufactCaen = BIT(18),
kManufactGanelec = BIT(19),
kManufactXia = BIT(20),
kManufactAcromag = BIT(21),
kManufactKinetics = BIT(22),
kManufactMpiHD = BIT(23),
kManufactSis = BIT(24),
kManufactCologne = BIT(25),
kManufactISN = BIT(26),
kManufactMesytec = BIT(27),
kManufactGSI = BIT(28)
};
enum EMrbModuleID { kModuleSilena4418V = kManufactSilena + 0x1,
kModuleSilena4418T = kManufactSilena + 0x2,
kModuleUct8904 = kManufactTUM + 0x3,
kModuleSen16P2047 = kManufactSen + 0x4,
kModuleSilena7420Smdw = kManufactSilena + 0x5,
kModuleLeCroy2228A = kManufactLeCroy + 0x6,
kModuleLeCroy4434 = kManufactLeCroy + 0x7,
kModuleAdcd9701 = kManufactTUM + 0x8,
kModuleSen2010 = kManufactSen + 0x9,
kModuleNE9041 = kManufactNE + 0xa,
kModuleCaenV260 = kManufactCaen + 0xb,
kModuleCaenV556 = kManufactCaen + 0xc,
kModuleCaenV785 = kManufactCaen + 0xd,
kModuleGanelec_Q1612F = kManufactGanelec + 0xe,
kModuleOrtec_413A = kManufactOrtec + 0xf,
kModuleXia_DGF_4C = kManufactXia + 0x10,
kModuleAcromag_IP341 = kManufactAcromag + 0x11,
kModuleLeCroy4432 = kManufactLeCroy + 0x12,
kModuleLeCroy4448 = kManufactLeCroy + 0x13,
kModuleKinetics3655 = kManufactKinetics + 0x14,
kModuleCaenV775 = kManufactCaen + 0x15,
kModuleCaenV820 = kManufactCaen + 0x16,
kModuleMpiHD_IOReg = kManufactMpiHD + 0x17,
kModuleSis_3600 = kManufactSis + 0x18,
kModuleSis_3801 = kManufactSis + 0x19,
kModuleLeCroy_1176 = kManufactLeCroy + 0x1a,
kModuleLeCroy_2280 = kManufactLeCroy + 0x1b,
kModuleCologne_CPTM = kManufactCologne + 0x1c,
kModuleCaenV879 = kManufactCaen + 0x1d,
kModuleSis_3820 = kManufactSis + 0x1e,
kModuleSis_3300 = kManufactSis + 0x1f,
kModuleCaenV965 = kManufactCaen + 0x20,
kModuleISN4481 = kManufactISN + 0x21,
kModuleMesytecMux16 = kManufactMesytec + 0x22,
kModuleSis_3302 = kManufactSis + 0x23,
kModuleMesytecMadc32 = kManufactMesytec + 0x24,
kModuleCaenV1X90 = kManufactCaen + 0x25,
kModuleVulomTB = kManufactGSI + 0x26,
kModuleMesytecMqdc32 = kManufactMesytec + 0x27,
kModuleGassiplex = kManufactTUM + 0x28,
kModuleMesytecMtdc32 = kManufactMesytec + 0x29,
kModuleMesytecMdpp16 = kManufactMesytec + 0x2a,
kModuleUserDefined = kManufactOther,
kModuleSoftModule = kManufactOther + 1
};
enum EMrbScalerMode { kScalerCamac = TMrbConfig::kCrateCamac,
kScalerVME = TMrbConfig::kCrateVME,
kScalerListMode = TMrbConfig::kModuleListMode,
kScalerSingleMode = TMrbConfig::kModuleSingleMode,
kScalerDeadTime = BIT(8),
kScalerExternalGate = BIT(9)
};
enum EMrbModuleFunction { kModuleFctInit = 0,
kModuleFctClear,
kModuleFctRead,
kModulerFctWrite,
kNofModuleFunctions
};
enum { kRdoHeaderBit = BIT(31) };
enum { kMbsSevtSize = 0x1000 };
enum { kMbsPipeSegLength_RIO2 = 0x0100000 };
enum { kMbsPipeSegLength_RIO3 = 0x2000000 };
enum { kMbsPipeSegLength_RIO4 = 0x8000000 };
enum { kMbsPipeLengthMax = 1000 };
enum { kMbsPipeLengthMin = 100 };
enum { kMbsEventBufferSize = 0x4000 };
enum { kMbsNofEventBuffers = 8 };
enum { kMbsNofStreams = 8 };
public:
TMrbConfig() {};
TMrbConfig(const Char_t * CfgName, const Char_t * CfgTitle = "");
~TMrbConfig() {
fLofEvents.Delete();
fLofModules.Delete();
fLofScalers.Delete();
fLofMuxs.Delete();
fLofReadoutTags.Delete();
fLofAnalyzeTags.Delete();
fLofConfigTags.Delete();
fCNAFNames.Delete();
fLofModuleTags.Delete();
fLofModuleIDs.Delete();
fLofOnceOnlyTags.Delete();
fLofUserIncludes.Delete();
fLofUserLibs.Delete();
fLofUserClasses.Delete();
};
TMrbConfig(const TMrbConfig &) : TNamed() {};
Bool_t MakeReadoutCode(const Char_t * CodeFile = "", Option_t * Options = "");
Bool_t MakeAnalyzeCode(const Char_t * CodeFile = "", Option_t * Options = "Subevents:byName:Histograms");
Bool_t MakeAnalyzeCode(ofstream & AnaStrm, TMrbConfig::EMrbAnalyzeTag TagIndex,
UInt_t VarType, TMrbTemplate & Template, const Char_t * Prefix = NULL);
Bool_t MakeAnalyzeCode(ofstream & AnaStrm, TObject * Class, const Char_t * CodeFile,
TMrbConfig::EMrbAnalyzeTag TagIndex, const Char_t * Extension);
Bool_t MakeConfigCode(const Char_t * CodeFile = "", Option_t * Options = "");
Bool_t MakeRcFile(const Char_t * CodeFile = "", const Char_t * ResourceName = "", Option_t * Options = "byName");
Bool_t CallUserMacro(const Char_t * MacroName = "", Bool_t AclicFlag = kTRUE);
Bool_t ExecUserMacro(ofstream * Strm, TObject * CfgObject, const Char_t * TagWord) const;
Bool_t CompileReadoutCode(const Char_t * Host, Bool_t CleanFlag = kTRUE) const;
Bool_t CompileAnalyzeCode(Bool_t CleanFlag = kTRUE) const;
inline void SetSevtSize(Int_t Size = kMbsSevtSize, Int_t PipeSegLength = -1) { fSevtSize = Size; fPipeSegLength = PipeSegLength; };
inline Int_t GetSevtSize() { return(fSevtSize); }
inline void SetMbsBuffers(Int_t Size = kMbsEventBufferSize, Int_t NofBuffers = kMbsNofEventBuffers, Int_t NofStreams = kMbsNofStreams) {
fEventBufferSize = Size; fNofEventBuffers = NofBuffers; fNofStreams = NofStreams;
};
Bool_t UpdateMbsSetup();
Bool_t CopyHistoLists(const Char_t * HistoDir = "");
Bool_t ExecRootMacro(const Char_t * Macro);
void Print(Option_t * Option) const { TNamed::Print(Option); };
void Print(ostream & OutStrm, const Char_t * Prefix = "") const;
inline virtual void Print() const { Print(cout, ""); };
void PrintToFile(Char_t * File) const;
Int_t GetNofErrors() const;
Int_t PrintErrors(Bool_t ErrorsOnly = kFALSE) const;
void AddEvent(TMrbEvent * Evt);
inline TMrbEvent * FindEvent(const Char_t * EvtName) const {
return ((TMrbEvent *) fLofEvents.FindObject(EvtName));
};
TMrbEvent * FindEvent(Int_t Trigger) const;
inline Int_t GetNofEvents() { return(fNofEvents); };
void AddSubevent(TMrbSubevent * Sevt);
inline TMrbSubevent * NextSubevent(TMrbSubevent * After = NULL) const {
return((After == NULL) ? (TMrbSubevent *) fLofSubevents.First() : (TMrbSubevent *) fLofSubevents.After((TObject *) After));
};
inline TMrbSubevent * FindSubevent(const Char_t * SevtName) const {
return ((TMrbSubevent *) fLofSubevents.FindObject(SevtName));
};
TMrbSubevent * FindSubevent(TClass * Class, TMrbSubevent * After = NULL) const;
TMrbSubevent * FindSubevent(Int_t SevtSerial) const;
inline Int_t AssignSevtSerial() const { return(fNofSubevents + 1); };
inline void AddModule(TMrbModule * Module) {
fLofModules.Add((TObject *) Module);
fNofModules++;
};
inline TMrbModule * NextModule(TMrbModule * After = NULL) const {
return((After == NULL) ? (TMrbModule *) fLofModules.First() : (TMrbModule *) fLofModules.After((TObject *) After));
};
inline TMrbModule * FindModule(const Char_t * ModuleName) const {
return ((TMrbModule *) fLofModules.FindObject(ModuleName));
};
TMrbModule * FindModuleByID(TMrbConfig::EMrbModuleID ModuleID, TMrbModule * After = NULL) const;
TMrbModule * FindModuleByType(UInt_t ModuleType, TMrbModule * After = NULL) const;
TMrbModule * FindModuleByCrate(Int_t Crate, TMrbModule * After = NULL) const;
TMrbModule * FindModuleBySerial(Int_t ModuleSerial) const;
inline Int_t AssignModuleSerial() const { return(fNofModules + 1); };
Bool_t CheckModuleAddress(TMrbModule * Module, Bool_t WrnOnly = kTRUE) const;
inline Bool_t HasCamacModules() const { return(FindModuleByType(TMrbConfig::kModuleCamac) != NULL); };
inline Bool_t HasVMEModules() const { return(FindModuleByType(TMrbConfig::kModuleVME) != NULL); };
void AddScaler(TMrbModule * Scaler);
void AddMux(TMrbModule * Multiplexer);
Bool_t WriteMuxConfig(const Char_t * CfgFile);
Bool_t SetMbsBranch(TMrbNamedX & MbsBranch, Int_t MbsBranchNo, const Char_t * MbsBranchName = NULL);
Int_t CheckMbsBranchSettings();
inline Bool_t IsMultiBranch() { return (fLofMbsBranches.GetEntriesFast() > 0); };
inline Bool_t IsSingleBranch() { return (fLofMbsBranches.GetEntriesFast() == 0); };
inline Int_t GetNofBranches() { return fLofMbsBranches.GetEntriesFast(); };
TMrbModuleChannel * FindParam(const Char_t * ParamName) const;
Bool_t HistogramExists(const Char_t * HistoName) const;
inline TMrbModule * FindScaler(const Char_t * ScalerName) const {
return((TMrbModule *) fLofScalers.FindObject(ScalerName));
};
TMrbModule * FindScalerByCrate(Int_t Crate, TMrbModule * After = NULL) const;
const Char_t * GetAuthor();
const Char_t * GetMailAddr();
inline UInt_t GetReadoutOptions() const { return(fReadoutOptions); };
inline UInt_t GetAnalyzeOptions() const { return(fAnalyzeOptions); };
inline UInt_t GetConfigOptions() const { return(fConfigOptions); };
inline UInt_t GetRcFileOptions() const { return(fRcFileOptions); };
inline Bool_t IsVerbose() const { return(fVerboseMode); };
Bool_t DefineVariables(const Char_t * VarType, const Char_t * VarDefs);
Bool_t DefineVariables(const Char_t * VarType, Int_t Value, const Char_t * VarDefs);
Bool_t DefineVariables(const Char_t * VarType, Double_t Value, const Char_t * VarDefs);
Bool_t DefineVariables(const Char_t * VarType, const Char_t * Value, const Char_t * VarDefs);
Bool_t DefineWindows(const Char_t * WdwType, const Char_t * WdwDefs);
Bool_t DefineWindows(const Char_t * WdwType, Int_t Xlower, Int_t Xupper, const Char_t * WdwDefs);
Bool_t DefineWindows(const Char_t * WdwType, Double_t Xlower, Double_t Xupper, const Char_t * WdwDefs);
Bool_t DefineWindows(const Char_t * WdwType, Int_t Npoints, Double_t * X, Double_t * Y, const Char_t * WdwDefs);
Bool_t DefineFunctions(const Char_t * FctType, const Char_t * FctDefs);
inline Bool_t LongParamNamesToBeUsed() const { return(fLongParamNames); };
inline void UseLongParamNames(Bool_t Flag = kTRUE) { fLongParamNames = Flag; };
inline void WriteTimeStamp() { fWriteTimeStamp = kTRUE; };
inline Bool_t TimeStampToBeWritten() const { return(fWriteTimeStamp); };
Bool_t WriteDeadTime(const Char_t * Scaler, Int_t Interval = 1000);
inline Bool_t DeadTimeToBeWritten() const { return(fDeadTimeInterval > 0); };
inline Int_t GetDeadTimeInterval() const { return(fDeadTimeInterval); };
inline TMrbModule * GetDeadTimeScaler() const { return(fDeadTimeScaler); };
Int_t WriteCalibrationFile(Char_t * CalFile, Char_t * Modules, Char_t * CalType, Int_t Degree = 0);
Bool_t IncludeUserCode(const Char_t * IclPath, const Char_t * UserFile, Bool_t AutoGenFlag = kFALSE);
inline Bool_t IncludeUserCode(const Char_t * UserFile, Bool_t AutoGenFlag = kFALSE) {
return(this->IncludeUserCode("", UserFile, AutoGenFlag));
};
inline Bool_t UserCodeToBeIncluded() const { return(fLofUserIncludes.Last() >= 0); };
Bool_t IncludeUserLib(const Char_t * IclPath, const Char_t * UserLib, Bool_t MakeIt = kFALSE);
inline Bool_t IncludeUserLib(const Char_t * UserLib, Bool_t MakeIt = kFALSE) {
return(this->IncludeUserLib("", UserLib, MakeIt));
}
inline Bool_t UserLibsToBeIncluded() const { return(fLofUserLibs.Last() >= 0); };
Bool_t IncludeUserClass(const Char_t * IclPath, const Char_t * UserClass,
Bool_t UserDefinedEvent = kFALSE);
inline Bool_t IncludeUserClass(const Char_t * UserClass, Bool_t UserDefinedEvent = kFALSE) {
return(this->IncludeUserClass("", UserClass, UserDefinedEvent));
}
inline Bool_t UserClassesToBeIncluded() const { return(fLofUserClasses.Last() >= 0); };
inline void AddUserClass(EMrbIncludeOptions Opt, const Char_t * Name, const Char_t * Path = NULL) {
if (fLofUserClasses.FindByName(Name) == NULL) fLofUserClasses.AddNamedX((Int_t) Opt, Name, Path);
};
inline void AddUserClass(const Char_t * Name) { this->AddUserClass((EMrbIncludeOptions) 0, Name); };
inline TMrbLogger * GetMessageLogger() const { return(fMessageLogger); };
void Version() const;
TMrbConfig * ReadFromFile(const Char_t * ConfigFile = "", Option_t * Options = "");
Bool_t WriteToFile(const Char_t * ConfigFile = "", Option_t * Options = "");
void SetGlobalAddress();
inline void UseMapFile(Bool_t MapFlag = kTRUE) { fUseMapFile = MapFlag; };
inline void SetMultiBorC(TMrbCNAF::EMrbCNAF MultiBorC) {
fMultiBorC |= MultiBorC;
};
inline void SetCrateType(Int_t Crate, EMrbCrateType CrateType) { fCrateTable[Crate] = CrateType; };
inline EMrbCrateType GetCrateType(Int_t Crate) const { return((EMrbCrateType) fCrateTable[Crate]); };
Int_t FindCrate(Int_t After = -1) const;
Int_t GetNofCrates(EMrbCrateType CrateType = kCrateAny) const;
UInt_t GetCratePattern(EMrbCrateType CrateType = kCrateAny) const;
Bool_t SetControllerType(Int_t Crate, const Char_t * Type);
Bool_t SetControllerType(const Char_t * Crate, const Char_t * Type);
inline void SetControllerType(Int_t Crate, EMrbControllerType Type) { fControllerTable[Crate] = Type; };
inline EMrbControllerType GetControllerType(Int_t Crate) const { return((EMrbControllerType) fControllerTable[Crate]); };
Bool_t HandleMultipleTriggers(Int_t T1 = 0, Int_t T2 = 0, Int_t T3 = 0, Int_t T4 = 0, Int_t T5 = 0);
TMrbConfig::EMrbTriggerStatus GetTriggerStatus(Int_t Trigger) const;
void UpdateTriggerTable(Int_t Trigger = 0);
void AddToTagList(const Char_t * CodeFile, Int_t TagIndex);
Bool_t TagToBeProcessed(const Char_t * CodeFile, Int_t TagIndex) const;
Bool_t BookHistogram(const Char_t * HistoType, const Char_t * HistoName, const Char_t * HistoTitle,
Int_t Xbin, Double_t Xlow, Double_t Xup, const Char_t * Condition = NULL);
Bool_t BookHistogram(const Char_t * ArrayName, const Char_t * HistoType, const Char_t * HistoName, const Char_t * HistoTitle,
Int_t Xbin, Double_t Xlow, Double_t Xup, const Char_t * Condition = NULL);
Bool_t BookHistogram(const Char_t * HistoType, const Char_t * HistoName, const Char_t * HistoTitle,
Int_t Xbin, Double_t Xlow, Double_t Xup,
Int_t Ybin, Double_t Ylow, Double_t Yup, const Char_t * Condition = NULL);
Bool_t BookHistogram(const Char_t * ArrayName, const Char_t * HistoType, const Char_t * HistoName, const Char_t * HistoTitle,
Int_t Xbin, Double_t Xlow, Double_t Xup,
Int_t Ybin, Double_t Ylow, Double_t Yup, const Char_t * Condition = NULL);
Bool_t BookHistogram(const Char_t * HistoType, const Char_t * HistoName, const Char_t * HistoTitle,
Int_t Xbin, Double_t Xlow, Double_t Xup,
Int_t Ybin, Double_t Ylow, Double_t Yup,
Int_t Zbin, Double_t Zlow, Double_t Zup, const Char_t * Condition = NULL);
Bool_t BookHistogram(const Char_t * ArrayName, const Char_t * HistoType, const Char_t * HistoName, const Char_t * HistoTitle,
Int_t Xbin, Double_t Xlow, Double_t Xup,
Int_t Ybin, Double_t Ylow, Double_t Yup,
Int_t Zbin, Double_t Zlow, Double_t Zup, const Char_t * Condition = NULL);
Bool_t BookHistogram(const Char_t * HistoType, const Char_t * HistoName, const Char_t * HistoTitle,
const Char_t * Args, const Char_t * Condition);
Bool_t BookHistogram(const Char_t * ArrayName, const Char_t * HistoType, const Char_t * HistoName, const Char_t * HistoTitle,
const Char_t * Args, const Char_t * Condition);
Bool_t BookRateHistogram(const Char_t * HistoName, const Char_t * HistoTitle,
Int_t Scale, Int_t Range, Bool_t Loop = kFALSE, const Char_t * Condition = NULL);
Bool_t BookRateHistogram(const Char_t * ArrayName, const Char_t * HistoName, const Char_t * HistoTitle,
Int_t Scale, Int_t Range, Bool_t Loop = kFALSE, const Char_t * Condition = NULL);
TMrbNamedX * AddHistoToArray(const Char_t * ArrayName, const Char_t * HistoName);
TMrbNamedX * FindHistoArray(const Char_t * HistoName, TMrbNamedX * After = NULL) const;
inline Int_t GetNofModules() const { return(fNofModules); };
Int_t GetNofModules(const Char_t * Pattern) const;
inline TObjArray * GetLofEvents() { return(&fLofEvents); };
inline TObjArray * GetLofSubevents() { return(&fLofSubevents); };
inline TObjArray * GetLofModules() { return(&fLofModules); };
const Char_t * GetLofEventsAsString(TString & LofEvents) const;
const Char_t * GetLofSubeventsAsString(TString & LofSubevents) const;
const Char_t * GetLofModulesAsString(TString & LofModules) const;
inline TObjArray * GetLofScalers(){ return(&fLofScalers); };
inline TObjArray * GetLofMuxs(){ return(&fLofMuxs); };
inline TObjArray * GetLofUserHistograms() { return(&fLofUserHistograms); };
inline TObjArray * GetLofXhits(){ return(&fLofXhits); };
inline TObjArray * GetLofRdoIncludes(){ return(&fLofRdoIncludes); };
inline TObjArray * GetLofRdoLibs(){ return(&fLofRdoLibs); };
inline TMrbLofNamedX * GetLofModuleIDs() { return(&fLofModuleIDs); };
inline TMrbLofNamedX * GetLofModuleTypes() { return(&fLofModuleTypes); };
inline TMrbLofNamedX * GetLofDataTypes() { return(&fLofDataTypes); };
inline TMrbLofNamedX * GetLofHistoTypes() { return(&fLofHistoTypes); };
inline TMrbLofNamedX * GetLofGlobals() { return(&fLofGlobals); };
inline TMrbLofNamedX * GetLofUserIncludes() { return(&fLofUserIncludes); };
inline TMrbLofNamedX * GetLofUserClasses() { return(&fLofUserClasses); };
inline TMrbLofNamedX * GetLofUserLibs() { return(&fLofUserLibs); };
Bool_t NameNotLegal(const Char_t * ObjType, const Char_t * ObjName) const;
inline void MakeGlobal(const Char_t * Name, Int_t * IntVar, const Char_t * Comment = "") { fLofGlobals.AddNamedX(new TMrbNamedX(kGlobInt, Name, Comment, (TObject *) IntVar)); };
inline void MakeGlobal(const Char_t * Name, Float_t * FloatVar, const Char_t * Comment = "") { fLofGlobals.AddNamedX(new TMrbNamedX(kGlobFloat, Name, Comment, (TObject *) FloatVar)); };
inline void MakeGlobal(const Char_t * Name, Double_t * DblVar, const Char_t * Comment = "") { fLofGlobals.AddNamedX(new TMrbNamedX(kGlobDouble, Name, Comment, (TObject *) DblVar)); };
inline void MakeGlobal(const Char_t * Name, Bool_t * BoolVar, const Char_t * Comment = "") { fLofGlobals.AddNamedX(new TMrbNamedX(kGlobBool, Name, Comment, (TObject *) BoolVar)); };
inline void MakeGlobal(const Char_t * Name, TString & Str, const Char_t * Comment = "") { fLofGlobals.AddNamedX(new TMrbNamedX(kGlobString, Name, Comment, (TObject *) &Str)); };
void MakeGlobal(const Char_t * Name, Int_t IntVal, const Char_t * Comment = "");
void MakeGlobal(const Char_t * Name, Float_t FloatVal, const Char_t * Comment = "");
void MakeGlobal(const Char_t * Name, Double_t DblVal, const Char_t * Comment = "");
void MakeGlobal(const Char_t * Name, Bool_t BoolVal, const Char_t * Comment = "");
void MakeGlobal(const Char_t * Name, const Char_t * Str, const Char_t * Comment = "");
Bool_t GetGlobal(const Char_t * Name, Int_t & IntVar) const;
Bool_t GetGlobal(const Char_t * Name, Float_t & FloatVar) const;
Bool_t GetGlobal(const Char_t * Name, Double_t & DblVar) const;
Bool_t GetGlobal(const Char_t * Name, Bool_t & BoolVar) const;
Bool_t GetGlobal(const Char_t * Name, TString & Str) const;
Int_t GetGlobI(const Char_t * Name) const;
Float_t GetGlobF(const Char_t * Name) const;
Double_t GetGlobD(const Char_t * Name) const;
Bool_t GetGlobB(const Char_t * Name) const;
const Char_t * GetGlobStr(const Char_t * Name) const;
void PrintGlobals(const Char_t * File);
void PrintGlobals(ostream & Out);
inline void PrintGlobals() { this->PrintGlobals(cout); };
void MakeDefined(const Char_t * Name, Int_t Value, const Char_t * Comment = "");
void MakeDefined(const Char_t * Name, Bool_t Defined = kTRUE, const Char_t * Comment = "");
Bool_t IsDefined(const Char_t * Name, Int_t & Value) const;
Bool_t IsDefined(const Char_t * Name) const;
Bool_t CreateUserMacro();
Bool_t CreateUserEvent(ofstream & OutStrm, const Char_t * UserEvent, Bool_t CreateProto, Bool_t SystemPart);
Bool_t CreateXhit(TMrbNamedX * Xhit);
const Char_t * GetMbsVersion(TString & MbsVersion, Int_t BranchNo = -1, Bool_t Vformat = kTRUE, Bool_t Verbose = kFALSE);
const Char_t * GetLynxVersion(TString & LynxVersion, Int_t BranchNo = -1, Bool_t Verbose = kFALSE);
const Char_t * GetProcType(TString & ProcType, Int_t BranchNo = -1, Bool_t Verbose = kFALSE);
inline void Help() { gSystem->Exec(Form("mrbHelp %s", this->ClassName())); };
public:
TMrbLofNamedX fLofDataTypes;
TMrbLofNamedX fLofCrateTypes;
TMrbLofNamedX fLofControllerTypes;
TMrbLofNamedX fLofModuleTypes;
TMrbLofNamedX fLofReadoutTags;
TMrbLofNamedX fLofAnalyzeTags;
TMrbLofNamedX fLofConfigTags;
TMrbLofNamedX fLofRcFileTags;
TMrbLofNamedX fLofUserMacroTags;
TMrbLofNamedX fLofUserEventTags;
TMrbLofNamedX fLofXhitTags;
TMrbLofNamedX fCNAFNames;
TMrbLofNamedX fLofModuleTags;
TMrbLofNamedX fLofModuleIDs;
TMrbLofNamedX fLofHistoTypes;
TMrbLofNamedX fLofGlobals;
TMrbLofNamedX fLofDefines;
TMrbLofNamedX fLofMbsBranches;
protected:
Bool_t DefineVarOrWdw(TMrbNamedX * VarType, TObject * VarProto, const Char_t * VarDefs);
Bool_t WriteUtilityProtos();
Bool_t CheckConfig();
Bool_t CreateHistoArrays();
protected:
Bool_t fVerboseMode;
TMrbLogger * fMessageLogger;
Int_t fNofEvents;
TObjArray fLofEvents;
TArrayI fCrateTable;
TArrayI fControllerTable;
Int_t fNofSubevents;
TObjArray fLofSubevents;
Int_t fNofModules;
TObjArray fLofModules;
Bool_t fLongParamNames;
Bool_t fUseMapFile;
Int_t fNofScalers;
TObjArray fLofScalers;
Int_t fNofMuxs;
TObjArray fLofMuxs;
UInt_t fMultiBorC;
UInt_t fReadoutOptions;
UInt_t fAnalyzeOptions;
UInt_t fConfigOptions;
UInt_t fRcFileOptions;
TMrbLofNamedX fLofUserIncludes;
TMrbLofNamedX fLofUserLibs;
TMrbLofNamedX fLofUserClasses;
Bool_t fWriteTimeStamp;
Int_t fDeadTimeInterval;
TMrbModule * fDeadTimeScaler;
TString fCreationDate;
TString fUser;
TString fAuthor;
TString fMailAddr;
UInt_t fTriggerMask;
Bool_t fSingleBitTriggersOnly;
TArrayI fTriggersToBeHandled;
Int_t fSevtSize;
Int_t fPipeSegLength;
Int_t fEventBufferSize;
Int_t fNofEventBuffers;
Int_t fNofStreams;
Bool_t fUserMacroToBeCalled;
TString fUserMacro;
TString fUserMacroCmd;
TObjArray fLofOnceOnlyTags;
TObjArray fLofUserHistograms;
TObjArray fLofHistoArrays;
TObjArray fLofHistoConditions;
TObjArray fLofXhits;
TObjArray fLofRdoIncludes;
TObjArray fLofRdoLibs;
Bool_t fConfigChecked;
Bool_t fConfigOk;
TString fMbsVVersion;
ClassDef(TMrbConfig, 1)
};
#endif