#include "IGeometryDatabase.hxx" #include "COMETGeomId.hxx" #include "COMETGeomIdDef.hxx" #include "ICDCGeomId.hxx" #include "ICTHGeomId.hxx" #include "IStrawTrkGeomId.hxx" #include "IECALGeomId.hxx" #include "ITOFGeomId.hxx" #include COMET::IGeometryDatabase* COMET::IGeometryDatabase::fGeoDB = NULL; COMET::IGeometryDatabase::ESourceOfMapping COMET::IGeometryDatabase::fSourceOfMapping = kUndefined; //---------------------------------------------------------------------- void COMET::IGeometryDatabase::UseOfflineDatabase(bool fUseDB) { if(fGeoDB) { COMETError("Geometry database instance already exists," << " cannot change after intialisation"); return; } if(fUseDB) fSourceOfMapping = kFromOfflineDatabase; else fSourceOfMapping = kFromFlatFile; } //---------------------------------------------------------------------- COMET::IGeometryDatabase& COMET::IGeometryDatabase::Get() { if(!fGeoDB) { if(fSourceOfMapping == kUndefined) UseOfflineDatabase(false); fGeoDB = new IGeometryDatabase; } return *fGeoDB; } //---------------------------------------------------------------------- COMET::IGeometryDatabase::IGeometryDatabase() : fCDCMap(NULL), fCTHMap(NULL), fStrawTrkMap(NULL), fECALMap(NULL), fTOFMap(NULL) {} //---------------------------------------------------------------------- COMET::IGeometryDatabase::~IGeometryDatabase() { delete fCDCMap; delete fCTHMap; delete fStrawTrkMap; delete fECALMap; delete fTOFMap; } //---------------------------------------------------------------------- bool COMET::IGeometryDatabase::GetCTHChannelId(COMET::ICTHChannelId& chanId, COMET::IGeometryId geomId) { if (GeomId::GetSubSystem(geomId) != GeomId::Def::kCTH) return false; return Mutable(CTH()).GetChannelId(chanId, geomId); } //---------------------------------------------------------------------- bool COMET::IGeometryDatabase::GetStrawTrkChannelId(COMET::IStrawTrkChannelId& chanId, COMET::IGeometryId geomId) { if (GeomId::GetSubSystem(geomId) != GeomId::Def::kStrawTrk) return false; return Mutable(StrawTrk()).GetChannelId(chanId, geomId); } //---------------------------------------------------------------------- bool COMET::IGeometryDatabase::GetECALChannelId(COMET::IECALChannelId& chanId, COMET::IGeometryId geomId) { if (GeomId::GetSubSystem(geomId) != GeomId::Def::kECAL) return false; return Mutable(ECAL()).GetChannelId(chanId, geomId); } //---------------------------------------------------------------------- bool COMET::IGeometryDatabase::GetTOFChannelId(COMET::ITOFChannelId& chanId, COMET::IGeometryId geomId) { if (GeomId::GetSubSystem(geomId) != GeomId::Def::kTOF) return false; return Mutable(TOF()).GetChannelId(chanId, geomId); } //---------------------------------------------------------------------- bool COMET::IGeometryDatabase::GetGeometryId(COMET::IGeometryId& geomId, COMET::IChannelId chanId) { if(!chanId.IsValid()) return false; // TODO ICDCChannelId::GetGeometryInfo NOT IMPLIMENTED!! if (chanId.IsCDCChannel()){ COMETError("ICDCChannelMap::GetGeometryId NOT IMPLIMENTED!!"); return false; } else if(chanId.IsCTHChannel()){ return Mutable(CTH()).GetGeometryId(geomId, ICTHChannelId(chanId)); } else if(chanId.IsStrawTrkChannel()){ return Mutable(StrawTrk()).GetGeometryId(geomId, IStrawTrkChannelId(chanId)); } else if(chanId.IsECALChannel()){ return Mutable(ECAL()).GetGeometryId(geomId, IECALChannelId(chanId)); } else if(chanId.IsTOFChannel()){ return Mutable(TOF()).GetGeometryId(geomId, ITOFChannelId(chanId)); } return false; } //---------------------------------------------------------------------- bool COMET::IGeometryDatabase::GetChannelId(COMET::IChannelId& chanId, COMET::IGeometryId geomId) { if(!geomId.IsValid()) return false; int detectorId = GeomId::GetSubSystem(geomId); if (COMET::GeomId::CDC::IsCDC(geomId)){ UInt_t chId = geomId.GetField(24,0); // To be modified since it is deprecated!! COMET::ICDCChannelId cdc(detectorId, chId); chanId = cdc; } else if (COMET::GeomId::CTH::IsCTH(geomId)){ UInt_t chId = geomId.GetField(24,0); // To be modified since it is deprecated!! COMET::ICTHChannelId cth(detectorId, chId); chanId = cth; } else if (COMET::GeomId::StrawTrk::IsStrawTrk(geomId)){ return GetStrawTrkChannelId(static_cast(chanId), geomId); } else if (COMET::GeomId::ECAL::IsECAL(geomId)){ return GetECALChannelId(static_cast(chanId), geomId); } else if (COMET::GeomId::TOF::IsTOF(geomId)){ UInt_t chId = geomId.GetField(24,0); // To be modified since it is deprecated!! COMET::ITOFChannelId tof(detectorId, chId); chanId = tof; } return true; } //---------------------------------------------------------------------- const COMET::ICDCChannelMap& COMET::IGeometryDatabase::CDC() { if (!fCDCMap) fCDCMap = &(COMET::ICDCChannelMap::Get()); return *fCDCMap; } //---------------------------------------------------------------------- const COMET::ICTHChannelMap& COMET::IGeometryDatabase::CTH() { if (!fCTHMap) fCTHMap = &(COMET::ICTHChannelMap::Get()); return *fCTHMap; } //---------------------------------------------------------------------- const COMET::IStrawTrkChannelMap& COMET::IGeometryDatabase::StrawTrk() { if (!fStrawTrkMap) fStrawTrkMap = new IStrawTrkChannelMap; return *fStrawTrkMap; } //---------------------------------------------------------------------- const COMET::IECALChannelMap& COMET::IGeometryDatabase::ECAL() { if (!fECALMap) fECALMap = &(COMET::IECALChannelMap::Get()); return *fECALMap; } //---------------------------------------------------------------------- const COMET::ITOFChannelMap& COMET::IGeometryDatabase::TOF() { if (!fTOFMap) fTOFMap = &(COMET::ITOFChannelMap::Get()); return *fTOFMap; }