// takes meta data from the first series public ISignalSeries Create(IEnumerable <ISignalSeries> signals) { if (!signals.Any()) { return(SignalSeries.Null); } var dateSignalsMap = CreateDateSignalsMap(signals); int expectedSignalCount = signals.Count(); InterpolateMissingSignals(dateSignalsMap, expectedSignalCount); var combinedSignals = GenerateCombinedSignals(dateSignalsMap); var masterInputSeries = signals.FirstOrDefault(s => s.Reference.Identifier.Type.Name == DatumNames.Prices); if (masterInputSeries == null) { // then lets take the reference with max points var maxPoints = signals.Max(s => s.Count); masterInputSeries = signals.First(s => s.Count == maxPoints); // throw new Exception( "We could not find any signal series which seem to reference raw prices" ); } var identifier = new SeriesIdentifier(masterInputSeries.Identifier.Owner, new ObjectDescriptor("Combined"), signals.Select(s => s.Identifier).ToArray()); var series = new SignalSeries(masterInputSeries.Reference, identifier, combinedSignals); return(series); }
public IList <SeriesIdentifier> SeriesQuery(SeriesIdentifier queryCriteria) { CheckMinimumPermission(); Dictionary <string, SeriesIdentifier> combinedResults = new Dictionary <string, SeriesIdentifier>(); foreach (ImageServerQuery query in _partitionQueryList) { IList <SeriesIdentifier> list = Query(queryCriteria, query.SeriesQuery); foreach (SeriesIdentifier i in list) { //TODO (CR May 2010): should this be keyed on the RetrieveAE/UID as well? if (!combinedResults.ContainsKey(i.SeriesInstanceUid)) { if (!query.Partition.Enabled) { i.InstanceAvailability = "OFFLINE"; } combinedResults.Add(i.SeriesInstanceUid, i); } } } return(new List <SeriesIdentifier>(combinedResults.Values)); }
private IPriceSeries CreateSeries(StockHandle stock, IEnumerable <SimplePrice> prices) { var seriesId = new SeriesIdentifier( new StockObjectIdentifier(stock), new ObjectDescriptor(Name)); return(new PriceSeries(seriesId, prices)); }
/// <summary> /// Performs a SERIES level query. /// </summary> /// <exception cref="FaultException{DataValidationFault}">Thrown when some part of the data in the request is poorly formatted.</exception> /// <exception cref="FaultException{QueryFailedFault}">Thrown when the query fails.</exception> public IList <SeriesIdentifier> SeriesQuery(SeriesIdentifier queryCriteria) { var results = _real.SeriesQuery(queryCriteria); AuditHelper.LogQueryIssued(_remoteServer.AETitle, _remoteServer.ScpParameters.HostName, EventSource.CurrentUser, EventResult.Success, SopClass.StudyRootQueryRetrieveInformationModelFindUid, queryCriteria.ToDicomAttributeCollection()); return(results); }
private static ISeriesIdentifier GetSeriesIdentifier(IDicomAttributeProvider dicomAttributeProvider) { var identifier = new SeriesIdentifier(); identifier.Modality = dicomAttributeProvider[DicomTags.Modality].ToString(); identifier.SeriesDescription = dicomAttributeProvider[DicomTags.SeriesDescription].ToString(); identifier.SeriesInstanceUid = dicomAttributeProvider[DicomTags.SeriesInstanceUid].ToString(); identifier.SeriesNumber = dicomAttributeProvider[DicomTags.SeriesNumber].GetInt32(0, 0); identifier.StudyInstanceUid = dicomAttributeProvider[DicomTags.StudyInstanceUid].ToString(); return(identifier); }
public System.Collections.Generic.IList <SeriesIdentifier> SeriesQuery(SeriesIdentifier queryCriteria) { var criteria = new SeriesEntry { Series = queryCriteria }; var result = Real.GetSeriesEntries(new GetSeriesEntriesRequest { Criteria = criteria }); return(result.SeriesEntries.Select(e => e.Series).ToList()); }
public IList <SeriesIdentifier> LocateSeriesByStudy(string studyInstanceUid, out LocateFailureInfo[] failures) { Platform.CheckForEmptyString(studyInstanceUid, "studyInstanceUid"); var criteria = new SeriesIdentifier { StudyInstanceUid = studyInstanceUid }; var result = LocateSeries(new LocateSeriesRequest { Criteria = criteria }); failures = result.Failures.ToArray(); return(result.Series); }
/// <summary> /// Validates this image detail for Image Details /// </summary> /// <param name="path">The path to this object as a string</param> /// <param name="messages">the validation messages, these may be added to within this method</param> public void Validate(string path, List <ValidationMessage> messages) { var validationBuilder = new ValidationBuilder(path, messages); if (SeriesIdentifier != null) { SeriesIdentifier.Validate(validationBuilder.Path + "ImageIdentifier", messages); } if (ImageIdentifier != null) { ImageIdentifier.Validate(validationBuilder.Path + "ImageIdentifier", messages); } if (ImageViewName != null) { ImageViewName.Validate(validationBuilder.Path + "ImageViewName", messages); } if (Image != null) { Image.Validate(validationBuilder.Path + "Image", messages); } }
private void LoadNewSeries(List <string> changedStudyInstanceUids) { const string segmentationModality = "SEG"; foreach (string studyInstanceUid in changedStudyInstanceUids) { Study loadedStudy = ImageViewer.StudyTree.GetStudy(studyInstanceUid); if (loadedStudy == null) { continue; // the given study is not loaded in this ImageViewer } // Query for new segmentation SOP Instances for the given study var seriesIdentifier = new SeriesIdentifier { StudyInstanceUid = studyInstanceUid, Modality = segmentationModality }; var seriesEntryRequest = new GetSeriesEntriesRequest { Criteria = new SeriesEntry { Series = seriesIdentifier } }; List <SeriesEntry> entries = null; Platform.GetService <IStudyStoreQuery>( s => entries = s.GetSeriesEntries(seriesEntryRequest) .SeriesEntries.Where( entry => loadedStudy.Series.All(series => series.SeriesInstanceUid != entry.Series.SeriesInstanceUid)) .ToList()); // Get all unique AE Titles for the study. Can study have more than one? // We only need to query each AETitle once, or there will be duplicates/errors. List <IDicomServiceNode> studyAes = (from seriesEntry in entries where seriesEntry != null select seriesEntry.Series.RetrieveAE).GroupBy ( ae => ae.AETitle).Select(ae1 => ae1.First()).OfType <IDicomServiceNode>().ToList(); if (!studyAes.Any()) { continue; } var reallyUpdatedStudies = new HashSet <string>(); foreach (IDicomServiceNode studyAe in studyAes) { IStudyLoader studyLoader; try { studyLoader = studyAe.GetService <IStudyLoader>(); } catch (Exception ex) { //Platform.Log(LogLevel.Error, ex, "Cannot get study loader", studyAe); throw new Exception("Cannot get study loader", ex); } int numberOfSops = studyLoader.Start(new StudyLoaderArgs(studyInstanceUid, null, new StudyLoaderOptions(true))); // Load new segmentation SOP Instances if (numberOfSops > 0) { for (int i = 0; i < numberOfSops; i++) { Sop sop = studyLoader.LoadNextSop(); if (sop != null && sop.Modality == segmentationModality) { try { if (ImageViewer.StudyTree.AddSop(sop)) { SegmentationDocument segmentationDocument = new SegmentationDeserializer(sop).DeserializeSegmenationDocument(); if (segmentationDocument != null) { foreach (Seg seg in segmentationDocument.Segs) { IPresentationImage segPresentationImage = null; if (seg.ImageSeriesUid == null) { if (seg.SegmentImageData != null && seg.SegmentImageData.SegmentFrameData != null && seg.SegmentImageData.SegmentFrameData.Count > 0) { foreach ( IImageBox imageBox in ImageViewer.PhysicalWorkspace.ImageBoxes.Where( imageBox => imageBox != null)) { if (imageBox.DisplaySet != null) { segPresentationImage = SegmentationGraphicsHelpers. PresentationImageFromPositionOrientation( seg.SegmentImageData.SegmentFrameData[0]. ImagePositionPatient, seg.SegmentImageData.SegmentFrameData[0]. ImageOrientationPatient, imageBox.DisplaySet, seg.SegmentImageData.FrameOfReferenceUid); } if (segPresentationImage != null) { break; } } } } else { segPresentationImage = GetFirstPresentationImageForSeries(sop.StudyInstanceUid, seg.ImageSeriesUid); } if (segPresentationImage == null) { Platform.Log(LogLevel.Info, "Failed to find a series and image to display a segmentation frame on (SOP Instance UID={0}, Label = {1}) (New)", segmentationDocument.SopInstanceUid, seg.Label); } else { SegmentationGraphicsHelpers.CreateSeriesGraphicsForSeg( segPresentationImage, seg, segmentationDocument, sop.DataSource as IDicomMessageSopDataSource); reallyUpdatedStudies.Add(studyInstanceUid); } var sopProvider = segPresentationImage as ISopProvider; if (sopProvider != null) { AddSegmentationMenuInfo(segmentationDocument, seg, sopProvider.Sop); } } } } else { sop.Dispose(); } } catch (SopValidationException ex) { Platform.Log(LogLevel.Error, ex, "Failed to add newly loaded Segmentation SOP to the StudyTree (studyInstanceUid={0}; SOPInstaceUID={1})", sop.StudyInstanceUid, sop.SopInstanceUid); sop.Dispose(); } } else { sop.Dispose(); } } } } // Update component, if present if (reallyUpdatedStudies.Count > 0) { UpdateSegmentationTreeInComponent(); } } }
public IList <SeriesIdentifier> SeriesQuery(SeriesIdentifier queryCriteria) { QueryDelegate <SeriesIdentifier> query = (criteria, studyRootQuery) => studyRootQuery.SeriesQuery(criteria); return(new GenericQuery <SeriesIdentifier>(query, false).Query(queryCriteria)); }
public IList <SeriesIdentifier> SeriesQuery(SeriesIdentifier criteria) { var entries = GetSeries(criteria); return(entries.Select(e => e.ToStoreEntry().Series).ToList()); }
private IEnumerable <Series> GetSeries(SeriesIdentifier criteria) { return(GetSeries(new SeriesEntry { Series = criteria })); }
public IList <SeriesIdentifier> SeriesQuery(SeriesIdentifier queryCriteria) { throw new NotImplementedException(); }
// Loads annotations from local storage private List <IAimDocumentInstance> LoadLocalAimDocumentsForStudy(string studyInstanceUid) { var seriesIdentifier = new SeriesIdentifier { StudyInstanceUid = studyInstanceUid, Modality = AimManager.AimModality }; var seriesEntryRequest = new GetSeriesEntriesRequest { Criteria = new SeriesEntry { Series = seriesIdentifier } }; IList <SeriesEntry> entries = null; Platform.GetService <IStudyStoreQuery>(s => entries = s.GetSeriesEntries(seriesEntryRequest).SeriesEntries); var instanceToAimFileInfoMap = new Dictionary <string, AimFileInfo>(); // Get all unique AE Titles for the study. Can study have more than one? // We only need to query each AETitle once, or there will be duplicates/errors. var studyAes = (from seriesEntry in entries where seriesEntry != null select seriesEntry.Series.RetrieveAE).GroupBy(ae => ae.AETitle).Select(ae1 => ae1.First()).OfType <IDicomServiceNode>().ToList(); if (!studyAes.Any()) { Platform.Log(LogLevel.Debug, "Study ({0}} has no SR (AIM Annotations) objects", studyInstanceUid); return(null); } foreach (var studyAe in studyAes) { IStudyLoader studyLoader; try { studyLoader = studyAe.GetService <IStudyLoader>(); } catch (Exception ex) { throw new AimManagerException("Cannot get study loader", ex); } int numberOfSops = studyLoader.Start(new StudyLoaderArgs(studyInstanceUid, null, new StudyLoaderOptions(true))); for (int i = 0; i < numberOfSops; i++) { using (var sop = studyLoader.LoadNextSop()) { if (sop != null && sop.Modality == AimManager.AimModality) { var localSopDataSource = sop.DataSource as ILocalSopDataSource; if (localSopDataSource != null) { var filePathName = localSopDataSource.Filename; switch (AimManager.GetAimVersionFromSop(sop)) { case AimVersion.AimVersion3: instanceToAimFileInfoMap.Add(filePathName, new AimFileInfo(AimVersion.AimVersion3, sop.StudyInstanceUid, sop.SeriesInstanceUid, sop.SopInstanceUid)); break; case AimVersion.AimVersion4: instanceToAimFileInfoMap.Add(filePathName, new AimFileInfo(AimVersion.AimVersion4, sop.StudyInstanceUid, sop.SeriesInstanceUid, sop.SopInstanceUid)); break; } } } } } } if (instanceToAimFileInfoMap.Any()) { var aimDocumentInstances = new List <IAimDocumentInstance>(); var aim4Instances = instanceToAimFileInfoMap.Where(instance => instance.Value.AimVersion == AimVersion.AimVersion4).ToList(); if (aim4Instances.Any()) { using (var dcmHelper = new Aim4.Aim4NativeDcmHelper()) { foreach (var instanceInfo in aim4Instances) { var aimDocumentInstance = ReadAimDocumentFromDicomFile(dcmHelper, instanceInfo.Key, instanceInfo.Value.StudyInstanceUid, instanceInfo.Value.SeriesInstanceUid, instanceInfo.Value.SopInstanceUid); if (aimDocumentInstance != null) { aimDocumentInstances.Add(aimDocumentInstance); } } } } return(aimDocumentInstances.Any() ? aimDocumentInstances : null); } return(null); }