[med-svn] [Git][med-team/dicom3tools][master] 3 commits: New upstream version 1.00~20180803063840
Gert Wollny
gitlab at salsa.debian.org
Sun Oct 28 08:37:14 GMT 2018
Gert Wollny pushed to branch master at Debian Med / dicom3tools
Commits:
106abdb3 by Gert Wollny at 2018-10-28T08:32:37Z
New upstream version 1.00~20180803063840
- - - - -
4a8b9498 by Gert Wollny at 2018-10-28T08:32:37Z
d/.gitlab-ci.yml: add CI file
- - - - -
9b43f93b by Gert Wollny at 2018-10-28T08:33:42Z
Prep new release
- - - - -
19 changed files:
- + .gitlab-ci.yml
- CHANGES
- VERSION
- appsrc/dcfile/dciodvfy.cc
- debian/changelog
- libsrc/src/dctool/attrmxrd.cc
- libsrc/src/generic/platform.cc
- libsrc/src/generic/version.cc
- libsrc/src/locale/mesgtext.tpl
- libsrc/standard/condn.tpl
- libsrc/standard/elmdict/dicom3.tpl
- libsrc/standard/elmdict/gems.tpl
- libsrc/standard/elmdict/other.tpl
- libsrc/standard/iodcomp/base.tpl
- libsrc/standard/iodcomp/mr.tpl
- libsrc/standard/module/base.tpl
- libsrc/standard/module/vl.tpl
- libsrc/standard/sopcl.tpl
- libsrc/standard/strval/base.tpl
Changes:
=====================================
.gitlab-ci.yml
=====================================
@@ -0,0 +1,14 @@
+image: debian:sid
+
+build:
+ stage: build
+ before_script:
+ - apt-get update && apt-get -y install devscripts git-buildpackage
+ - mk-build-deps --tool "apt -y -o Debug::pkgProblemResolver=yes --no-install-recommends" --install -r debian/control
+ script:
+ - git checkout pristine-tar
+ - git pull
+ - git checkout master
+ - git pull
+ # silence build to not exceed build log size of gitlab-ci
+ - gbp buildpackage -uc -us 2>&1 >../build.log && exit 0 || tail -n 100 ../build.log && exit -1
=====================================
CHANGES
=====================================
@@ -1,3 +1,37 @@
+180707: libsrc/standard/elmdict/gems.tpl: Correct missing opening parenthesis in GE private data element (3101,0010)
+
+180627: libsrc/src/dctool/attrmxrd.cc: Report pixel data compressed fragment items have odd length during read (000514)
+
+180626: libsrc/standard/elmdict/dicom3.tpl: Add Beam Dose Point Source to External Contour Distance data element (CP 1762)
+
+180626: libsrc/standard/module,strval/base.tpl,elmdict/dicom3.tpl: Add flag to distinguish studies imported from outside (CP 1760)
+
+180626: libsrc/standard/module/vl.tpl: RWVM functional group Real World Value Map only permitted for monochrome Whole Slide Images (CP 1759)
+
+180626: libsrc/standard/iod/mr.tpl: Move Specimen Module to Image level in Tractography Results (CP 1753)
+
+180626: libsrc/standard/strval/base.tpl: Update General Series modality values with OPTBSV and OPTENF (CP 1750)
+
+180626: libsrc/standard/condn.tpl: Do not require Patient Orientation for Whole Slide Images (CP 1757)
+
+180622: appsrc/dcfile/dciodvfy.cc,libsrc/src/locale/mesgtext.tpl: Report reference segment numbers that have no segment sequence item (000520)
+
+180622: appsrc/dcfile/dciodvfy.cc,libsrc/src/locale/mesgtext.tpl: Check that SegmentNumber values start at 1 and increase by 1 (000439)
+
+180603: libsrc/standard/elmdict/other.tpl: Add observed 3DHISTECH private data elements in REGIONLOCALIZER image type
+
+180603: libsrc/standard/module/vl.tpl: Defined terms rather than enumerated values for WSI ImageType values 3 and 4 (000519)
+
+180415: libsrc/standard/module/base.tpl: Add Consulting Physician (CP 1322)
+
+180414: libsrc/standard/condn.tpl,module/base.tpl: Report if InConcatenationTotalNumber is less than or equal to one (000517), and use presence of any concatenation attribute as need for UID (000518)
+
+180413: libsrc/standard/condn.tpl: Change condition in General Series for Laterality to not flag its absence when unpaired body part is implicit because it is a waveform SOP Class or Modality, i.e., cardiac, respiratory, voice audio (000308)
+
+180413: libsrc/standard/strval/base.tpl: Update coding scheme list to include all in current standard including caDSR, DC, MDC, MSH, NBD, NBG, NEU, NICIP, PUBCHEM_CID (DICOM 2018b, includes CPs 1079, 1167, 1259, 1408, 1622)
+
+180403: libsrc/standard/condn.tpl,sopcl.tpl,elmdict/dicom3.tpl,iodcomp,module,strval/base.tpl: Add DICOM Encapsulation of STL Models for 3D Manufacturing (Sup 205)
+
180401: libsrc/standard/module/base.tpl: Add Scheduled Procedure Step Expiration DateTime data element (CP 1224)
180328: libsrc/standard/module/base.tpl,vl.tpl: WSI is missing Frame Type (CP 1740)
=====================================
VERSION
=====================================
@@ -1 +1 @@
-1.00.snapshot.20180401144051
+1.00.snapshot.20180803063840
=====================================
appsrc/dcfile/dciodvfy.cc
=====================================
@@ -670,7 +670,7 @@ checkPixelDataIsTheCorrectLength(AttributeList &list,TextOutputStream &log)
success=false;
}
}
- // else do not check if encapsulated
+ // if encapsulated, a check that fragments are even length is performed during reading in attrmxrd.cc (000514)
}
return success;
@@ -1785,6 +1785,104 @@ checkCountPerFrameFunctionalGroupsMatchesNumberOfFrames(AttributeList &list,Text
return success;
}
+static bool
+checkSegmentNumbersMonotonicallyIncreasingFromOneByOne(AttributeList &list,TextOutputStream &log) {
+//cerr << "checkSegmentNumbersMonotonicallyIncreasingFromOneByOne():" << endl;
+ bool success=true;
+
+ Attribute *aSegmentSequence = list[TagFromName(SegmentSequence)];
+ if (aSegmentSequence && aSegmentSequence->isSequence()) {
+ AttributeList **aSegmentSequenceLists;
+ int nSegmentSequenceItems;
+ if ((nSegmentSequenceItems=aSegmentSequence->getLists(&aSegmentSequenceLists)) > 0) {
+ int s;
+ for (s=0; s<nSegmentSequenceItems; ++s) {
+ AttributeList *segmentList = aSegmentSequenceLists[s];
+ Attribute *aSegmentNumber = (*segmentList)[TagFromName(SegmentNumber)];
+ Uint16 vSegmentNumber = 0;
+ if (aSegmentNumber) {
+ (void)aSegmentNumber->getValue(0,vSegmentNumber);
+ if (vSegmentNumber != s + 1) {
+ log << EMsgDC(SegmentNumberNotMonotonicallyIncreasingFromOneByOne)
+ << " - have SegmentSequence item number " << (s+1) << " (from one) with SegmentNumber of " << vSegmentNumber << endl;
+ success = false;
+ break; // only report first one
+ }
+ }
+ }
+ }
+ }
+
+ return success;
+}
+
+static bool
+checkReferencedSegmentNumbersHaveTarget(AttributeList &list,TextOutputStream &log) {
+//cerr << "checkReferencedSegmentNumbersHaveTarget():" << endl;
+ bool success=true;
+
+ Attribute *aSegmentSequence = list[TagFromName(SegmentSequence)];
+ if (aSegmentSequence && aSegmentSequence->isSequence()) {
+ AttributeList **aSegmentSequenceLists;
+ int nSegmentSequenceItems;
+ if ((nSegmentSequenceItems=aSegmentSequence->getLists(&aSegmentSequenceLists)) > 0) {
+ Uint16 segmentNumberTargets[nSegmentSequenceItems]; // set of target SegmentNumbers, even if not numbered sequentially (don't care; checked elsewhere)
+ int s;
+ for (s=0; s<nSegmentSequenceItems; ++s) {
+ AttributeList *segmentList = aSegmentSequenceLists[s];
+ Attribute *aSegmentNumber = (*segmentList)[TagFromName(SegmentNumber)];
+ segmentNumberTargets[s] = 0;
+ if (aSegmentNumber) {
+ (void)aSegmentNumber->getValue(0,segmentNumberTargets[s]);
+ }
+ }
+
+ // if we were able to build a set of target SegmentNumbers, now check every reference
+
+ Attribute *aPerFrameFunctionalGroupsSequence = list[TagFromName(PerFrameFunctionalGroupsSequence)];
+ if (aPerFrameFunctionalGroupsSequence && aPerFrameFunctionalGroupsSequence->isSequence() && !aPerFrameFunctionalGroupsSequence->isEmpty()) {
+ AttributeList **aPerFrameFunctionalGroupsSequenceLists;
+ int nPerFrameFunctionalGroupsSequenceItems;
+ if ((nPerFrameFunctionalGroupsSequenceItems=aPerFrameFunctionalGroupsSequence->getLists(&aPerFrameFunctionalGroupsSequenceLists)) > 0) {
+ int f;
+ for (f=0; f<nPerFrameFunctionalGroupsSequenceItems; ++f) {
+ AttributeList *perFrameList = aPerFrameFunctionalGroupsSequenceLists[f];
+ Attribute *aSegmentIdentificationSequence = (*perFrameList)[TagFromName(SegmentIdentificationSequence)];
+ if (aSegmentIdentificationSequence && aSegmentIdentificationSequence->isSequence() && !aSegmentIdentificationSequence->isEmpty()) {
+ AttributeList **aSegmentIdentificationSequenceLists;
+ int nSegmentIdentificationSequenceItems;
+ if ((nSegmentIdentificationSequenceItems=aSegmentIdentificationSequence->getLists(&aSegmentIdentificationSequenceLists)) > 0) {
+ AttributeList *segmentIdentificationSequenceList = aSegmentIdentificationSequenceLists[0]; // should only be one so only check one
+ Attribute *aReferencedSegmentNumber = (*segmentIdentificationSequenceList)[TagFromName(ReferencedSegmentNumber)];
+ Uint16 vReferencedSegmentNumber = 0;
+ if (aReferencedSegmentNumber) {
+ (void)aReferencedSegmentNumber->getValue(0,vReferencedSegmentNumber);
+//cerr << "checkReferencedSegmentNumbersHaveTarget(): checking frame " << (f+1) << endl;
+ bool found = false;
+ for (int i=0; i<nSegmentSequenceItems; ++i) {
+ if (vReferencedSegmentNumber == segmentNumberTargets[i]) {
+//cerr << "checkReferencedSegmentNumbersHaveTarget(): for frame " << (f+1) << " have SegmentNumber for ReferencedSegmentNumber " << vReferencedSegmentNumber << endl;
+ found = true;
+ break;
+ }
+ }
+ if (!found) {
+ log << EMsgDC(ReferencedSegmentNumberNotPresentInSegmentSequence)
+ << " - have ReferencedSegmentNumber " << vReferencedSegmentNumber << " in SegmentIdentificationSequence for frame " << (f+1) << endl;
+ success = false;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ return success;
+}
+
static bool
checkCoordinateContentItemsHaveAppropriateChildren(AttributeList &list,TextOutputStream &log) {
//cerr << "checkCoordinateContentItemsHaveAppropriateChildren():" << endl;
@@ -2203,6 +2301,10 @@ main(int argc, char *argv[])
if (!checkCountPerFrameFunctionalGroupsMatchesNumberOfFrames(list,log)) success = false;
+ if (!checkSegmentNumbersMonotonicallyIncreasingFromOneByOne(list,log)) success = false;
+
+ if (!checkReferencedSegmentNumbersHaveTarget(list,log)) success = false;
+
if (!list.validatePrivate(log)) success = false;
checkValuesNeededToBuildDicomDirectoryArePresentAndNotEmpty(list,log); // always only warnings ... do not affect success
=====================================
debian/changelog
=====================================
@@ -1,8 +1,13 @@
-dicom3tools (1.00~20180401144051-2) UNRELEASED; urgency=medium
+dicom3tools (1.00~20180803063840-1) UNRELEASED; urgency=medium
+ [Gert Wollny]
+ * New upstream version 1.00~20180803063840
+ * d/.gitlab-ci.yml: add CI file
+
+ [Jelmer Vernooij]
* Trim trailing whitespace.
- -- Jelmer Vernooij <jelmer at debian.org> Sat, 20 Oct 2018 18:47:03 +0000
+ -- Gert Wollny <gewo at debian.org> Sun, 28 Oct 2018 09:30:09 +0100
dicom3tools (1.00~20180401144051-1) unstable; urgency=medium
=====================================
libsrc/src/dctool/attrmxrd.cc
=====================================
@@ -271,6 +271,7 @@ ReadableAttributeList::skipEncapsulatedData(void)
{
//cerr << "ReadableAttributeList::skipEncapsulatedData: start" << endl;
bool showoffset=verbose;
+ bool oddlengthfragmentencountered=false;
// See libsrc/include/pixeldat/unencap.h for details of GE bug
while (1) {
//cerr << "ReadableAttributeList::skipEncapsulatedData: looping" << endl;
@@ -293,6 +294,11 @@ ReadableAttributeList::skipEncapsulatedData(void)
return;
}
byteoffset+=4;
+
+ if (!oddlengthfragmentencountered && vl%2 != 0) {
+ errorstream << WMsgDC(EncapsulatedPixelDataFragmentNotEvenLength) << endl; // (000514)
+ oddlengthfragmentencountered=true; // only report this once
+ }
if (verbose) {
writebase(tag,"",vl); (*log) << endl;
=====================================
libsrc/src/generic/platform.cc
=====================================
@@ -1,8 +1,7 @@
-static const char *CopyrightIdentifier(void) { return "@(#)platform.cc Copyright (c) 1993-2018, David A. Clunie DBA PixelMed Publishing. All rights reserved."; }
// Automatically generated - EDITS WILL BE LOST
// Generated by support/setplatform
#include "platform.h"
-const char* dicom3tools_platform_string = "Darwin graytoo.local 14.5.0 Darwin Kernel Version 14.5.0: Sun Jun 4 21:40:08 PDT 2017; root:xnu-2782.70.3~1/RELEASE_X86_64 x86_64";
+const char* dicom3tools_platform_string = "Darwin graythin.local 17.5.0 Darwin Kernel Version 17.5.0: Fri Apr 13 19:32:32 PDT 2018; root:xnu-4570.51.2~1/RELEASE_X86_64 x86_64";
=====================================
libsrc/src/generic/version.cc
=====================================
@@ -4,4 +4,4 @@
#include "version.h"
-const char* dicom3tools_version_string = "1.00.snapshot.20180401144051";
+const char* dicom3tools_version_string = "1.00.snapshot.20180803063840";
=====================================
libsrc/src/locale/mesgtext.tpl
=====================================
@@ -83,6 +83,7 @@ Index="EmptyComponent" English="Empty component"
Index="EmptyTransferSyntaxUIDInMetaInformationHeader" English="Empty or missing Transfer Syntax UID in Meta Information Header"
Index="EncapsulatedDataIncorrectVR" English="Encapsulated Data element has incorrect value representation"
Index="EncapsulatedDataSkipped" English="Encapsulated data with unimplemented transfer syntax skipped"
+Index="EncapsulatedPixelDataFragmentNotEvenLength" English="Encapsulated pixel data fragment is not even length"
Index="EqualTo" English="equal to"
Index="Error" English="Error"
Index="EstimatedRadiographicMagnificationFactorDoesNotMatchRatioOfDistanceSourceToDetectorAndDistanceSourceToPatient" English="EstimatedRadiographicMagnificationFactor does not match ratio of DistanceSourceToDetector and DistanceSourceToPatient"
@@ -227,6 +228,7 @@ Index="RecognizedBitMap" English="Recognized bitmap"
Index="RecognizedDefinedTerm" English="Recognized defined term"
Index="RecognizedEnumeratedValue" English="Recognized enumerated value"
Index="ReferencedFileIDHasEmptyComponents" English="Referenced File ID is empty or has empty components"
+Index="ReferencedSegmentNumberNotPresentInSegmentSequence" English="ReferencedSegmentNumber does not match a SegmentNumber in any item of SegmentSequence"
Index="Replacing" English="Replacing"
Index="Required" English="Required"
Index="RequiredBy" English="Required by"
@@ -235,6 +237,7 @@ Index="RetiredAttribute" English="Retired attribute"
Index="RetiredPersonNameForm" English="Retired Person Name form"
Index="ScaledNumericValuesForSameConceptAreInconsistent" English="Scaled numeric values for same concept are inconsistent"
Index="SeekFailed" English="Seek failed"
+Index="SegmentNumberNotMonotonicallyIncreasingFromOneByOne" English="SegmentNumber not monotonically increasing from one by one"
Index="SeqAttrReadFailed" English="Sequence attribute read failed"
Index="SequenceHasDifferentNumberOfItemsInOneInstanceComparedToTheOther" English="Sequence has different number of items"
Index="SequenceHasDifferentValueRepresentationInOneInstanceComparedToTheOther" English="Sequence has different value representation"
=====================================
libsrc/standard/condn.tpl
=====================================
@@ -70,6 +70,10 @@ Condition="EncapsulatedCDAInstance"
Element="SOPClassUID" StringConstantFromRootAttribute="EncapsulatedCDAStorageSOPClassUID"
ConditionEnd
+Condition="EncapsulatedSTLInstance"
+ Element="SOPClassUID" StringConstantFromRootAttribute="EncapsulatedSTLStorageSOPClassUID"
+ConditionEnd
+
Condition="OphthalmicPhotography8BitImageInstance"
Element="SOPClassUID" StringConstantFromRootAttribute="OphthalmicPhotography8BitImageStorageSOPClassUID"
ConditionEnd
@@ -368,6 +372,10 @@ Condition="CardiacElectrophysiologyWaveformInstance"
Element="SOPClassUID" StringConstantFromRootAttribute="CardiacElectrophysiologyWaveformStorageSOPClassUID"
ConditionEnd
+Condition="RespiratoryWaveformInstance"
+ Element="SOPClassUID" StringConstantFromRootAttribute="RespiratoryWaveformStorageSOPClassUID"
+ConditionEnd
+
Condition="CRImageInstance"
Element="SOPClassUID" StringConstantFromRootAttribute="ComputedRadiographyImageStorageSOPClassUID"
ConditionEnd
@@ -934,7 +942,7 @@ Condition="ModalityIsCTOrMR"
ConditionEnd
Condition="PatientOrientationRequired"
- # General Image Module: "Required if image does not require Image Orientation (Patient) (0020,0037) and Image Position (Patient) (0020,0032)."
+ # General Image Module: "Required if image does not require Image Orientation (Patient) (0020,0037) and Image Position (Patient) (0020,0032) or Image Orientation (Slide) (0048,0102)."
Element="SOPClassUID" Modifier="Not" StringConstantFromRootAttribute="EnhancedMRImageStorageSOPClassUID"
Element="SOPClassUID" Operator="And" Modifier="Not" StringConstantFromRootAttribute="EnhancedMRColorImageStorageSOPClassUID"
Element="SOPClassUID" Operator="And" Modifier="Not" StringConstantFromRootAttribute="LegacyConvertedEnhancedMRImageStorageSOPClassUID"
@@ -951,6 +959,7 @@ Condition="PatientOrientationRequired"
Element="SOPClassUID" Operator="And" Modifier="Not" StringConstantFromRootAttribute="ParametricMapStorageSOPClassUID"
# not required for RT dose, since either needed for grid (image) or not an image hence not applicable
Element="SOPClassUID" Operator="And" Modifier="Not" StringConstantFromRootAttribute="RTDoseStorageSOPClassUID"
+ Element="SOPClassUID" Operator="And" Modifier="Not" StringConstantFromRootAttribute="VLWholeSlideMicroscopyImageStorageSOPClassUID"
(
Element="SOPClassUID" StringConstantFromRootAttribute="SegmentationStorageSOPClassUID"
(
@@ -2716,7 +2725,6 @@ ConditionEnd
Condition="ImageTypeValue1OriginalAndNotLegacyConvertedPET"
Element="ImageType" ValueSelector="0" StringValueFromRootAttribute="ORIGINAL"
Element="SOPClassUID" Operator="And" Modifier="Not" StringConstantFromRootAttribute="LegacyConvertedEnhancedPETImageStorageSOPClassUID"
-}
ConditionEnd
Condition="ImageTypeValue1OriginalOrMixedAndRectilinear"
@@ -2747,6 +2755,24 @@ Condition="ConcatenationUIDIsPresent"
Element="ConcatenationUID" ElementPresent=""
ConditionEnd
+Condition="InConcatenationTotalNumberIsLessThanOrEqualToOne"
+ Element="InConcatenationTotalNumber" BinaryValue="<= 1"
+ConditionEnd
+
+Condition="ConcatenationAttributesArePresentAndTotalNumberIfPresentGreaterThanOne"
+ (
+ Element="ConcatenationFrameOffsetNumber" ElementPresent=""
+ Element="ConcatenationUID" Operator="Or" ElementPresent=""
+ Element="SOPInstanceUIDOfConcatenationSource" Operator="Or" ElementPresent=""
+ Element="InConcatenationNumber" Operator="Or" ElementPresent=""
+ Element="InConcatenationTotalNumber" Operator="Or" ElementPresent=""
+ )
+ (
+ Element="InConcatenationTotalNumber" Modifier="Not"ElementPresent=""
+ Element="InConcatenationTotalNumber" Operator="Or" BinaryValue="> 1"
+ ) Operator="And"
+ConditionEnd
+
Condition="ReferencedImageSequenceIsPresent"
Element="ReferencedImageSequence" ElementPresent=""
ConditionEnd
@@ -5462,11 +5488,21 @@ ConditionEnd
# checking AnatomicRegionSequence is probably futile, since ImageLaterality rather than laterality is generally used for those IODs :(
# also don't try to check Segmentation objects that contain AnatomicRegionSequence nested within SegmentSequence instead of top level :(
# and don't try to check specimens, since Primary Anatomic Sequence deeply nested and inside and optional sequence :(
+# and assume cardiac, respiratory and voice (but not all audio) waveforms are not a paired body part (though hemodynamic waveforms might be)
Condition="LateralityRequired"
Element="ImageLaterality" Modifier="Not" ElementPresent=""
Element="FrameAnatomySequence" Operator="And" Modifier="Not" ElementPresentInPathFromRoot="SharedFunctionalGroupsSequence"
Element="FrameAnatomySequence" Operator="And" Modifier="Not" ElementPresentInPathFromRootFirstItem="PerFrameFunctionalGroupsSequence"
Element="SegmentSequence" Operator="And" Modifier="Not" ElementPresent=""
+ Element="SOPClassUID" Operator="And" Modifier="Not" StringConstantFromRootAttribute="BasicVoiceStorageSOPClassUID"
+ Element="SOPClassUID" Operator="And" Modifier="Not" StringConstantFromRootAttribute="TwelveLeadECGStorageSOPClassUID"
+ Element="SOPClassUID" Operator="And" Modifier="Not" StringConstantFromRootAttribute="GeneralECGStorageSOPClassUID"
+ Element="SOPClassUID" Operator="And" Modifier="Not" StringConstantFromRootAttribute="AmbulatoryECGStorageSOPClassUID"
+ Element="SOPClassUID" Operator="And" Modifier="Not" StringConstantFromRootAttribute="CardiacElectrophysiologyWaveformStorageSOPClassUID"
+ Element="SOPClassUID" Operator="And" Modifier="Not" StringConstantFromRootAttribute="RespiratoryWaveformStorageSOPClassUID"
+ Element="Modality" Operator="And" Modifier="Not" StringValue="ECG"
+ Element="Modality" Operator="And" Modifier="Not" StringValue="EPS"
+ Element="Modality" Operator="And" Modifier="Not" StringValue="RESP"
Element="SpecimenDescriptionSequence" Operator="And" Modifier="Not" ElementPresent=""
(
Element="BodyPartExamined" StringValue="ABDOMEN"
=====================================
libsrc/standard/elmdict/dicom3.tpl
=====================================
@@ -2676,6 +2676,9 @@
(0068,65F0) VERS="3" VR="FD" VM="4" Keyword="TwoDPlaneIntersection" Name="2D Plane Intersection"
(0068,6610) VERS="3" VR="FD" VM="3" Keyword="ThreeDPlaneOrigin" Name="3D Plane Origin"
(0068,6620) VERS="3" VR="FD" VM="3" Keyword="ThreeDPlaneNormal" Name="3D Plane Normal"
+(0068,7001) VERS="3" VR="CS" VM="1" Keyword="ModelModification" Name="Model Modification"
+(0068,7002) VERS="3" VR="CS" VM="1" Keyword="ModelMirroring" Name="Model Mirroring"
+(0068,7003) VERS="3" VR="SQ" VM="1" Keyword="ModelUsageCodeSequence" Name="Model Usage Code Sequence"
(0070,0001) VERS="3" VR="SQ" VM="1" Keyword="GraphicAnnotationSequence" Name="Graphic Annotation Sequence"
(0070,0002) VERS="3" VR="CS" VM="1" Keyword="GraphicLayer" Name="Graphic Layer"
(0070,0003) VERS="3" VR="CS" VM="1" Keyword="BoundingBoxAnnotationUnits" Name="Bounding Box Annotation Units"
@@ -3171,6 +3174,7 @@
(0400,0563) VERS="3" VR="LO" VM="1" Keyword="ModifyingSystem" Name="Modifying System"
(0400,0564) VERS="3" VR="LO" VM="1" Keyword="SourceOfPreviousValues" Name="Source of Previous Values"
(0400,0565) VERS="3" VR="CS" VM="1" Keyword="ReasonForTheAttributeModification" Name="Reason for the Attribute Modification"
+(0400,0600) VERS="3" VR="CS" VM="1" Keyword="InstanceOriginStatus" Name="Instance Origin Status"
(1000,00x0) VERS="RET" VR="US" VM="3" Keyword="EscapeTriplet" Name="Escape Triplet"
(1000,00x1) VERS="RET" VR="US" VM="3" Keyword="RunLengthTriplet" Name="Run Length Triplet"
(1000,00x2) VERS="RET" VR="US" VM="1" Keyword="HuffmanTableSize" Name="Huffman Table Size"
@@ -3560,6 +3564,7 @@
(300A,0091) VERS="3" VR="DS" VM="1" Keyword="AlternateBeamDose" Name="Alternate Beam Dose"
(300A,0092) VERS="3" VR="CS" VM="1" Keyword="AlternateBeamDoseType" Name="Alternate Beam Dose Type"
(300A,0093) VERS="3" VR="CS" VM="1" Keyword="DepthValueAveragingFlag" Name="Depth Value Averaging Flag"
+(300A,0094) VERS="3" VR="DS" VM="1" Keyword="BeamDosePointSourceToExternalContourDistance" Name="Beam Dose Point Source to External Contour Distance"
(300A,00A0) VERS="3" VR="IS" VM="1" Keyword="NumberOfBrachyApplicationSetups" Name="Number of Brachy Application Setups"
(300A,00A2) VERS="3" VR="DS" VM="3" Keyword="BrachyApplicationSetupDoseSpecificationPoint" Name="Brachy Application Setup Dose Specification Point"
(300A,00A4) VERS="3" VR="DS" VM="1" Keyword="BrachyApplicationSetupDose" Name="Brachy Application Setup Dose"
=====================================
libsrc/standard/elmdict/gems.tpl
=====================================
@@ -1643,7 +1643,7 @@
(0055,0063) VERS="GEM" VR="SQ" VM="1" Owner="GEMS_GENIE_1" Keyword="eNTEGRADataInformationSequence" Name="eNTEGRA Data Information Sequence"
(0055,0064) VERS="GEM" VR="SQ" VM="1" Owner="GEMS_GENIE_1" Keyword="SDODoubleDataSequence" Name="SDO Double Data Sequence"
(0055,0065) VERS="GEM" VR="SQ" VM="1" Owner="GEMS_GENIE_1" Keyword="?" Name="?"
-3101,0010) VERS="GEM" VR="SQ" VM="1" Owner="AMI Annotations_01" Keyword="AnnotationSequence" Name="Annotation Sequence"
+(3101,0010) VERS="GEM" VR="SQ" VM="1" Owner="AMI Annotations_01" Keyword="AnnotationSequence" Name="Annotation Sequence"
(3101,0020) VERS="GEM" VR="SQ" VM="1" Owner="AMI Annotations_02" Keyword="AnnotationSequence" Name="Annotation Sequence"
(3103,0010) VERS="GEM" VR="CS" VM="1" Owner="AMI Sequence Annotations_01" Keyword="AnnotationSequence" Name="Annotation Sequence"
(3103,0020) VERS="GEM" VR="UI" VM="1" Owner="AMI Sequence Annotations_01" Keyword="AnnotationUID" Name="Annotation UID"
=====================================
libsrc/standard/elmdict/other.tpl
=====================================
@@ -2355,3 +2355,16 @@
(8901,0070) VERS="CRM" VR="LO" VM="1" Owner="CureMetrix" Keyword="?" Name="?"
(8901,0080) VERS="CRM" VR="LO" VM="1" Owner="CureMetrix" Keyword="?" Name="?"
(8901,0090) VERS="CRM" VR="LO" VM="1" Owner="CureMetrix" Keyword="?" Name="?"
+
+(0029,0005) VERS="3DH" VR="CS" VM="1" Owner="3DHISTECH REGION MAPS" Keyword="?" Name="?"
+(0029,0006) VERS="3DH" VR="CS" VM="1" Owner="3DHISTECH REGION MAPS" Keyword="?" Name="?"
+(0029,0010) VERS="3DH" VR="SQ" VM="1" Owner="3DHISTECH REGION MAPS" Keyword="?" Name="?"
+
+(0029,0020) VERS="3DH" VR="UL" VM="2" Owner="3DHISTECH ZOOMLEVEL REGION MAP" Keyword="?" Name="?"
+(0029,0035) VERS="3DH" VR="SL" VM="1" Owner="3DHISTECH ZOOMLEVEL REGION MAP" Keyword="?" Name="?"
+(0029,0037) VERS="3DH" VR="SL" VM="1" Owner="3DHISTECH ZOOMLEVEL REGION MAP" Keyword="?" Name="?"
+(0029,0038) VERS="3DH" VR="UL" VM="1" Owner="3DHISTECH ZOOMLEVEL REGION MAP" Keyword="?" Name="?"
+(0029,0040) VERS="3DH" VR="DS" VM="1" Owner="3DHISTECH ZOOMLEVEL REGION MAP" Keyword="?" Name="?"
+(0029,0050) VERS="3DH" VR="UL" VM="1" Owner="3DHISTECH ZOOMLEVEL REGION MAP" Keyword="?" Name="?"
+(0029,0061) VERS="3DH" VR="SQ" VM="1" Owner="3DHISTECH ZOOMLEVEL REGION MAP" Keyword="?" Name="?"
+(0029,0070) VERS="3DH" VR="OB" VM="1" Owner="3DHISTECH ZOOMLEVEL REGION MAP" Keyword="?" Name="?"
=====================================
libsrc/standard/iodcomp/base.tpl
=====================================
@@ -816,6 +816,40 @@ CompositeIOD="EncapsulatedCDA" Condition="EncapsulatedCDAInstance"
InformationEntityEnd
CompositeIODEnd
+CompositeIOD="EncapsulatedSTL" Condition="EncapsulatedSTLInstance"
+ InformationEntity="File"
+ Module="FileMetaInformation" Usage="C" Condition="NeedModuleFileMetaInformation"
+ InformationEntityEnd
+ InformationEntity="Patient"
+ Module="Patient" Usage="M"
+ Module="ClinicalTrialSubject" Usage="U" Condition="NeedModuleClinicalTrialSubject"
+ InformationEntityEnd
+ InformationEntity="Study"
+ Module="GeneralStudy" Usage="M"
+ Module="PatientStudy" Usage="U" # no condition ... all attributes type 3
+ Module="ClinicalTrialStudy" Usage="U" Condition="NeedModuleClinicalTrialStudy"
+ InformationEntityEnd
+ InformationEntity="Series"
+ Module="EncapsulatedDocumentSeries" Usage="M"
+ Module="EncapsulatedDocumentSTLSeriesPseudo" Usage="M"
+ Module="ClinicalTrialSeries" Usage="U" Condition="NeedModuleClinicalTrialSeries"
+ InformationEntityEnd
+ InformationEntity="FrameOfReference"
+ Module="FrameOfReference" Usage="M"
+ InformationEntityEnd
+ InformationEntity="Equipment"
+ Module="GeneralEquipment" Usage="M"
+ Module="EnhancedGeneralEquipment" Usage="M"
+ InformationEntityEnd
+ InformationEntity="EncapsulatedDocument"
+ Module="EncapsulatedDocument" Usage="M"
+ Module="EncapsulatedDocumentSTLPseudo" Usage="M"
+ Module="Manufacturing3DModel" Usage="M"
+ Module="SOPCommon" Usage="M"
+ Module="CommonInstanceReference" Usage="C" Condition="NeedModuleCommonInstanceReference" # really should check if contained references are present :(
+ InformationEntityEnd
+CompositeIODEnd
+
CompositeIOD="RealWorldValueMapping" Condition="RealWorldValueMappingInstance"
InformationEntity="File"
Module="FileMetaInformation" Usage="C" Condition="NeedModuleFileMetaInformation"
=====================================
libsrc/standard/iodcomp/mr.tpl
=====================================
@@ -267,7 +267,6 @@ CompositeIOD="TractographyResults" Condition="TractographyResultsInstance"
InformationEntityEnd
InformationEntity="Patient"
Module="Patient" Usage="M"
- Module="Specimen" Usage="U" Condition="NeedModuleSpecimen"
Module="ClinicalTrialSubject" Usage="U" Condition="NeedModuleClinicalTrialSubject"
InformationEntityEnd
InformationEntity="Study"
@@ -289,6 +288,7 @@ CompositeIOD="TractographyResults" Condition="TractographyResultsInstance"
InformationEntityEnd
InformationEntity="TractographyResults"
Module="TractographyResults" Usage="M"
+ Module="Specimen" Usage="U" Condition="NeedModuleSpecimen"
Module="CommonInstanceReference" Usage="M"
Module="SOPCommon" Usage="M"
InformationEntityEnd
=====================================
libsrc/standard/module/base.tpl
=====================================
@@ -543,6 +543,10 @@ Module="GeneralStudy"
Sequence="PhysiciansReadingStudyIdentificationSequence" Type="3" VM="1-n"
InvokeMacro="PersonIdentificationMacro"
SequenceEnd
+ Name="ConsultingPhysicianName" Type="3"
+ Sequence="ConsultingPhysicianIdentificationSequence" Type="3" VM="1-n"
+ InvokeMacro="PersonIdentificationMacro"
+ SequenceEnd
Sequence="RequestingServiceCodeSequence" Type="3" VM="1"
InvokeMacro="CodeSequenceMacro" DefinedContextID="7030"
SequenceEnd
@@ -976,10 +980,11 @@ Module="MultiFrameFunctionalGroupsCommon"
Name="StereoPairsPresent" Type="3" StringEnumValues="YesNoFull"
Name="ConcatenationFrameOffsetNumber" Type="1C" Condition="ConcatenationUIDIsPresent"
Name="RepresentativeFrameNumber" Type="3" NotZeroError=""
- Name="ConcatenationUID" Type="1C" NoCondition="" # real world
+ Name="ConcatenationUID" Type="1C" Condition="ConcatenationAttributesArePresentAndTotalNumberIfPresentGreaterThanOne"
Name="SOPInstanceUIDOfConcatenationSource" Type="1C" Condition="ConcatenationUIDIsPresent"
Name="InConcatenationNumber" Type="1C" Condition="ConcatenationUIDIsPresent"
Name="InConcatenationTotalNumber" Type="3"
+ Verify="InConcatenationTotalNumber" Condition="InConcatenationTotalNumberIsLessThanOrEqualToOne" ThenErrorMessage="Cannot be less than or equal to one since then not a Concatenation"
ModuleEnd
DefineMacro="PixelMeasuresMacro" InformationEntity="FunctionalGroup"
@@ -2122,6 +2127,7 @@ Module="SOPCommon"
InvokeMacro="ImageSOPInstanceReferenceMacro"
SequenceEnd
Name="ContentQualification" Type="3" StringEnumValues="ContentQualification"
+ Name="InstanceOriginStatus" Type="3" StringEnumValues="InstanceOriginStatus"
ModuleEnd
Module="FrameExtraction"
@@ -2513,12 +2519,12 @@ Module="EncapsulatedDocument"
Sequence="SourceInstanceSequence" Type="1C" VM="1-n" NoCondition=""
InvokeMacro="SOPInstanceReferenceMacro"
Sequence="PurposeOfReferenceCodeSequence" Type="3" VM="1"
- InvokeMacro="CodeSequenceMacro"
+ InvokeMacro="CodeSequenceMacro" DefinedContextID="7060"
SequenceEnd
SequenceEnd
Name="DocumentTitle" Type="2"
Sequence="ConceptNameCodeSequence" Type="2" VM="0-1"
- InvokeMacro="CodeSequenceMacro" BaselineContextID="7020"
+ InvokeMacro="CodeSequenceMacro" BaselineContextID="7020" # or 7061 if Modality is M3D ... not checke anyway :(
SequenceEnd
Name="VerificationFlag" Type="3" StringEnumValues="VerificationFlag"
Name="HL7InstanceIdentifier" Type="1C" Condition="EncapsulatedCDAInstance"
@@ -2542,6 +2548,14 @@ Module="EncapsulatedDocumentCDAPseudo"
Name="MIMETypeOfEncapsulatedDocument" Type="1" StringEnumValues="MIMETypeApplicationCDA"
ModuleEnd
+Module="EncapsulatedDocumentSTLPseudo"
+ Name="MIMETypeOfEncapsulatedDocument" Type="1" StringEnumValues="MIMETypeApplicationSTL"
+ModuleEnd
+
+Module="EncapsulatedDocumentSTLSeriesPseudo"
+ Name="Modality" Type="1" StringEnumValues="M3DModality"
+ModuleEnd
+
Module="CheckSingleFramePseudo"
Name="NumberOfFrames" Type="3" DoNotSetUsed="" BinaryEnumValues="One"
ModuleEnd
@@ -2808,3 +2822,21 @@ DefineMacro="StoredValueColorRangeMacro" InformationEntity="FunctionalGroup"
SequenceEnd
MacroEnd
+Module="Manufacturing3DModel"
+ Sequence="MeasurementUnitsCodeSequence" Type="1" VM="1"
+ InvokeMacro="CodeSequenceMacro" DefinedContextID="7063"
+ SequenceEnd
+ Name="ModelModification" Type="3" StringEnumValues="YesNoFull"
+ Name="ModelMirroring" Type="3" StringEnumValues="YesNoFull"
+ Sequence="ModelUsageCodeSequence" Type="3" VM="1"
+ InvokeMacro="CodeSequenceMacro" BaselineContextID="7064"
+ SequenceEnd
+ Name="ContentDescription" Type="3"
+ Sequence="IconImageSequence" Type="3" VM="1"
+ InvokeMacro="IconImageSequenceMacro"
+ SequenceEnd
+ Sequence="DerivationAlgorithmSequence" Type="3" VM="1"
+ InvokeMacro="AlgorithmIdentificationMacro"
+ SequenceEnd
+ModuleEnd
+
=====================================
libsrc/standard/module/vl.tpl
=====================================
@@ -306,8 +306,8 @@ Module="WholeSlideMicroscopyImage"
Name="ImageType" Type="1" VM="4"
Verify="ImageType" Type="1" ValueSelector="0" StringEnumValues="WholeSlideImageType1"
Verify="ImageType" Type="1" ValueSelector="1" StringEnumValues="CommonEnhancedImageAndFrameType2"
- Verify="ImageType" Type="1" ValueSelector="2" StringEnumValues="WholeSlideImageType3"
- Verify="ImageType" Type="1" ValueSelector="3" StringEnumValues="WholeSlideImageType4"
+ Verify="ImageType" Type="1" ValueSelector="2" StringDefinedTerms="WholeSlideImageType3"
+ Verify="ImageType" Type="1" ValueSelector="3" StringDefinedTerms="WholeSlideImageType4"
Name="ImagedVolumeWidth" Type="1" NotZeroError=""
Name="ImagedVolumeHeight" Type="1" NotZeroError=""
Name="ImagedVolumeDepth" Type="1" NotZeroError=""
@@ -449,7 +449,7 @@ Module="MultiFrameFunctionalGroupsForWholeSlideMicroscopy"
InvokeMacro="PixelMeasuresMacro"
InvokeMacro="ReferencedImageMacro" Condition="ReferencedImageMacroOKInSharedFunctionalGroupSequence"
InvokeMacro="DerivationImageMacro" Condition="DerivationImageMacroOKInSharedFunctionalGroupSequence"
- InvokeMacro="RealWorldValueMappingMacro" Condition="RealWorldValueMappingMacroOKInSharedFunctionalGroupSequence"
+ InvokeMacro="RealWorldValueMappingMacro" Condition="RealWorldValueMappingMacroOKInSharedFunctionalGroupSequenceAndPhotometricInterpretationIsMonochrome2"
InvokeMacro="PlanePositionSlideMacro" Condition="NeedPlanePositionSlideMacroInSharedFunctionalGroupSequenceForWholeSlideMicroscopy"
InvokeMacro="OpticalPathIdentificationMacro" Condition="NeedOpticalPathIdentificationMacroInSharedFunctionalGroupSequenceForWholeSlideMicroscopy"
InvokeMacro="SpecimenReferenceMacro" Condition="SpecimenReferenceMacroOKInSharedFunctionalGroupSequence"
@@ -460,7 +460,7 @@ Module="MultiFrameFunctionalGroupsForWholeSlideMicroscopy"
InvokeMacro="FrameContentMacro" Condition="FrameContentMacroPresent"
InvokeMacro="ReferencedImageMacro" Condition="ReferencedImageMacroOKInPerFrameFunctionalGroupSequence"
InvokeMacro="DerivationImageMacro" Condition="DerivationImageMacroOKInPerFrameFunctionalGroupSequence"
- InvokeMacro="RealWorldValueMappingMacro" Condition="RealWorldValueMappingMacroOKInPerFrameFunctionalGroupSequence"
+ InvokeMacro="RealWorldValueMappingMacro" Condition="RealWorldValueMappingMacroOKInPerFrameFunctionalGroupSequenceAndPhotometricInterpretationIsMonochrome2"
InvokeMacro="PlanePositionSlideMacro" Condition="NeedPlanePositionSlideMacroInPerFrameFunctionalGroupSequenceForWholeSlideMicroscopy"
InvokeMacro="OpticalPathIdentificationMacro" Condition="NeedOpticalPathIdentificationMacroInPerFrameFunctionalGroupSequenceForWholeSlideMicroscopy"
InvokeMacro="SpecimenReferenceMacro" Condition="SpecimenReferenceMacroOKInPerFrameFunctionalGroupSequence"
=====================================
libsrc/standard/sopcl.tpl
=====================================
@@ -164,6 +164,7 @@ DirectoryRecord="KEY OBJECT DOC" Name="KeyObjectSelectionDocumentStorage" Desc
DirectoryRecord="ENCAP DOC" Name="EncapsulatedPDFStorage" Desc="Encapsulated PDF Storage" Uid="1.2.840.10008.5.1.4.1.1.104.1"
DirectoryRecord="ENCAP DOC" Name="EncapsulatedCDAStorage" Desc="Encapsulated CDA Storage" Uid="1.2.840.10008.5.1.4.1.1.104.2"
+DirectoryRecord="ENCAP DOC" Name="EncapsulatedSTLStorage" Desc="Encapsulated STL Storage" Uid="1.2.840.10008.5.1.4.1.1.104.3"
DirectoryRecord="IMAGE" Name="PETImageStorage" Desc="Positron Emission Tomography Image Storage" Uid="1.2.840.10008.5.1.4.1.1.128"
DirectoryRecord="IMAGE" Name="LegacyConvertedEnhancedPETImageStorage" Desc="Legacy Converted Enhanced PET Image Storage" Uid="1.2.840.10008.5.1.4.1.1.128.1"
=====================================
libsrc/standard/strval/base.tpl
=====================================
@@ -278,6 +278,7 @@ StringValues="MiscellaneousCodingSchemeDesignators" {
BI = BI-RADS,
C4 = CPT-4,
C5 = CPT-5,
+ caDSR = Cancer Data Standard Repository,
CAS = Chemical Abstract Codes,
CD2 = American Dental Association Current Dental Terminology 2,
CDCA = CDC Analyte Codes,
@@ -286,6 +287,7 @@ StringValues="MiscellaneousCodingSchemeDesignators" {
CE = CEN ECG Diagnostic Codes,
CST = COSTART coding system for adverse drug reactions,
CTV3 = NHS Clinical Terms Version 3 (Read Codes),
+ DC = Dublin Core,
DCM = DICOM Controlled Terminology,
DCMUID = DICOM UID Registry,
E = Euclides AFP codes,
@@ -321,6 +323,7 @@ StringValues="MiscellaneousCodingSchemeDesignators" {
MA = Adult Mouse Anatomy Ontology,
MCD = Medicaid billing codes/names,
MCR = Medicare billing codes/names,
+ MDC = ISO/IEEE 11073 Medical Device Nomenclature,
MDDX = Medispan diagnostic codes,
MDNS = Universal Medical Device Nomenclature System,
MEDC = Medical Economics Drug Codes,
@@ -328,13 +331,19 @@ StringValues="MiscellaneousCodingSchemeDesignators" {
MEDX = Medical Economics Diagnostic Codes,
MGI = Mouse Genome Initiative,
MGPI = Medispan GPI hierarchical drug codes,
+ MSH = NLM Medical Subject Headings,
MVX = CDC Vaccine Codes,
+ NBD = NASPE/BPEG Defibrillator Code,
+ NBG = NASPE/BPEG Generic Pacemaker Code,
NCDR = American College of Cardiology National Cardiovascular Data Registry Cath Lab Module,
NCIt = NCI Thesaurus,
NDC = National Drug Codes FDA,
+ NEU = NeuroNames,
NIC = Nursing Interventions Iowa Intervention Project,
+ NICIP = UK National Health Service National Interim Clinical Imaging Procedures (NICIP) Short Code,
NPI = HCFA National Provider Identifier,
POS = HCFA Place of Service (POS) Codes for Professional Claims,
+ PUBCHEM_CID = US National Center for Biotechnology Information (NCBI) PubChem Compound CID,
RADLEX = RadLex,
RC = Read Clinical Classification of Medicine,
RFC3066 = IETF RFC 3066 language codes,
@@ -606,6 +615,7 @@ StringValues="Modality" {
KO = Key Object Selection,
LEN = Lensometry,
LS = Laser Surface Scan,
+ M3D = Model for 3D Manufacturing,
MG = Mammography,
MR = Magnetic Resonance,
NM = Nuclear Medicine,
@@ -614,6 +624,8 @@ StringValues="Modality" {
OP = Ophthalmic Photography,
OPM = Ophthalmic Mapping,
OPT = Ophthalmic Tomography,
+ OPTBSV = Ophthalmic Tomography B-scan Volume Analysis,
+ OPTENF = Ophthalmic Tomography En Face,
OPV = Ophthalmic Visual Field,
OT = Other,
PLAN = Plan,
@@ -1133,6 +1145,14 @@ StringValues="MIMETypeApplicationCDA" {
TEXT/XML
}
+# should really have a case insensitive match :(
+StringValues="MIMETypeApplicationSTL" {
+ model/stl,
+ model/STL,
+ Model/STL,
+ MODEL/STL
+}
+
StringValues="LossyImageCompressionMethod" {
ISO_10918_1 = JPEG Lossy Compression,
ISO_14495_1 = JPEG-LS Near-lossless Compression,
@@ -1570,3 +1590,12 @@ StringValues="LongitudinalTemporalEventType" {
BASELINE
}
+StringValues="M3DModality" {
+ M3D
+}
+
+StringValues="InstanceOriginStatus" {
+ LOCAL,
+ IMPORTED
+}
+
View it on GitLab: https://salsa.debian.org/med-team/dicom3tools/compare/88f3530294e9078c93a1c975259777d676f6a505...9b43f93b08b0f72ece64b2a89314255ad0ff3515
--
View it on GitLab: https://salsa.debian.org/med-team/dicom3tools/compare/88f3530294e9078c93a1c975259777d676f6a505...9b43f93b08b0f72ece64b2a89314255ad0ff3515
You're receiving this email because of your account on salsa.debian.org.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://alioth-lists.debian.net/pipermail/debian-med-commit/attachments/20181028/528acc03/attachment-0001.html>
More information about the debian-med-commit
mailing list