[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