in DICOM-WSI/src/components/dicompathviewer.js [162:290]
registerGenerateAnnotationEventListener() {
document
.getElementById("generateAnnotation")
.addEventListener("click", (event) => {
const rois = window.viewer.getAllROIs();
if (rois.length === 0) {
console.log("Please, draw an region of interest first before submitting.");
}
// Metadata of image at highest resolution level
const imageMetadata =
window.viewer.imageMetadata[window.viewer.imageMetadata.length - 1];
const observationContext = new dcmjs.sr.templates.ObservationContext({
observerPersonContext: new dcmjs.sr.templates.ObserverContext({
observerType: new dcmjs.sr.coding.CodedConcept({
value: "121006",
schemeDesignator: "DCM",
meaning: "Person",
}),
observerIdentifyingAttributes:
new dcmjs.sr.templates.PersonObserverIdentifyingAttributes({
name: "Robo^Doc",
}),
}),
observerDeviceContext: new dcmjs.sr.templates.ObserverContext({
observerType: new dcmjs.sr.coding.CodedConcept({
value: "121007",
schemeDesignator: "DCM",
meaning: "Device",
}),
observerIdentifyingAttributes:
new dcmjs.sr.templates.DeviceObserverIdentifyingAttributes({
uid: dcmjs.data.DicomMetaDictionary.uid(), // FIXME
}),
}),
subjectContext: new dcmjs.sr.templates.SubjectContext({
subjectClass: new dcmjs.sr.coding.CodedConcept({
value: "121027",
schemeDesignator: "DCM",
meaning: "Specimen",
}),
subjectClassSpecificContext:
new dcmjs.sr.templates.SubjectContextSpecimen({
uid: imageMetadata.SpecimenDescriptionSequence[0].SpecimenUID,
identifier:
imageMetadata.SpecimenDescriptionSequence[0].SpecimenIdentifier,
containerIdentifier: imageMetadata.ContainerIdentifier,
}),
}),
});
const imagingMeasurements = [];
for (let i = 0; i < rois.length; i++) {
console.log("Looping through ROI " + i);
const roi = rois[i];
const group =
new dcmjs.sr.templates.PlanarROIMeasurementsAndQualitativeEvaluations(
{
trackingIdentifier: new dcmjs.sr.templates.TrackingIdentifier({
uid: roi.uid,
identifier: `Measurements of ROI #${i + 1}`,
}),
referencedRegion: new dcmjs.sr.contentItems.ImageRegion3D({
graphicType: roi.scoord3d.graphicType,
graphicData: roi.scoord3d.graphicData,
frameOfReferenceUID: roi.scoord3d.frameOfReferenceUID,
}),
findingType: new dcmjs.sr.coding.CodedConcept({
value: "108369006",
schemeDesignator: "SCT",
meaning: "Tumor",
}),
}
);
imagingMeasurements.push(...group);
}
const measurementReport = new dcmjs.sr.templates.MeasurementReport({
languageOfContentItemAndDescendants:
new dcmjs.sr.templates.LanguageOfContentItemAndDescendants({}),
observationContext: observationContext,
procedureReported: new dcmjs.sr.coding.CodedConcept({
value: "112703",
schemeDesignator: "DCM",
meaning: "Whole Slide Imaging",
}),
imagingMeasurements: imagingMeasurements,
});
const dataset = new dcmjs.sr.documents.Comprehensive3DSR({
content: measurementReport[0],
evidence: [imageMetadata],
seriesInstanceUID: dcmjs.data.DicomMetaDictionary.uid(),
seriesNumber: 1,
seriesDescription: "Whole slide imaging structured report example",
sopInstanceUID: dcmjs.data.DicomMetaDictionary.uid(),
instanceNumber: 1,
manufacturer: "dcmjs-org",
});
const fileMetaInformationVersionArray = new Uint8Array(2);
fileMetaInformationVersionArray[1] = 1;
dataset._meta = {
FileMetaInformationVersion: {
Value: [fileMetaInformationVersionArray.buffer], // TODO
vr: "OB",
},
MediaStorageSOPClassUID: dataset.sopClassUID,
MediaStorageSOPInstanceUID: dataset.sopInstanceUID,
TransferSyntaxUID: {
Value: ["1.2.840.10008.1.2.1"],
vr: "UI",
},
ImplementationClassUID: {
Value: [dcmjs.data.DicomMetaDictionary.uid()],
vr: "UI",
},
ImplementationVersionName: {
Value: ["dicom-microscopy-viewer-example"],
vr: "SH",
},
};
console.log("========= Printing dataset ==========");
this.setState({ dataset: dataset });
console.log(this.state)
console.log("========= Finished Printing dataset ==========");
const blob = dcmjs.data.datasetToBlob(dataset);
});
}