ROOT logo
#ifndef __TUsrHitBuffer_h__
#define __TUsrHitBuffer_h__

//_________________________________________________[C++ CLASS DEFINITION FILE]
//////////////////////////////////////////////////////////////////////////////
// Name:           TUsrHitBuffer.h
// Purpose:        Class to store hits in a buffer
// Description:
// Author:         R. Lutter
// Revision:       $Id: TUsrHitBuffer.h,v 1.2 2011-02-17 12:43:35 Marabou Exp $       
// Date:           
// URL:            
// Keywords:       
//////////////////////////////////////////////////////////////////////////////

#include "TObject.h"
#include "TString.h"
#include "TClonesArray.h"
#include "TUsrHit.h"

//______________________________________________________[C++ CLASS DEFINITION]
//////////////////////////////////////////////////////////////////////////////
// Name:           TUsrHitBuffer
// Purpose:        A buffer to store hit data
// Description:    TClonesArray to store hit data.
//                 Entries are indexed by module and channel number.
//                 Sorting may be done according to time stamp.
// Keywords:       
//////////////////////////////////////////////////////////////////////////////

class TUsrHitBuffer : public TObject {

	public:
		TUsrHitBuffer(Int_t NofEntries = 2500) {
   			fNofEntries = NofEntries;
   			fNofHits = 0;
   			fHits = NULL;
		};

		virtual ~TUsrHitBuffer() {
			if (fHits) delete fHits;
		};										// default dtor

		inline void SetName(const Char_t * BufferName) { fBufName = BufferName; };
		inline const Char_t * GetName() const { return fBufName.Data(); };

		Int_t AllocClonesArray(const Char_t * HitObj, Int_t NofEntries, Int_t HighWater = 0);	// allocate TClonesArray to store hits
		inline Int_t AllocClonesArray(Int_t NofEntries, Int_t HighWater = 0) { return(this->AllocClonesArray("TUsrHit", NofEntries, HighWater)); };

		void Reset();												// reset hit list

		TUsrHit * AddHit(Int_t EventNumber, Int_t ModuleNumber, Int_t Channel, 			// add a new hit
										UShort_t BufferTimeHi, UShort_t EventTimeHi, UShort_t FastTrigTime,
										UShort_t * Data, Int_t NofData);
		TUsrHit * AddHit(Int_t EventNumber, Int_t ModuleNumber, Int_t Channel, 
										UShort_t * ChannelTime,
										UShort_t * Data, Int_t NofData);
		Bool_t AddHit(const TUsrHit * Hit);					  //  add (append) ready made hit

		TUsrHit * GetHitAt(Int_t Index);					// get hit at given index

		Bool_t RemoveHit(TUsrHit * Hit);					// remove hit
		Bool_t RemoveHit(Int_t Index);

		inline Int_t GetNofEntries() const { return(fNofEntries); };
		inline Int_t GetNofHits() const { return(fNofHits); };
		
		inline void SetHighWater(Int_t HighWater) { fHighWater = (HighWater >= fNofEntries) ? 0 : HighWater; };
		inline Int_t GetHighWater() const { return(fHighWater); };
		Bool_t IsHighWater(Bool_t Verbose = kFALSE) const;
				
		inline void Sort(Int_t UpTo = kMaxInt) { fHits->Sort(UpTo); };		// sort entries by time

		inline TClonesArray * GetCA() const { return(fHits); };

		void Print(Option_t * Option) const { TObject::Print(Option); };
		void Print(ostream & Out, Int_t Begin = 0, Int_t End = -1, Bool_t EnergyLongFlag = kFALSE) const;	// print data
		inline void Print(Int_t Begin = 0, Int_t End = -1, Bool_t EnergyLongFlag = kFALSE) const { Print(cout, Begin, End, EnergyLongFlag); };
		
	protected:
		TString fBufName;						// buffer name
		Int_t fNofEntries;						// max number of entries
		Int_t fNofHits; 						// current number of hits
		Int_t fOffset;							// [obsolete, for compatibility reasons only]
		Int_t fHighWater;						// high water margin
		TClonesArray * fHits;			    	// array containing hit data
			
	ClassDef(TUsrHitBuffer, 1)					// [Analyze] Hit buffer
};

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