#include "hdf5Scenario.h"

template<class T>
void Hdf5::datasetBranch(const string &branchPath, T datasetValue[MAX_ARRAY_DEPTH])
{
    const H5std_string  datasetPath(branchPath);

    DataSet datasetType = _file.openDataSet(datasetPath);        
    datasetType.read(datasetValue, PredType::NATIVE_FLOAT, H5S_ALL, H5S_ALL);
    datasetType.close();
}

void Hdf5::hdf5Path(const string &h5Path)
{
    const H5std_string  filePath(h5Path);
    H5File file (filePath, H5F_ACC_RDONLY);
    _file = file;
}

void Hdf5::scenarioRead(ScenGenHardwareOutput_t &scenParams)
{
    /****************** /sramParameters/frameType ******************/
    datasetBranch <float_t>("/sramParameters/frameType", floatArray);
    scenParams.frameType = static_cast<quint8>(floatArray[0]);

    /****************** /sramParameters/totalTxShotNo ******************/
    datasetBranch <float_t>("/sramParameters/totalTxShotNo", floatArray);
    scenParams.totalTxShotNumber = static_cast<quint32>(floatArray[0]);

    /******************* /sramParameters/focusTypeNo *******************/
    datasetBranch <float_t>("/sramParameters/focusTypeNo", floatArray);
    scenParams.focusTypeNumber = static_cast<quint32>(floatArray[0]);

    /******************* /sramParameters/rxBeamformerNo *******************/
    datasetBranch <float_t>("/sramParameters/rxBeamformerNo", floatArray);
    scenParams.rxBeamFormerNumber.clear();
    for (quint32 var = 0; var < scenParams.focusTypeNumber; var++)
        scenParams.rxBeamFormerNumber.push_back(static_cast<quint8>(floatArray[var]));

    /**************** /sramParameters/pulseInterval ********************/
    datasetBranch <float_t>("/sramParameters/pulseInterval", floatArray);
    scenParams.pulseInterval.clear();
    for (quint32 var = 0; var < scenParams.focusTypeNumber; var++)
        scenParams.pulseInterval.push_back(floatArray[var]);

    /**************** /sramParameters/indexParameters/shotPropertiesIndex ********************/
    datasetBranch <float_t>("/sramParameters/indexParameters/shotPropertiesIndex", floatArray);
    scenParams.indexParams.shotPropertiesIndex.clear();
    for (quint32 var = 0; var < scenParams.totalTxShotNumber; var++)
        scenParams.indexParams.shotPropertiesIndex.push_back(static_cast<quint32>(floatArray[var]));

    /**************** /sramParameters/indexParameters/pulsePropertiesIndex ********************/
    datasetBranch <float_t>("/sramParameters/indexParameters/pulsePropertiesIndex", floatArray);
    scenParams.indexParams.pulsePropertiesIndex.clear();
    for (quint32 var = 0; var < scenParams.totalTxShotNumber; var++)
        scenParams.indexParams.pulsePropertiesIndex.push_back(static_cast<quint32>(floatArray[var]));

    /**************** /sramParameters/indexParameters/receiverConfigurationIndex ********************/
    datasetBranch <float_t>("/sramParameters/indexParameters/receiverConfigurationIndex", floatArray);
    scenParams.indexParams.receiverConfigurationIndex.clear();
    for (quint32 var = 0; var < scenParams.totalTxShotNumber; var++)
        scenParams.indexParams.receiverConfigurationIndex.push_back(static_cast<quint32>(floatArray[var]));

    /**************** /sramParameters/indexParameters/firstLineInFrame ********************/
    datasetBranch <float_t>("/sramParameters/indexParameters/firstLineInFrame", floatArray);
    scenParams.indexParams.firstLineInFrame.clear();
    for (quint32 var = 0; var < scenParams.totalTxShotNumber; var++)
        scenParams.indexParams.firstLineInFrame.push_back(static_cast<bool>(floatArray[var]));

    /**************** /sramParameters/indexParameters/lastLineInFrame ********************/
    datasetBranch <float_t>("/sramParameters/indexParameters/lastLineInFrame", floatArray);
    scenParams.indexParams.lastLineInFrame.clear();
    for (quint32 var = 0; var < scenParams.totalTxShotNumber; var++)
        scenParams.indexParams.lastLineInFrame.push_back(static_cast<bool>(floatArray[var]));

    /**************** /sramParameters/indexParameters/dLineNum ********************/
    datasetBranch <float_t>("/sramParameters/indexParameters/dLineNum", floatArray);
    scenParams.indexParams.dLineNum.clear();
    for (quint32 var = 0; var < scenParams.totalTxShotNumber; var++)
        scenParams.indexParams.dLineNum.push_back(static_cast<quint32>(floatArray[var]));

    /**************** /sramParameters/indexParameters/dEnsembleNum ********************/
    datasetBranch <float_t>("/sramParameters/indexParameters/dEnsembleNum", floatArray);
    scenParams.indexParams.dEnsembleNum.clear();
    for (quint32 var = 0; var < scenParams.totalTxShotNumber; var++)
        scenParams.indexParams.dEnsembleNum.push_back(static_cast<quint32>(floatArray[var]));

    /**************** /sramParameters/txParameters/txFocusXPos ********************/
    datasetBranch <float_t>("/sramParameters/txParameters/txFocusXPos", floatArray);
    scenParams.txParams.txFocusXPos.clear();
    for (quint32 var = 0; var < scenParams.focusTypeNumber; var++)
        scenParams.txParams.txFocusXPos.push_back(floatArray[var]);

    /**************** /sramParameters/txParameters/txFocusYPos ********************/
    datasetBranch <float_t>("/sramParameters/txParameters/txFocusYPos", floatArray);
    scenParams.txParams.txFocusYPos.clear();
    for (quint32 var = 0; var < scenParams.focusTypeNumber; var++)
        scenParams.txParams.txFocusYPos.push_back(floatArray[var]);

    /**************** /sramParameters/txParameters/txFocusZPos ********************/
    datasetBranch <float_t>("/sramParameters/txParameters/txFocusZPos", floatArray);
    scenParams.txParams.txFocusZPos.clear();
    for (quint32 var = 0; var < scenParams.focusTypeNumber; var++)
        scenParams.txParams.txFocusZPos.push_back(floatArray[var]);

    /**************** /sramParameters/txParameters/txStartActiveElementNo ********************/
    datasetBranch <float_t>("/sramParameters/txParameters/txStartActiveElementNo", floatArray);
    scenParams.txParams.txStartActiveElementNumber.clear();
    for (quint32 var = 0; var < scenParams.focusTypeNumber; var++)
        scenParams.txParams.txStartActiveElementNumber.push_back(static_cast<quint32>(floatArray[var]));

    /**************** /sramParameters/txParameters/txActiveElementNo ********************/
    datasetBranch <float_t>("/sramParameters/txParameters/txActiveElementNo", floatArray);
    scenParams.txParams.txActiveElementNumber.clear();
    for (quint32 var = 0; var < scenParams.focusTypeNumber; var++)
        scenParams.txParams.txActiveElementNumber.push_back(static_cast<quint32>(floatArray[var]));

    /**************** /sramParameters/txParameters/maxDelayQ ********************/
    datasetBranch <float_t>("/sramParameters/txParameters/maxDelayQ", floatArray);
    scenParams.txParams.maxDelayQ.clear();
    for (quint32 var = 0; var < scenParams.focusTypeNumber; var++)
        scenParams.txParams.maxDelayQ.push_back(static_cast<quint32>(floatArray[var]));

    /**************** /sramParameters/rxParameters/rxR0CenterActiveElementNo ********************/
    datasetBranch <float_t>("/sramParameters/rxParameters/rxR0CenterActiveElementNo", floatArray);
    scenParams.rxParams.rxR0CenterActiveElementNumber.clear();
    quint32 accum = 0;
    for (quint32 var = 0; var < scenParams.focusTypeNumber; var++)
        for (quint8 var1 = 0; var1 < scenParams.rxBeamFormerNumber[static_cast<qint32>(var)]; var1++)
        {
            scenParams.rxParams.rxR0CenterActiveElementNumber.push_back(static_cast<quint32>(floatArray[accum]));
            accum++;
        }

    /**************** /sramParameters/rxParameters/rxR0ActiveElementNo ********************/
    datasetBranch <float_t>("/sramParameters/rxParameters/rxR0ActiveElementNo", floatArray);
    scenParams.rxParams.rxR0ActiveElementNumber.clear();
    accum = 0;
    for (quint32 var = 0; var < scenParams.focusTypeNumber; var++)
        for (quint8 var1 = 0; var1 < scenParams.rxBeamFormerNumber[static_cast<qint32>(var)]; var1++)
        {
            scenParams.rxParams.rxR0ActiveElementNumber.push_back(static_cast<quint32>(floatArray[accum]));
            accum++;
        }

    /**************** /sramParameters/rxParameters/rxActiveElementStep ********************/
    datasetBranch <float_t>("/sramParameters/rxParameters/rxActiveElementStep", floatArray);
    scenParams.rxParams.rxActiveElementStep.clear();
    for (quint32 var = 0; var < scenParams.focusTypeNumber; var++)
        scenParams.rxParams.rxActiveElementStep.push_back(floatArray[var]);

    /**************** /sramParameters/rxParameters/interceptPointFiringTime ********************/
    datasetBranch <float_t>("/sramParameters/rxParameters/interceptPointFiringTime", floatArray);
    scenParams.rxParams.interceptPointFiringTime.clear();
    for (quint32 var = 0; var < scenParams.focusTypeNumber; var++)
        scenParams.rxParams.interceptPointFiringTime.push_back(static_cast<quint32>(floatArray[var]));

    /**************** /sramParameters/rxParameters/rxFocusPointNo ********************/
    datasetBranch <float_t>("/sramParameters/rxParameters/rxFocusPointNo", floatArray);
    scenParams.rxParams.rxFocusPointNumber.clear();
    for (quint32 var = 0; var < scenParams.focusTypeNumber; var++)
        scenParams.rxParams.rxFocusPointNumber.push_back(static_cast<quint32>(floatArray[var]));

    /**************** /sramParameters/rxParameters/r0Position ********************/
    datasetBranch <float_t>("/sramParameters/rxParameters/r0Position", floatArray);
    scenParams.rxParams.r0Position.clear();
    for (quint32 var = 0; var < scenParams.focusTypeNumber; var++)
        scenParams.rxParams.r0Position.push_back(floatArray[var]);

    /**************** /sramParameters/rxParameters/thetaCos ********************/
    datasetBranch <float_t>("/sramParameters/rxParameters/thetaCos", floatArray);
    scenParams.rxParams.thetaCos.clear();
    accum = 0;
    for (quint32 var = 0; var < scenParams.focusTypeNumber; var++)
        for (quint8 var1 = 0; var1 < scenParams.rxBeamFormerNumber[static_cast<qint32>(var)]; var1++)
        {
            scenParams.rxParams.thetaCos.push_back(floatArray[accum]);
            accum++;
        }

    /**************** /sramParameters/rxParameters/thetaSin ********************/
    datasetBranch <float_t>("/sramParameters/rxParameters/thetaSin", floatArray);
    scenParams.rxParams.thetaSin.clear();
    accum = 0;
    for (quint32 var = 0; var < scenParams.focusTypeNumber; var++)
        for (quint8 var1 = 0; var1 < scenParams.rxBeamFormerNumber[static_cast<qint32>(var)]; var1++)
        {
            scenParams.rxParams.thetaSin.push_back(floatArray[accum]);
            accum++;
        }

    /**************** /sramParameters/rxParameters/phiCos ********************/
    datasetBranch <float_t>("/sramParameters/rxParameters/phiCos", floatArray);
    scenParams.rxParams.phiCos.clear();
    accum = 0;
    for (quint32 var = 0; var < scenParams.focusTypeNumber; var++)
        for (quint8 var1 = 0; var1 < scenParams.rxBeamFormerNumber[static_cast<qint32>(var)]; var1++)
        {
            scenParams.rxParams.phiCos.push_back(floatArray[accum]);
            accum++;
        }

    /**************** /sramParameters/rxParameters/phiSin ********************/
    datasetBranch <float_t>("/sramParameters/rxParameters/phiSin", floatArray);
    scenParams.rxParams.phiSin.clear();
    accum = 0;
    for (quint32 var = 0; var < scenParams.focusTypeNumber; var++)
        for (quint8 var1 = 0; var1 < scenParams.rxBeamFormerNumber[static_cast<qint32>(var)]; var1++)
        {
            scenParams.rxParams.phiSin.push_back(floatArray[accum]);
            accum++;
        }

    /**************** /sramParameters/rxParameters/interceptXPos ********************/
    datasetBranch <float_t>("/sramParameters/rxParameters/interceptXPos", floatArray);
    scenParams.rxParams.interceptXPos.clear();
    accum = 0;
    for (quint32 var = 0; var < scenParams.focusTypeNumber; var++)
        for (quint8 var1 = 0; var1 < scenParams.rxBeamFormerNumber[static_cast<qint32>(var)]; var1++)
        {
            scenParams.rxParams.interceptXPos.push_back(floatArray[accum]);
            accum++;
        }

    /**************** /sramParameters/rxParameters/interceptYPos ********************/
    datasetBranch <float_t>("/sramParameters/rxParameters/interceptYPos", floatArray);
    scenParams.rxParams.interceptYPos.clear();
    accum = 0;
    for (quint32 var = 0; var < scenParams.focusTypeNumber; var++)
        for (quint8 var1 = 0; var1 < scenParams.rxBeamFormerNumber[static_cast<qint32>(var)]; var1++)
        {
            scenParams.rxParams.interceptYPos.push_back(floatArray[accum]);
            accum++;
        }

    /**************** /sramParameters/rxParameters/interceptZPos ********************/
    datasetBranch <float_t>("/sramParameters/rxParameters/interceptZPos", floatArray);
    scenParams.rxParams.interceptZPos.clear();
    accum = 0;
    for (quint32 var = 0; var < scenParams.focusTypeNumber; var++)
        for (quint8 var1 = 0; var1 < scenParams.rxBeamFormerNumber[static_cast<qint32>(var)]; var1++)
        {
            scenParams.rxParams.interceptZPos.push_back(floatArray[accum]);
            accum++;
        }

    /**************** /sramParameters/rxParameters/txR0MinDelayQ ********************/
    datasetBranch <float_t>("/sramParameters/rxParameters/txR0MinDelayQ", floatArray);
    scenParams.rxParams.txR0MinDelayQ.clear();
    accum = 0;
    for (quint32 var = 0; var < scenParams.focusTypeNumber; var++)
        for (quint8 var1 = 0; var1 < scenParams.rxBeamFormerNumber[static_cast<qint32>(var)]; var1++)
        {
            scenParams.rxParams.txR0MinDelayQ.push_back(static_cast<quint32>(floatArray[accum]));
            accum++;
        }

    /**************** /sramParameters/rxParameters/rxR0MinDelayQ ********************/
    datasetBranch <float_t>("/sramParameters/rxParameters/rxR0MinDelayQ", floatArray);
    scenParams.rxParams.rxR0MinDelayQ.clear();
    accum = 0;
    for (quint32 var = 0; var < scenParams.focusTypeNumber; var++)
        for (quint8 var1 = 0; var1 < scenParams.rxBeamFormerNumber[static_cast<qint32>(var)]; var1++)
        {
            scenParams.rxParams.rxR0MinDelayQ.push_back(static_cast<quint32>(floatArray[accum]));
            accum++;
        }

    /**************** /sramParameters/rxParameters/rxR0MaxDelayQ ********************/
    datasetBranch <float_t>("/sramParameters/rxParameters/rxR0MaxDelayQ", floatArray);
    scenParams.rxParams.rxR0MaxDelayQ.clear();
    accum = 0;
    for (quint32 var = 0; var < scenParams.focusTypeNumber; var++)
        for (quint8 var1 = 0; var1 < scenParams.rxBeamFormerNumber[static_cast<qint32>(var)]; var1++)
        {
            scenParams.rxParams.rxR0MaxDelayQ.push_back(static_cast<quint32>(floatArray[accum]));
            accum++;
        }

    /**************** /registerParameters/pulseTypeNo ********************/
    datasetBranch <float_t>("/registerParameters/pulseTypeNo", floatArray);
    scenParams.hwRegister.pulseTypeNumber = static_cast<quint8>(floatArray[0]);

    /**************** /registerParameters/rxBeamformerTypeNo ********************/
    datasetBranch <float_t>("/registerParameters/rxBeamformerTypeNo", floatArray);
    scenParams.hwRegister.rxBeamFormerTypeNumber = static_cast<quint8>(floatArray[0]);

    /**************** /registerParameters/receiverConfigTypeNo ********************/
    datasetBranch <float_t>("/registerParameters/receiverConfigTypeNo", floatArray);
    scenParams.hwRegister.receiverConfigTypeNumber = static_cast<quint8>(floatArray[0]);

    /**************** /registerParameters/blendWeight ********************/
    datasetBranch <float_t>("/registerParameters/blendWeight", floatArray);
    scenParams.hwRegister.blendWeight.clear();
    QVector <float> tempBlendWeight;

    for (quint32 i = 0; i < 4; i++)
    {
        tempBlendWeight.clear();
        for (quint32 j = 0; j < 512; j++)
        {
            tempBlendWeight.push_back(floatArray[j + i * 512]);
        }
        scenParams.hwRegister.blendWeight.push_back(tempBlendWeight);
    }

    /**************** /registerParameters/freqLut ********************/
    datasetBranch <float_t>("/registerParameters/freqLut", floatArray);
    scenParams.hwRegister.freqLut.clear();
    for (quint32 var = 0; var < 8; var++)
        scenParams.hwRegister.freqLut.push_back(floatArray[var]);

    /**************** /registerParameters/dTgcLut ********************/
    datasetBranch <float_t>("/registerParameters/dTgcLut", floatArray);
    scenParams.hwRegister.dtgcLut.clear();
    for (quint32 var = 0; var < 1024; var++)
        scenParams.hwRegister.dtgcLut.push_back(floatArray[var]);

    /**************** /registerParameters/elementXPositions ********************/
    datasetBranch <float_t>("/registerParameters/elementXPositions", floatArray);
    scenParams.hwRegister.elementXPosition.clear();
    for (quint32 var = 0; var < 192; var++)
        scenParams.hwRegister.elementXPosition.push_back(floatArray[var]);

    /**************** /registerParameters/elementYPositions ********************/
    datasetBranch <float_t>("/registerParameters/elementYPositions", floatArray);
    scenParams.hwRegister.elementYPosition.clear();
    for (quint32 var = 0; var < 192; var++)
        scenParams.hwRegister.elementYPosition.push_back(floatArray[var]);

    /**************** /registerParameters/elementZPositions ********************/
    datasetBranch <float_t>("/registerParameters/elementZPositions", floatArray);
    scenParams.hwRegister.elementZPosition.clear();
    for (quint32 var = 0; var < 192; var++)
        scenParams.hwRegister.elementZPosition.push_back(floatArray[var]);

    /**************** /registerParameters/scenarioStartIndex ********************/
    datasetBranch <float_t>("/registerParameters/scenarioStartIndex", floatArray);
    scenParams.hwRegister.scenarioStartIndex = static_cast<quint32>(floatArray[0]);

    /**************** /registerParameters/scenarioEndIndex ********************/
    datasetBranch <float_t>("/registerParameters/scenarioEndIndex", floatArray);
    scenParams.hwRegister.scenarioEndIndex = static_cast<quint32>(floatArray[0]);

    /**************** /registerParameters/pulseProperties/halfPeriod ********************/
    datasetBranch <float_t>("/registerParameters/pulseProperties/halfPeriod", floatArray);
    QList<quint32> halfPeriod;

        for (quint32 j = 0; j < scenParams.hwRegister.pulseTypeNumber; j++)
        {
            halfPeriod.push_back(static_cast<quint32>(floatArray[j]));
        }


    /**************** /registerParameters/pulseProperties/halfCycleNo ********************/
    datasetBranch <float_t>("/registerParameters/pulseProperties/halfCycleNo", floatArray);
    QList<quint32> halfCycleNo;

        for (quint32 j = 0; j < scenParams.hwRegister.pulseTypeNumber; j++)
        {
            halfCycleNo.push_back(static_cast<quint32>(floatArray[j]));
        }

    /**************** /registerParameters/pulseProperties/pulseVoltSel ********************/
    datasetBranch <float_t>("/registerParameters/pulseProperties/pulseVoltSel", floatArray);
    QList<bool> pulseVoltSel;

        for (quint32 j = 0; j < scenParams.hwRegister.pulseTypeNumber; j++)
        {
            pulseVoltSel.push_back(static_cast<bool>(floatArray[j]));
        }

    /**************** /registerParameters/pulseProperties/startPhase ********************/
    datasetBranch <float_t>("/registerParameters/pulseProperties/startPhase", floatArray);
    QList<bool> startPhase;

        for (quint32 j = 0; j < scenParams.hwRegister.pulseTypeNumber; j++)
        {
            startPhase.push_back(static_cast<bool>(floatArray[j]));
        }

     /**************** /registerParameters/pulseProperties/dampingPulseWidth ********************/
     datasetBranch <float_t>("/registerParameters/pulseProperties/dampingPulseWidth", floatArray);
     QList<quint32> dampingPulseWidth;

         for (quint32 j = 0; j < scenParams.hwRegister.pulseTypeNumber; j++)
         {
             dampingPulseWidth.push_back(static_cast<quint32>(floatArray[j]));
         }

     /**************** /registerParameters/pulseProperties ********************/
     Pulse_t pulseObj;
     scenParams.hwRegister.pulseProps.clear();

         for (qint32 j = 0; j < scenParams.hwRegister.pulseTypeNumber; j++)
         {
             pulseObj.halfPeriod = halfPeriod.at(j);
             pulseObj.startPhase = startPhase.at(j);
             pulseObj.halfCycleNo = halfCycleNo.at(j);
             pulseObj.pulseVoltSel = pulseVoltSel.at(j);
             pulseObj.dampingPulseWidth = dampingPulseWidth.at(j);

             scenParams.hwRegister.pulseProps.push_back(pulseObj);
         }


    /**************** /registerParameters/rxBeamformerProperties/mla ********************/
    datasetBranch <float_t>("/registerParameters/rxBeamformerProperties/mla", floatArray);
    QList<quint32> mla;

        for (quint32 j = 0; j < scenParams.hwRegister.rxBeamFormerTypeNumber; j++)
        {
            mla.push_back(static_cast<quint32>(floatArray[j]));
        }

    /**************** /registerParameters/rxBeamformerProperties/lag ********************/
    datasetBranch <float_t>("/registerParameters/rxBeamformerProperties/lag", floatArray);
    QList<quint32> lag;

        for (quint32 j = 0; j < scenParams.hwRegister.rxBeamFormerTypeNumber; j++)
        {
            lag.push_back(static_cast<quint32>(floatArray[j]));
        }

    /**************** /registerParameters/rxBeamformerProperties/apodizationSel ********************/
     datasetBranch <float_t>("/registerParameters/rxBeamformerProperties/apodizationSel", floatArray);
     QList<quint32> apodizationSel;

         for (quint32 j = 0; j < scenParams.hwRegister.rxBeamFormerTypeNumber; j++)
         {
             apodizationSel.push_back(static_cast<quint32>(floatArray[j]));
         }

    /**************** /registerParameters/rxBeamformerProperties ********************/
    RxBeamFormer_t rxBeamformerObj;
    scenParams.hwRegister.rxBeamFormerProps.clear();

        for (qint32 j = 0; j < scenParams.hwRegister.rxBeamFormerTypeNumber; j++)
        {
            rxBeamformerObj.mla = mla.at(j);
            rxBeamformerObj.lag = lag.at(j);
            rxBeamformerObj.apodizationSel = apodizationSel.at(j);

            scenParams.hwRegister.rxBeamFormerProps.push_back(rxBeamformerObj);
        }


    /**************** /registerParameters/receiverConfigProperties/mla ********************/
     datasetBranch <float_t>("/registerParameters/receiverConfigProperties/mla", floatArray);
     QList<quint32> receiverCfgMla;

         for (quint32 j = 0; j < scenParams.hwRegister.receiverConfigTypeNumber; j++)
         {
             receiverCfgMla.push_back(static_cast<quint32>(floatArray[j]));
         }

    /**************** /registerParameters/receiverConfigProperties/lineMode ********************/
     datasetBranch <float_t>("/registerParameters/receiverConfigProperties/lineMode", floatArray);
     QList<quint32> lineMode;

         for (quint32 j = 0; j < scenParams.hwRegister.receiverConfigTypeNumber; j++)
         {
             lineMode.push_back(static_cast<quint32>(floatArray[j]));
         }

    /**************** /registerParameters/receiverConfigProperties/aTgcSel ********************/
     datasetBranch <float_t>("/registerParameters/receiverConfigProperties/aTgcSel", floatArray);
     QList<quint32> aTgcSel;

         for (quint32 j = 0; j < scenParams.hwRegister.receiverConfigTypeNumber; j++)
         {
             aTgcSel.push_back(static_cast<quint32>(floatArray[j]));
         }

    /**************** /registerParameters/receiverConfigProperties/stbEn ********************/
     datasetBranch <float_t>("/registerParameters/receiverConfigProperties/stbEn", floatArray);
     QList<quint32> stbEn;

         for (quint32 j = 0; j < scenParams.hwRegister.receiverConfigTypeNumber; j++)
         {
             stbEn.push_back(static_cast<quint32>(floatArray[j]));
         }

    /**************** /registerParameters/receiverConfigProperties/stb ********************/
     datasetBranch <float_t>("/registerParameters/receiverConfigProperties/stb", floatArray);
     QList<quint32> stb;

         for (quint32 j = 0; j < scenParams.hwRegister.receiverConfigTypeNumber; j++)
         {
             stb.push_back(static_cast<quint32>(floatArray[j]));
         }

    /**************** /registerParameters/receiverConfigProperties/subtractFilterEn ********************/
     datasetBranch <float_t>("/registerParameters/receiverConfigProperties/subtractFilterEn", floatArray);
     QList<quint32> subtractFilterEn;

         for (quint32 j = 0; j < scenParams.hwRegister.receiverConfigTypeNumber; j++)
         {
             subtractFilterEn.push_back(static_cast<quint32>(floatArray[j]));
         }

    /**************** /registerParameters/receiverConfigProperties/dcCancelEn ********************/
     datasetBranch <float_t>("/registerParameters/receiverConfigProperties/dcCancelEn", floatArray);
     QList<quint32> dcCancelEn;

         for (quint32 j = 0; j < scenParams.hwRegister.receiverConfigTypeNumber; j++)
         {
             dcCancelEn.push_back(static_cast<quint32>(floatArray[j]));
         }

    /**************** /registerParameters/receiverConfigProperties/ncoFreqSel ********************/
     datasetBranch <float_t>("/registerParameters/receiverConfigProperties/ncoFreqSel", floatArray);
     QList<quint32> ncoFreqSel;

         for (quint32 j = 0; j < scenParams.hwRegister.receiverConfigTypeNumber; j++)
         {
             ncoFreqSel.push_back(static_cast<quint32>(floatArray[j]));
         }

    /**************** /registerParameters/receiverConfigProperties/lpfSel ********************/
     datasetBranch <float_t>("/registerParameters/receiverConfigProperties/lpfSel", floatArray);
     QList<quint32> lpfSel;

         for (quint32 j = 0; j < scenParams.hwRegister.receiverConfigTypeNumber; j++)
         {
             lpfSel.push_back(static_cast<quint32>(floatArray[j]));
         }

    /**************** /registerParameters/receiverConfigProperties/absEn ********************/
     datasetBranch <float_t>("/registerParameters/receiverConfigProperties/absEn", floatArray);
     QList<quint32> absEn;

         for (quint32 j = 0; j < scenParams.hwRegister.receiverConfigTypeNumber; j++)
         {
             absEn.push_back(static_cast<quint32>(floatArray[j]));
         }

    /**************** /registerParameters/receiverConfigProperties/focusNo ********************/
     datasetBranch <float_t>("/registerParameters/receiverConfigProperties/focusNo", floatArray);
     QList<quint32> focusNo;

         for (quint32 j = 0; j < scenParams.hwRegister.receiverConfigTypeNumber; j++)
         {
             focusNo.push_back(static_cast<quint32>(floatArray[j]));
         }

    /**************** /registerParameters/receiverConfigProperties/lineFilterEn ********************/
     datasetBranch <float_t>("/registerParameters/receiverConfigProperties/lineFilterEn", floatArray);
     QList<quint32> lineFilterEn;

         for (quint32 j = 0; j < scenParams.hwRegister.receiverConfigTypeNumber; j++)
         {
             lineFilterEn.push_back(static_cast<quint32>(floatArray[j]));
         }

    /**************** /registerParameters/receiverConfigProperties/dpeEn ********************/
    datasetBranch <float_t>("/registerParameters/receiverConfigProperties/dpeEn", floatArray);
    QList<quint32> dpeEn;

        for (quint32 j = 0; j < scenParams.hwRegister.receiverConfigTypeNumber; j++)
        {
            dpeEn.push_back(static_cast<quint32>(floatArray[j]));
        }

    /**************** /registerParameters/receiverConfigProperties/ddcEn ********************/
    datasetBranch <float_t>("/registerParameters/receiverConfigProperties/ddcEn", floatArray);
    QList<quint32> ddcEn;

        for (quint32 j = 0; j < scenParams.hwRegister.receiverConfigTypeNumber; j++)
        {
            ddcEn.push_back(static_cast<quint32>(floatArray[j]));
        }

    /**************** /registerParameters/receiverConfigProperties/wmfEn ********************/
    datasetBranch <float_t>("/registerParameters/receiverConfigProperties/wmfEn", floatArray);
    QList<quint32> wmfEn;

        for (quint32 j = 0; j < scenParams.hwRegister.receiverConfigTypeNumber; j++)
        {
            wmfEn.push_back(static_cast<quint32>(floatArray[j]));
        }

    /**************** /registerParameters/receiverConfigProperties ********************/
    ReceiverConfig_t receiverCfgObj;
    scenParams.hwRegister.receiverConfigProps.clear();

        for (qint32 j = 0; j < scenParams.hwRegister.receiverConfigTypeNumber; j++)
        {
            receiverCfgObj.mla = receiverCfgMla.at(j);
            receiverCfgObj.stb = stb.at(j);
            receiverCfgObj.ddcEn = ddcEn.at(j);
            receiverCfgObj.absEn = absEn.at(j);
            receiverCfgObj.dpeEn = dpeEn.at(j);
            receiverCfgObj.stbEn = stbEn.at(j);
            receiverCfgObj.wmfEn = wmfEn.at(j);
            receiverCfgObj.lpfSel = lpfSel.at(j);
            receiverCfgObj.aTgcSel = aTgcSel.at(j);
            receiverCfgObj.focusNo = focusNo.at(j);
            receiverCfgObj.lineMode = lineMode.at(j);
            receiverCfgObj.dcCancelEn = dcCancelEn.at(j);
            receiverCfgObj.ncoFreqSel = ncoFreqSel.at(j);
            receiverCfgObj.lineFilterEn = lineFilterEn.at(j);
            receiverCfgObj.subtractFilterEn = subtractFilterEn.at(j);

            scenParams.hwRegister.receiverConfigProps.push_back(receiverCfgObj);
        }
}


void Hdf5::prbDependParamsRead(ScenPrbDepHardwareParam &prbDepParams)
{
    /**************** /registerParameters/apodizationLut ********************/
    datasetBranch <float_t>("/registerParameters/apodizationLut", floatArray);
    prbDepParams.prbDepParams.apodizationLut.clear();
    QList <quint32> tempApodization;

    for (quint32 i = 0; i < 4; i++)
    {
        tempApodization.clear();
        for (quint32 j = 0; j < 3057; j++)
        {
            tempApodization.push_back(static_cast<quint32>(floatArray[j + i * 3057]));
        }
        prbDepParams.prbDepParams.apodizationLut.push_back(tempApodization);
    }

    /**************** /registerParameters/aTgcLut ********************/
    datasetBranch <float_t>("/registerParameters/aTgcLut", floatArray);
    prbDepParams.prbDepParams.atgcLut.clear();
    QList <quint32> tempAtgc;

    for (quint32 i = 0; i < 4; i++)
    {
        tempAtgc.clear();
        for (quint32 j = 0; j < 128; j++)
        {
            tempAtgc.push_back(static_cast<quint32>(floatArray[j + i * 128]));
        }
        prbDepParams.prbDepParams.atgcLut.push_back(tempAtgc);
    }

    /**************** /registerParameters/lpfLut ********************/
    datasetBranch <float_t>("/registerParameters/lpfLut", floatArray);
    prbDepParams.prbDepParams.lpfLut.clear();
    QList <quint32> tempLpf;

    for (quint32 i = 0; i < 4; i++)
    {
        tempLpf.clear();
        for (quint32 j = 0; j < 48; j++)
        {
            tempLpf.push_back(static_cast<quint32>(floatArray[j + i * 48]));
        }
        prbDepParams.prbDepParams.lpfLut.push_back(tempLpf);
    }

    /**************** /registerParameters/lpfScale ********************/
    datasetBranch <float_t>("/registerParameters/lpfScale", floatArray);
    prbDepParams.prbDepParams.lpfScaleCoeff.clear();
    for (quint8 i = 0; i < 4; i++)
        prbDepParams.prbDepParams.lpfScaleCoeff.push_back(static_cast<quint8>(floatArray[i]));

}


QVector<quint32> Hdf5::stbRead()
{
    /**************** /registerParameters/stbLutQ ********************/
    datasetBranch <float_t>("/registerParameters/stbLutQ", floatArray);
    QVector<quint32> stb;
    for (quint8 var = 0; var < 8; var++)
        stb.push_back(static_cast<quint32>(floatArray[var]));
    return stb;
}

QVector<float> Hdf5::lineFilterRead()
{
    /**************** /registerParameters/lineFilterLut ********************/
    datasetBranch <float_t>("/registerParameters/lineFilterLut", floatArray);
    QVector<float> lineFilter;
    for (quint8 var = 0; var < 3; var++)
        lineFilter.push_back(floatArray[var]);
    return lineFilter;
}