/search.css" rel="stylesheet" type="text/css"/> /search.js">
| Classes | Job Modules | Data Objects | Services | Algorithms | Tools | Packages | Directories | Tracs |

In This Package:

StaticCableSvc.cc
Go to the documentation of this file.
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     // Prepare the message service for reporting
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         exit(1);
00064         return StatusCode::FAILURE;
00065       }
00066 
00067       int StartRun,EndRun;
00068       int Sites;
00069       int SimFlag, StartTimeSec, StartTimeNanoSec, EndTimeSec, EndTimeNanoSec;
00070       std::string MapFile;
00071 
00072       std::string line;
00073 
00074       while( std::getline( m_masterCableMap, line ) ){
00075         std::stringstream streamLine(line);
00076         if( streamLine.peek() == '#' ){
00077           continue;
00078         }
00079         streamLine >>StartRun >>EndRun >>Sites
00080           >>SimFlag >>StartTimeSec>> StartTimeNanoSec >>EndTimeSec >>EndTimeNanoSec
00081           >>MapFile;
00082 
00083         ContextRange CRange( Sites, SimFlag,
00084                              TimeStamp( StartTimeSec, StartTimeNanoSec ),
00085                              TimeStamp( EndTimeSec, EndTimeNanoSec ) );
00086 
00087         const Context &cont = svcMode.context();
00088 
00089         /*
00090         std::cout<< "Searching: "<<cont.GetSite()<<" "<<cont.GetSimFlag()<<std::endl;
00091         std::cout<< cont.GetTimeStamp().AsString()<<std::endl;
00092         std::cout<<"Start: "<<TimeStamp( StartTimeSec, StartTimeNanoSec ).AsString()<<std::endl;
00093         std::cout<<"End:   "<<TimeStamp( EndTimeSec, EndTimeNanoSec ).AsString()<<std::endl;
00094         */
00095 
00096         if( CRange.IsCompatible( cont ) && MapFile.find("fee") != MapFile.npos ) {
00097           m_feeCableFileName = Path + "/share/" + MapFile;
00098         }
00099 
00100       }
00101 
00102     } //if(m_feeCableFileName=="")
00103 
00104     if(m_fecCableFileName=="")  {
00105         log << MSG::INFO
00106             << "No FecCableMap file specified. Loading one based on Master.CableMap.txt"
00107             << endreq;
00108 
00111         std::string MasterCableMapFile = "Master.CableMap.txt";
00112         std::string Path = getenv ("DATASVCROOT");
00113         std::ifstream m_masterCableMap( (Path+"/share/"+MasterCableMapFile).c_str() );
00114 
00115         if( !m_masterCableMap.is_open() ){
00116             log << MSG::ERROR << "Fail to open Master.CableMap.txt"
00117                 << endreq;
00118             exit(1);
00119             return StatusCode::FAILURE;
00120         }
00121 
00122         int StartRun,EndRun;
00123         int Sites;
00124         int SimFlag, StartTimeSec, StartTimeNanoSec, EndTimeSec, EndTimeNanoSec;
00125         std::string MapFile;
00126 
00127         std::string line;
00128 
00129         while( std::getline( m_masterCableMap, line ) ){
00130             std::stringstream streamLine(line);
00131             if( streamLine.peek() == '#' ){
00132               continue;
00133             }
00134             streamLine >>StartRun >>EndRun >>Sites
00135             >>SimFlag >>StartTimeSec>> StartTimeNanoSec >>EndTimeSec >>EndTimeNanoSec
00136             >>MapFile;
00137 
00138             ContextRange CRange( Sites, SimFlag,
00139                      TimeStamp( StartTimeSec, StartTimeNanoSec ),
00140                      TimeStamp( EndTimeSec, EndTimeNanoSec ) );
00141 
00142             const Context &cont = svcMode.context();
00143 
00144             if( CRange.IsCompatible( cont ) && MapFile.find("fec") != MapFile.npos ) {
00145                 m_fecCableFileName = Path + "/share/" + MapFile;
00146             }
00147         }
00148     }
00149 
00150     if(m_feeCableFileName!=""){
00151 
00152       msg->reportMessage("StaticCableSvc",MSG::INFO,("FeeCableMap: "+m_feeCableFileName).c_str());
00153 
00154       std::ifstream input( m_feeCableFileName.c_str() );
00155       if( !input.is_open() ){
00156         std::ostringstream msgStr;
00157         msgStr << "Failed to open input file: " << m_feeCableFileName;
00158         msg->reportMessage("StaticCableSvc",MSG::ERROR,msgStr.str());
00159     exit(1);
00160         return StatusCode::FAILURE;
00161       }
00162       int site, detectorId, feeBoard, feeBoardSerial, feeConnector;
00163       int adPmtRing, adPmtColumn, poolPmtWallNumber, poolPmtWallSpot;
00164       int poolPmtInwardFacing, pmtHardwareType, pmtSerialNumber;
00165       std::string line;
00166       while( std::getline(input,line) ){
00167         std::stringstream streamLine(line);
00168         if( streamLine.peek() == '#' ){
00169           continue;
00170         }
00171         streamLine >> site >> detectorId >> feeBoard >> feeBoardSerial
00172                    >> feeConnector >> adPmtRing >> adPmtColumn
00173                    >> poolPmtWallNumber >> poolPmtWallSpot
00174                    >> poolPmtInwardFacing >> pmtHardwareType
00175                    >> pmtSerialNumber;
00176         DayaBay::FeeChannelId feeChannel(feeBoard, feeConnector,
00177                                          (Site::Site_t)site,
00178                                          (DetectorId::DetectorId_t)detectorId);
00179         DayaBay::FeeHardwareId feeHardware(feeBoardSerial, feeConnector);
00180         DayaBay::PmtHardwareId pmtHardware(pmtSerialNumber,
00181                                            (DayaBay::Hardware::Hardware_t)pmtHardwareType);
00182         // Make map by site / detector
00183         DayaBay::Detector siteId((Site::Site_t)site, DetectorId::kAll);
00184         DayaBay::Detector detector((Site::Site_t)site,
00185                                    (DetectorId::DetectorId_t)detectorId);
00186         m_elecChannelIdsBySiteDet[s_allSiteDet].push_back(feeChannel);
00187         m_elecChannelIdsBySiteDet[siteId].push_back(feeChannel);
00188         m_elecChannelIdsBySiteDet[detector].push_back(feeChannel);
00189         m_feeChannelIdsBySiteDet[s_allSiteDet].push_back(feeChannel);
00190         m_feeChannelIdsBySiteDet[siteId].push_back(feeChannel);
00191         m_feeChannelIdsBySiteDet[detector].push_back(feeChannel);
00192         // Make hardware connections
00193         m_channelByHardware[feeHardware] = feeChannel;
00194         m_hardwareByChannel[feeChannel] = feeHardware;
00195 
00196         // Make PMT connections
00197         int sensorId = 0;
00198         if( detector.isAD() ) {
00199           // AD PMT
00200           DayaBay::AdPmtSensor pmtId(adPmtRing, adPmtColumn,
00201                                      (Site::Site_t)site,
00202                                      (DetectorId::DetectorId_t)detectorId);
00203           sensorId = pmtId.fullPackedData();
00204         }else if( detector.isWaterShield() ) {
00205           // Pool PMT
00206           DayaBay::PoolPmtSensor pmtId(poolPmtWallNumber, poolPmtWallSpot,
00207                                        poolPmtInwardFacing,
00208                                        (Site::Site_t)site,
00209                                        (DetectorId::DetectorId_t)detectorId);
00210           sensorId = pmtId.fullPackedData();
00211         }
00212         if( sensorId == 0 ){
00213           // Unconnected FEE channel
00214           log <<"Unconnected FEE channel: S"<<site<<" D:"<<detectorId<<" B:"<<feeBoard<<" C:"<<feeConnector<<endreq;
00215           continue;
00216         }
00217         DayaBay::DetectorSensor sensor(sensorId);
00218 
00219         m_sensorsBySiteDet[s_allSiteDet].push_back(sensor);
00220         m_sensorsBySiteDet[siteId].push_back(sensor);
00221         m_sensorsBySiteDet[detector].push_back(sensor);
00222         m_channelBySensor[sensor] = feeChannel;
00223         m_sensorByChannel[feeChannel] = sensor;
00224         m_hardwareBySensor[sensor] = pmtHardware;
00225         m_sensorByHardware[pmtHardware] = sensor;
00226         if(sensor.detectorId() == DetectorId::kIWS
00227            || sensor.detectorId() == DetectorId::kOWS){
00228           DayaBay::PoolPmtSensor poolPmt(sensorId);
00229           if (poolPmt.bogus()) {
00230               log << "Warning: got bogus Pool PMT ID: " << poolPmt
00231                   << " while parsing line:\"" << line << "\""
00232                   << endreq;
00233           }
00234           m_poolPmtSensorsBySiteDet[s_allSiteDet].push_back(poolPmt);
00235           m_poolPmtSensorsBySiteDet[siteId].push_back(poolPmt);
00236           m_poolPmtSensorsBySiteDet[detector].push_back(poolPmt);
00237         }else{
00238           DayaBay::AdPmtSensor adPmt(sensorId);
00239           if (adPmt.bogus()) {
00240               log << "Warning: got bogus AD PMT ID: " << adPmt
00241                   << " while parsing line:\"" << line << "\""
00242                   << endreq;
00243           }
00244           m_adPmtSensorsBySiteDet[s_allSiteDet].push_back(adPmt);
00245           m_adPmtSensorsBySiteDet[siteId].push_back(adPmt);
00246           m_adPmtSensorsBySiteDet[detector].push_back(adPmt);
00247         }
00248       }
00249     } else { // if(m_feeCableFileName!="")
00250       log << MSG::ERROR << "No compatible Fee cable map found" << endreq;
00251     }
00252 
00253 // retrieve data from the FEC cable map file
00254     if(m_fecCableFileName!=""){
00255         log<<MSG::INFO<<("FecCableMap: "+m_fecCableFileName).c_str()<<endreq;
00256 
00257         std::ifstream input( m_fecCableFileName.c_str() );
00258         if( !input.is_open() ){
00259             log << MSG::ERROR
00260                 << ("Failed to open input file: " + m_fecCableFileName).c_str()
00261                 << endreq;
00262             exit(1);
00263             return StatusCode::FAILURE;
00264         }
00265 
00266         int channelId, elecHwId, sensorId, detectorHwId;
00267         int romBoard, romBoardSerial, rtmBoard, rtmBoardSerial, rotBox, rotBoxSerial;
00268         int fecBoard, fecBoardSerial, fecConnector;
00269         int detectorId, site;
00270         int rpcRow, rpcColumn, rpcLayer, rpcStrip;
00271         int rpcModuleSerial;
00272 
00273         std::string line;
00274         while( std::getline(input,line) ){
00275             std::stringstream streamLine(line);
00276             if( streamLine.peek() == '#' ){
00277                 continue;
00278             }
00279 
00280             streamLine >> site >> detectorId >> romBoard >> romBoardSerial
00281                 >> rtmBoard >> rtmBoardSerial >> rotBox >> rotBoxSerial
00282                 >> fecBoard >> fecBoardSerial >> fecConnector
00283                 >> rpcRow >> rpcColumn >> rpcLayer >> rpcStrip
00284                 >> rpcModuleSerial;
00285 
00286             // data correct check
00287             if ( streamLine.fail() ) {
00288             log << MSG::ERROR
00289                    << "The data format in the input file '"
00290                   << m_fecCableFileName.c_str() << "' does not seem"
00291                   << " to conform the one expected for RPC cable map."
00292                   << endreq;
00293                 exit(1);
00294                 return StatusCode::FAILURE;
00295             }
00296             if ( detectorId != DetectorId::kRPC ) {
00297                 log << MSG::ERROR
00298                     << ("Incorrect data in the input file: "+ m_fecCableFileName).c_str()
00299                     << "Expected RPC data. Detector Id gotten is not DetectorId::kRPC : "
00300                     << detectorId << endreq;
00301                     exit(1);
00302                 return StatusCode::FAILURE;
00303             }
00304 
00305             DayaBay::FecChannelId fecChannelId(fecBoard, fecConnector,
00306                 (Site::Site_t) site, (DetectorId::DetectorId_t) detectorId);
00307             DayaBay::FecHardwareId fecHardwareId(fecBoardSerial, fecConnector);
00308             DayaBay::RpcHardwareId rpcHardwareId(rpcModuleSerial, rpcLayer, rpcStrip);
00309             // Make map by site / detector
00310             DayaBay::Detector siteId(fecChannelId.site(), DetectorId::kAll);
00311             DayaBay::Detector detector(fecChannelId.site(), DetectorId::kRPC);
00312 
00313             m_elecChannelIdsBySiteDet[s_allSiteDet].push_back(fecChannelId);
00314             m_elecChannelIdsBySiteDet[siteId].push_back(fecChannelId);
00315             m_elecChannelIdsBySiteDet[detector].push_back(fecChannelId);
00316             m_fecChannelIdsBySiteDet[s_allSiteDet].push_back(fecChannelId);
00317             m_fecChannelIdsBySiteDet[siteId].push_back(fecChannelId);
00318             m_fecChannelIdsBySiteDet[detector].push_back(fecChannelId);
00319             // Make hardware connections
00320             m_channelByHardware[fecHardwareId] = fecChannelId;
00321             m_hardwareByChannel[fecChannelId] = fecHardwareId;
00322 
00323             // Make RPC sensor connections
00324             int sensorId = 0;
00325 
00326             DayaBay::RpcSensor rpcSensor(rpcRow, rpcColumn, rpcLayer, rpcStrip,
00327                 (Site::Site_t)site,
00328                 DetectorId::kRPC);
00329             sensorId = rpcSensor.fullPackedData();
00330 
00331             if( sensorId == 0 ){
00332                 // Unconnected FEC channel
00333                 // note to myself: Can this ever happen?
00334                 continue;
00335             }
00336 
00337             DayaBay::DetectorSensor sensor(sensorId);
00338 
00339             m_sensorsBySiteDet[s_allSiteDet].push_back(sensor);
00340             m_sensorsBySiteDet[siteId].push_back(sensor);
00341             m_sensorsBySiteDet[detector].push_back(sensor);
00342             m_channelBySensor[sensor] = fecChannelId;
00343             m_sensorByChannel[fecChannelId] = sensor;
00344             m_hardwareBySensor[sensor] = rpcHardwareId;
00345             m_sensorByHardware[rpcHardwareId] = sensor;
00346 
00347             m_rpcSensorsBySiteDet[s_allSiteDet].push_back(rpcSensor);
00348             m_rpcSensorsBySiteDet[siteId].push_back(rpcSensor);
00349             m_rpcSensorsBySiteDet[detector].push_back(rpcSensor);
00350         } // while
00351     } else {// if(m_fecCableFileName!="")
00352         log << MSG::ERROR << "No compatible Fec cable map found" << endreq;
00353     }
00354 
00355     m_first = false;
00356 
00357     return StatusCode::SUCCESS;
00358 }
00359 
00360 StatusCode StaticCableSvc::finalize()
00361 {
00362     return this->Service::finalize();
00363 }
00364 
00365 StatusCode StaticCableSvc::queryInterface(const InterfaceID& riid,
00366                                           void** ppvInterface)
00367 {
00368     StatusCode sc = StatusCode::FAILURE;
00369     if (ppvInterface) {
00370         *ppvInterface = 0;
00371 
00372         if (ICableSvc::interfaceID().versionMatch(riid)) {
00373             *ppvInterface = static_cast<ICableSvc*>(this);
00374             sc = StatusCode::SUCCESS;
00375             addRef();
00376         }
00377         else sc = Service::queryInterface( riid, ppvInterface );
00378     }
00379     return sc;
00380 }
00381 
00382 const std::vector<DayaBay::HardwareId>& StaticCableSvc::hardwareIds(const ServiceMode& svcMode)
00383 {
00384   if( m_first ) initMap(svcMode);
00385   return m_hardwareIds;
00386 }
00387 
00388 const std::vector<DayaBay::PmtHardwareId>& StaticCableSvc::pmtHardwareIds(const ServiceMode& svcMode)
00389 {
00390   if( m_first ) initMap(svcMode);
00391   return m_pmtHardwareIds;
00392 }
00393 
00394 const std::vector<DayaBay::RpcHardwareId>& StaticCableSvc::rpcHardwareIds(const ServiceMode& svcMode)
00395 {
00396   if( m_first ) initMap(svcMode);
00397   return m_rpcHardwareIds;
00398 }
00399 
00400 const std::vector<DayaBay::FeeHardwareId>& StaticCableSvc::feeHardwareIds(const ServiceMode& svcMode)
00401 {
00402   if( m_first ) initMap(svcMode);
00403   return m_feeHardwareIds;
00404 }
00405 
00406 const std::vector<DayaBay::FecHardwareId>& StaticCableSvc::fecHardwareIds(const ServiceMode& svcMode)
00407 {
00408   if( m_first ) initMap(svcMode);
00409   return m_fecHardwareIds;
00410 }
00411 
00412 const std::vector<DayaBay::DetectorSensor>& StaticCableSvc::sensors(const ServiceMode& svcMode)
00413 {
00414   MsgStream log(msgSvc(), "StaticCableSvc");
00415 
00416   if( m_first ) initMap(svcMode);
00417   DayaBay::Detector siteDetId(svcMode.context().GetSite(),
00418                               svcMode.context().GetDetId());
00419   std::map<DayaBay::Detector,std::vector<DayaBay::DetectorSensor> >::iterator iter;
00420   iter = m_sensorsBySiteDet.find(siteDetId);
00421   if( iter != m_sensorsBySiteDet.end() ){
00422     // Found site / det
00423 
00424       const std::vector<DayaBay::DetectorSensor>& detSensors = iter->second;
00425       for (size_t idet = 0; idet < detSensors.size(); ++idet) {
00426           DayaBay::DetectorSensor detSens = detSensors[idet];
00427           if (detSens.isAD() ) {
00428               DayaBay::AdPmtSensor pmtid(detSens.fullPackedData());
00429               if (pmtid.bogus()) {
00430                   log << MSG::WARNING << "bogus AD PMT id: " << pmtid << endreq;
00431               }
00432           }
00433           else if ( detSens.detectorId() != DetectorId::kRPC ) {
00434               DayaBay::PoolPmtSensor pmtid(detSens.fullPackedData());
00435               if (pmtid.bogus()) {
00436                   log << MSG::WARNING << "bogus Pool PMT id: " << pmtid << endreq;
00437               }
00438           }
00439       }
00440 
00441     return iter->second;
00442   }
00443   std::ostringstream msgStr;
00444   msgStr << "sensors(): No sensors for site / detector ID: " << siteDetId;
00445   msg->reportMessage("StaticCableSvc",MSG::WARNING,msgStr.str());
00446   return m_sensorsBySiteDet[s_unknownSiteDet];
00447 }
00448 
00449 const std::vector<DayaBay::AdPmtSensor>& StaticCableSvc::adPmtSensors(const ServiceMode& svcMode)
00450 {
00452   if( m_first ) initMap(svcMode);
00453   DayaBay::Detector siteDetId(svcMode.context().GetSite(),
00454                               svcMode.context().GetDetId());
00455   std::map<DayaBay::Detector,std::vector<DayaBay::AdPmtSensor> >::iterator iter;
00456   iter = m_adPmtSensorsBySiteDet.find(siteDetId);
00457   if( iter != m_adPmtSensorsBySiteDet.end() ){
00458     // Found site / det
00459     return iter->second;
00460   }
00461   std::ostringstream msgStr;
00462   msgStr << "adPmtSensors(): No sensors for site / detector ID: " << siteDetId;
00463   msg->reportMessage("StaticCableSvc",MSG::WARNING,msgStr.str());
00464   return m_adPmtSensorsBySiteDet[s_unknownSiteDet];
00465 }
00466 
00467 const std::vector<DayaBay::PoolPmtSensor>& StaticCableSvc::poolPmtSensors(const ServiceMode& svcMode)
00468 {
00470   if( m_first ) initMap(svcMode);
00471   DayaBay::Detector siteDetId(svcMode.context().GetSite(),
00472                               svcMode.context().GetDetId());
00473   std::map<DayaBay::Detector,std::vector<DayaBay::PoolPmtSensor> >::iterator iter;
00474   iter = m_poolPmtSensorsBySiteDet.find(siteDetId);
00475   if( iter != m_poolPmtSensorsBySiteDet.end() ){
00476     // Found site / det
00477     return iter->second;
00478   }
00479   std::ostringstream msgStr;
00480   msgStr << "poolPmtSensors(): No sensors for site / detector ID: "<< siteDetId;
00481   msg->reportMessage("StaticCableSvc",MSG::WARNING,msgStr.str());
00482   return m_poolPmtSensorsBySiteDet[s_unknownSiteDet];
00483 }
00484 
00485 const std::vector<DayaBay::RpcSensor>& StaticCableSvc::rpcSensors(const ServiceMode& svcMode)
00486 {
00487   if( m_first ) initMap(svcMode);
00488   DayaBay::Detector siteDetId(svcMode.context().GetSite(),
00489                               svcMode.context().GetDetId());
00490   std::map<DayaBay::Detector,std::vector<DayaBay::RpcSensor> >::iterator iter;
00491   iter = m_rpcSensorsBySiteDet.find(siteDetId);
00492   if( iter != m_rpcSensorsBySiteDet.end() ){
00493     // Found site / det
00494     return iter->second;
00495   }
00496   std::ostringstream msgStr;
00497   msgStr << "rpcSensors(): No sensors for site / detector ID: "<< siteDetId;
00498   msg->reportMessage("StaticCableSvc",MSG::WARNING,msgStr.str());
00499   return m_rpcSensorsBySiteDet[s_unknownSiteDet];
00500 }
00501 
00502 const std::vector<DayaBay::ElecChannelId>& StaticCableSvc::elecChannelIds(const ServiceMode& svcMode)
00503 {
00504   if( m_first ) initMap(svcMode);
00505   DayaBay::Detector siteDetId(svcMode.context().GetSite(),
00506                               svcMode.context().GetDetId());
00507   std::map<DayaBay::Detector,std::vector<DayaBay::ElecChannelId> >::iterator iter;
00508   iter = m_elecChannelIdsBySiteDet.find(siteDetId);
00509   if( iter != m_elecChannelIdsBySiteDet.end() ){
00510     // Found site / det
00511     return iter->second;
00512   }
00513   std::ostringstream msgStr;
00514   msgStr << "elecChannelIds(): No sensors for site / detector ID: "<< siteDetId;
00515   msg->reportMessage("StaticCableSvc",MSG::WARNING,msgStr.str());
00516   return m_elecChannelIdsBySiteDet[s_unknownSiteDet];
00517 }
00518 
00519 const std::vector<DayaBay::FeeChannelId>& StaticCableSvc::feeChannelIds(const ServiceMode& svcMode)
00520 {
00521   if( m_first ) initMap(svcMode);
00522   DayaBay::Detector siteDetId(svcMode.context().GetSite(),
00523                               svcMode.context().GetDetId());
00524   std::map<DayaBay::Detector,std::vector<DayaBay::FeeChannelId> >::iterator iter;
00525   iter = m_feeChannelIdsBySiteDet.find(siteDetId);
00526   if( iter != m_feeChannelIdsBySiteDet.end() ){
00527     // Found site / det
00528     return iter->second;
00529   }
00530   std::ostringstream msgStr;
00531   msgStr << "feeChannelIds(): No sensors for site / detector ID: " << siteDetId;
00532   msg->reportMessage("StaticCableSvc",MSG::WARNING,msgStr.str());
00533   return m_feeChannelIdsBySiteDet[s_unknownSiteDet];
00534 }
00535 
00536 const std::vector<DayaBay::FecChannelId>& StaticCableSvc::fecChannelIds(const ServiceMode& svcMode)
00537 {
00538   if( m_first ) initMap(svcMode);
00539   DayaBay::Detector siteDetId(svcMode.context().GetSite(),
00540                               svcMode.context().GetDetId());
00541   std::map<DayaBay::Detector,std::vector<DayaBay::FecChannelId> >::iterator iter;
00542   iter = m_fecChannelIdsBySiteDet.find(siteDetId);
00543   if( iter != m_fecChannelIdsBySiteDet.end() ){
00544     // Found site / det
00545     return iter->second;
00546   }
00547   std::ostringstream msgStr;
00548   msgStr << "fecChannelIds(): No sensors for site / detector ID: " << siteDetId;
00549   msg->reportMessage("StaticCableSvc",MSG::WARNING,msgStr.str());
00550   return m_fecChannelIdsBySiteDet[s_unknownSiteDet];
00551 }
00552 
00553 DayaBay::ElecChannelId StaticCableSvc::elecChannelId(
00554                                           const DayaBay::DetectorSensor& sensId,
00555                                           const ServiceMode& svcMode)
00556 {
00557   if( m_first ) initMap(svcMode);
00558   std::map<DayaBay::DetectorSensor,DayaBay::ElecChannelId>::iterator iter;
00559   iter = m_channelBySensor.find(sensId);
00560   if( iter != m_channelBySensor.end() ){
00561     // Found channel
00562     return iter->second;
00563   }
00564   std::ostringstream msgStr;
00565   msgStr << "elecChannelId(): No electronics channel for sensor ID: " << sensId;
00566   msg->reportMessage("StaticCableSvc",MSG::WARNING,msgStr.str());
00567   return DayaBay::ElecChannelId(0);
00568 }
00569 
00570 DayaBay::FeeChannelId StaticCableSvc::feeChannelId(
00571                                             const DayaBay::AdPmtSensor& sensId,
00572                                             const ServiceMode& svcMode)
00573 {
00574   if( m_first ) initMap(svcMode);
00575   return DayaBay::FeeChannelId(elecChannelId(sensId,svcMode).fullPackedData());
00576 }
00577 
00578 DayaBay::FeeChannelId StaticCableSvc::feeChannelId(
00579                                           const DayaBay::PoolPmtSensor& sensId,
00580                                           const ServiceMode& svcMode)
00581 {
00582   if( m_first ) initMap(svcMode);
00583   return DayaBay::FeeChannelId(elecChannelId(sensId,svcMode).fullPackedData());
00584 }
00585 
00586 DayaBay::FecChannelId StaticCableSvc::fecChannelId(
00587                                               const DayaBay::RpcSensor& sensId,
00588                                               const ServiceMode& svcMode)
00589 {
00590   if( m_first ) initMap(svcMode);
00591 
00592   // check if this is whole panel
00593   if (sensId.layer() == 0 && sensId.strip() == 0) {
00594     DayaBay::RpcSensor helper(sensId.panelRow(),sensId.panelColumn(),
00595         1, 1, sensId.site(), sensId.detectorId());
00596     return DayaBay::FecChannelId(elecChannelId(helper, svcMode).fullPackedData()).boardId();
00597   }
00598   return DayaBay::FecChannelId(elecChannelId(sensId,svcMode).fullPackedData());
00599 }
00600 
00601 DayaBay::DetectorSensor StaticCableSvc::sensor(
00602                                      const DayaBay::ElecChannelId& elecChannel,
00603                                      const ServiceMode& svcMode)
00604 {
00605   if( m_first ) initMap(svcMode);
00606   std::map<DayaBay::ElecChannelId,DayaBay::DetectorSensor>::iterator iter;
00607   iter = m_sensorByChannel.find(elecChannel);
00608   if( iter != m_sensorByChannel.end() ){
00609     // Found sensor
00610     return iter->second;
00611   }
00612   static unsigned int errorCount=0;
00613   static const unsigned int maxErrors=100;
00614   if(errorCount<maxErrors){
00615     std::ostringstream msgStr;
00616     msgStr << "elecChannelId(): No sensor ID for electronics channel: "
00617            << elecChannel;
00618     msg->reportMessage("StaticCableSvc",MSG::WARNING,msgStr.str());
00619     errorCount++;
00620     if(errorCount==maxErrors){
00621       msg->reportMessage("StaticCableSvc",MSG::WARNING,
00622                          "elecChannelId(): No more errors will reported");
00623     }
00624   }
00625   return DayaBay::DetectorSensor(0);
00626 }
00627 
00628 DayaBay::AdPmtSensor StaticCableSvc::adPmtSensor(
00629                                        const DayaBay::FeeChannelId& feeChannel,
00630                                        const ServiceMode& svcMode)
00631 {
00632   if( m_first ) initMap(svcMode);
00633   return DayaBay::AdPmtSensor(sensor(feeChannel,svcMode).fullPackedData());
00634 }
00635 
00636 DayaBay::PoolPmtSensor StaticCableSvc::poolPmtSensor(
00637                                        const DayaBay::FeeChannelId& feeChannel,
00638                                        const ServiceMode& svcMode)
00639 {
00640   if( m_first ) initMap(svcMode);
00641   return DayaBay::PoolPmtSensor(sensor(feeChannel,svcMode).fullPackedData());
00642 }
00643 
00644 DayaBay::RpcSensor StaticCableSvc::rpcSensor(
00645                                        const DayaBay::FecChannelId& fecChannel,
00646                                        const ServiceMode& svcMode)
00647 {
00648   if( m_first ) initMap(svcMode);
00649   // check if we are dealing with full board Id
00650   if (fecChannel.connector() == 0) {
00651     DayaBay::ElecChannelId helper(fecChannel.board(), 1, fecChannel.site(), fecChannel.detectorId());
00652     return DayaBay::RpcSensor(sensor(helper,svcMode).fullPackedData()).panel();
00653   }
00654 
00655   return DayaBay::RpcSensor(sensor(fecChannel,svcMode).fullPackedData());
00656 }
00657 
00658 DayaBay::HardwareId StaticCableSvc::hardwareId(
00659                                          const DayaBay::DetectorSensor& sensId,
00660                                          const ServiceMode& svcMode)
00661 {
00662   if( m_first ) initMap(svcMode);
00663   std::map<DayaBay::DetectorSensor,DayaBay::HardwareId>::iterator iter;
00664   iter = m_hardwareBySensor.find(sensId);
00665   if( iter != m_hardwareBySensor.end() ){
00666     // Found hardware
00667     return iter->second;
00668   }
00669   std::ostringstream msgStr;
00670   msgStr << "hardwareId(): No hardware ID for sensor ID: " << sensId;
00671   msg->reportMessage("StaticCableSvc",MSG::WARNING,msgStr.str());
00672   return DayaBay::HardwareId(0);
00673 }
00674 
00675 DayaBay::PmtHardwareId StaticCableSvc::pmtHardwareId(
00676                                             const DayaBay::AdPmtSensor& sensId,
00677                                             const ServiceMode& svcMode)
00678 {
00679   if( m_first ) initMap(svcMode);
00680   return DayaBay::PmtHardwareId(hardwareId(sensId,svcMode).fullPackedData());
00681 }
00682 
00683 DayaBay::PmtHardwareId StaticCableSvc::pmtHardwareId(
00684                                           const DayaBay::PoolPmtSensor& sensId,
00685                                           const ServiceMode& svcMode)
00686 {
00687   if( m_first ) initMap(svcMode);
00688   return DayaBay::PmtHardwareId(hardwareId(sensId,svcMode).fullPackedData());
00689 }
00690 
00691 DayaBay::RpcHardwareId StaticCableSvc::rpcHardwareId(
00692                                               const DayaBay::RpcSensor& sensId,
00693                                               const ServiceMode& svcMode)
00694 {
00695   if( m_first ) initMap(svcMode);
00696   return DayaBay::RpcHardwareId(hardwareId(sensId,svcMode).fullPackedData());
00697 }
00698 
00699 DayaBay::DetectorSensor StaticCableSvc::sensor(
00700                                          const DayaBay::HardwareId& hardwareId,
00701                                          const ServiceMode& svcMode)
00702 {
00703   if( m_first ) initMap(svcMode);
00704   std::map<DayaBay::HardwareId,DayaBay::DetectorSensor>::iterator iter;
00705   iter = m_sensorByHardware.find(hardwareId);
00706   if( iter != m_sensorByHardware.end() ){
00707     // Found sensor
00708     return iter->second;
00709   }
00710   std::ostringstream msgStr;
00711   msgStr << "sensor(): No sensor for hardware ID: " << hardwareId;
00712   msg->reportMessage("StaticCableSvc",MSG::WARNING,msgStr.str());
00713   return DayaBay::DetectorSensor(0);
00714 }
00715 
00716 DayaBay::AdPmtSensor StaticCableSvc::adPmtSensor(
00717                                            const DayaBay::PmtHardwareId& pmtId,
00718                                            const ServiceMode& svcMode)
00719 {
00720   if( m_first ) initMap(svcMode);
00721   return DayaBay::AdPmtSensor(sensor(pmtId,svcMode).fullPackedData());
00722 }
00723 
00724 DayaBay::PoolPmtSensor StaticCableSvc::poolPmtSensor(
00725                                            const DayaBay::PmtHardwareId& pmtId,
00726                                            const ServiceMode& svcMode)
00727 {
00728   if( m_first ) initMap(svcMode);
00729   return DayaBay::PoolPmtSensor(sensor(pmtId,svcMode).fullPackedData());
00730 }
00731 
00732 DayaBay::RpcSensor StaticCableSvc::rpcSensor(
00733                                            const DayaBay::RpcHardwareId& rpcId,
00734                                            const ServiceMode& svcMode)
00735 {
00736   if( m_first ) initMap(svcMode);
00737   return DayaBay::RpcSensor(sensor(rpcId, svcMode).fullPackedData());
00738 }
00739 
00740 DayaBay::HardwareId StaticCableSvc::hardwareId(
00741                                      const DayaBay::ElecChannelId& elecChannel,
00742                                      const ServiceMode& svcMode)
00743 {
00744   if( m_first ) initMap(svcMode);
00745   std::map<DayaBay::ElecChannelId,DayaBay::HardwareId>::iterator iter;
00746   iter = m_hardwareByChannel.find(elecChannel);
00747   if( iter != m_hardwareByChannel.end() ){
00748     // Found hardware
00749     return iter->second;
00750   }
00751   std::ostringstream msgStr;
00752   msgStr << "hardwareId(): No hardware ID for electronics channel: "
00753          << elecChannel;
00754   msg->reportMessage("StaticCableSvc",MSG::WARNING,msgStr.str());
00755   return DayaBay::HardwareId(0);
00756 }
00757 
00758 DayaBay::FeeHardwareId StaticCableSvc::feeHardwareId(
00759                                        const DayaBay::FeeChannelId& feeChannel,
00760                                        const ServiceMode& svcMode)
00761 {
00762   if( m_first ) initMap(svcMode);
00763   return DayaBay::FeeHardwareId(hardwareId(feeChannel,svcMode).fullPackedData());
00764 }
00765 
00766 DayaBay::FecHardwareId StaticCableSvc::fecHardwareId(
00767                                        const DayaBay::FecChannelId& fecChannel,
00768                                        const ServiceMode& svcMode)
00769 {
00770   if( m_first ) initMap(svcMode);
00771   return DayaBay::FecHardwareId(hardwareId(fecChannel,svcMode).fullPackedData());
00772 }
00773 
00774 DayaBay::ElecChannelId StaticCableSvc::elecChannelId(
00775                                          const DayaBay::HardwareId& hardwareId,
00776                                          const ServiceMode& svcMode)
00777 {
00778   if( m_first ) initMap(svcMode);
00779   std::map<DayaBay::HardwareId,DayaBay::ElecChannelId>::iterator iter;
00780   iter = m_channelByHardware.find(hardwareId);
00781   if( iter != m_channelByHardware.end() ){
00782     // Found channel
00783     return iter->second;
00784   }
00785   std::ostringstream msgStr;
00786   msgStr << "elecChannelId(): No electronics channel for hardware ID: "
00787          << hardwareId;
00788   msg->reportMessage("StaticCableSvc",MSG::WARNING,msgStr.str());
00789   return DayaBay::ElecChannelId(0);
00790 }
00791 
00792 DayaBay::FeeChannelId StaticCableSvc::feeChannelId(
00793                                    const DayaBay::FeeHardwareId& feeHardwareId,
00794                                    const ServiceMode& svcMode)
00795 {
00796   if( m_first ) initMap(svcMode);
00797   return DayaBay::FeeChannelId(elecChannelId(feeHardwareId,svcMode).fullPackedData());
00798 }
00799 
00800 DayaBay::FecChannelId StaticCableSvc::fecChannelId(
00801                                    const DayaBay::FecHardwareId& fecHardwareId,
00802                                    const ServiceMode& svcMode)
00803 {
00804   if( m_first ) initMap(svcMode);
00805   return DayaBay::FecChannelId(elecChannelId(fecHardwareId,svcMode).fullPackedData());
00806 }
| Classes | Job Modules | Data Objects | Services | Algorithms | Tools | Packages | Directories | Tracs |

Generated on Fri May 16 2014 09:59:23 for DataSvc by doxygen 1.7.4