:orphan:

PVCam Camera
============

**From:** `Teledyne Technologies <https://www.teledynevisionsolutions.com/products/pvcam-sdk-amp-driver/>`_

**Class:** :py:class:`herosdevices.hardware.teledyne.pvcam.PvcamCamera`


**Driver Quality Index:** beta


.. admonition:: Requires the following packages 

   `pyvcam <https://github.com/Photometrics/PyVCAM>`_

Additional Information :bdg-warning:`Check before use`
------------------------------------------------------

.. dropdown:: PVCam Setup


   
   This device requires additional binary drivers to run.
   
   .. warning::
   
      The PCIe Driver only works with very specific (and often outdated) kernel versions.
      If you need the PCIe driver you will likely need to build a docker image yourself or run it without docker.
   
   The following script can be :external:ref:`used with BOSS <boss-additional-deps>` to automatically build and install the driver inside a docker container.
   
   .. code-block:: bash
      :caption: pvcam.boss.sh
   
      SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
   
      # Install prerequisites
      apt-get update && apt-get install -y sudo git
   
      # Install the vendor library itself
      # We have to agree to some licenses here so we use the "yes" command.
      # The EUID=1 is a little hack to trick the installer into thinking we're not root.
      /bin/sh -c 'yes | /bin/bash '"${SCRIPT_DIR}"'/pvcam/pvcam__install_helper-Ubuntu.sh'
   
      # Remove build files after installation to make image a bit smaller
      rm -rf /pvcam
   
      # We need to point the python api to the correct library path
      export PVCAM_SDK_PATH="/opt/pvcam/sdk"
      # Install python API
      pip install --break-system-packages PyVCAM
   
   Place the ``pvcam`` folder from the archive you can download `here <https://www.teledynevisionsolutions.com/products/pvcam-sdk-amp-driver/>`_ in the same folder as the script.
   Finally, add the following lines to your docker compose file:
   
   .. code-block:: yaml
   
       environment:
         - PVCAM_SDK_PATH=/opt/pvcam/sdk
         - PVCAM_UMD_PATH=/opt/pvcam/drivers/user-mode
         - PVCAM_VERSION=3.10.2.5 # Adjust this to your version
   
   
   .. important::
   
      To access the camera from within the docker container follow :external+boss:std:ref:`this guide <boss-docker-device-access>`.
      Note, that pvcam cameras are not linked to a nice name but are only accessible via their usb path like
      ``/dev/bus/usb/004/004``. To find this path run
   
      .. code-block:: bash
   
         lsusb | grep <NAME> |  awk '{ sub(/:/, "", $4); print "/dev/bus/usb/" $2 "/" $4 }'
   
      Replace ``<NAME>`` with the name of your device as shown by ``lsusb``.
   

....................

A class to interface with Teledyne PVCam Cameras.

It manages camera configuration, acquisition, and data streaming compatible with the atomiq camera template.

.. tab-set:: 


   .. tab-item:: Arguments
   
   
      Bold arguments are mandatory. For more information on the listed arguments refer to the class             documentation: :py:class:`herosdevices.hardware.teledyne.pvcam.PvcamCamera` If parameters appear in this             list but not in the class definition, please recursively check the linked base classes for the             definition of the parameter.
      
      
      .. list-table:: 
         :widths: 50 50 50 100
         :header-rows: 1
      
         * - Argument
           - Type
           - Default Value
           - Description
         * - **cam_id**
           - **<class 'str'>**
           - 
           - Serial number of the cam. Can be obtained for example from the ``PVCamTest`` program shipped with the vendor library. If you specify a wrong id, this driver will also log a list of available devices.
         * - **config_dict**
           - **<class 'dict'>**
           - 
           - Dict of configuration values like shown in the json example above.
         * - default_config
           - str | None
           - None
           - Default key in :code:`config_dict` to use.
         * - lib_path
           - str | None
           - None
           - Path to vendor library. Can also be set via the environmental variable ``PVCAM_SDK_PATH``
      

   .. tab-item:: Example JSON for BOSS
   
      The following JSON strings can be used to start a HERO device representation of             :py:class:`PvcamCamera <herosdevices.hardware.teledyne.pvcam.PvcamCamera>` using             `BOSS <https://boss-eb4966.gitlab.io/>`_.
      
      .. code-block:: json
      
         {
             "_id": "my-camera",
             "classname": "herosdevices.hardware.teledyne.PvcamCamera",
             "arguments": {
                 "cam_id": "pvcamUSB_0",
                 "default_config": "default",
                 "config_dict": {
                     "default": {
                         "roi": [
                             1500,
                             800,
                             700,
                             700
                         ],
                         "exp_mode": "Edge Trigger"
                     }
                 }
             }
         }
      
      :sup:`from examples/teledyne/pvcam.json` 
      
      
      .. code-block:: json
      
         {
             "_id": "my_PvcamCamera",
             "classname": "herosdevices.hardware.teledyne.pvcam.PvcamCamera",
             "arguments": {
                 "cam_id": "<class 'str'>",
                 "config_dict": "<class 'dict'>",
                 "default_config": null,
                 "lib_path": null
             }
         }
      
      :sup:`generated from signature`
   .. tab-item:: Inheritance
   
   
      .. inheritance-diagram:: herosdevices.hardware.teledyne.pvcam.PvcamCamera
      
