H5DataTypes/src/CsPadConfigV4.cpp

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

Generated on 19 Dec 2016 for PSDMSoftware by  doxygen 1.4.7