#include "ICOMETLog.hxx" #include "IStrawTrkChannelId.hxx" #include ClassImp(COMET::IStrawTrkChannelId); //---------------------------------------------------------------------- COMET::IStrawTrkChannelId::IStrawTrkChannelId(UInt_t id): IChannelId(id) {} COMET::IStrawTrkChannelId::IStrawTrkChannelId(const COMET::IChannelId& src): IChannelId(src) {} COMET::IStrawTrkChannelId::IStrawTrkChannelId(UInt_t subDet, UInt_t Channel) { if (subDet != COMET::IChannelId::kStrawTrk) { COMETSevere("Invalid sub-detector field: " << subDet); } SetGuardBit(); SetSubDetector(COMET::IChannelId::kStrawTrk); SetChannel(Channel); } COMET::IStrawTrkChannelId::IStrawTrkChannelId(UInt_t stationId, UInt_t manifoldId, UInt_t strawId) { if (stationId<0 || strawId<0 || (manifoldId != kStrawTrkManifoldX && manifoldId != kStrawTrkManifoldY )) { COMETSevere("Invalid module Id field: StrawStationId = " << stationId << ", manifoldId = " << manifoldId << ", StrawId = " << strawId); } SetGuardBit(); SetSubDetector(COMET::IChannelId::kStrawTrk); SetChannelIdFromModuleId(stationId, manifoldId, strawId); } COMET::IStrawTrkChannelId::~IStrawTrkChannelId() {} //---------------------------------------------------------------------- std::string COMET::IStrawTrkChannelId::AsString() const { return GetAsString("StrawTrk", this->GetChannel()); } //---------------------------------------------------------------------- const UInt_t COMET::IStrawTrkChannelId::GetChannel() const { return GetField(kChanMSB, kChanLSB); } //---------------------------------------------------------------------- void COMET::IStrawTrkChannelId::SetChannel(int val) { SetField(val, kChanMSB, kChanLSB); } //---------------------------------------------------------------------- bool COMET::IStrawTrkChannelId::GetStationId(UInt_t& stationId) const { stationId = GetField(kStationMSB, kStationLSB); if(stationId<0) return false; return true; } //---------------------------------------------------------------------- bool COMET::IStrawTrkChannelId::GetManifoldId(UInt_t& manifoldId) const { manifoldId = GetField(kManifoldMSB, kManifoldLSB); if(manifoldId<0) return false; return true; } //---------------------------------------------------------------------- bool COMET::IStrawTrkChannelId::GetStrawId(UInt_t& strawId) const { strawId = GetField(kStrawTubeMSB, kStrawTubeLSB); if(strawId<0) return false; return true; } bool COMET::IStrawTrkChannelId::GetModuleId(UInt_t& stationId, UInt_t& manifoldId, UInt_t& strawId) const { stationId = GetField(kStationMSB, kStationLSB); manifoldId = GetField(kManifoldMSB, kManifoldLSB); strawId = GetField(kStrawTubeMSB, kStrawTubeLSB); if(stationId<0 || manifoldId<0 || strawId<0) return false; return true; } //---------------------------------------------------------------------- bool COMET::IStrawTrkChannelId::SetChannelIdFromModuleId(const UInt_t stationId, const UInt_t manifoldId, const UInt_t strawId) { SetGuardBit(); SetSubDetector(COMET::IChannelId::kStrawTrk); Int_t channelIdAsInt = ((((1<<(kStationMSB - kStationLSB + 1)) - 1) & stationId )<< kStationLSB ) | ((((1<<(kManifoldMSB - kManifoldLSB + 1)) - 1) & manifoldId )<< kManifoldLSB ) | ((((1<<(kStrawTubeMSB - kStrawTubeLSB + 1)) - 1) & strawId )<< kStrawTubeLSB); if(channelIdAsInt){ SetChannel(channelIdAsInt); return true; } else return false; }