This is a script file.
0001 classdef matRad_DicomExporter < handle
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028 properties
0029
0030
0031 dicomDir = ['.' filesep];
0032
0033
0034 ct = [];
0035 cst = [];
0036 stf = [];
0037 pln = [];
0038 resultGUI = [];
0039
0040
0041 PatientID
0042 PatientName
0043 PatientPosition
0044 PatientBirthDate = '';
0045 PatientSex = '';
0046 StudyID
0047 StudyDate
0048 StudyTime
0049 StudyInstanceUID
0050 FrameOfReferenceUID
0051
0052
0053 OperatorsName
0054
0055
0056 ctFilePrefix = 'ct_slice_';
0057 ctMeta
0058 ctSliceMetas
0059 ctExportStatus
0060
0061
0062 rtssFileName = 'RTStruct';
0063 rtssMeta
0064 rtssExportStatus
0065
0066
0067 rtDoseFilePrefix = 'RTDose_';
0068 rtDoseNames
0069 rtDoseMetas
0070 rtDoseExportStatus
0071
0072
0073 externalContourDict = {'EXTERNAL','BODY','PATIENT'};
0074 targetPtvDict = {'PTV','MARGIN'};
0075 targetCtvDict = {'CTV'};
0076 targetGtvDict = {'GTV','TUMOR'};
0077 end
0078
0079 methods
0080 function obj = matRad_DicomExporter(ct,cst,pln,stf,resultGUI)
0081
0082
0083
0084
0085
0086 matRad_cfg = MatRad_Config.instance();
0087
0088 env = matRad_getEnvironment();
0089 if strcmp(env,'OCTAVE')
0090
0091 try
0092 pkg load dicom;
0093 catch
0094 matRad_cfg.dispError('The DICOM export requires the octave-forge package "dicom"!\n');
0095 end
0096 end
0097
0098 if nargin == 0
0099 try
0100 obj.ct = evalin('base','ct');
0101 catch
0102 matRad_cfg.dispInfo('matRad_DicomExporter: No CT found in workspace.\n');
0103 end
0104 try
0105 obj.cst = evalin('base','cst');
0106 catch
0107 matRad_cfg.dispInfo('matRad_DicomExporter: No cst found in workspace.\n');
0108 end
0109 try
0110 obj.pln = evalin('base','pln');
0111 catch
0112 matRad_cfg.dispDebug('matRad_DicomExporter: No pln found in workspace.\n');
0113 end
0114 try
0115 obj.stf = evalin('base','stf');
0116 catch
0117 matRad_cfg.dispDebug('matRad_DicomExporter: No stf found in workspace.\n');
0118 end
0119 try
0120 obj.resultGUI = evalin('base','resultGUI');
0121 catch
0122 end
0123 else
0124 if exist('ct','var')
0125 obj.ct = ct;
0126 end
0127 if exist('cst','var')
0128 obj.cst = cst;
0129 end
0130 if exist('pln','var')
0131 obj.pln = pln;
0132 end
0133 if exist('stf','var')
0134 obj.stf = stf;
0135 end
0136 if exist('resultGUI','var')
0137 obj.pln = resultGUI;
0138 end
0139 end
0140
0141 obj = obj.generateDefaultDicomData();
0142 end
0143
0144 function obj = generateDefaultDicomData(obj)
0145
0146
0147 date = now;
0148 dateStr = datestr(date,'yyyymmdd');
0149 timeStr = datestr(date,'HHMMSS');
0150
0151 obj.PatientID = ['matRad_default_patient_' dateStr];
0152 obj.PatientName = obj.dicomName();
0153 obj.OperatorsName = obj.dicomName();
0154
0155 obj.StudyID = ['matRad_' dateStr];
0156 obj.StudyDate = dateStr;
0157 obj.StudyTime = timeStr;
0158 obj.StudyInstanceUID = dicomuid;
0159
0160
0161 obj.FrameOfReferenceUID = dicomuid;
0162
0163 if isfield(obj.ct,'dicomInfo') && isfield(obj.ct.dicomInfo,'PatientPosition')
0164 obj.PatientPosition = obj.ct.dicomInfo.PatientPosition;
0165 else
0166 obj.PatientPosition = 'HFS';
0167 end
0168 end
0169
0170 obj = matRad_exportDicom(obj)
0171
0172 obj = matRad_exportDicomCt(obj)
0173
0174 obj = matRad_exportDicomRTStruct(obj)
0175
0176 obj = matRad_exportDicomRTPlan(obj)
0177
0178 obj = matRad_exportDicomRTDoses(obj)
0179
0180 end
0181
0182 methods (Static)
0183 function sarray = addStruct2StructArray(sarray,s,i)
0184
0185
0186
0187
0188
0189
0190
0191
0192
0193
0194
0195
0196
0197
0198 if nargin < 3
0199 i = numel(sarray)+1;
0200 end
0201 fnames = fieldnames(s);
0202 sarray(i).(fnames{1}) = s.(fnames{1});
0203 if length(fnames) > 1
0204 for k = 2:length(fnames)
0205 sarray(i).(fnames{k}) = s.(fnames{k});
0206 end
0207 end
0208 end
0209
0210 function meta = assignDefaultMetaValue(meta,fn,default,displayBool)
0211
0212
0213
0214
0215
0216
0217
0218
0219
0220
0221
0222
0223
0224
0225
0226
0227
0228
0229 if nargin < 4
0230 displayBool = true;
0231 end
0232
0233 if ~isfield(meta,fn)
0234 meta.(fn) = default;
0235
0236 if isnumeric(default)
0237 default = num2str(default);
0238 elseif isstruct(default)
0239 default = '';
0240 end
0241
0242 if displayBool
0243 fprintf('No value set for ''%s'', using default value ''%s''\n',fn,default);
0244 end
0245 end
0246 end
0247
0248 function name = dicomName(family,given,middle,prefix,suffix)
0249 if nargin < 5
0250 suffix = '';
0251 end
0252 if nargin < 4
0253 prefix = '';
0254 end
0255 if nargin < 3
0256 middle = '';
0257 end
0258 if nargin < 2
0259 given = '';
0260 end
0261 if nargin < 1
0262 family = '';
0263 end
0264
0265 name.FamilyName = family;
0266 name.GivenName = given;
0267 name.MiddleName = middle;
0268 name.NamePrefix = prefix;
0269 name.NameSuffix = suffix;
0270
0271 env = matRad_getEnvironment();
0272 if strcmp(env,'OCTAVE')
0273 name = strjoin(struct2cell(name));
0274 end
0275
0276 end
0277 end
0278
0279
0280 end
0281