Skip to content
Commits on Source (3)
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
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)
......
1.00.snapshot.20180401144051
1.00.snapshot.20180803063840
......@@ -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
......
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@debian.org> Sat, 20 Oct 2018 18:47:03 +0000
-- Gert Wollny <gewo@debian.org> Sun, 28 Oct 2018 09:30:09 +0100
dicom3tools (1.00~20180401144051-1) unstable; urgency=medium
......
......@@ -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;
......@@ -294,6 +295,11 @@ ReadableAttributeList::skipEncapsulatedData(void)
}
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;
}
......
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";
......@@ -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";
......@@ -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"
......
......@@ -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"
......
......@@ -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"
......
......@@ -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"
......
......@@ -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="?"
......@@ -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"
......
......@@ -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
......
......@@ -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
......@@ -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"
......
......@@ -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"
......
......@@ -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
}