/*========================================================================= Program: GDCM (Grassroots DICOM). A DICOM library Copyright (c) 2006-2011 Mathieu Malaterre All rights reserved. See Copyright.txt or http://gdcm.sourceforge.net/Copyright.html for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notice for more information. =========================================================================*/ /* * */ /* 28 - 'MrProtocol' VM 1, VR UN, SyngoDT 0, NoOfItems 6, Data '### ASCCONV BEGIN ### ulVersion = 0xbee332 tSequenceFileName = "%SiemensSeq%\fl_fq_shphs" tProtocolName = "flash+AF8-100+AF8-through-plane+AF8-V" tReferenceImage0 = "1.3.12.2.1107.5.2.9.16041.30000007062106100181200004658" tReferenceImage1 = "1.3.12.2.1107.5.2.9.16041.30000007062106100181200004635" tReferenceImage2 = "1.3.12.2.1107.5.2.9.16041.30000007062106100181200004683" ucScanRegionPosValid = 0x1 sProtConsistencyInfo.tBaselineString = "N4_VB11A_LATEST_20031004" sProtConsistencyInfo.flNominalB0 = 1.494 sProtConsistencyInfo.flGMax = 22 sProtConsistencyInfo.flRiseTime = 10 sGRADSPEC.sEddyCompensationX.aflAmplitude[0] = 0.0141111 sGRADSPEC.sEddyCompensationX.aflAmplitude[1] = 0.057038 sGRADSPEC.sEddyCompensationX.aflAmplitude[2] = -0.00986504 sGRADSPEC.sEddyCompensationX.aflAmplitude[3] = 0.00247627 sGRADSPEC.sEddyCompensationX.aflAmplitude[4] = 0.0026377 sGRADSPEC.sEddyCompensationX.aflTimeConstant[0] = 1.53826 sGRADSPEC.sEddyCompensationX.aflTimeConstant[1] = 0.746617 sGRADSPEC.sEddyCompensationX.aflTimeConstant[2] = 0.339236 sGRADSPEC.sEddyCompensationX.aflTimeConstant[3] = 0.0309809 sGRADSPEC.sEddyCompensationX.aflTimeConstant[4] = 0.00067694 sGRADSPEC.sEddyCompensationY.aflAmplitude[0] = 0.0156411 sGRADSPEC.sEddyCompensationY.aflAmplitude[1] = 0.0440623 sGRADSPEC.sEddyCompensationY.aflAmplitude[2] = -0.00782663 sGRADSPEC.sEddyCompensationY.aflAmplitude[3] = 0.00186828 sGRADSPEC.sEddyCompensationY.aflAmplitude[4] = 0.00154504 sGRADSPEC.sEddyCompensationY.aflTimeConstant[0] = 1.47145 sGRADSPEC.sEddyCompensationY.aflTimeConstant[1] = 0.750538 sGRADSPEC.sEddyCompensationY.aflTimeConstant[2] = 0.339397 sGRADSPEC.sEddyCompensationY.aflTimeConstant[3] = 0.0312962 sGRADSPEC.sEddyCompensationY.aflTimeConstant[4] = 0.000895133 sGRADSPEC.sEddyCompensationZ.aflAmplitude[0] = 0.00618504 sGRADSPEC.sEddyCompensationZ.aflAmplitude[1] = 0.00313121 sGRADSPEC.sEddyCompensationZ.aflAmplitude[2] = 0.000289346 sGRADSPEC.sEddyCompensationZ.aflAmplitude[3] = -0.00019677 sGRADSPEC.sEddyCompensationZ.aflAmplitude[4] = 7.66445e-005 sGRADSPEC.sEddyCompensationZ.aflTimeConstant[0] = 3.37462 sGRADSPEC.sEddyCompensationZ.aflTimeConstant[1] = 0.999351 sGRADSPEC.sEddyCompensationZ.aflTimeConstant[2] = 0.0174646 sGRADSPEC.sEddyCompensationZ.aflTimeConstant[3] = 0.0110094 sGRADSPEC.sEddyCompensationZ.aflTimeConstant[4] = 0.00199922 sGRADSPEC.bEddyCompensationValid = 1 sGRADSPEC.sB0CompensationX.aflAmplitude[0] = 0.307474 sGRADSPEC.sB0CompensationX.aflAmplitude[1] = 0.029337 sGRADSPEC.sB0CompensationX.aflAmplitude[2] = -0.187118 sGRADSPEC.sB0CompensationX.aflTimeConstant[0] = 0.98583 sGRADSPEC.sB0CompensationX.aflTimeConstant[1] = 0.0308443 sGRADSPEC.sB0CompensationX.aflTimeConstant[2] = 0.000466792 sGRADSPEC.sB0CompensationY.aflAmplitude[0] = 0.365257 sGRADSPEC.sB0CompensationY.aflAmplitude[1] = -0.318647 sGRADSPEC.sB0CompensationY.aflAmplitude[2] = -0.0118978 sGRADSPEC.sB0CompensationY.aflTimeConstant[0] = 0.61535 sGRADSPEC.sB0CompensationY.aflTimeConstant[1] = 0.488831 sGRADSPEC.sB0CompensationY.aflTimeConstant[2] = 0.00199991 sGRADSPEC.sB0CompensationZ.aflAmplitude[0] = -0.44647 sGRADSPEC.sB0CompensationZ.aflAmplitude[1] = -0.0455154 sGRADSPEC.sB0CompensationZ.aflAmplitude[2] = -0.0304901 sGRADSPEC.sB0CompensationZ.aflTimeConstant[0] = 0.959231 sGRADSPEC.sB0CompensationZ.aflTimeConstant[1] = 0.0720189 sGRADSPEC.sB0CompensationZ.aflTimeConstant[2] = 0.00190141 sGRADSPEC.bB0CompensationValid = 1 sGRADSPEC.sCrossTermCompensationXY.aflAmplitude[0] = 0.00105046 sGRADSPEC.sCrossTermCompensationXY.aflTimeConstant[0] = 0.842014 sGRADSPEC.sCrossTermCompensationXZ.aflAmplitude[0] = -0.00150189 sGRADSPEC.sCrossTermCompensationXZ.aflTimeConstant[0] = 0.736169 sGRADSPEC.sCrossTermCompensationYX.aflAmplitude[0] = -5.5278e-005 sGRADSPEC.sCrossTermCompensationYX.aflTimeConstant[0] = 0.228697 sGRADSPEC.sCrossTermCompensationYZ.aflAmplitude[0] = 0.000307999 sGRADSPEC.sCrossTermCompensationYZ.aflTimeConstant[0] = 1.19431 sGRADSPEC.sCrossTermCompensationZX.aflAmplitude[0] = -0.000286868 sGRADSPEC.sCrossTermCompensationZX.aflTimeConstant[0] = 0.665979 sGRADSPEC.sCrossTermCompensationZY.aflAmplitude[0] = 0.000355175 sGRADSPEC.sCrossTermCompensationZY.aflTimeConstant[0] = 0.844189 sGRADSPEC.bCrossTermCompensationValid = 1 sGRADSPEC.lOffsetX = 25 sGRADSPEC.lOffsetY = 84 sGRADSPEC.lOffsetZ = 47 sGRADSPEC.bOffsetValid = 1 sGRADSPEC.lDelayX = 12 sGRADSPEC.lDelayY = 11 sGRADSPEC.lDelayZ = 9 sGRADSPEC.bDelayValid = 1 sGRADSPEC.flSensitivityX = 0.000264087 sGRADSPEC.flSensitivityY = 0.000272009 sGRADSPEC.flSensitivityZ = 0.000272677 sGRADSPEC.bSensitivityValid = 1 sGRADSPEC.alShimCurrent[0] = 183 sGRADSPEC.alShimCurrent[1] = -25 sGRADSPEC.alShimCurrent[2] = -85 sGRADSPEC.alShimCurrent[3] = 378 sGRADSPEC.alShimCurrent[4] = 82 sGRADSPEC.bShimCurrentValid = 1 sGRADSPEC.ucMode = 0x2 sTXSPEC.asNucleusInfo[0].tNucleus = "1H" sTXSPEC.asNucleusInfo[0].lFrequency = 63684693 sTXSPEC.asNucleusInfo[0].bFrequencyValid = 1 sTXSPEC.asNucleusInfo[0].flReferenceAmplitude = 359.734 sTXSPEC.asNucleusInfo[0].bReferenceAmplitudeValid = 1 sTXSPEC.asNucleusInfo[0].flAmplitudeCorrection = 1 sTXSPEC.asNucleusInfo[0].bAmplitudeCorrectionValid = 1 sTXSPEC.asNucleusInfo[1].bFrequencyValid = 1 sTXSPEC.asNucleusInfo[1].bReferenceAmplitudeValid = 1 sTXSPEC.asNucleusInfo[1].bAmplitudeCorrectionValid = 1 sTXSPEC.aRFPULSE[0].tName = "03GreFCE" sTXSPEC.aRFPULSE[0].bAmplitudeValid = 0x1 sTXSPEC.aRFPULSE[0].flAmplitude = 147.095 sTXSPEC.aRFPULSE[1].tName = "02GreFCE" sTXSPEC.aRFPULSE[1].bAmplitudeValid = 0x1 sTXSPEC.aRFPULSE[1].flAmplitude = 147.095 sTXSPEC.aRFPULSE[2].tName = "01GreFCE" sTXSPEC.aRFPULSE[2].bAmplitudeValid = 0x1 sTXSPEC.aRFPULSE[2].flAmplitude = 147.095 sTXSPEC.lNoOfTraPulses = 3 sTXSPEC.lBTB1ParallelCapacity = 2 sTXSPEC.lBTB1SerialCapacity = 24 sTXSPEC.lBTB2ParallelCapacity = 2 sTXSPEC.lBTB2SerialCapacity = 26 sTXSPEC.bBTBValid = 1 sTXSPEC.flKDynMagnitudeMin = 0.5 sTXSPEC.flKDynMagnitudeMax = 1.5 sTXSPEC.flKDynMagnitudeClipLow = 0.96 sTXSPEC.flKDynMagnitudeClipHigh = 1.04 sTXSPEC.flKDynPhaseMax = 0.698132 sTXSPEC.flKDynPhaseClip = 0.174533 sTXSPEC.bKDynValid = 1 sTXSPEC.ucRFPulseType = 0x1 sTXSPEC.ucExcitMode = 0x1 sTXSPEC.ucSimultaneousExcitation = 0x1 sRXSPEC.lGain = 1 sRXSPEC.bGainValid = 1 sRXSPEC.aFFT_SCALE[0].lRxChannel = 1 sRXSPEC.aFFT_SCALE[0].flFactor = 1.06857 sRXSPEC.aFFT_SCALE[0].bValid = 1 sRXSPEC.aFFT_SCALE[1].lRxChannel = 2 sRXSPEC.aFFT_SCALE[1].flFactor = 1.07454 sRXSPEC.aFFT_SCALE[1].bValid = 1 sRXSPEC.aFFT_SCALE[2].lRxChannel = 3 sRXSPEC.aFFT_SCALE[2].flFactor = 1.06622 sRXSPEC.aFFT_SCALE[2].bValid = 1 sRXSPEC.aFFT_SCALE[3].lRxChannel = 4 sRXSPEC.aFFT_SCALE[3].flFactor = 1.06524 sRXSPEC.aFFT_SCALE[3].bValid = 1 sRXSPEC.aFFT_SCALE[4].lRxChannel = 5 sRXSPEC.aFFT_SCALE[4].flFactor = 0.982692 sRXSPEC.aFFT_SCALE[4].bValid = 1 sRXSPEC.aFFT_SCALE[5].lRxChannel = 6 sRXSPEC.aFFT_SCALE[5].flFactor = 0.988603 sRXSPEC.aFFT_SCALE[5].bValid = 1 sRXSPEC.aFFT_SCALE[6].lRxChannel = 7 sRXSPEC.aFFT_SCALE[6].flFactor = 0.981538 sRXSPEC.aFFT_SCALE[6].bValid = 1 sRXSPEC.aFFT_SCALE[7].lRxChannel = 8 sRXSPEC.aFFT_SCALE[7].flFactor = 1.00856 sRXSPEC.aFFT_SCALE[7].bValid = 1 sRXSPEC.bVariCapVoltagesValid = 1 sRXSPEC.alDwellTime[0] = 8500 sAdjFreSpec.ulMode = 0x1 sAdjFreSpec.ucAdjWithBC = 0x1 sAdjTraSpec.ucAdjWithBC = 0x1 sAdjShimSpec.ulMode = 0x1 sAdjShimSpec.ucAdjWithBC = 0x1 sAdjWatSupSpec.ulMode = 0x1 sAdjWatSupSpec.ucAdjWithBC = 0x1 alTR[0] = 37000 lContrasts = 1 alTE[0] = 4000 acFlowComp[0] = 1 lCombinedEchoes = 1 sSliceArray.asSlice[0].sPosition.dSag = 35.31199581 sSliceArray.asSlice[0].sPosition.dCor = -8.387765754 sSliceArray.asSlice[0].sPosition.dTra = -23.13178296 sSliceArray.asSlice[0].sNormal.dSag = 0.771051253 sSliceArray.asSlice[0].sNormal.dCor = 0.5863890019 sSliceArray.asSlice[0].sNormal.dTra = -0.2482496801 sSliceArray.asSlice[0].dThickness = 6 sSliceArray.asSlice[0].dPhaseFOV = 187.5 sSliceArray.asSlice[0].dReadoutFOV = 250 sSliceArray.lSize = 1 sSliceArray.lSag = 1 sSliceArray.lConc = 1 sSliceArray.ucMode = 0x1 sSliceArray.sTSat.dThickness = 40 sSliceArray.sTSat.dGap = 10 sGroupArray.asGroup[0].nSize = 1 sGroupArray.asGroup[0].dDistFact = 0.2 sGroupArray.anMember[1] = -1 sGroupArray.lSize = 1 sGroupArray.sPSat.dThickness = 50 sGroupArray.sPSat.dGap = 10 sAutoAlign.dAAMatrix[0] = 1 sAutoAlign.dAAMatrix[5] = 1 sAutoAlign.dAAMatrix[10] = 1 sAutoAlign.dAAMatrix[15] = 1 sNavigatorPara.ucRespComp = 0x4 sPrepPulses.ucFatSat = 0x4 sPrepPulses.ucWaterSat = 0x4 sPrepPulses.ucInversion = 0x4 sPrepPulses.ucSatRecovery = 0x1 sPrepPulses.ucFatSatMode = 0x2 sKSpace.lBaseResolution = 256 sKSpace.lPhaseEncodingLines = 192 sKSpace.dPhaseResolution = 1 sKSpace.lPartitions = 32 sKSpace.lImagesPerSlab = 32 sKSpace.dSliceResolution = 1 sKSpace.ucPhasePartialFourier = 0x10 sKSpace.ucSlicePartialFourier = 0x10 sKSpace.ucAveragingMode = 0x2 sKSpace.ucMultiSliceMode = 0x1 sKSpace.ucDimension = 0x2 sKSpace.ucAsymmetricEchoAllowed = 0x1 sKSpace.unReordering = 0x1 sFastImaging.lEPIFactor = 1 sFastImaging.lTurboFactor = 1 sFastImaging.lSegments = 3 sFastImaging.ulEnableRFSpoiling = 0x1 sPhysioImaging.lSignal1 = 2 sPhysioImaging.lMethod1 = 2 sPhysioImaging.lSignal2 = 1 sPhysioImaging.lMethod2 = 1 sPhysioImaging.lPhases = 21 sPhysioImaging.lRetroGatedImages = 16 sPhysioImaging.sPhysioECG.lScanWindow = 805 sPhysioImaging.sPhysioECG.lTriggerPulses = 1 sPhysioImaging.sPhysioECG.lTriggerWindow = 5 sPhysioImaging.sPhysioECG.lArrhythmiaDetection = 1 sPhysioImaging.sPhysioECG.lCardiacGateOnThreshold = 100000 sPhysioImaging.sPhysioECG.lCardiacGateOffThreshold = 700000 sPhysioImaging.sPhysioPulse.lTriggerPulses = 1 sPhysioImaging.sPhysioPulse.lTriggerWindow = 5 sPhysioImaging.sPhysioPulse.lCardiacGateOnThreshold = 100000 sPhysioImaging.sPhysioPulse.lCardiacGateOffThreshold = 700000 sPhysioImaging.sPhysioExt.lTriggerPulses = 1 sPhysioImaging.sPhysioExt.lTriggerWindow = 5 sPhysioImaging.sPhysioExt.lCardiacGateOnThreshold = 100000 sPhysioImaging.sPhysioExt.lCardiacGateOffThreshold = 700000 sPhysioImaging.sPhysioResp.lRespGateThreshold = 20 sPhysioImaging.sPhysioResp.lRespGatePhase = 2 sPhysioImaging.sPhysioResp.dGatingRatio = 0.3 sSpecPara.lPhaseCyclingType = 1 sSpecPara.lPhaseEncodingType = 1 sSpecPara.lRFExcitationBandwidth = 1 sSpecPara.ucRemoveOversampling = 0x1 sSpecPara.lDecouplingType = 1 sSpecPara.lNOEType = 1 sSpecPara.lExcitationType = 1 sSpecPara.lSpectralSuppression = 1 sDiffusion.ulMode = 0x1 sAngio.sFlowArray.asElm[0].nVelocity = 100 sAngio.sFlowArray.asElm[0].nDir = 0x4 sAngio.sFlowArray.lSize = 1 sAngio.ucPCFlowMode = 0x2 sAngio.ucTOFInflow = 0x4 sAngio.ucRephasedImage = 0x1 sAngio.ucPhaseImage = 0x1 sEllipticalFilter.ucMode = 0x1 sPat.lAccelFactPE = 1 sPat.lAccelFact3D = 1 sPat.ucPATMode = 0x1 sPat.ucRefScanMode = 0x1 ucAutoMovie = 0x1 ucDisableChangeStoreImages = 0x1 ucReconstructionMode = 0x1 ucPHAPSMode = 0x1 ucDixon = 0x1 lAverages = 2 adFlipAngleDegree[0] = 30 lScanTimeSec = 103 lTotalScanTimeSec = 112 dRefSNR = 165404.1473 dRefSNR_VOI = 165404.1473 tdefaultEVAProt = "%SiemensEvaDefProt%\Inline\Inline.evp" tcurrentEVAProt = "%CURRENTEVAPROT%\EVA2A5.tmp" sCOIL_SELECT_MEAS.asList[0].sCoilElementID.tCoilID = "6_Ch_Body_P" sCOIL_SELECT_MEAS.asList[0].sCoilElementID.lCoilCopy = 1 sCOIL_SELECT_MEAS.asList[0].sCoilElementID.tElement = "PP6" sCOIL_SELECT_MEAS.asList[0].lElementSelected = 1 sCOIL_SELECT_MEAS.asList[0].lRxChannelConnected = 1 sCOIL_SELECT_MEAS.asList[1].sCoilElementID.tCoilID = "6_Ch_Body_P" sCOIL_SELECT_MEAS.asList[1].sCoilElementID.lCoilCopy = 1 sCOIL_SELECT_MEAS.asList[1].sCoilElementID.tElement = "PP5" sCOIL_SELECT_MEAS.asList[1].lElementSelected = 1 sCOIL_SELECT_MEAS.asList[1].lRxChannelConnected = 1 sCOIL_SELECT_MEAS.asList[2].sCoilElementID.tCoilID = "6_Ch_Body_P" sCOIL_SELECT_MEAS.asList[2].sCoilElementID.lCoilCopy = 1 sCOIL_SELECT_MEAS.asList[2].sCoilElementID.tElement = "PP3" sCOIL_SELECT_MEAS.asList[2].lElementSelected = 1 sCOIL_SELECT_MEAS.asList[2].lRxChannelConnected = 2 sCOIL_SELECT_MEAS.asList[3].sCoilElementID.tCoilID = "6_Ch_Body_P" sCOIL_SELECT_MEAS.asList[3].sCoilElementID.lCoilCopy = 1 sCOIL_SELECT_MEAS.asList[3].sCoilElementID.tElement = "PP4" sCOIL_SELECT_MEAS.asList[3].lElementSelected = 1 sCOIL_SELECT_MEAS.asList[3].lRxChannelConnected = 3 sCOIL_SELECT_MEAS.asList[4].sCoilElementID.tCoilID = "6_Ch_Body_P" sCOIL_SELECT_MEAS.asList[4].sCoilElementID.lCoilCopy = 1 sCOIL_SELECT_MEAS.asList[4].sCoilElementID.tElement = "PP2" sCOIL_SELECT_MEAS.asList[4].lElementSelected = 1 sCOIL_SELECT_MEAS.asList[4].lRxChannelConnected = 4 sCOIL_SELECT_MEAS.asList[5].sCoilElementID.tCoilID = "6_Ch_Body_P" sCOIL_SELECT_MEAS.asList[5].sCoilElementID.lCoilCopy = 1 sCOIL_SELECT_MEAS.asList[5].sCoilElementID.tElement = "PP1" sCOIL_SELECT_MEAS.asList[5].lElementSelected = 1 sCOIL_SELECT_MEAS.asList[5].lRxChannelConnected = 4 sCOIL_SELECT_MEAS.asList[6].sCoilElementID.tCoilID = "6_Ch_Body_A" sCOIL_SELECT_MEAS.asList[6].sCoilElementID.lCoilCopy = 1 sCOIL_SELECT_MEAS.asList[6].sCoilElementID.tElement = "PA6" sCOIL_SELECT_MEAS.asList[6].lElementSelected = 1 sCOIL_SELECT_MEAS.asList[6].lRxChannelConnected = 5 sCOIL_SELECT_MEAS.asList[7].sCoilElementID.tCoilID = "6_Ch_Body_A" sCOIL_SELECT_MEAS.asList[7].sCoilElementID.lCoilCopy = 1 sCOIL_SELECT_MEAS.asList[7].sCoilElementID.tElement = "PA5" sCOIL_SELECT_MEAS.asList[7].lElementSelected = 1 sCOIL_SELECT_MEAS.asList[7].lRxChannelConnected = 5 sCOIL_SELECT_MEAS.asList[8].sCoilElementID.tCoilID = "6_Ch_Body_A" sCOIL_SELECT_MEAS.asList[8].sCoilElementID.lCoilCopy = 1 sCOIL_SELECT_MEAS.asList[8].sCoilElementID.tElement = "PA3" sCOIL_SELECT_MEAS.asList[8].lElementSelected = 1 sCOIL_SELECT_MEAS.asList[8].lRxChannelConnected = 6 sCOIL_SELECT_MEAS.asList[9].sCoilElementID.tCoilID = "6_Ch_Body_A" sCOIL_SELECT_MEAS.asList[9].sCoilElementID.lCoilCopy = 1 sCOIL_SELECT_MEAS.asList[9].sCoilElementID.tElement = "PA4" sCOIL_SELECT_MEAS.asList[9].lElementSelected = 1 sCOIL_SELECT_MEAS.asList[9].lRxChannelConnected = 7 sCOIL_SELECT_MEAS.asList[10].sCoilElementID.tCoilID = "6_Ch_Body_A" sCOIL_SELECT_MEAS.asList[10].sCoilElementID.lCoilCopy = 1 sCOIL_SELECT_MEAS.asList[10].sCoilElementID.tElement = "PA2" sCOIL_SELECT_MEAS.asList[10].lElementSelected = 1 sCOIL_SELECT_MEAS.asList[10].lRxChannelConnected = 8 sCOIL_SELECT_MEAS.asList[11].sCoilElementID.tCoilID = "6_Ch_Body_A" sCOIL_SELECT_MEAS.asList[11].sCoilElementID.lCoilCopy = 1 sCOIL_SELECT_MEAS.asList[11].sCoilElementID.tElement = "PA1" sCOIL_SELECT_MEAS.asList[11].lElementSelected = 1 sCOIL_SELECT_MEAS.asList[11].lRxChannelConnected = 8 sCOIL_SELECT_MEAS.sCOILPLUGS.aulPlugId[0] = 0xff sCOIL_SELECT_MEAS.sCOILPLUGS.aulPlugId[1] = 0x76 sCOIL_SELECT_MEAS.sCOILPLUGS.aulPlugId[2] = 0x78 sCOIL_SELECT_MEAS.sCOILPLUGS.aulPlugId[3] = 0x87 sCOIL_SELECT_MEAS.sCOILPLUGS.aulPlugId[4] = 0x67 sCOIL_SELECT_MEAS.sCOILPLUGS.auiNmbrOfNibbles[0] = 0x2 sCOIL_SELECT_MEAS.sCOILPLUGS.auiNmbrOfNibbles[1] = 0x2 sCOIL_SELECT_MEAS.sCOILPLUGS.auiNmbrOfNibbles[2] = 0x2 sCOIL_SELECT_MEAS.sCOILPLUGS.auiNmbrOfNibbles[3] = 0x2 sCOIL_SELECT_MEAS.sCOILPLUGS.auiNmbrOfNibbles[4] = 0x2 sEFISPEC.bEFIDataValid = 1 ### ASCCONV END ### ' */ /* * Table of equivalence: * ulVersion = 0xbee332 <=> 27 - 'MrProtocolVersion' VM 1, VR IS, SyngoDT 6, NoOfItems 6, Data '12510002' */ #include "gdcmReader.h" #include "gdcmImageReader.h" #include "gdcmImageWriter.h" #include "gdcmCSAHeader.h" #include "gdcmAttribute.h" #include "gdcmGlobal.h" #include "gdcmDicts.h" #include #include int main(int argc, char *argv []) { if( argc < 2 ) return 1; const char *filename = argv[1]; gdcm::ImageReader reader; reader.SetFileName( filename ); if( !reader.Read() ) { std::cerr << "Failed to read: " << filename << std::endl; return 1; } gdcm::CSAHeader csa; const gdcm::DataSet& ds = reader.GetFile().GetDataSet(); //const gdcm::PrivateTag &t1 = csa.GetCSAImageHeaderInfoTag(); const gdcm::PrivateTag &t2 = csa.GetCSASeriesHeaderInfoTag(); if( ds.FindDataElement( t2 ) ) { csa.LoadFromDataElement( ds.GetDataElement( t2 ) ); //csa.Print( std::cout ); } if( !csa.FindCSAElementByName( "MrProtocol" ) ) { return 1; } const gdcm::CSAElement &csael = csa.GetCSAElementByName( "MrProtocol" ); //std::cout << csael << std::endl; const gdcm::ByteValue *bv = csael.GetByteValue(); if( !bv ) { return 1; } std::string str(bv->GetPointer(), bv->GetLength()); std::istringstream is(str); std::string s; typedef std::map< std::string, std::string > MyMapType; MyMapType mymap; while( std::getline(is, s ) ) { std::string::size_type pos = s.find( '=' ); if( pos != std::string::npos ) { std::string sub1 = s.substr(0, pos); sub1.erase( sub1.find_last_not_of(' ') + 1); std::string sub2 = s.substr(pos+1); // skip the '=' char sub2.erase( 0, sub2.find_first_not_of(' ')); //std::cout << sub1 << std::endl; mymap.insert( MyMapType::value_type(sub1, sub2) ); } else { // ### ASCCONV BEGIN ### // ### ASCCONV END ### } } const char fourierstr[] = "sKSpace.ucSlicePartialFourier"; const gdcm::CSAHeaderDict &csadict = gdcm::Global::GetInstance().GetDicts().GetCSAHeaderDict(); const gdcm::CSAHeaderDictEntry &fourier = csadict.GetCSAHeaderDictEntry( fourierstr ); std::cout << fourier << std::endl; MyMapType::const_iterator it = mymap.find ( fourierstr ); if( it == mymap.end() ) return 1; //std::cout << it->second << std::endl; const std::string &partial_fourier = it->second; if( partial_fourier == "0x1" ) { std::cout << "partial fourier is 4/8" << std::endl; } else if( partial_fourier == "0x2" ) { std::cout << "partial fourier is 5/8" << std::endl; } else if( partial_fourier == "0x4" ) { std::cout << "partial fourier is 6/8" << std::endl; } else if( partial_fourier == "0x8" ) { std::cout << "partial fourier is 7/8" << std::endl; } else if( partial_fourier == "0x10" ) { std::cout << "partial fourier is 8/8" << std::endl; } else { std::cerr << "Impossible: " << partial_fourier << std::endl; return 1; } /* This is the Flip Angle: adFlipAngleDegree[0] = 30 One can find it also in the protocol: ... { ""T1mapFunctor@IceImagePostProcFunctors"" { } { 16 14.7378520000000000 } ... */ // Below is an attemp to play with the CSAHeader dict: #if 0 const char gspec[] = "sGRADSPEC.flSensitivityX"; it = mymap.find( gspec ); if( it == mymap.end() ) return 1; const std::string &dummy = it->second; std::cout << dummy << std::endl; const gdcm::CSAHeaderDictEntry &csaentry = csadict.GetCSAHeaderDictEntry( gspec ); std::cout << csaentry << std::endl; #endif /* sSliceArray.ucMode -- should be in (1, 2, 4) enum SeriesMode { ASCENDING = 0x01, DESCENDING = 0x02, INTERLEAVED = 0x04 }; */ const char sliceorderstr[] = "sSliceArray.ucMode"; const gdcm::CSAHeaderDictEntry &sliceorder = csadict.GetCSAHeaderDictEntry( sliceorderstr ); std::cout << sliceorder << std::endl; it = mymap.find ( sliceorderstr ); if( it == mymap.end() ) return 1; const std::string &slice_order = it->second; if( slice_order == "0x1" ) { std::cout << "slice_order: ASCENDING" << std::endl; } else if( slice_order == "0x2" ) { std::cout << "slice_order: DESCENDING" << std::endl; } else if( slice_order == "0x4" ) { std::cout << "slice_order: INTERLEAVED" << std::endl; } else { std::cerr << "Impossible: " << slice_order << std::endl; return 1; } gdcm::MrProtocol mrprot; if( csa.GetMrProtocol(ds, mrprot) ) { std::cout << mrprot << std::endl; } return 0; }