private static string ConvertListOfUidCriteria(string listOfUidCriteria, string columnName) { string uids = StringUtilities.Combine(DicomStringHelper.GetStringArray(listOfUidCriteria), ", ", delegate(string value) { return(String.Format("'{0}'", value)); }); return(String.Format("{0} in ( {1} )", columnName, uids)); }
public void TestStringArrayConverter() { string input = null; string[] output = DicomStringHelper.GetStringArray(input); Assert.AreEqual(output.Length, 0); input = ""; output = DicomStringHelper.GetStringArray(input); Assert.AreEqual(output.Length, 0); input = @"the\lazy\\brown\dog"; output = DicomStringHelper.GetStringArray(input); Assert.AreEqual(output[0], "the"); Assert.AreEqual(output[1], "lazy"); Assert.AreEqual(output[2], ""); Assert.AreEqual(output[3], "brown"); Assert.AreEqual(output[4], "dog"); input = @"\the\lazy\brown\dog"; output = DicomStringHelper.GetStringArray(input); Assert.AreEqual(output[0], ""); Assert.AreEqual(output[1], "the"); Assert.AreEqual(output[2], "lazy"); Assert.AreEqual(output[3], "brown"); Assert.AreEqual(output[4], "dog"); input = @"the\lazy\brown\dog\"; output = DicomStringHelper.GetStringArray(input); Assert.AreEqual(output[0], "the"); Assert.AreEqual(output[1], "lazy"); Assert.AreEqual(output[2], "brown"); Assert.AreEqual(output[3], "dog"); Assert.AreEqual(output[4], ""); }
/// <summary> /// Gets an enumeration of <see cref="VoiWindow"/>s defined in the specified data source. /// </summary> /// <param name="dataset">A DICOM data source.</param> /// <returns>An enumeration of <see cref="VoiWindow"/>s.</returns> public static IEnumerable <VoiWindow> GetWindows(IDicomAttributeProvider dataset) { string windowCenterValues = dataset[DicomTags.WindowCenter].ToString(); if (string.IsNullOrEmpty(windowCenterValues)) { yield break; } string windowWidthValues = dataset[DicomTags.WindowWidth].ToString(); if (string.IsNullOrEmpty(windowWidthValues)) { yield break; } string windowExplanationValues = dataset[DicomTags.WindowCenterWidthExplanation].ToString(); double[] windowCenters; DicomStringHelper.TryGetDoubleArray(windowCenterValues, out windowCenters); double[] windowWidths; DicomStringHelper.TryGetDoubleArray(windowWidthValues, out windowWidths); string[] windowExplanations = DicomStringHelper.GetStringArray(windowExplanationValues); foreach (VoiWindow window in GetWindows(windowCenters, windowWidths, windowExplanations)) { yield return(window); } }
/// <summary> /// Returns a delegate that will get the value of <paramref name="dicomTag"/> (all positions), /// from an <see cref="ImageSop"/> as an array of <see cref="string"/>s. /// </summary> public static FrameDataRetrieverDelegate <string[]> GetStringArrayRetriever(uint dicomTag) { return(delegate(Frame frame) { string value; value = frame.ParentImageSop[dicomTag].ToString(); return DicomStringHelper.GetStringArray(value ?? ""); }); }
/// <summary> /// Creates a <see cref="PatientOrientation"/> object from a dicom multi-valued string. /// </summary> /// <returns> /// Null if there are not exactly 2 parsed values in the input string. /// </returns> public static PatientOrientation FromString(string multiValuedString) { string[] values = DicomStringHelper.GetStringArray(multiValuedString); if (values != null && values.Length == 2) { return(new PatientOrientation(values[0], values[1])); } return(null); }
/// <summary> /// Parses a <see cref="PatientOrientation"/> from a DICOM multi-valued string. /// </summary> /// <param name="multiValuedString">Patient orientation, defined in orientation of rows and orientation of columns, separated by a backslash.</param> /// <param name="anatomicalOrientationType">The anatomical orientation type code.</param> /// <returns> /// NULL if there are not exactly 2 parsed values in the input string. /// </returns> public static PatientOrientation FromString(string multiValuedString, string anatomicalOrientationType) { if (string.IsNullOrEmpty(multiValuedString)) { return(null); } var values = DicomStringHelper.GetStringArray(multiValuedString); return(values != null && values.Length == 2 ? new PatientOrientation(values[0], values[1], anatomicalOrientationType) : null); }
public StudyEntry ToStoreEntry() { var entry = new StudyEntry { Study = new StudyRootStudyIdentifier(this) { InstanceAvailability = "ONLINE", RetrieveAE = ServerDirectory.GetLocalServer(), SpecificCharacterSet = SpecificCharacterSet }, Data = new StudyEntryData { DeleteTime = DeleteTime, InstitutionNamesInStudy = DicomStringHelper.GetStringArray(InstitutionNamesInStudy), SourceAETitlesInStudy = DicomStringHelper.GetStringArray(SourceAETitlesInStudy), StationNamesInStudy = DicomStringHelper.GetStringArray(StationNamesInStudy), StoreTime = StoreTime } }; return(entry); }
public void TestListFormatters() { string input = @"The\brown\dog\\jumped"; string result = DicomDataFormatHelper.StringListFormat(DicomStringHelper.GetStringArray(input)); Assert.AreEqual(result, "The,\nbrown,\ndog,\njumped"); input = @"Doe^John^^^"; result = DicomDataFormatHelper.PersonNameFormatter(new PersonName(input)); Assert.AreEqual(result, "Doe, John"); input = @"^John^^^"; result = DicomDataFormatHelper.PersonNameFormatter(new PersonName(input)); Assert.AreEqual(result, "John"); input = @"Doe^^^^"; result = DicomDataFormatHelper.PersonNameFormatter(new PersonName(input)); Assert.AreEqual(result, "Doe"); input = @"Doe^John^^^\Doe^Jane^^^"; result = DicomDataFormatHelper.PersonNameListFormatter(DicomStringHelper.GetPersonNameArray(input)); Assert.AreEqual(result, "Doe, John,\nDoe, Jane"); input = @"^John^^^\Doe^Jane^^^"; result = DicomDataFormatHelper.PersonNameListFormatter(DicomStringHelper.GetPersonNameArray(input)); Assert.AreEqual(result, "John,\nDoe, Jane"); input = @"^John^^^\Doe^^^^"; result = DicomDataFormatHelper.PersonNameListFormatter(DicomStringHelper.GetPersonNameArray(input)); Assert.AreEqual(result, "John,\nDoe"); input = @"^^^^\Doe^^^^"; result = DicomDataFormatHelper.PersonNameListFormatter(DicomStringHelper.GetPersonNameArray(input)); Assert.AreEqual(result, "Doe"); input = @"^^^^\^^^^"; result = DicomDataFormatHelper.PersonNameListFormatter(DicomStringHelper.GetPersonNameArray(input)); Assert.AreEqual(result, ""); }
public static string[] ToStringArray(object value, TypeConverter converter) { if (value == null) { return new string[] { } } ; if (value.GetType().IsArray) { Array array = value as Array; if (array == null) { return new string[] { } } ; string[] stringArray = new string[array.Length]; int i = 0; foreach (object arrayValue in array) { stringArray[i++] = ToString(arrayValue, converter); } return(stringArray); } else if (value is string) { //Assume strings are (potentially) multi-valued. If they're not, then this has no effect anyway. return(DicomStringHelper.GetStringArray(((string)value) ?? "")); } else { return(new string[] { ToString(value, converter) }); } } } }
// NOTE: this method is not bulletproof in the (very, very, very!) unusual case where there are // wildcards in the modalities in study criteria, but we still try to narrow down the result set // that is going to be post-filtered. private static string ConvertModalitiesInStudyCriteria(string criteria, string columnName) { //Modalities in study is a special case, where we allow list matching (not dicom compliant). string[] criteriaValues = DicomStringHelper.GetStringArray(criteria); StringBuilder builder = new StringBuilder(); int i = 0; foreach (string criteriaValue in criteriaValues) { criteria = criteriaValue; string filter = ""; if (!ContainsWildcardCharacters(criteria)) { filter = String.Format("{0} = '{1}' OR ", columnName, criteria); } else { ReplaceWildcardCharacters(ref criteria); filter = String.Format("{0} LIKE '{1}' OR ", columnName, criteria); } filter += String.Format(@"{0} LIKE '{1}\%' " + @" OR {0} LIKE '%\{1}' " + @" OR {0} LIKE '%\{1}\%' ", columnName, criteria); if (i++ > 0) { builder.Append(" OR "); } builder.AppendFormat(" ({0}) ", filter); } return(builder.ToString()); }
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); }
string[] IMultiValuedPropertyFilter <TDatabaseObject> .GetPropertyValues(TDatabaseObject item) { return(DicomStringHelper.GetStringArray(GetPropertyValue(item))); }
private static bool IsAttenuationCorrected(Sop sop) { var correctionTypes = DicomStringHelper.GetStringArray(sop[DicomTags.CorrectedImage].ToString().ToUpperInvariant()); return(Array.FindIndex(correctionTypes, s => s == _attenuationCorrectionCode) >= 0); }
protected override IEnumerable <Series> FilterResults(IEnumerable <Series> results) { var criterion = DicomStringHelper.GetStringArray(Criterion.ToString()); return(results.Where(s => criterion.Contains(s.SeriesInstanceUid))); }
private DicomAttributeCollection GetResult(T candidate) { DicomAttributeCollection result = new DicomAttributeCollection(); string specificCharacterSet = _getSpecificCharacterSetDelegate(candidate); if (!String.IsNullOrEmpty(specificCharacterSet)) { result.SpecificCharacterSet = specificCharacterSet; result[DicomTags.SpecificCharacterSet].SetStringValue(specificCharacterSet); } result.ValidateVrLengths = false; result.ValidateVrValues = false; foreach (QueryablePropertyInfo property in QueryableProperties <T> .GetProperties()) { string criteria = _queryCriteria[property.Path]; bool includeResult = property.IsUnique || property.IsHigherLevelUnique || criteria != null; if (!includeResult) { continue; } object propertyValue = property.ReturnProperty.GetValue(candidate, null); string[] testValues = Convert.ToStringArray(propertyValue, property.ReturnPropertyConverter); if (criteria == null) { criteria = ""; } bool isModalitiesInStudy = property.Path.Equals(DicomTags.ModalitiesInStudy); bool containsWildcards = ContainsWildcardCharacters(criteria); //special case, we post-filter modalities in study when it contains wildcards b/c the hql query won't //always produce exactly the right results. This will never happen anyway. bool query = !String.IsNullOrEmpty(criteria) && ((!property.IsHigherLevelUnique && property.PostFilterOnly) || (isModalitiesInStudy && containsWildcards)); if (query) { string[] criteriaValues; if (property.AllowListMatching) { criteriaValues = DicomStringHelper.GetStringArray(criteria); } else { criteriaValues = new string[] { criteria } }; //When something doesn't match, the candidate is not a match, and the result is filtered out. if (!AnyMatch(property, criteriaValues, testValues)) { return(null); } } string resultValue = DicomStringHelper.GetDicomStringArray(testValues); AddValueToResult(property.Path, resultValue, result); } return(result); }
internal void Initialize(DicomFile file) { DicomAttributeCollection sopInstanceDataset = file.DataSet; DicomAttribute attribute = sopInstanceDataset[DicomTags.StudyInstanceUid]; string datasetStudyUid = attribute.ToString(); if (!String.IsNullOrEmpty(StudyInstanceUid) && StudyInstanceUid != datasetStudyUid) { string message = String.Format("The study uid in the data set does not match this study's uid ({0} != {1}).", datasetStudyUid, StudyInstanceUid); throw new InvalidOperationException(message); } else { StudyInstanceUid = attribute.ToString(); } Platform.CheckForEmptyString(StudyInstanceUid, "StudyInstanceUid"); attribute = sopInstanceDataset[DicomTags.PatientId]; PatientId = attribute.ToString(); attribute = sopInstanceDataset[DicomTags.PatientsName]; PatientsName = new PersonName(attribute.ToString()); PatientsNameRaw = DicomImplementation.CharacterParser.EncodeAsIsomorphicString(PatientsName, sopInstanceDataset.SpecificCharacterSet); attribute = sopInstanceDataset[DicomTags.ReferringPhysiciansName]; ReferringPhysiciansName = new PersonName(attribute.ToString()); ReferringPhysiciansNameRaw = DicomImplementation.CharacterParser.EncodeAsIsomorphicString(ReferringPhysiciansName, sopInstanceDataset.SpecificCharacterSet); attribute = sopInstanceDataset[DicomTags.PatientsSex]; PatientsSex = attribute.ToString(); attribute = sopInstanceDataset[DicomTags.PatientsBirthDate]; PatientsBirthDateRaw = attribute.ToString(); attribute = sopInstanceDataset[DicomTags.StudyId]; StudyId = attribute.ToString(); attribute = sopInstanceDataset[DicomTags.AccessionNumber]; AccessionNumber = attribute.ToString(); attribute = sopInstanceDataset[DicomTags.StudyDescription]; StudyDescription = attribute.ToString(); attribute = sopInstanceDataset[DicomTags.StudyDate]; StudyDateRaw = attribute.ToString(); StudyDate = DateParser.Parse(StudyDateRaw); attribute = sopInstanceDataset[DicomTags.StudyTime]; StudyTimeRaw = attribute.ToString(); if (sopInstanceDataset.Contains(DicomTags.ProcedureCodeSequence)) { attribute = sopInstanceDataset[DicomTags.ProcedureCodeSequence]; if (!attribute.IsEmpty && !attribute.IsNull) { DicomSequenceItem sequence = ((DicomSequenceItem[])attribute.Values)[0]; ProcedureCodeSequenceCodeValue = sequence[DicomTags.CodeValue].ToString(); ProcedureCodeSequenceCodingSchemeDesignator = sequence[DicomTags.CodingSchemeDesignator].ToString(); } } attribute = sopInstanceDataset[DicomTags.SpecificCharacterSet]; SpecificCharacterSet = attribute.ToString(); string[] modalitiesInStudy = DicomStringHelper.GetStringArray(ModalitiesInStudy ?? ""); ModalitiesInStudy = DicomStringHelper.GetDicomStringArray( ComputeModalitiesInStudy(modalitiesInStudy, sopInstanceDataset[DicomTags.Modality].GetString(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 PatientAnnotationItemProvider() : base("AnnotationItemProviders.Dicom.Patient", new AnnotationResourceResolver(typeof(PatientAnnotationItemProvider).Assembly)) { _annotationItems = new List <IAnnotationItem>(); AnnotationResourceResolver resolver = new AnnotationResourceResolver(this); _annotationItems.Add ( new DicomAnnotationItem <string> ( "Dicom.Patient.EthnicGroup", resolver, FrameDataRetrieverFactory.GetStringRetriever(DicomTags.EthnicGroup), DicomDataFormatHelper.RawStringFormat ) ); _annotationItems.Add ( new DicomAnnotationItem <string> ( "Dicom.Patient.PatientComments", resolver, FrameDataRetrieverFactory.GetStringRetriever(DicomTags.PatientComments), DicomDataFormatHelper.RawStringFormat ) ); _annotationItems.Add ( new DicomAnnotationItem <string> ( "Dicom.Patient.PatientId", resolver, delegate(Frame frame) { return(frame.ParentImageSop.PatientId); }, DicomDataFormatHelper.RawStringFormat ) ); _annotationItems.Add ( new DicomAnnotationItem <string> ( "Dicom.Patient.OtherPatientIds", resolver, delegate(Frame frame) { var patientIds = new List <string>(); DicomAttribute attribute; if (frame.ParentImageSop.TryGetAttribute(DicomTags.OtherPatientIds, out attribute)) { patientIds.AddRange(DicomStringHelper.GetStringArray(attribute)); } if (frame.ParentImageSop.TryGetAttribute(DicomTags.OtherPatientIdsSequence, out attribute) && !attribute.IsEmpty && !attribute.IsNull) { var sqAttr = (DicomAttributeSQ)attribute; for (var i = 0; i < sqAttr.Count; i++) { var attr = sqAttr[i][DicomTags.PatientId]; if (attr != null && !string.IsNullOrEmpty(attr)) { patientIds.Add(attr); } } } return(DicomStringHelper.GetDicomStringArray(patientIds.Distinct())); }, DicomDataFormatHelper.RawStringFormat ) ); _annotationItems.Add ( new DicomAnnotationItem <string> ( "Dicom.Patient.PatientsBirthDate", resolver, delegate(Frame frame) { return(frame.ParentImageSop.PatientsBirthDate); }, DicomDataFormatHelper.DateFormat ) ); _annotationItems.Add ( new DicomAnnotationItem <string> ( "Dicom.Patient.PatientsBirthTime", resolver, FrameDataRetrieverFactory.GetStringRetriever(DicomTags.PatientsBirthTime), DicomDataFormatHelper.TimeFormat ) ); _annotationItems.Add ( new DicomAnnotationItem <PersonName> ( "Dicom.Patient.PatientsName", resolver, delegate(Frame frame) { return(frame.ParentImageSop.PatientsName); }, DicomDataFormatHelper.PersonNameFormatter ) ); _annotationItems.Add ( new DicomAnnotationItem <string> ( "Dicom.Patient.PatientsSex", resolver, delegate(Frame frame) { return(frame.ParentImageSop.PatientsSex); }, DicomDataFormatHelper.RawStringFormat ) ); _annotationItems.Add ( new DicomAnnotationItem <PersonName> ( "Dicom.Patient.ResponsiblePerson", resolver, delegate(Frame frame) { return(frame.ParentImageSop.ResponsiblePerson); }, DicomDataFormatHelper.PersonNameFormatter ) ); _annotationItems.Add ( new DicomAnnotationItem <string> ( "Dicom.Patient.ResponsibleOrganization", resolver, delegate(Frame frame) { return(frame.ParentImageSop.ResponsibleOrganization); }, DicomDataFormatHelper.RawStringFormat ) ); _annotationItems.Add ( new CodeSequenceAnnotationItem ( "Dicom.Patient.PatientSpecies", resolver, DicomTags.PatientSpeciesCodeSequence, DicomTags.PatientSpeciesDescription ) ); _annotationItems.Add ( new CodeSequenceAnnotationItem ( "Dicom.Patient.PatientBreed", resolver, DicomTags.PatientBreedCodeSequence, DicomTags.PatientBreedDescription ) ); }