Skip to content

Commit 06c2b13

Browse files
committed
add 3DRP but also remove optional fields
1 parent bb2642e commit 06c2b13

File tree

3 files changed

+62
-39
lines changed

3 files changed

+62
-39
lines changed

matlab/updatejsonpetfile.m

Lines changed: 40 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,11 @@
44
% information, if only the jsonfile is provided, it only checks if valid
55
% (and possibly updates some fields from scalar to array)
66
%
7-
% :format: - status = updatejsonpetfile(jsonfilename,newfields,dcminfo)
7+
% :format: - status = updatejsonpetfile(jsonfilename)
8+
% - status = updatejsonpetfile(jsonfilename,newfields,dcminfo)
89
%
910
% :param jsonfilename: json file to check or update update
10-
% can also be the json structure (add field filename to ensure update on disk)
11+
% can also be the json structure
1112
% :param newfields: (optional) a structure with the newfields to go into the json file
1213
% :param dcminfo: (optional) a dcmfile or the dicominfo structure from a representative
1314
% dicom file. This information is used to also update the json
@@ -83,6 +84,27 @@
8384
end
8485

8586
% -------------- only check ---------------
87+
88+
% conditionally fields for recon method and filters to update
89+
if iscell(filemetadata.ReconMethodParameterLabels)
90+
test = ~contains("none",cellfun(@(x) x{1}, filemetadata.ReconMethodParameterLabels));
91+
else
92+
test = ~contains("none",filemetadata.ReconMethodParameterLabels);
93+
end
94+
95+
if test
96+
petmetadata.mandatory{end+1} = 'ReconMethodParameterUnits';
97+
petmetadata.mandatory{end+1} = 'ReconMethodParameterValues';
98+
petmetadata.optional(strcmpi('ReconMethodParameterUnits',petmetadata.optional))=[];
99+
petmetadata.optional(strcmpi('ReconMethodParameterValues',petmetadata.optional))=[];
100+
end
101+
102+
if ~contains("none",filemetadata.ReconFilterType)
103+
petmetadata.mandatory{end+1} = 'ReconFilterType';
104+
petmetadata.recommended(strcmpi('ReconFilterType',petmetadata.recommended))=[];
105+
end
106+
107+
% test
86108
for m=length(petmetadata.mandatory):-1:1
87109
test(m) = isfield(filemetadata,petmetadata.mandatory{m});
88110
end
@@ -359,13 +381,11 @@
359381
filemetadata.ReconMethodParameterValues = [str2double(subset),str2double(iteration)];
360382
else % returns none if actually seen as empty by get_recon_method
361383
filemetadata.ReconMethodParameterLabels = "none";
362-
filemetadata.ReconMethodParameterUnits = "none";
363-
try
364-
if isempty(filemetadata.ReconMethodParameterValues) % in case user passes info
365-
filemetadata.ReconMethodParameterValues = 0; % if none should be 0
366-
end
367-
catch
368-
filemetadata.ReconMethodParameterValues = 0;
384+
if isfield(filemetadata,'ReconMethodParameterUnits')
385+
filemetadata = rmfield(filemetadata,'ReconMethodParameterUnits');
386+
end
387+
if isfield(filemetadata,'ReconMethodParameterValues')
388+
filemetadata = rmfield(filemetadata,'ReconMethodParameterValues');
369389
end
370390
end
371391
end
@@ -405,8 +425,15 @@
405425
else
406426
filemetadata.ReconFilterSize = str2double(FilterSize);
407427
end
428+
429+
elseif contains(filtername,'Rad','IgnoreCase',true)
430+
filemetadata.ReconFilterType = 'none';
431+
if isfield(filemetadata,'ReconFilterSize')
432+
filemetadata = rmfield(filemetadata,'ReconFilterSize');
433+
end
434+
408435
else
409-
436+
410437
% might need to remove trailing .00 for regex to work
411438
if contains(filtername,'.00') && ~contains(filtername,{'/','\'})
412439
loc = strfind(filtername,'.00');
@@ -427,7 +454,9 @@
427454
end
428455
else
429456
filemetadata.ReconFilterType = "none";
430-
% filemetadata.ReconFilterSize = 0; % conditional on ReconFilterType
457+
if isfield(filemetadata,'ReconFilterSize')
458+
filemetadata = rmfield(filemetadata,'ReconFilterSize');
459+
end
431460
end
432461

433462
function [filemetadata,updated] = update_arrays(filemetadata)

metadata/PET_metadata.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222
"ImageDecayCorrectionTime",
2323
"ReconMethodName",
2424
"ReconMethodParameterLabels",
25-
"ReconMethodParameterUnits",
2625
"ReconFilterType",
2726
"AttenuationCorrection"
2827
],
@@ -62,12 +61,13 @@
6261
"DecayCorrectionFactor",
6362
"PromptRate",
6463
"RandomRate",
65-
"SinglesRate"
64+
"SinglesRate",
65+
"ReconFilterSize"
6666
],
6767
"optional": [
6868
"Anaesthesia",
69-
"ReconMethodParameterValues",
70-
"ReconFilterSize"
69+
"ReconMethodParameterUnits",
70+
"ReconMethodParameterValues"
7171
],
7272
"blood_recording_fields": [
7373
"PlasmaAvail",

metadata/PET_reconstruction_methods.json

Lines changed: 18 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -56,38 +56,28 @@
5656
},
5757
{
5858
"contents": "LOR-RAMLA",
59-
"subsets": null,
60-
"iterations": null,
6159
"ReconMethodName": "Line Of Response - Row Action Maximum Likelihood",
62-
"ReconMethodParameterUnits": [
63-
"none",
64-
"none"
65-
],
6660
"ReconMethodParameterLabels": [
67-
"subsets",
68-
"iterations"
69-
],
70-
"ReconMethodParameterValues": [
71-
null,
72-
null
61+
"none"
7362
]
7463
},
7564
{
7665
"contents": "3D-RAMLA",
77-
"subsets": null,
78-
"iterations": null,
7966
"ReconMethodName": "3D Row Action Maximum Likelihood",
80-
"ReconMethodParameterUnits": [
81-
null,
82-
null
83-
],
8467
"ReconMethodParameterLabels": [
85-
"subsets",
86-
"iterations"
68+
"none"
69+
]
70+
},
71+
{
72+
"contents": "3DRP",
73+
"ReconMethodName": "3D Kinahan-Rogers",
74+
"ReconMethodParameterLabels": [
75+
"none"
8776
],
88-
"ReconMethodParameterValues": [
89-
null,
90-
null
77+
"contents": "3-D Kinahan-Rogers",
78+
"ReconMethodName": "3D Kinahan-Rogers",
79+
"ReconMethodParameterLabels": [
80+
"none"
9181
]
9282
}
9383
],
@@ -151,6 +141,10 @@
151141
{
152142
"value": "FilteredBackProjection",
153143
"name": "Filtered Back Projection"
154-
}
144+
},
145+
{
146+
"value": "3DRP",
147+
"name": "3D Kinahan-Rogers"
148+
}
155149
]
156150
}

0 commit comments

Comments
 (0)