public void TestAgentCodeSequence()
        {
            var agent1 = new CodeSequenceMacro {
                CodeMeaning = "Contrastinol", CodeValue = "123", CodingSchemeDesignator = "ABC"
            };
            var agent2 = new CodeSequenceMacro {
                CodeMeaning = "Bolusinate", CodeValue = "456", CodingSchemeDesignator = "DEF"
            };

            var dataset = TestDataSource.CreateImageSopDataSource();

            dataset[DicomTags.ContrastBolusAgent].SetStringValue(@"Contrastinol and Bolusinate");
            dataset[DicomTags.ContrastBolusAgentSequence].AddSequenceItem(agent1.DicomSequenceItem);

            using (var sop = (ImageSop)Sop.Create(dataset))
                using (var images = new DisposableList <IPresentationImage>(PresentationImageFactory.Create(sop)))
                {
                    Assert.AreEqual(@"Contrastinol", _annotationItems[_cbAgent].GetAnnotationText(images[0]));

                    dataset[DicomTags.ContrastBolusAgentSequence].AddSequenceItem(agent2.DicomSequenceItem);
                    Assert.AreEqual(@"Contrastinol\Bolusinate", _annotationItems[_cbAgent].GetAnnotationText(images[0]));

                    agent1.CodeMeaning = string.Empty;
                    Assert.AreEqual(@"123 (ABC)\Bolusinate", _annotationItems[_cbAgent].GetAnnotationText(images[0]));

                    agent2.CodeMeaning = string.Empty;
                    Assert.AreEqual(@"Contrastinol and Bolusinate", _annotationItems[_cbAgent].GetAnnotationText(images[0]));

                    dataset[DicomTags.ContrastBolusAgent].SetNullValue();
                    Assert.AreEqual(@"123 (ABC)\456 (DEF)", _annotationItems[_cbAgent].GetAnnotationText(images[0]));
                }
        }
Esempio n. 2
0
        /// <summary>
        /// Looks up a code item in the context group given the details specified by a code sequence.
        /// </summary>
        /// <remarks>
        /// The default implementation iterates through <see cref="GetEnumerator"/> and calls <see cref="ContextGroupItemBase.Equals(string,string,string,string,bool)"/> to find a match.
        /// </remarks>
        /// <param name="codeSequence">The code sequence containing the code that is to be looked up.</param>
        /// <param name="compareCodingSchemeVersion">A value indicating whether or not the coding scheme version should be compared when looking for a match.</param>
        /// <returns>A matching baseline code item if one is found, an extending code item if the context group is extensible and a match wasn't found, or <code>null</code> otherwise.</returns>
        public virtual T Lookup(CodeSequenceMacro codeSequence, bool compareCodingSchemeVersion)
        {
            T result = CollectionUtils.SelectFirst(this, c => c.Equals(codeSequence, compareCodingSchemeVersion));

            if (result == null && this.IsExtensible)
            {
                result = CreateContextGroupItem(codeSequence.CodingSchemeDesignator, codeSequence.CodingSchemeVersion, codeSequence.CodeValue, codeSequence.CodeMeaning);
            }
            return(result);
        }
 /// <summary>
 /// Determines whether or not the specified <see cref="CodeSequenceMacro"/> is equivalent to the current code item.
 /// </summary>
 /// <param name="codeSequence">The code sequence with which to compare the current code item. </param>
 /// <param name="compareCodingSchemeVersion">A value indicating whether or not the coding scheme version should be compared.</param>
 /// <returns>True if the specified code sequence is equivalent to the current code item; False otherwise.</returns>
 /// <exception cref="ArgumentNullException">Thrown if <paramref name="codeSequence"/> is null.</exception>
 /// <remarks>
 /// The default implementation compares only the coding scheme designator and code value
 /// by calling <see cref="Equals(string,string,string,string,bool)"/>.
 /// </remarks>
 public virtual bool Equals(CodeSequenceMacro codeSequence, bool compareCodingSchemeVersion)
 {
     Platform.CheckForNullReference(codeSequence, "codeSequence");
     return(this.Equals(
                codeSequence.CodingSchemeDesignator,
                codeSequence.CodeValue,
                codeSequence.CodeMeaning,
                codeSequence.CodingSchemeVersion,
                compareCodingSchemeVersion));
 }
        /// <summary>
        /// Creates the ConceptNameCodeSequence in the underlying collection. Type 2.
        /// </summary>
        public CodeSequenceMacro CreateConceptNameCodeSequence()
        {
            var dicomAttribute = DicomElementProvider[DicomTags.ConceptNameCodeSequence];

            if (dicomAttribute.IsNull || dicomAttribute.IsEmpty)
            {
                var dicomSequenceItem = new DicomSequenceItem();
                dicomAttribute.Values = new[] { dicomSequenceItem };
                var sequenceType = new CodeSequenceMacro(dicomSequenceItem);
                return(sequenceType);
            }
            return(new CodeSequenceMacro(((DicomSequenceItem[])dicomAttribute.Values)[0]));
        }
 public static bool TryParse(CodeSequenceMacro codeSequence, out Species species)
 {
     try
     {
         species = new Species(codeSequence);
         return(true);
     }
     catch (Exception)
     {
         species = null;
         return(false);
     }
 }
 public static bool TryParse(CodeSequenceMacro codeSequence, out ImageDerivation imageDerivation)
 {
     try
     {
         imageDerivation = new ImageDerivation(codeSequence);
         return(true);
     }
     catch (Exception)
     {
         imageDerivation = null;
         return(false);
     }
 }
        /// <summary>
        /// Creates the PatientOrientationModifierCodeSequence in the underlying collection. Type 2C.
        /// </summary>
        public CodeSequenceMacro CreatePatientOrientationModifierCodeSequence()
        {
            var dicomAttribute = DicomAttributeProvider[DicomTags.PatientOrientationModifierCodeSequence];

            if (dicomAttribute.IsNull || dicomAttribute.IsEmpty)
            {
                var dicomSequenceItem = new DicomSequenceItem();
                dicomAttribute.Values = new[] { dicomSequenceItem };
                var sequenceType = new CodeSequenceMacro(dicomSequenceItem);
                return(sequenceType);
            }
            return(new CodeSequenceMacro(((DicomSequenceItem[])dicomAttribute.Values)[0]));
        }
            /// <summary>
            /// Sets the attributes of the given code sequence according to the current code item.
            /// </summary>
            /// <param name="codeSequence">A code sequence object.</param>
            /// <exception cref="ArgumentNullException">Thrown if the code sequence object is null.</exception>
            public virtual void WriteToCodeSequence(CodeSequenceMacro codeSequence)
            {
                Platform.CheckForNullReference(codeSequence, "codeSequence");

                codeSequence.CodeMeaning            = this.CodeMeaning;
                codeSequence.CodeValue              = this.CodeValue;
                codeSequence.CodingSchemeDesignator = this.CodingSchemeDesignator;

                if (!string.IsNullOrEmpty(this.CodingSchemeVersion))
                {
                    codeSequence.CodingSchemeVersion = this.CodingSchemeVersion;
                }
            }
Esempio n. 9
0
            public bool MatchesCodeSequence(CodeSequenceMacro codeSequence, bool compareCodingSchemeVersion)
            {
                Platform.CheckForNullReference(codeSequence, "codeSequence");

                StringComparer comparer = StringComparer.InvariantCultureIgnoreCase;
                bool           result   = comparer.Equals(this.CodeValue, codeSequence.CodeValue);

                result = result && comparer.Equals(this.CodingSchemeDesignator, codeSequence.CodingSchemeDesignator);
                if (compareCodingSchemeVersion)
                {
                    result = result && comparer.Equals(this.CodingSchemeVersion, codeSequence.CodingSchemeVersion);
                }
                return(result);
            }
Esempio n. 10
0
        public T Parse(CodeSequenceMacro codeSequence, bool compareCodingSchemeVersion)
        {
            Platform.CheckForNullReference(codeSequence, "codeSequence");

            StringComparer comparer  = StringComparer.InvariantCultureIgnoreCase;
            string         codeValue = codeSequence.CodeValue;
            string         codingSchemeDesignator = codeSequence.CodingSchemeDesignator;
            string         codingSchemeVersion    = codeSequence.CodingSchemeVersion;

            foreach (T t in this)
            {
                if (comparer.Equals(t.CodeValue, codeValue) && comparer.Equals(t.CodingSchemeDesignator, codingSchemeDesignator) && (!compareCodingSchemeVersion || comparer.Equals(t.CodingSchemeVersion, codingSchemeVersion)))
                {
                    return(t);
                }
            }

            throw new InvalidCastException(string.Format("The encoded code sequence is not a member of the context group {0} (DCID{1}).", this.ContextGroupName, this.ContextId));
        }
Esempio n. 11
0
 /// <summary>
 /// Writes the value of the specified code item to the given code sequence.
 /// </summary>
 /// <remarks>
 /// The default implementation calls <see cref="ContextGroupItemBase.WriteToCodeSequence"/>.
 /// </remarks>
 /// <param name="value">The code item whose value should be written.</param>
 /// <param name="codeSequence">The code sequence to which the code is to be written.</param>
 public virtual void WriteToCodeSequence(T value, CodeSequenceMacro codeSequence)
 {
     value.WriteToCodeSequence(codeSequence);
 }
Esempio n. 12
0
 /// <summary>
 /// Constructs a new breed registry.
 /// </summary>
 /// <param name="codeSequence">The code sequence attributes macro.</param>
 /// <exception cref="ArgumentException">Thrown if <paramref name="codeSequence.CodingSchemeDesignator"/> or <paramref name="codeSequence.CodeValue"/> are <code>null</code> or empty.</exception>
 public BreedRegistry(CodeSequenceMacro codeSequence)
     : base(codeSequence.CodingSchemeDesignator, codeSequence.CodingSchemeVersion, codeSequence.CodeValue, codeSequence.CodeMeaning)
 {
 }
 /// <summary>
 /// Determines whether or not the specified <see cref="CodeSequenceMacro"/> is equivalent to the current code item.
 /// </summary>
 /// <param name="codeSequence">The code sequence with which to compare the current code item. </param>
 /// <returns>True if the specified code sequence is equivalent to the current code item; False otherwise.</returns>
 /// <exception cref="ArgumentNullException">Thrown if <paramref name="codeSequence"/> is null.</exception>
 /// <remarks>
 /// The default implementation compares only the coding scheme designator and code value
 /// by calling <see cref="Equals(ClearCanvas.Dicom.Iod.Macros.CodeSequenceMacro,bool)"/>.
 /// </remarks>
 public virtual bool Equals(CodeSequenceMacro codeSequence)
 {
     return(this.Equals(codeSequence, false));
 }
 public static IsotopesInRadiopharmaceuticals LookupIsotope(CodeSequenceMacro codeSequence)
 {
     return(Instance.Lookup(codeSequence));
 }
Esempio n. 15
0
 public bool MatchesCodeSequence(CodeSequenceMacro codeSequence)
 {
     return(MatchesCodeSequence(codeSequence, false));
 }
        /// <summary>
        /// Update an <see cref="DicomAttributeCollection"/> with pixel data related tags.
        /// </summary>
        /// <param name="dataset">The collection to update.</param>
        public override void UpdateAttributeCollection(DicomAttributeCollection dataset)
        {
            if (dataset.Contains(DicomTags.NumberOfFrames) || NumberOfFrames > 1)
            {
                dataset[DicomTags.NumberOfFrames].SetInt32(0, NumberOfFrames);
            }
            if (dataset.Contains(DicomTags.PlanarConfiguration))
            {
                dataset[DicomTags.PlanarConfiguration].SetInt32(0, PlanarConfiguration);
            }
            if (dataset.Contains(DicomTags.LossyImageCompression) || LossyImageCompression.Length > 0)
            {
                dataset[DicomTags.LossyImageCompression].SetString(0, LossyImageCompression);
            }
            if (dataset.Contains(DicomTags.LossyImageCompressionRatio) || (LossyImageCompressionRatio != 1.0f && LossyImageCompressionRatio != 0.0f))
            {
                dataset[DicomTags.LossyImageCompressionRatio].SetFloat32(0, LossyImageCompressionRatio);
            }
            if (dataset.Contains(DicomTags.LossyImageCompressionMethod) || LossyImageCompressionMethod.Length > 0)
            {
                dataset[DicomTags.LossyImageCompressionMethod].SetString(0, LossyImageCompressionMethod);
            }
            if (dataset.Contains(DicomTags.DerivationDescription) || DerivationDescription.Length > 0)
            {
                string currentValue = dataset[DicomTags.DerivationDescription].ToString();

                dataset[DicomTags.DerivationDescription].SetStringValue(DerivationDescription);
                if (!currentValue.Equals(DerivationDescription))
                {
                    DicomSequenceItem item  = new DicomSequenceItem();
                    CodeSequenceMacro macro = new CodeSequenceMacro(item);
                    macro.CodeMeaning            = "Lossy Compression";
                    macro.CodeValue              = "113040";
                    macro.CodingSchemeDesignator = "DCM";
                    macro.ContextGroupVersion    = new DateTime(2005, 8, 22);
                    macro.ContextIdentifier      = "7203";
                    macro.MappingResource        = "DCMR";

                    dataset[DicomTags.DerivationCodeSequence].AddSequenceItem(item);
                }
            }
            if (dataset.Contains(DicomTags.RescaleSlope) || DecimalRescaleSlope != 1.0M || DecimalRescaleIntercept != 0.0M)
            {
                dataset[DicomTags.RescaleSlope].SetString(0, RescaleSlope);
            }
            if (dataset.Contains(DicomTags.RescaleIntercept) || DecimalRescaleSlope != 1.0M || DecimalRescaleIntercept != 0.0M)
            {
                dataset[DicomTags.RescaleIntercept].SetString(0, RescaleIntercept);
            }

            if (dataset.Contains(DicomTags.WindowCenter) || LinearVoiLuts.Count > 0)
            {
                Window.SetWindowCenterAndWidth(dataset, LinearVoiLuts);
            }

            //Remove the palette color lut, if the pixels were translated to RGB
            if (dataset.Contains(DicomTags.RedPaletteColorLookupTableData) &&
                dataset.Contains(DicomTags.BluePaletteColorLookupTableData) &&
                dataset.Contains(DicomTags.GreenPaletteColorLookupTableData) &&
                !HasPaletteColorLut)
            {
                dataset.RemoveAttribute(DicomTags.BluePaletteColorLookupTableDescriptor);
                dataset.RemoveAttribute(DicomTags.BluePaletteColorLookupTableData);
                dataset.RemoveAttribute(DicomTags.RedPaletteColorLookupTableDescriptor);
                dataset.RemoveAttribute(DicomTags.RedPaletteColorLookupTableData);
                dataset.RemoveAttribute(DicomTags.GreenPaletteColorLookupTableDescriptor);
                dataset.RemoveAttribute(DicomTags.GreenPaletteColorLookupTableData);
            }

            dataset.SaveDicomFields(this);
            dataset[DicomTags.PixelData] = _sq;
        }
Esempio n. 17
0
 /// <summary>
 /// Looks up a code item in the context group given the details specified by a code sequence.
 /// </summary>
 /// <remarks>
 /// The default implementation calls <see cref="Lookup(ClearCanvas.Dicom.Iod.Macros.CodeSequenceMacro,bool)"/>.
 /// </remarks>
 /// <param name="codeSequence">The code sequence containing the code that is to be looked up.</param>
 /// <returns>A matching baseline code item if one is found, an extending code item if the context group is extensible and a match wasn't found, or <code>null</code> otherwise.</returns>
 public virtual T Lookup(CodeSequenceMacro codeSequence)
 {
     return(Lookup(codeSequence, false));
 }
 /// <summary>
 /// Constructs a new species.
 /// </summary>
 /// <param name="codeSequence">The code sequence attributes macro.</param>
 /// <exception cref="ArgumentException">Thrown if <paramref name="codeSequence.CodingSchemeDesignator"/> or <paramref name="codeSequence.CodeValue"/> are <code>null</code> or empty.</exception>
 public Species(CodeSequenceMacro codeSequence)
     : base(codeSequence.CodingSchemeDesignator, codeSequence.CodingSchemeVersion, codeSequence.CodeValue, codeSequence.CodeMeaning)
 {
 }
        public IImageProperty[] GetProperties(IPresentationImage image)
        {
            List <IImageProperty> properties = new List <IImageProperty>();

            if (image != null && image.ParentDisplaySet != null)
            {
                IImageViewer viewer = image.ImageViewer;
                if (viewer != null)
                {
                    IDicomDisplaySetDescriptor descriptor = image.ParentDisplaySet.Descriptor as IDicomDisplaySetDescriptor;
                    if (descriptor != null && descriptor.SourceSeries != null)
                    {
                        string uid = descriptor.SourceSeries.SeriesInstanceUid;
                        if (!String.IsNullOrEmpty(uid))
                        {
                            StudyTree studyTree       = viewer.StudyTree;
                            Series    keyObjectSeries = studyTree.GetSeries(uid);
                            if (keyObjectSeries != null && keyObjectSeries.Sops.Count > 0)
                            {
                                Sop keyObjectSop = keyObjectSeries.Sops[0];
                                if (keyObjectSop.SopClassUid == SopClass.KeyObjectSelectionDocumentStorageUid)
                                {
                                    KeyObjectSelectionDocumentIod iod       = new KeyObjectSelectionDocumentIod(keyObjectSop);
                                    SrDocumentContentModuleIod    content   = iod.SrDocumentContent;
                                    GeneralEquipmentModuleIod     equipment = iod.GeneralEquipment;

                                    if (content != null)
                                    {
                                        string            codeValue       = "";
                                        CodeSequenceMacro conceptSequence = content.ConceptNameCodeSequence;
                                        if (conceptSequence != null)
                                        {
                                            KeyObjectSelectionDocumentTitle documentTitle = KeyObjectSelectionDocumentTitleContextGroup.LookupTitle(conceptSequence);
                                            if (documentTitle != null)
                                            {
                                                codeValue = documentTitle.ToString();
                                            }
                                        }

                                        string             documentDescription = "";
                                        IContentSequence[] contentSequences    = content.ContentSequence ?? new IContentSequence[0];
                                        for (int i = contentSequences.Length - 1; i >= 0; --i)
                                        {
                                            IContentSequence  contentSequence = contentSequences[i];
                                            CodeSequenceMacro sequenceMacro   = contentSequence.ConceptNameCodeSequence;
                                            if (sequenceMacro != null && sequenceMacro.CodeValue == KeyObjectSelectionCodeSequences.KeyObjectDescription.CodeValue)
                                            {
                                                documentDescription = contentSequence.TextValue;
                                                break;
                                            }
                                        }

                                        properties.Add(
                                            new ImageProperty("KeyImageDocumentTitle",
                                                              SR.CategoryKeyImageSeries,
                                                              SR.NameKeyImageDocumentTitle,
                                                              SR.DescriptionKeyImageDocumentTitle,
                                                              codeValue));

                                        properties.Add(
                                            new ImageProperty("KeyImageDocumentDescription",
                                                              SR.CategoryKeyImageSeries,
                                                              SR.NameKeyImageDocumentDescription,
                                                              SR.DescriptionKeyImageDocumentDescription,
                                                              documentDescription));

                                        properties.Add(
                                            new ImageProperty("KeyImageEquipmentManufacturer",
                                                              SR.CategoryKeyImageEquipment,
                                                              SR.NameManufacturer,
                                                              SR.DescriptionManufacturer,
                                                              equipment.Manufacturer ?? ""));
                                        properties.Add(
                                            new ImageProperty("KeyImageEquipmentManufacturersModelName",
                                                              SR.CategoryKeyImageEquipment,
                                                              SR.NameManufacturersModelName,
                                                              SR.DescriptionManufacturersModelName,
                                                              equipment.ManufacturersModelName ?? ""));
                                        properties.Add(
                                            new ImageProperty("KeyImageEquipmentSoftwareVersions",
                                                              SR.CategoryKeyImageEquipment,
                                                              SR.NameSoftwareVersions,
                                                              SR.DescriptionSoftwareVersions,
                                                              equipment.SoftwareVersions ?? ""));
                                    }
                                }
                            }
                        }
                    }
                }
            }

            return(properties.ToArray());
        }
Esempio n. 20
0
 public static MixedBreeds LookupTitle(CodeSequenceMacro codeSequence)
 {
     return(Instance.Lookup(codeSequence));
 }
Esempio n. 21
0
 public T Parse(CodeSequenceMacro codeSequence)
 {
     return(this.Parse(codeSequence, false));
 }
Esempio n. 22
0
 public void Apply(T value, CodeSequenceMacro codeSequence)
 {
     value.ApplyToCodeSequence(codeSequence);
 }
Esempio n. 23
0
 public static BreedRegistry LookupTitle(CodeSequenceMacro codeSequence)
 {
     return(Instance.Lookup(codeSequence));
 }
Esempio n. 24
0
 /// <summary>
 /// Constructs a new code.
 /// </summary>
 /// <param name="codeSequence">The code sequence attributes macro.</param>
 /// <exception cref="ArgumentException">Thrown if <paramref name="codeSequence.CodingSchemeDesignator"/> or <paramref name="codeSequence.CodeValue"/> are <code>null</code> or empty.</exception>
 public SourceImagePurposesOfReference(CodeSequenceMacro codeSequence)
     : base(codeSequence.CodingSchemeDesignator, codeSequence.CodingSchemeVersion, codeSequence.CodeValue, codeSequence.CodeMeaning)
 {
 }
Esempio n. 25
0
        public override StudyItemList Query(QueryParameters queryParams, IApplicationEntity server)
        {
            Platform.CheckForNullReference(queryParams, "queryParams");

            //.NET strings are unicode, therefore, so is all the query data.
            const string utf8       = "ISO_IR 192";
            var          collection = new DicomAttributeCollection {
                SpecificCharacterSet = utf8
            };

            collection[DicomTags.SpecificCharacterSet].SetStringValue(utf8);

            collection[DicomTags.QueryRetrieveLevel].SetStringValue("STUDY");
            collection[DicomTags.PatientId].SetStringValue(queryParams["PatientId"]);
            collection[DicomTags.AccessionNumber].SetStringValue(queryParams["AccessionNumber"]);
            collection[DicomTags.PatientsName].SetStringValue(queryParams["PatientsName"]);
            collection[DicomTags.ReferringPhysiciansName].SetStringValue(queryParams["ReferringPhysiciansName"]);
            collection[DicomTags.StudyDate].SetStringValue(queryParams["StudyDate"]);
            collection[DicomTags.StudyTime].SetStringValue("");
            collection[DicomTags.StudyDescription].SetStringValue(queryParams["StudyDescription"]);
            collection[DicomTags.PatientsBirthDate].SetStringValue("");
            collection[DicomTags.ModalitiesInStudy].SetStringValue(queryParams["ModalitiesInStudy"]);
            collection[DicomTags.StudyInstanceUid].SetStringValue(queryParams["StudyInstanceUid"]);
            collection[DicomTags.NumberOfStudyRelatedInstances].SetStringValue("");
            collection[DicomTags.InstanceAvailability].SetEmptyValue();             // must not be included in request

            collection[DicomTags.PatientSpeciesDescription].SetStringValue(GetString(queryParams, "PatientSpeciesDescription"));
            var codeValue   = GetString(queryParams, "PatientSpeciesCodeSequenceCodeValue");
            var codeMeaning = GetString(queryParams, "PatientSpeciesCodeSequenceCodeMeaning");

            if (codeValue != null || codeMeaning != null)
            {
                var codeSequenceMacro = new CodeSequenceMacro
                {
                    CodingSchemeDesignator = "",
                    CodeValue   = codeValue,
                    CodeMeaning = codeMeaning
                };
                collection[DicomTags.PatientSpeciesCodeSequence].AddSequenceItem(codeSequenceMacro.DicomSequenceItem);
            }

            collection[DicomTags.PatientBreedDescription].SetStringValue(GetString(queryParams, "PatientBreedDescription"));
            codeValue   = GetString(queryParams, "PatientBreedCodeSequenceCodeValue");
            codeMeaning = GetString(queryParams, "PatientBreedCodeSequenceCodeMeaning");
            if (codeValue != null || codeMeaning != null)
            {
                var codeSequenceMacro = new CodeSequenceMacro
                {
                    CodingSchemeDesignator = "",
                    CodeValue   = codeValue,
                    CodeMeaning = codeMeaning
                };
                collection[DicomTags.PatientBreedCodeSequence].AddSequenceItem(codeSequenceMacro.DicomSequenceItem);
            }

            collection[DicomTags.ResponsiblePerson].SetStringValue(GetString(queryParams, "ResponsiblePerson"));
            collection[DicomTags.ResponsiblePersonRole].SetStringValue("");
            collection[DicomTags.ResponsibleOrganization].SetStringValue(GetString(queryParams, "ResponsibleOrganization"));

            var localServer   = ServerDirectory.GetLocalServer();
            var studyItemList = new StudyItemList();

            using (var context = new DataAccessContext())
            {
                foreach (DicomAttributeCollection result in context.GetStudyStoreQuery().Query(collection))
                {
                    var item = new StudyItem(result[DicomTags.StudyInstanceUid].ToString(), localServer);
                    item.SpecificCharacterSet          = result.SpecificCharacterSet;
                    item.PatientId                     = result[DicomTags.PatientId].ToString();
                    item.PatientsName                  = new PersonName(result[DicomTags.PatientsName].ToString());
                    item.ReferringPhysiciansName       = new PersonName(result[DicomTags.ReferringPhysiciansName].GetString(0, ""));
                    item.PatientsBirthDate             = result[DicomTags.PatientsBirthDate].ToString();
                    item.StudyDate                     = result[DicomTags.StudyDate].ToString();
                    item.StudyTime                     = result[DicomTags.StudyTime].ToString();
                    item.StudyDescription              = result[DicomTags.StudyDescription].ToString();
                    item.ModalitiesInStudy             = DicomStringHelper.GetStringArray(result[DicomTags.ModalitiesInStudy].ToString());
                    item.AccessionNumber               = result[DicomTags.AccessionNumber].ToString();
                    item.NumberOfStudyRelatedInstances = result[DicomTags.NumberOfStudyRelatedInstances].GetInt32(0, 0);
                    item.InstanceAvailability          = result[DicomTags.InstanceAvailability].GetString(0, "");
                    if (String.IsNullOrEmpty(item.InstanceAvailability))
                    {
                        item.InstanceAvailability = "ONLINE";
                    }

                    item.PatientSpeciesDescription = result[DicomTags.PatientSpeciesDescription].GetString(0, "");
                    var patientSpeciesCodeSequence = result[DicomTags.PatientSpeciesCodeSequence];
                    if (!patientSpeciesCodeSequence.IsNull && patientSpeciesCodeSequence.Count > 0)
                    {
                        var codeSequenceMacro = new CodeSequenceMacro(((DicomSequenceItem[])result[DicomTags.PatientSpeciesCodeSequence].Values)[0]);
                        item.PatientSpeciesCodeSequenceCodingSchemeDesignator = codeSequenceMacro.CodingSchemeDesignator;
                        item.PatientSpeciesCodeSequenceCodeValue   = codeSequenceMacro.CodeValue;
                        item.PatientSpeciesCodeSequenceCodeMeaning = codeSequenceMacro.CodeMeaning;
                    }

                    item.PatientBreedDescription = result[DicomTags.PatientBreedDescription].GetString(0, "");
                    var patientBreedCodeSequence = result[DicomTags.PatientBreedCodeSequence];
                    if (!patientBreedCodeSequence.IsNull && patientBreedCodeSequence.Count > 0)
                    {
                        var codeSequenceMacro = new CodeSequenceMacro(((DicomSequenceItem[])result[DicomTags.PatientBreedCodeSequence].Values)[0]);
                        item.PatientBreedCodeSequenceCodingSchemeDesignator = codeSequenceMacro.CodingSchemeDesignator;
                        item.PatientBreedCodeSequenceCodeValue   = codeSequenceMacro.CodeValue;
                        item.PatientBreedCodeSequenceCodeMeaning = codeSequenceMacro.CodeMeaning;
                    }

                    item.ResponsiblePerson       = new PersonName(result[DicomTags.ResponsiblePerson].GetString(0, ""));
                    item.ResponsiblePersonRole   = result[DicomTags.ResponsiblePersonRole].GetString(0, "");
                    item.ResponsibleOrganization = result[DicomTags.ResponsibleOrganization].GetString(0, "");

                    studyItemList.Add(item);
                }
            }

            AuditHelper.LogQueryIssued(null, null, EventSource.CurrentUser, EventResult.Success,
                                       SopClass.StudyRootQueryRetrieveInformationModelFindUid, collection);

            return(studyItemList);
        }
Esempio n. 26
0
        public override StudyItemList Query(QueryParameters queryParams, IApplicationEntity targetServer)
        {
            Platform.CheckForNullReference(queryParams, "queryParams");
            Platform.CheckForNullReference(targetServer, "targetServer");

            var selectedServer = targetServer.ToServiceNode();

            //.NET strings are unicode, therefore, so is all the query data.
            const string utf8 = "ISO_IR 192";
            var          requestCollection = new DicomAttributeCollection {
                SpecificCharacterSet = utf8
            };

            requestCollection[DicomTags.SpecificCharacterSet].SetStringValue(utf8);

            requestCollection[DicomTags.QueryRetrieveLevel].SetStringValue("STUDY");
            requestCollection[DicomTags.StudyInstanceUid].SetStringValue("");

            requestCollection[DicomTags.PatientId].SetStringValue(queryParams["PatientId"]);
            requestCollection[DicomTags.AccessionNumber].SetStringValue(queryParams["AccessionNumber"]);
            requestCollection[DicomTags.PatientsName].SetStringValue(queryParams["PatientsName"]);
            requestCollection[DicomTags.ReferringPhysiciansName].SetStringValue(queryParams["ReferringPhysiciansName"]);
            requestCollection[DicomTags.StudyDate].SetStringValue(queryParams["StudyDate"]);
            requestCollection[DicomTags.StudyTime].SetStringValue("");
            requestCollection[DicomTags.StudyDescription].SetStringValue(queryParams["StudyDescription"]);
            requestCollection[DicomTags.PatientsBirthDate].SetStringValue("");
            requestCollection[DicomTags.ModalitiesInStudy].SetStringValue(queryParams["ModalitiesInStudy"]);
            requestCollection[DicomTags.NumberOfStudyRelatedInstances].SetStringValue("");
            requestCollection[DicomTags.InstanceAvailability].SetEmptyValue();             // must not be included in request

            requestCollection[DicomTags.PatientSpeciesDescription].SetStringValue(GetString(queryParams, "PatientSpeciesDescription"));
            var codeValue   = GetString(queryParams, "PatientSpeciesCodeSequenceCodeValue");
            var codeMeaning = GetString(queryParams, "PatientSpeciesCodeSequenceCodeMeaning");

            if (codeValue != null || codeMeaning != null)
            {
                var codeSequenceMacro = new CodeSequenceMacro
                {
                    CodingSchemeDesignator = "",
                    CodeValue   = codeValue,
                    CodeMeaning = codeMeaning
                };
                requestCollection[DicomTags.PatientSpeciesCodeSequence].AddSequenceItem(codeSequenceMacro.DicomSequenceItem);
            }

            requestCollection[DicomTags.PatientBreedDescription].SetStringValue(GetString(queryParams, "PatientBreedDescription"));
            codeValue   = GetString(queryParams, "PatientBreedCodeSequenceCodeValue");
            codeMeaning = GetString(queryParams, "PatientBreedCodeSequenceCodeMeaning");
            if (codeValue != null || codeMeaning != null)
            {
                var codeSequenceMacro = new CodeSequenceMacro
                {
                    CodingSchemeDesignator = "",
                    CodeValue   = codeValue,
                    CodeMeaning = codeMeaning
                };
                requestCollection[DicomTags.PatientBreedCodeSequence].AddSequenceItem(codeSequenceMacro.DicomSequenceItem);
            }

            requestCollection[DicomTags.ResponsiblePerson].SetStringValue(GetString(queryParams, "ResponsiblePerson"));
            requestCollection[DicomTags.ResponsiblePersonRole].SetStringValue("");
            requestCollection[DicomTags.ResponsibleOrganization].SetStringValue(GetString(queryParams, "ResponsibleOrganization"));

            IList <DicomAttributeCollection> results = Query(selectedServer, requestCollection);

            StudyItemList studyItemList = new StudyItemList();

            foreach (DicomAttributeCollection result in results)
            {
                StudyItem item = new StudyItem(result[DicomTags.StudyInstanceUid].GetString(0, ""), selectedServer);

                //TODO: add DicomField attributes to the StudyItem class (implement typeconverter for PersonName class).
                item.PatientsBirthDate       = result[DicomTags.PatientsBirthDate].GetString(0, "");
                item.AccessionNumber         = result[DicomTags.AccessionNumber].GetString(0, "");
                item.StudyDescription        = result[DicomTags.StudyDescription].GetString(0, "");
                item.StudyDate               = result[DicomTags.StudyDate].GetString(0, "");
                item.StudyTime               = result[DicomTags.StudyTime].GetString(0, "");
                item.PatientId               = result[DicomTags.PatientId].GetString(0, "");
                item.PatientsName            = new PersonName(result[DicomTags.PatientsName].GetString(0, ""));
                item.ReferringPhysiciansName = new PersonName(result[DicomTags.ReferringPhysiciansName].GetString(0, ""));
                item.ModalitiesInStudy       = DicomStringHelper.GetStringArray(result[DicomTags.ModalitiesInStudy].ToString());
                DicomAttribute attribute = result[DicomTags.NumberOfStudyRelatedInstances];
                if (!attribute.IsEmpty && !attribute.IsNull)
                {
                    item.NumberOfStudyRelatedInstances = attribute.GetInt32(0, 0);
                }

                item.SpecificCharacterSet = result.SpecificCharacterSet;
                item.InstanceAvailability = result[DicomTags.InstanceAvailability].GetString(0, "");
                if (String.IsNullOrEmpty(item.InstanceAvailability))
                {
                    item.InstanceAvailability = "ONLINE";
                }

                item.PatientSpeciesDescription = result[DicomTags.PatientSpeciesDescription].GetString(0, "");
                var patientSpeciesCodeSequence = result[DicomTags.PatientSpeciesCodeSequence];
                if (!patientSpeciesCodeSequence.IsNull && patientSpeciesCodeSequence.Count > 0)
                {
                    var codeSequenceMacro = new CodeSequenceMacro(((DicomSequenceItem[])result[DicomTags.PatientSpeciesCodeSequence].Values)[0]);
                    item.PatientSpeciesCodeSequenceCodingSchemeDesignator = codeSequenceMacro.CodingSchemeDesignator;
                    item.PatientSpeciesCodeSequenceCodeValue   = codeSequenceMacro.CodeValue;
                    item.PatientSpeciesCodeSequenceCodeMeaning = codeSequenceMacro.CodeMeaning;
                }

                item.PatientBreedDescription = result[DicomTags.PatientBreedDescription].GetString(0, "");
                var patientBreedCodeSequence = result[DicomTags.PatientBreedCodeSequence];
                if (!patientBreedCodeSequence.IsNull && patientBreedCodeSequence.Count > 0)
                {
                    var codeSequenceMacro = new CodeSequenceMacro(((DicomSequenceItem[])result[DicomTags.PatientBreedCodeSequence].Values)[0]);
                    item.PatientBreedCodeSequenceCodingSchemeDesignator = codeSequenceMacro.CodingSchemeDesignator;
                    item.PatientBreedCodeSequenceCodeValue   = codeSequenceMacro.CodeValue;
                    item.PatientBreedCodeSequenceCodeMeaning = codeSequenceMacro.CodeMeaning;
                }

                item.ResponsiblePerson       = new PersonName(result[DicomTags.ResponsiblePerson].GetString(0, ""));
                item.ResponsiblePersonRole   = result[DicomTags.ResponsiblePersonRole].GetString(0, "");
                item.ResponsibleOrganization = result[DicomTags.ResponsibleOrganization].GetString(0, "");
                studyItemList.Add(item);
            }

            AuditHelper.LogQueryIssued(selectedServer.AETitle, selectedServer.ScpParameters.HostName, EventSource.CurrentUser,
                                       EventResult.Success, SopClass.StudyRootQueryRetrieveInformationModelFindUid,
                                       requestCollection);

            return(studyItemList);
        }
 public static Species LookupTitle(CodeSequenceMacro codeSequence)
 {
     return(Instance.Lookup(codeSequence));
 }
Esempio n. 28
0
 public static KeyObjectSelectionDocumentTitle LookupTitle(CodeSequenceMacro codeSequence)
 {
     return(Instance.Lookup(codeSequence));
 }
Esempio n. 29
0
 public static SourceImagePurposesOfReference LookupCode(CodeSequenceMacro codeSequence)
 {
     return(Instance.Lookup(codeSequence));
 }
Esempio n. 30
0
        /// <summary>
        /// Creates a single instance of a DerivationCodeSequence item. Does not modify the DerivationCodeSequence in the underlying collection.
        /// </summary>
        public CodeSequenceMacro CreateDerivationCodeSequence()
        {
            var iodBase = new CodeSequenceMacro(new DicomSequenceItem());

            return(iodBase);
        }