Skip to content

Modality

pyorthanc.Modality

Wrapper around Orthanc API when dealing with a modality.

Source code in pyorthanc/_modality.py
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
class Modality:
    """Wrapper around Orthanc API when dealing with a modality."""

    def __init__(self, client: Orthanc, modality: str) -> None:
        """Constructor

        Parameters
        ----------
        client
            Orthanc object.
        modality
            Remote modality.
        """
        client = util.ensure_non_raw_response(client)

        self.client = client
        self.modality = modality

    def echo(self) -> bool:
        """C-Echo to modality

        Returns
        -------
        bool
            True if C-Echo succeeded.
        """
        try:
            self.client.post_modalities_id_echo(self.modality)
            return True

        except httpx.HTTPError:
            return False

    def query(self, data: Dict) -> Dict:
        """C-Find (Querying with data)

        Parameters
        ----------
        data
            Dictionary to send in the body of request.

        Returns
        -------
        Dict
            Dictionary with keys {'ID': '...', 'path': '...'}

        Examples
        -------
        >>> data = {'Level': 'Study',
        ...         'Query': {
        ...             'PatientID':'03HD*',
        ...             'StudyDescription':'*Chest*',
        ...             'PatientName':''
        ...         }
        ... }

        >>> modality = Modality(
        ...     client=Orthanc('http://localhost:8042'),
        ...     modality='sample'
        ... )

        >>> modality.query(data)
        """
        return dict(self.client.post_modalities_id_query(self.modality, json=data))

    def move(self, query_identifier: str, cmove_data: Dict) -> Dict:
        """C-Move query results to another modality

        C-Move SCU: Send all the results to another modality whose AET is in the body

        Parameters
        ----------
        query_identifier
            Query identifier.
        cmove_data
            Ex. {'TargetAet': 'target_modality_name', "Synchronous": False}

        Returns
        -------
        Dict
            Orthanc Response (probably a Dictionary)

        Examples
        --------
        >>> modality = Modality(Orthanc('http://localhost:8042'), 'modality')
        >>> query_id = modality.query(
        ...     data={'Level': 'Series',
        ...           'Query': {'PatientID': '',
        ...                     'Modality':'SR'}})

        >>> modality.move(
        ...     query_identifier=query_id['ID'],
        ...     cmove_data={'TargetAet': 'TARGETAET'}
        ... )

        """
        return dict(self.client.post_queries_id_retrieve(query_identifier, json=cmove_data))

    def store(self, instance_or_series_id: str) -> Dict:
        """Store series or instance to modality.

        Parameters
        ----------
        instance_or_series_id
            Instance or Series Orthanc identifier.

        Returns
        -------
        Dict
            Information related to the C-Store operation.
        """
        return dict(self.client.post_modalities_id_store(
            self.modality,
            json=instance_or_series_id
        ))

    def get_query_answers(self) -> Dict:
        answers = {}

        for query_id in self.client.get_queries():
            for answer_id in self.client.get_queries_id_answers(query_id):
                answers[query_id] = self.client.get_queries_id_answers_index_content(query_id, answer_id)

        return answers

client = client instance-attribute

modality = modality instance-attribute

__init__(client, modality)

Constructor

Parameters:

Name Type Description Default
client Orthanc

Orthanc object.

required
modality str

Remote modality.

required
Source code in pyorthanc/_modality.py
12
13
14
15
16
17
18
19
20
21
22
23
24
25
def __init__(self, client: Orthanc, modality: str) -> None:
    """Constructor

    Parameters
    ----------
    client
        Orthanc object.
    modality
        Remote modality.
    """
    client = util.ensure_non_raw_response(client)

    self.client = client
    self.modality = modality

echo()

C-Echo to modality

Returns:

Type Description
bool

True if C-Echo succeeded.

Source code in pyorthanc/_modality.py
27
28
29
30
31
32
33
34
35
36
37
38
39
40
def echo(self) -> bool:
    """C-Echo to modality

    Returns
    -------
    bool
        True if C-Echo succeeded.
    """
    try:
        self.client.post_modalities_id_echo(self.modality)
        return True

    except httpx.HTTPError:
        return False

get_query_answers()

Source code in pyorthanc/_modality.py
125
126
127
128
129
130
131
132
def get_query_answers(self) -> Dict:
    answers = {}

    for query_id in self.client.get_queries():
        for answer_id in self.client.get_queries_id_answers(query_id):
            answers[query_id] = self.client.get_queries_id_answers_index_content(query_id, answer_id)

    return answers

move(query_identifier, cmove_data)

C-Move query results to another modality

C-Move SCU: Send all the results to another modality whose AET is in the body

Parameters:

Name Type Description Default
query_identifier str

Query identifier.

required
cmove_data Dict

Ex. {'TargetAet': 'target_modality_name', "Synchronous": False}

required

Returns:

Type Description
Dict

Orthanc Response (probably a Dictionary)

Examples:

>>> modality = Modality(Orthanc('http://localhost:8042'), 'modality')
>>> query_id = modality.query(
...     data={'Level': 'Series',
...           'Query': {'PatientID': '',
...                     'Modality':'SR'}})
>>> modality.move(
...     query_identifier=query_id['ID'],
...     cmove_data={'TargetAet': 'TARGETAET'}
... )
Source code in pyorthanc/_modality.py
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
def move(self, query_identifier: str, cmove_data: Dict) -> Dict:
    """C-Move query results to another modality

    C-Move SCU: Send all the results to another modality whose AET is in the body

    Parameters
    ----------
    query_identifier
        Query identifier.
    cmove_data
        Ex. {'TargetAet': 'target_modality_name', "Synchronous": False}

    Returns
    -------
    Dict
        Orthanc Response (probably a Dictionary)

    Examples
    --------
    >>> modality = Modality(Orthanc('http://localhost:8042'), 'modality')
    >>> query_id = modality.query(
    ...     data={'Level': 'Series',
    ...           'Query': {'PatientID': '',
    ...                     'Modality':'SR'}})

    >>> modality.move(
    ...     query_identifier=query_id['ID'],
    ...     cmove_data={'TargetAet': 'TARGETAET'}
    ... )

    """
    return dict(self.client.post_queries_id_retrieve(query_identifier, json=cmove_data))

query(data)

C-Find (Querying with data)

Parameters:

Name Type Description Default
data Dict

Dictionary to send in the body of request.

required

Returns:

Type Description
Dict

Dictionary with keys {'ID': '...', 'path': '...'}

Examples:

>>> data = {'Level': 'Study',
...         'Query': {
...             'PatientID':'03HD*',
...             'StudyDescription':'*Chest*',
...             'PatientName':''
...         }
... }
>>> modality = Modality(
...     client=Orthanc('http://localhost:8042'),
...     modality='sample'
... )
>>> modality.query(data)
Source code in pyorthanc/_modality.py
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
def query(self, data: Dict) -> Dict:
    """C-Find (Querying with data)

    Parameters
    ----------
    data
        Dictionary to send in the body of request.

    Returns
    -------
    Dict
        Dictionary with keys {'ID': '...', 'path': '...'}

    Examples
    -------
    >>> data = {'Level': 'Study',
    ...         'Query': {
    ...             'PatientID':'03HD*',
    ...             'StudyDescription':'*Chest*',
    ...             'PatientName':''
    ...         }
    ... }

    >>> modality = Modality(
    ...     client=Orthanc('http://localhost:8042'),
    ...     modality='sample'
    ... )

    >>> modality.query(data)
    """
    return dict(self.client.post_modalities_id_query(self.modality, json=data))

store(instance_or_series_id)

Store series or instance to modality.

Parameters:

Name Type Description Default
instance_or_series_id str

Instance or Series Orthanc identifier.

required

Returns:

Type Description
Dict

Information related to the C-Store operation.

Source code in pyorthanc/_modality.py
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
def store(self, instance_or_series_id: str) -> Dict:
    """Store series or instance to modality.

    Parameters
    ----------
    instance_or_series_id
        Instance or Series Orthanc identifier.

    Returns
    -------
    Dict
        Information related to the C-Store operation.
    """
    return dict(self.client.post_modalities_id_store(
        self.modality,
        json=instance_or_series_id
    ))

RemoteModality

RemoteModality is an alias for Modality

RemoteModality = Modality