H5DataTypes/src/CsPadConfigV1.cpp

Go to the documentation of this file.
00001 //--------------------------------------------------------------------------
00002 // File and Version Information:
00003 //      $Id: CsPadConfigV1.cpp 6826 2013-09-24 21:08:01Z salnikov@SLAC.STANFORD.EDU $
00004 //
00005 // Description:
00006 //      Class CsPadConfigV1...
00007 //
00008 // Author List:
00009 //      Andrei Salnikov
00010 //
00011 //------------------------------------------------------------------------
00012 
00013 //-----------------------
00014 // This Class's Header --
00015 //-----------------------
00016 #include "H5DataTypes/CsPadConfigV1.h"
00017 
00018 //-----------------
00019 // C/C++ Headers --
00020 //-----------------
00021 #include <algorithm>
00022 
00023 //-------------------------------
00024 // Collaborating Class Headers --
00025 //-------------------------------
00026 #include "hdf5pp/ArrayType.h"
00027 #include "hdf5pp/CompoundType.h"
00028 #include "hdf5pp/TypeTraits.h"
00029 #include "H5DataTypes/H5DataUtils.h"
00030 
00031 //-----------------------------------------------------------------------
00032 // Local Macros, Typedefs, Structures, Unions and Forward Declarations --
00033 //-----------------------------------------------------------------------
00034 
00035 //              ----------------------------------------
00036 //              -- Public Function Member Definitions --
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   // make scalar data set for main object
00182   CsPadConfigV1 data ( config ) ;
00183   storeDataObject ( data, "config", grp ) ;
00184 }
00185 
00186 } // namespace H5DataTypes

Generated on 19 Dec 2016 for PSDMSoftware by  doxygen 1.4.7