#ifndef ALI_MP_DDL_STORE_H
#define ALI_MP_DDL_STORE_H
#include "AliMpExMap.h"
#include "AliMpRegionalTrigger.h"
#include <TObject.h>
#include <TObjArray.h>
#include <TArrayI.h>
class AliMpDDL;
class AliMpDetElement;
class AliMpBusPatch;
class AliMpLocalBoard;
class AliMpTriggerCrate;
class AliMpDataStreams;
class TArrayI;
class AliMpDDLStore : public TObject {
public:
AliMpDDLStore(TRootIOCtor* ioCtor);
virtual ~AliMpDDLStore();
static AliMpDDLStore* Instance(Bool_t warn = true);
static AliMpDDLStore* ReadData(const AliMpDataStreams& dataStreams,
Bool_t warn = true);
AliMpDDL* GetDDL(Int_t ddlId, Bool_t warn = true) const;
AliMpDetElement* GetDetElement(Int_t detElemId, Bool_t warn = true) const;
AliMpBusPatch* GetBusPatch(Int_t busPatchId, Bool_t warn = true) const;
AliMpLocalBoard* GetLocalBoard(Int_t localBoardId, Bool_t warn = true) const;
AliMpTriggerCrate* GetTriggerCrate(TString crateName, Bool_t warn = true) const;
AliMpTriggerCrate* GetTriggerCrate(Int_t ddlId, Int_t index, Bool_t warn = true) const;
const AliMpRegionalTrigger* GetRegionalTrigger() const { return &fRegionalTrigger; }
Int_t GetDEfromBus(Int_t busPatchId) const;
Int_t GetDEfromLocalBoard(Int_t localBoardId, Int_t chamberId) const;
Int_t GetNextDEfromLocalBoard(Int_t localBoardId, Int_t chamberId) const;
Int_t GetPreviousDEfromLocalBoard(Int_t localBoardId, Int_t chamberId) const;
Int_t GetDDLfromBus(Int_t busPatchId) const;
Int_t GetBusPatchId(Int_t detElemId, Int_t manuId) const;
Long_t GetLinkPortId(Int_t busPatchId) const;
void PrintAllManu() const;
void SetRegionalTrigger(const AliMpRegionalTrigger& regionalTrigger);
TIterator* CreateBusPatchIterator() const;
private:
AliMpDDLStore(const AliMpDataStreams& dataStreams);
AliMpDDLStore();
AliMpDDLStore(const AliMpDDLStore& rhs);
AliMpDDLStore& operator=(const AliMpDDLStore& rhs);
static const TString& GetRevertKeyword();
static const TString& GetExplicitKeyword();
Int_t GetManuListIndex(Int_t detElemId) const;
Int_t GetBusPatchIndex(Int_t detElemId, Int_t manuId) const;
Bool_t ReadDDLs(const AliMpDataStreams& dataStreams);
Bool_t ReadTrigger(const AliMpDataStreams& dataStreams);
Bool_t SetTriggerDDLs();
Bool_t SetManus();
Bool_t ReadBusPatchSpecial(const AliMpDataStreams& dataStreams);
Bool_t SetPatchModules();
Bool_t ReadBusPatchInfo(const AliMpDataStreams& dataStreams);
Int_t GetLocalBoardId(TString name) const;
static AliMpDDLStore* fgInstance;
static const Int_t fgkNofDDLs;
static const Int_t fgkNofTriggerDDLs;
TObjArray fDDLs;
AliMpExMap fBusPatches;
TArrayI fManuList12[16];
TArrayI fManuBridge2[16];
AliMpRegionalTrigger fRegionalTrigger;
ClassDef(AliMpDDLStore,5)
};
#endif //ALI_MP_DDL_STORE_H