00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #ifndef CalibReadoutEvent_CalibReadoutPmtCrate_H
00016 #define CalibReadoutEvent_CalibReadoutPmtCrate_H 1
00017
00018
00019 #include "Event/CalibReadout.h"
00020 #include "Conventions/Electronics.h"
00021 #include "Event/CalibReadoutPmtChannel.h"
00022 #include "GaudiKernel/boost_allocator.h"
00023 #include <ostream>
00024
00025
00026
00027 namespace DayaBay
00028 {
00029
00030
00031
00041 class CalibReadoutPmtCrate: public CalibReadout
00042 {
00043 public:
00044
00046 typedef std::vector<DayaBay::CalibReadoutPmtChannel> PmtChannelReadouts;
00047
00049 CalibReadoutPmtCrate(const DayaBay::Detector& detector,
00050 unsigned int triggerNumber,
00051 const TimeStamp& triggerTime,
00052 const DayaBay::Trigger::TriggerType_t& triggerType) : CalibReadout(detector,
00053 triggerNumber,
00054 triggerTime,
00055 triggerType) {}
00056
00058 CalibReadoutPmtCrate(const DayaBay::CalibReadoutPmtCrate& rhs);
00059
00061 CalibReadoutPmtCrate() : m_channelReadout() {}
00062
00064 virtual ~CalibReadoutPmtCrate() {}
00065
00067 CalibReadoutPmtCrate& operator=(const DayaBay::CalibReadoutPmtCrate& rhs);
00068
00070 void addSensor(const DayaBay::DetectorSensor& sensorId);
00071
00073 CalibReadoutPmtChannel* sensor(const DayaBay::DetectorSensor& sensorId);
00074
00076 std::vector<DayaBay::DetectorSensor> sensors();
00077
00079 std::ostream& fillStream(std::ostream& s) const;
00080
00083 const PmtChannelReadouts& channelReadout() const;
00084
00087 void setChannelReadout(const PmtChannelReadouts& value);
00088
00089
00090 #ifndef GOD_NOALLOC
00092 static void* operator new ( size_t size )
00093 {
00094 return ( sizeof(CalibReadoutPmtCrate) == size ?
00095 boost::singleton_pool<CalibReadoutPmtCrate, sizeof(CalibReadoutPmtCrate)>::malloc() :
00096 ::operator new(size) );
00097 }
00098
00102 static void* operator new ( size_t size, void* pObj )
00103 {
00104 return ::operator new (size,pObj);
00105 }
00106
00108 static void operator delete ( void* p )
00109 {
00110 boost::singleton_pool<CalibReadoutPmtCrate, sizeof(CalibReadoutPmtCrate)>::is_from(p) ?
00111 boost::singleton_pool<CalibReadoutPmtCrate, sizeof(CalibReadoutPmtCrate)>::free(p) :
00112 ::operator delete(p);
00113 }
00114
00117 static void operator delete ( void* p, void* pObj )
00118 {
00119 ::operator delete (p, pObj);
00120 }
00121 #endif
00122 protected:
00123
00124 private:
00125
00126 PmtChannelReadouts m_channelReadout;
00127
00128 };
00129
00130 inline std::ostream& operator<< (std::ostream& str, const CalibReadoutPmtCrate& obj)
00131 {
00132 return obj.fillStream(str);
00133 }
00134
00135 }
00136
00137
00138
00139
00140
00141
00142
00143 inline const DayaBay::CalibReadoutPmtCrate::PmtChannelReadouts& DayaBay::CalibReadoutPmtCrate::channelReadout() const
00144 {
00145 return m_channelReadout;
00146 }
00147
00148 inline void DayaBay::CalibReadoutPmtCrate::setChannelReadout(const PmtChannelReadouts& value)
00149 {
00150 m_channelReadout = value;
00151 }
00152
00153 inline void DayaBay::CalibReadoutPmtCrate::addSensor(const DayaBay::DetectorSensor& sensorId)
00154 {
00155
00156 if(! this->sensor(sensorId) ){
00157 m_channelReadout.push_back(
00158 DayaBay::CalibReadoutPmtChannel(sensorId, this)
00159 );
00160 }
00161
00162 }
00163
00164 inline DayaBay::CalibReadoutPmtChannel* DayaBay::CalibReadoutPmtCrate::sensor(const DayaBay::DetectorSensor& sensorId)
00165 {
00166
00167 DayaBay::CalibReadoutPmtCrate::PmtChannelReadouts::iterator crIter,
00168 crEnd = m_channelReadout.end();
00169 for(crIter=m_channelReadout.begin(); crIter!=crEnd; crIter++){
00170 if( crIter->pmtSensorId() == sensorId ) return &(*crIter);
00171 }
00172 return 0;
00173
00174 }
00175
00176 inline std::vector<DayaBay::DetectorSensor> DayaBay::CalibReadoutPmtCrate::sensors()
00177 {
00178
00179 DayaBay::CalibReadoutPmtCrate::PmtChannelReadouts::iterator crIter = m_channelReadout.begin();
00180 std::vector<DayaBay::DetectorSensor> sensors;
00181 for(;crIter != m_channelReadout.end(); crIter++)
00182 sensors.push_back(crIter->pmtSensorId());
00183 return sensors;
00184
00185 }
00186
00187
00188 #endif