00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #include "H5DataTypes/CsPadConfigV1.h"
00017
00018
00019
00020
00021 #include <algorithm>
00022
00023
00024
00025
00026 #include "hdf5pp/ArrayType.h"
00027 #include "hdf5pp/CompoundType.h"
00028 #include "hdf5pp/TypeTraits.h"
00029 #include "H5DataTypes/H5DataUtils.h"
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039 namespace H5DataTypes {
00040
00041 CsPadDigitalPotsCfg::CsPadDigitalPotsCfg(const Pds::CsPad::CsPadDigitalPotsCfg& o)
00042 {
00043 const ndarray<const uint8_t, 1>& pots = o.pots();
00044 std::copy(pots.begin(), pots.end(), this->pots);
00045 }
00046
00047 hdf5pp::Type
00048 CsPadDigitalPotsCfg::native_type()
00049 {
00050 hdf5pp::CompoundType digitalPotsType = hdf5pp::CompoundType::compoundType<CsPadDigitalPotsCfg>() ;
00051 digitalPotsType.insert_native<uint8_t>( "pots", offsetof(CsPadDigitalPotsCfg, pots), PotsPerQuad );
00052 return digitalPotsType;
00053 }
00054
00055
00056 CsPadReadOnlyCfg::CsPadReadOnlyCfg(const Pds::CsPad::CsPadReadOnlyCfg& o)
00057 : shiftTest(o.shiftTest())
00058 , version(o.version())
00059 {
00060 }
00061
00062 hdf5pp::Type
00063 CsPadReadOnlyCfg::native_type()
00064 {
00065 hdf5pp::CompoundType readOnlyType = hdf5pp::CompoundType::compoundType<CsPadReadOnlyCfg>() ;
00066 readOnlyType.insert_native<uint32_t>( "shiftTest", offsetof(CsPadReadOnlyCfg, shiftTest) ) ;
00067 readOnlyType.insert_native<uint32_t>( "version", offsetof(CsPadReadOnlyCfg, version) ) ;
00068 return readOnlyType;
00069 }
00070
00071
00072 CsPadGainMapCfg::CsPadGainMapCfg(const Pds::CsPad::CsPadGainMapCfg& src)
00073 {
00074 const ndarray<const uint16_t, 2>& gainMap = src.gainMap();
00075 std::copy(gainMap.begin(), gainMap.end(), this->gainMap[0]);
00076 }
00077
00078 hdf5pp::Type
00079 CsPadGainMapCfg::native_type()
00080 {
00081 hsize_t dims[2] = {ColumnsPerASIC, MaxRowsPerASIC};
00082 hdf5pp::Type baseMapType = hdf5pp::TypeTraits<uint16_t>::native_type();
00083 hdf5pp::ArrayType gainMapArrType = hdf5pp::ArrayType::arrayType(baseMapType, 2, dims);
00084 hdf5pp::CompoundType gainMapType = hdf5pp::CompoundType::compoundType<CsPadGainMapCfg>() ;
00085 gainMapType.insert( "gainMap", offsetof(CsPadGainMapCfg, gainMap), gainMapArrType );
00086 return gainMapType;
00087 }
00088
00089
00090 CsPadConfigV1QuadReg::CsPadConfigV1QuadReg(const Pds::CsPad::ConfigV1QuadReg& src)
00091 : readClkSet(src.readClkSet())
00092 , readClkHold(src.readClkHold())
00093 , dataMode(src.dataMode())
00094 , prstSel(src.prstSel())
00095 , acqDelay(src.acqDelay())
00096 , intTime(src.intTime())
00097 , digDelay(src.digDelay())
00098 , ampIdle(src.ampIdle())
00099 , injTotal(src.injTotal())
00100 , rowColShiftPer(src.rowColShiftPer())
00101 , readOnly(src.ro())
00102 , digitalPots(src.dp())
00103 , gainMap(src.gm())
00104 {
00105 const ndarray<const uint32_t, 1>& shiftSelect = src.shiftSelect();
00106 std::copy(shiftSelect.begin(), shiftSelect.end(), this->shiftSelect);
00107 const ndarray<const uint32_t, 1>& edgeSelect = src.edgeSelect();
00108 std::copy(edgeSelect.begin(), edgeSelect.end(), this->edgeSelect);
00109 }
00110
00111 hdf5pp::Type
00112 CsPadConfigV1QuadReg::native_type()
00113 {
00114 hdf5pp::CompoundType quadType = hdf5pp::CompoundType::compoundType<CsPadConfigV1QuadReg>() ;
00115 quadType.insert_native<uint32_t>( "shiftSelect", offsetof(CsPadConfigV1QuadReg, shiftSelect), TwoByTwosPerQuad ) ;
00116 quadType.insert_native<uint32_t>( "edgeSelect", offsetof(CsPadConfigV1QuadReg, edgeSelect), TwoByTwosPerQuad ) ;
00117 quadType.insert_native<uint32_t>( "readClkSet", offsetof(CsPadConfigV1QuadReg, readClkSet) ) ;
00118 quadType.insert_native<uint32_t>( "readClkHold", offsetof(CsPadConfigV1QuadReg, readClkHold) ) ;
00119 quadType.insert_native<uint32_t>( "dataMode", offsetof(CsPadConfigV1QuadReg, dataMode) ) ;
00120 quadType.insert_native<uint32_t>( "prstSel", offsetof(CsPadConfigV1QuadReg, prstSel) ) ;
00121 quadType.insert_native<uint32_t>( "acqDelay", offsetof(CsPadConfigV1QuadReg, acqDelay) ) ;
00122 quadType.insert_native<uint32_t>( "intTime", offsetof(CsPadConfigV1QuadReg, intTime) ) ;
00123 quadType.insert_native<uint32_t>( "digDelay", offsetof(CsPadConfigV1QuadReg, digDelay) ) ;
00124 quadType.insert_native<uint32_t>( "ampIdle", offsetof(CsPadConfigV1QuadReg, ampIdle) ) ;
00125 quadType.insert_native<uint32_t>( "injTotal", offsetof(CsPadConfigV1QuadReg, injTotal) ) ;
00126 quadType.insert_native<uint32_t>( "rowColShiftPer", offsetof(CsPadConfigV1QuadReg, rowColShiftPer) ) ;
00127 quadType.insert("readOnly", offsetof(CsPadConfigV1QuadReg, readOnly), CsPadReadOnlyCfg::native_type()) ;
00128 quadType.insert("digitalPots", offsetof(CsPadConfigV1QuadReg, digitalPots), CsPadDigitalPotsCfg::native_type()) ;
00129 quadType.insert("gainMap", offsetof(CsPadConfigV1QuadReg, gainMap), CsPadGainMapCfg::native_type()) ;
00130 return quadType;
00131 }
00132
00133
00134 CsPadConfigV1::CsPadConfigV1 ( const XtcType& data )
00135 : concentratorVersion(data.concentratorVersion())
00136 , runDelay(data.runDelay())
00137 , eventCode(data.eventCode())
00138 , inactiveRunMode(data.inactiveRunMode())
00139 , activeRunMode(data.activeRunMode())
00140 , testDataIndex(data.tdi())
00141 , payloadPerQuad(data.payloadSize())
00142 , badAsicMask0(data.badAsicMask0())
00143 , badAsicMask1(data.badAsicMask1())
00144 , asicMask(data.asicMask())
00145 , quadMask(data.quadMask())
00146 {
00147 for ( int q = 0; q < MaxQuadsPerSensor ; ++ q ) {
00148 quads[q] = data.quads(q);
00149 }
00150 }
00151
00152 hdf5pp::Type
00153 CsPadConfigV1::stored_type()
00154 {
00155 return native_type() ;
00156 }
00157
00158 hdf5pp::Type
00159 CsPadConfigV1::native_type()
00160 {
00161 hdf5pp::CompoundType confType = hdf5pp::CompoundType::compoundType<CsPadConfigV1>() ;
00162 confType.insert_native<uint32_t>( "concentratorVersion", offsetof(CsPadConfigV1, concentratorVersion) ) ;
00163 confType.insert_native<uint32_t>( "runDelay", offsetof(CsPadConfigV1, runDelay) ) ;
00164 confType.insert_native<uint32_t>( "eventCode", offsetof(CsPadConfigV1, eventCode) ) ;
00165 confType.insert_native<uint32_t>( "inactiveRunMode", offsetof(CsPadConfigV1, inactiveRunMode) ) ;
00166 confType.insert_native<uint32_t>( "activeRunMode", offsetof(CsPadConfigV1, activeRunMode) ) ;
00167 confType.insert_native<uint32_t>( "testDataIndex", offsetof(CsPadConfigV1, testDataIndex) ) ;
00168 confType.insert_native<uint32_t>( "payloadPerQuad", offsetof(CsPadConfigV1, payloadPerQuad) ) ;
00169 confType.insert_native<uint32_t>( "badAsicMask0", offsetof(CsPadConfigV1, badAsicMask0) ) ;
00170 confType.insert_native<uint32_t>( "badAsicMask1", offsetof(CsPadConfigV1, badAsicMask1) ) ;
00171 confType.insert_native<uint32_t>( "asicMask", offsetof(CsPadConfigV1, asicMask) ) ;
00172 confType.insert_native<uint32_t>( "quadMask", offsetof(CsPadConfigV1, quadMask) ) ;
00173 confType.insert("quads", offsetof(CsPadConfigV1, quads), CsPadConfigV1QuadReg::native_type(), MaxQuadsPerSensor ) ;
00174
00175 return confType ;
00176 }
00177
00178 void
00179 CsPadConfigV1::store( const XtcType& config, hdf5pp::Group grp )
00180 {
00181
00182 CsPadConfigV1 data ( config ) ;
00183 storeDataObject ( data, "config", grp ) ;
00184 }
00185
00186 }