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