#include <StaticSimDataSvc.h>
Inheritance diagram for StaticSimDataSvc:
Definition at line 16 of file StaticSimDataSvc.h.
StaticSimDataSvc::StaticSimDataSvc | ( | const std::string & | name, | |
ISvcLocator * | svc | |||
) |
Definition at line 10 of file StaticSimDataSvc.cc.
00011 : Service(name,svc) 00012 { 00013 declareProperty("PmtDataFile",m_pmtDataFileName="", 00014 "Optional filename for loading pmt simulation input data"); 00015 declareProperty("RpcDataFile",m_rpcDataFileName="", 00016 "Optional filename for loading rpc simulation input data"); 00017 declareProperty("FeeDataFile",m_feeDataFileName="", 00018 "Optional filename for loading FEE simulation input data"); 00019 declareProperty("FecDataFile",m_fecDataFileName="", 00020 "Optional filename for loading FEC simulation input data"); 00021 }
StaticSimDataSvc::~StaticSimDataSvc | ( | ) |
StatusCode StaticSimDataSvc::initialize | ( | ) | [virtual] |
Reimplemented from Service.
Definition at line 27 of file StaticSimDataSvc.cc.
00028 { 00029 this->Service::initialize(); 00030 00031 IMessageSvc* msg = msgSvc(); 00032 if( !msg ){ 00033 return StatusCode::FAILURE; 00034 } 00035 00036 if(m_pmtDataFileName!=""){ 00037 std::ifstream input( m_pmtDataFileName.c_str() ); 00038 if( !input.is_open() ){ 00039 std::ostringstream msgStr; 00040 msgStr << "Failed to open input file: " << m_pmtDataFileName; 00041 msg->reportMessage("StaticSimDataSvc",MSG::ERROR,msgStr.str()); 00042 return StatusCode::FAILURE; 00043 } 00044 else { 00045 std::ostringstream msgStr; 00046 msgStr << "Opened input file: " << m_pmtDataFileName; 00047 msg->reportMessage("StaticSimDataSvc",MSG::INFO,msgStr.str()); 00048 } 00049 int sensorId; 00050 std::string description; 00051 double gain, sigmaGain, timeOffset, timeSpread, efficiency; 00052 double prePulseProb, afterPulseProb, darkRate; 00053 std::string line; 00054 while( std::getline(input,line) ){ 00055 std::ostringstream msgStr; 00056 msgStr << "Got line: " << line; 00057 msg->reportMessage("StaticSimDataSvc",MSG::VERBOSE,msgStr.str()); 00058 msgStr.str(""); 00059 std::stringstream streamLine(line); 00060 if( streamLine.peek() == '#' ){ 00061 continue; 00062 } 00063 streamLine >> sensorId >> description 00064 >> gain >> sigmaGain >> timeOffset >> timeSpread 00065 >> efficiency >> prePulseProb >> afterPulseProb 00066 >> darkRate; 00067 msgStr << "Adding PMT: " << description; 00068 msg->reportMessage("StaticSimDataSvc",MSG::VERBOSE,msgStr.str()); 00069 00070 DayaBay::DetectorSensor pmtId(sensorId); 00071 DayaBay::Detector detector( pmtId.site(), pmtId.detectorId() ); 00072 DayaBay::PmtSimData pmt; 00073 pmt.m_pmtId = pmtId; 00074 pmt.m_gain = gain; 00075 pmt.m_sigmaGain = sigmaGain; 00076 pmt.m_timeOffset = timeOffset * Units::ns; 00077 pmt.m_timeSpread = timeSpread * Units::ns; 00078 pmt.m_efficiency = efficiency; 00079 pmt.m_prePulseProb = prePulseProb; 00080 pmt.m_afterPulseProb = afterPulseProb; 00081 pmt.m_darkRate = darkRate * Units::hertz; 00082 std::vector<DayaBay::PmtSimData>& pmtList = m_pmtData[detector]; 00083 pmtList.push_back(pmt); 00084 // Add lookup by sensor ID 00085 m_pmtDataBySensor[pmtId] = pmtList[pmtList.size()-1]; 00086 } 00087 } 00088 00089 if(m_feeDataFileName!=""){ 00090 std::ifstream input( m_feeDataFileName.c_str() ); 00091 if( !input.is_open() ){ 00092 std::ostringstream msgStr; 00093 msgStr << "Failed to open input file: " << m_feeDataFileName; 00094 msg->reportMessage("StaticSimDataSvc",MSG::ERROR,msgStr.str()); 00095 return StatusCode::FAILURE; 00096 } 00097 else { 00098 std::ostringstream msgStr; 00099 msgStr << "Opening input file: " << m_feeDataFileName; 00100 msg->reportMessage("StaticSimDataSvc",MSG::INFO,msgStr.str()); 00101 } 00102 int channelId; 00103 std::string description; 00104 double channelThreshold, adcRangeHigh, adcRangeLow; 00105 double adcBaselineHigh, adcBaselineLow; 00106 std::string line; 00107 while( std::getline(input,line) ){ 00108 std::ostringstream msgStr; 00109 msgStr << "Got line: " << line; 00110 msg->reportMessage("StaticSimDataSvc",MSG::VERBOSE,msgStr.str()); 00111 msgStr.str(""); 00112 std::stringstream streamLine(line); 00113 if( streamLine.peek() == '#' ){ 00114 continue; 00115 } 00116 streamLine >> channelId >> description 00117 >> channelThreshold >> adcRangeHigh >> adcRangeLow 00118 >> adcBaselineHigh >> adcBaselineLow; 00119 00120 msgStr << "Adding FEE Channel: " << description; 00121 msg->reportMessage("StaticSimDataSvc",MSG::VERBOSE,msgStr.str()); 00122 00123 DayaBay::FeeChannelId feeChannelId(channelId); 00124 DayaBay::Detector detector(feeChannelId.site(),feeChannelId.detectorId()); 00125 DayaBay::FeeSimData fee; 00126 fee.m_channelId = feeChannelId; 00127 fee.m_channelThreshold = channelThreshold * Units::volt; 00128 fee.m_adcRangeHigh = adcRangeHigh * Units::volt; 00129 fee.m_adcRangeLow = adcRangeLow * Units::volt; 00130 fee.m_adcBaselineHigh = adcBaselineHigh; 00131 fee.m_adcBaselineLow = adcBaselineLow; 00132 std::vector<DayaBay::FeeSimData>& feeList = m_feeData[detector]; 00133 feeList.push_back(fee); 00134 // Add lookup by channel ID 00135 m_feeDataByChannel[feeChannelId] = feeList[feeList.size()-1]; 00136 } 00137 } 00138 00139 if(m_rpcDataFileName!=""){ 00140 // FIXME: Add RPC data file 00141 std::ostringstream msgStr; 00142 msgStr << "RPC simulation data file not yet implemented!"; 00143 msg->reportMessage("StaticSimDataSvc",MSG::ERROR,msgStr.str()); 00144 return StatusCode::FAILURE; 00145 } 00146 00147 if(m_fecDataFileName!=""){ 00148 // FIXME: Add FEC data file 00149 std::ostringstream msgStr; 00150 msgStr << "FEC simulation data file not yet implemented!"; 00151 msg->reportMessage("StaticSimDataSvc",MSG::ERROR,msgStr.str()); 00152 return StatusCode::FAILURE; 00153 } 00154 00155 return StatusCode::SUCCESS; 00156 }
StatusCode StaticSimDataSvc::finalize | ( | ) | [virtual] |
Reimplemented from Service.
Definition at line 158 of file StaticSimDataSvc.cc.
00159 { 00160 return this->Service::finalize(); 00161 }
StatusCode StaticSimDataSvc::queryInterface | ( | const InterfaceID & | riid, | |
void ** | ppvInterface | |||
) | [virtual] |
Reimplemented from Service.
Definition at line 163 of file StaticSimDataSvc.cc.
00165 { 00166 StatusCode sc = StatusCode::FAILURE; 00167 if (ppvInterface) { 00168 *ppvInterface = 0; 00169 00170 if (ISimDataSvc::interfaceID().versionMatch(riid)) { 00171 *ppvInterface = static_cast<ISimDataSvc*>(this); 00172 sc = StatusCode::SUCCESS; 00173 addRef(); 00174 } 00175 else sc = Service::queryInterface( riid, ppvInterface ); 00176 } 00177 return sc; 00178 }
const DayaBay::PmtSimData * StaticSimDataSvc::pmtSimData | ( | const DayaBay::DetectorSensor & | pmtId, | |
const ServiceMode & | svcMode | |||
) | [virtual] |
Implements ISimDataSvc.
Definition at line 180 of file StaticSimDataSvc.cc.
00183 { 00184 std::map<DayaBay::DetectorSensor, DayaBay::PmtSimData>::iterator result = 00185 m_pmtDataBySensor.find(pmtId); 00186 if(result != m_pmtDataBySensor.end()){ 00187 return &(result->second); 00188 } 00189 return 0; 00190 }
const DayaBay::RpcSimData * StaticSimDataSvc::rpcSimData | ( | const DayaBay::RpcSensor & | rpcId, | |
const ServiceMode & | svcMode | |||
) | [virtual] |
Implements ISimDataSvc.
Definition at line 192 of file StaticSimDataSvc.cc.
00195 { 00196 std::map<DayaBay::RpcSensor, DayaBay::RpcSimData>::iterator result = 00197 m_rpcDataBySensor.find(rpcId); 00198 if(result != m_rpcDataBySensor.end()){ 00199 return &(result->second); 00200 } 00201 return 0; 00202 }
const DayaBay::FeeSimData * StaticSimDataSvc::feeSimData | ( | const DayaBay::FeeChannelId & | channelId, | |
const ServiceMode & | svcMode | |||
) | [virtual] |
Implements ISimDataSvc.
Definition at line 204 of file StaticSimDataSvc.cc.
00207 { 00208 std::map<DayaBay::FeeChannelId, DayaBay::FeeSimData>::iterator result = 00209 m_feeDataByChannel.find(channelId); 00210 if(result != m_feeDataByChannel.end()){ 00211 return &(result->second); 00212 } 00213 // FIXME: Temporarily return a default FEE channel until cabling settles down 00214 DayaBay::FeeChannelId tmpId(1,1,Site::kDayaBay,DetectorId::kAD1); 00215 result = m_feeDataByChannel.find(tmpId); 00216 if(result != m_feeDataByChannel.end()){ 00217 return &(result->second); 00218 } 00219 return 0; 00220 }
const DayaBay::FecSimData * StaticSimDataSvc::fecSimData | ( | const DayaBay::FecChannelId & | channelId, | |
const ServiceMode & | svcMode | |||
) | [virtual] |
Implements ISimDataSvc.
Definition at line 222 of file StaticSimDataSvc.cc.
00225 { 00226 std::map<DayaBay::FecChannelId, DayaBay::FecSimData>::iterator result = 00227 m_fecDataByChannel.find(channelId); 00228 if(result != m_fecDataByChannel.end()){ 00229 return &(result->second); 00230 } 00231 return 0; 00232 }
const std::vector< DayaBay::PmtSimData > & StaticSimDataSvc::pmtSimList | ( | const DayaBay::Detector & | detectorId, | |
const ServiceMode & | svcMode | |||
) | [virtual] |
Implements ISimDataSvc.
Definition at line 234 of file StaticSimDataSvc.cc.
00237 { 00238 return m_pmtData[detectorId]; 00239 }
const std::vector< DayaBay::RpcSimData > & StaticSimDataSvc::rpcSimList | ( | const DayaBay::Detector & | detectorId, | |
const ServiceMode & | svcMode | |||
) | [virtual] |
Implements ISimDataSvc.
Definition at line 241 of file StaticSimDataSvc.cc.
00244 { 00245 return m_rpcData[detectorId]; 00246 }
const std::vector< DayaBay::FeeSimData > & StaticSimDataSvc::feeSimList | ( | const DayaBay::Detector & | detectorId, | |
const ServiceMode & | svcMode | |||
) | [virtual] |
Implements ISimDataSvc.
Definition at line 248 of file StaticSimDataSvc.cc.
00251 { 00252 return m_feeData[detectorId]; 00253 }
const std::vector< DayaBay::FecSimData > & StaticSimDataSvc::fecSimList | ( | const DayaBay::Detector & | detectorId, | |
const ServiceMode & | svcMode | |||
) | [virtual] |
Implements ISimDataSvc.
Definition at line 255 of file StaticSimDataSvc.cc.
00258 { 00259 return m_fecData[detectorId]; 00260 }
static const InterfaceID& ISimDataSvc::interfaceID | ( | ) | [inline, static, inherited] |
Reimplemented from IInterface.
Definition at line 93 of file ISimDataSvc.h.
00093 { 00094 return IID_ISimDataSvc; 00095 }
std::map<DayaBay::Detector, std::vector<DayaBay::PmtSimData> > StaticSimDataSvc::m_pmtData [private] |
Definition at line 69 of file StaticSimDataSvc.h.
std::map<DayaBay::Detector, std::vector<DayaBay::RpcSimData> > StaticSimDataSvc::m_rpcData [private] |
Definition at line 70 of file StaticSimDataSvc.h.
std::map<DayaBay::Detector, std::vector<DayaBay::FeeSimData> > StaticSimDataSvc::m_feeData [private] |
Definition at line 71 of file StaticSimDataSvc.h.
std::map<DayaBay::Detector, std::vector<DayaBay::FecSimData> > StaticSimDataSvc::m_fecData [private] |
Definition at line 72 of file StaticSimDataSvc.h.
std::map<DayaBay::DetectorSensor, DayaBay::PmtSimData> StaticSimDataSvc::m_pmtDataBySensor [private] |
Definition at line 75 of file StaticSimDataSvc.h.
Definition at line 76 of file StaticSimDataSvc.h.
Definition at line 78 of file StaticSimDataSvc.h.
Definition at line 79 of file StaticSimDataSvc.h.
std::string StaticSimDataSvc::m_pmtDataFileName [private] |
Definition at line 82 of file StaticSimDataSvc.h.
std::string StaticSimDataSvc::m_rpcDataFileName [private] |
Definition at line 84 of file StaticSimDataSvc.h.
std::string StaticSimDataSvc::m_feeDataFileName [private] |
Definition at line 86 of file StaticSimDataSvc.h.
std::string StaticSimDataSvc::m_fecDataFileName [private] |
Definition at line 88 of file StaticSimDataSvc.h.