Find(DicomScp,FindQuery) Method

Summary

Sends a C-FIND-REQ message to a peer member of a connection defined by Scp.

Syntax
C#
VB
C++
public void Find( 
   DicomScp Scp, 
   FindQuery Query 
) 
  
Public Overloads Sub Find( _ 
   ByVal Scp As DicomScp, _ 
   ByVal Query As FindQuery _ 
)  
public: 
void Find(  
   DicomScp^ Scp, 
   FindQuery^ Query 
)  

Parameters

Scp
The peer connection to send the C-FIND-REQ to.

Query
The query information that describes the DICOM datasets to be found.

Example

This example queries a DICOM server and performs a Study Level C-FIND-REQ.

C#
VB
using Leadtools; 
using Leadtools.Dicom.Scu; 
using Leadtools.Dicom.Scu.Common; 
using Leadtools.Dicom; 
using Leadtools.Dicom.Common.DataTypes; 
 
public void FindStudy() 
{ 
   DicomEngine.Startup(); 
   DicomNet.Startup(); 
 
   QueryRetrieveScu findStudy = new QueryRetrieveScu(); 
   FindQuery query = new FindQuery(); 
   DicomScp scp = new DicomScp(); 
 
   // 
   // Change these parameters to reflect the calling AETitle. 
   // 
 
   findStudy.AETitle = "LEAD_CLIENT"; 
   findStudy.HostPort = 1000; 
   findStudy.HostAddress = Dns.GetHostEntry(Dns.GetHostName()).AddressList.FirstOrDefault(ip => ip.AddressFamily == AddressFamily.InterNetwork); 
 
   // 
   // Change these parameters to reflect the called AETitle (server). 
   // 
 
   scp.AETitle = "MI_SERVER"; 
   scp.Port = 104; 
   scp.Timeout = 60; 
   scp.PeerAddress = IPAddress.Parse("10.1.1.96"); 
   scp.Secure = false; 
 
   // 
   // Find all studies 
   // 
   query.QueryLevel = QueryLevel.Study; 
   findStudy.BeforeConnect += new BeforeConnectDelegate(findStudy_BeforeConnect); 
   findStudy.AfterConnect += new AfterConnectDelegate(findStudy_AfterConnect); 
   findStudy.BeforeCFind += new BeforeCFindDelegate(findStudy_BeforeCFind); 
   findStudy.MatchStudy += new MatchStudyDelegate(findStudy_MatchStudy); 
   findStudy.AfterCFind += new AfterCFindDelegate(findStudy_AfterCFind); 
   findStudy.Find(scp, query); 
 
   findStudy = null; 
   query = null; 
   scp = null; 
 
   DicomNet.Shutdown(); 
   DicomEngine.Shutdown(); 
} 
 
void findStudy_BeforeConnect(object sender, BeforeConnectEventArgs e) 
{ 
   Console.WriteLine("Connecting to: " + e.Scp.PeerAddress.ToString()); 
} 
 
void findStudy_AfterConnect(object sender, AfterConnectEventArgs e) 
{ 
   Console.WriteLine("Connection status: " + e.Error); 
} 
 
void findStudy_BeforeCFind(object sender, BeforeCFindEventArgs e) 
{ 
   Console.WriteLine("Before CFind: " + e.QueryLevel.ToString()); 
   Console.WriteLine("Association supports relational queries: {0}", e.Scp.Relational); 
   Console.WriteLine("Association Information"); 
   for (int i = 0; i < e.Scp.Association.PresentationContextCount; i++) 
   { 
      byte pid = e.Scp.Association.GetPresentationContextID(i); 
      string absSyntax = e.Scp.Association.GetAbstract(pid); 
      DicomAssociateAcceptResultType result = e.Scp.Association.GetResult(pid); 
      DicomUid uid = DicomUidTable.Instance.Find(absSyntax); 
 
      Console.WriteLine("\tPresentationContext ({0})", pid); 
      Console.WriteLine("\t\tAbstractSyntax: {0}", absSyntax); 
      if (uid != null) 
         Console.WriteLine("\t\tDescription: {0}", uid.Name); 
      Console.WriteLine("\t\tResult: {0}", result); 
   } 
} 
 
void findStudy_MatchStudy(object sender, MatchEventArgs<Study> e) 
{ 
   Console.WriteLine("Accession #: " + e.Info.AccessionNumber); 
   Console.WriteLine("Admitting Diagnosis Description: " + e.Info.AdmitDiagDescrp); 
   Console.WriteLine("Age: " + (e.Info.Age.HasValue ? e.Info.Age.Value.Number.ToString() + e.Info.Age.Value.Reference : "No Age")); 
   Console.WriteLine("Study Date: " + e.Info.Date); 
   Console.WriteLine("Study Time: " + e.Info.Time); 
   Console.WriteLine("Study Description: " + e.Info.Description); 
   Console.WriteLine("Study Id: " + e.Info.Id); 
   Console.WriteLine("Study Instance: " + e.Info.InstanceUID); 
   if (e.Info.ModalitiesInStudy != null) 
      Console.WriteLine("Modalities in Study: " + e.Info.ModalitiesInStudy.ToString()); 
   if (e.Info.NameOfDrsReading != null) 
      Console.WriteLine("Name of drs reading Study: " + e.Info.NameOfDrsReading.ToString()); 
   Console.WriteLine("Number of Related Instances: " + e.Info.NumberOfRelatedInstances); 
   Console.WriteLine("Number of Related Series: " + e.Info.NumberofRelatedSeries); 
   Console.WriteLine("Referring Dr Name: " + e.Info.ReferringPhysiciansName.Full); 
   Console.WriteLine("Patient Size: " + e.Info.Size); 
   Console.WriteLine("Patient Weight: " + e.Info.Weight); 
   Console.WriteLine("Patient Birth Date: " + e.Info.Patient.BirthDate); 
   Console.WriteLine("Patient Comments: " + e.Info.Patient.Comments); 
   Console.WriteLine("Patient Id: " + e.Info.Patient.Id); 
   Console.WriteLine("Patient Sex: " + e.Info.Patient.Sex); 
   Console.WriteLine("Patient Name"); 
   Console.WriteLine("\tFamily Name: " + e.Info.Patient.Name.Family); 
   Console.WriteLine("\tGiven Name: " + e.Info.Patient.Name.Given); 
   Console.WriteLine("\tMiddle Name: " + e.Info.Patient.Name.Middle); 
   Console.WriteLine("\tName Prefix: " + e.Info.Patient.Name.Prefix); 
   Console.WriteLine("\tName Suffix: " + e.Info.Patient.Name.Suffix); 
   Console.WriteLine("\tFull Name: " + e.Info.Patient.Name.Full); 
   Console.WriteLine("\tFull Name Dicom Encoded: " + e.Info.Patient.Name.FullDicomEncoded); 
   Console.WriteLine("==========================================================\r\n"); 
} 
 
void findStudy_AfterCFind(object sender, AfterCFindEventArgs e) 
{ 
   Debug.Assert(e.Status == DicomCommandStatusType.Success); 
} 
Imports Leadtools 
Imports Leadtools.Dicom.Scu 
Imports Leadtools.Dicom.Scu.Common 
Imports Leadtools.Dicom 
Imports Leadtools.Dicom.Common.DataTypes 
 
Public Sub FindStudy() 
    DicomEngine.Startup() 
    DicomNet.Startup() 
 
    Dim cfindStudy As QueryRetrieveScu = New QueryRetrieveScu() 
    Dim query As FindQuery = New FindQuery() 
    Dim scp As DicomScp = New DicomScp() 
 
    ' 
    ' Change these parameters to reflect the calling AETitle. 
    ' 
    cfindStudy.AETitle = "LEAD_CLIENT" 
    cfindStudy.HostPort = 1000 
    cfindStudy.HostAddress = Dns.GetHostEntry(Dns.GetHostName()).AddressList.FirstOrDefault(Function(ip) ip.AddressFamily = AddressFamily.InterNetwork) 
 
    ' 
    ' Change these parameters to reflect the called AETitle (server). 
    ' 
    scp.AETitle = "MI_SERVER" 
    scp.Port = 104 
    scp.Timeout = 60 
    scp.PeerAddress = IPAddress.Parse("10.1.1.96") 
    scp.Secure = False 
 
    ' 
    ' Find all studies 
    ' 
    query.QueryLevel = QueryLevel.Study 
    AddHandler cfindStudy.BeforeConnect, AddressOf cfindStudy_BeforeConnect 
    AddHandler cfindStudy.AfterConnect, AddressOf cfindStudy_AfterConnect 
    AddHandler cfindStudy.BeforeCFind, AddressOf cfindStudy_BeforeCFind 
    AddHandler cfindStudy.MatchStudy, AddressOf cfindStudy_MatchStudy 
    AddHandler cfindStudy.AfterCFind, AddressOf cfindStudy_AfterCFind 
    cfindStudy.Find(scp, query) 
 
    cfindStudy = Nothing 
    query = Nothing 
    scp = Nothing 
 
    DicomNet.Shutdown() 
    DicomEngine.Shutdown() 
End Sub 
 
Private Sub cfindStudy_BeforeConnect(ByVal sender As Object, ByVal e As BeforeConnectEventArgs) 
    Console.WriteLine("Connecting to: " & e.Scp.PeerAddress.ToString()) 
End Sub 
 
Private Sub cfindStudy_AfterConnect(ByVal sender As Object, ByVal e As AfterConnectEventArgs) 
    Console.WriteLine("Connection status: " & e.Error) 
End Sub 
 
Private Sub cfindStudy_BeforeCFind(ByVal sender As Object, ByVal e As BeforeCFindEventArgs) 
    Console.WriteLine("Before CFind: " & e.QueryLevel.ToString()) 
    Console.WriteLine("Association supports relational queries: {0}", e.Scp.Relational) 
    Console.WriteLine("Association Information") 
    Dim i As Integer = 0 
    Do While i < e.Scp.Association.PresentationContextCount 
        Dim pid As Byte = e.Scp.Association.GetPresentationContextID(i) 
        Dim absSyntax As String = e.Scp.Association.GetAbstract(pid) 
        Dim result As DicomAssociateAcceptResultType = e.Scp.Association.GetResult(pid) 
        Dim uid As DicomUid = DicomUidTable.Instance.Find(absSyntax) 
 
        Console.WriteLine(Constants.vbTab & "PresentationContext ({0})", pid) 
        Console.WriteLine(Constants.vbTab + Constants.vbTab & "AbstractSyntax: {0}", absSyntax) 
        If Not uid Is Nothing Then 
            Console.WriteLine(Constants.vbTab + Constants.vbTab & "Description: {0}", uid.Name) 
        End If 
        Console.WriteLine(Constants.vbTab + Constants.vbTab & "Result: {0}", result) 
        i += 1 
    Loop 
End Sub 
 
Private Sub cfindStudy_MatchStudy(ByVal sender As Object, ByVal e As MatchEventArgs(Of Study)) 
    Console.WriteLine("Accession #: " & e.Info.AccessionNumber) 
    Console.WriteLine("Admitting Diagnosis Description: " & e.Info.AdmitDiagDescrp) 
    If e.Info.Age.HasValue Then 
        Console.WriteLine("Age: " & (e.Info.Age.Value.Number.ToString() & e.Info.Age.Value.Reference)) 
    Else 
        Console.WriteLine("Age: " & ("No Age")) 
    End If 
    Console.WriteLine("Study Date: " & e.Info.Date.Value) 
    If (e.Info.Time.HasValue) Then 
        Console.WriteLine("Study Time: " & e.Info.Time.ToString()) 
    End If 
    Console.WriteLine("Study Description: " & e.Info.Description) 
    Console.WriteLine("Study Id: " & e.Info.Id) 
    Console.WriteLine("Study Instance: " & e.Info.InstanceUID) 
    If Not e.Info.ModalitiesInStudy Is Nothing Then 
        Console.WriteLine("Modalities in Study: " & e.Info.ModalitiesInStudy.ToString()) 
    End If 
    If Not e.Info.NameOfDrsReading Is Nothing Then 
        Console.WriteLine("Name of drs reading Study: " & e.Info.NameOfDrsReading.ToString()) 
    End If 
    Console.WriteLine("Number of Related Instances: " & e.Info.NumberOfRelatedInstances) 
    Console.WriteLine("Number of Related Series: " & e.Info.NumberofRelatedSeries) 
    Console.WriteLine("Referring Dr Name: " & e.Info.ReferringPhysiciansName.Full) 
    Console.WriteLine("Patient Size: " & e.Info.Size.Value) 
    Console.WriteLine("Patient Weight: " & e.Info.Weight.Value) 
    Console.WriteLine("Patient Birth Date: " & e.Info.Patient.BirthDate.Value) 
    Console.WriteLine("Patient Comments: " & e.Info.Patient.Comments) 
    Console.WriteLine("Patient Id: " & e.Info.Patient.Id) 
    Console.WriteLine("Patient Sex: " & e.Info.Patient.Sex) 
    Console.WriteLine("Patient Name") 
    Console.WriteLine(Constants.vbTab & "Family Name: " & e.Info.Patient.Name.Family) 
    Console.WriteLine(Constants.vbTab & "Given Name: " & e.Info.Patient.Name.Given) 
    Console.WriteLine(Constants.vbTab & "Middle Name: " & e.Info.Patient.Name.Middle) 
    Console.WriteLine(Constants.vbTab & "Name Prefix: " & e.Info.Patient.Name.Prefix) 
    Console.WriteLine(Constants.vbTab & "Name Suffix: " & e.Info.Patient.Name.Suffix) 
    Console.WriteLine(Constants.vbTab & "Full Name: " & e.Info.Patient.Name.Full) 
    Console.WriteLine(Constants.vbTab & "Full Name Dicom Encoded: " & e.Info.Patient.Name.FullDicomEncoded) 
    Console.WriteLine("==========================================================" & Constants.vbCrLf) 
End Sub 
 
Private Sub cfindStudy_AfterCFind(ByVal sender As Object, ByVal e As AfterCFindEventArgs) 
    Debug.Assert(e.Status = DicomCommandStatusType.Success) 
End Sub 

Requirements

Target Platforms

Help Version 20.0.2020.3.31
Products | Support | Contact Us | Intellectual Property Notices
© 1991-2020 LEAD Technologies, Inc. All Rights Reserved.

Leadtools.Dicom.Scu Assembly