// 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);
        }
Example #2
0
        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));
        }
Example #3
0
        private IPriceSeries CreateSeries(StockHandle stock, IEnumerable <SimplePrice> prices)
        {
            var seriesId = new SeriesIdentifier(
                new StockObjectIdentifier(stock),
                new ObjectDescriptor(Name));

            return(new PriceSeries(seriesId, prices));
        }
Example #4
0
        /// <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);
        }
Example #6
0
        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());
        }
Example #7
0
        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);
        }
Example #8
0
        /// <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();
                }
            }
        }
Example #10
0
        public IList <SeriesIdentifier> SeriesQuery(SeriesIdentifier queryCriteria)
        {
            QueryDelegate <SeriesIdentifier> query = (criteria, studyRootQuery) => studyRootQuery.SeriesQuery(criteria);

            return(new GenericQuery <SeriesIdentifier>(query, false).Query(queryCriteria));
        }
Example #11
0
        public IList <SeriesIdentifier> SeriesQuery(SeriesIdentifier criteria)
        {
            var entries = GetSeries(criteria);

            return(entries.Select(e => e.ToStoreEntry().Series).ToList());
        }
Example #12
0
 private IEnumerable <Series> GetSeries(SeriesIdentifier criteria)
 {
     return(GetSeries(new SeriesEntry {
         Series = criteria
     }));
 }
Example #13
0
 public IList <SeriesIdentifier> SeriesQuery(SeriesIdentifier queryCriteria)
 {
     throw new NotImplementedException();
 }
Example #14
0
        // 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);
        }