-
Notifications
You must be signed in to change notification settings - Fork 108
/
DerivedDataset.js
100 lines (85 loc) · 3.21 KB
/
DerivedDataset.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
import { DicomMetaDictionary } from "../DicomMetaDictionary.js";
export default class DerivedDataset {
constructor(datasets, options = {}) {
this.options = JSON.parse(JSON.stringify(options));
let o = this.options;
o.Manufacturer = options.Manufacturer || "Unspecified";
o.ManufacturerModelName =
options.ManufacturerModelName || "Unspecified";
o.SeriesDescription =
options.SeriesDescription || "Research Derived series";
o.SeriesNumber = options.SeriesNumber || "99";
o.SoftwareVersions = options.SoftwareVersions || "0";
o.DeviceSerialNumber = options.DeviceSerialNumber || "1";
let date = DicomMetaDictionary.date();
let time = DicomMetaDictionary.time();
o.SeriesDate = options.SeriesDate || date;
o.SeriesTime = options.SeriesTime || time;
o.ContentDate = options.ContentDate || date;
o.ContentTime = options.ContentTime || time;
o.SOPInstanceUID = options.SOPInstanceUID || DicomMetaDictionary.uid();
o.SeriesInstanceUID =
options.SeriesInstanceUID || DicomMetaDictionary.uid();
o.ClinicalTrialTimePointID = options.ClinicalTrialTimePointID || "";
o.ClinicalTrialCoordinatingCenterName =
options.ClinicalTrialCoordinatingCenterName || "";
o.ClinicalTrialSeriesID = options.ClinicalTrialSeriesID || "";
o.ImageComments = options.ImageComments || "NOT FOR CLINICAL USE";
o.ContentQualification = "RESEARCH";
this.referencedDatasets = datasets; // list of one or more dicom-like object instances
this.referencedDataset = this.referencedDatasets[0];
this.dataset = {
_vrMap: this.referencedDataset._vrMap,
_meta: this.referencedDataset._meta
};
this.derive();
}
assignToDataset(data) {
Object.keys(data).forEach(key => (this.dataset[key] = data[key]));
}
assignFromReference(tags) {
tags.forEach(
tag => (this.dataset[tag] = this.referencedDataset[tag] || "")
);
}
assignFromOptions(tags) {
tags.forEach(tag => (this.dataset[tag] = this.options[tag] || ""));
}
derive() {
// common for all instances in study
this.assignFromReference([
"AccessionNumber",
"ReferringPhysicianName",
"StudyDate",
"StudyID",
"StudyTime",
"PatientName",
"PatientID",
"PatientBirthDate",
"PatientSex",
"PatientAge",
"StudyInstanceUID",
"StudyID"
]);
this.assignFromOptions([
"Manufacturer",
"SoftwareVersions",
"DeviceSerialNumber",
"ManufacturerModelName",
"SeriesDescription",
"SeriesNumber",
"ImageComments",
"SeriesDate",
"SeriesTime",
"ContentDate",
"ContentTime",
"ContentQualification",
"SOPInstanceUID",
"SeriesInstanceUID"
]);
}
static copyDataset(dataset) {
// copies everything but the buffers
return JSON.parse(JSON.stringify(dataset));
}
}