#ifndef __TMrbEvent_h__
#define __TMrbEvent_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 "TList.h"
#include "TMrbConfig.h"
#include "TMrbLofNamedX.h"
#include "TMrbTemplate.h"
class TMrbSubevent;
class TMrbEvent : public TNamed {
public:
enum { kNofHitBufferEntries = 1000 };
public:
TMrbEvent() {};
TMrbEvent(Int_t TrigNumber, const Char_t * EvtName = "", const Char_t * EvtTitle = "");
~TMrbEvent() {
fLofSubevents.Delete();
};
TMrbEvent(const TMrbEvent &) : TNamed() {};
Bool_t HasSubevent(const Char_t * Assignment);
Bool_t ShareSubevents(TMrbEvent * Event);
inline TMrbSubevent * FindSubevent(const Char_t * SevtName) const {
return ((TMrbSubevent *) fLofSubevents.FindObject(SevtName));
};
TMrbSubevent * FindSubeventByCrate(Int_t Crate, TMrbSubevent * After = NULL) const;
inline Int_t GetTrigger() const { return(fTrigger); };
inline TMrbConfig::EMrbTriggerStatus GetTriggerStatus() const { return(fTriggerStatus); };
inline void SetBaseClass(const Char_t * BaseClass) { fBaseClass = BaseClass; };
inline const Char_t * GetBaseClass() { return(fBaseClass.Data()); };
inline void SetPointerName(const Char_t * PointerName) { fPointerName = PointerName; };
inline const Char_t * GetPointerName() { return(fPointerName.Data()); };
Bool_t MakeReadoutCode(ofstream & RdoStrm, TMrbConfig::EMrbReadoutTag TagIndex, TMrbTemplate & Template, const Char_t * Prefix = NULL);
Bool_t MakeAnalyzeCode(ofstream & RdoStrm, TMrbConfig::EMrbAnalyzeTag TagIndex, const Char_t * Extension);
Bool_t MakeAnalyzeCode(ofstream & RdoStrm, TMrbConfig::EMrbAnalyzeTag TagIndex, TMrbTemplate & Template, const Char_t * Prefix = NULL);
Bool_t MakeConfigCode(ofstream & CfgStrm, TMrbConfig::EMrbConfigTag TagIndex, TMrbTemplate & Template, const Char_t * Prefix = NULL);
virtual Bool_t MakeRcFile(ofstream & RcStrm, TMrbConfig::EMrbRcFileTag TagIndex, const Char_t * ResourceName) { return(kFALSE); };
Bool_t SetReadoutOptions(Option_t * Options = "");
Bool_t SetAnalyzeOptions(Option_t * Options = "Subevents:Histograms");
Bool_t SetConfigOptions(Option_t * Options = "");
UInt_t GetReadoutOptions() const;
UInt_t GetAnalyzeOptions() const;
UInt_t GetConfigOptions() const;
inline const Char_t * GetPrefix() const { return(fPrefix.Data()); };
void AllocPrivateHistograms(const Char_t * Prefix) {
fPrefix = Prefix;
fPrefix.ToLower();
fPrivateHistograms = !fPrefix.IsNull();
};
inline void AllocPrivateHistograms(Bool_t Flag) { fPrivateHistograms = fPrefix.IsNull() ? kFALSE : Flag; };
inline Bool_t HasPrivateHistograms() const { return(fPrivateHistograms); };
Bool_t Assign2dimHisto(const Char_t * HistoName, const Char_t * SevtX, const Char_t * ParamX, const Char_t * SevtY, const Char_t * ParamY);
Bool_t Assign2dimHisto(const Char_t * HistoName, const Char_t * SevtX, Int_t ParamX, const Char_t * SevtY, Int_t ParamY);
inline Bool_t Assign2dimHisto(const Char_t * HistoName, const Char_t * SevtName, const Char_t * ParamX, const Char_t * ParamY) { return(this->Assign2dimHisto(HistoName, SevtName, ParamX, SevtName, ParamY)); };
inline Bool_t Assign2dimHisto(const Char_t * HistoName, const Char_t * SevtName, Int_t ParamX, Int_t ParamY) { return(this->Assign2dimHisto(HistoName, SevtName, ParamX, SevtName, ParamY)); };
inline void SetSizeOfHitBuffer(Int_t NofEntries, Int_t HighWater = 0) {
fSizeOfHitBuffer = NofEntries;
fHBHighWaterLimit = HighWater;
}
inline Int_t GetSizeOfHitBuffer() const { return(fSizeOfHitBuffer); };
inline Int_t GetHBHighWaterLimit() const { return(fHBHighWaterLimit); };;
virtual inline Bool_t HasPrivateCode() const { return(kFALSE); };
virtual inline const Char_t * GetPrivateCodeFile() const { return(NULL); };
virtual inline const Char_t * GetCommonCodeFile() { return(NULL); };
Bool_t SetMbsBranch(Int_t MbsBranchNo, const Char_t * MbsBranchName = NULL);
inline Bool_t SetMbsBranch(TMrbNamedX * MbsBranch) { return(this->SetMbsBranch(MbsBranch->GetIndex(), MbsBranch->GetName())); };
inline TMrbNamedX * GetMbsBranch() { return(&fMbsBranch); };
inline Int_t GetMbsBranchNo() { return(fMbsBranch.GetIndex()); };
Bool_t SelectMbsBranch(Int_t MbsBranchNo);
inline Int_t GetSelectedBranchNo() { return(fSelectedBranchNo); };
inline Int_t GetNofSubevents() const { return(fNofSubevents); };
inline TMrbLofNamedX * GetLofSubevents() { return(&fLofSubevents); };
const Char_t * GetLofSubeventsAsString(TString & LofSubevents) const;
inline Int_t GetType() const { return(fEventType); };
inline Int_t GetSubtype() const { return(fEventSubtype); };
inline void SetAutoSave(Int_t AutoSave = TMrbConfig::kAutoSave) { fAutoSave = AutoSave; };
inline Int_t GetAutoSave() const { return(fAutoSave); };
inline Bool_t IsStartEvent() { return(fTrigger == TMrbConfig::kTriggerStartAcq); };
inline Bool_t IsStopEvent() { return(fTrigger == TMrbConfig::kTriggerStopAcq); };
inline Bool_t IsReservedEvent() { return(this->IsStartEvent() || this->IsStopEvent()); };
void Print(Option_t * Option) const { TObject::Print(Option); }
void Print(ostream & OutStrm, const Char_t * Prefix = "") const;
inline virtual void Print() const { Print(cout, ""); };
inline void CreateHistoArray(const Char_t * ArrayName = NULL) {
fCreateHistoArray = kTRUE;
fHistoArrayName = ArrayName ? ArrayName : this->GetName();
}
inline Bool_t HistoArrayToBeCreated() { return(fCreateHistoArray); };
inline const Char_t * GetHistoArrayName() { return(fHistoArrayName.Data()); };
inline void Help() { gSystem->Exec(Form("mrbHelp %s", this->ClassName())); };
protected:
UInt_t fEventType;
UInt_t fEventSubtype;
Int_t fTrigger;
TMrbConfig::EMrbTriggerStatus fTriggerStatus;
Int_t fNofSubevents;
TMrbLofNamedX fLofSubevents;
TMrbLofNamedX fLof2dimHistos;
TString fBaseClass;
TString fPointerName;
UInt_t fReadoutOptions;
UInt_t fAnalyzeOptions;
UInt_t fConfigOptions;
Int_t fAutoSave;
TMrbNamedX fMbsBranch;
Int_t fSelectedBranchNo;
Bool_t fPrivateHistograms;
TString fPrefix;
Int_t fSizeOfHitBuffer;
Int_t fHBHighWaterLimit;
Bool_t fCreateHistoArray;
TString fHistoArrayName;
ClassDef(TMrbEvent, 1)
};
#endif