00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #include "H5DataTypes/CsPadConfigV4.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 CsPadConfigV2QuadReg::CsPadConfigV2QuadReg(const Pds::CsPad::ConfigV2QuadReg& src)
00042 : readClkSet(src.readClkSet())
00043 , readClkHold(src.readClkHold())
00044 , dataMode(src.dataMode())
00045 , prstSel(src.prstSel())
00046 , acqDelay(src.acqDelay())
00047 , intTime(src.intTime())
00048 , digDelay(src.digDelay())
00049 , ampIdle(src.ampIdle())
00050 , injTotal(src.injTotal())
00051 , rowColShiftPer(src.rowColShiftPer())
00052 , ampReset(src.ampReset())
00053 , digCount(src.digCount())
00054 , digPeriod(src.digPeriod())
00055 , readOnly(src.ro())
00056 , digitalPots(src.dp())
00057 , gainMap(src.gm())
00058 {
00059 const ndarray<const uint32_t, 1>& shiftSelect = src.shiftSelect();
00060 std::copy(shiftSelect.begin(), shiftSelect.end(), this->shiftSelect);
00061 const ndarray<const uint32_t, 1>& edgeSelect = src.edgeSelect();
00062 std::copy(edgeSelect.begin(), edgeSelect.end(), this->edgeSelect);
00063 }
00064
00065 hdf5pp::Type
00066 CsPadConfigV2QuadReg::native_type()
00067 {
00068 hdf5pp::CompoundType quadType = hdf5pp::CompoundType::compoundType<CsPadConfigV2QuadReg>() ;
00069 quadType.insert_native<uint32_t>( "shiftSelect", offsetof(CsPadConfigV2QuadReg, shiftSelect), TwoByTwosPerQuad) ;
00070 quadType.insert_native<uint32_t>( "edgeSelect", offsetof(CsPadConfigV2QuadReg, edgeSelect), TwoByTwosPerQuad) ;
00071 quadType.insert_native<uint32_t>( "readClkSet", offsetof(CsPadConfigV2QuadReg, readClkSet) ) ;
00072 quadType.insert_native<uint32_t>( "readClkHold", offsetof(CsPadConfigV2QuadReg, readClkHold) ) ;
00073 quadType.insert_native<uint32_t>( "dataMode", offsetof(CsPadConfigV2QuadReg, dataMode) ) ;
00074 quadType.insert_native<uint32_t>( "prstSel", offsetof(CsPadConfigV2QuadReg, prstSel) ) ;
00075 quadType.insert_native<uint32_t>( "acqDelay", offsetof(CsPadConfigV2QuadReg, acqDelay) ) ;
00076 quadType.insert_native<uint32_t>( "intTime", offsetof(CsPadConfigV2QuadReg, intTime) ) ;
00077 quadType.insert_native<uint32_t>( "digDelay", offsetof(CsPadConfigV2QuadReg, digDelay) ) ;
00078 quadType.insert_native<uint32_t>( "ampIdle", offsetof(CsPadConfigV2QuadReg, ampIdle) ) ;
00079 quadType.insert_native<uint32_t>( "injTotal", offsetof(CsPadConfigV2QuadReg, injTotal) ) ;
00080 quadType.insert_native<uint32_t>( "rowColShiftPer", offsetof(CsPadConfigV2QuadReg, rowColShiftPer) ) ;
00081 quadType.insert_native<uint32_t>( "ampReset", offsetof(CsPadConfigV2QuadReg, ampReset) ) ;
00082 quadType.insert_native<uint32_t>( "digCount", offsetof(CsPadConfigV2QuadReg, digCount) ) ;
00083 quadType.insert_native<uint32_t>( "digPeriod", offsetof(CsPadConfigV2QuadReg, digPeriod) ) ;
00084 quadType.insert("readOnly", offsetof(CsPadConfigV2QuadReg, readOnly), CsPadReadOnlyCfg::native_type()) ;
00085 quadType.insert("digitalPots", offsetof(CsPadConfigV2QuadReg, digitalPots), CsPadDigitalPotsCfg::native_type()) ;
00086 quadType.insert("gainMap", offsetof(CsPadConfigV2QuadReg, gainMap), CsPadGainMapCfg::native_type()) ;
00087 return quadType;
00088 }
00089
00090
00091 CsPadConfigV4::CsPadConfigV4 ( const XtcType& data )
00092 : concentratorVersion(data.concentratorVersion())
00093 , runDelay(data.runDelay())
00094 , eventCode(data.eventCode())
00095 , protectionEnable(data.protectionEnable())
00096 , inactiveRunMode(data.inactiveRunMode())
00097 , activeRunMode(data.activeRunMode())
00098 , testDataIndex(data.tdi())
00099 , payloadPerQuad(data.payloadSize())
00100 , badAsicMask0(data.badAsicMask0())
00101 , badAsicMask1(data.badAsicMask1())
00102 , asicMask(data.asicMask())
00103 , quadMask(data.quadMask())
00104 {
00105 for ( int q = 0; q < MaxQuadsPerSensor ; ++ q ) {
00106 roiMask[q] = data.roiMask(q);
00107 }
00108
00109 for ( int q = 0; q < MaxQuadsPerSensor ; ++ q ) {
00110 quads[q] = data.quads(q);
00111 }
00112
00113 const ndarray<const Pds::CsPad::ProtectionSystemThreshold, 1>& thresh = data.protectionThresholds();
00114 std::copy(thresh.begin(), thresh.end(), protectionThresholds);
00115
00116
00117 int ns = 0 ;
00118 for ( int q = 0; q < MaxQuadsPerSensor ; ++ q ) {
00119 for ( int s = 0; s < SectionsPerQuad ; ++ s ) {
00120 sections[q][s] = -1;
00121 if ( roiMask[q] & (1<<s) ) sections[q][s] = ns++;
00122 }
00123 }
00124
00125 }
00126
00127 hdf5pp::Type
00128 CsPadConfigV4::stored_type()
00129 {
00130 return native_type() ;
00131 }
00132
00133 hdf5pp::Type
00134 CsPadConfigV4::native_type()
00135 {
00136 hsize_t sdims[2] = {MaxQuadsPerSensor, SectionsPerQuad};
00137 hdf5pp::Type baseSectType = hdf5pp::TypeTraits<int8_t>::native_type();
00138 hdf5pp::ArrayType sectArrType = hdf5pp::ArrayType::arrayType(baseSectType, 2, sdims);
00139
00140 hdf5pp::CompoundType confType = hdf5pp::CompoundType::compoundType<CsPadConfigV4>() ;
00141 confType.insert_native<uint32_t>( "concentratorVersion", offsetof(CsPadConfigV4, concentratorVersion) ) ;
00142 confType.insert_native<uint32_t>( "runDelay", offsetof(CsPadConfigV4, runDelay) ) ;
00143 confType.insert_native<uint32_t>( "eventCode", offsetof(CsPadConfigV4, eventCode) ) ;
00144 confType.insert("protectionThresholds", offsetof(CsPadConfigV4, protectionThresholds), CsPadProtectionSystemThreshold::native_type(), MaxQuadsPerSensor ) ;
00145 confType.insert_native<uint32_t>( "protectionEnable", offsetof(CsPadConfigV4, protectionEnable) ) ;
00146 confType.insert_native<uint32_t>( "inactiveRunMode", offsetof(CsPadConfigV4, inactiveRunMode) ) ;
00147 confType.insert_native<uint32_t>( "activeRunMode", offsetof(CsPadConfigV4, activeRunMode) ) ;
00148 confType.insert_native<uint32_t>( "testDataIndex", offsetof(CsPadConfigV4, testDataIndex) ) ;
00149 confType.insert_native<uint32_t>( "payloadPerQuad", offsetof(CsPadConfigV4, payloadPerQuad) ) ;
00150 confType.insert_native<uint32_t>( "badAsicMask0", offsetof(CsPadConfigV4, badAsicMask0) ) ;
00151 confType.insert_native<uint32_t>( "badAsicMask1", offsetof(CsPadConfigV4, badAsicMask1) ) ;
00152 confType.insert_native<uint32_t>( "asicMask", offsetof(CsPadConfigV4, asicMask) ) ;
00153 confType.insert_native<uint32_t>( "quadMask", offsetof(CsPadConfigV4, quadMask) ) ;
00154 confType.insert_native<uint32_t>( "roiMask", offsetof(CsPadConfigV4, roiMask) ) ;
00155 confType.insert("quads", offsetof(CsPadConfigV4, quads), CsPadConfigV2QuadReg::native_type(), MaxQuadsPerSensor ) ;
00156 confType.insert("sections", offsetof(CsPadConfigV4, sections), sectArrType ) ;
00157
00158 return confType ;
00159 }
00160
00161 void
00162 CsPadConfigV4::store( const XtcType& config, hdf5pp::Group grp )
00163 {
00164
00165 CsPadConfigV4 data ( config ) ;
00166 storeDataObject ( data, "config", grp ) ;
00167 }
00168
00169 }