public static List <aim_dotnet.Annotation> LoadAimAnnotations(IEnumerable <string> studyInstanceUids) { List <aim_dotnet.Annotation> annotationList = new List <aim_dotnet.Annotation>(); using (aim_dotnet.DcmModel dcmModel = new aim_dotnet.DcmModel()) { foreach (string studyInstanceUID in studyInstanceUids) { AimInstanceDictionary aimInstanceDictionary = GetAimInstanceDictionaryForStudy(studyInstanceUID); List <AimSopInstanceInformation> annotationSopsInfo = aimInstanceDictionary[studyInstanceUID]; if (annotationSopsInfo == null) { continue; } foreach (AimSopInstanceInformation information in annotationSopsInfo) { try { annotationList.AddRange(dcmModel.ReadAnnotationsFromFile(information.InstanceFileName)); } catch (Exception ex) { Platform.Log(LogLevel.Error, ex); } } } } return(annotationList.Count > 0 ? annotationList : null); }
// Retrieves an informational dictionary for all available annotations for a given study public static AimInstanceDictionary GetAimInstanceDictionaryForStudy(string studyInstanceUID) { AimInstanceDictionary annotationDictionary = new AimInstanceDictionary(); StudyItemList studyAnnotations = RetrieveAnnotationsInformationForStudy(studyInstanceUID); // TODO - switch to using SR IOD when we have it if (studyAnnotations == null || studyAnnotations.Count == 0) { return(annotationDictionary); } using (IDataStoreReader reader = DataAccessLayer.GetIDataStoreReader()) { foreach (StudyItem studyItem in studyAnnotations) { ClearCanvas.Dicom.DataStore.Study study = reader.GetStudy(studyItem.StudyInstanceUid) as ClearCanvas.Dicom.DataStore.Study; if (study != null) { IEnumerable <ISeries> allSeries = study.GetSeries(); foreach (ISeries series in allSeries) { if (series != null && series.Modality == "SR") { IEnumerable <ISopInstance> sopInstances = series.GetSopInstances(); foreach (ISopInstance sopInstance in sopInstances) { if (sopInstance != null) { DicomUri fileUri = sopInstance.GetLocationUri(); if (fileUri.IsFile) { annotationDictionary.Add(study.StudyInstanceUid, series.SeriesInstanceUid, sopInstance.SopInstanceUid, fileUri.LocalDiskPath); } } } } } } } // TODO: // 1. Find and load all annotations (read-only?) // LocalDataStoreActivityMonitor.Instance. } return(annotationDictionary); }
public static AimInstanceDictionary GetAimInstanceDictionaryForStudy(string studyInstanceUID) { var annotationDictionary = new AimInstanceDictionary(); var studyAnnotations = RetrieveAnnotationsInformationForStudy(studyInstanceUID); if (studyAnnotations == null || studyAnnotations.Count == 0) { return(annotationDictionary); } using (var reader = DataAccessLayer.GetIDataStoreReader()) { foreach (var studyItem in studyAnnotations) { var study = reader.GetStudy(studyItem.StudyInstanceUid) as ClearCanvas.Dicom.DataStore.Study; if (study != null) { var allSeries = study.GetSeries(); foreach (var series in allSeries) { if (series != null && series.Modality == "SR") { var sopInstances = series.GetSopInstances(); foreach (var sopInstance in sopInstances) { if (sopInstance != null) { var fileUri = sopInstance.GetLocationUri(); if (fileUri.IsFile) { annotationDictionary.Add(study.StudyInstanceUid, series.SeriesInstanceUid, sopInstance.SopInstanceUid, fileUri.LocalDiskPath); } } } } } } } } return(annotationDictionary); }