#ifndef ATLAS_AtlTriggerConf
#define ATLAS_AtlTriggerConf
#ifndef ROOT_TObject
#include <TObject.h>
#endif
#ifndef ROOT_TTree
#include <TTree.h>
#endif
#ifndef ROOT_TSystem
#include <TSystem.h>
#endif
#ifndef ATLAS_AtlTriggerConfItem
#include <AtlTriggerConfItem.h>
#endif
class THashTable;
class TClonesArray;
class TDirectory;
class AtlTriggerConf : public TObject {
public:
static const Int_t fgL1MaxBits;
static const Int_t fgHLTMaxBits;
static const char* fgTreeName;
static const char* fgTreeTitle;
enum ETrigger { kL1, kHLT };
private:
static AtlTriggerConf *fgInstance;
TTree *fConfigTree;
Int_t fN_L1TriggerItems;
Int_t fN_HLTTriggerItems;
TClonesArray *fL1TriggerItemsCA;
TClonesArray *fHLTTriggerItemsCA;
THashTable *fL1TriggerItemsHT;
THashTable *fHLTTriggerItemsHT;
Int_t fRunStart;
Int_t fRunEnd;
public:
AtlTriggerConf();
virtual ~AtlTriggerConf();
static AtlTriggerConf* Instance();
virtual void Clear(Option_t *option = "");
virtual void Print(Option_t *option = "ALL");
AtlTriggerConf* LoadTree(TDirectory *dir);
TTree* CreateTree();
AtlTriggerConfItem* GetTriggerItem(ETrigger trigger,
const char* name,
Int_t RunNr);
AtlTriggerConfItem* GetTriggerItem(ETrigger trigger,
const char* name,
Bool_t CheckValidity = kFALSE);
void ReadConfiguration(Int_t RunNr);
AtlTriggerConfItem* AddTriggerItem(ETrigger trigger,
const char* name,
const char* title,
Int_t bit);
void WriteConfiguration();
void Rehash();
TClonesArray* GetTriggerItemsCA(ETrigger trigger) const;
Int_t GetN_TriggerItems(ETrigger trigger, Int_t RunNr);
Int_t GetN_TriggerItems(ETrigger trigger) const;
const char* GetL1ItemName(Int_t Bit, Int_t RunNr);
const char* GetHLTItemName(Int_t Bit, Int_t RunNr);
const char* GetL1ItemName(Int_t Bit);
const char* GetHLTItemName(Int_t Bit);
inline TTree* GetConfigTree() const { return fConfigTree; }
inline Int_t GetL1TriggerBit(const char* name, Int_t RunNr) {
AtlTriggerConfItem *item = GetTriggerItem(kL1, name, RunNr);
return ( item == 0 ) ? -1 : item->fBit;
}
inline Int_t GetHLTTriggerBit(const char* name, Int_t RunNr) {
AtlTriggerConfItem *item = GetTriggerItem(kHLT, name, RunNr);
return ( item == 0 ) ? -1 : item->fBit;
}
inline Int_t GetL1TriggerBit(const char* name) {
return GetTriggerItem(kL1, name)->fBit;
}
inline Int_t GetHLTTriggerBit(const char* name) {
return GetTriggerItem(kHLT, name)->fBit;
}
inline Int_t GetRunStart() const { return fRunStart; }
inline Int_t GetRunEnd() const { return fRunEnd; }
inline void SetRunStart(Int_t RunStart) {
fRunStart = RunStart;
}
inline void SetRunEnd(Int_t RunEnd) {
if ( RunEnd < fRunStart ) {
Error("WriteConfig", "Given end run number (%d) is smaller than the start run number of the configuration run range (%d). Abort!", RunEnd, fRunStart);
gSystem->Abort();
}
fRunEnd = RunEnd;
}
private:
THashTable* GetTriggerItemsHT(ETrigger trigger) const;
void SetN_TriggerItems(ETrigger trigger, Int_t NItems);
ClassDef(AtlTriggerConf,0)
};
#endif