H5DataTypes/src/CsPadConfigV5.cpp

Go to the documentation of this file.
00001 //--------------------------------------------------------------------------
00002 // File and Version Information:
00003 //      $Id: CsPadConfigV5.cpp 6826 2013-09-24 21:08:01Z salnikov@SLAC.STANFORD.EDU $
00004 //
00005 // Description:
00006 //      Class CsPadConfigV5...
00007 //
00008 // Author List:
00009 //      Andrei Salnikov
00010 //
00011 //------------------------------------------------------------------------
00012 
00013 //-----------------------
00014 // This Class's Header --
00015 //-----------------------
00016 #include "H5DataTypes/CsPadConfigV5.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 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   // fill the list of active sections from ROI bits
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   // make scalar data set for main object
00171   CsPadConfigV5 data ( config ) ;
00172   storeDataObject ( data, "config", grp ) ;
00173 }
00174 
00175 } // namespace H5DataTypes

Generated on 19 Dec 2016 for PSDMSoftware by  doxygen 1.4.7