00001 #include "StaticCableSvc.h"
00002 #include "Conventions/Hardware.h"
00003 #include "Conventions/Electronics.h"
00004 #include "GaudiKernel/IMessageSvc.h"
00005 #include <sstream>
00006 #include <fstream>
00007 #include "Context/ContextRange.h"
00008 #include <stdlib.h>
00009
00010 DayaBay::Detector StaticCableSvc::s_unknownSiteDet =
00011 DayaBay::Detector(Site::kUnknown,DetectorId::kUnknown);
00012
00013 DayaBay::Detector StaticCableSvc::s_allSiteDet =
00014 DayaBay::Detector(Site::kAll,DetectorId::kAll);
00015
00016 StaticCableSvc::StaticCableSvc(const std::string& name, ISvcLocator *svc)
00017 : Service(name,svc)
00018 , m_first(true)
00019 {
00020 msg = 0;
00023 declareProperty("FeeCableMap",m_feeCableFileName="",
00024 "Filename for loading the FEE cabling map.");
00026 declareProperty("FecCableMap",m_fecCableFileName="",
00027 "Filename for loading the FEC cabling map");
00028 }
00029
00030 StaticCableSvc::~StaticCableSvc()
00031 {
00032 }
00033
00034 StatusCode StaticCableSvc::initialize()
00035 {
00036 this->Service::initialize();
00037
00038 return StatusCode::SUCCESS;
00039 }
00040
00041
00042 StatusCode StaticCableSvc::initMap(const ServiceMode& svcMode)
00043 {
00044
00045 msg = msgSvc();
00046 if( !msg ){
00047 return StatusCode::FAILURE;
00048 }
00049 MsgStream log(msgSvc(), "StaticCableSvc");
00050
00051 if(m_feeCableFileName=="") {
00052 msg->reportMessage("StaticCableSvc",MSG::INFO,
00053 "No FeeCableMap file specified. Loading one based on Master.CableMap.txt");
00054
00057 std::string MasterCableMapFile = "Master.CableMap.txt";
00058 std::string Path = getenv ("DATASVCROOT");
00059 std::ifstream m_masterCableMap( (Path+"/share/"+MasterCableMapFile).c_str() );
00060
00061 if( !m_masterCableMap.is_open() ){
00062 msg->reportMessage("StaticCableSvc",MSG::ERROR,"Fail to open Master.CableMap.txt");
00063 return StatusCode::FAILURE;
00064 }
00065
00066 int StartRun,EndRun;
00067 int Sites;
00068 int SimFlag, StartTimeSec, StartTimeNanoSec, EndTimeSec, EndTimeNanoSec;
00069 std::string MapFile;
00070
00071 std::string line;
00072
00073 while( std::getline( m_masterCableMap, line ) ){
00074 std::stringstream streamLine(line);
00075 if( streamLine.peek() == '#' ){
00076 continue;
00077 }
00078 streamLine >>StartRun >>EndRun >>Sites
00079 >>SimFlag >>StartTimeSec>> StartTimeNanoSec >>EndTimeSec >>EndTimeNanoSec
00080 >>MapFile;
00081
00082 ContextRange CRange( Sites, SimFlag,
00083 TimeStamp( StartTimeSec, StartTimeNanoSec ),
00084 TimeStamp( EndTimeSec, EndTimeNanoSec ) );
00085
00086 const Context &cont = svcMode.context();
00087
00088
00089
00090
00091
00092
00093
00094
00095 if( CRange.IsCompatible( cont ) ) {
00096 m_feeCableFileName = Path + "/share/" + MapFile;
00097 }
00098
00099 }
00100
00101 }
00102
00103 if(m_fecCableFileName=="") {
00105 }
00106
00107
00108 if(m_feeCableFileName!=""){
00109
00110 msg->reportMessage("StaticCableSvc",MSG::INFO,("FeeCableMap: "+m_feeCableFileName).c_str());
00111
00112 std::ifstream input( m_feeCableFileName.c_str() );
00113 if( !input.is_open() ){
00114 std::ostringstream msgStr;
00115 msgStr << "Failed to open input file: " << m_feeCableFileName;
00116 msg->reportMessage("StaticCableSvc",MSG::ERROR,msgStr.str());
00117 return StatusCode::FAILURE;
00118 }
00119 int site, detectorId, feeBoard, feeBoardSerial, feeConnector;
00120 int adPmtRing, adPmtColumn, poolPmtWallNumber, poolPmtWallSpot;
00121 int poolPmtInwardFacing, pmtHardwareType, pmtSerialNumber;
00122 std::string line;
00123 while( std::getline(input,line) ){
00124 std::stringstream streamLine(line);
00125 if( streamLine.peek() == '#' ){
00126 continue;
00127 }
00128 streamLine >> site >> detectorId >> feeBoard >> feeBoardSerial
00129 >> feeConnector >> adPmtRing >> adPmtColumn
00130 >> poolPmtWallNumber >> poolPmtWallSpot
00131 >> poolPmtInwardFacing >> pmtHardwareType
00132 >> pmtSerialNumber;
00133 DayaBay::FeeChannelId feeChannel(feeBoard, feeConnector,
00134 (Site::Site_t)site,
00135 (DetectorId::DetectorId_t)detectorId);
00136 DayaBay::FeeHardwareId feeHardware(feeBoardSerial, feeConnector);
00137 DayaBay::PmtHardwareId pmtHardware(pmtSerialNumber,
00138 (DayaBay::Hardware::Hardware_t)pmtHardwareType);
00139
00140 DayaBay::Detector siteId((Site::Site_t)site, DetectorId::kAll);
00141 DayaBay::Detector detector((Site::Site_t)site,
00142 (DetectorId::DetectorId_t)detectorId);
00143 m_elecChannelIdsBySiteDet[s_allSiteDet].push_back(feeChannel);
00144 m_elecChannelIdsBySiteDet[siteId].push_back(feeChannel);
00145 m_elecChannelIdsBySiteDet[detector].push_back(feeChannel);
00146 m_feeChannelIdsBySiteDet[s_allSiteDet].push_back(feeChannel);
00147 m_feeChannelIdsBySiteDet[siteId].push_back(feeChannel);
00148 m_feeChannelIdsBySiteDet[detector].push_back(feeChannel);
00149
00150 m_channelByHardware[feeHardware] = feeChannel;
00151 m_hardwareByChannel[feeChannel] = feeHardware;
00152
00153
00154 int sensorId = 0;
00155 if( adPmtColumn!=0 ){
00156
00157 DayaBay::AdPmtSensor pmtId(adPmtRing, adPmtColumn,
00158 (Site::Site_t)site,
00159 (DetectorId::DetectorId_t)detectorId);
00160 sensorId = pmtId.fullPackedData();
00161 }else if( poolPmtWallNumber!=0 ){
00162
00163 DayaBay::PoolPmtSensor pmtId(poolPmtWallNumber, poolPmtWallSpot,
00164 poolPmtInwardFacing,
00165 (Site::Site_t)site,
00166 (DetectorId::DetectorId_t)detectorId);
00167 sensorId = pmtId.fullPackedData();
00168 }
00169 if( sensorId == 0 ){
00170
00171 continue;
00172 }
00173 DayaBay::DetectorSensor sensor(sensorId);
00174
00175 m_sensorsBySiteDet[s_allSiteDet].push_back(sensor);
00176 m_sensorsBySiteDet[siteId].push_back(sensor);
00177 m_sensorsBySiteDet[detector].push_back(sensor);
00178 m_channelBySensor[sensor] = feeChannel;
00179 m_sensorByChannel[feeChannel] = sensor;
00180 m_hardwareBySensor[sensor] = pmtHardware;
00181 m_sensorByHardware[pmtHardware] = sensor;
00182 if(sensor.detectorId() == DetectorId::kIWS
00183 || sensor.detectorId() == DetectorId::kOWS){
00184 DayaBay::PoolPmtSensor poolPmt(sensorId);
00185 if (poolPmt.bogus()) {
00186 log << "Warning: got bogus Pool PMT ID: " << poolPmt
00187 << " while parsing line:\"" << line << "\""
00188 << endreq;
00189 }
00190 m_poolPmtSensorsBySiteDet[s_allSiteDet].push_back(poolPmt);
00191 m_poolPmtSensorsBySiteDet[siteId].push_back(poolPmt);
00192 m_poolPmtSensorsBySiteDet[detector].push_back(poolPmt);
00193 }else{
00194 DayaBay::AdPmtSensor adPmt(sensorId);
00195 if (adPmt.bogus()) {
00196 log << "Warning: got bogus AD PMT ID: " << adPmt
00197 << " while parsing line:\"" << line << "\""
00198 << endreq;
00199 }
00200 m_adPmtSensorsBySiteDet[s_allSiteDet].push_back(adPmt);
00201 m_adPmtSensorsBySiteDet[siteId].push_back(adPmt);
00202 m_adPmtSensorsBySiteDet[detector].push_back(adPmt);
00203 }
00204 }
00205 }
00206
00207 if(m_fecCableFileName!=""){
00208
00209 msg->reportMessage("StaticCableSvc",MSG::INFO,("FecCableMap: "+m_fecCableFileName).c_str());
00210
00211 std::ostringstream msgStr;
00212 msgStr << "FEC Cable mapping not yet implemented! " << m_fecCableFileName;
00213 msg->reportMessage("StaticCableSvc",MSG::ERROR,msgStr.str());
00214 return StatusCode::FAILURE;
00215 }
00216
00217 m_first = false;
00218
00219 return StatusCode::SUCCESS;
00220 }
00221
00222 StatusCode StaticCableSvc::finalize()
00223 {
00224 return this->Service::finalize();
00225 }
00226
00227 StatusCode StaticCableSvc::queryInterface(const InterfaceID& riid,
00228 void** ppvInterface)
00229 {
00230 StatusCode sc = StatusCode::FAILURE;
00231 if (ppvInterface) {
00232 *ppvInterface = 0;
00233
00234 if (ICableSvc::interfaceID().versionMatch(riid)) {
00235 *ppvInterface = static_cast<ICableSvc*>(this);
00236 sc = StatusCode::SUCCESS;
00237 addRef();
00238 }
00239 else sc = Service::queryInterface( riid, ppvInterface );
00240 }
00241 return sc;
00242 }
00243
00244 const std::vector<DayaBay::HardwareId>& StaticCableSvc::hardwareIds(const ServiceMode& svcMode)
00245 {
00246 if( m_first ) initMap(svcMode);
00247 return m_hardwareIds;
00248 }
00249
00250 const std::vector<DayaBay::PmtHardwareId>& StaticCableSvc::pmtHardwareIds(const ServiceMode& svcMode)
00251 {
00252 if( m_first ) initMap(svcMode);
00253 return m_pmtHardwareIds;
00254 }
00255
00256 const std::vector<DayaBay::RpcHardwareId>& StaticCableSvc::rpcHardwareIds(const ServiceMode& svcMode)
00257 {
00258 if( m_first ) initMap(svcMode);
00259 return m_rpcHardwareIds;
00260 }
00261
00262 const std::vector<DayaBay::FeeHardwareId>& StaticCableSvc::feeHardwareIds(const ServiceMode& svcMode)
00263 {
00264 if( m_first ) initMap(svcMode);
00265 return m_feeHardwareIds;
00266 }
00267
00268 const std::vector<DayaBay::FecHardwareId>& StaticCableSvc::fecHardwareIds(const ServiceMode& svcMode)
00269 {
00270 if( m_first ) initMap(svcMode);
00271 return m_fecHardwareIds;
00272 }
00273
00274 const std::vector<DayaBay::DetectorSensor>& StaticCableSvc::sensors(const ServiceMode& svcMode)
00275 {
00276 MsgStream log(msgSvc(), "StaticCableSvc");
00277
00278 if( m_first ) initMap(svcMode);
00279 DayaBay::Detector siteDetId(svcMode.context().GetSite(),
00280 svcMode.context().GetDetId());
00281 std::map<DayaBay::Detector,std::vector<DayaBay::DetectorSensor> >::iterator iter;
00282 iter = m_sensorsBySiteDet.find(siteDetId);
00283 if( iter != m_sensorsBySiteDet.end() ){
00284
00285
00286 const std::vector<DayaBay::DetectorSensor>& detSensors = iter->second;
00287 for (size_t idet = 0; idet < detSensors.size(); ++idet) {
00288 DayaBay::DetectorSensor detSens = detSensors[idet];
00289 if (detSens.isAD() ) {
00290 DayaBay::AdPmtSensor pmtid(detSens.fullPackedData());
00291 if (pmtid.bogus()) {
00292 log << MSG::WARNING << "bogus AD PMT id: " << pmtid << endreq;
00293 }
00294 }
00295 else {
00296 DayaBay::PoolPmtSensor pmtid(detSens.fullPackedData());
00297 if (pmtid.bogus()) {
00298 log << MSG::WARNING << "bogus Pool PMT id: " << pmtid << endreq;
00299 }
00300 }
00301 }
00302
00303 return iter->second;
00304 }
00305 std::ostringstream msgStr;
00306 msgStr << "sensors(): No sensors for site / detector ID: " << siteDetId;
00307 msg->reportMessage("StaticCableSvc",MSG::WARNING,msgStr.str());
00308 return m_sensorsBySiteDet[s_unknownSiteDet];
00309 }
00310
00311 const std::vector<DayaBay::AdPmtSensor>& StaticCableSvc::adPmtSensors(const ServiceMode& svcMode)
00312 {
00314 if( m_first ) initMap(svcMode);
00315 DayaBay::Detector siteDetId(svcMode.context().GetSite(),
00316 svcMode.context().GetDetId());
00317 std::map<DayaBay::Detector,std::vector<DayaBay::AdPmtSensor> >::iterator iter;
00318 iter = m_adPmtSensorsBySiteDet.find(siteDetId);
00319 if( iter != m_adPmtSensorsBySiteDet.end() ){
00320
00321 return iter->second;
00322 }
00323 std::ostringstream msgStr;
00324 msgStr << "adPmtSensors(): No sensors for site / detector ID: " << siteDetId;
00325 msg->reportMessage("StaticCableSvc",MSG::WARNING,msgStr.str());
00326 return m_adPmtSensorsBySiteDet[s_unknownSiteDet];
00327 }
00328
00329 const std::vector<DayaBay::PoolPmtSensor>& StaticCableSvc::poolPmtSensors(const ServiceMode& svcMode)
00330 {
00332 if( m_first ) initMap(svcMode);
00333 DayaBay::Detector siteDetId(svcMode.context().GetSite(),
00334 svcMode.context().GetDetId());
00335 std::map<DayaBay::Detector,std::vector<DayaBay::PoolPmtSensor> >::iterator iter;
00336 iter = m_poolPmtSensorsBySiteDet.find(siteDetId);
00337 if( iter != m_poolPmtSensorsBySiteDet.end() ){
00338
00339 return iter->second;
00340 }
00341 std::ostringstream msgStr;
00342 msgStr << "poolPmtSensors(): No sensors for site / detector ID: "<< siteDetId;
00343 msg->reportMessage("StaticCableSvc",MSG::WARNING,msgStr.str());
00344 return m_poolPmtSensorsBySiteDet[s_unknownSiteDet];
00345 }
00346
00347 const std::vector<DayaBay::RpcSensor>& StaticCableSvc::rpcSensors(const ServiceMode& svcMode)
00348 {
00349 if( m_first ) initMap(svcMode);
00350 DayaBay::Detector siteDetId(svcMode.context().GetSite(),
00351 svcMode.context().GetDetId());
00352 std::map<DayaBay::Detector,std::vector<DayaBay::RpcSensor> >::iterator iter;
00353 iter = m_rpcSensorsBySiteDet.find(siteDetId);
00354 if( iter != m_rpcSensorsBySiteDet.end() ){
00355
00356 return iter->second;
00357 }
00358 std::ostringstream msgStr;
00359 msgStr << "rpcSensors(): No sensors for site / detector ID: "<< siteDetId;
00360 msg->reportMessage("StaticCableSvc",MSG::WARNING,msgStr.str());
00361 return m_rpcSensorsBySiteDet[s_unknownSiteDet];
00362 }
00363
00364 const std::vector<DayaBay::ElecChannelId>& StaticCableSvc::elecChannelIds(const ServiceMode& svcMode)
00365 {
00366 if( m_first ) initMap(svcMode);
00367 DayaBay::Detector siteDetId(svcMode.context().GetSite(),
00368 svcMode.context().GetDetId());
00369 std::map<DayaBay::Detector,std::vector<DayaBay::ElecChannelId> >::iterator iter;
00370 iter = m_elecChannelIdsBySiteDet.find(siteDetId);
00371 if( iter != m_elecChannelIdsBySiteDet.end() ){
00372
00373 return iter->second;
00374 }
00375 std::ostringstream msgStr;
00376 msgStr << "elecChannelIds(): No sensors for site / detector ID: "<< siteDetId;
00377 msg->reportMessage("StaticCableSvc",MSG::WARNING,msgStr.str());
00378 return m_elecChannelIdsBySiteDet[s_unknownSiteDet];
00379 }
00380
00381 const std::vector<DayaBay::FeeChannelId>& StaticCableSvc::feeChannelIds(const ServiceMode& svcMode)
00382 {
00383 if( m_first ) initMap(svcMode);
00384 DayaBay::Detector siteDetId(svcMode.context().GetSite(),
00385 svcMode.context().GetDetId());
00386 std::map<DayaBay::Detector,std::vector<DayaBay::FeeChannelId> >::iterator iter;
00387 iter = m_feeChannelIdsBySiteDet.find(siteDetId);
00388 if( iter != m_feeChannelIdsBySiteDet.end() ){
00389
00390 return iter->second;
00391 }
00392 std::ostringstream msgStr;
00393 msgStr << "feeChannelIds(): No sensors for site / detector ID: " << siteDetId;
00394 msg->reportMessage("StaticCableSvc",MSG::WARNING,msgStr.str());
00395 return m_feeChannelIdsBySiteDet[s_unknownSiteDet];
00396 }
00397
00398 const std::vector<DayaBay::FecChannelId>& StaticCableSvc::fecChannelIds(const ServiceMode& svcMode)
00399 {
00400 if( m_first ) initMap(svcMode);
00401 DayaBay::Detector siteDetId(svcMode.context().GetSite(),
00402 svcMode.context().GetDetId());
00403 std::map<DayaBay::Detector,std::vector<DayaBay::FecChannelId> >::iterator iter;
00404 iter = m_fecChannelIdsBySiteDet.find(siteDetId);
00405 if( iter != m_fecChannelIdsBySiteDet.end() ){
00406
00407 return iter->second;
00408 }
00409 std::ostringstream msgStr;
00410 msgStr << "fecChannelIds(): No sensors for site / detector ID: " << siteDetId;
00411 msg->reportMessage("StaticCableSvc",MSG::WARNING,msgStr.str());
00412 return m_fecChannelIdsBySiteDet[s_unknownSiteDet];
00413 }
00414
00415 DayaBay::ElecChannelId StaticCableSvc::elecChannelId(
00416 const DayaBay::DetectorSensor& sensId,
00417 const ServiceMode& svcMode)
00418 {
00419 if( m_first ) initMap(svcMode);
00420 std::map<DayaBay::DetectorSensor,DayaBay::ElecChannelId>::iterator iter;
00421 iter = m_channelBySensor.find(sensId);
00422 if( iter != m_channelBySensor.end() ){
00423
00424 return iter->second;
00425 }
00426 std::ostringstream msgStr;
00427 msgStr << "elecChannelId(): No electronics channel for sensor ID: " << sensId;
00428 msg->reportMessage("StaticCableSvc",MSG::WARNING,msgStr.str());
00429 return DayaBay::ElecChannelId(0);
00430 }
00431
00432 DayaBay::FeeChannelId StaticCableSvc::feeChannelId(
00433 const DayaBay::AdPmtSensor& sensId,
00434 const ServiceMode& svcMode)
00435 {
00436 if( m_first ) initMap(svcMode);
00437 return DayaBay::FeeChannelId(elecChannelId(sensId,svcMode).fullPackedData());
00438 }
00439
00440 DayaBay::FeeChannelId StaticCableSvc::feeChannelId(
00441 const DayaBay::PoolPmtSensor& sensId,
00442 const ServiceMode& svcMode)
00443 {
00444 if( m_first ) initMap(svcMode);
00445 return DayaBay::FeeChannelId(elecChannelId(sensId,svcMode).fullPackedData());
00446 }
00447
00448 DayaBay::FecChannelId StaticCableSvc::fecChannelId(
00449 const DayaBay::RpcSensor& sensId,
00450 const ServiceMode& svcMode)
00451 {
00452 if( m_first ) initMap(svcMode);
00453 return DayaBay::FecChannelId(elecChannelId(sensId,svcMode).fullPackedData());
00454 }
00455
00456 DayaBay::DetectorSensor StaticCableSvc::sensor(
00457 const DayaBay::ElecChannelId& elecChannel,
00458 const ServiceMode& svcMode)
00459 {
00460 if( m_first ) initMap(svcMode);
00461 std::map<DayaBay::ElecChannelId,DayaBay::DetectorSensor>::iterator iter;
00462 iter = m_sensorByChannel.find(elecChannel);
00463 if( iter != m_sensorByChannel.end() ){
00464
00465 return iter->second;
00466 }
00467 std::ostringstream msgStr;
00468 msgStr << "elecChannelId(): No sensor ID for electronics channel: "
00469 << elecChannel;
00470 msg->reportMessage("StaticCableSvc",MSG::WARNING,msgStr.str());
00471 return DayaBay::DetectorSensor(0);
00472 }
00473
00474 DayaBay::AdPmtSensor StaticCableSvc::adPmtSensor(
00475 const DayaBay::FeeChannelId& feeChannel,
00476 const ServiceMode& svcMode)
00477 {
00478 if( m_first ) initMap(svcMode);
00479 return DayaBay::AdPmtSensor(sensor(feeChannel,svcMode).fullPackedData());
00480 }
00481
00482 DayaBay::PoolPmtSensor StaticCableSvc::poolPmtSensor(
00483 const DayaBay::FeeChannelId& feeChannel,
00484 const ServiceMode& svcMode)
00485 {
00486 if( m_first ) initMap(svcMode);
00487 return DayaBay::PoolPmtSensor(sensor(feeChannel,svcMode).fullPackedData());
00488 }
00489
00490 DayaBay::RpcSensor StaticCableSvc::rpcSensor(
00491 const DayaBay::FecChannelId& fecChannel,
00492 const ServiceMode& svcMode)
00493 {
00494 if( m_first ) initMap(svcMode);
00495 return DayaBay::RpcSensor(sensor(fecChannel,svcMode).fullPackedData());
00496 }
00497
00498 DayaBay::HardwareId StaticCableSvc::hardwareId(
00499 const DayaBay::DetectorSensor& sensId,
00500 const ServiceMode& svcMode)
00501 {
00502 if( m_first ) initMap(svcMode);
00503 std::map<DayaBay::DetectorSensor,DayaBay::HardwareId>::iterator iter;
00504 iter = m_hardwareBySensor.find(sensId);
00505 if( iter != m_hardwareBySensor.end() ){
00506
00507 return iter->second;
00508 }
00509 std::ostringstream msgStr;
00510 msgStr << "hardwareId(): No hardware ID for sensor ID: " << sensId;
00511 msg->reportMessage("StaticCableSvc",MSG::WARNING,msgStr.str());
00512 return DayaBay::HardwareId(0);
00513 }
00514
00515 DayaBay::PmtHardwareId StaticCableSvc::pmtHardwareId(
00516 const DayaBay::AdPmtSensor& sensId,
00517 const ServiceMode& svcMode)
00518 {
00519 if( m_first ) initMap(svcMode);
00520 return DayaBay::PmtHardwareId(hardwareId(sensId,svcMode).fullPackedData());
00521 }
00522
00523 DayaBay::PmtHardwareId StaticCableSvc::pmtHardwareId(
00524 const DayaBay::PoolPmtSensor& sensId,
00525 const ServiceMode& svcMode)
00526 {
00527 if( m_first ) initMap(svcMode);
00528 return DayaBay::PmtHardwareId(hardwareId(sensId,svcMode).fullPackedData());
00529 }
00530
00531 DayaBay::RpcHardwareId StaticCableSvc::rpcHardwareId(
00532 const DayaBay::RpcSensor& sensId,
00533 const ServiceMode& svcMode)
00534 {
00535 if( m_first ) initMap(svcMode);
00536 return DayaBay::RpcHardwareId(hardwareId(sensId,svcMode).fullPackedData());
00537 }
00538
00539 DayaBay::DetectorSensor StaticCableSvc::sensor(
00540 const DayaBay::HardwareId& hardwareId,
00541 const ServiceMode& svcMode)
00542 {
00543 if( m_first ) initMap(svcMode);
00544 std::map<DayaBay::HardwareId,DayaBay::DetectorSensor>::iterator iter;
00545 iter = m_sensorByHardware.find(hardwareId);
00546 if( iter != m_sensorByHardware.end() ){
00547
00548 return iter->second;
00549 }
00550 std::ostringstream msgStr;
00551 msgStr << "sensor(): No sensor for hardware ID: " << hardwareId;
00552 msg->reportMessage("StaticCableSvc",MSG::WARNING,msgStr.str());
00553 return DayaBay::DetectorSensor(0);
00554 }
00555
00556 DayaBay::AdPmtSensor StaticCableSvc::adPmtSensor(
00557 const DayaBay::PmtHardwareId& pmtId,
00558 const ServiceMode& svcMode)
00559 {
00560 if( m_first ) initMap(svcMode);
00561 return DayaBay::AdPmtSensor(sensor(pmtId,svcMode).fullPackedData());
00562 }
00563
00564 DayaBay::PoolPmtSensor StaticCableSvc::poolPmtSensor(
00565 const DayaBay::PmtHardwareId& pmtId,
00566 const ServiceMode& svcMode)
00567 {
00568 if( m_first ) initMap(svcMode);
00569 return DayaBay::PoolPmtSensor(sensor(pmtId,svcMode).fullPackedData());
00570 }
00571
00572 DayaBay::RpcSensor StaticCableSvc::rpcSensor(
00573 const DayaBay::RpcHardwareId& rpcId,
00574 const ServiceMode& svcMode)
00575 {
00576 if( m_first ) initMap(svcMode);
00577 return DayaBay::RpcSensor(sensor(rpcId, svcMode).fullPackedData());
00578 }
00579
00580 DayaBay::HardwareId StaticCableSvc::hardwareId(
00581 const DayaBay::ElecChannelId& elecChannel,
00582 const ServiceMode& svcMode)
00583 {
00584 if( m_first ) initMap(svcMode);
00585 std::map<DayaBay::ElecChannelId,DayaBay::HardwareId>::iterator iter;
00586 iter = m_hardwareByChannel.find(elecChannel);
00587 if( iter != m_hardwareByChannel.end() ){
00588
00589 return iter->second;
00590 }
00591 std::ostringstream msgStr;
00592 msgStr << "hardwareId(): No hardware ID for electronics channel: "
00593 << elecChannel;
00594 msg->reportMessage("StaticCableSvc",MSG::WARNING,msgStr.str());
00595 return DayaBay::HardwareId(0);
00596 }
00597
00598 DayaBay::FeeHardwareId StaticCableSvc::feeHardwareId(
00599 const DayaBay::FeeChannelId& feeChannel,
00600 const ServiceMode& svcMode)
00601 {
00602 if( m_first ) initMap(svcMode);
00603 return DayaBay::FeeHardwareId(hardwareId(feeChannel,svcMode).fullPackedData());
00604 }
00605
00606 DayaBay::FecHardwareId StaticCableSvc::fecHardwareId(
00607 const DayaBay::FecChannelId& fecChannel,
00608 const ServiceMode& svcMode)
00609 {
00610 if( m_first ) initMap(svcMode);
00611 return DayaBay::FecHardwareId(hardwareId(fecChannel,svcMode).fullPackedData());
00612 }
00613
00614 DayaBay::ElecChannelId StaticCableSvc::elecChannelId(
00615 const DayaBay::HardwareId& hardwareId,
00616 const ServiceMode& svcMode)
00617 {
00618 if( m_first ) initMap(svcMode);
00619 std::map<DayaBay::HardwareId,DayaBay::ElecChannelId>::iterator iter;
00620 iter = m_channelByHardware.find(hardwareId);
00621 if( iter != m_channelByHardware.end() ){
00622
00623 return iter->second;
00624 }
00625 std::ostringstream msgStr;
00626 msgStr << "elecChannelId(): No electronics channel for hardware ID: "
00627 << hardwareId;
00628 msg->reportMessage("StaticCableSvc",MSG::WARNING,msgStr.str());
00629 return DayaBay::ElecChannelId(0);
00630 }
00631
00632 DayaBay::FeeChannelId StaticCableSvc::feeChannelId(
00633 const DayaBay::FeeHardwareId& feeHardwareId,
00634 const ServiceMode& svcMode)
00635 {
00636 if( m_first ) initMap(svcMode);
00637 return DayaBay::FeeChannelId(elecChannelId(feeHardwareId,svcMode).fullPackedData());
00638 }
00639
00640 DayaBay::FecChannelId StaticCableSvc::fecChannelId(
00641 const DayaBay::FecHardwareId& fecHardwareId,
00642 const ServiceMode& svcMode)
00643 {
00644 if( m_first ) initMap(svcMode);
00645 return DayaBay::FecChannelId(elecChannelId(fecHardwareId,svcMode).fullPackedData());
00646 }