ROOT logo
#ifndef __TMrbDGFEventBuffer_h__
#define __TMrbDGFEventBuffer_h__

//_________________________________________________[C++ CLASS DEFINITION FILE]
//////////////////////////////////////////////////////////////////////////////
// Name:           xiadgf/inc/TMrbDGFEventBuffer.h
// Purpose:        Interface to module XIA DGF-4C
// Class:          TMrbDGFEventBuffer   -- DGF's event buffer
// Description:    Class definitions to operate the XIA DGF-4C module.
// Author:         R. Lutter
// Revision:       $Id: TMrbDGFEventBuffer.h,v 1.5 2005-08-17 11:25:04 Rudolf.Lutter Exp $       
// Date:           
// Keywords:
//////////////////////////////////////////////////////////////////////////////

#include "TNamed.h"
#include "TSystem.h"
#include "TH1.h"
#include "TF1.h"
#include "TString.h"
#include "TArrayI.h"
#include "TObjArray.h"

//______________________________________________________[C++ CLASS DEFINITION]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbDGFEventBuffer
// Purpose:        DGF's list mode buffer
// Methods:
// Description:    Describes the list mode buffer.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

class TMrbDGFEventBuffer : public TNamed, public TArrayI {

	public:

		// buffer header
		enum EMrbDGFBufferHeader	{	kBufNofWords		=	0,
										kModNumber,
										kFormat,
										kRunStartTime
									};
		enum						{	kBufHeaderLength	=	6	};

		// event header
		enum EMrbDGFEventHeader 	{	kHitPattern 		=	0,
										kEventTime
									};
		enum						{	kEventHeaderLength	=	3	};

		// channel header
		enum EMrbDGFChanHeader		{	kChanNofWords		=	0,
										kFastTrigger,
										kEnergy,
										kConstFractTriggerTime
									};
		enum						{	kChanHeaderLength	=	9	};

		enum						{	kTotalHeaderLength	=	kBufHeaderLength
															+	kEventHeaderLength
															+	kChanHeaderLength
									};

	public:
		TMrbDGFEventBuffer( const Char_t * BufferName = "dgfEbuf",
							TObject * Module = NULL,
							Int_t Index = -1, Int_t Event0 = -1);		// ctor

		~TMrbDGFEventBuffer() {}; 										// default dtor

		void Print(Option_t * Option) const { TObject::Print(Option); }
		void Print(ostream & OutStrm, Int_t EventNumber = -1, const Char_t * ModuleInfo = NULL);
		inline void Print(Int_t EventNumber = -1) { this->Print(cout, EventNumber); };
		Bool_t WriteToFile(const Char_t * FileName, const Char_t * ModuleInfo);

		void Reset();													// reset buffer
		inline Int_t GetNofWords() { return(fNofWords); };				// get number of data words
		inline Int_t GetNofEvents() { return(fNofEvents); };			// get number of events

		inline Int_t GetGlobalIndex() { return(fGlobIndex); };			// global buffer index
		inline void SetGlobalIndex(Int_t Index) { fGlobIndex = Index; };
		inline Int_t GetGlobalEventNo() { return(fGlobEventNo); };		// global event number
		inline void SetGlobalEventNo(Int_t EventNo) { fGlobEventNo = EventNo; };
				
		Int_t GetNofChannels(Int_t EventNumber);						// get number of channels
		UInt_t GetHitPattern(Int_t EventNumber); 						// get hit pattern

		Int_t GetChannel(Int_t EventNumber, Int_t Channel, TArrayI & Data);

		Int_t GetNofWords(Int_t EventNumber, Int_t Channel);						// get number of words for a given channel

		inline UInt_t * GetDAddr() { return((UInt_t *) &fArray); }; 				// addr of data region

		inline void SetTraceError(Stat_t Error) { fTraceError = Error; };			// define common trace error
		inline Stat_t GetTraceError() { return(fTraceError); };

		inline void SetModule(TObject * Module) { fModule = Module; };				// connect to dgf module
		
		TH1F * FillHistogram(Int_t EventNumber, Int_t Channel, Bool_t DrawIt = kTRUE);	// fill trace data into histo

		Double_t CalcTau(Int_t EventNumber, Int_t Channel, Int_t GlobalEventNo,
							Double_t A0, Double_t A1, Double_t A2,
							Int_t From = 0, Int_t To = 0,
							Bool_t Verbose = kTRUE, Bool_t DrawIt = kTRUE); 		// calculate tau

		Double_t GetTau(Int_t EventNumber, Int_t Channel);							// recall calculated tau value
		
		inline TH1F * Histogram() { return(fHistogram); };							// addr of internal histo
		inline TF1 * Fit() { return(fTauFit); };									// addr of internal fit

		Bool_t SaveTraces(const Char_t * TraceFile = NULL,
			Int_t EventNumber = -1, Int_t Channel = -1);							// save trace data

		const Char_t * BufferTime2Ascii(TString & TimeString, UShort_t * TimeArray) const;	// convert 48 bit time to ascii

		void MakeIndex();															// analyze buffer data

	protected:
		TObject * fModule;					//! ptr to dgf module

		Int_t fNofWords;					// number of words in this buffer
		Int_t fNofEvents;					// number of events in this buffer
		Stat_t fTraceError;					// error to be applied to trace data
		TObjArray fEventIndex;				// event index
		TH1F * fHistogram;					//! histogram
		TF1 * fTauFit;						//! tau fit;

		Int_t fGlobIndex;					// global buffer index
		Int_t fGlobEventNo; 				// global event number
		
	ClassDef(TMrbDGFEventBuffer, 1) 		// [XIA DGF-4C] Buffer to store event data
};

#endif
 TMrbDGFEventBuffer.h:1
 TMrbDGFEventBuffer.h:2
 TMrbDGFEventBuffer.h:3
 TMrbDGFEventBuffer.h:4
 TMrbDGFEventBuffer.h:5
 TMrbDGFEventBuffer.h:6
 TMrbDGFEventBuffer.h:7
 TMrbDGFEventBuffer.h:8
 TMrbDGFEventBuffer.h:9
 TMrbDGFEventBuffer.h:10
 TMrbDGFEventBuffer.h:11
 TMrbDGFEventBuffer.h:12
 TMrbDGFEventBuffer.h:13
 TMrbDGFEventBuffer.h:14
 TMrbDGFEventBuffer.h:15
 TMrbDGFEventBuffer.h:16
 TMrbDGFEventBuffer.h:17
 TMrbDGFEventBuffer.h:18
 TMrbDGFEventBuffer.h:19
 TMrbDGFEventBuffer.h:20
 TMrbDGFEventBuffer.h:21
 TMrbDGFEventBuffer.h:22
 TMrbDGFEventBuffer.h:23
 TMrbDGFEventBuffer.h:24
 TMrbDGFEventBuffer.h:25
 TMrbDGFEventBuffer.h:26
 TMrbDGFEventBuffer.h:27
 TMrbDGFEventBuffer.h:28
 TMrbDGFEventBuffer.h:29
 TMrbDGFEventBuffer.h:30
 TMrbDGFEventBuffer.h:31
 TMrbDGFEventBuffer.h:32
 TMrbDGFEventBuffer.h:33
 TMrbDGFEventBuffer.h:34
 TMrbDGFEventBuffer.h:35
 TMrbDGFEventBuffer.h:36
 TMrbDGFEventBuffer.h:37
 TMrbDGFEventBuffer.h:38
 TMrbDGFEventBuffer.h:39
 TMrbDGFEventBuffer.h:40
 TMrbDGFEventBuffer.h:41
 TMrbDGFEventBuffer.h:42
 TMrbDGFEventBuffer.h:43
 TMrbDGFEventBuffer.h:44
 TMrbDGFEventBuffer.h:45
 TMrbDGFEventBuffer.h:46
 TMrbDGFEventBuffer.h:47
 TMrbDGFEventBuffer.h:48
 TMrbDGFEventBuffer.h:49
 TMrbDGFEventBuffer.h:50
 TMrbDGFEventBuffer.h:51
 TMrbDGFEventBuffer.h:52
 TMrbDGFEventBuffer.h:53
 TMrbDGFEventBuffer.h:54
 TMrbDGFEventBuffer.h:55
 TMrbDGFEventBuffer.h:56
 TMrbDGFEventBuffer.h:57
 TMrbDGFEventBuffer.h:58
 TMrbDGFEventBuffer.h:59
 TMrbDGFEventBuffer.h:60
 TMrbDGFEventBuffer.h:61
 TMrbDGFEventBuffer.h:62
 TMrbDGFEventBuffer.h:63
 TMrbDGFEventBuffer.h:64
 TMrbDGFEventBuffer.h:65
 TMrbDGFEventBuffer.h:66
 TMrbDGFEventBuffer.h:67
 TMrbDGFEventBuffer.h:68
 TMrbDGFEventBuffer.h:69
 TMrbDGFEventBuffer.h:70
 TMrbDGFEventBuffer.h:71
 TMrbDGFEventBuffer.h:72
 TMrbDGFEventBuffer.h:73
 TMrbDGFEventBuffer.h:74
 TMrbDGFEventBuffer.h:75
 TMrbDGFEventBuffer.h:76
 TMrbDGFEventBuffer.h:77
 TMrbDGFEventBuffer.h:78
 TMrbDGFEventBuffer.h:79
 TMrbDGFEventBuffer.h:80
 TMrbDGFEventBuffer.h:81
 TMrbDGFEventBuffer.h:82
 TMrbDGFEventBuffer.h:83
 TMrbDGFEventBuffer.h:84
 TMrbDGFEventBuffer.h:85
 TMrbDGFEventBuffer.h:86
 TMrbDGFEventBuffer.h:87
 TMrbDGFEventBuffer.h:88
 TMrbDGFEventBuffer.h:89
 TMrbDGFEventBuffer.h:90
 TMrbDGFEventBuffer.h:91
 TMrbDGFEventBuffer.h:92
 TMrbDGFEventBuffer.h:93
 TMrbDGFEventBuffer.h:94
 TMrbDGFEventBuffer.h:95
 TMrbDGFEventBuffer.h:96
 TMrbDGFEventBuffer.h:97
 TMrbDGFEventBuffer.h:98
 TMrbDGFEventBuffer.h:99
 TMrbDGFEventBuffer.h:100
 TMrbDGFEventBuffer.h:101
 TMrbDGFEventBuffer.h:102
 TMrbDGFEventBuffer.h:103
 TMrbDGFEventBuffer.h:104
 TMrbDGFEventBuffer.h:105
 TMrbDGFEventBuffer.h:106
 TMrbDGFEventBuffer.h:107
 TMrbDGFEventBuffer.h:108
 TMrbDGFEventBuffer.h:109
 TMrbDGFEventBuffer.h:110
 TMrbDGFEventBuffer.h:111
 TMrbDGFEventBuffer.h:112
 TMrbDGFEventBuffer.h:113
 TMrbDGFEventBuffer.h:114
 TMrbDGFEventBuffer.h:115
 TMrbDGFEventBuffer.h:116
 TMrbDGFEventBuffer.h:117
 TMrbDGFEventBuffer.h:118
 TMrbDGFEventBuffer.h:119
 TMrbDGFEventBuffer.h:120
 TMrbDGFEventBuffer.h:121
 TMrbDGFEventBuffer.h:122
 TMrbDGFEventBuffer.h:123
 TMrbDGFEventBuffer.h:124
 TMrbDGFEventBuffer.h:125
 TMrbDGFEventBuffer.h:126
 TMrbDGFEventBuffer.h:127
 TMrbDGFEventBuffer.h:128
 TMrbDGFEventBuffer.h:129
 TMrbDGFEventBuffer.h:130
 TMrbDGFEventBuffer.h:131
 TMrbDGFEventBuffer.h:132
 TMrbDGFEventBuffer.h:133
 TMrbDGFEventBuffer.h:134