[ismrmrd] 144/177: Added data serialization to the Matalb code

Ghislain Vaillant ghisvail-guest at moszumanska.debian.org
Wed Jan 14 20:02:12 UTC 2015


This is an automated email from the git hooks/post-receive script.

ghisvail-guest pushed a commit to annotated tag v1.1.0.beta.1
in repository ismrmrd.

commit d094a5b7ff4a67040c85d39cc1b91b55f3dd9d07
Author: David C Hansen <dch at cs.au.dk>
Date:   Thu Oct 16 15:34:55 2014 +0200

    Added data serialization to the Matalb code
---
 matlab/+ismrmrd/+xml/serialize.m | 247 +++++++++++++++++++++++++++++++++++++++
 1 file changed, 247 insertions(+)

diff --git a/matlab/+ismrmrd/+xml/serialize.m b/matlab/+ismrmrd/+xml/serialize.m
new file mode 100644
index 0000000..8f970c2
--- /dev/null
+++ b/matlab/+ismrmrd/+xml/serialize.m
@@ -0,0 +1,247 @@
+function [xml_doc] = serialize( header)
+%SERIALIZE Summary of this function goes here
+%   Detailed explanation goes here
+docNode = com.mathworks.xml.XMLUtils.createDocument('ismrmrdHeader');
+docRootNode = docNode.getDocumentElement;
+docRootNode.setAttribute('xmlns','http://www.ismrm.org/ISMRMRD');
+docRootNode.setAttribute('xmlns:xsi','http://www.w3.org/2001/XMLSchema-instance');
+docRootNode.setAttribute('xmlns:xs','http://www.w3.org/2001/XMLSchema');
+
+docRootNode.setAttribute('xsi:schemaLocation','http://www.ismrm.org/ISMRMRD ismrmrd.xsd');
+docRootNode.setAttribute('version','1');
+
+append_optional(docNode,docRootNode,header,'version', at int2str)
+
+if isfield(header,'subjectInformation')
+    subjectInformation = header.subjectInformation
+    subjectInformationNode = docNode.createElement('subjectInformation');
+    append_optional(docNode,subjectInformationNode,subjectInformation,'patientName');
+    append_optional(docNode,subjectInformationNode,subjectInformation,'patientWeight_kg', at num2str);
+    append_optional(docNode,subjectInformationNode,subjectInformation,'patientID');
+    append_optional(docNode,subjectInformationNode,subjectInformation,'patientBirthdate');
+    append_optional(docNode,subjectInformationNode,subjectInformation,'patientGender');
+    docRootNode.appendChild(subjectInformationNode);
+end
+
+if isfield(header,'studyInformation')
+    studyInformation = header.studyInformation
+    studyInformationNode = docNode.createElement('subjectInformation');
+    append_optional(docNode,studyInformationNode,studyInformation,'studyDate');
+    append_optional(docNode,studyInformationNode,studyInformation,'studyTime');
+    append_optional(docNode,studyInformationNode,studyInformation,'studyID');
+    append_optional(docNode,studyInformationNode,studyInformation,'accessionNumber', at int2str);
+    append_optional(docNode,studyInformationNode,studyInformation,'referringPhysicianName');
+    append_optional(docNode,studyInformationNode,studyInformation,'studyDescription');
+    append_optional(docNode,studyInformationNode,studyInformation,'studyInstanceUID');
+    docRootNode.appendChild(studyInformation);
+end
+
+if isfield(header,'measurementInformation')
+    measurementInformation = header.measurementInformation;
+    measurementInformationNode = docNode.createElement('measurementInformation');
+    append_optional(docNode,measurementInformationNode,measurementInformation,'measurementID');
+    append_optional(docNode,measurementInformationNode,measurementInformation,'seriesDate');
+    append_optional(docNode,measurementInformationNode,measurementInformation,'seriesTime');
+    
+    append_node(docNode,docNode,measurementInformationNode,measurementInformation,'patientPosition');
+    
+    append_optional(docNode,measurementInformationNode,measurementInformation,'initialSeriesNumber', at int2str);
+    append_optional(docNode,measurementInformationNode,measurementInformation,'protocolName');
+    append_optional(docNode,measurementInformationNode,measurementInformation,'seriesDescription');
+    
+    
+    measurementDependency = measurementInformation.measurementDependency;
+    for dep = measurementDependency(:)
+        node = docNode.createElement('measurementDependency');
+        append_node(docNode,node,dep,'dependencyType');
+        append_node(docNode,node,dep,'measurementID');
+        measurementInformationNode.appendChild(node)
+    end
+       
+    append_optional(docNode,measurementInformationNode,measurementInformation,'seriesInstanceUIDRoot');
+    append_optional(docNode,measurementInformationNode,measurementInformation,'frameOfReferenceUID');
+    
+    referencedImageSequence = measurementInformation.referencedImageSequence;
+    referencedImageSequenceNode = docNode.createElement('referencedImageSequence')
+    for ref = referencedImageSequence(:)
+        append_node(docNode,referencedImageSequenceNode,ref,'referencedSOPInstanceUID');
+    end
+   
+    docRootNode.appendChild(measurementInformationNode);
+end
+
+if isfield(header,'acquisitionSystemInformation')
+    acquisitionSystemInformation = header.acquisitionSystemInformation;
+    acquisitionSystemInformationNode = docNode.createElement('acquisitionSystemInformation');
+    append_optional(docNode,acquisitionSystemInformationNode,acquisitionSystemInformation,'systemVendor');
+    append_optional(docNode,acquisitionSystemInformationNode,acquisitionSystemInformation,'systemModel');
+    append_optional(docNode,acquisitionSystemInformationNode,acquisitionSystemInformation,'systemFieldStrength_T', at num2str);
+    append_optional(docNode,acquisitionSystemInformationNode,acquisitionSystemInformation,'relativeReceiverNoiseBandwidth', at num2str);
+    append_optional(docNode,acquisitionSystemInformationNode,acquisitionSystemInformation,'receiverChannels', at int2str);
+    append_optional(docNode,acquisitionSystemInformationNode,acquisitionSystemInformation,'institutionName');
+    append_optional(docNode,acquisitionSystemInformationNode,acquisitionSystemInformation,'stationName', at num2str);
+    docRootNode.appendChild(acquisitionSystemInformationNode);
+end
+
+experimentalConditions = header.experimentalConditions;
+experimentalConditionsNode = docNode.createElement('experimentalConditionsNode');
+append_node(docNode,experimentalConditionsNode,experimentalConditions,'H1resonanceFrequency_Hz', at int2str);
+docRootNode.appendChild(experimentalConditionsNode);
+
+if ~isfield(header,'encoding')
+    error('Illegal header: missing encoding section');
+end
+
+for enc = header.encoding(:)
+    node = docNode.createElement('encoding');
+    
+    append_encoding_space(docNode,node,'encodedSpace',enc.encodedSpace);
+    append_encoding_space(docNode,node,'reconSpace',enc.reconSpace);
+    
+    n2 = docNode.createElement('encodingLimits');
+    
+    append_encoding_limits(docNode,node,'kspace_encoding_step_0',enc);
+    append_encoding_limits(docNode,node,'kspace_encoding_step_1',enc);
+    append_encoding_limits(docNode,node,'kspace_encoding_step_2',enc);
+    append_encoding_limits(docNode,node,'average',enc);
+    append_encoding_limits(docNode,node,'slice',enc);
+    append_encoding_limits(docNode,node,'contrast',enc);
+    append_encoding_limits(docNode,node,'phase',enc);
+    append_encoding_limits(docNode,node,'repetition',enc);
+    append_encoding_limits(docNode,node,'set',enc);
+    append_encoding_limits(docNode,node,'segment',enc);
+    append_node(docNode,node,enc,'trajectory');
+    node.appendChild(n2)
+    
+    
+    if isfield(enc,'trajectoryDescription')
+        n2 = docNode.createElement('trajectoryDescription');
+        append_node(docNode,node,enc.trajectoryDescription,'identifier');
+        append_user_parameter(docNode,n2,enc.trajectoryDescription,'userParameterLong', at int2str);
+        append_user_parameter(docNode,n2,enc.trajectoryDescription,'userParameterDouble', at num2str);
+        append_optional(docNode,n2,enc.trajectoryDescription,'comment');      
+        node.appendChild(n2);
+    end
+    
+    if isfield(enc,'parallelImaging')
+        n2 = docNode.createElement('parallelImaging');
+        
+        n3 = docNode.createElement('accelerationFactor');
+        parallelImaging = enc.parallelImaging;
+        append_node(docNode,n3,parallelImaging.accelerationFactor,'kspace_encoding_step_1', at int2str);
+        append_node(docNode,n3,parallelImaging.accelerationFactor,'kspace_encoding_step_2', at int2str);
+        n2.appendChild(n3)
+        
+        append_optional(docNode,n2,parallelImaging,'calibrationMode'); 
+        append_optional(docNode,n2,parallelImaging,'interleavingDimension'); 
+        
+        node.appendChild(n2)
+    end
+        
+    append_optional(docNode,node,enc,'echoTrainLength');
+    
+    docRootNode.appendChild(node);
+    
+end
+
+if isfield(header,'sequenceParameters')
+    n1 = docNode.createElement('sequenceParameters');
+    sequenceParameters = header.sequenceParameters
+    
+    append_node(docNode,n1,sequenceParameters,'TR', at num2str);
+    append_node(docNode,n1,sequenceParameters,'TE', at num2str);
+    append_node(docNode,n1,sequenceParameters,'TI', at num2str);
+    
+    append_node(docNode,n1,sequenceParameters,'flipAngle_deg', at num2str);
+    docRootNode.appendChild(n1)
+end
+
+if isfield(header,'userParameters')
+    n1 = docNode.createElement('userParameters');
+    userParameters = header.userParameters;
+    
+    append_user_parameter(docNode,n1,userParameters,'userParameterLong', at int2str);
+    append_user_parameter(docNode,n1,userParameters,'userParameterDouble', at num2str);
+    append_user_parameter(docNode,n1,userParameters,'userParameterString');
+    append_user_parameter(docNode,n1,userParameters,'userParameterBase64');
+    docRootNode.appendChild(n1)
+end
+xml_doc = xmlwrite(docNode);
+
+
+
+
+end
+
+function append_user_parameter(docNode,subNode,name,values,tostr)
+
+for v = values(:)
+    n2 = docNode.createElement(name);
+    
+    append_node(docNode,n2,v,'name');
+    
+    if nargin > 4
+        append_node(docNode,n2,v,'value',tostr);
+    else
+        append_node(docNode,n2,v,'value');
+    end
+    
+    
+    subNode.appendChild(n2);
+end
+end
+
+    
+function append_encoding_limits(docNode,subNode,name,limit)
+    if isfield(limit,name)
+        n2 = docNode.createElement(name);    
+        append_node(docNode,n2,limit.(name),'minimum', at int2str);
+        append_node(docNode,n2,limit.(name),'maximum', at int2str);
+        append_node(docNode,n2,limit.(name),'center', at int2str);
+        subNode.appendChild(n2)
+    end
+end
+
+function append_encoding_space(docNode,subnode,name,encodedSpace)
+    n2 = docNode.createElement(name);
+    
+    n3 = docNode.createElement('matrixSize');
+    append_node(docNode,n3,encodedSpace.matrixSize,'x', at int2str);
+    append_node(docNode,n3,encodedSpace.matrixSize,'y', at int2str);
+    append_node(docNode,n3,encodedSpace.matrixSize,'z', at int2str);
+    n2.appendChild(n3);
+    
+    n3 = docNode.createElement('fieldOfView_mm');
+    append_node(docNode,n3,encodedSpace.fieldOfView_mm,'x', at num2str);
+    append_node(docNode,n3,encodedSpace.fieldOfView_mm,'y', at num2str);
+    append_node(docNode,n3,encodedSpace.fieldOfView_mm,'z', at num2str);
+    n2.appendChild(n3);
+    
+       
+    subnode.appendChild(n2);
+end
+    
+    
+function append_optional(docNode,subnode,subheader,name,tostr)
+    if isfield(subheader,name)
+       append_node(docNode,subnode,subheader,name,tostr)
+    end       
+end
+
+function append_node(docNode,subnode,subheader,name,tostr)
+    
+    if ischar(subheader.(name))
+        n1 = docNode.createElement(name);    
+        n1.appendChild...
+        (docNode.createTextNode(subheader.(name)));
+        subnode.appendChild(n1)
+    else
+
+        for val = subheader.(name)(:)
+            n1 = docNode.createElement(name);    
+            n1.appendChild...
+                (docNode.createTextNode(tostr(val)));        
+            subnode.appendChild(n1)
+        end
+    end
+end

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-science/packages/ismrmrd.git



More information about the debian-science-commits mailing list