[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