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])); } }
/// <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; } }
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); }
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)); }
/// <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); }
/// <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)); }
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; }
/// <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()); }
public static MixedBreeds LookupTitle(CodeSequenceMacro codeSequence) { return(Instance.Lookup(codeSequence)); }
public T Parse(CodeSequenceMacro codeSequence) { return(this.Parse(codeSequence, false)); }
public void Apply(T value, CodeSequenceMacro codeSequence) { value.ApplyToCodeSequence(codeSequence); }
public static BreedRegistry LookupTitle(CodeSequenceMacro codeSequence) { return(Instance.Lookup(codeSequence)); }
/// <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) { }
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); }
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)); }
public static KeyObjectSelectionDocumentTitle LookupTitle(CodeSequenceMacro codeSequence) { return(Instance.Lookup(codeSequence)); }
public static SourceImagePurposesOfReference LookupCode(CodeSequenceMacro codeSequence) { return(Instance.Lookup(codeSequence)); }
/// <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); }