Contrôle à distance#

DataLab peut être contrôlé à distance en utilisant le protocole XML-RPC qui est nativement supporté par Python (et beaucoup d’autres langages). Le contrôle à distance permet d’accéder aux principales fonctionnalités de DataLab à partir d’un processus séparé.

Note

Si vous recherchez une solution alternative légère pour contrôler DataLab à distance (c’est-à-dire sans avoir à installer l’ensemble du package DataLab et ses dépendances sur votre environnement), veuillez consulter le package DataLab Simple Client (pip install cdlclient).

Depuis un IDE#

DataLab peut être contrôlé à distance depuis un IDE (par exemple Spyder ou tout autre IDE, ou même un Jupyter Notebook) qui exécute un script Python. Il permet de se connecter à une instance de DataLab en cours d’exécution, d’ajouter un signal et une image, puis d’exécuter des calculs. Cette fonctionnalité est exposée par la classe RemoteProxy fournie dans le module cdl.proxy.

Depuis une application tierce#

DataLab peut également être contrôlé à distance depuis une application tierce, dans le même but.

Si l’application tierce est écrite en Python 3, elle peut directement utiliser la classe RemoteProxy comme mentionné ci-dessus. Depuis un autre langage, c’est également réalisable, mais cela nécessite d’implémenter un client XML-RPC dans ce langage en utilisant les mêmes méthodes de serveur proxy que dans la classe RemoteProxy.

Les données (signaux et images) peuvent également être échangées entre DataLab et l’application cliente distante, dans les deux sens.

L’application cliente distante peut être écrite dans n’importe quel langage qui prend en charge XML-RPC. Par exemple, il est possible d’écrire une application cliente distante en Python, Java, C++, C#, etc. L’application cliente distante peut être une application graphique ou une application en ligne de commande.

L’application cliente distante peut être exécutée sur le même ordinateur que DataLab ou sur un ordinateur différent. Dans ce dernier cas, l’application cliente distante doit connaître l’adresse IP de l’ordinateur exécutant DataLab.

L’application cliente distante peut être exécutée avant ou après DataLab. Dans ce dernier cas, l’application cliente distante doit essayer de se connecter à DataLab jusqu’à ce qu’elle réussisse.

Fonctionnalités prises en charge#

Les fonctionnalités prises en charge sont les suivantes :

  • Basculer vers le panneau de signal ou d’image

  • Supprimer tous les signaux et images

  • Enregistrer la session en cours dans un fichier HDF5

  • Ouvrir des fichiers HDF5 dans la session en cours

  • Parcourir un fichier HDF5

  • Ouvrir un signal ou une image à partir d’un fichier

  • Ajouter un signal

  • Ajouter une image

  • Obtenir la liste des objets

  • Exécuter un calcul avec des paramètres

Note

Les objets signal et image sont décrits dans cette section : Modèle de données interne.

Quelques exemples sont fournis pour aider à implémenter une telle communication entre votre application et DataLab :

  • Voir le module : cdl.tests.remoteclient_app

  • Voir le module : cdl.tests.remoteclient_unit

../../_images/remote_control_test.png

Capture d’écran du test de l’application cliente distante (cdl.tests.remoteclient_app)#

Exemples#

Lorsque vous utilisez Python 3, vous pouvez utiliser directement la classe RemoteProxy comme dans les exemples cités ci-dessus ou ci-dessous.

Voici un exemple en Python 3 d’un script qui se connecte à une instance de DataLab en cours d’exécution, ajoute un signal et une image, puis exécute des calculs (la structure de cellule du script le rend pratique à utiliser dans l’IDE Spyder):

"""
Example of remote control of DataLab current session,
from a Python script running outside DataLab (e.g. in Spyder)

Created on Fri May 12 12:28:56 2023

@author: p.raybaut
"""

# %% Importing necessary modules

# NumPy for numerical array computations:
import numpy as np

# DataLab remote control client:
from cdlclient import SimpleRemoteProxy as RemoteProxy

# %% Connecting to DataLab current session

proxy = RemoteProxy()

# %% Executing commands in DataLab (...)

z = np.random.rand(20, 20)
proxy.add_image("toto", z)

# %% Executing commands in DataLab (...)

proxy.toggle_auto_refresh(False)  # Turning off auto-refresh
x = np.array([1.0, 2.0, 3.0])
y = np.array([4.0, 5.0, -1.0])
proxy.add_signal("toto", x, y)

# %% Executing commands in DataLab (...)

proxy.compute_derivative()
proxy.toggle_auto_refresh(True)  # Turning on auto-refresh

# %% Executing commands in DataLab (...)

proxy.set_current_panel("image")

# %% Executing a lot of commands without refreshing DataLab

z = np.random.rand(400, 400)
proxy.add_image("foobar", z)
with proxy.context_no_refresh():
    for _idx in range(100):
        proxy.compute_fft()

Voici une réimplémentation de cette classe en Python 2.7 :

# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file.

"""
DataLab remote controlling class for Python 2.7
"""

import io
import os
import os.path as osp
import socket
import sys

import ConfigParser as cp
import numpy as np
from guidata.userconfig import get_config_dir
from xmlrpclib import Binary, ServerProxy


def array_to_rpcbinary(data):
    """Convert NumPy array to XML-RPC Binary object, with shape and dtype"""
    dbytes = io.BytesIO()
    np.save(dbytes, data, allow_pickle=False)
    return Binary(dbytes.getvalue())


def get_cdl_xmlrpc_port():
    """Return DataLab current XML-RPC port"""
    if sys.platform == "win32" and "HOME" in os.environ:
        os.environ.pop("HOME")  # Avoid getting old WinPython settings dir
    fname = osp.join(get_config_dir(), ".DataLab", "DataLab.ini")
    ini = cp.ConfigParser()
    ini.read(fname)
    try:
        return ini.get("main", "rpc_server_port")
    except (cp.NoSectionError, cp.NoOptionError):
        raise ConnectionRefusedError("DataLab has not yet been executed")


class RemoteClient(object):
    """Object representing a proxy/client to DataLab XML-RPC server"""

    def __init__(self):
        self.port = None
        self.serverproxy = None

    def connect(self, port=None):
        """Connect to DataLab XML-RPC server"""
        if port is None:
            port = get_cdl_xmlrpc_port()
        self.port = port
        url = "http://127.0.0.1:" + port
        self.serverproxy = ServerProxy(url, allow_none=True)
        try:
            self.get_version()
        except socket.error:
            raise ConnectionRefusedError("DataLab is currently not running")

    def get_version(self):
        """Return DataLab public version"""
        return self.serverproxy.get_version()

    def close_application(self):
        """Close DataLab application"""
        self.serverproxy.close_application()

    def raise_window(self):
        """Raise DataLab window"""
        self.serverproxy.raise_window()

    def get_current_panel(self):
        """Return current panel"""
        return self.serverproxy.get_current_panel()

    def set_current_panel(self, panel):
        """Switch to panel"""
        self.serverproxy.set_current_panel(panel)

    def reset_all(self):
        """Reset all application data"""
        self.serverproxy.reset_all()

    def toggle_auto_refresh(self, state):
        """Toggle auto refresh state"""
        self.serverproxy.toggle_auto_refresh(state)

    def toggle_show_titles(self, state):
        """Toggle show titles state"""
        self.serverproxy.toggle_show_titles(state)

    def save_to_h5_file(self, filename):
        """Save to a DataLab HDF5 file"""
        self.serverproxy.save_to_h5_file(filename)

    def open_h5_files(self, h5files, import_all, reset_all):
        """Open a DataLab HDF5 file or import from any other HDF5 file"""
        self.serverproxy.open_h5_files(h5files, import_all, reset_all)

    def import_h5_file(self, filename, reset_all):
        """Open DataLab HDF5 browser to Import HDF5 file"""
        self.serverproxy.import_h5_file(filename, reset_all)

    def load_from_files(self, filenames):
        """Open objects from files in current panel (signals/images)"""
        self.serverproxy.load_from_files(filenames)

    def add_signal(
        self, title, xdata, ydata, xunit=None, yunit=None, xlabel=None, ylabel=None
    ):
        """Add signal data to DataLab"""
        xbinary = array_to_rpcbinary(xdata)
        ybinary = array_to_rpcbinary(ydata)
        p = self.serverproxy
        return p.add_signal(title, xbinary, ybinary, xunit, yunit, xlabel, ylabel)

    def add_image(
        self,
        title,
        data,
        xunit=None,
        yunit=None,
        zunit=None,
        xlabel=None,
        ylabel=None,
        zlabel=None,
    ):
        """Add image data to DataLab"""
        zbinary = array_to_rpcbinary(data)
        p = self.serverproxy
        return p.add_image(title, zbinary, xunit, yunit, zunit, xlabel, ylabel, zlabel)

    def get_object_titles(self, panel=None):
        """Get object (signal/image) list for current panel"""
        return self.serverproxy.get_object_titles(panel)

    def get_object(self, nb_id_title=None, panel=None):
        """Get object (signal/image) by number, id or title"""
        return self.serverproxy.get_object(nb_id_title, panel)

    def get_object_uuids(self, panel=None, group=None):
        """Get object (signal/image) list for current panel"""
        return self.serverproxy.get_object_uuids(panel, group)


def test_remote_client():
    """DataLab Remote Client test"""
    cdl = RemoteClient()
    cdl.connect()
    data = np.array([[3, 4, 5], [7, 8, 0]], dtype=np.uint16)
    cdl.add_image("toto", data)


if __name__ == "__main__":
    test_remote_client()

Boîte de dialogue de connexion#

Le package DataLab fournit également une boîte de dialogue de connexion qui peut être utilisée pour se connecter à une instance de DataLab en cours d’exécution. Elle est exposée par la classe cdl.widgets.connection.ConnectionDialog.

../../_images/connect_dialog.png

Capture d’écran de la boîte de dialogue de connexion (cdl.widgets.connection.ConnectionDialog)#

Exemple d’utilisation :

# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file.

"""
DataLab Remote client connection dialog example
"""

# guitest: show,skip

from guidata.qthelpers import qt_app_context
from qtpy import QtWidgets as QW

from cdl.proxy import RemoteProxy
from cdl.widgets.connection import ConnectionDialog


def test_dialog():
    """Test connection dialog"""
    proxy = RemoteProxy(autoconnect=False)
    with qt_app_context():
        dlg = ConnectionDialog(proxy.connect)
        if dlg.exec():
            QW.QMessageBox.information(None, "Connection", "Successfully connected")
        else:
            QW.QMessageBox.critical(None, "Connection", "Connection failed")


if __name__ == "__main__":
    test_dialog()

API publique : client distant#

class cdl.core.remote.RemoteClient[source]#

Objet représentant un proxy/client vers le serveur XML-RPC de DataLab. Cet objet est utilisé pour appeler les fonctions de DataLab à partir d’un script Python.

Exemples

Voici un exemple simple de l’utilisation de RemoteClient dans un script Python ou dans un notebook Jupyter :

>>> from cdl.core.remote import RemoteClient
>>> proxy = RemoteClient()
>>> proxy.connect()
Connecting to DataLab XML-RPC server...OK (port: 28867)
>>> proxy.get_version()
'1.0.0'
>>> proxy.add_signal("toto", np.array([1., 2., 3.]), np.array([4., 5., -1.]))
True
>>> proxy.get_object_titles()
['toto']
>>> proxy["toto"]
<cdl.core.model.signal.SignalObj at 0x7f7f1c0b4a90>
>>> proxy[1]
<cdl.core.model.signal.SignalObj at 0x7f7f1c0b4a90>
>>> proxy[1].data
array([1., 2., 3.])
connect(port: str | None = None, timeout: float | None = None, retries: int | None = None) None[source]#

Tentative de connexion au serveur XML-RPC de DataLab.

Paramètres:
  • port – Port XML-RPC auquel se connecter. Si non spécifié, le port est automatiquement récupéré à partir de la configuration de DataLab.

  • timeout – Délai d’attente en secondes. Par défaut, 5.0.

  • retries – Nombre de tentatives. Par défaut, 10.

Lève:
disconnect() None[source]#

Déconnexion du serveur XML-RPC de DataLab.

is_connected() bool[source]#

Renvoie True si connecté au serveur XML-RPC de DataLab.

get_method_list() list[str][source]#

Renvoie la liste des méthodes disponibles.

add_signal(title: str, xdata: ndarray, ydata: ndarray, xunit: str | None = None, yunit: str | None = None, xlabel: str | None = None, ylabel: str | None = None) bool[source]#

Ajouter des données de signal à DataLab.

Paramètres:
  • title – Titre du signal

  • xdata – Données X

  • ydata – Données Y

  • xunit – Unité X. Par défaut, None.

  • yunit – Unité Y. Par défaut, None.

  • xlabel – Libellé X. Par défaut, None.

  • ylabel – Libellé Y. Par défaut, None.

Renvoie:

True si le signal a été ajouté avec succès, False sinon

Lève:
add_image(title: str, data: ndarray, xunit: str | None = None, yunit: str | None = None, zunit: str | None = None, xlabel: str | None = None, ylabel: str | None = None, zlabel: str | None = None) bool[source]#

Ajouter des données d’image à DataLab.

Paramètres:
  • title – Titre de l’image

  • data – Données de l’image

  • xunit – Unité X. Par défaut, None.

  • yunit – Unité Y. Par défaut, None.

  • zunit – Unité Z. Par défaut, None.

  • xlabel – Libellé X. Par défaut, None.

  • ylabel – Libellé Y. Par défaut, None.

  • zlabel – Libellé Z. Par défaut, None.

Renvoie:

True si l’image a été ajoutée avec succès, False sinon

Lève:

ValueError – Type de données non valide

add_object(obj: SignalObj | ImageObj) None[source]#

Ajouter un objet à DataLab.

Paramètres:

obj – Objet signal ou image

calc(name: str, param: DataSet | None = None) None[source]#

Appeler la fonction de calcul name dans le processeur du panneau en cours.

Paramètres:
  • name – Nom de la fonction de calcul

  • param – Paramètre de la fonction de calcul. Par défaut, None.

Lève:

ValueError – unknown function

get_object(nb_id_title: int | str | None = None, panel: str | None = None) SignalObj | ImageObj[source]#

Obtenir un objet (signal/image) à partir de l’index.

Paramètres:
  • nb_id_title – Numéro d’objet, ou identifiant d’objet, ou titre d’objet. Par défaut, None (objet en cours).

  • panel – Nom du panneau. Par défaut, None (panneau en cours).

Renvoie:

Objet

Lève:

KeyError – si l’objet n’est pas trouvé

get_object_shapes(nb_id_title: int | str | None = None, panel: str | None = None) list[source]#

Obtenir les formes géométriques des éléments de tracé associés à l’objet (signal/image).

Paramètres:
  • nb_id_title – Numéro d’objet, ou identifiant d’objet, ou titre d’objet. Par défaut, None (objet en cours).

  • panel – Nom du panneau. Par défaut, None (panneau en cours).

Renvoie:

Liste des formes géométriques des éléments de tracé

add_annotations_from_items(items: list, refresh_plot: bool = True, panel: str | None = None) None[source]#

Ajouter des annotations d’objet (éléments de tracé d’annotation).

Paramètres:
  • items – éléments de tracé d’annotation

  • refresh_plot – rafraîchir le tracé. Par défaut, True.

  • panel – nom du panneau (valeurs valides : « signal », « image »). Si None, le panneau en cours est utilisé.

add_group(title: str, panel: str | None = None, select: bool = False) None#

Add group to DataLab.

Paramètres:
  • title – Group title

  • panel – Panel name (valid values: « signal », « image »). Defaults to None.

  • select – Select the group after creation. Defaults to False.

add_label_with_title(title: str | None = None, panel: str | None = None) None#

Ajouter une étiquette avec le titre de l’objet sur le tracé associé

Paramètres:
  • title – Titre de l’étiquette. Par défaut, None. Si None, le titre est le titre de l’objet.

  • panel – nom du panneau (valeurs valides : « signal », « image »). Si None, le panneau en cours est utilisé.

close_application() None#

Fermer l’application DataLab

context_no_refresh() Generator[None, None, None]#

Renvoie un gestionnaire de contexte pour désactiver temporairement le rafraîchissement automatique.

Renvoie:

Gestionnaire de contexte

Exemple

>>> with proxy.context_no_refresh():
...     proxy.add_image("image1", data1)
...     proxy.compute_fft()
...     proxy.compute_wiener()
...     proxy.compute_ifft()
...     # Auto refresh is disabled during the above operations
delete_metadata(refresh_plot: bool = True, keep_roi: bool = False) None#

Supprimer les métadonnées des objets sélectionnés

Paramètres:
  • refresh_plot – Rafraîchir le tracé. Par défaut, True.

  • keep_roi – Conserver la ROI. Par défaut, False.

get_current_panel() str#

Renvoie le nom du panneau en cours.

Renvoie:

« signal », « image », « macro »))

Type renvoyé:

Panel name (valid values

get_group_titles_with_object_infos() tuple[list[str], list[list[str]], list[list[str]]]#

Renvoie les titres des groupes et les listes des uuids et titres des objets internes.

Renvoie:

titres des groupes, listes des uuids et titres des objets internes

Type renvoyé:

Tuple

get_object_titles(panel: str | None = None) list[str]#

Obtenir la liste des objets (signal/image) pour le panneau en cours. Les objets sont triés par numéro de groupe et index d’objet dans le groupe.

Paramètres:

panel – nom du panneau (valeurs valides : « signal », « image », « macro »). Si None, le panneau de données en cours est utilisé (c’est-à-dire le panneau de signal ou d’image).

Renvoie:

Liste des titres des objets

Lève:

ValueError – si le panneau n’est pas trouvé

get_object_uuids(panel: str | None = None, group: int | str | None = None) list[str]#

Obtenir la liste des uuids des objets (signal/image) pour le panneau en cours. Les objets sont triés par numéro de groupe et index d’objet dans le groupe.

Paramètres:
  • panel – nom du panneau (valeurs valides : « signal », « image »). Si None, le panneau en cours est utilisé.

  • group – Group number, or group id, or group title. Defaults to None (all groups).

Renvoie:

Liste des uuid des objets

Lève:

ValueError – si le panneau n’est pas trouvé

classmethod get_public_methods() list[str]#

Renvoie toutes les méthodes publiques de la classe, sauf elle-même.

Renvoie:

Liste des méthodes publiques

get_sel_object_uuids(include_groups: bool = False) list[str]#

Renvoie les uuids des objets sélectionnés.

Paramètres:

include_groups – Si True, renvoie également les objets des groupes sélectionnés.

Renvoie:

Liste des uuids des objets sélectionnés.

get_version() str#

Renvoie la version de DataLab.

Renvoie:

Version de DataLab

import_h5_file(filename: str, reset_all: bool | None = None) None#

Ouvrir le navigateur HDF5 de DataLab pour importer un fichier HDF5.

Paramètres:
  • filename – Nom du fichier HDF5

  • reset_all – Réinitialiser toutes les données de l’application. Par défaut, None.

import_macro_from_file(filename: str) None#

Importer une macro à partir d’un fichier

Paramètres:

filename – Nom du fichier.

load_from_directory(path: str) None#

Open objects from directory in current panel (signals/images).

Paramètres:

path – directory path

load_from_files(filenames: list[str]) None#

Ouvrir des objets à partir de fichiers dans le panneau en cours

Paramètres:

filenames – liste des noms de fichiers

open_h5_files(h5files: list[str] | None = None, import_all: bool | None = None, reset_all: bool | None = None) None#

Ouvrir un fichier HDF5 de DataLab ou importer à partir de tout autre fichier HDF5.

Paramètres:
  • h5files – Liste des fichiers HDF5 à ouvrir. Par défaut, None.

  • import_all – Importer tous les objets à partir des fichiers HDF5. Par défaut, None.

  • reset_all – Réinitialiser toutes les données de l’application. Par défaut, None.

raise_window() None#

Faire apparaître la fenêtre de DataLab

reset_all() None#

Réinitialiser toutes les données de l’application

run_macro(number_or_title: int | str | None = None) None#

Exécute la macro.

Paramètres:

number_or_title – Numéro de macro, ou titre de macro. Par défaut, None (macro en cours).

Lève:

ValueError – si la macro n’est pas trouvée

save_to_h5_file(filename: str) None#

Enregistrer dans un fichier HDF5 de DataLab.

Paramètres:

filename – Nom du fichier HDF5

select_groups(selection: list[int | str] | None = None, panel: str | None = None) None#

Sélectionner des groupes dans le panneau en cours.

Paramètres:
  • selection – Liste des numéros de groupe (1 à N), ou liste des uuids de groupe, ou None pour sélectionner tous les groupes. Par défaut, None.

  • panel – nom du panneau (valeurs valides : « signal », « image »). Si None, le panneau en cours est utilisé. Par défaut, None.

select_objects(selection: list[int | str], panel: str | None = None) None#

Sélectionner des objets dans le panneau en cours.

Paramètres:
  • selection – Liste des numéros d’objet (1 à N) ou uuids à sélectionner

  • panel – nom du panneau (valeurs valides : « signal », « image »). Si None, le panneau en cours est utilisé. Par défaut, None.

set_current_panel(panel: str) None#

Basculer vers le panneau.

Paramètres:

panel – Nom du panneau (valeurs valides : « signal », « image », « macro »))

stop_macro(number_or_title: int | str | None = None) None#

Arrête la macro.

Paramètres:

number_or_title – Numéro de macro, ou titre de macro. Par défaut, None (macro en cours).

Lève:

ValueError – si la macro n’est pas trouvée

toggle_auto_refresh(state: bool) None#

Basculer l’état du rafraîchissement automatique.

Paramètres:

state – État du rafraîchissement automatique

toggle_show_titles(state: bool) None#

Basculer l’état d’affichage des titres.

Paramètres:

state – État d’affichage des titres

API publique : méthodes supplémentaires#

Les méthodes de la classe de contrôle à distance (en utilisant le proxy ou le client distant) peuvent être complétées par des méthodes supplémentaires qui sont ajoutées dynamiquement à l’exécution. Ce mécanisme permet d’accéder aux méthodes des processeurs de DataLab (voir cdl.core.gui.processor).

Processeur de signal#

Lorsque vous travaillez avec des signaux, les méthodes de cdl.core.gui.processor.signal.SignalProcessor peuvent être accédées.

class cdl.core.gui.processor.signal.SignalProcessor(panel: SignalPanel | ImagePanel, plotwidget: PlotWidget)[source]

Objet de traitement de signal : opérations, traitement, analyse

compute_sum() None[source]

Compute sum with cdl.computation.signal.compute_addition()

compute_addition_constant(param: ConstantParam | None = None) None[source]

Compute sum with a constant with cdl.computation.signal.compute_addition_constant()

compute_average() None[source]

Compute average with cdl.computation.signal.compute_addition() and divide by the number of signals

compute_product() None[source]

Compute product with cdl.computation.signal.compute_product()

compute_product_constant(param: ConstantParam | None = None) None[source]

Compute product with a constant with cdl.computation.signal.compute_product_constant()

compute_swap_axes() None[source]

Swap data axes with cdl.computation.signal.compute_swap_axes()

compute_inverse() None[source]

Compute inverse

compute_abs() None[source]

Compute absolute value with cdl.computation.signal.compute_abs()

compute_re() None[source]

Compute real part with cdl.computation.signal.compute_re()

compute_im() None[source]

Compute imaginary part with cdl.computation.signal.compute_im()

compute_astype(param: DataTypeSParam | None = None) None[source]

Convert data type with cdl.computation.signal.compute_astype()

compute_log10() None[source]

Compute Log10 with cdl.computation.signal.compute_log10()

compute_exp() None[source]

Compute Log10 with cdl.computation.signal.compute_exp()

compute_sqrt() None[source]

Compute square root with cdl.computation.signal.compute_sqrt()

compute_power(param: PowerParam | None = None) None[source]

Compute power with cdl.computation.signal.compute_power()

compute_arithmetic(obj2: SignalObj | None = None, param: ArithmeticParam | None = None) None[source]

Compute arithmetic operation between two signals with cdl.computation.signal.compute_arithmetic()

compute_difference(obj2: SignalObj | list[SignalObj] | None = None) None[source]

Compute difference between two signals with cdl.computation.signal.compute_difference()

compute_difference_constant(param: ConstantParam | None = None) None[source]

Compute difference with a constant with cdl.computation.signal.compute_difference_constant()

compute_quadratic_difference(obj2: SignalObj | list[SignalObj] | None = None) None[source]

Compute quadratic difference between two signals with cdl.computation.signal.compute_quadratic_difference()

compute_division(obj2: SignalObj | list[SignalObj] | None = None) None[source]

Compute division between two signals with cdl.computation.signal.compute_division()

compute_division_constant(param: ConstantParam | None = None) None[source]

Compute division by a constant with cdl.computation.signal.compute_division_constant()

compute_peak_detection(param: PeakDetectionParam | None = None) None[source]

Detect peaks from data with cdl.computation.signal.compute_peak_detection()

compute_reverse_x() None[source]

Reverse X axis with cdl.computation.signal.compute_reverse_x()

compute_cartesian2polar(param: AngleUnitParam | None = None) None[source]

Convert cartesian to polar coordinates with cdl.computation.signal.compute_cartesian2polar()

compute_polar2cartesian(param: AngleUnitParam | None = None) None[source]

Convert polar to cartesian coordinates with cdl.computation.signal.compute_polar2cartesian().

compute_normalize(param: NormalizeParam | None = None) None[source]

Normalize data with cdl.computation.signal.compute_normalize()

compute_derivative() None[source]

Compute derivative with cdl.computation.signal.compute_derivative()

compute_integral() None[source]

Compute integral with cdl.computation.signal.compute_integral()

compute_calibration(param: XYCalibrateParam | None = None) None[source]

Compute data linear calibration with cdl.computation.signal.compute_calibration()

compute_clip(param: ClipParam | None = None) None[source]

Compute maximum data clipping with cdl.computation.signal.compute_clip()

compute_offset_correction(param: ROI1DParam | None = None) None[source]

Compute offset correction with cdl.computation.signal.compute_offset_correction()

compute_gaussian_filter(param: GaussianParam | None = None) None[source]

Compute gaussian filter with cdl.computation.signal.compute_gaussian_filter()

compute_moving_average(param: MovingAverageParam | None = None) None[source]

Compute moving average with cdl.computation.signal.compute_moving_average()

compute_moving_median(param: MovingMedianParam | None = None) None[source]

Compute moving median with cdl.computation.signal.compute_moving_median()

compute_wiener() None[source]

Compute Wiener filter with cdl.computation.signal.compute_wiener()

compute_lowpass(param: LowPassFilterParam | None = None) None[source]

Compute high-pass filter with cdl.computation.signal.compute_filter()

compute_highpass(param: HighPassFilterParam | None = None) None[source]

Compute high-pass filter with cdl.computation.signal.compute_filter()

compute_bandpass(param: BandPassFilterParam | None = None) None[source]

Compute band-pass filter with cdl.computation.signal.compute_filter()

compute_bandstop(param: BandStopFilterParam | None = None) None[source]

Compute band-stop filter with cdl.computation.signal.compute_filter()

compute_fft(param: FFTParam | None = None) None[source]

Compute FFT with cdl.computation.signal.compute_fft()

compute_ifft(param: FFTParam | None = None) None[source]

Compute iFFT with cdl.computation.signal.compute_ifft()

compute_magnitude_spectrum(param: SpectrumParam | None = None) None[source]

Compute magnitude spectrum with cdl.computation.signal.compute_magnitude_spectrum()

compute_phase_spectrum() None[source]

Compute phase spectrum with cdl.computation.signal.compute_phase_spectrum()

compute_psd(param: SpectrumParam | None = None) None[source]

Compute power spectral density with cdl.computation.signal.compute_psd()

compute_interpolation(obj2: SignalObj | None = None, param: InterpolationParam | None = None)[source]

Compute interpolation with cdl.computation.signal.compute_interpolation()

compute_resampling(param: ResamplingParam | None = None)[source]

Compute resampling with cdl.computation.signal.compute_resampling()

compute_detrending(param: DetrendingParam | None = None)[source]

Compute detrending with cdl.computation.signal.compute_detrending()

compute_convolution(obj2: SignalObj | None = None) None[source]

Compute convolution with cdl.computation.signal.compute_convolution()

compute_windowing(param: WindowingParam | None = None) None[source]

Compute windowing with cdl.computation.signal.compute_windowing()

compute_allan_variance(param: AllanVarianceParam | None = None) None[source]

Compute Allan variance with cdl.computation.signal.compute_allan_variance()

compute_allan_deviation(param: AllanVarianceParam | None = None) None[source]

Compute Allan deviation with cdl.computation.signal.compute_allan_deviation()

compute_overlapping_allan_variance(param: AllanVarianceParam | None = None) None[source]

Compute overlapping Allan variance with cdl.computation.signal.compute_overlapping_allan_variance()

compute_modified_allan_variance(param: AllanVarianceParam | None = None) None[source]

Compute modified Allan variance with cdl.computation.signal.compute_modified_allan_variance()

compute_hadamard_variance(param: AllanVarianceParam | None = None) None[source]

Compute Hadamard variance with cdl.computation.signal.compute_hadamard_variance()

compute_total_variance(param: AllanVarianceParam | None = None) None[source]

Compute total variance with cdl.computation.signal.compute_total_variance()

compute_time_deviation(param: AllanVarianceParam | None = None) None[source]

Compute time deviation with cdl.computation.signal.compute_time_deviation()

compute_all_stability(param: AllanVarianceParam | None = None) None[source]

Compute all stability analysis features using the following functions:

compute_polyfit(param: PolynomialFitParam | None = None) None[source]

Calculer la courbe de régression polynomiale

compute_fit(title: str, fitdlgfunc: Callable) None[source]

Calculer la courbe de régression avec une boîte de dialogue interactive

Paramètres:
  • title – Title of the dialog

  • fitdlgfunc – Fitting dialog function

compute_multigaussianfit() None[source]

Calculer la courbe de régression multi-gaussienne avec une boîte de dialogue interactive

compute_fwhm(param: FWHMParam | None = None) dict[str, ResultShape][source]

Compute FWHM with cdl.computation.signal.compute_fwhm()

compute_fw1e2() dict[str, ResultShape][source]

Compute FW at 1/e² with cdl.computation.signal.compute_fw1e2()

compute_stats() dict[str, ResultProperties][source]

Compute data statistics with cdl.computation.signal.compute_stats()

compute_histogram(param: HistogramParam | None = None) dict[str, ResultShape][source]

Compute histogram with cdl.computation.signal.compute_histogram()

compute_contrast() dict[str, ResultProperties][source]

Compute contrast with cdl.computation.signal.compute_contrast()

compute_x_at_minmax() dict[str, ResultProperties][source]

Compute x at min/max with cdl.computation.signal.compute_x_at_minmax()

compute_x_at_y(param: FindAbscissaParam | None = None) dict[str, ResultProperties][source]

Compute x at y with cdl.computation.signal.compute_x_at_y().

compute_sampling_rate_period() dict[str, ResultProperties][source]

Compute sampling rate and period (mean and std) with cdl.computation.signal.compute_sampling_rate_period()

compute_bandwidth_3db() None[source]

Compute bandwidth at -3dB with cdl.computation.signal.compute_bandwidth_3db()

compute_dynamic_parameters(param: DynamicParam | None = None) dict[str, ResultProperties][source]

Compute Dynamic Parameters (ENOB, SINAD, THD, SFDR, SNR) with cdl.computation.signal.compute_dynamic_parameters()

Processeur d’image#

Lorsque vous travaillez avec des images, les méthodes de cdl.core.gui.processor.image.ImageProcessor peuvent être accédées.

class cdl.core.gui.processor.image.ImageProcessor(panel: SignalPanel | ImagePanel, plotwidget: PlotWidget)[source]

Objet de traitement d’image : opérations, traitement, analyse

compute_normalize(param: NormalizeParam | None = None) None[source]

Normalize data with cdl.computation.image.compute_normalize()

compute_sum() None[source]

Compute sum with cdl.computation.image.compute_addition()

compute_addition_constant(param: ConstantParam | None = None) None[source]

Compute sum with a constant using cdl.computation.image.compute_addition_constant()

compute_average() None[source]

Compute average with cdl.computation.image.compute_addition() and dividing by the number of images

compute_product() None[source]

Compute product with cdl.computation.image.compute_product()

compute_product_constant(param: ConstantParam | None = None) None[source]

Compute product with a constant using cdl.computation.image.compute_product_constant()

compute_logp1(param: LogP1Param | None = None) None[source]

Compute base 10 logarithm using cdl.computation.image.compute_logp1()

compute_rotate(param: RotateParam | None = None) None[source]

Rotate data arbitrarily using cdl.computation.image.compute_rotate()

compute_rotate90() None[source]

Rotate data 90° with cdl.computation.image.compute_rotate90()

compute_rotate270() None[source]

Rotate data 270° with cdl.computation.image.compute_rotate270()

compute_fliph() None[source]

Flip data horizontally using cdl.computation.image.compute_fliph()

compute_flipv() None[source]

Flip data vertically with cdl.computation.image.compute_flipv()

distribute_on_grid(param: GridParam | None = None) None[source]

Distribuer les images sur une grille

reset_positions() None[source]

Réinitialiser les positions des images

compute_resize(param: ResizeParam | None = None) None[source]

Resize image with cdl.computation.image.compute_resize()

compute_binning(param: BinningParam | None = None) None[source]

Binning image with cdl.computation.image.compute_binning()

compute_line_profile(param: LineProfileParam | None = None) None[source]

Compute profile along a vertical or horizontal line with cdl.computation.image.compute_line_profile()

compute_segment_profile(param: SegmentProfileParam | None = None)[source]

Compute profile along a segment with cdl.computation.image.compute_segment_profile()

compute_average_profile(param: AverageProfileParam | None = None) None[source]

Compute average profile with cdl.computation.image.compute_average_profile()

compute_radial_profile(param: RadialProfileParam | None = None) None[source]

Compute radial profile with cdl.computation.image.compute_radial_profile()

compute_histogram(param: HistogramParam | None = None) None[source]

Compute histogram with cdl.computation.image.compute_histogram()

compute_swap_axes() None[source]

Swap data axes with cdl.computation.image.compute_swap_axes().

compute_inverse() None[source]

Compute inverse

compute_abs() None[source]

Compute absolute value with cdl.computation.image.compute_abs()

compute_re() None[source]

Compute real part with cdl.computation.image.compute_re()

compute_im() None[source]

Compute imaginary part with cdl.computation.image.compute_im()

compute_astype(param: DataTypeIParam | None = None) None[source]

Convert data type with cdl.computation.image.compute_astype()

compute_log10() None[source]

Compute Log10 with cdl.computation.image.compute_log10()

compute_exp() None[source]

Compute Log10 with cdl.computation.image.compute_exp()

compute_arithmetic(obj2: ImageObj | None = None, param: ArithmeticParam | None = None) None[source]

Compute arithmetic operation between two images with cdl.computation.image.compute_arithmetic()

compute_difference(obj2: ImageObj | list[ImageObj] | None = None) None[source]

Compute difference between two images with cdl.computation.image.compute_difference()

compute_difference_constant(param: ConstantParam | None = None) None[source]

Compute difference with a constant with cdl.computation.image.compute_difference_constant()

compute_quadratic_difference(obj2: ImageObj | list[ImageObj] | None = None) None[source]

Compute quadratic difference between two images with cdl.computation.image.compute_quadratic_difference()

compute_division(obj2: ImageObj | list[ImageObj] | None = None) None[source]

Compute division between two images with cdl.computation.image.compute_division()

compute_division_constant(param: ConstantParam | None = None) None[source]

Compute division by a constant with cdl.computation.image.compute_division_constant()

compute_flatfield(obj2: ImageObj | None = None, param: FlatFieldParam | None = None) None[source]

Compute flat field correction with cdl.computation.image.compute_flatfield()

compute_calibration(param: ZCalibrateParam | None = None) None[source]

Compute data linear calibration with cdl.computation.image.compute_calibration()

compute_clip(param: ClipParam | None = None) None[source]

Compute maximum data clipping with cdl.computation.image.compute_clip()

compute_offset_correction(param: ROI2DParam | None = None) None[source]

Compute offset correction with cdl.computation.image.compute_offset_correction()

compute_gaussian_filter(param: GaussianParam | None = None) None[source]

Compute gaussian filter with cdl.computation.image.compute_gaussian_filter()

compute_moving_average(param: MovingAverageParam | None = None) None[source]

Compute moving average with cdl.computation.image.compute_moving_average()

compute_moving_median(param: MovingMedianParam | None = None) None[source]

Compute moving median with cdl.computation.image.compute_moving_median()

compute_wiener() None[source]

Compute Wiener filter with cdl.computation.image.compute_wiener()

compute_fft(param: FFTParam | None = None) None[source]

Compute FFT with cdl.computation.image.compute_fft()

compute_ifft(param: FFTParam | None = None) None[source]

Compute iFFT with cdl.computation.image.compute_ifft()

compute_magnitude_spectrum(param: SpectrumParam | None = None) None[source]

Compute magnitude spectrum with cdl.computation.image.compute_magnitude_spectrum()

compute_phase_spectrum() None[source]

Compute phase spectrum with cdl.computation.image.compute_phase_spectrum()

compute_psd(param: SpectrumParam | None = None) None[source]

Compute Power Spectral Density (PSD) with cdl.computation.image.compute_psd()

compute_butterworth(param: ButterworthParam | None = None) None[source]

Compute Butterworth filter with cdl.computation.image.compute_butterworth()

compute_threshold(param: ThresholdParam | None = None) None[source]

Compute parametric threshold with cdl.computation.image.threshold.compute_threshold()

compute_threshold_isodata() None[source]

Compute threshold using Isodata algorithm with cdl.computation.image.threshold.compute_threshold_isodata()

compute_threshold_li() None[source]

Compute threshold using Li algorithm with cdl.computation.image.threshold.compute_threshold_li()

compute_threshold_mean() None[source]

Compute threshold using Mean algorithm with cdl.computation.image.threshold.compute_threshold_mean()

compute_threshold_minimum() None[source]

Compute threshold using Minimum algorithm with cdl.computation.image.threshold.compute_threshold_minimum()

compute_threshold_otsu() None[source]

Compute threshold using Otsu algorithm with cdl.computation.image.threshold.compute_threshold_otsu()

compute_threshold_triangle() None[source]

Compute threshold using Triangle algorithm with cdl.computation.image.threshold.compute_threshold_triangle()

compute_threshold_yen() None[source]

Compute threshold using Yen algorithm with cdl.computation.image.threshold.compute_threshold_yen()

compute_all_threshold() None[source]

Compute all threshold algorithms using the following functions:

compute_adjust_gamma(param: AdjustGammaParam | None = None) None[source]

Compute gamma correction with cdl.computation.image.exposure.compute_adjust_gamma()

compute_adjust_log(param: AdjustLogParam | None = None) None[source]

Compute log correction with cdl.computation.image.exposure.compute_adjust_log()

compute_adjust_sigmoid(param: AdjustSigmoidParam | None = None) None[source]

Compute sigmoid correction with cdl.computation.image.exposure.compute_adjust_sigmoid()

compute_rescale_intensity(param: RescaleIntensityParam | None = None) None[source]

Rescale image intensity levels with :py:func`cdl.computation.image.exposure.compute_rescale_intensity`

compute_equalize_hist(param: EqualizeHistParam | None = None) None[source]

Histogram equalization with cdl.computation.image.exposure.compute_equalize_hist()

compute_equalize_adapthist(param: EqualizeAdaptHistParam | None = None) None[source]

Adaptive histogram equalization with cdl.computation.image.exposure.compute_equalize_adapthist()

compute_denoise_tv(param: DenoiseTVParam | None = None) None[source]

Compute Total Variation denoising with cdl.computation.image.restoration.compute_denoise_tv()

compute_denoise_bilateral(param: DenoiseBilateralParam | None = None) None[source]

Compute bilateral filter denoising with cdl.computation.image.restoration.compute_denoise_bilateral()

compute_denoise_wavelet(param: DenoiseWaveletParam | None = None) None[source]

Compute Wavelet denoising with cdl.computation.image.restoration.compute_denoise_wavelet()

compute_denoise_tophat(param: MorphologyParam | None = None) None[source]

Denoise using White Top-Hat with cdl.computation.image.restoration.compute_denoise_tophat()

compute_all_denoise(params: list | None = None) None[source]

Calculer tous les filtres de débruitage en utilisant les fonctions suivantes :

compute_white_tophat(param: MorphologyParam | None = None) None[source]

Compute White Top-Hat with cdl.computation.image.morphology.compute_white_tophat()

compute_black_tophat(param: MorphologyParam | None = None) None[source]

Compute Black Top-Hat with cdl.computation.image.morphology.compute_black_tophat()

compute_erosion(param: MorphologyParam | None = None) None[source]

Compute Erosion with cdl.computation.image.morphology.compute_erosion()

compute_dilation(param: MorphologyParam | None = None) None[source]

Compute Dilation with cdl.computation.image.morphology.compute_dilation()

compute_opening(param: MorphologyParam | None = None) None[source]

Compute morphological opening with cdl.computation.image.morphology.compute_opening()

compute_closing(param: MorphologyParam | None = None) None[source]

Compute morphological closing with cdl.computation.image.morphology.compute_closing()

compute_all_morphology(param: MorphologyParam | None = None) None[source]

Calculer tous les filtres de morphologie en utilisant les fonctions suivantes :

compute_canny(param: CannyParam | None = None) None[source]

Compute Canny filter with cdl.computation.image.edges.compute_canny()

compute_roberts() None[source]

Compute Roberts filter with cdl.computation.image.edges.compute_roberts()

compute_prewitt() None[source]

Compute Prewitt filter with cdl.computation.image.edges.compute_prewitt()

compute_prewitt_h() None[source]

Compute Prewitt filter (horizontal) with cdl.computation.image.edges.compute_prewitt_h()

compute_prewitt_v() None[source]

Compute Prewitt filter (vertical) with cdl.computation.image.edges.compute_prewitt_v()

compute_sobel() None[source]

Compute Sobel filter with cdl.computation.image.edges.compute_sobel()

compute_sobel_h() None[source]

Compute Sobel filter (horizontal) with cdl.computation.image.edges.compute_sobel_h()

compute_sobel_v() None[source]

Compute Sobel filter (vertical) with cdl.computation.image.edges.compute_sobel_v()

compute_scharr() None[source]

Compute Scharr filter with cdl.computation.image.edges.compute_scharr()

compute_scharr_h() None[source]

Compute Scharr filter (horizontal) with cdl.computation.image.edges.compute_scharr_h()

compute_scharr_v() None[source]

Compute Scharr filter (vertical) with cdl.computation.image.edges.compute_scharr_v()

compute_farid() None[source]

Compute Farid filter with cdl.computation.image.edges.compute_farid()

compute_farid_h() None[source]

Compute Farid filter (horizontal) with cdl.computation.image.edges.compute_farid_h()

compute_farid_v() None[source]

Compute Farid filter (vertical) with cdl.computation.image.edges.compute_farid_v()

compute_laplace() None[source]

Compute Laplace filter with cdl.computation.image.edges.compute_laplace()

compute_all_edges() None[source]

Compute all edges filters using the following functions:

compute_stats() dict[str, ResultProperties][source]

Compute data statistics with cdl.computation.image.compute_stats()

compute_centroid() dict[str, ResultShape][source]

Compute image centroid with cdl.computation.image.compute_centroid()

compute_enclosing_circle() dict[str, ResultShape][source]

Compute minimum enclosing circle with cdl.computation.image.compute_enclosing_circle()

compute_peak_detection(param: Peak2DDetectionParam | None = None) dict[str, ResultShape][source]

Compute 2D peak detection with cdl.computation.image.compute_peak_detection()

compute_contour_shape(param: ContourShapeParam | None = None) dict[str, ResultShape][source]

Compute contour shape fit with cdl.computation.image.detection.compute_contour_shape()

compute_hough_circle_peaks(param: HoughCircleParam | None = None) dict[str, ResultShape][source]

Calculer la détection de pics basée sur une transformée de Hough circulaire

compute_blob_dog(param: BlobDOGParam | None = None) dict[str, ResultShape][source]

Compute blob detection using Difference of Gaussian method with cdl.computation.image.detection.compute_blob_dog()

compute_blob_doh(param: BlobDOHParam | None = None) dict[str, ResultShape][source]

Compute blob detection using Determinant of Hessian method with cdl.computation.image.detection.compute_blob_doh()

compute_blob_log(param: BlobLOGParam | None = None) dict[str, ResultShape][source]

Compute blob detection using Laplacian of Gaussian method with cdl.computation.image.detection.compute_blob_log()

compute_blob_opencv(param: BlobOpenCVParam | None = None) dict[str, ResultShape][source]

Compute blob detection using OpenCV with cdl.computation.image.detection.compute_blob_opencv()