registerGenerateAnnotationEventListener()

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);
      });
  }