示例#1
0
        private void ValidateSimpleDataSets(string[] values, List <InstanceXmlDicomAttributeCollection> dataSets, StudyXmlOutputSettings settings)
        {
            if (values.Length != dataSets.Count)
            {
                throw new ArgumentException("Test value and data set lists must have same number of values.");
            }

            for (int i = 0; i < dataSets.Count; ++i)
            {
                string originalValue = values[i];
                InstanceXmlDicomAttributeCollection dataSet = dataSets[i];

                if (originalValue == null)
                {
                    Assert.IsFalse(dataSet.IsTagExcluded(DicomTags.ImageComments), "Tag should NOT be excluded.");
                    Assert.IsTrue(dataSet[DicomTags.ImageComments].IsEmpty, "Tag should be empty.");
                }
                else if (originalValue.Length > (int)settings.MaxTagLength)
                {
                    Assert.IsTrue(dataSet.IsTagExcluded(DicomTags.ImageComments), "Tag should be excluded.");
                    Assert.AreNotEqual(dataSet[DicomTags.ImageComments].ToString(), originalValue, "Value doesn't match original.");
                }
                else
                {
                    Assert.IsFalse(dataSet.IsTagExcluded(DicomTags.ImageComments), "Tag should not be excluded.");
                    Assert.AreEqual(dataSet[DicomTags.ImageComments].ToString(), originalValue, "Value doesn't match original.");
                }
            }
        }
示例#2
0
        private void TestOverlappingSequence(SqId[] sequenceIds, bool setMaxTagLength)
        {
            List <DicomFile> images = SetupImagesWithVoiLutSequenceA(sequenceIds.Length);

            for (int i = 0; i < sequenceIds.Length; ++i)
            {
                DicomFile image      = images[i];
                SqId      sequenceId = sequenceIds[i];
                if (sequenceId == SqId.X)
                {
                    image.DataSet[DicomTags.VoiLutSequence] = null;
                }
                else if (sequenceId == SqId.B)
                {
                    MakeVoiLutSequenceB(image.DataSet);
                }
            }

            StudyXml newStudyXml;
            StudyXmlOutputSettings settings = new StudyXmlOutputSettings();

            if (setMaxTagLength)
            {
                settings.MaxTagLength = 1024;
            }

            List <InstanceXmlDicomAttributeCollection> dataSets = GetInstanceXmlDataSets(images, out newStudyXml, settings);

            for (int i = 0; i < dataSets.Count; ++i)
            {
                InstanceXmlDicomAttributeCollection dataSet = dataSets[i];
                SqId sequenceId = sequenceIds[i];

                DicomAttribute      sequence = dataSets[i][DicomTags.VoiLutSequence];
                DicomSequenceItem[] items    = (DicomSequenceItem[])sequence.Values;

                if (sequenceId == SqId.X)
                {
                    Assert.IsTrue(sequence.IsEmpty, "Tag should be empty.");
                    Assert.IsFalse(dataSet.HasExcludedTags(true), "There should be no excluded tags.");
                }
                else
                {
                    Assert.IsFalse(sequence.IsEmpty, "Tag should NOT be empty.");
                    if (!setMaxTagLength)
                    {
                        Assert.AreEqual(sequence, images[i].DataSet[DicomTags.VoiLutSequence], "Tag doesn't match original.");
                        Assert.IsFalse(dataSet.HasExcludedTags(true), "There should be no excluded tags.");
                    }
                    else
                    {
                        foreach (InstanceXmlDicomSequenceItem item in items)
                        {
                            Assert.IsTrue(item.IsTagExcluded(DicomTags.LutData), "Tag should be excluded.");
                        }
                    }

                    if (sequenceId == SqId.B)
                    {
                        Assert.AreEqual(items.Length, 2, "Sequence length should be 2.");
                    }
                    else
                    {
                        Assert.AreEqual(items.Length, 3, "Sequence length should be 3.");
                    }
                }
            }
        }
示例#3
0
	    public InstanceXml(XmlNode instanceNode, DicomAttributeCollection baseCollection)
		{
			InstanceXmlDicomAttributeCollection thisCollection = new InstanceXmlDicomAttributeCollection();
			_collection = thisCollection;
			_collection.ValidateVrValues = false;
			_collection.ValidateVrLengths = false;

			if (baseCollection != null)
			{
				AddExcludedTagsFromBase(baseCollection);

				_baseCollectionEnumerator = baseCollection.GetEnumerator();
				if (!_baseCollectionEnumerator.MoveNext())
					_baseCollectionEnumerator = null;
			}

			if (!instanceNode.HasChildNodes)
				return;

			_instanceXmlEnumerator = instanceNode.ChildNodes.GetEnumerator();
			if (!_instanceXmlEnumerator.MoveNext())
				_instanceXmlEnumerator = null;

			if (instanceNode.Attributes["UID"] != null)
			{
				_sopInstanceUid = instanceNode.Attributes["UID"].Value;
			}

			if (instanceNode.Attributes["SopClassUID"] != null)
			{
				_sopClass = SopClass.GetSopClass(instanceNode.Attributes["SopClassUID"].Value);
			}

			_transferSyntax = instanceNode.Attributes["TransferSyntaxUID"] != null 
				? TransferSyntax.GetTransferSyntax(instanceNode.Attributes["TransferSyntaxUID"].Value) 
				: TransferSyntax.ExplicitVrLittleEndian;

			if (instanceNode.Attributes["SourceFileName"] != null)
			{
				_sourceFileName = instanceNode.Attributes["SourceFileName"].Value;
			}

			if (instanceNode.Attributes["FileSize"] != null)
			{
				long.TryParse(instanceNode.Attributes["FileSize"].Value, out _fileSize);
			}

			// This should never happen
			if (_sopClass == null)
			{
				_sopClass = SopClass.GetSopClass(Collection[DicomTags.SopClassUid].GetString(0, String.Empty));
			}

		}