ROOT logo
#ifndef __TUsrEventBuilder_h__
#define __TUsrEventBuilder_h__

//_________________________________________________[C++ CLASS DEFINITION FILE]
//////////////////////////////////////////////////////////////////////////////
// Name:           TUsrEventBuilder.h
// Purpose:        Class to describe an event builder
// Description:
// Author:         R. Lutter
// Revision:       $Id$
// Date:
// URL:
// Keywords:
//////////////////////////////////////////////////////////////////////////////

#include "TObject.h"
#include "TObjArray.h"
#include "TIterator.h"
#include "TEnv.h"

#include "TUsrHit.h"
#include "TUsrHBX.h"
#include "TUsrEvent.h"

enum EMrbSpecialHitIndices	{	kHitHbxIndex		=	2,
								kHitIndexWithinBuffer	=	3
							};

//______________________________________________________[C++ CLASS DEFINITION]
//////////////////////////////////////////////////////////////////////////////
// Name:           TUsrEventBuilder
// Purpose:        A user-specific event builder
// Description:    Defines methods to collect physical events from hitbuffer data
// Keywords:
//////////////////////////////////////////////////////////////////////////////

class TUsrEventBuilder : public TObject {

	public:
		TUsrEventBuilder() {};
		TUsrEventBuilder(TUsrEvent * Event, Int_t NofHbx, Int_t FirstHbx = 1, Int_t MaxTimeDiff = 0, Int_t ResetValue = 0, Int_t DataIndex = TUsrHit::kHitEnergy) {
			this->SetEvent(Event);
			this->SetNofHbx(NofHbx, FirstHbx);
			if (MaxTimeDiff == 0) MaxTimeDiff = gEnv->GetValue("TMrbAnalyze.MaxTimeDiff", 10);
			this->SetMaxTimeDiff(MaxTimeDiff);
			this->SetResetValue(ResetValue);
			this->SetDataIndex(DataIndex);
			fEventHeads.Clear();
			fTimeStampLow = 0;
			fTimeStampHigh = 0;
			fDataArray = NULL;
			fNofChannels = 32;
		}
		~TUsrEventBuilder() {};

		void CollectEventHeads();
		inline void SetEvent(TUsrEvent * Event) { fEvent = Event; };
		inline void SetNofHbx(Int_t NofHbx, Int_t FirstHbx = 1) { fNofHbx = NofHbx; fFirstHbx = FirstHbx; };
		inline void SetMaxTimeDiff(Int_t MaxTimeDiff) { fMaxTimeDiff = MaxTimeDiff; };
		inline void SetResetValue(Int_t ResetValue) { fResetValue = ResetValue; };
		inline void SetDataIndex(Int_t DataIndex) { fDataIndex = DataIndex; };
		
		inline ULong64_t GetTimeStampLow() { return fTimeStampLow; };
		inline ULong64_t GetTimeStampHigh() { return fTimeStampHigh; };
		
		inline void UseArray(TArrayI * DataArray, Int_t NofChannels = 32) { fDataArray = DataArray; fNofChannels = NofChannels; };
		
		inline TObjArray * GetHitList() { return &fHitList; };

		Bool_t NextEvent();

	protected:
		void FillVector(TUsrHit * FirstHit);

	protected:
		TUsrEvent * fEvent;	// user's event class
		Int_t fNofHbx;		// number of hitbuffers
		Int_t fFirstHbx;	// index of first hitbuffer
		Int_t fMaxTimeDiff;	// max time diff within a physical event
		Int_t fResetValue;	// reset value
		Int_t fDataIndex;	// hit data index
		
		ULong64_t fTimeStampLow;	// time stamp, low value
		ULong64_t fTimeStampHigh;	// ... high value

		TObjArray fEventHeads;		// list of hits at beginning of adc events
		TIterator * fEventIter;		// iterator to step thru list of event heads
		
		TObjArray fHitList;			// list of hits belonging to one physical event
		
		TArrayI * fDataArray;		// array to store hit data, use subevent storage if = NULL
		Int_t fNofChannels;			// number of channels per adc

	ClassDef(TUsrEventBuilder, 1)	// [Analyze] A user-specific event builder
};

#endif
 TUsrEventBuilder.h:1
 TUsrEventBuilder.h:2
 TUsrEventBuilder.h:3
 TUsrEventBuilder.h:4
 TUsrEventBuilder.h:5
 TUsrEventBuilder.h:6
 TUsrEventBuilder.h:7
 TUsrEventBuilder.h:8
 TUsrEventBuilder.h:9
 TUsrEventBuilder.h:10
 TUsrEventBuilder.h:11
 TUsrEventBuilder.h:12
 TUsrEventBuilder.h:13
 TUsrEventBuilder.h:14
 TUsrEventBuilder.h:15
 TUsrEventBuilder.h:16
 TUsrEventBuilder.h:17
 TUsrEventBuilder.h:18
 TUsrEventBuilder.h:19
 TUsrEventBuilder.h:20
 TUsrEventBuilder.h:21
 TUsrEventBuilder.h:22
 TUsrEventBuilder.h:23
 TUsrEventBuilder.h:24
 TUsrEventBuilder.h:25
 TUsrEventBuilder.h:26
 TUsrEventBuilder.h:27
 TUsrEventBuilder.h:28
 TUsrEventBuilder.h:29
 TUsrEventBuilder.h:30
 TUsrEventBuilder.h:31
 TUsrEventBuilder.h:32
 TUsrEventBuilder.h:33
 TUsrEventBuilder.h:34
 TUsrEventBuilder.h:35
 TUsrEventBuilder.h:36
 TUsrEventBuilder.h:37
 TUsrEventBuilder.h:38
 TUsrEventBuilder.h:39
 TUsrEventBuilder.h:40
 TUsrEventBuilder.h:41
 TUsrEventBuilder.h:42
 TUsrEventBuilder.h:43
 TUsrEventBuilder.h:44
 TUsrEventBuilder.h:45
 TUsrEventBuilder.h:46
 TUsrEventBuilder.h:47
 TUsrEventBuilder.h:48
 TUsrEventBuilder.h:49
 TUsrEventBuilder.h:50
 TUsrEventBuilder.h:51
 TUsrEventBuilder.h:52
 TUsrEventBuilder.h:53
 TUsrEventBuilder.h:54
 TUsrEventBuilder.h:55
 TUsrEventBuilder.h:56
 TUsrEventBuilder.h:57
 TUsrEventBuilder.h:58
 TUsrEventBuilder.h:59
 TUsrEventBuilder.h:60
 TUsrEventBuilder.h:61
 TUsrEventBuilder.h:62
 TUsrEventBuilder.h:63
 TUsrEventBuilder.h:64
 TUsrEventBuilder.h:65
 TUsrEventBuilder.h:66
 TUsrEventBuilder.h:67
 TUsrEventBuilder.h:68
 TUsrEventBuilder.h:69
 TUsrEventBuilder.h:70
 TUsrEventBuilder.h:71
 TUsrEventBuilder.h:72
 TUsrEventBuilder.h:73
 TUsrEventBuilder.h:74
 TUsrEventBuilder.h:75
 TUsrEventBuilder.h:76
 TUsrEventBuilder.h:77
 TUsrEventBuilder.h:78
 TUsrEventBuilder.h:79
 TUsrEventBuilder.h:80
 TUsrEventBuilder.h:81
 TUsrEventBuilder.h:82
 TUsrEventBuilder.h:83
 TUsrEventBuilder.h:84
 TUsrEventBuilder.h:85
 TUsrEventBuilder.h:86
 TUsrEventBuilder.h:87
 TUsrEventBuilder.h:88
 TUsrEventBuilder.h:89
 TUsrEventBuilder.h:90
 TUsrEventBuilder.h:91
 TUsrEventBuilder.h:92
 TUsrEventBuilder.h:93
 TUsrEventBuilder.h:94
 TUsrEventBuilder.h:95
 TUsrEventBuilder.h:96
 TUsrEventBuilder.h:97