#ifndef THaEvData_
#define THaEvData_
#include "TObject.h"
#include "TString.h"
#include "THaSlotData.h"
#include "TBits.h"
#include "evio.h"
#include <string>
#include <cassert>
class THaBenchmark;
class THaEpics;
class THaCrateMap;
class THaFastBusWord;
class THaEvData : public TObject {
public:
THaEvData();
virtual ~THaEvData();
Int_t LoadEvent(const Int_t* evbuffer);
virtual Int_t LoadEvent(const Int_t* evbuffer, THaCrateMap* usermap) = 0;
Int_t GetEvType() const { return event_type; }
Int_t GetEvLength() const { return event_length; }
Int_t GetEvNum() const { return event_num; }
Int_t GetRunNum() const { return run_num; }
ULong64_t GetRunTime() const { return fRunTime; }
Int_t GetRunType() const { return run_type; }
Int_t GetRocLength(Int_t crate) const;
Bool_t IsPhysicsTrigger() const;
Bool_t IsScalerEvent() const;
Bool_t IsPrestartEvent() const;
Bool_t IsEpicsEvent() const;
Bool_t IsPrescaleEvent() const;
Bool_t IsSpecialEvent() const;
Int_t GetNumRaw(Int_t crate, Int_t slot) const;
Int_t GetRawData(Int_t crate, Int_t slot, Int_t hit) const;
Int_t GetRawData(Int_t crate, Int_t slot, Int_t chan, Int_t hit) const;
Int_t GetRawData(Int_t i) const;
Int_t GetRawData(Int_t crate, Int_t i) const;
Int_t GetNumHits(Int_t crate, Int_t slot, Int_t chan) const;
Int_t GetData(Int_t crate, Int_t slot, Int_t chan, Int_t hit) const;
Bool_t InCrate(Int_t crate, Int_t i) const;
Int_t GetNumChan(Int_t crate, Int_t slot) const;
Int_t GetNextChan(Int_t crate, Int_t slot, Int_t index) const;
const char* DevType(Int_t crate, Int_t slot) const;
virtual ULong64_t GetEvTime() const { return evt_time; }
virtual Int_t GetHelicity() const { return 0; }
virtual Int_t GetHelicity(const TString& ) const
{ return GetHelicity(); }
virtual Int_t GetPrescaleFactor(Int_t ) const
{ assert(fgAllowUnimpl); return -1; }
virtual Int_t GetScaler(Int_t , Int_t , Int_t ) const
{ assert(ScalersEnabled() && fgAllowUnimpl); return kMaxInt; };
virtual Int_t GetScaler(const TString& ,
Int_t , Int_t ) const
{ return GetScaler(0,0,0); }
virtual double GetEpicsData(const char* tag, Int_t event=0) const;
virtual double GetEpicsTime(const char* tag, Int_t event=0) const;
virtual std::string GetEpicsString(const char* tag, Int_t event=0) const;
virtual Bool_t IsLoadedEpics(const char* ) const
{ return false; }
virtual void PrintSlotData(Int_t crate, Int_t slot) const;
virtual void PrintOut() const;
virtual void SetRunTime( ULong64_t tloc );
void EnableBenchmarks( Bool_t enable=true );
void EnableHelicity( Bool_t enable=true );
Bool_t HelicityEnabled() const;
void EnableScalers( Bool_t enable=true );
Bool_t ScalersEnabled() const;
void SetOrigPS( Int_t event_type );
TString GetOrigPS() const;
UInt_t GetInstance() const { return fInstance; }
static UInt_t GetInstances() { return fgInstances.CountBits(); }
void SetVerbose( UInt_t level );
void SetDebug( UInt_t level );
static void hexdump(const char* cbuff, size_t len);
enum { HED_OK = 0, HED_WARN = -63, HED_ERR = -127, HED_FATAL = -255 };
enum { MAX_PSFACT = 12 };
static void SetCrateMapName( const char* name );
protected:
enum {
kHelicityEnabled = BIT(14),
kScalersEnabled = BIT(15),
kVerbose = BIT(16),
kDebug = BIT(17)
};
static const Int_t MAXROC = 32;
static const Int_t MAXSLOT = 27;
static const Int_t MAX_PHYS_EVTYPE = 14;
static const Int_t SYNC_EVTYPE = 16;
static const Int_t PRESTART_EVTYPE = 17;
static const Int_t GO_EVTYPE = 18;
static const Int_t PAUSE_EVTYPE = 19;
static const Int_t END_EVTYPE = 20;
static const Int_t TS_PRESCALE_EVTYPE = 120;
static const Int_t EPICS_EVTYPE = 131;
static const Int_t PRESCALE_EVTYPE = 133;
static const Int_t DETMAP_FILE = 135;
static const Int_t TRIGGER_FILE = 136;
static const Int_t SCALER_EVTYPE = 140;
struct RocDat_t {
Int_t pos;
Int_t len;
} rocdat[MAXROC];
THaCrateMap* cmap;
THaSlotData** crateslot;
Bool_t first_load, first_decode;
Bool_t fTrigSupPS;
const Int_t *buffer;
Int_t event_type,event_length,event_num,run_num,evscaler;
Int_t run_type;
ULong64_t fRunTime;
ULong64_t evt_time;
Int_t recent_event;
Bool_t buffmode,synchmiss,synchextra;
Int_t idx(Int_t crate, Int_t slot) const;
Int_t idx(Int_t crate, Int_t slot);
Bool_t GoodCrateSlot(Int_t crate, Int_t slot) const;
Bool_t GoodIndex(Int_t crate, Int_t slot) const;
Int_t init_cmap();
Int_t init_slotdata(const THaCrateMap* map);
void makeidx(Int_t crate, Int_t slot);
Int_t fNSlotUsed;
Int_t fNSlotClear;
UShort_t* fSlotUsed;
UShort_t* fSlotClear;
THaCrateMap* fMap;
Bool_t fDoBench;
THaBenchmark *fBench;
UInt_t fInstance;
static TBits fgInstances;
static const Double_t kBig;
static Bool_t fgAllowUnimpl;
static const TString fgDefaultCrateMapName;
static TString fgCrateMapName;
static Bool_t fgNeedInit;
ClassDef(THaEvData,0)
};
inline Int_t THaEvData::idx( Int_t crate, Int_t slot) const {
return slot+MAXSLOT*crate;
}
inline Int_t THaEvData::idx( Int_t crate, Int_t slot) {
Int_t idx = slot+MAXSLOT*crate;
if( !crateslot[idx] ) makeidx(crate,slot);
return idx;
}
inline Bool_t THaEvData::GoodCrateSlot( Int_t crate, Int_t slot ) const {
return ( crate >= 0 && crate < MAXROC &&
slot >= 0 && slot < MAXSLOT );
}
inline Bool_t THaEvData::GoodIndex( Int_t crate, Int_t slot ) const {
return ( GoodCrateSlot(crate,slot) && crateslot[idx(crate,slot)] != 0);
}
inline Int_t THaEvData::GetRocLength(Int_t crate) const {
assert(crate >= 0 && crate < MAXROC);
return rocdat[crate].len;
}
inline Int_t THaEvData::GetNumHits(Int_t crate, Int_t slot, Int_t chan) const {
assert( GoodCrateSlot(crate,slot) );
if( crateslot[idx(crate,slot)] != 0 )
return crateslot[idx(crate,slot)]->getNumHits(chan);
return 0;
};
inline Int_t THaEvData::GetData(Int_t crate, Int_t slot, Int_t chan,
Int_t hit) const {
assert( GoodIndex(crate,slot) );
return crateslot[idx(crate,slot)]->getData(chan,hit);
};
inline Int_t THaEvData::GetNumRaw(Int_t crate, Int_t slot) const {
assert( GoodCrateSlot(crate,slot) );
if( crateslot[idx(crate,slot)] != 0 )
return crateslot[idx(crate,slot)]->getNumRaw();
return 0;
};
inline Int_t THaEvData::GetRawData(Int_t crate, Int_t slot, Int_t hit) const {
assert( GoodIndex(crate,slot) );
return crateslot[idx(crate,slot)]->getRawData(hit);
};
inline Int_t THaEvData::GetRawData(Int_t crate, Int_t slot, Int_t chan,
Int_t hit) const {
assert( GoodIndex(crate,slot) );
return crateslot[idx(crate,slot)]->getRawData(chan,hit);
};
inline Int_t THaEvData::GetRawData(Int_t i) const {
assert( buffer && i >= 0 && i < GetEvLength() );
return buffer[i];
};
inline Int_t THaEvData::GetRawData(Int_t crate, Int_t i) const {
assert( crate >= 0 && crate < MAXROC );
Int_t index = rocdat[crate].pos + i;
return GetRawData(index);
};
inline Bool_t THaEvData::InCrate(Int_t crate, Int_t i) const {
assert( crate >= 0 && crate < MAXROC );
if (crate == 0) return (i >= 0 && i < GetEvLength());
if (rocdat[crate].pos == 0 || rocdat[crate].len == 0) return false;
return (i >= rocdat[crate].pos &&
i <= rocdat[crate].pos+rocdat[crate].len);
};
inline Int_t THaEvData::GetNumChan(Int_t crate, Int_t slot) const {
assert( GoodCrateSlot(crate,slot) );
if( crateslot[idx(crate,slot)] != 0 )
return crateslot[idx(crate,slot)]->getNumChan();
return 0;
};
inline Int_t THaEvData::GetNextChan(Int_t crate, Int_t slot,
Int_t index) const {
assert( GoodIndex(crate,slot) );
assert( index >= 0 && index < GetNumChan(crate,slot) );
return crateslot[idx(crate,slot)]->getNextChan(index);
};
inline
Bool_t THaEvData::IsPhysicsTrigger() const {
return ((event_type > 0) && (event_type <= MAX_PHYS_EVTYPE));
};
inline
Bool_t THaEvData::IsScalerEvent() const {
return (event_type == SCALER_EVTYPE || evscaler == 1);
};
inline
Bool_t THaEvData::IsPrestartEvent() const {
return (event_type == PRESTART_EVTYPE);
};
inline
Bool_t THaEvData::IsEpicsEvent() const {
return (event_type == EPICS_EVTYPE);
};
inline
Bool_t THaEvData::IsPrescaleEvent() const {
return (event_type == TS_PRESCALE_EVTYPE ||
event_type == PRESCALE_EVTYPE);
};
inline
Bool_t THaEvData::IsSpecialEvent() const {
return ( (event_type == DETMAP_FILE) ||
(event_type == TRIGGER_FILE) );
};
inline
Int_t THaEvData::LoadEvent(const Int_t* evbuffer) {
assert(cmap);
first_load = false;
return LoadEvent(evbuffer, cmap);
};
inline
Bool_t THaEvData::HelicityEnabled() const
{
return TestBit(kHelicityEnabled);
}
inline
Bool_t THaEvData::ScalersEnabled() const
{
return TestBit(kScalersEnabled);
}
inline
double THaEvData::GetEpicsData(const char* , Int_t ) const
{
assert(IsLoadedEpics("") && fgAllowUnimpl);
return kBig;
}
inline
double THaEvData::GetEpicsTime(const char* , Int_t ) const
{
assert(IsLoadedEpics("") && fgAllowUnimpl);
return kBig;
}
inline
std::string THaEvData::GetEpicsString(const char* ,
Int_t ) const
{
assert(IsLoadedEpics("") && fgAllowUnimpl);
return std::string("");
}
#endif
Last change: Sat Nov 7 21:26:46 2009
Last generated: 2009-11-07 21:26
This page has been automatically generated. If you have any comments or suggestions about the page layout send a mail to ROOT support, or contact the developers with any questions or problems regarding ROOT.