public static void WithSeries(this IEnumerable<CFindResponse> cFinds, DICOMSCU scu, Entity daemon) { var iods = cFinds.Where(r => r.Status == (ushort)Status.PENDING) .Where(r => r.HasData) .Where(r => r.Data.Elements.Any(e => e.Tag == TagHelper.STUDY_INSTANCE_UID)) .Where(r => !string.IsNullOrEmpty(r.Data.Elements.First(e => e.Tag == TagHelper.STUDY_INSTANCE_UID).DData as string)) .Select(r => r.GetIOD()) .ToList(); iods.ForEach(i=>i.QueryLevel = QueryLevel.SERIES); foreach (var iod in iods) { var req = new CFindRequest(iod, Root.STUDY); var seriesUids = scu.GetResponse(req, daemon) .Where(r => r.Status == (ushort)Status.PENDING) .Where(r => r.HasData) .Where(r => r.Data.Elements.Any(e => e.Tag == TagHelper.SERIES_INSTANCE_UID)) .Select(r => new { // Study = study, Series = r.Data.GetSelector().SeriesInstanceUID.Data, Modality = r.Data.GetSelector().Modality.Data }) .ToList(); System.Console.Write(""); } }
public List<SeriesResult> GetSeriesUids(List<StudyResult> studies) { List<SeriesResult> results = new List<SeriesResult>(); foreach (var study in studies) { var query = new CFindIOD(QueryLevel.SERIES) { PatientId = study.PatientId, StudyInstanceUID = study.StudyUid }; var req = new CFindRequest(query, Root.STUDY); var seriesUids = _scu.GetResponse(req, _scp) .Where(r => r.Status == (ushort)Status.PENDING) .Where(r => r.HasData) .Select(r => new SeriesResult() { PatientId = study.PatientId, StudyUid = study.StudyUid, SeriesUid = r.Data.GetSelector().SeriesInstanceUID.Data, Modality = r.Data.GetSelector().Modality.Data } ) .ToList(); results.AddRange(seriesUids); } return results; }
/// <summary> /// Creates a base C-Find response but more data needs to be supplied. See CFindService response methods /// </summary> /// <param name="req"></param> public CFindResponse(CFindRequest req, Status status) { AffectedSOPClassUID = req.AffectedSOPClassUID; CommandField = (ushort)C.C_FIND_RP; MessageIDBeingRespondedTo = req.MessageID; Status = (ushort)status; }
public List<StudyResult> GetStudyUids(string patientId) { var query = new CFindIOD(QueryLevel.STUDY) { PatientId = patientId }; var req = new CFindRequest(query, Root.STUDY); var studyUids = _scu.GetResponse(req, _scp) // Studies .Where(r => r.Status == (ushort)Status.PENDING) .Where(r => r.HasData) .ToList(); return studyUids.Select(r => new StudyResult() { PatientId = query.PatientId, StudyUid = r.Data.GetSelector().StudyInstanceUID.Data }) .ToList(); }
public IEnumerable<CFindResponse> GetResponse(CFindRequest cFind, Entity ae) { var client = new TcpClient(); client.Connect(IPAddress.Parse(ae.IpAddress), ae.Port); var assoc = new Association(this, client) { AeTitle = ae.AeTitle }; PDataMessenger.Send(cFind, assoc); List<CFindResponse> responses = new List<CFindResponse>(); EvilDICOM.Network.Services.DIMSEService.DIMSEResponseHandler<CFindResponse> action = null; action = (resp, asc) => { responses.Add(resp); if (resp.Status != (ushort)Status.PENDING) { this.DIMSEService.CFindResponseReceived -= action; } }; this.DIMSEService.CFindResponseReceived += action; assoc.Listen(); return responses; }