private void SearchList_SelectedIndexChanged(object sender, System.EventArgs e) { if (SearchList.SelectedItems.Count == 0) { return; } //clear series list SerList.Items.Clear(); //retrieve entire series history for patient string studyInsUID = SearchList.SelectedItems[0].SubItems[9].Text; QRRequestData request = new QRRequestData(QueryRetrieveLevel.StudyRoot, QRLevelType.Series); request.SearchTerms[DICOMTags.StudyInstanceUID] = studyInsUID; request.SearchTerms[DICOMTags.SeriesDescription] = ""; request.SearchTerms[DICOMTags.BodyPartExamined] = ""; request.SearchTerms[DICOMTags.SeriesDate] = ""; request.SearchTerms[DICOMTags.SeriesTime] = ""; request.SearchTerms[DICOMTags.SeriesNumber] = ""; request.SearchTerms[DICOMTags.NumberOfSeriesRelatedInstances] = ""; //see if it works.. DICOMFinder finder = new DICOMFinder(new NullLogger(), "", false); pendingFinders.Add(finder); finder.FindResponse += new DICOMFinder.FindResponseHandler(finder_FindResponse_Series); finder.Find(new ApplicationEntity(MyAE), TargetAE.ToAE(), request); }
/// <summary> /// Starts a C-FIND-RQ operation on a target entity. The request will be made, and all responses will be aggregated into /// a single response structure, which will be returned via the <see cref="FindResponse"/> callback. /// </summary> /// <param name="hostAE">An entity containing the AE title to represent the SCU.</param> /// <param name="remoteAE">An entity containing the SCP to attempt to contact.</param> /// <param name="requestData">A filled out <see cref="QRRequestData"/> class with the request information.</param> public void Find(ApplicationEntity hostAE, ApplicationEntity remoteAE, QRRequestData requestData) { findResponse = requestData.GenerateResponse(); FindRequest = requestData; if (requestData.QueryLevel == QueryRetrieveLevel.PatientRoot) { conn.AddPresentationContext(new PresentationContext(AbstractSyntaxes.PatientRootQueryRetrieveInformationModelFIND, new List <TransferSyntax> { TransferSyntaxes.ImplicitVRLittleEndian })); } else if (requestData.QueryLevel == QueryRetrieveLevel.PatientStudyOnly) { conn.AddPresentationContext(new PresentationContext(AbstractSyntaxes.PatientStudyOnlyQueryRetrieveInformationModelFINDRetired, new List <TransferSyntax> { TransferSyntaxes.ImplicitVRLittleEndian })); } else if (requestData.QueryLevel == QueryRetrieveLevel.StudyRoot) { conn.AddPresentationContext(new PresentationContext(AbstractSyntaxes.StudyRootQueryRetrieveInformationModelFIND, new List <TransferSyntax> { TransferSyntaxes.ImplicitVRLittleEndian })); } StartConnection(hostAE, remoteAE); }
void finder_FindResponse_Series(DICOMFinder finder, QRResponseData response) { pendingFinders.Remove(finder); if (response == null) { return; } foreach (Dictionary <uint, object> row in response.ResponseRows) { string SerDesc = ""; if (row.ContainsKey(DICOMTags.SeriesDescription)) { SerDesc = (string)row[DICOMTags.SeriesDescription]; //series desc } else if (row.ContainsKey(DICOMTags.BodyPartExamined)) { SerDesc = (string)row[DICOMTags.BodyPartExamined]; //bodypartexa } string SerTime = ValOrBlank(row, DICOMTags.SeriesTime); if (SerTime != "" && SerTime.Length >= 6) { SerTime = SerTime.Substring(0, 6); } string seriesInsUID = ValOrBlank(row, DICOMTags.SeriesInstanceUID); string imCount = ""; if (row.ContainsKey(DICOMTags.NumberOfSeriesRelatedInstances)) { imCount = row[DICOMTags.NumberOfSeriesRelatedInstances].ToString(); } this.Invoke((MethodInvoker) delegate { SerList.Items.Add(new ListViewItem(new string[] { ValOrBlank(row, DICOMTags.Modality), //modality ValOrBlank(row, DICOMTags.SeriesDate), //ser date SerTime, //ser time ValOrBlank(row, DICOMTags.SeriesNumber), //series number SerDesc, //description imCount, //will be the number of images, after they're retrieved seriesInsUID //Series UID, Hidden! })); }); if (imCount == "") { QRRequestData request = new QRRequestData(QueryRetrieveLevel.StudyRoot, QRLevelType.Image); request.SearchTerms[DICOMTags.SeriesInstanceUID] = seriesInsUID; DICOMFinder newfinder = new DICOMFinder(new NullLogger(), "", false); pendingFinders.Add(finder); newfinder.FindResponse += new DICOMFinder.FindResponseHandler(newfinder_FindResponse_Image); newfinder.Find(new ApplicationEntity(MyAE), TargetAE.ToAE(), request); } } }
private void SearchList_DoubleClick(object sender, System.EventArgs e) { if (SearchList.SelectedItems.Count == 0) { return; } foreach (ListViewItem lvi in SearchList.SelectedItems) { //string patid = lvi.SubItems[0].Text; string studyInsUID = lvi.SubItems[9].Text; //Start downloading studyid QRRequestData request = new QRRequestData(QueryRetrieveLevel.StudyRoot, QRLevelType.Study); request.SearchTerms[DICOMTags.StudyInstanceUID] = studyInsUID; DICOMMover mover = new DICOMMover(new NullLogger(), "", false); mover.StartMove(new ApplicationEntity(MyAE), TargetAE.ToAE(), MyAE, request); } }
private void StartSearch_Click(object sender, System.EventArgs e) { SearchList.Items.Clear(); SerList.Items.Clear(); string DateStr = ""; if (S_Start.Checked) { DateStr += S_Start.Value.ToString("yyyyMMdd"); if (!S_End.Checked) { DateStr += "-"; } } if (S_End.Checked) { if (DateStr != "") { DateStr += "-"; } DateStr += S_End.Value.ToString("yyyyMMdd"); } QRRequestData request = new QRRequestData(QueryRetrieveLevel.StudyRoot, QRLevelType.Study); request.SearchTerms[DICOMTags.StudyDate] = DateStr; request.SearchTerms[DICOMTags.StudyTime] = null; request.SearchTerms[DICOMTags.AccessionNumber] = S_Acc.Text; request.SearchTerms[DICOMTags.PatientName] = S_Name.Text; request.SearchTerms[DICOMTags.PatientID] = S_PatID.Text; request.SearchTerms[DICOMTags.Modality] = null; request.SearchTerms[DICOMTags.PatientSex] = null; request.SearchTerms[DICOMTags.PatientBirthDate] = null; request.SearchTerms[DICOMTags.StudyDescription] = null; request.SearchTerms[DICOMTags.BodyPartExamined] = null; DICOMFinder finder = new DICOMFinder(new NullLogger(), "", false); pendingFinders.Add(finder); finder.FindResponse += new DICOMFinder.FindResponseHandler(finder_FindResponse_Study); finder.Find(new ApplicationEntity(MyAE), TargetAE.ToAE(), request); }
/// <summary> /// After setting up the mover with your callback(s), call this to start the move process. All updates /// about the operation will be provided via the callbacks. /// </summary> /// <param name="hostAE">An entity containing the AE title to represent the SCU.</param> /// <param name="remoteAE">An entity containing the SCP to attempt to contact.</param> /// <param name="sendToAE">This is the AE Title of the move destination. The remote AE must have full information /// about this entity (hostname/address and port), because only the title is passed via this request.</param> /// <param name="requestData">A filled out request for what images to target with the MOVE request.</param> public void StartMove(ApplicationEntity hostAE, ApplicationEntity remoteAE, string sendToAE, QRRequestData requestData) { this.FindRequest = requestData; this.SendToAE = sendToAE; if (requestData.QueryLevel == QueryRetrieveLevel.PatientRoot) { conn.AddPresentationContext(new PresentationContext(AbstractSyntaxes.PatientRootQueryRetrieveInformationModelMOVE, new List <TransferSyntax> { TransferSyntaxes.ImplicitVRLittleEndian })); } else if (requestData.QueryLevel == QueryRetrieveLevel.PatientStudyOnly) { conn.AddPresentationContext(new PresentationContext(AbstractSyntaxes.PatientStudyOnlyQueryRetrieveInformationModelMOVERetired, new List <TransferSyntax> { TransferSyntaxes.ImplicitVRLittleEndian })); } else if (requestData.QueryLevel == QueryRetrieveLevel.StudyRoot) { conn.AddPresentationContext(new PresentationContext(AbstractSyntaxes.StudyRootQueryRetrieveInformationModelMOVE, new List <TransferSyntax> { TransferSyntaxes.ImplicitVRLittleEndian })); } StartConnection(hostAE, remoteAE); }
private QRResponseData listener_MoveRequest(DICOMConnection conn, QRRequestData request) { return(this._db.GetQRResponse(request, true)); }
private QRResponseData listener_FindRequest(DICOMConnection conn, QRRequestData request) { return(this._db.GetQRResponse(request, false)); }
static QRResponseData listener_FindRequest(DICOMConnection conn, QRRequestData request) { QRResponseData response = request.GenerateResponse(); foreach (DICOMData data in storedData) { //check fields bool works = true; foreach (uint tag in request.SearchTerms.Keys) { object search = request.SearchTerms[tag]; if (search.ToString() == "") { continue; } if (!data.Elements.ContainsKey(tag)) { works = false; break; } if (search.ToString().Contains("-")) { //range string[] range = search.ToString().Split('-'); if (range[0] != "" && data[tag].Display.CompareTo(range[0]) < 0) { works = false; break; } if (range[1] != "" && data[tag].Display.CompareTo(range[1]) > 0) { works = false; break; } } else if (search.ToString().Contains("*")) { if (!Regex.IsMatch(data[tag].Display, search.ToString())) { works = false; break; } } else if (data[tag].Display != search.ToString()) { works = false; break; } } if (!works) { continue; } DICOMData ndata = new DICOMData(); foreach (uint tag in response.TagsToFill) { if (data.Elements.ContainsKey(tag)) { ndata[tag].Data = data[tag].Data; } } } return(response); }