/* Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration */ #ifndef TileCellContainerCnv_H #define TileCellContainerCnv_H #include "AthenaPoolCnvSvc/T_AthenaPoolCustCnv.h" #include "TileEvent/TileCellContainer.h" class TileTBID; class StoreGateSvc; class CaloDetDescrElement; class MbtsDetDescrManager; typedef T_AthenaPoolCustCnv<TileCellContainer,TileCellVec> TileCellContainerCnvBase; class TileCellContainerCnv:public TileCellContainerCnvBase { friend class CnvFactory<TileCellContainerCnv >; public: TileCellContainerCnv(ISvcLocator* svcloc); virtual ~TileCellContainerCnv(); /// initialization virtual StatusCode initialize(); virtual StatusCode transToPers(TileCellContainer* obj, TileCellVec*& persObj) ; virtual StatusCode persToTrans(TileCellContainer*& transObj, TileCellVec* obj) ; private: // vector of Collections. std::map<std::string,TileCellVec> m_vecCellAll; StoreGateSvc* m_storeGate; const TileTBID* m_tileTBID; const MbtsDetDescrManager* m_mbtsMgr; int m_version; static const int NSIDE = 2; static const int NPHI = 8; static const int NETA = 2; static const int NCELLMBTS = NSIDE*NPHI*NETA; inline int cell_index(int side, int phi, int eta) const { return (side*NPHI+phi)*NETA+eta; } void initIdToIndex(); Identifier m_id[NCELLMBTS]; CaloDetDescrElement * m_dde[NCELLMBTS]; int m_gainIndex[17]; int m_gain[8]; inline int round32(double x) { if (x<-2147483647.) return -0x7FFFFFFF; else if (x>2147483647.) return 0x7FFFFFFF; else return (int)lround(x); } inline int round16(double x) { if (x<-32767.) return -0x7FFF; else if (x>32767.) return 0x7FFF; else return (int)lround(x); } }; #endif