ROOT logo
#ifndef __TMrbEvent_h__
#define __TMrbEvent_h__

//_________________________________________________[C++ CLASS DEFINITION FILE]
//////////////////////////////////////////////////////////////////////////////
// Name:           expconf/inc/TMrbEvent.h
// Purpose:        Define experimental configuration for MARaBOU
// Class:          TMrbEvent            -- event connected to a trigger
// Description:    Class definitions to implement a configuration front-end for MARaBOU
// Author:         R. Lutter
// Revision:       $Id: TMrbEvent.h,v 1.14 2011-02-11 08:06:08 Marabou Exp $
// Date:
// Keywords:
//////////////////////////////////////////////////////////////////////////////

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;

//______________________________________________________[C++ CLASS DEFINITION]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbEvent
// Purpose:        Define an event
// Description:    Defines an event connected to a trigger
// Keywords:
//////////////////////////////////////////////////////////////////////////////

class TMrbEvent : public TNamed {

	public:
		enum					{	kNofHitBufferEntries		= 1000	};

	public:
		TMrbEvent() {};										// default ctor

		TMrbEvent(Int_t TrigNumber, const Char_t * EvtName = "", const Char_t * EvtTitle = "");	// explicit ctor

		~TMrbEvent() {	 									// dtor
//			cout << "***********  dtor ~TMrbEvent() " << GetName() << endl;
			fLofSubevents.Delete();
 		};

		TMrbEvent(const TMrbEvent &) : TNamed() {};					// default copy ctor

		Bool_t HasSubevent(const Char_t * Assignment);		// add subevent(s)
		Bool_t ShareSubevents(TMrbEvent * Event);			// share subevent(s) with another event

		inline TMrbSubevent * FindSubevent(const Char_t * SevtName) const {					// find a subevent
			return ((TMrbSubevent *) fLofSubevents.FindObject(SevtName));
		};
		TMrbSubevent * FindSubeventByCrate(Int_t Crate, TMrbSubevent * After = NULL) const;	// find a subevent with specified crate

		inline Int_t GetTrigger() const { return(fTrigger); };							// return trigger number
		inline TMrbConfig::EMrbTriggerStatus GetTriggerStatus() const { return(fTriggerStatus); };	// return trigger status

		inline void SetBaseClass(const Char_t * BaseClass) { fBaseClass = BaseClass; };			// base class
		inline const Char_t * GetBaseClass() { return(fBaseClass.Data()); };
		inline void SetPointerName(const Char_t * PointerName) { fPointerName = PointerName; };	// name of ptr to obj
		inline const Char_t * GetPointerName() { return(fPointerName.Data()); };

		Bool_t MakeReadoutCode(ofstream & RdoStrm, TMrbConfig::EMrbReadoutTag TagIndex, TMrbTemplate & Template, const Char_t * Prefix = NULL); // generate readout code

		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 = "");						// set options for MakeReadoutCode()
		Bool_t SetAnalyzeOptions(Option_t * Options = "Subevents:Histograms");	// set options for MakeAnalyzeCode()
		Bool_t SetConfigOptions(Option_t * Options = "");						// set options for MakeConfigCode()

		UInt_t GetReadoutOptions() const; 												// return MakeReadoutCode() options
		UInt_t GetAnalyzeOptions() const; 												// return MakeAnalyzeCode() options
		UInt_t GetConfigOptions() const;													// return MakeConfigCode() options

		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); }; 				// normal code generation
		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);	// mbs branch
		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); };					// number of subevents
		inline TMrbLofNamedX * GetLofSubevents() { return(&fLofSubevents); };		// list of subevents
		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; }; 	// auto save mechanism
		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()); };	// start or stop event?

		void Print(Option_t * Option) const { TObject::Print(Option); }
		void Print(ostream & OutStrm, const Char_t * Prefix = "") const;	// show data
		inline virtual void Print() const { Print(cout, ""); };

		inline void CreateHistoArray(const Char_t * ArrayName = NULL) {		// create array of histograms and write .histlist file
			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;									// associated trigger number
		TMrbConfig::EMrbTriggerStatus fTriggerStatus;	// trigger status: assigned, pattern

		Int_t fNofSubevents;				// list of subevents
		TMrbLofNamedX fLofSubevents;

		TMrbLofNamedX fLof2dimHistos;		// 2-dim histos to be accumulated

		TString fBaseClass; 				// name of base class
		TString fPointerName;				// name of ptr to event

		UInt_t fReadoutOptions; 			// options used in MakeReadoutCode()
		UInt_t fAnalyzeOptions; 			// ... in MakeAnalyzeCode()
		UInt_t fConfigOptions;  			// ... in MakeConfigCode()

		Int_t fAutoSave;					// auto save after N bytes

		TMrbNamedX fMbsBranch;				// branch within MBS
		Int_t fSelectedBranchNo;			// selected branch

		Bool_t fPrivateHistograms;			// kTRUE if private histograms to be accumualted
		TString fPrefix;					// prefix to be prepended to private histos

		Int_t fSizeOfHitBuffer;
		Int_t fHBHighWaterLimit;

		Bool_t fCreateHistoArray;			// kTRUE if histo array / .histlist file is to be created
		TString fHistoArrayName;			// name of histo array / .histlist file

	ClassDef(TMrbEvent, 1)		// [Config] Base class describing a MBS event
};

#endif
 TMrbEvent.h:1
 TMrbEvent.h:2
 TMrbEvent.h:3
 TMrbEvent.h:4
 TMrbEvent.h:5
 TMrbEvent.h:6
 TMrbEvent.h:7
 TMrbEvent.h:8
 TMrbEvent.h:9
 TMrbEvent.h:10
 TMrbEvent.h:11
 TMrbEvent.h:12
 TMrbEvent.h:13
 TMrbEvent.h:14
 TMrbEvent.h:15
 TMrbEvent.h:16
 TMrbEvent.h:17
 TMrbEvent.h:18
 TMrbEvent.h:19
 TMrbEvent.h:20
 TMrbEvent.h:21
 TMrbEvent.h:22
 TMrbEvent.h:23
 TMrbEvent.h:24
 TMrbEvent.h:25
 TMrbEvent.h:26
 TMrbEvent.h:27
 TMrbEvent.h:28
 TMrbEvent.h:29
 TMrbEvent.h:30
 TMrbEvent.h:31
 TMrbEvent.h:32
 TMrbEvent.h:33
 TMrbEvent.h:34
 TMrbEvent.h:35
 TMrbEvent.h:36
 TMrbEvent.h:37
 TMrbEvent.h:38
 TMrbEvent.h:39
 TMrbEvent.h:40
 TMrbEvent.h:41
 TMrbEvent.h:42
 TMrbEvent.h:43
 TMrbEvent.h:44
 TMrbEvent.h:45
 TMrbEvent.h:46
 TMrbEvent.h:47
 TMrbEvent.h:48
 TMrbEvent.h:49
 TMrbEvent.h:50
 TMrbEvent.h:51
 TMrbEvent.h:52
 TMrbEvent.h:53
 TMrbEvent.h:54
 TMrbEvent.h:55
 TMrbEvent.h:56
 TMrbEvent.h:57
 TMrbEvent.h:58
 TMrbEvent.h:59
 TMrbEvent.h:60
 TMrbEvent.h:61
 TMrbEvent.h:62
 TMrbEvent.h:63
 TMrbEvent.h:64
 TMrbEvent.h:65
 TMrbEvent.h:66
 TMrbEvent.h:67
 TMrbEvent.h:68
 TMrbEvent.h:69
 TMrbEvent.h:70
 TMrbEvent.h:71
 TMrbEvent.h:72
 TMrbEvent.h:73
 TMrbEvent.h:74
 TMrbEvent.h:75
 TMrbEvent.h:76
 TMrbEvent.h:77
 TMrbEvent.h:78
 TMrbEvent.h:79
 TMrbEvent.h:80
 TMrbEvent.h:81
 TMrbEvent.h:82
 TMrbEvent.h:83
 TMrbEvent.h:84
 TMrbEvent.h:85
 TMrbEvent.h:86
 TMrbEvent.h:87
 TMrbEvent.h:88
 TMrbEvent.h:89
 TMrbEvent.h:90
 TMrbEvent.h:91
 TMrbEvent.h:92
 TMrbEvent.h:93
 TMrbEvent.h:94
 TMrbEvent.h:95
 TMrbEvent.h:96
 TMrbEvent.h:97
 TMrbEvent.h:98
 TMrbEvent.h:99
 TMrbEvent.h:100
 TMrbEvent.h:101
 TMrbEvent.h:102
 TMrbEvent.h:103
 TMrbEvent.h:104
 TMrbEvent.h:105
 TMrbEvent.h:106
 TMrbEvent.h:107
 TMrbEvent.h:108
 TMrbEvent.h:109
 TMrbEvent.h:110
 TMrbEvent.h:111
 TMrbEvent.h:112
 TMrbEvent.h:113
 TMrbEvent.h:114
 TMrbEvent.h:115
 TMrbEvent.h:116
 TMrbEvent.h:117
 TMrbEvent.h:118
 TMrbEvent.h:119
 TMrbEvent.h:120
 TMrbEvent.h:121
 TMrbEvent.h:122
 TMrbEvent.h:123
 TMrbEvent.h:124
 TMrbEvent.h:125
 TMrbEvent.h:126
 TMrbEvent.h:127
 TMrbEvent.h:128
 TMrbEvent.h:129
 TMrbEvent.h:130
 TMrbEvent.h:131
 TMrbEvent.h:132
 TMrbEvent.h:133
 TMrbEvent.h:134
 TMrbEvent.h:135
 TMrbEvent.h:136
 TMrbEvent.h:137
 TMrbEvent.h:138
 TMrbEvent.h:139
 TMrbEvent.h:140
 TMrbEvent.h:141
 TMrbEvent.h:142
 TMrbEvent.h:143
 TMrbEvent.h:144
 TMrbEvent.h:145
 TMrbEvent.h:146
 TMrbEvent.h:147
 TMrbEvent.h:148
 TMrbEvent.h:149
 TMrbEvent.h:150
 TMrbEvent.h:151
 TMrbEvent.h:152
 TMrbEvent.h:153
 TMrbEvent.h:154
 TMrbEvent.h:155
 TMrbEvent.h:156
 TMrbEvent.h:157
 TMrbEvent.h:158
 TMrbEvent.h:159
 TMrbEvent.h:160
 TMrbEvent.h:161
 TMrbEvent.h:162
 TMrbEvent.h:163
 TMrbEvent.h:164
 TMrbEvent.h:165
 TMrbEvent.h:166
 TMrbEvent.h:167
 TMrbEvent.h:168
 TMrbEvent.h:169
 TMrbEvent.h:170
 TMrbEvent.h:171
 TMrbEvent.h:172
 TMrbEvent.h:173
 TMrbEvent.h:174
 TMrbEvent.h:175
 TMrbEvent.h:176
 TMrbEvent.h:177
 TMrbEvent.h:178
 TMrbEvent.h:179
 TMrbEvent.h:180
 TMrbEvent.h:181
 TMrbEvent.h:182
 TMrbEvent.h:183
 TMrbEvent.h:184
 TMrbEvent.h:185
 TMrbEvent.h:186
 TMrbEvent.h:187
 TMrbEvent.h:188
 TMrbEvent.h:189