Overview¶
This page contains different overviews of the PyExpLabSys archive and can work as an entry point for a new user.
Section Project Overview contains a short explanation of the different components that PyExpLabSys consist of and the source code and documentation entries that are relevant for that part.
The table in section Module Overview contains an overview of all the modules in PyExpLabSys. The overview consist of a short description (the first line of the module docstring) and its Python 2/3 support status.
PyExpLabSys strive to support Python version 2.7 and >=3.3. See the section Python 3 support about Python 3 support.
Project Overview¶
This section will explain how the different components of PyExpLabSys (and its sister project cinfdata) fits together.
The overall structure is illustrated in the overview figure. On the aquisition level, there is a number of machines which could be e.g. Raspberry Pi’s or laboratory PC’s, which will use different parts of PyExpLabSys depending on its purpose.
Machine 1 e.g. is used to parse already aquired data from local data files (File parsers) and send that data to the database (Database Savers). Machine 2 aquires data via an equipment drivers (Drivers) and makes it available to other machines on the network (Sockets) and uploads it to the database (Database Savers). Like machine 2, machine 3 also aquires data directly (Drivers), but it also makes use of the data that machine 2 makes available (Sockets).
On the server level there is a MySQL servers to which all data is saved and a webserver. The webserver runs a webpage called “Cinfdata” (source code), which is used for data presentation and light data treatment.
On the user level, users will commonly access the data via the Cinfdata website in a browser on the desktop or on a smart phone. To get the data locally to do more extensive data treament, it is possible to fetch the data directly from MySQL server or to use an export function on the website.
In the following, each of these software components will be described in a little more detail.
Drivers¶
At this point PyExpLabSys contains a reasonable amount of drivers (46 files, 81 classes May-16) for general purpose equipment (data cards, temperature readout etc.) and for equipment related specifically to the vacuum lab we work in (pressure gauge controllers, mass spectrometers etc).
The source code for the drivers are in the drivers folder, in which the file names are either manufacturer and model or just the manufacturer.
The documentation for the drivers are divided into two sections Hardware Drivers and Hardware Drivers Autogenerated Docs Only. The latter is the group for which there is only API documentation auto generated from the source code and the former are the drivers that has more specific documentation with example usage etc.
File parsers¶
PyExpLabSys also contains a small number of parsers for custom file formats. The source code for these are in the file_parsers folder and the documentation is in the File parsers section.
Database Savers¶
The database savers are some of the more frequently used classes in PyExpLabSys. Quite simply, they abstract away; the database layout, the SQL and the queuing of data ofloading (to prevent loosing data in the event of data loss). The source code for the database savers are in database_saver module in the common sub-package. The documentation is located at The database_saver module.
Sockets¶
The sockets are another set of very important and highly used classes in PyExpLabSys. Most of the sockets are socket servers, which mean that they accept UDP requests and serves (or accepts) data. These are essentially used as network variables, by either exposing a measurement on the network or accepting input. A final type of socket is the LiveSocket which is used to live stream data to a live streaming proxy server. Furthermore, all sockets also expose system (health) information to the network. The code for the sockets are found in the sockets module in the common sub-package. The documentation is located at The sockets module.
Apps¶
The apps section contains stand alone programs which can be used directly and not only as service functions of larger programs. Typically the apps sports text based guis and several apps also have ambitions for graphical guis. Notable examples of apps are: socket supervisor This very simple app continously probes a port (typically a socket) and reports back if the socket is running correctly.
Mass Spectrometer Controls a number of Pfeiffer mass spectrometers. The app includes support for an infinite amount of meta-channels wich is pulled in via sockets.
Picture Logbook A graphical logbook system based on a barcode reader and a camera. The user of the equipment logs in before use and out after use. A picture of the equipment is acquired at login and logout. Also contains support for an external screen wich shows the currently logged in user.
Turbo pump controler Logs and controls Pfeiffer turbo pumps. A number of important parameters are shown in a terminal and the values are also availble as live sockets.
Misc.¶
Besides from the items listed above PyExpLabSys contains a number of
little helpers. The PyExpLabSys.common.utilities
(code,
doc) module contains a convenience
function to get a logger, that is configured that way that we prefer,
including email notification of anything warning level or above.
Python 3 support¶
We love Python 3. Unfortunately we are not hired to make software, but to keep a lab running. This means that modules are only ported to Python 3, when it is either convinient or we are touching the code anyway.
Module Overview¶
PyExpLabSys.settings (Python 2 only [1])
- This module contains the modules used for settings for PyExpLabSys
PyExpLabSys.combos (Python 2 only [1])
- This module contains socket, database saver and logger heuristic combinations
PyExpLabSys.drivers.vaisala_dmt143 (Python 2 only [1])
- Driver for Vaisala DMT 143
PyExpLabSys.drivers.ADS1115 (Python 2 only [1])
- Driver for ADS1115 (Analog to Digital Converter)
PyExpLabSys.drivers.keithley_2400 (Python 2 only [1])
- Simple driver for Keithley 2400 SMU
PyExpLabSys.drivers.stmicroelectronics_l3g4200d (Python 2 and 3)
- Driver for STMicroelectronics L3G4200D 3 axis gyroscope
PyExpLabSys.drivers.sensirion_sps30 (Python 2 only [1])
- Driver class for
PyExpLabSys.drivers.bio_logic (Python 2 only [1])
- This module is a Python implementation of a driver around the EC-lib DLL. It can be used to control at least the SP-150 potentiostat from Bio-Logic under 32 bit Windows.
PyExpLabSys.drivers.keithley_2700 (Python 2 only [1])
- Simple driver for Keithley Model 2700
PyExpLabSys.drivers.honeywell_6000 (Python 2 and 3)
- Driver for HIH6000 class temperature and humidity sensors
PyExpLabSys.drivers.keithley_6220 (Python 2 only [1])
- Simple driver for Keithley 6220 SMU
PyExpLabSys.drivers.pfeiffer_turbo_pump (Python 2 and 3)
- Self contained module to run a Pfeiffer turbo pump including fall-back text gui and data logging.
PyExpLabSys.drivers.microchip_tech_mcp9808 (Python 2 only [1])
- NO DESCRIPTION
PyExpLabSys.drivers.keithley_2182 (Python 2 only [1])
- Simple driver for Keithley 2182 Nanovolt Meter
PyExpLabSys.drivers.tenma (Python 2 and 3)
- from __future__ import unicode_literals, print_function
PyExpLabSys.drivers.inficon_sqc310 (Python 2 only [1])
- NO DESCRIPTION
PyExpLabSys.drivers.srs_sr630 (Python 2 and 3)
- Driver for Standford Research Systems, Model SR630
PyExpLabSys.drivers.weather_info (Python 2 only [1])
- Weather info driver
PyExpLabSys.drivers.analogdevices_ad5667 (Python 3 only)
- Driver for the Analog Devices AD5667 2 channel analog output DAC
PyExpLabSys.drivers.isotech_ips (Python 2 only [1])
- Driver for ISO-TECH IPS power supply series
PyExpLabSys.drivers.epimax (Python 2 and 3)
- Driver for the Epimax PVCi process vacuum controller
PyExpLabSys.drivers.xgs600 (Python 2 and 3)
- Driver class for XGS600 gauge controll
PyExpLabSys.drivers.microchip_tech_mcp3428 (Python 2 only [1])
- Driver for Microchip Technology MCP3428 Analog Input device Calibrated to PR33-13 from ncd.io other products will use different voltage references.
PyExpLabSys.drivers.specs_iqe11 (Python 2 only [1])
- Self contained module to run a SPECS sputter gun including fall-back text gui
PyExpLabSys.drivers.scpi (Python 2 only [1])
- Implementation of SCPI standard
PyExpLabSys.drivers.lascar (Python 2 only [1])
- Driver for the EL-USB-RT temperature and humidity USB device from Lascar
PyExpLabSys.drivers.asair_aht20 (Python 2 only [1])
- NO DESCRIPTION
PyExpLabSys.drivers.mks_g_series (Python 2 and 3)
- Driver for MKS g-series flow controller
PyExpLabSys.drivers.NGC2D (Python 2 only [1])
- NO DESCRIPTION
PyExpLabSys.drivers.omegabus (Python 2 and 3)
- Driver for OmegaBus devices
PyExpLabSys.drivers.kjlc_pressure_gauge (Python 2 and 3)
- Module contains driver for KJLC 3000 pressure gauge
PyExpLabSys.drivers.dataq_comm (Python 2 and 3)
- Driver for DATAQ dac units
PyExpLabSys.drivers.chemitec_s411 (Python 2 only [1])
- NO DESCRIPTION
PyExpLabSys.drivers.tsl45315 (Python 2 and 3)
- Driver for TSL45315 Digital Ambient Light Sensor
PyExpLabSys.drivers.four_d_systems (Python 2 and 3)
- Drivers for the 4d systems displays
PyExpLabSys.drivers.netio_powerbox (Python 2 only [1])
- NO DESCRIPTION
PyExpLabSys.drivers.srs_sr830 (Python 2 only [1])
- Simple driver for Keithley SRS SR830 Lock-In Amplifier
PyExpLabSys.drivers.stahl_hv_400 (Python 2 and 3)
- Driver for Stahl HV 400 Ion Optics Supply
PyExpLabSys.drivers.seeed_studio_relay (Python 2 only [1])
- NO DESCRIPTION
PyExpLabSys.drivers.hamamatsu (Python 2 and 3)
- This is a driver for the Hamamatsu LC-L1V5 LED Driver. It is based on the Users’s Manual for LC-L1V5 version W2-0363-5
PyExpLabSys.drivers.pfeiffer (Python 2 only [1])
- This module contains drivers for the following equipment from Pfeiffer Vacuum:
PyExpLabSys.drivers.deltaco_TB_298 (Python 3 only)
- Driver with line reader for the Deltaco TB-298 Keypad
PyExpLabSys.drivers.mks_925_pirani (Python 2 and 3)
- Driver for MKS 925 micro pirani
PyExpLabSys.drivers.htc5500 (Python 3 only)
- Driver for the HTC 5500 Pro temperature controller
PyExpLabSys.drivers.ti_ads1115 (Python 2 only [1])
- NO DESCRIPTION
PyExpLabSys.drivers.intellemetrics_il800 (Python 2 only [1])
- Driver for IL800 deposition controller
PyExpLabSys.drivers.agilent_34972A (Python 2 and 3)
- Driver class for Agilent 34972A multiplexer
PyExpLabSys.drivers.freescale_mma7660fc (Python 2 and 3)
- Driver for AIS328DQTR 3 axis accelerometer
PyExpLabSys.drivers.agilent_34410A (Python 2 and 3)
- Driver class for Agilent 34410A DMM
PyExpLabSys.drivers.sparkfun_quad_relay (Python 2 only [1])
- NO DESCRIPTION
PyExpLabSys.drivers.vivo_technologies (Python 2 only [1])
- Driver for a Vivo Technologies LS-689A barcode scanner
PyExpLabSys.drivers.pfeiffer_qmg420 (Python 2 only [1])
- NO DESCRIPTION
PyExpLabSys.drivers.wpi_al1000 (Python 2 only [1])
- This module implements a driver for the AL1000 syringe pump from World Precision Instruments
PyExpLabSys.drivers.xp_power_hpa_series (Python 2 only [1])
- NO DESCRIPTION
PyExpLabSys.drivers.brooks_s_protocol (Python 2 and 3)
- Driver for Brooks s-protocol
PyExpLabSys.drivers.mks_937b (Python 2 and 3)
- Driver for MKS 937b gauge controller
PyExpLabSys.drivers.edwards_agc (Python 2 only [1])
- Driver and simple test case for Edwards Active Gauge Controler
PyExpLabSys.drivers.stmicroelectronics_ais328dq (Python 2 and 3)
- Driver for STMicroelectronics AIS328DQTR 3 axis accelerometer
PyExpLabSys.drivers.galaxy_3500 (Python 2 and 3)
- Python interface for Galaxy 3500 UPS. The driver uses the telnet interface of the device.
PyExpLabSys.drivers.powerwalker_ethernet (Python 2 only [1])
- NO DESCRIPTION
PyExpLabSys.drivers.omega_cni (Python 2 and 3)
- This module contains drivers for equipment from Omega. Specifically it contains a driver for the ??? thermo couple read out unit.
PyExpLabSys.drivers.bosch_bme280 (Python 2 only [1])
- NO DESCRIPTION
PyExpLabSys.drivers.powerwalker (Python 2 only [1])
- NO DESCRIPTION
PyExpLabSys.drivers.mks_pi_pc (Python 2 only [1])
- NO DESCRIPTION
PyExpLabSys.drivers.inficon_sqm160 (Python 2 only [1])
- Driver for Inficon SQM160 QCM controller
PyExpLabSys.drivers.rosemount_nga2000 (Python 2 only [1])
- NO DESCRIPTION
PyExpLabSys.drivers.fug (Python 2 only [1])
- Driver for “fug NTN 140 - 6,5 17965-01-01” power supply Communication via the Probus V serial interface.
PyExpLabSys.drivers.keithley_smu (Python 2 and 3)
- Simple driver for Keithley SMU
PyExpLabSys.drivers.omega_D6400 (Python 2 and 3)
- Driver for Omega D6400 daq card
PyExpLabSys.drivers.edwards_nxds (Python 2 only [1])
- Driver for Edwards, nXDS pumps
PyExpLabSys.drivers.omron_d6fph (Python 2 and 3)
- Hint for implementation found at http://forum.arduino.cc/index.php?topic=285116.0
PyExpLabSys.drivers.specs_XRC1000 (Python 2 only [1])
- Self contained module to run a SPECS sputter gun including fall-back text gui
PyExpLabSys.drivers.crowcon (Python 2 and 3)
- This module contains a driver for the Vortex gas alarm central
PyExpLabSys.drivers.dataq_DI2008 (Python 2 only [1])
- NO DESCRIPTION
PyExpLabSys.drivers.nxp_pcf8593 (Python 2 only [1])
- NO DESCRIPTION
PyExpLabSys.drivers.ocs_3l_oxygen_sensor (Python 2 only [1])
- Bit-banged driver for oxygen sensor. Can also work with a proper 3.3V uart.
PyExpLabSys.drivers.cpx400dp (Python 2 and 3)
- Driver for CPX400DP power supply
PyExpLabSys.drivers.omega_cn7800 (Python 2 only [1])
- Omega CN7800 Modbus driver. Might also work with other CN units. Settings on the device should be RTU and datalength 8 bit.
PyExpLabSys.drivers.keithley_2000 (Python 2 only [1])
- Simple driver for Keithley 2000 DMM
PyExpLabSys.drivers.ccs811 (Python 2 only [1])
- Driver for CCS811 enviromental sensor
PyExpLabSys.drivers.pfeiffer_qmg422 (Python 2 and 3)
- This module contains the driver code for the QMG422 control box for a pfeiffer mass-spectrometer. The code should in principle work for multiple type of electronics. It has so far been tested with a qme-125 box and a qme-??? box. The module is ment as a driver and has very little function in itself. The module is ment to be used as a sub-module for a large program providing the functionality to actually use the mass-spectrometer.
PyExpLabSys.drivers.dataq_binary (Python 2 and 3)
- DataQ Binary protocol driver
PyExpLabSys.drivers.bronkhorst (Python 2 and 3)
- Driver for Bronkhorst flow controllers, including simple test case
PyExpLabSys.drivers.xp_power_1500_series (Python 2 only [1])
- NO DESCRIPTION
PyExpLabSys.drivers.tdk_lambda_z_series (Python 2 only [1])
- NO DESCRIPTION
PyExpLabSys.drivers.vogtlin (Python 2 and 3)
- Minimal MODBUS driver for the red-y smart - meter GSM, - controller GSC, - pressure controller GSP and - back pressure controller GSB.
PyExpLabSys.drivers.luxaflex (Python 2 only [1])
- NO DESCRIPTION
PyExpLabSys.drivers.polyscience_4100 (Python 2 and 3)
- Driver and test case for Polyscience 4100
PyExpLabSys.drivers.innova (Python 2 only [1])
- Driver for the Innova RT 6K UPS
PyExpLabSys.drivers.teltonika_rut (Python 2 only [1])
- NO DESCRIPTION
PyExpLabSys.thirdparty.cached_property (Python 2 only [1])
- Copy of the cached property project from https://github.com/pydanny/cached-property
PyExpLabSys.thirdparty.olefile (Python 2 only [1])
- NO DESCRIPTION
PyExpLabSys.apps.wind_speed_logger (Python 2 and 3)
- Logs fume hood wind speed
PyExpLabSys.apps.picture_logbook (Python 2 only [1])
- Module to run a graphical logbook of a specific area
PyExpLabSys.apps.emission_control (Python 2 only [1])
- NO DESCRIPTION
PyExpLabSys.apps.socket_supervisor (Python 2 and 3)
- Module to check that local machine is living up to its duties
PyExpLabSys.apps.microreactor_livevalue_web (Python 3 only)
- Live vaslues used for the microreacotr setups
PyExpLabSys.apps.socket_tester (Python 2 only [1])
- A socket tester program for linux
PyExpLabSys.apps.bakeout (Python 2 and 3)
- App to control PW-modulated bakeout boxes
PyExpLabSys.apps.transparency_measurement (Python 2 only [1])
- NO DESCRIPTION
PyExpLabSys.apps.ion_optics_controller (Python 2 and 3)
- Ion Optics Control software
PyExpLabSys.apps.rampreader (Python 2 only [1])
- NO DESCRIPTION
PyExpLabSys.apps.mass_finder (Python 2 only [1])
- NO DESCRIPTION
PyExpLabSys.apps.socket_logger (Python 2 and 3)
- App for logging specific sockets into dateplots
PyExpLabSys.apps.turbo_logger (Python 2 and 3)
- App to log output from Pfeiffer Turbo Pumps
PyExpLabSys.apps.edwards_nxds_logger (Python 2 only [1])
- Logger for nXDSni roughing pump
PyExpLabSys.apps.stepped_program_runner.stepped_program_runner (Python 2 only [1])
- A general stepped program runner
PyExpLabSys.apps.qms.qmg_status_output (Python 2 and 3)
- Text UI for mass spec program
PyExpLabSys.apps.qms.qmg_meta_channels (Python 2 and 3)
- Module to perform read-out of meta channels for qms
PyExpLabSys.apps.qms.mass_spec (Python 2 and 3)
- Mass spec program
PyExpLabSys.apps.qms.qms (Python 2 and 3)
- Mass Spec Main program
PyExpLabSys.apps.qms.meta_channel_logger (Python 2 and 3)
- MetaLogger program
PyExpLabSys.apps.Stepper_motor_control.Modbus_comm_socket (Python 3 only)
- NO DESCRIPTION
PyExpLabSys.apps.Stepper_motor_control.Modbus_comm_commands (Python 3 only)
- NO DESCRIPTION
PyExpLabSys.apps.Stepper_motor_control.stepper_motor_GUI (Python 2 only [1])
- NO DESCRIPTION
PyExpLabSys.apps.Stepper_motor_control.stepper_motor_GUI_design (Python 2 only [1])
- NO DESCRIPTION
PyExpLabSys.apps.terminal_plotter.terminal_plot (Python 2 only [1])
- Simple script to plot in terminal the response of any value logged via a DateDataPullSocket versus time.
PyExpLabSys.apps.bakeoutweb.bakeoutweb (Python 2 only [1])
- Web app for the magnificient bakeout app
PyExpLabSys.apps.tof.fix_mass_axis (Python 2 and 3)
- Program to fix x-axis on TOF-spectra
PyExpLabSys.apps.tof.spectrum_plotter (Python 2 only [1])
- NO DESCRIPTION
PyExpLabSys.apps.tof.helper_scripts.lm_test (Python 2 only [1])
- NO DESCRIPTION
PyExpLabSys.auxiliary.tc_calculator (Python 2 only [1])
- NO DESCRIPTION
PyExpLabSys.auxiliary.rtd_calculator (Python 2 and 3)
- Calculates temperatures for an RTD
PyExpLabSys.auxiliary.pid (Python 2 and 3)
- PID calculator
PyExpLabSys.file_parsers.avantage_xlsx_export (Python 2 only [1])
- File parser for the Avantage xlsx export format
PyExpLabSys.file_parsers.total_chrom (Python 3 only)
- Experimental parser for total_chrom files from Perkin-Elmer GC’s
PyExpLabSys.file_parsers.specs (Python 2 and 3)
- This file is used to parse XPS and ISS data from XML files from the SPECS program.
PyExpLabSys.file_parsers.chemstation (Python 2 and 3)
- File parser for Chemstation files
PyExpLabSys.file_parsers.omicron (Python 2 only [1])
- File parser for the Omicron “Flattener” format
PyExpLabSys.file_parsers.avantage (Python 2 only [1])
- Test module for Avantage files
PyExpLabSys.common.value_logger (Python 2 and 3)
- Reads continuously updated values and decides whether it is time to log a new point
PyExpLabSys.common.socket_clients (Python 2 only [1])
- This file implements Python clients for the DateDataPullSocket
PyExpLabSys.common.valve_control (Python 2 and 3)
- This module implements the necessary interface to control a valve box using standard gpio commands
PyExpLabSys.common.decorators (Python 2 only [1])
- This module contains general purpose decorators
PyExpLabSys.common.flow_control_bronkhorst (Python 2 and 3)
- Common code for Bronkhorst boxes
PyExpLabSys.common.text_plot (Python 2 only [1])
- GNU plot based plots direcly into a curses window
PyExpLabSys.common.plotters_backend_qwt (Python 2 only [1])
- This module contains plotting backends that use the PyQwt library
PyExpLabSys.common.analog_flow_control (Python 2 only [1])
- Control app for analog pressure controller on sniffer setup
PyExpLabSys.common.plotters (Python 2 only [1])
- This module contains plotters for experimental data gathering applications. It contains a plotter for data sets.
PyExpLabSys.common.microreactor_temperature_control (Python 2 and 3)
- Common code for microreactor heaters
PyExpLabSys.common.functions (Python 2 only [1])
- This module contains general purpose functions
PyExpLabSys.common.sockets (Python 2 and 3)
- The sockets module contains various implementations of UDP socket servers (at present 4 in total) for transmission of data over the network. The different implementations are tailored for a specific purposes, as described below.
PyExpLabSys.common.pressure_controller_xgs600 (Python 2 only [1])
- Pressure xgs600 controller
PyExpLabSys.common.utilities (Python 2 only [1])
- This module contains a convenience function for easily setting up a logger with the
logging
module.
PyExpLabSys.common.chiller_reader (Python 2 and 3)
- Module for monitoring a polyscience chiller
PyExpLabSys.common.database_saver (Python 2 only [1])
- Classes for saving coninuous data and data sets to a database
PyExpLabSys.common.system_status (Python 2 only [1])
- This module contains the SystemStatus class
PyExpLabSys.common.supported_versions (Python 2 and 3)
- Functions used to indicate and check for supported Python versions
PyExpLabSys.common.loggers (Python 2 only [1])
- This module contains convinience classes for database logging. The classes implement queues to contain the data before of loading to the database to ensure against network or server problems.
PyExpLabSys.common.massspec.test (Python 2 only [1])
- Module to test the mass spec common components
PyExpLabSys.common.massspec.channel (Python 2 only [1])
- This module contains the implementation of a general purpose mass spectrometer channel
PyExpLabSys.common.massspec.qt (Python 2 only [1])
- Module that contains QT widgets for mass spectrometer channels and channel lists
Footnotes
[1] | (1, 2, 3, 4, 5, 6, 7, 8, 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) For these modules the Python 2/3 status is not indicated directly in the source code file and so the status is inferred. |