User Guide\n\nIntroduction | \nUsage
\n\nIntroduction
\n\nThis software allows realtime collection and plotting of \ndigitized data in a Jupyter notebook using either of the following two\ninterface boards on a Raspberry Pi:
\n\n\n- Adafruit compliant ADS1115 boards \n(example,\nalso available from other vendors);
\n- The π-Plates DAQC2 plate.
\n- A demo mode will run on any computer with a Jupyter notebook install and\nPython 3.6+. You can try the demo mode without installing on your own \ncomputer by launching an instance on the MyBinder servers:\n.\nExample notebooks can be found in the \"usage_examples\" folder.
\n
\n\nUsage
\n\nLaunch the software | \nInitialize data acquisiton tools | \nCollect data |\nDisplaying a Data Table | \nPlotting data | \nAnalyzing data
\n\nStarting JupyterPiDAQ
\n\nA working Jupyter notebook installation with JupyterPiDAQ installed is\nrequired. If you need to install the software see the Installation \nInstructions. There are two common ways this may be set \nup, that lead to slightly different steps for starting the software:
\n\n\n- A special kernel may be set up that can be used in any Jupyter notebook \ninstall for the current user (see the very end of the\nInstallation Instructions). \n
\n- In this case launch\nJupyter, in which ever directory you want to work, using the \ncommand:
jupyter notebook
. \n- Open a new notebook and choose the kernel \nfor
JupyterPiDAQ
. The kernel name will depend upon what was chosen \nduring installation. \n
\n- Only for use within the directory structure of the virtual environment \nthat was set up for the software. \n
\n- In this case you must navigate to the \ndirectory of the virtual environment using the
cd
command before \nstarting the software. \n- Then enter the virtual environment with the command
pipenv shell
. \nThis assumes you set up pipenv
as described in the \nInstallation instructions. \n- Launch Jupyter using the command:
jupyter notebook
. \n- Open a new python notebook.
\n
\n
\n\n\n\nInitialize the data acquisition tools by putting the statement from \njupyterpidaq.DAQinstance import *
into the first cell and clicking on the \n'Run' button. The package loads supporting packages (numpy, pandas, plotly,\netc...) and searches for compatible hardware. On a Raspberry Pi this takes a\nnumber of seconds. If no compatible A-to-D boards are found, demo mode is used.\nIn demo mode the A-to-D board is simulated by a random number generator.
\n\nWhen setup is done a new menu appears at the end of the menubar (figure 1).
\n\n\n\nFigure 1: The menu created once the data acquisition software is \ninitialized.
\n\nThe menu options insert jupyter widget based GUIs for starting a run,\ndisplaying the data as tables or plots, composing an expression to calculate\na new column in a DataFrame, or fitting data.
\n\nCollecting data
\n\nFrom the \"DAQ Commands\" menu select \"Insert New Run After Selection...\" or \n\"Append New Run to End...\". The first will insert and start the code to set up \ndata collection for a run in the cell below the currently selected cell. \nThe second will append this to the end of the notebook. This will generate \na GUI that looks like the figure 2, below. Fill in the information to define \nwhat you wish to do (see below figure 2 for more details).
\n\n\n\nFigure 2: Image of the GUI for setting up a data collection run.
\n\n\n- Give the run a title/name using the first textbox.
\n- You can collect up to four (4) data traces at once. Two different data \ntraces can display the same analog-to-digital channel, but in different \nunits (e.g. you could record both the raw voltage and temperature from a \nthermistor). Each trace is activated by selecting its checkbox.
\n- Once a trace is activated you can give it a title and must select: the \ndata acquisition board, channel, sensor, units and gain from the \navailable drop-down menus.
\n- Once all your traces are set up decide whether they should be displayed in \nmultiple stacked graphs or all on the same graph. Uncheck the box to \ndisplay all on one graph.
\n- Select the data collection rate (3 Hz is currently the maximum rate).
\n- When everything is set the way you wish, click on the \"Set Parameters\" \nbutton. The collection parameters will be displayed and a button to \nstart the data collection will appear.
\n- The \"start\" button will convert to a \"stop\" button once data collection \nis started. The data graph(s) will update at roughly 1 Hz, so you can \nmonitor the progress of the data collection.
\n- Click the \"stop\" button to end data collection. It can take \na while to stop if the data collection has got ahead of the graphic \ndisplay of the data.
\n- Once collection is stopped you will see a plot or plots of the completed \ndata collection and the name of the .csv file the raw data has been \nbacked up to.
\n
\n\nDisplaying data
\n\nIn a table
\n\nSelecting the \"Show data in table...\" option in the \"DAQ Command\" menu will \ninsert a cell immediately below the currently selected cell displaying a \nwidget in which you can select which data set to display.
\n\nPlotting data
\n\nSelecting the \"Insert new plot after selection...\" option in the menu will\ninsert two cells immediately below the currently selected cell. The first cell\nwill be used to generate a GUI to lead you through creation of the code to\ngenerate the plot. The second cell is where the plot creation code is \ngenerated. The first tab of this GUI looks like figure 3.
\n\n\n\nFigure 3: Image of the first tab in the four tab (4 step) Pandas Plot \nComposer. More information in the Pandas_GUI\ndocumentation.
\n\nIt is best to do the tabs in order. The notices in red will try to \nwarn you of errors or oversights. The \"Instructions\" accordian can be \nexpanded to get more specific information about how to use each tab.
\n\nYou can get more sophisticated control of \nyour plot by editing the code produced by this GUI. See the Plotly \nFigureWidget Instructions and the \nexample Jupyter notebooks referenced there for more information.
\n\nThe GUI destroys itself once you complete step 4.
\n\nAnalyzing data
\n\nCalculating a new column
\n\nSelecting \"Calculate new column...\" from the menu will add two cells\nimmediately below the selected cell. The first cell will create the GUI to\nlead you through creation of the code to calculate the new column. The second\ncell is where the code is built. The first tab of the GUI looks like figure 4.
\n\n\n\nFigure 4: Image of the first tab in the four tab (4 step) Pandas New \nCalculated Column Composer. More information in the Pandas_GUI\ndocumentation.
\n\nDo the tabs in order. You can perform more complex manipulations than built \ninto the GUI by editing the code generated by this GUI.
\n\nThe GUI destroys itself once you complete step 4.
\n\nFitting data
\n\nA GUI for defining simple fits (linear, polynomial, exponential decay, sine \nand Gaussian) can be launched by selecting \"Insert new Fit after selection..\n.\" from the menu. This will create the GUI to lead you through selecting \nand fitting the data. The code is created in the cell immediately below the \nGUI.
\n\n\n\nFigure 5: Image of the first tab in the Pandas Fit Composer.\nMore information in the Pandas_GUI\ndocumentation.
\n\nInstallation
\n\nInitial setup: On Raspberry Pi | \nOn non-Pi Systems
\n\nFinal Set up
\n\nRaspberry Pi Initial Setup
\n\nUnless you only want to run in Demo mode make sure you have one of the \ncompatible interface boards installed. The current options are:
\n\n\n- Adafruit compliant ADS1115 boards \n(example,\nalso available from other vendors);
\n- The π-Plates DAQC2 plate.
\n- If you wish to use different interfaces see the Development\nNotes\nand the
Boards
subpackage of jupyterpidaq
for examples and \ninformation on how to define the code interface for a board. \n
\n\nOS specific: Ubuntu on Pi | \nRaspberrian on Pi
\n\nUbuntu on Pi
\n\nBy default in Ubuntu 20.04 for Pis the gpio and spi groups do not exist.\nThe i2c group does (not always).
\n\n\n- Make sure that the following packages are installed
rpi.gpio-common \npython3-pigpio python3-gpiozero python3-rpi.gpio
. \n- You can avoid having to create a gpio group, by assigning users who need\ngpio access to the dialout group. Check that /dev/gpiomem is part of that \ngroup and that the dialout group has rw access. If not you will need to set\nit.
\n- Users also need to be members of the i2c group. If it does not exist create \nit and then make that the group for /dev/i2c-1 with group rw permissions. \nTHIS MAY NOT BE NECESSARY.
\n- The spi group needs to be created (addgroup?).
\n- Additionally the spi group needs to be given rw access to the spi devices\nat each boot. To do this create a one line rule in a file named \n
/etc/udev/rules.d/50-spidev.rules
containing SUBSYSTEM==\"spidev\", \nGROUP=\"spi\", MODE=\"0660\"
. The file should have rw permission for root \nand read permission for everyone else. \n- Make sure you have pip installed for \npython 3:
python3 -m pip --version
or pip3 --version
. If you do not, \ninstall using apt \ninstall python3-pip
. \n
\n\nRaspberrian on Pi
\n\n(TBD)
\n\nNon-Pi based System Initial Setup
\n\nMake sure that Python >=3.6 is installed: python3 -v
. If not follow \ninstructions at python.org. This software should run \non any computer capable of supporting the necessary version of Python. \nHowevever, it will only run in demo mode if the computer does not support \none of the compatible A-to-D boards.
\n\nGeneric Linux
\n\n\n- If your system hardware \nhas GPIO pins and a GPIO interface board, you should try following the \ninstructions for a Pi based system above. If \nyou figure out how to make this work on other SBCs or systems with GPIO, \nplease submit a pull request updating these instructions.
\n- If your system hardware does not support GPIO and one of the compatible \ninterface boards, the software will run in demo mode.
\n
\n\nNOTE: If a binary distribution (whl or wheel) is not available for your\nplatform, some of the required packages may need to be compiled. If you get\ncompilation errors when installing try getting the python header and \ndevelopment files for your platform. To get them on most *nix platforms use the\ncommand $ sudo apt install python3-dev
.
\n\nMacOS
\n\nWindows (Please, no.....)
\n\nFinal Set Up
\n\nMake sure the user you will be running the software under is a member of the \ngroups dialout
, spi
and if it existsi2c
. It is recommended that you \ninstall JupyterPiDAQ in its own \nvirtual environment.\nThe instructions below do just that using the original author's favorite \nvirtual environment tool pipenv.
\n\nLog into your chosen user account:
\n\n\n- Install pipenv:
pip3 install \n--user pipenv
. You may\nneed to add ~/.local/bin
to your PATH
to make pipenv
\navailable in your command shell. More discussion: \nThe Hitchhiker's Guide to\nPython. \n- Create a directory for the virtual environment you will be installing\ninto (example:
$ mkdir JupyterPiDAQ
). \n- Navigate into the directory
$ cd JupyterPiDAQ
. \n- Create the virtual environment and enter it
$ pipenv shell
. To get out of\nthe environment you can issue the $ exit
command on the command line. \n- While still in the shell install the latest JupyterPiDAQ and all its\nrequirements\n
$ pip install -U JupyterPiDAQ
. This can take a long time, especially on a\nRaspberry Pi. On a Pi 3B+ (minimum requirement) it will probably not run\nwithout at least 1 GB of swap. See: Build Jupyter on a Pi\nfor a discussion of adding swap space on a Pi. \n- Still within the environment shell test\nthis by starting jupyter
$ jupyter notebook
. Jupyter should launch in your browser.\n\n- Open a new notebook using the default (Python 3) kernel.
\n- In the first cell import all from DAQinstance.py: \n
from jupyterpidaq.DAQinstance import *
.\nWhen run this cell should load the DAQmenu at the end of the Jupyter\nnotebook menu/icon bar. If you do not have an appropriate A-to-D\nboard installed you will get a message and the software\nwill default to demo mode, substituting a random number\ngenerator for the A-to-D. Because of the demo mode it is\npossible to run this on any computer, not just a Pi. \n
\n- If you wish, you can make this environment available to an alternate Jupyter\ninstall as a special kernel when you are the user.\n
\n- Make sure you are running in your virtual environment
$ pipenv shell
\nin the directory for virtual environment will do that. \n- Issue the command to add this as a kernel to your personal space: \n
$ python -m ipykernel install --user --name=<name-you-want-for-kernel>
. \n- More information is available in the Jupyter/Ipython documentation. \nA simple tutorial from Nikolai Jankiev (_Parametric Thoughts_) can be\nfound here.
\n
\n
\n\nDevelopment Notes
\n\n\n\nSetting up Development Environment
\n\nBasic requirements: Python 3.6+, associated\npip and a Jupyter notebook.\nSee: python.org and\nJupyter.org.
\n\n\n- If not installed, install pipenv:
$ pip3 install --user pipenv
. You may\nneed to add ~/.local/bin
to your PATH
to make pipenv
\navailable in your command shell. More discussion: \nThe Hitchhiker's Guide to Python. \n- Navigate to the directory where this package will be\nor has been downloaded to. Use
pipenv
to install an \n\"editable\" package \ninside the directory as described below:\n\n- Start a shell in the environment
$ pipenv shell
. \n- Install using pip.\n
\n- If you downloaded the git repository named \"JupyterPiDAQ\"\nand have used that directory to build your virtual\nenvironment:
$ pip install -e ../JupyterPiDAQ/
. \n- If you are downloading from PyPi\n
$ pip install -e JupyterPiDAQ
\n- Either should install all the additional packages this\npackage depends upon. On a Raspberry Pi this will take\na long time. It probably will not run without at least 1 GB of swap. See: \nBuild Jupyter on a Pi\n.
\n
\n- Still within the environment shell test\nthis by starting jupyter
$ jupyter notebook
. Jupyter should launch in\nyour browser.\n\n- Open a new notebook using the default (Python 3) kernel.
\n- In the first cell import all from DAQinstance.py: \n
from jupyterpidaq.DAQinstance import *
.\nWhen run this cell should load the DAQmenu at the end of the\nJupyter notebook menu/icon bar. If you do not have an appropriate A-to-D\nboard installed you will get a message and the software\nwill default to demo mode, substituting a random number\ngenerator for the A-to-D. Because of the demo mode it is\npossible to run this on any computer, not just a Pi. \n
\n
\n- If you wish, you can make this environment available to an alternate Jupyter\ninstall as a special kernel when you are the user.\n
\n- Make sure you are running in your virtual environment
$ pipenv shell
\nin the directory for virtual environment will do that. \n- Issue the command to add this as a kernel to your personal space: \n
$ python -m ipykernel install --user --name=<name-you-want-for-kernel>
. \n- More information is available in the Jupyter/Ipython documentation. \nA simple tutorial from Nikolai Jankiev (_Parametric Thoughts_) can be\nfound here.
\n
\n
\n\nAdding New Sensor Code
\n\n\n- Copy an existing sensor class paste it into the end of\nsensors.py and rename it.
\n- Update/delete functions for each valid unit within the new\nclass as necessary.
\n- Update the sensor name, vendor and available units in the\n
__init__
function. \n- Add the new sensor classname to the list of available sensors\nin
listSensors
at about line 120 of sensors.py. \n- Add the new sensor classname to
getsensors
of ADCsim.py,\nADCsim_line.py and any board (e.g. DAQC2.py) with which the sensor\ncan be used. Do not guess if a sensor works with a particular\nboard. Test it! \n
\n\nRunning Tests
\n\n\n- Install updated pytest in the virtual environment:\n
\npipenv shell\npip install -U pytest\n
\n- Run tests ignoring the manual tests in the
dev_testing
directory:\npython -m pytest --ignore='dev_testing'
. \n
\n\nBuilding PyPi package
\n\n\n- Make sure to update the version number in setup.py first.
\n- Install updated setuptools and twine in the virtual environment:\n
\npipenv shell\npip install -U setuptools wheel twine\n
\n- Build the distribution
python -m setup sdist bdist_wheel
. \n- Test it on
test.pypi.org
.\n\n- Upload it (you will need an account on test.pypi.org):\n
python -m twine upload --repository testpypi dist/*
. \n- Create a new virtual environment and test install into it:\n
\nexit # to get out of the current environment\ncd <somewhere>\nmkdir <new virtual environment>\ncd <new directory>\npipenv shell #creates the new environment and enters it.\npip install -i https://test.pypi.org/..... # copy actual link from the\n # repository on test.pypi.\n
\nThere are often install issues because sometimes only older versions of\nsome of the required packages are available on test.pypi.org. If this\nis the only problem change the version to end in rc0
for release\ncandidate and try it on the regular pypi.org as described below for\nreleasing on PyPi. \n- After install test by running a jupyter notebook in the virtual \nenvironment.
\n
\n
\n\nReleasing on PyPi
\n\nProceed only if testing of the build is successful.
\n\n\n- Double check the version number in setup.py.
\n- Rebuild the release:
python -m setup sdist bdist_wheel
. \n- Upload it:
python -m twine upload dist/*
\n- Make sure it works by installing it in a clean virtual environment. This\nis the same as on test.pypi.org except without
-i https://test.pypy...
. If\nit does not work, pull the release. \n
\n\nBuilding Documentation
\n\n\n- Install or update pdoc into the virtual environment
pip install -U pdoc
. \n- Make edits to the
.md
files within the docs folder that are to be \nincluded in the first page (see __init__.py
of the jupyterpidaq package). \n- At the root level run
pdoc \n--logo https://jupyterphysscilab.github.io/JupyterPiDAQ/JupyterPiDAQ-logo.svg --logo-link \nhttps://jupyterphysscilab.github.io/JupyterPiDAQ/ --footer-text \n\"JupyterPiDAQ vX.X.X\" -html -o docs jupyterpidaq
Unless you are on a \nRaspbery Pi this will throw an error about import
. Just ignore. \n
\n\nChange Log
\n\n\n- 0.7.6\n
\n- Converted to fancy menus (could make hierarchical).
\n
\n- 0.7.5\n
\n- Added fitting to DAQ command menu.
\n- Documentation Enhancements: github.io website; first pass as API docs; \nreorganized documentation; MyBinder link now forces launch in classic \nnotebook; added plans for adapter board to connect Vernier Sensors.
\n
\n- 0.7.4.1\n
\n- Improved layout of data collection.
\n- Better widget cleanup.
\n- Readme fixes.
\n
\n- 0.7.3 Pip install reliability fixes.
\n- 0.7.2 Suppress Javascript error when not in JLab.
\n- 0.7.1\n
\n- Include Heat Capacity Lab example.
\n- Make menu show up in JLab (still not functional).
\n- Remove matplotlib baggage.
\n
\n- 0.7.0\n
\n- Switched to plotly widget for plotting.
\n- Added Vernier pressure sensor calibrations (old and new).
\n- Jupyter widgets based new calculated column GUI.
\n- Jupyter widgets based new plot GUI.
\n- Default to providing only one time for channels collected nearly \nsimultaneously.
\n- As reported values are averages, switched to reporting the estimated \nstandard deviation of the average rather than the deviation of all the \nreadings used to create the average.
\n
\n- 0.6.0 \n
\n- Initial release.
\n- Live data collection.
\n- Recognized sensors: ADS1115 boards (voltage, built-in thermistor, \nVernier SS temperature probe), DAQC2 boards (voltage,Vernier SS \ntemperature probe, Vernier standard pH probe, Vernier flat pH probe).
\n
\n
\n\nThree Channel Adapter Board for Vernier Sensors
\n\nBoard plans
\n\n\n\nEtching the board
\n\nClean Cu cladding to be etched by wet sanding with 1500 grit or finer.\nDraw traces with a black sharpie \u201cindustrial super permanent ink\u201d version\nworks best. Allow to dry completely (no odor). Can be speeded up using a heat\ngun.
\n\nEtchant recipe:
\n\n3 M HCl
\n\nCuCl2 to make medium emerald green solution (can also be made by \ndissolving Cu after adding hydrogen peroxide)
\n\nUsing test piece add 30% H2O2 dropwise to get gentle \nbubbling and \ncomplete\nremoval in 3 \u2013 5 min (longer gives poorly defined edges).
\n"}, {"fullname": "jupyterpidaq.Boards", "modulename": "jupyterpidaq.Boards", "type": "module", "doc": "This module wraps all the submodules related to communication and control of\ndata acquisition boards.
\n"}, {"fullname": "jupyterpidaq.Boards.PiGPIO", "modulename": "jupyterpidaq.Boards.PiGPIO", "type": "module", "doc": "This module contains the modules for all PiGPIO based boards.
\n"}, {"fullname": "jupyterpidaq.Boards.PiGPIO.ADS1115", "modulename": "jupyterpidaq.Boards.PiGPIO.ADS1115", "type": "module", "doc": "\n"}, {"fullname": "jupyterpidaq.Boards.PiGPIO.ADS1115.find_boards", "modulename": "jupyterpidaq.Boards.PiGPIO.ADS1115", "qualname": "find_boards", "type": "function", "doc": "A routine like this must be implemented by all board packages.
\n\nReturns
\n\n\n list of ADS1115 board objects (maximum of 4 boards)
\n
\n", "signature": "()", "funcdef": "def"}, {"fullname": "jupyterpidaq.Boards.PiGPIO.ADS1115.Board_ADS1115", "modulename": "jupyterpidaq.Boards.PiGPIO.ADS1115", "qualname": "Board_ADS1115", "type": "class", "doc": "Class defining the properties of Adafruit compatible ADS1115\nanalog-to-digital boards for Raspberry-Pi style GPIO. Key characteristics:
\n\n\n- 4 channels (0 - 3) with 16 bit resolution and a range of +/- 3.3 V
\n- Programmable gain on each channel of 2/3, 1, 2, 4, 8, 16 making these\ngood for small signals.
\n- a differential mode is available but not implemented in this class.
\n
\n", "bases": "jupyterpidaq.Boards.boards.Board"}, {"fullname": "jupyterpidaq.Boards.PiGPIO.ADS1115.Board_ADS1115.__init__", "modulename": "jupyterpidaq.Boards.PiGPIO.ADS1115", "qualname": "Board_ADS1115.__init__", "type": "function", "doc": "Should be overridden by each board and define at minimum:\nself.name = 'board name/adc name/type' Short an useful to end user\nself.vendor = 'Vendor/Manufacturer name`\nself.channels = tuple of available channel IDs\nself.gains = list of gains\nself.Vdd = voltage provided by board to sensors
\n", "signature": "(self, adc)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Boards.PiGPIO.ADS1115.Board_ADS1115.getsensors", "modulename": "jupyterpidaq.Boards.PiGPIO.ADS1115", "qualname": "Board_ADS1115.getsensors", "type": "function", "doc": "Return a list of valid sensor object names for this board.
\n\nReturns
\n\n\n list of classnames
\n
\n", "signature": "(self)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Boards.PiGPIO.ADS1115.Board_ADS1115.V_oversampchan", "modulename": "jupyterpidaq.Boards.PiGPIO.ADS1115", "qualname": "Board_ADS1115.V_oversampchan", "type": "function", "doc": "This routine returns the average voltage for the channel\naveraged at (0.0012 + 1/data_rate)^-1 Hz for avg_sec\nnumber of seconds. The 0.0012 is the required loop time\non a RPI 3B+ in python.
\n\nReturns a tuple of the following 5 objects:\n V_avg -- float, the averaged voltage
\n\nV_min -- float, the minimum voltage read during\nthe interval\n\nV_max -- float, the maximum voltage read during the\ninterval\n\ntime_stamp -- float, the time at halfway through the averaging\ninterval in seconds since the beginning of the epoch (OS\ndependent begin time)\n\nself.Vdd -- float, the reference voltage.\n
\n\nParameters
\n\n\nint chan: the channel number (0, 1, 2, 3)
\ngain: 2/3 (+/-6.144V), 1(+/-4.096V), 2(+/-2.048V),\n4(+/-1.024V), 8 (+/-0.512V), 16 (+/-0.256V))
\nint data_rate: the ADC sample rate in Hz (8, 16, 32, 64,\n128,250, 475 or 860 Hz). Set to 475 Hz by default.
\nfloat avg_sec: seconds to average for, actual\naveraging interval will be as close as possible for an integer\nnumber of samples
\n
\n\n:returns: V_avg, V_min, V_max, time_stamp, self.Vdd
\n\nReturns
\n\n\n description
\n
\n\nReturns
\n\n\n \n
\n\nReturns
\n\n\n \n
\n\nReturns
\n\n\n \n
\n\nReturns
\n", "signature": "(self, chan, gain, avg_sec, data_rate=475)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Boards.PiGPIO.ADS1115.Board_ADS1115.V_oversampchan_stats", "modulename": "jupyterpidaq.Boards.PiGPIO.ADS1115", "qualname": "Board_ADS1115.V_oversampchan_stats", "type": "function", "doc": "This routine returns the average voltage for the channel\naveraged at (0.0012 + 1/data_rate)^-1 Hz for avg_sec\nnumber of seconds. The 0.0012 is the required loop time\non a RPI 3B+ in python3. The standard\ndeviation and the estimated deviation of the mean are also\nreturned.
\n\nReturns a tuple of the following 5 objects:\n V_avg -- float, the averaged voltage
\n\nstdev -- float, the standard deviation of the measured values\nduring the averaging interval\n\nstdev_avg -- float, the estimated standard deviation of the\nreturned average\n\ntime_stamp -- float, the time at halfway through the averaging\ninterval in seconds since the beginning of the epoch (OS\ndependent begin time)\n\nself.Vdd -- float, the reference voltage.\n
\n\nParameters
\n\n\nint chan: the channel number (0, 1, 2, 3)
\ngain: 2/3 (+/-6.144V), 1(+/-4.096V), 2(+/-2.048V),\n4(+/-1.024V), 8 (+/-0.512V), 16 (+/-0.256V))
\nint data_rate: the ADC sample rate in Hz (8, 16, 32, 64,\n128,250, 475 or 860 Hz). Set to 475 Hz by default.
\nfloat avg_sec: seconds to average for, actual\naveraging interval will be as close as possible for an integer\nnumber of samples
\n
\n\n:returns: VV_avg, stdev, stdev_avg, time_stamp, self.Vdd
\n\nReturns
\n\n\n description
\n
\n\nReturns
\n\n\n \n
\n\nReturns
\n\n\n \n
\n\nReturns
\n\n\n \n
\n\nReturns
\n", "signature": "(self, chan, gain, avg_sec, data_rate=475)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Boards.PiGPIO.ADS1115.Board_ADS1115.V_sampchan", "modulename": "jupyterpidaq.Boards.PiGPIO.ADS1115", "qualname": "Board_ADS1115.V_sampchan", "type": "function", "doc": "This routine returns the voltage for the
\n\nReturns a tuple of the following 3 objects:\n V -- float, the measured voltage
\n\ntime_stamp -- float, the time at halfway through the averaging\ninterval in seconds since the beginning of the epoch (OS\ndependent begin time)\n\nself.Vdd -- float, the reference voltage.\n
\n\nParameters
\n\n\nint chan: the channel number (0, 1, 2, 3)
\ngain: 2/3 (+/-6.144V), 1(+/-4.096V), 2(+/-2.048V),\n4(+/-1.024V), 8 (+/-0.512V), 16 (+/-0.256V))
\nint data_rate: the ADC sample rate in Hz (8, 16, 32, 64,\n128,250, 475 or 860 Hz). Set to 475 Hz by default.
\n
\n\n:returns: V, time_stamp, self.Vdd
\n\nReturns
\n\n\n \n
\n\nReturns
\n\n\n \n
\n\nReturns
\n", "signature": "(self, chan, gain, data_rate=475)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Boards.PiGPIO.DAQC2", "modulename": "jupyterpidaq.Boards.PiGPIO.DAQC2", "type": "module", "doc": "\n"}, {"fullname": "jupyterpidaq.Boards.PiGPIO.DAQC2.find_boards", "modulename": "jupyterpidaq.Boards.PiGPIO.DAQC2", "qualname": "find_boards", "type": "function", "doc": "A rountine like this must be implemented by all board packages.
\n\nReturns
\n\n\n list of DAQC2 board objects (maximum of 8 boards)
\n
\n", "signature": "()", "funcdef": "def"}, {"fullname": "jupyterpidaq.Boards.PiGPIO.DAQC2.Board_DAQC2", "modulename": "jupyterpidaq.Boards.PiGPIO.DAQC2", "qualname": "Board_DAQC2", "type": "class", "doc": "Class defining the properties of the analog-to-digital block of the\npi-Plates DAQC2 board. Key characteristics:
\n\n\n- 8 channels (0 - 7) with pseudo 16 bit resolution (oversampled 14 bit) and\na range of +/- 12 V.
\n- 1 channel (8) dedicated to monitoring Vdd.
\n- Programmable RGB LED to use as indicator.
\n- Other available facilities are Digital I/O, Digital-to-Analog and\n2-channel o-scope modes. These are not supported by this class.
\n
\n", "bases": "jupyterpidaq.Boards.boards.Board"}, {"fullname": "jupyterpidaq.Boards.PiGPIO.DAQC2.Board_DAQC2.__init__", "modulename": "jupyterpidaq.Boards.PiGPIO.DAQC2", "qualname": "Board_DAQC2.__init__", "type": "function", "doc": "Should be overridden by each board and define at minimum:\nself.name = 'board name/adc name/type' Short an useful to end user\nself.vendor = 'Vendor/Manufacturer name`\nself.channels = tuple of available channel IDs\nself.gains = list of gains\nself.Vdd = voltage provided by board to sensors
\n", "signature": "(self, addr)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Boards.PiGPIO.DAQC2.Board_DAQC2.getsensors", "modulename": "jupyterpidaq.Boards.PiGPIO.DAQC2", "qualname": "Board_DAQC2.getsensors", "type": "function", "doc": "Return a list of valid sensor object names for this board.
\n\nReturns
\n\n\n list of classnames
\n
\n", "signature": "(self)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Boards.PiGPIO.DAQC2.Board_DAQC2.V_oversampchan", "modulename": "jupyterpidaq.Boards.PiGPIO.DAQC2", "qualname": "Board_DAQC2.V_oversampchan", "type": "function", "doc": "This routine returns the average voltage for the channel\naveraged at the default rate for the board and returns an\naverage and observed range.
\n\nReturns a tuple of the following 5 objects:\n V_avg -- float, the averaged voltage
\n\nV_min -- float, the minimum voltage read during\nthe interval\n\nV_max -- float, the maximum voltage read during the\ninterval\n\ntime_stamp -- float, the time at halfway through the averaging\ninterval in seconds since the beginning of the epoch (OS\ndependent begin time)\n\nVdd_avg -- float, the reference voltage (Vdd) collected\nsimultaneously.\n
\n\nParameters
\n\n\nint chan: the channel number (0, 1, 2, 3, 4, 5, 6, 7,\n8). NOTE: channel 8 returns a measurement of Vdd.
\ngain: ignored by board. Defaults to 1.
\nint data_rate: ignored by board.
\nfloat avg_sec: seconds to average for, actual\naveraging interval will be as close as possible for an integer\nnumber of samples
\n
\n\n:returns: V_avg, V_min, V_max, time_stamp, Vdd_avg
\n\nReturns
\n\n\n description
\n
\n\nReturns
\n\n\n \n
\n\nReturns
\n\n\n \n
\n\nReturns
\n\n\n \n
\n\nReturns
\n", "signature": "(self, chan, gain, avg_sec, data_rate=475)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Boards.PiGPIO.DAQC2.Board_DAQC2.V_oversampchan_stats", "modulename": "jupyterpidaq.Boards.PiGPIO.DAQC2", "qualname": "Board_DAQC2.V_oversampchan_stats", "type": "function", "doc": "This routine returns the average voltage for the channel\naveraged at the maximum rate for the board. The standard\ndeviation and the estimated deviation of the mean are also\nreturned.
\n\nReturns a tuple of the following 5 objects:\n V_avg -- float, the averaged voltage
\n\nstdev -- float, the standard deviation of the measured values\nduring the averaging interval\n\nstdev_avg -- float, the estimated standard deviation of the\nreturned average\n\ntime_stamp -- float, the time at halfway through the averaging\ninterval in seconds since the beginning of the epoch (OS\ndependent begin time)\n\nVdd_avg -- float, the reference voltage (Vdd) collected\nsimultaneously.\n
\n\nParameters
\n\n\nint chan: the channel number (0, 1, 2, 3, 4, 5, 6, 7,\n8). NOTE: channel 8 returns a measurement of Vdd.
\ngain: ignored by board. Defaults to 1.
\nint data_rate: ignored by board.
\nfloat avg_sec: seconds to average for, actual\naveraging interval will be as close as possible for an integer\nnumber of samples
\n
\n\n:returns: V_avg, stdev, stdev_avg, time_stamp, Vdd_avg
\n\nReturns
\n\n\n description
\n
\n\nReturns
\n\n\n \n
\n\nReturns
\n\n\n \n
\n\nReturns
\n\n\n \n
\n\nReturns
\n", "signature": "(self, chan, gain, avg_sec, data_rate=475)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Boards.PiGPIO.DAQC2.Board_DAQC2.V_sampchan", "modulename": "jupyterpidaq.Boards.PiGPIO.DAQC2", "qualname": "Board_DAQC2.V_sampchan", "type": "function", "doc": "This routine returns a single reading of the voltage for the channel.
\n\nReturns a tuple of the following 5 objects:\n V -- float, the measured voltage
\n\ntime_stamp -- float, the time of the measurement in seconds since\nthe beginning of the epoch (OS dependent begin time)\n\nref -- float, the reference voltage (Vdd) collected\nsimultaneously.\n
\n\nParameters
\n\n\nint chan: the channel number (0, 1, 2, 3, 4, 5, 6, 7,\n8). NOTE: channel 8 returns a measurement of Vdd.
\ngain: ignored by board. Defaults to 1.
\nint data_rate: ignored by board.
\n
\n\n:returns: V_avg, stdev, stdev_avg, time_stamp, Vdd_avg
\n\nReturns
\n\n\n \n
\n\nReturns
\n\n\n \n
\n\nReturns
\n", "signature": "(self, chan, gain, data_rate=475)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Boards.Simulated", "modulename": "jupyterpidaq.Boards.Simulated", "type": "module", "doc": "This module wraps modules for simulated boards.
\n"}, {"fullname": "jupyterpidaq.Boards.Simulated.ADCsim", "modulename": "jupyterpidaq.Boards.Simulated.ADCsim", "type": "module", "doc": "\n"}, {"fullname": "jupyterpidaq.Boards.Simulated.ADCsim.find_boards", "modulename": "jupyterpidaq.Boards.Simulated.ADCsim", "qualname": "find_boards", "type": "function", "doc": "\n", "signature": "()", "funcdef": "def"}, {"fullname": "jupyterpidaq.Boards.Simulated.ADCsim.Board_ADCsim_random", "modulename": "jupyterpidaq.Boards.Simulated.ADCsim", "qualname": "Board_ADCsim_random", "type": "class", "doc": "Base class for all boards. Each board should be an extension of this class.
\n", "bases": "jupyterpidaq.Boards.boards.Board"}, {"fullname": "jupyterpidaq.Boards.Simulated.ADCsim.Board_ADCsim_random.__init__", "modulename": "jupyterpidaq.Boards.Simulated.ADCsim", "qualname": "Board_ADCsim_random.__init__", "type": "function", "doc": "Should be overridden by each board and define at minimum:\nself.name = 'board name/adc name/type' Short an useful to end user\nself.vendor = 'Vendor/Manufacturer name`\nself.channels = tuple of available channel IDs\nself.gains = list of gains\nself.Vdd = voltage provided by board to sensors
\n", "signature": "(self, adc)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Boards.Simulated.ADCsim.Board_ADCsim_random.getsensors", "modulename": "jupyterpidaq.Boards.Simulated.ADCsim", "qualname": "Board_ADCsim_random.getsensors", "type": "function", "doc": "Return a list of valid sensor object names for this board.
\n\nReturns
\n\n\n list of classnames
\n
\n", "signature": "(self)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Boards.Simulated.ADCsim.Board_ADCsim_random.V_oversampchan_stats", "modulename": "jupyterpidaq.Boards.Simulated.ADCsim", "qualname": "Board_ADCsim_random.V_oversampchan_stats", "type": "function", "doc": "This routine returns the average voltage for the channel\naveraged at (0.0012 + 1/data_rate)^-1 Hz for avg_sec\nnumber of seconds. The 0.0012 is the required loop time\non a RPI 3B+ in python3. The voltage is rounded to the number\nof decimals indicated by the standard deviation. The standard\ndeviation and the estimated deviation of the mean are also\nreturned.\nParameters\n chan the channel number 0, 1, 2, 3\n gain 2/3 (+/-6.144V), 1(+/-4.096V), 2(+/-2.048V), 4(+/-1.024V),\n 8 (+/-0.512V), 16 (+/-0.256V)\n data_rate the ADC sample rate in Hz (8, 16, 32, 64, 128, 250, 475 or 860 Hz)\n avg_sec seconds to average for, actual averaging interval will be as close\n as possible for an integer number of samples.\nReturns a tuple (V_avg, V_min, V_max, time_stamp)\n V_avg the averaged voltage\n stdev estimated standard deviation of the measurements\n stdev_avg estimated standard deviation of the mean\n time_stamp the time at halfway through the averaging interval in seconds\n since the beginning of the epoch (OS dependent begin time).
\n", "signature": "(self, chan, gain, avg_sec, data_rate=475)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Boards.Simulated.ADCsim.Board_ADCsim_random.V_oversampchan", "modulename": "jupyterpidaq.Boards.Simulated.ADCsim", "qualname": "Board_ADCsim_random.V_oversampchan", "type": "function", "doc": "This routine returns the average voltage for the channel\naveraged at (0.0012 + 1/data_rate)^-1 Hz for avg_sec\nnumber of seconds. The 0.0012 is the required loop time\non a RPI 3B+ in python3. The voltage is rounded to the number\nof decimals indicated by the standard deviation. The standard\ndeviation and the estimated deviation of the mean are also\nreturned.\nParameters\n chan the channel number 0, 1, 2, 3\n gain 2/3 (+/-6.144V), 1(+/-4.096V), 2(+/-2.048V), 4(+/-1.024V),\n 8 (+/-0.512V), 16 (+/-0.256V)\n data_rate the ADC sample rate in Hz (8, 16, 32, 64, 128, 250, 475 or 860 Hz)\n avg_sec seconds to average for, actual averaging interval will be as close\n as possible for an integer number of samples.\nReturns a tuple (V_avg, V_min, V_max, time_stamp)\n V_avg the averaged voltage\n stdev estimated standard deviation of the measurements\n stdev_avg estimated standard deviation of the mean\n time_stamp the time at halfway through the averaging interval in seconds\n since the beginning of the epoch (OS dependent begin time).
\n", "signature": "(self, chan, gain, avg_sec, data_rate=475)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Boards.Simulated.ADCsim.Board_ADCsim_random.V_sampchan", "modulename": "jupyterpidaq.Boards.Simulated.ADCsim", "qualname": "Board_ADCsim_random.V_sampchan", "type": "function", "doc": "This function returns a single measurement and the time it was\ncollected.
\n\nParameters
\n\n\n- chan: id of the channel to be measured
\n- gain: gain of the channel if adjustable
\n
\n\nReturns
\n\n\n a tuple consisting of V, time_stamp, where V = the single\n voltage measurement and time_stamp the time it was collected.
\n
\n", "signature": "(self, chan, gain, **kwargs)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Boards.Simulated.ADCsim_line", "modulename": "jupyterpidaq.Boards.Simulated.ADCsim_line", "type": "module", "doc": "\n"}, {"fullname": "jupyterpidaq.Boards.Simulated.ADCsim_line.find_boards", "modulename": "jupyterpidaq.Boards.Simulated.ADCsim_line", "qualname": "find_boards", "type": "function", "doc": "\n", "signature": "()", "funcdef": "def"}, {"fullname": "jupyterpidaq.Boards.Simulated.ADCsim_line.Board_ADCsim_line", "modulename": "jupyterpidaq.Boards.Simulated.ADCsim_line", "qualname": "Board_ADCsim_line", "type": "class", "doc": "This class simulates an Analog-to-Digital board that returns a linearly\nincreasing signal with a small amount of noise on the signal. The\nintercept and slope depend upon which hour of the day the simulation is\nrun.
\n", "bases": "jupyterpidaq.Boards.boards.Board"}, {"fullname": "jupyterpidaq.Boards.Simulated.ADCsim_line.Board_ADCsim_line.__init__", "modulename": "jupyterpidaq.Boards.Simulated.ADCsim_line", "qualname": "Board_ADCsim_line.__init__", "type": "function", "doc": "Should be overridden by each board and define at minimum:\nself.name = 'board name/adc name/type' Short an useful to end user\nself.vendor = 'Vendor/Manufacturer name`\nself.channels = tuple of available channel IDs\nself.gains = list of gains\nself.Vdd = voltage provided by board to sensors
\n", "signature": "(self, adc)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Boards.Simulated.ADCsim_line.Board_ADCsim_line.getsensors", "modulename": "jupyterpidaq.Boards.Simulated.ADCsim_line", "qualname": "Board_ADCsim_line.getsensors", "type": "function", "doc": "Return a list of valid sensor object names for this board.
\n\nReturns
\n\n\n list of classnames
\n
\n", "signature": "(self)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Boards.Simulated.ADCsim_line.Board_ADCsim_line.V_oversampchan", "modulename": "jupyterpidaq.Boards.Simulated.ADCsim_line", "qualname": "Board_ADCsim_line.V_oversampchan", "type": "function", "doc": "This routine returns the average voltage for the channel\naveraged at (0.0012 + 1/data_rate)^-1 Hz for avg_sec\nnumber of seconds. The 0.0012 is the required loop time\non a RPI 3B+ in python3. The voltage is rounded to the number\nof decimals indicated by the standard deviation. The standard\ndeviation and the estimated deviation of the mean are also\nreturned.\nParameters\n chan the channel number 0, 1, 2, 3\n gain 2/3 (+/-6.144V), 1(+/-4.096V), 2(+/-2.048V), 4(+/-1.024V),\n 8 (+/-0.512V), 16 (+/-0.256V)\n data_rate the ADC sample rate in Hz (8, 16, 32, 64, 128, 250, 475\n or 860 Hz)\n avg_sec seconds to average for, actual averaging interval will be\n as close as possible for an integer number of samples.\nReturns a tuple (V_avg, V_min, V_max, time_stamp)\n V_avg the averaged voltage\n stdev estimated standard deviation of the measurements\n stdev_avg estimated standard deviation of the mean\n time_stamp the time at halfway through the averaging interval in\n seconds since the beginning of the epoch (OS dependent begin\n time).
\n", "signature": "(self, chan, gain, avg_sec, data_rate=475)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Boards.Simulated.ADCsim_line.Board_ADCsim_line.V_oversampchan_stats", "modulename": "jupyterpidaq.Boards.Simulated.ADCsim_line", "qualname": "Board_ADCsim_line.V_oversampchan_stats", "type": "function", "doc": "This routine returns the average voltage for the channel\naveraged at (0.0012 + 1/data_rate)^-1 Hz for avg_sec\nnumber of seconds. The 0.0012 is the required loop time\non a RPI 3B+ in python3. The voltage is rounded to the number\nof decimals indicated by the standard deviation. The standard\ndeviation and the estimated deviation of the mean are also\nreturned.\nParameters\n chan the channel number 0, 1, 2, 3\n gain 2/3 (+/-6.144V), 1(+/-4.096V), 2(+/-2.048V), 4(+/-1.024V),\n 8 (+/-0.512V), 16 (+/-0.256V)\n data_rate the ADC sample rate in Hz (8, 16, 32, 64, 128, 250, 475\n or 860 Hz)\n avg_sec seconds to average for, actual averaging interval will be\n as close as possible for an integer number of samples.\nReturns a tuple (V_avg, V_min, V_max, time_stamp)\n V_avg the averaged voltage\n stdev estimated standard deviation of the measurements\n stdev_avg estimated standard deviation of the mean\n time_stamp the time at halfway through the averaging interval in\n seconds since the beginning of the epoch (OS dependent begin\n time).
\n", "signature": "(self, chan, gain, avg_sec, data_rate=475)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Boards.Simulated.ADCsim_line.Board_ADCsim_line.V_sampchan", "modulename": "jupyterpidaq.Boards.Simulated.ADCsim_line", "qualname": "Board_ADCsim_line.V_sampchan", "type": "function", "doc": "This routine returns the average voltage for the channel\naveraged at (0.0012 + 1/data_rate)^-1 Hz for avg_sec\nnumber of seconds. The 0.0012 is the required loop time\non a RPI 3B+ in python3. The voltage is rounded to the number\nof decimals indicated by the standard deviation. The standard\ndeviation and the estimated deviation of the mean are also\nreturned.\nParameters\n chan the channel number 0, 1, 2, 3\n gain 2/3 (+/-6.144V), 1(+/-4.096V), 2(+/-2.048V), 4(+/-1.024V),\n 8 (+/-0.512V), 16 (+/-0.256V)\n data_rate the ADC sample rate in Hz (8, 16, 32, 64, 128, 250, 475\n or 860 Hz) avg_sec seconds to average for, actual averaging\n interval will be as close as possible for an integer number of\n samples.\nReturns a tuple (V_avg, V_min, V_max, time_stamp)\n V_avg the averaged voltage\n stdev estimated standard deviation of the measurements\n stdev_avg estimated standard deviation of the mean\n time_stamp the time at halfway through the averaging interval in\n seconds since the beginning of the epoch (OS dependent begin\n time).
\n", "signature": "(self, chan, gain, data_rate=475)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Boards.boards", "modulename": "jupyterpidaq.Boards.boards", "type": "module", "doc": "This file handles loading adc board control software and sensor information.\nIt uses the list of known boards. It will skip boards that produce an error\neither because the pypi package is not installed or an error occurs when\ntrying to communicate with the board.
\n\nThe ADC simulator will be installed if no boards are available.
\n"}, {"fullname": "jupyterpidaq.Boards.boards.load_boards", "modulename": "jupyterpidaq.Boards.boards", "qualname": "load_boards", "type": "function", "doc": "Uses the list of known board packages to search for available boards.\nThe file .py should at minimum\nimplement a find_boards(): routine that overrides the function below and\ndefine a class for the particular board that extends the
Board` class\ndefined below.
\n\nReturns
\n\n\n list of adc board objects.
\n
\n", "signature": "()", "funcdef": "def"}, {"fullname": "jupyterpidaq.Boards.boards.find_boards", "modulename": "jupyterpidaq.Boards.boards", "qualname": "find_boards", "type": "function", "doc": "A function overriding this must be implemented by all board packages.\nSee examples in working packages. This is highly board dependent.
\n\nReturns
\n\n\n list of board objects
\n
\n", "signature": "()", "funcdef": "def"}, {"fullname": "jupyterpidaq.Boards.boards.Board", "modulename": "jupyterpidaq.Boards.boards", "qualname": "Board", "type": "class", "doc": "Base class for all boards. Each board should be an extension of this class.
\n"}, {"fullname": "jupyterpidaq.Boards.boards.Board.__init__", "modulename": "jupyterpidaq.Boards.boards", "qualname": "Board.__init__", "type": "function", "doc": "Should be overridden by each board and define at minimum:\nself.name = 'board name/adc name/type' Short an useful to end user\nself.vendor = 'Vendor/Manufacturer name`\nself.channels = tuple of available channel IDs\nself.gains = list of gains\nself.Vdd = voltage provided by board to sensors
\n", "signature": "(self)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Boards.boards.Board.getname", "modulename": "jupyterpidaq.Boards.boards", "qualname": "Board.getname", "type": "function", "doc": "Returns
\n\n\n string value of the board name, a short label of board type.
\n
\n", "signature": "(self)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Boards.boards.Board.getchannels", "modulename": "jupyterpidaq.Boards.boards", "qualname": "Board.getchannels", "type": "function", "doc": "Returns
\n\n\n tuple of ids for available channels
\n
\n", "signature": "(self)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Boards.boards.Board.getgains", "modulename": "jupyterpidaq.Boards.boards", "qualname": "Board.getgains", "type": "function", "doc": "If not defined for a specific board the gain is fixed at 1.
\n\nReturns
\n\n\n tuple of gains availabe for onboard preamp
\n
\n", "signature": "(self)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Boards.boards.Board.getvendor", "modulename": "jupyterpidaq.Boards.boards", "qualname": "Board.getvendor", "type": "function", "doc": "Returns
\n\n\n string value of the vendor name
\n
\n", "signature": "(self)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Boards.boards.Board.getVdd", "modulename": "jupyterpidaq.Boards.boards", "qualname": "Board.getVdd", "type": "function", "doc": "Returns
\n\n\n numerical value of the Vdd, voltage provided to sensors
\n
\n", "signature": "(self)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Boards.boards.Board.getsensors", "modulename": "jupyterpidaq.Boards.boards", "qualname": "Board.getsensors", "type": "function", "doc": "This returns a list of objects that allow the software to translate\nthe measured voltage into a sensor reading in appropriate units.\nMust be provided by the specific board implementation. See examples\nin working board packages.
\n\nReturns
\n\n\n A list of valid sensor objects to use with this board. This\n should be a subset of all the sensors returned by the listSensors\n function in sensors.py.
\n
\n", "signature": "(self)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Boards.boards.Board.V_oversampchan", "modulename": "jupyterpidaq.Boards.boards", "qualname": "Board.V_oversampchan", "type": "function", "doc": "This function should return a tuple with average, minimum and maximum\nfor a channel averaged over the period of time avg_sec. How the\naveraging is performed will depend on the board.
\n\nParameters
\n\n\n- chan: id of the channel to be measured
\n- gain: gain of the channel if adjustable
\n- avg_sec: float period of time over which to average
\n
\n\nReturns
\n\n\n a tuple consisting of V_avg, V_min, V_max, time_stamp, avg_Vdd\n The time_stamp is the time the data was collected, usually the\n middle of the averaging period. avg_Vdd should be the measured\n average Vdd taken simultaneously, immediately before,\n or immediately after the voltage being measured. If the board or\n power supply is very stable self.Vdd can be returned instead.
\n
\n", "signature": "(self, chan, gain, avg_sec, **kwargs)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Boards.boards.Board.V_oversampchan_stats", "modulename": "jupyterpidaq.Boards.boards", "qualname": "Board.V_oversampchan_stats", "type": "function", "doc": "This function should return a tuple of statistical information for a\nchannel averaged over the period of time avg_sec.
\n\nParameters
\n\n\n- chan: id of the channel to be measured
\n- gain: gain of the channel if adjustable
\n- avg_sec: float period of time over which to average
\n
\n\nReturns
\n\n\n tuple consisting of V_avg, stdev, stdev_avg, time_stamp,\n avg_Vdd where stdev_avg is the estimated standard deviation\n of the average not the standard deviation of the values\n sampled (stdev). avg_Vdd should be the measured\n average Vdd taken simultaneously, immediately before,\n or immediately after the voltage being measured. If the board or\n power supply is very stable self.Vdd can be returned instead.
\n
\n", "signature": "(self, chan, gain, avg_sec, **kwargs)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Boards.boards.Board.V_sampchan", "modulename": "jupyterpidaq.Boards.boards", "qualname": "Board.V_sampchan", "type": "function", "doc": "This function returns a single measurement and the time it was\ncollected.
\n\nParameters
\n\n\n- chan: id of the channel to be measured
\n- gain: gain of the channel if adjustable
\n
\n\nReturns
\n\n\n a tuple consisting of V, time_stamp, ref_Vdd, where V = the\n single voltage measurement and time_stamp the time it was\n collected. ref_Vdd should be the measured\n Vdd taken simultaneously, immediately before,\n or immediately after the voltage being measured. If the board or\n power supply is very stable self.Vdd can be returned instead.
\n
\n", "signature": "(self, chan, gain, **kwargs)", "funcdef": "def"}, {"fullname": "jupyterpidaq.ChannelSettings", "modulename": "jupyterpidaq.ChannelSettings", "type": "module", "doc": "\n"}, {"fullname": "jupyterpidaq.ChannelSettings.ChannelSettings", "modulename": "jupyterpidaq.ChannelSettings", "qualname": "ChannelSettings", "type": "class", "doc": "This class takes care of interacting with the user to get settings for data\ncollection on each channel. Should be initialized with an idno, so that\nit knows what number has been assigned to it.
\n"}, {"fullname": "jupyterpidaq.ChannelSettings.ChannelSettings.__init__", "modulename": "jupyterpidaq.ChannelSettings", "qualname": "ChannelSettings.__init__", "type": "function", "doc": "Parameters
\n\n\n- idno: int number iding this instance of ChannelSettings
\n
\n", "signature": "(self, idno, availboards)", "funcdef": "def"}, {"fullname": "jupyterpidaq.ChannelSettings.ChannelSettings.activate", "modulename": "jupyterpidaq.ChannelSettings", "qualname": "ChannelSettings.activate", "type": "function", "doc": "This function makes this channel active. No return value unless an e\nrror is thrown by something called by this function.
\n\nReturns
\n\n\n None
\n
\n", "signature": "(self)", "funcdef": "def"}, {"fullname": "jupyterpidaq.ChannelSettings.ChannelSettings.deactivate", "modulename": "jupyterpidaq.ChannelSettings", "qualname": "ChannelSettings.deactivate", "type": "function", "doc": "This function makes the channel inactive. No return value unless an\nerror is thrown by something called by this function.
\n\nReturns
\n\n\n None
\n
\n", "signature": "(self)", "funcdef": "def"}, {"fullname": "jupyterpidaq.ChannelSettings.ChannelSettings.checkchanged", "modulename": "jupyterpidaq.ChannelSettings", "qualname": "ChannelSettings.checkchanged", "type": "function", "doc": "This function is called when the checkbox changes.
\n\nParameters
\n\n\n- self:
\n- change: change object passed by the observe tool
\n
\n\nReturns
\n\n\n None
\n
\n", "signature": "(self, change)", "funcdef": "def"}, {"fullname": "jupyterpidaq.ChannelSettings.ChannelSettings.boardchanged", "modulename": "jupyterpidaq.ChannelSettings", "qualname": "ChannelSettings.boardchanged", "type": "function", "doc": "This function responds to a change in board choice.
\n\nParameters
\n\n\n- change: change object passed by the observe tool
\n
\n\nReturns
\n", "signature": "(self, change)", "funcdef": "def"}, {"fullname": "jupyterpidaq.ChannelSettings.ChannelSettings.channelchanged", "modulename": "jupyterpidaq.ChannelSettings", "qualname": "ChannelSettings.channelchanged", "type": "function", "doc": "This function responds to a change in board choice.
\n\nParameters
\n\n\n- change: change object passed by the observe tool
\n
\n\nReturns
\n", "signature": "(self, change)", "funcdef": "def"}, {"fullname": "jupyterpidaq.ChannelSettings.ChannelSettings.sensorchanged", "modulename": "jupyterpidaq.ChannelSettings", "qualname": "ChannelSettings.sensorchanged", "type": "function", "doc": "Called by the observe function of sensorchoice when the user changes\nthe sensor choice.
\n\nParameters
\n\n\n- self:
\n- change: change object passed by the observe tool
\n
\n\nReturns
\n\n\n None
\n
\n", "signature": "(self, change)", "funcdef": "def"}, {"fullname": "jupyterpidaq.ChannelSettings.ChannelSettings.unitschanged", "modulename": "jupyterpidaq.ChannelSettings", "qualname": "ChannelSettings.unitschanged", "type": "function", "doc": "Called by the observe function for the units selector when units are\nchanged
\n\nParameters
\n\n\n- self:
\n- change: change object passed by the observe tool
\n
\n\nReturns
\n", "signature": "(self, change)", "funcdef": "def"}, {"fullname": "jupyterpidaq.ChannelSettings.ChannelSettings.gainschanged", "modulename": "jupyterpidaq.ChannelSettings", "qualname": "ChannelSettings.gainschanged", "type": "function", "doc": "Called by the observe function for the gains selector when the gain is\nchanged.
\n\nParameters
\n\n\n- self:
\n- change: change object passed by the observe tool
\n
\n\nReturns
\n", "signature": "(self, change)", "funcdef": "def"}, {"fullname": "jupyterpidaq.ChannelSettings.ChannelSettings.setup", "modulename": "jupyterpidaq.ChannelSettings", "qualname": "ChannelSettings.setup", "type": "function", "doc": "Sets up the GUI and the necessary monitoring.
\n\nReturns
\n\n\n None
\n
\n", "signature": "(self)", "funcdef": "def"}, {"fullname": "jupyterpidaq.ChannelSettings.ChannelSettings.hideGUI", "modulename": "jupyterpidaq.ChannelSettings", "qualname": "ChannelSettings.hideGUI", "type": "function", "doc": "\n", "signature": "(self)", "funcdef": "def"}, {"fullname": "jupyterpidaq.DAQProc", "modulename": "jupyterpidaq.DAQProc", "type": "module", "doc": "\n"}, {"fullname": "jupyterpidaq.DAQProc.DAQProc", "modulename": "jupyterpidaq.DAQProc", "qualname": "DAQProc", "type": "function", "doc": "This function is to be run in a separate thread to asynchronously\ncommunicate with the ADC board.
\n\nParameters
\n\n\nlist whichchn: a list of dictionaries. Each dictionary is of the\nform:{'board': board_object, 'chnl': chnlID}.
\nlist gains: a list of the numerical gain for each channel.
\nfloat avgtime: the averaging time in seconds for a data point.
\nfloat timedelta: the target time between data points.
\npipe DAQconn: the connection pipe
\npipe DAQCTL: the control pipe
\n
\n\nReturns
\n\n\n Data is returned via the pipes.\n On the DAQCTL pipe this only returns 'done'\n On the DAQconn pipe a list of lists with data is returned.
\n
\n", "signature": "(whichchn, gains, avgtime, timedelta, DAQconn, DAQCTL)", "funcdef": "def"}, {"fullname": "jupyterpidaq.DAQinstance", "modulename": "jupyterpidaq.DAQinstance", "type": "module", "doc": "\n"}, {"fullname": "jupyterpidaq.DAQinstance.DAQinstance", "modulename": "jupyterpidaq.DAQinstance", "qualname": "DAQinstance", "type": "class", "doc": "\n"}, {"fullname": "jupyterpidaq.DAQinstance.DAQinstance.__init__", "modulename": "jupyterpidaq.DAQinstance", "qualname": "DAQinstance.__init__", "type": "function", "doc": "Data Aquistion Instance (a run).
\n\nParameters
\n\n\n- idno: id number you wish to use to keep track
\n- livefig: plotly FigureWidget to use for live display
\n- title: optional name
\n- ntraces: number of traces (default = 4) more than 4 easily\noverwhelms a pi4.
\n- kwargs: \n:ignore_skew: bool (default: True) if True only a single average\ncollection time will be recorded for each time in a multichannel\ndata collection. If False a separate set of time will be\nrecorded for each channel.
\n
\n", "signature": "(self, idno, livefig, title='None', ntraces=4, **kwargs)", "funcdef": "def"}, {"fullname": "jupyterpidaq.DAQinstance.DAQinstance.setupclick", "modulename": "jupyterpidaq.DAQinstance", "qualname": "DAQinstance.setupclick", "type": "function", "doc": "\n", "signature": "(self, btn)", "funcdef": "def"}, {"fullname": "jupyterpidaq.DAQinstance.DAQinstance.setup", "modulename": "jupyterpidaq.DAQinstance", "qualname": "DAQinstance.setup", "type": "function", "doc": "\n", "signature": "(self)", "funcdef": "def"}, {"fullname": "jupyterpidaq.DAQinstance.DAQinstance.collectclick", "modulename": "jupyterpidaq.DAQinstance", "qualname": "DAQinstance.collectclick", "type": "function", "doc": "\n", "signature": "(self, btn)", "funcdef": "def"}, {"fullname": "jupyterpidaq.DAQinstance.DAQinstance.fillpandadf", "modulename": "jupyterpidaq.DAQinstance", "qualname": "DAQinstance.fillpandadf", "type": "function", "doc": "\n", "signature": "(self)", "funcdef": "def"}, {"fullname": "jupyterpidaq.DAQinstance.DAQinstance.updatingplot", "modulename": "jupyterpidaq.DAQinstance", "qualname": "DAQinstance.updatingplot", "type": "function", "doc": "Runs until a check of self.collectbtn.desdcf63064cription does not return\n'Stop Collecting'. This would probably be more efficient if set a\nboolean.
\n", "signature": "(self)", "funcdef": "def"}, {"fullname": "jupyterpidaq.DAQinstance.newRun", "modulename": "jupyterpidaq.DAQinstance", "qualname": "newRun", "type": "function", "doc": "Set up a new data collection run and add it to the list of runs.
\n", "signature": "(livefig)", "funcdef": "def"}, {"fullname": "jupyterpidaq.DAQinstance.update_runsdrp", "modulename": "jupyterpidaq.DAQinstance", "qualname": "update_runsdrp", "type": "function", "doc": "\n", "signature": "()", "funcdef": "def"}, {"fullname": "jupyterpidaq.DAQinstance.showSelectedRunTable", "modulename": "jupyterpidaq.DAQinstance", "qualname": "showSelectedRunTable", "type": "function", "doc": "\n", "signature": "(change)", "funcdef": "def"}, {"fullname": "jupyterpidaq.DAQinstance.showDataTable", "modulename": "jupyterpidaq.DAQinstance", "qualname": "showDataTable", "type": "function", "doc": "Provides a menu to select which run. Then displays the run in a\n10 em high scrolling table. Selection menu is removed after choice\nis made.
\n", "signature": "()", "funcdef": "def"}, {"fullname": "jupyterpidaq.DAQinstance.update_columns", "modulename": "jupyterpidaq.DAQinstance", "qualname": "update_columns", "type": "function", "doc": "\n", "signature": "(change)", "funcdef": "def"}, {"fullname": "jupyterpidaq.DAQinstance.newCalculatedColumn", "modulename": "jupyterpidaq.DAQinstance", "qualname": "newCalculatedColumn", "type": "function", "doc": "Uses jupyter-pandas-GUI.new_pandas_column_GUI to provide a GUI expression\ncomposer. This method finds the datasets and launches the GUI.
\n", "signature": "()", "funcdef": "def"}, {"fullname": "jupyterpidaq.DAQinstance.newPlot", "modulename": "jupyterpidaq.DAQinstance", "qualname": "newPlot", "type": "function", "doc": "Uses jupyter-pandas-GUI.plot_pandas_GUI to provide a GUI expression\ncomposer. This method finds the datasets and launches the GUI.
\n", "signature": "()", "funcdef": "def"}, {"fullname": "jupyterpidaq.DAQinstance.newFit", "modulename": "jupyterpidaq.DAQinstance", "qualname": "newFit", "type": "function", "doc": "Uses jupyter-pandas-GUI.fit_pandas_GUI to provide a GUI expression\ncomposer. This method finds the datasets and launches the GUI.
\n", "signature": "()", "funcdef": "def"}, {"fullname": "jupyterpidaq.Sensors", "modulename": "jupyterpidaq.Sensors", "type": "module", "doc": "This module wraps all the modules related to interpretting data from known\nsensors.
\n"}, {"fullname": "jupyterpidaq.Sensors.sensors", "modulename": "jupyterpidaq.Sensors.sensors", "type": "module", "doc": "\n"}, {"fullname": "jupyterpidaq.Sensors.sensors.to_reasonable_significant_figures", "modulename": "jupyterpidaq.Sensors.sensors", "qualname": "to_reasonable_significant_figures", "type": "function", "doc": "This function will return value rounded to a reasonable number of\nsignificant figures based on the uncertainty. If you are doing this\nbased on the standard return from the raw voltage or the sensor\ndefinitions in this file it is recommend that this be the standard\ndeviation of the average, which will often provide about one more digit\nthan the standard deviation. This will provide a guard digit for further\ncomputations.
\n\nParameters
\n\n\n- float value: the value to be rounded
\n- float uncertainty: the uncertainty.
\n
\n\n:returns float:
\n\nReturns: rounded_value a floating point number.
\n", "signature": "(value, uncertainty)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Sensors.sensors.to_reasonable_significant_figures_fast", "modulename": "jupyterpidaq.Sensors.sensors", "qualname": "to_reasonable_significant_figures_fast", "type": "function", "doc": "This function will return values rounded to a reasonable number of\nsignificant figures based on the avg_std. This function requires fewer\ncompares so is a little more efficient than calling\nto_reasonable_significant_figures(value, uncertainty) for avg, std,\navg_std separately.
\n\nParameters
\n\n\n- float avg: the average value
\n- float std: the standard deviation
\n- float avg_std: the estimated standard deviation in avg\n:returns list:
\n
\n\nReturns: list of rounded values for each [avg, std, avg_std]
\n", "signature": "(avg, std, avg_std)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Sensors.sensors.listSensors", "modulename": "jupyterpidaq.Sensors.sensors", "qualname": "listSensors", "type": "function", "doc": "Provides a list of the sensor classes provided by this file. The list must\nbe manually updated with each new class.
\n\nReturns
\n\n\n list of classnames
\n
\n", "signature": "()", "funcdef": "def"}, {"fullname": "jupyterpidaq.Sensors.sensors.RawAtoD", "modulename": "jupyterpidaq.Sensors.sensors", "qualname": "RawAtoD", "type": "class", "doc": "This is the base sensor class which all sensors should extend. See how to\ndo this properly using one of the examples below.\nThis class contains definitions for the raw AtoD return in volts. The\ndigital values are not used as the AtoD may have a builtin pre-amp,\nso a given digital value has different meanings depending upon the pre-amp\nsetting.
\n"}, {"fullname": "jupyterpidaq.Sensors.sensors.RawAtoD.__init__", "modulename": "jupyterpidaq.Sensors.sensors", "qualname": "RawAtoD.__init__", "type": "function", "doc": "This init should be called first in the init section of any class\nextending this class (e.g. super().__init__(Vdd)
). Then set\nself.name
and self.vendor
to the proper values. Append units\nspecific to the sensor to self.units
. The parameter Vdd must be\nsupplied upon initialization because the output voltage of some\nsensors depends on Vdd.
\n\nParameters
\n\n\n- float Vdd: the voltage supplied to the sensor by the A-to-D\nboard in case the sensor output depends on this.
\n
\n", "signature": "(self, Vdd)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Sensors.sensors.RawAtoD.getname", "modulename": "jupyterpidaq.Sensors.sensors", "qualname": "RawAtoD.getname", "type": "function", "doc": "Provides a string name for the sensor
\n\nReturns
\n\n\n string containing the sensor name
\n
\n", "signature": "(self)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Sensors.sensors.RawAtoD.getvendor", "modulename": "jupyterpidaq.Sensors.sensors", "qualname": "RawAtoD.getvendor", "type": "function", "doc": "Provides a string name for the sensor vendor/manufacturer
\n\nReturns
\n\n\n string containing the vendor/manufacturer name
\n
\n", "signature": "(self)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Sensors.sensors.RawAtoD.getunits", "modulename": "jupyterpidaq.Sensors.sensors", "qualname": "RawAtoD.getunits", "type": "function", "doc": "Provides the string names for the available units for this sensor.\nThese string names are also the functions within this class that\nreturn the measurement in those units.
\n\nReturns
\n\n\n units a list of strings.
\n
\n", "signature": "(self)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Sensors.sensors.RawAtoD.V", "modulename": "jupyterpidaq.Sensors.sensors", "qualname": "RawAtoD.V", "type": "function", "doc": "It is not really necessary to call this function because it just\nreturns the same values that are passed to it.\nIt is provided for consistency with the way sensors units are defined.
\n\nParameters
\n\n\n- v_avg: v_avg: average voltage from A-to-D
\n- v_std: standard deviation of the A-to-D measurements
\n- avg_std: estimate of the standard deviation of v_avg
\n- float avg_vdd: simultaneously measured average Vdd.
\n
\n\nReturns
\n\n\n [v_avg, v_std, avg_std]
\n
\n", "signature": "(self, v_avg, v_std, avg_std, avg_vdd)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Sensors.sensors.RawAtoD.mV", "modulename": "jupyterpidaq.Sensors.sensors", "qualname": "RawAtoD.mV", "type": "function", "doc": "Convert the raw AtoD voltage to mV.
\n\nParameters
\n\n\n- v_avg: v_avg: average voltage from A-to-D
\n- v_std: standard deviation of the A-to-D measurements
\n- avg_std: estimate of the standard deviation of v_avg
\n- float avg_vdd: simultaneously measured average Vdd.
\n
\n\nReturns
\n\n\n [v_avg, v_std, avg_std] converted to mV
\n
\n", "signature": "(self, v_avg, v_std, avg_std, avg_vdd)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Sensors.sensors.BuiltInThermistor", "modulename": "jupyterpidaq.Sensors.sensors", "qualname": "BuiltInThermistor", "type": "class", "doc": "This class contains the definitions for builtin thermistor.
\n", "bases": "RawAtoD"}, {"fullname": "jupyterpidaq.Sensors.sensors.BuiltInThermistor.__init__", "modulename": "jupyterpidaq.Sensors.sensors", "qualname": "BuiltInThermistor.__init__", "type": "function", "doc": "This init should be called first in the init section of any class\nextending this class (e.g. super().__init__(Vdd)
). Then set\nself.name
and self.vendor
to the proper values. Append units\nspecific to the sensor to self.units
. The parameter Vdd must be\nsupplied upon initialization because the output voltage of some\nsensors depends on Vdd.
\n\nParameters
\n\n\n- float Vdd: the voltage supplied to the sensor by the A-to-D\nboard in case the sensor output depends on this.
\n
\n", "signature": "(self, Vdd)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Sensors.sensors.BuiltInThermistor.K", "modulename": "jupyterpidaq.Sensors.sensors", "qualname": "BuiltInThermistor.K", "type": "function", "doc": "The returned values are in K. It is assumed that the distribution is\nsymmetric guassian even in K. This may not be true, but still gives\na reasonable estimate of the standard deviation.
\n\nParameters
\n\n\n- v_avg: average voltage from sensor.
\n- v_std: standard deviation of voltage from sensor.
\n- avg_std: estimated standard deviation of the avg.
\n- float avg_vdd: simultaneously measured average Vdd.
\n
\n\nReturns
\n\n\n \n
\n\nReturns: list [K_avg, K_std, K_avg_std]\n [average temperature in K,\n standard deviation of temperature in K,\n estimated standard deviation of the average temperature].
\n", "signature": "(self, v_avg, v_std, avg_std, avg_vdd)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Sensors.sensors.BuiltInThermistor.C", "modulename": "jupyterpidaq.Sensors.sensors", "qualname": "BuiltInThermistor.C", "type": "function", "doc": "The returned values are in deg C. It is assumed that the distribution\nis symmetric guassian even in deg C. This may not be true, but still\ngives a reasonable estimate of the standard deviation.
\n\nParameters
\n\n\n- v_avg: average voltage from sensor.
\n- v_std: standard deviation of voltage from sensor.
\n- avg_std: estimated standard deviation of the avg.
\n- float avg_vdd: simultaneously measured average Vdd.
\n
\n\nReturns
\n\n\n \n
\n\nReturns: list [C_avg, C_std, C_avg_std]\n [average temperature in C, standard deviation of temperature in C,\n estimated standard deviation of the average temperature].
\n", "signature": "(self, v_avg, v_std, avg_std, avg_vdd)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Sensors.sensors.BuiltInThermistor.F", "modulename": "jupyterpidaq.Sensors.sensors", "qualname": "BuiltInThermistor.F", "type": "function", "doc": "The returned values are in deg F. It is assumed that the distribution\nis symmetric guassian even in deg F. This may not be true, but still\ngives a reasonable estimate of the standard deviation.
\n\nParameters
\n\n\n- float v_avg: average voltage from sensor.
\n- float v_std: standard deviation of voltage from sensor.
\n- float avg_std: estimated standard deviation of the avg.
\n- float avg_vdd: simultaneously measured average Vdd.\n:returns list:
\n
\n\nReturns: list [F_avg, F_std, F_avg_std]\n [average temperature in F, standard deviation of temperature in F,\n estimated standard deviation of the average temperature].
\n", "signature": "(self, v_avg, v_std, avg_std, avg_vdd)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Sensors.sensors.VernierSSTemp", "modulename": "jupyterpidaq.Sensors.sensors", "qualname": "VernierSSTemp", "type": "class", "doc": "This class contains the definitions for Vernier Stainless Steel Temperature\nProbe. A 20K thermistor.
\n", "bases": "RawAtoD"}, {"fullname": "jupyterpidaq.Sensors.sensors.VernierSSTemp.__init__", "modulename": "jupyterpidaq.Sensors.sensors", "qualname": "VernierSSTemp.__init__", "type": "function", "doc": "This init should be called first in the init section of any class\nextending this class (e.g. super().__init__(Vdd)
). Then set\nself.name
and self.vendor
to the proper values. Append units\nspecific to the sensor to self.units
. The parameter Vdd must be\nsupplied upon initialization because the output voltage of some\nsensors depends on Vdd.
\n\nParameters
\n\n\n- float Vdd: the voltage supplied to the sensor by the A-to-D\nboard in case the sensor output depends on this.
\n
\n", "signature": "(self, Vdd)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Sensors.sensors.VernierSSTemp.K", "modulename": "jupyterpidaq.Sensors.sensors", "qualname": "VernierSSTemp.K", "type": "function", "doc": "The returned values are in K. It is assumed that the distribution is\nsymmetric guassian even in K. This may not be true, but still gives\na reasonable estimate of the standard deviation.
\n\nParameters
\n\n\n- float v_avg: average voltage from sensor.
\n- float v_std: standard deviation of voltage from sensor.
\n- float avg_std: estimated standard deviation of the avg.
\n- float avg_vdd: simultaneously measured average Vdd.\n:returns list:
\n
\n\nReturns list [K_avg, K_std, K_avg_std]\n [average temperature in K, standard deviation of temperature in K,\n estimated standard deviation of the average temperature].
\n", "signature": "(self, v_avg, v_std, avg_std, avg_vdd)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Sensors.sensors.VernierSSTemp.C", "modulename": "jupyterpidaq.Sensors.sensors", "qualname": "VernierSSTemp.C", "type": "function", "doc": "The returned values are in deg C. It is assumed that the distribution\nis symmetric guassian even in deg C. This may not be true, but still\ngives a reasonable estimate of the standard deviation.
\n\nParameters
\n\n\n- float v_avg: average voltage from sensor.
\n- float v_std: standard deviation of voltage from sensor.
\n- float avg_std: estimated standard deviation of the avg.
\n- float avg_vdd: simultaneously measured average Vdd.
\n
\n\nReturns
\n\n\n \n
\n\nReturns: C_avg, C_std, C_avg_std\n average temperature in C, standard deviation of temperature in C,\n estimated standard deviation of the average temperature.
\n", "signature": "(self, v_avg, v_std, avg_std, avg_vdd)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Sensors.sensors.VernierSSTemp.F", "modulename": "jupyterpidaq.Sensors.sensors", "qualname": "VernierSSTemp.F", "type": "function", "doc": "The returned values are in deg F. It is assumed that the\ndistribution is symmetric guassian even in deg F. This may not be\ntrue, but still gives a reasonable estimate of the standard\ndeviation.
\n\nParameters
\n\n\n- float v_avg: average voltage from sensor.
\n- float v_std: standard deviation of voltage from sensor.
\n- float avg_std: estimated standard deviation of the avg.
\n- float avg_vdd: simultaneously measured average Vdd.
\n
\n\nReturns
\n\n\n \n
\n\nReturns: F_avg, F_std, F_avg_std\n average temperature in F, standard deviation of\n temperature in F, estimated standard deviation of the average\n temperature.
\n", "signature": "(self, v_avg, v_std, avg_std, avg_vdd)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Sensors.sensors.VernierGasP", "modulename": "jupyterpidaq.Sensors.sensors", "qualname": "VernierGasP", "type": "class", "doc": "This class contains the definitions for Vernier absolute gas pressure\nsensor, GPS-BTA (post 2011 manufacture).
\n", "bases": "RawAtoD"}, {"fullname": "jupyterpidaq.Sensors.sensors.VernierGasP.__init__", "modulename": "jupyterpidaq.Sensors.sensors", "qualname": "VernierGasP.__init__", "type": "function", "doc": "This init should be called first in the init section of any class\nextending this class (e.g. super().__init__(Vdd)
). Then set\nself.name
and self.vendor
to the proper values. Append units\nspecific to the sensor to self.units
. The parameter Vdd must be\nsupplied upon initialization because the output voltage of some\nsensors depends on Vdd.
\n\nParameters
\n\n\n- float Vdd: the voltage supplied to the sensor by the A-to-D\nboard in case the sensor output depends on this.
\n
\n", "signature": "(self, Vdd)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Sensors.sensors.VernierGasP.Pa", "modulename": "jupyterpidaq.Sensors.sensors", "qualname": "VernierGasP.Pa", "type": "function", "doc": "Parameters
\n\n\n- float v_avg: average raw voltage
\n- float v_std: standard deviation of the raw voltage
\n- float avg_std: estimated standard deviation of v_avg
\n- float avg_vdd: the Vdd measured simultaneously with v_avg (not\nused)
\n
\n\nReturns
\n\n\n \n
\n\nReturns: P_avg, P_std, P_avg_std all in Pascals
\n", "signature": "(self, v_avg, v_std, avg_std, avg_vdd)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Sensors.sensors.VernierGasP.kPa", "modulename": "jupyterpidaq.Sensors.sensors", "qualname": "VernierGasP.kPa", "type": "function", "doc": "Parameters
\n\n\n- float v_avg: average raw voltage
\n- float v_std: standard deviation of the raw voltage
\n- float avg_std: estimated standard deviation of v_avg
\n- float avg_vdd: the Vdd measured simultaneously with v_avg (not\nused)
\n
\n\nReturns
\n\n\n \n
\n\nReturns: P_avg, P_std, P_avg_std all in kiloPascals
\n", "signature": "(self, v_avg, v_std, avg_std, avg_vdd)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Sensors.sensors.VernierGasP.Bar", "modulename": "jupyterpidaq.Sensors.sensors", "qualname": "VernierGasP.Bar", "type": "function", "doc": "Parameters
\n\n\n- float v_avg: average raw voltage
\n- float v_std: standard deviation of the raw voltage
\n- float avg_std: estimated standard deviation of v_avg
\n- float avg_vdd: the Vdd measured simultaneously with v_avg (not\nused)
\n
\n\nReturns
\n\n\n \n
\n\nReturns: P_avg, P_std, P_avg_std all in Bars
\n", "signature": "(self, v_avg, v_std, avg_std, avg_vdd)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Sensors.sensors.VernierGasP.Torr", "modulename": "jupyterpidaq.Sensors.sensors", "qualname": "VernierGasP.Torr", "type": "function", "doc": "Parameters
\n\n\n- float v_avg: average raw voltage
\n- float v_std: standard deviation of the voltage measurements
\n- float avg_std: estimate of the standard deviation of the average
\n- float avg_vdd: the Vdd measured simultaneously with v_avg (\nnot used)
\n
\n\nReturns
\n\n\n \n
\n\nReturns: P_avg, P_std, P_avg_std all in Torr
\n", "signature": "(self, v_avg, v_std, avg_std, avg_vdd)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Sensors.sensors.VernierGasP.mmHg", "modulename": "jupyterpidaq.Sensors.sensors", "qualname": "VernierGasP.mmHg", "type": "function", "doc": "Parameters
\n\n\n- float v_avg: average raw voltage
\n- float v_std: standard deviation of the voltage measurements
\n- float avg_std: estimate of the standard deviation of the average
\n- float avg_vdd: the Vdd measured simultaneously with v_avg (\nnot used)
\n
\n\nReturns
\n\n\n \n
\n\nReturns: P_avg, P_std, P_avg_std all in mmHg
\n", "signature": "(self, v_avg, v_std, avg_std, avg_vdd)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Sensors.sensors.VernierGasP.atm", "modulename": "jupyterpidaq.Sensors.sensors", "qualname": "VernierGasP.atm", "type": "function", "doc": "Parameters
\n\n\n- float v_avg: average raw voltage
\n- float v_std: standard deviation of the voltage measurements
\n- float avg_std: estimate of the standard deviation of the average
\n- float avg_vdd: the Vdd measured simultaneously with v_avg (\nnot used)
\n
\n\nReturns
\n\n\n \n
\n\nReturns: P_avg, P_std, P_avg_std all in atm
\n", "signature": "(self, v_avg, v_std, avg_std, avg_vdd)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Sensors.sensors.VernierGasP_OLD", "modulename": "jupyterpidaq.Sensors.sensors", "qualname": "VernierGasP_OLD", "type": "class", "doc": "This class contains the definitions for Vernier absolute gas pressure\nsensor, GPS-BTA (pre 2011 manufacture. Label does not depict a caliper\nwith the registered trademark symbol).
\n", "bases": "RawAtoD"}, {"fullname": "jupyterpidaq.Sensors.sensors.VernierGasP_OLD.__init__", "modulename": "jupyterpidaq.Sensors.sensors", "qualname": "VernierGasP_OLD.__init__", "type": "function", "doc": "This init should be called first in the init section of any class\nextending this class (e.g. super().__init__(Vdd)
). Then set\nself.name
and self.vendor
to the proper values. Append units\nspecific to the sensor to self.units
. The parameter Vdd must be\nsupplied upon initialization because the output voltage of some\nsensors depends on Vdd.
\n\nParameters
\n\n\n- float Vdd: the voltage supplied to the sensor by the A-to-D\nboard in case the sensor output depends on this.
\n
\n", "signature": "(self, Vdd)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Sensors.sensors.VernierGasP_OLD.Pa", "modulename": "jupyterpidaq.Sensors.sensors", "qualname": "VernierGasP_OLD.Pa", "type": "function", "doc": "Parameters
\n\n\n- float v_avg: average raw voltage
\n- float v_std: standard deviation of the raw voltage
\n- float avg_std: estimated standard deviation of v_avg
\n- float avg_vdd: the Vdd measured simultaneously with v_avg (not\nused)
\n
\n\nReturns
\n\n\n \n
\n\nReturns: P_avg, P_std, P_avg_std all in Pascals
\n", "signature": "(self, v_avg, v_std, avg_std, avg_vdd)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Sensors.sensors.VernierGasP_OLD.kPa", "modulename": "jupyterpidaq.Sensors.sensors", "qualname": "VernierGasP_OLD.kPa", "type": "function", "doc": "Parameters
\n\n\n- float v_avg: average raw voltage
\n- float v_std: standard deviation of the raw voltage
\n- float avg_std: estimated standard deviation of v_avg
\n- float avg_vdd: the Vdd measured simultaneously with v_avg (not\nused)
\n
\n\nReturns
\n\n\n \n
\n\nReturns: P_avg, P_std, P_avg_std all in kiloPascals
\n", "signature": "(self, v_avg, v_std, avg_std, avg_vdd)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Sensors.sensors.VernierGasP_OLD.Bar", "modulename": "jupyterpidaq.Sensors.sensors", "qualname": "VernierGasP_OLD.Bar", "type": "function", "doc": "Parameters
\n\n\n- float v_avg: average raw voltage
\n- float v_std: standard deviation of the raw voltage
\n- float avg_std: estimated standard deviation of v_avg
\n- float avg_vdd: the Vdd measured simultaneously with v_avg (not\nused)
\n
\n\nReturns
\n\n\n \n
\n\nReturns: P_avg, P_std, P_avg_std all in Bars
\n", "signature": "(self, v_avg, v_std, avg_std, avg_vdd)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Sensors.sensors.VernierGasP_OLD.Torr", "modulename": "jupyterpidaq.Sensors.sensors", "qualname": "VernierGasP_OLD.Torr", "type": "function", "doc": "Parameters
\n\n\n- float v_avg: average raw voltage
\n- float v_std: standard deviation of the voltage measurements
\n- float avg_std: estimate of the standard deviation of the average
\n- float avg_vdd: the Vdd measured simultaneously with v_avg (\nnot used)
\n
\n\nReturns
\n\n\n \n
\n\nReturns: P_avg, P_std, P_avg_std all in Torr
\n", "signature": "(self, v_avg, v_std, avg_std, avg_vdd)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Sensors.sensors.VernierGasP_OLD.mmHg", "modulename": "jupyterpidaq.Sensors.sensors", "qualname": "VernierGasP_OLD.mmHg", "type": "function", "doc": "Parameters
\n\n\n- float v_avg: average raw voltage
\n- float v_std: standard deviation of the voltage measurements
\n- float avg_std: estimate of the standard deviation of the average
\n- float avg_vdd: the Vdd measured simultaneously with v_avg (\nnot used)
\n
\n\nReturns
\n\n\n \n
\n\nReturns: P_avg, P_std, P_avg_std all in mmHg
\n", "signature": "(self, v_avg, v_std, avg_std, avg_vdd)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Sensors.sensors.VernierGasP_OLD.atm", "modulename": "jupyterpidaq.Sensors.sensors", "qualname": "VernierGasP_OLD.atm", "type": "function", "doc": "Parameters
\n\n\n- float v_avg: average raw voltage
\n- float v_std: standard deviation of the voltage measurements
\n- float avg_std: estimate of the standard deviation of the average
\n- float avg_vdd: the Vdd measured simultaneously with v_avg (\nnot used)
\n
\n\nReturns
\n\n\n \n
\n\nReturns: P_avg, P_std, P_avg_std all in atm
\n", "signature": "(self, v_avg, v_std, avg_std, avg_vdd)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Sensors.sensors.VernierpH", "modulename": "jupyterpidaq.Sensors.sensors", "qualname": "VernierpH", "type": "class", "doc": "This class contains the definitions for Vernier standard pH\nsensor, PH-BTA.
\n", "bases": "RawAtoD"}, {"fullname": "jupyterpidaq.Sensors.sensors.VernierpH.__init__", "modulename": "jupyterpidaq.Sensors.sensors", "qualname": "VernierpH.__init__", "type": "function", "doc": "This init should be called first in the init section of any class\nextending this class (e.g. super().__init__(Vdd)
). Then set\nself.name
and self.vendor
to the proper values. Append units\nspecific to the sensor to self.units
. The parameter Vdd must be\nsupplied upon initialization because the output voltage of some\nsensors depends on Vdd.
\n\nParameters
\n\n\n- float Vdd: the voltage supplied to the sensor by the A-to-D\nboard in case the sensor output depends on this.
\n
\n", "signature": "(self, Vdd)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Sensors.sensors.VernierpH.pH", "modulename": "jupyterpidaq.Sensors.sensors", "qualname": "VernierpH.pH", "type": "function", "doc": "Parameters
\n\n\n- float v_avg: average raw voltage
\n- float v_std: standard deviation of the raw voltage
\n- float avg_std: estimated standard deviation of v_avg
\n- float avg_vdd: the Vdd measured simultaneously with v_avg (not\nused)
\n
\n\nReturns
\n\n\n \n
\n\nReturns: pH_avg, pH_std, pH_avg_std all in pH units
\n", "signature": "(self, v_avg, v_std, avg_std, avg_vdd)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Sensors.sensors.VernierFlatpH", "modulename": "jupyterpidaq.Sensors.sensors", "qualname": "VernierFlatpH", "type": "class", "doc": "This class contains the definitions for Vernier flat tris-compatible pH\nsensor, FPH-BTA.
\n", "bases": "RawAtoD"}, {"fullname": "jupyterpidaq.Sensors.sensors.VernierFlatpH.__init__", "modulename": "jupyterpidaq.Sensors.sensors", "qualname": "VernierFlatpH.__init__", "type": "function", "doc": "This init should be called first in the init section of any class\nextending this class (e.g. super().__init__(Vdd)
). Then set\nself.name
and self.vendor
to the proper values. Append units\nspecific to the sensor to self.units
. The parameter Vdd must be\nsupplied upon initialization because the output voltage of some\nsensors depends on Vdd.
\n\nParameters
\n\n\n- float Vdd: the voltage supplied to the sensor by the A-to-D\nboard in case the sensor output depends on this.
\n
\n", "signature": "(self, Vdd)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Sensors.sensors.VernierFlatpH.pH", "modulename": "jupyterpidaq.Sensors.sensors", "qualname": "VernierFlatpH.pH", "type": "function", "doc": "Parameters
\n\n\n- float v_avg: average raw voltage
\n- float v_std: standard deviation of the raw voltage
\n- float avg_std: estimated standard deviation of v_avg
\n- float avg_vdd: the Vdd measured simultaneously with v_avg (not\nused)
\n
\n\nReturns
\n\n\n \n
\n\nReturns: pH_avg, pH_std, pH_avg_std all in pH units
\n", "signature": "(self, v_avg, v_std, avg_std, avg_vdd)", "funcdef": "def"}];
+ /** pdoc search index */const docs = [{"fullname": "jupyterpidaq", "modulename": "jupyterpidaq", "type": "module", "doc": "User Guide
\n\nIntroduction | \nUsage
\n\nIntroduction
\n\nThis software allows realtime collection and plotting of \ndigitized data in a Jupyter notebook using either of the following two\ninterface boards on a Raspberry Pi:
\n\n\n- Adafruit compliant ADS1115 boards \n(example,\nalso available from other vendors);
\n- The π-Plates DAQC2 plate.
\n- A demo mode will run on any computer with a Jupyter notebook install and\nPython 3.6+. You can try the demo mode without installing on your own \ncomputer by launching an instance on the MyBinder servers:\n.\nExample notebooks can be found in the \"usage_examples\" folder.
\n
\n\nUsage
\n\nLaunch the software | \nInitialize data acquisiton tools | \nCollect data |\nDisplaying a Data Table | \nPlotting data | \nAnalyzing data
\n\nStarting JupyterPiDAQ
\n\nA working Jupyter notebook installation with JupyterPiDAQ installed is\nrequired. If you need to install the software see the Installation \nInstructions. There are two common ways this may be set \nup, that lead to slightly different steps for starting the software:
\n\n\n- A special kernel may be set up that can be used in any Jupyter notebook \ninstall for the current user (see the very end of the\nInstallation Instructions). \n
\n- In this case launch\nJupyter, in whichever directory you want to work, using the \ncommand:
jupyter notebook
. \n- Open a new notebook and choose the kernel \nfor
JupyterPiDAQ
. The kernel name will depend upon what was chosen \nduring installation. \n
\n- Only for use within the directory structure of the virtual environment \nthat was set up for the software. \n
\n- In this case you must navigate to the \ndirectory of the virtual environment using the
cd
command before \nstarting the software. \n- Then enter the virtual environment with the command
pipenv shell
. \nThis assumes you set up pipenv
as described in the \nInstallation instructions. \n- Launch Jupyter using the command:
jupyter notebook
. \n- Open a new python notebook.
\n
\n
\n\n\n\nInitialize the data acquisition tools by putting the statement from \njupyterpidaq.DAQinstance import *
into the first cell and clicking on the \n'Run' button. The package loads supporting packages (numpy, pandas, plotly,\netc...) and searches for compatible hardware. On a Raspberry Pi this takes a\nnumber of seconds. If no compatible A-to-D boards are found, demo mode is used.\nIn demo mode the A-to-D board is simulated by a random number generator.
\n\nWhen setup is done a new menu appears at the end of the menubar (figure 1).
\n\n\n\nFigure 1: The menu created once the data acquisition software is \ninitialized.
\n\nThe menu options insert jupyter widget based GUIs for starting a run,\ndisplaying the data as tables or plots, composing an expression to calculate\na new column in a DataFrame, or fitting data.
\n\nCollecting data
\n\nFrom the \"DAQ Commands\" menu select \"Insert New Run After Selection...\" or \n\"Append New Run to End...\". The first will insert and start the code to set up \ndata collection for a run in the cell below the currently selected cell. \nThe second will append this to the end of the notebook. This will generate \na GUI that looks like the figure 2, below. Fill in the information to define \nwhat you wish to do (see below figure 2 for more details).
\n\n\n\nFigure 2: Image of the GUI for setting up a data collection run.
\n\n\n- Give the run a title/name using the first textbox.
\n- You can collect up to four (4) data traces at once. Two different data \ntraces can display the same analog-to-digital channel, but in different \nunits (e.g. you could record both the raw voltage and temperature from a \nthermistor). Each trace is activated by selecting its checkbox.
\n- Once a trace is activated you can give it a title and must select: the \ndata acquisition board, channel, sensor, units and gain from the \navailable drop-down menus.
\n- Once all your traces are set up decide whether they should be displayed in \nmultiple stacked graphs or all on the same graph. Uncheck the box to \ndisplay all on one graph.
\n- Select the data collection rate (3 Hz is currently the maximum rate).
\n- When everything is set the way you wish, click on the \"Set Parameters\" \nbutton. The collection parameters will be displayed and a button to \nstart the data collection will appear.
\n- The \"start\" button will convert to a \"stop\" button once data collection \nis started. The data graph(s) will update at roughly 1 Hz, so you can \nmonitor the progress of the data collection.
\n- Click the \"stop\" button to end data collection. It can take \na while to stop if the data collection has got ahead of the graphic \ndisplay of the data.
\n- Once collection is stopped you will see a plot or plots of the completed \ndata collection and the name of the .html file the raw data has been \nbacked up to.
\n- Should you accidentally clear the output of the collection results cell,\nrerunning it will regenerate the display.
\n
\n\nDisplaying data
\n\nIn a table
\n\nSelecting the \"Show data in table...\" option in the \"DAQ Command\" menu will \ninsert a cell immediately below the currently selected cell displaying a \nwidget in which you can select which data set to display.
\n\nPlotting data
\n\nSelecting the \"Insert new plot after selection...\" option in the menu will\ninsert two cells immediately below the currently selected cell. The first cell\nwill be used to generate a GUI to lead you through creation of the code to\ngenerate the plot. The second cell is where the plot creation code is \ngenerated. The first tab of this GUI looks like figure 3.
\n\n\n\nFigure 3: Image of the first tab in the four tab (4 step) Pandas Plot \nComposer. More information in the Pandas_GUI\ndocumentation.
\n\nIt is best to do the tabs in order. The notices in red will try to \nwarn you of errors or oversights. The \"Instructions\" accordian can be \nexpanded to get more specific information about how to use each tab.
\n\nYou can get more sophisticated control of \nyour plot by editing the code produced by this GUI. See the Plotly \nFigureWidget Instructions and the \nexample Jupyter notebooks referenced there for more information.
\n\nThe GUI destroys itself once you complete step 4.
\n\nAnalyzing data
\n\nCalculating a new column
\n\nSelecting \"Calculate new column...\" from the menu will add two cells\nimmediately below the selected cell. The first cell will create the GUI to\nlead you through creation of the code to calculate the new column. The second\ncell is where the code is built. The first tab of the GUI looks like figure 4.
\n\n\n\nFigure 4: Image of the first tab in the four tab (4 step) Pandas New \nCalculated Column Composer. More information in the Pandas_GUI\ndocumentation.
\n\nDo the tabs in order. You can perform more complex manipulations than built \ninto the GUI by editing the code generated by this GUI.
\n\nThe GUI destroys itself once you complete step 4.
\n\nFitting data
\n\nA GUI for defining simple fits (linear, polynomial, exponential decay, sine \nand Gaussian) can be launched by selecting \"Insert new Fit after selection..\n.\" from the menu. This will create the GUI to lead you through selecting \nand fitting the data. The code is created in the cell immediately below the \nGUI.
\n\n\n\nFigure 5: Image of the first tab in the Pandas Fit Composer.\nMore information in the Pandas_GUI\ndocumentation.
\n\nInstallation
\n\nInitial setup: On Raspberry Pi | \nOn non-Pi Systems
\n\nFinal Set up
\n\nRaspberry Pi Initial Setup
\n\nUnless you only want to run in Demo mode make sure you have one of the \ncompatible interface boards installed. The current options are:
\n\n\n- Adafruit compliant ADS1115 boards \n(example,\nalso available from other vendors);
\n- The π-Plates DAQC2 plate.
\n- If you wish to use different interfaces see the Development\nNotes\nand the
Boards
subpackage of jupyterpidaq
for examples and \ninformation on how to define the code interface for a board. \n
\n\nOS specific: Ubuntu on Pi | \nRaspberrian on Pi
\n\nUbuntu on Pi
\n\nBy default in Ubuntu 20.04 for Pis the gpio and spi groups do not exist.\nThe i2c group does (not always).
\n\n\n- Make sure that the following packages are installed
rpi.gpio-common \npython3-pigpio python3-gpiozero python3-rpi.gpio
. \n- You can avoid having to create a gpio group, by assigning users who need\ngpio access to the dialout group. Check that /dev/gpiomem is part of that \ngroup and that the dialout group has rw access. If not you will need to set\nit.
\n- Users also need to be members of the i2c group. If it does not exist create \nit and then make that the group for /dev/i2c-1 with group rw permissions. \nTHIS MAY NOT BE NECESSARY.
\n- The spi group needs to be created (addgroup?).
\n- Additionally the spi group needs to be given rw access to the spi devices\nat each boot. To do this create a one line rule in a file named \n
/etc/udev/rules.d/50-spidev.rules
containing SUBSYSTEM==\"spidev\", \nGROUP=\"spi\", MODE=\"0660\"
. The file should have rw permission for root \nand read permission for everyone else. \n- Make sure you have pip installed for \npython 3:
python3 -m pip --version
or pip3 --version
. If you do not, \ninstall using apt \ninstall python3-pip
. \n
\n\nRaspberrian on Pi
\n\n(TBD)
\n\nNon-Pi based System Initial Setup
\n\nMake sure that Python >=3.6 is installed: python3 -v
. If not follow \ninstructions at python.org. This software should run \non any computer capable of supporting the necessary version of Python. \nHowevever, it will only run in demo mode if the computer does not support \none of the compatible A-to-D boards.
\n\nGeneric Linux
\n\n\n- If your system hardware \nhas GPIO pins and a GPIO interface board, you should try following the \ninstructions for a Pi based system above. If \nyou figure out how to make this work on other SBCs or systems with GPIO, \nplease submit a pull request updating these instructions.
\n- If your system hardware does not support GPIO and one of the compatible \ninterface boards, the software will run in demo mode.
\n
\n\nNOTE: If a binary distribution (whl or wheel) is not available for your\nplatform, some of the required packages may need to be compiled. If you get\ncompilation errors when installing try getting the python header and \ndevelopment files for your platform. To get them on most *nix platforms use the\ncommand $ sudo apt install python3-dev
.
\n\nMacOS
\n\nWindows (Please, no.....)
\n\nFinal Set Up
\n\nMake sure the user you will be running the software under is a member of the \ngroups dialout
, spi
and if it existsi2c
. It is recommended that you \ninstall JupyterPiDAQ in its own \nvirtual environment.\nThe instructions below do just that using the original author's favorite \nvirtual environment tool pipenv.
\n\nLog into your chosen user account:
\n\n\n- Install pipenv:
pip3 install \n--user pipenv
. You may\nneed to add ~/.local/bin
to your PATH
to make pipenv
\navailable in your command shell. More discussion: \nThe Hitchhiker's Guide to\nPython. \n- Create a directory for the virtual environment you will be installing\ninto (example:
$ mkdir JupyterPiDAQ
). \n- Navigate into the directory
$ cd JupyterPiDAQ
. \n- Create the virtual environment and enter it
$ pipenv shell
. To get out of\nthe environment you can issue the $ exit
command on the command line. \n- While still in the shell install the latest JupyterPiDAQ and all its\nrequirements\n
$ pip install -U JupyterPiDAQ
. This can take a long time, especially on a\nRaspberry Pi. On a Pi 3B+ (minimum requirement) it will probably not run\nwithout at least 1 GB of swap. See: Build Jupyter on a Pi\nfor a discussion of adding swap space on a Pi. \n- Still within the environment shell test\nthis by starting jupyter
$ jupyter notebook
. Jupyter should launch in your browser.\n\n- Open a new notebook using the default (Python 3) kernel.
\n- In the first cell import all from DAQinstance.py: \n
from jupyterpidaq.DAQinstance import *
.\nWhen run this cell should load the DAQmenu at the end of the Jupyter\nnotebook menu/icon bar. If you do not have an appropriate A-to-D\nboard installed you will get a message and the software\nwill default to demo mode, substituting a random number\ngenerator for the A-to-D. Because of the demo mode it is\npossible to run this on any computer, not just a Pi. \n
\n- If you wish, you can make this environment available to an alternate Jupyter\ninstall as a special kernel when you are the user.\n
\n- Make sure you are running in your virtual environment
$ pipenv shell
\nin the directory for virtual environment will do that. \n- Issue the command to add this as a kernel to your personal space: \n
$ python -m ipykernel install --user --name=<name-you-want-for-kernel>
. \n- More information is available in the Jupyter/Ipython documentation. \nA simple tutorial from Nikolai Jankiev (_Parametric Thoughts_) can be\nfound here.
\n
\n
\n\nDevelopment Notes
\n\n\n\nSetting up Development Environment
\n\nBasic requirements: Python 3.6+, associated\npip and a Jupyter notebook.\nSee: python.org and\nJupyter.org.
\n\n\n- If not installed, install pipenv:
$ pip3 install --user pipenv
. You may\nneed to add ~/.local/bin
to your PATH
to make pipenv
\navailable in your command shell. More discussion: \nThe Hitchhiker's Guide to Python. \n- Navigate to the directory where this package will be\nor has been downloaded to. Use
pipenv
to install an \n\"editable\" package \ninside the directory as described below:\n\n- Start a shell in the environment
$ pipenv shell
. \n- Install using pip.\n
\n- If you downloaded the git repository named \"JupyterPiDAQ\"\nand have used that directory to build your virtual\nenvironment:
$ pip install -e ../JupyterPiDAQ/
. \n- If you are downloading from PyPi\n
$ pip install -e JupyterPiDAQ
\n- Either should install all the additional packages this\npackage depends upon. On a Raspberry Pi this will take\na long time. It probably will not run without at least 1 GB of swap. See: \nBuild Jupyter on a Pi\n.
\n
\n- Still within the environment shell test\nthis by starting jupyter
$ jupyter notebook
. Jupyter should launch in\nyour browser.\n\n- Open a new notebook using the default (Python 3) kernel.
\n- In the first cell import all from DAQinstance.py: \n
from jupyterpidaq.DAQinstance import *
.\nWhen run this cell should load the DAQmenu at the end of the\nJupyter notebook menu/icon bar. If you do not have an appropriate A-to-D\nboard installed you will get a message and the software\nwill default to demo mode, substituting a random number\ngenerator for the A-to-D. Because of the demo mode it is\npossible to run this on any computer, not just a Pi. \n
\n
\n- If you wish, you can make this environment available to an alternate Jupyter\ninstall as a special kernel when you are the user.\n
\n- Make sure you are running in your virtual environment
$ pipenv shell
\nin the directory for virtual environment will do that. \n- Issue the command to add this as a kernel to your personal space: \n
$ python -m ipykernel install --user --name=<name-you-want-for-kernel>
. \n- More information is available in the Jupyter/Ipython documentation. \nA simple tutorial from Nikolai Jankiev (_Parametric Thoughts_) can be\nfound here.
\n
\n
\n\nAdding New Sensor Code
\n\n\n- Copy an existing sensor class paste it into the end of\nsensors.py and rename it.
\n- Update/delete functions for each valid unit within the new\nclass as necessary.
\n- Update the sensor name, vendor and available units in the\n
__init__
function. \n- Add the new sensor classname to the list of available sensors\nin
listSensors
at about line 120 of sensors.py. \n- Add the new sensor classname to
getsensors
of ADCsim.py,\nADCsim_line.py and any board (e.g. DAQC2.py) with which the sensor\ncan be used. Do not guess if a sensor works with a particular\nboard. Test it! \n
\n\nRunning Tests
\n\n\n- Install updated pytest in the virtual environment:\n
\npipenv shell\npip install -U pytest\n
\nRun tests ignoring the manual tests in the dev_testing
directory:\npython -m pytest --ignore='dev_testing'
.
\n\nBuilding Documentation
\nInstall or update pdoc into the virtual environment pip install -U pdoc
.
\n- Make edits to the
.md
files within the docs folder that are to be \nincluded in the first page (see __init__.py
of the jupyterpidaq package). \n- At the root level run
pdoc \n--logo https://jupyterphysscilab.github.io/JupyterPiDAQ/JupyterPiDAQ-logo.svg --logo-link \nhttps://jupyterphysscilab.github.io/JupyterPiDAQ/ --footer-text \n\"JupyterPiDAQ vX.X.X\" -html -o docs jupyterpidaq
Unless you are on a \nRaspbery Pi this will throw an error about import
. Just ignore. \n
\n\nBuilding PyPi package
\n\n\n- Make sure to update the version number in setup.py first.
\n- Install updated setuptools and twine in the virtual environment:\n
\npipenv shell\npip install -U setuptools wheel twine\n
\n- Build the distribution
python -m setup sdist bdist_wheel
. \n- Test it on
test.pypi.org
.\n\n- Upload it (you will need an account on test.pypi.org):\n
python -m twine upload --repository testpypi dist/*
. \n- Create a new virtual environment and test install into it:\n
\nexit # to get out of the current environment\ncd <somewhere>\nmkdir <new virtual environment>\ncd <new directory>\npipenv shell #creates the new environment and enters it.\npip install -i https://test.pypi.org/..... # copy actual link from the\n # repository on test.pypi.\n
\nThere are often install issues because sometimes only older versions of\nsome of the required packages are available on test.pypi.org. If this\nis the only problem change the version to end in rc0
for release\ncandidate and try it on the regular pypi.org as described below for\nreleasing on PyPi. \n- After install test by running a jupyter notebook in the virtual \nenvironment.
\n
\n
\n\nReleasing on PyPi
\n\nProceed only if testing of the build is successful.
\n\n\n- Double check the version number in setup.py.
\n- Rebuild the release:
python -m setup sdist bdist_wheel
. \n- Upload it:
python -m twine upload dist/*
\n- Make sure it works by installing it in a clean virtual environment. This\nis the same as on test.pypi.org except without
-i https://test.pypy...
. If\nit does not work, pull the release. \n
\n\nChange Log
\n\n\n- 0.7.7\n
\n- Updated requirements for upstream security fixes.
\n- Conversion to pandas dataframe now works when trace 0 is not collected.
\n- DAQ menu no longer created in trusted notebooks if the data acquisition \ntools have not been initialized since the notebook was opened.
\n- Reworked the data collection so that opening an old notebook without \nrunning anything will not have any leftover inoperable or undefined \nwidgets.
\n- Reordered the live trace display to match the order of the names at right.
\n- Runs now saved to a human readable html file that includes the run \nconditions.
\n- As long as this html file is in the same directory as the notebook, the \nrun display can be recreated by running its cell after accidentally \nclearing the cell output.
\n- The cell displaying the results of a run is now protected against \ndeletion and editing.
\n
\n- 0.7.6\n
\n- Converted to fancy menus (could make hierarchical).
\n
\n- 0.7.5\n
\n- Added fitting to DAQ command menu.
\n- Documentation Enhancements: github.io website; first pass as API docs; \nreorganized documentation; MyBinder link now forces launch in classic \nnotebook; added plans for adapter board to connect Vernier Sensors.
\n
\n- 0.7.4.1\n
\n- Improved layout of data collection.
\n- Better widget cleanup.
\n- Readme fixes.
\n
\n- 0.7.3 Pip install reliability fixes.
\n- 0.7.2 Suppress Javascript error when not in JLab.
\n- 0.7.1\n
\n- Include Heat Capacity Lab example.
\n- Make menu show up in JLab (still not functional).
\n- Remove matplotlib baggage.
\n
\n- 0.7.0\n
\n- Switched to plotly widget for plotting.
\n- Added Vernier pressure sensor calibrations (old and new).
\n- Jupyter widgets based new calculated column GUI.
\n- Jupyter widgets based new plot GUI.
\n- Default to providing only one time for channels collected nearly \nsimultaneously.
\n- As reported values are averages, switched to reporting the estimated \nstandard deviation of the average rather than the deviation of all the \nreadings used to create the average.
\n
\n- 0.6.0 \n
\n- Initial release.
\n- Live data collection.
\n- Recognized sensors: ADS1115 boards (voltage, built-in thermistor, \nVernier SS temperature probe), DAQC2 boards (voltage,Vernier SS \ntemperature probe, Vernier standard pH probe, Vernier flat pH probe).
\n
\n
\n\nThree Channel Adapter Board for Vernier Sensors
\n\nBoard plans
\n\n\n\nEtching the board
\n\nClean Cu cladding to be etched by wet sanding with 1500 grit or finer.\nDraw traces with a black sharpie \u201cindustrial super permanent ink\u201d version\nworks best. Allow to dry completely (no odor). Can be speeded up using a heat\ngun.
\n\nEtchant recipe:
\n\n3 M HCl
\n\nCuCl2 to make medium emerald green solution (can also be made by \ndissolving Cu after adding hydrogen peroxide)
\n\nUsing test piece add 30% H2O2 dropwise to get gentle \nbubbling and \ncomplete\nremoval in 3 \u2013 5 min (longer gives poorly defined edges).
\n"}, {"fullname": "jupyterpidaq.Boards", "modulename": "jupyterpidaq.Boards", "type": "module", "doc": "This module wraps all the submodules related to communication and control of\ndata acquisition boards.
\n"}, {"fullname": "jupyterpidaq.Boards.PiGPIO", "modulename": "jupyterpidaq.Boards.PiGPIO", "type": "module", "doc": "This module contains the modules for all PiGPIO based boards.
\n"}, {"fullname": "jupyterpidaq.Boards.PiGPIO.ADS1115", "modulename": "jupyterpidaq.Boards.PiGPIO.ADS1115", "type": "module", "doc": "\n"}, {"fullname": "jupyterpidaq.Boards.PiGPIO.ADS1115.find_boards", "modulename": "jupyterpidaq.Boards.PiGPIO.ADS1115", "qualname": "find_boards", "type": "function", "doc": "A routine like this must be implemented by all board packages.
\n\nReturns
\n\n\n list of ADS1115 board objects (maximum of 4 boards)
\n
\n", "signature": "()", "funcdef": "def"}, {"fullname": "jupyterpidaq.Boards.PiGPIO.ADS1115.Board_ADS1115", "modulename": "jupyterpidaq.Boards.PiGPIO.ADS1115", "qualname": "Board_ADS1115", "type": "class", "doc": "Class defining the properties of Adafruit compatible ADS1115\nanalog-to-digital boards for Raspberry-Pi style GPIO. Key characteristics:
\n\n\n- 4 channels (0 - 3) with 16 bit resolution and a range of +/- 3.3 V
\n- Programmable gain on each channel of 2/3, 1, 2, 4, 8, 16 making these\ngood for small signals.
\n- a differential mode is available but not implemented in this class.
\n
\n", "bases": "jupyterpidaq.Boards.boards.Board"}, {"fullname": "jupyterpidaq.Boards.PiGPIO.ADS1115.Board_ADS1115.__init__", "modulename": "jupyterpidaq.Boards.PiGPIO.ADS1115", "qualname": "Board_ADS1115.__init__", "type": "function", "doc": "Should be overridden by each board and define at minimum:\nself.name = 'board name/adc name/type' Short an useful to end user\nself.vendor = 'Vendor/Manufacturer name`\nself.channels = tuple of available channel IDs\nself.gains = list of gains\nself.Vdd = voltage provided by board to sensors
\n", "signature": "(self, adc)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Boards.PiGPIO.ADS1115.Board_ADS1115.getsensors", "modulename": "jupyterpidaq.Boards.PiGPIO.ADS1115", "qualname": "Board_ADS1115.getsensors", "type": "function", "doc": "Return a list of valid sensor object names for this board.
\n\nReturns
\n\n\n list of classnames
\n
\n", "signature": "(self)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Boards.PiGPIO.ADS1115.Board_ADS1115.V_oversampchan", "modulename": "jupyterpidaq.Boards.PiGPIO.ADS1115", "qualname": "Board_ADS1115.V_oversampchan", "type": "function", "doc": "This routine returns the average voltage for the channel\naveraged at (0.0012 + 1/data_rate)^-1 Hz for avg_sec\nnumber of seconds. The 0.0012 is the required loop time\non a RPI 3B+ in python.
\n\nReturns a tuple of the following 5 objects:\n V_avg -- float, the averaged voltage
\n\nV_min -- float, the minimum voltage read during\nthe interval\n\nV_max -- float, the maximum voltage read during the\ninterval\n\ntime_stamp -- float, the time at halfway through the averaging\ninterval in seconds since the beginning of the epoch (OS\ndependent begin time)\n\nself.Vdd -- float, the reference voltage.\n
\n\nParameters
\n\n\nint chan: the channel number (0, 1, 2, 3)
\ngain: 2/3 (+/-6.144V), 1(+/-4.096V), 2(+/-2.048V),\n4(+/-1.024V), 8 (+/-0.512V), 16 (+/-0.256V))
\nint data_rate: the ADC sample rate in Hz (8, 16, 32, 64,\n128,250, 475 or 860 Hz). Set to 475 Hz by default.
\nfloat avg_sec: seconds to average for, actual\naveraging interval will be as close as possible for an integer\nnumber of samples
\n
\n\n:returns: V_avg, V_min, V_max, time_stamp, self.Vdd
\n\nReturns
\n\n\n description
\n
\n\nReturns
\n\n\n \n
\n\nReturns
\n\n\n \n
\n\nReturns
\n\n\n \n
\n\nReturns
\n", "signature": "(self, chan, gain, avg_sec, data_rate=475)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Boards.PiGPIO.ADS1115.Board_ADS1115.V_oversampchan_stats", "modulename": "jupyterpidaq.Boards.PiGPIO.ADS1115", "qualname": "Board_ADS1115.V_oversampchan_stats", "type": "function", "doc": "This routine returns the average voltage for the channel\naveraged at (0.0012 + 1/data_rate)^-1 Hz for avg_sec\nnumber of seconds. The 0.0012 is the required loop time\non a RPI 3B+ in python3. The standard\ndeviation and the estimated deviation of the mean are also\nreturned.
\n\nReturns a tuple of the following 5 objects:\n V_avg -- float, the averaged voltage
\n\nstdev -- float, the standard deviation of the measured values\nduring the averaging interval\n\nstdev_avg -- float, the estimated standard deviation of the\nreturned average\n\ntime_stamp -- float, the time at halfway through the averaging\ninterval in seconds since the beginning of the epoch (OS\ndependent begin time)\n\nself.Vdd -- float, the reference voltage.\n
\n\nParameters
\n\n\nint chan: the channel number (0, 1, 2, 3)
\ngain: 2/3 (+/-6.144V), 1(+/-4.096V), 2(+/-2.048V),\n4(+/-1.024V), 8 (+/-0.512V), 16 (+/-0.256V))
\nint data_rate: the ADC sample rate in Hz (8, 16, 32, 64,\n128,250, 475 or 860 Hz). Set to 475 Hz by default.
\nfloat avg_sec: seconds to average for, actual\naveraging interval will be as close as possible for an integer\nnumber of samples
\n
\n\n:returns: VV_avg, stdev, stdev_avg, time_stamp, self.Vdd
\n\nReturns
\n\n\n description
\n
\n\nReturns
\n\n\n \n
\n\nReturns
\n\n\n \n
\n\nReturns
\n\n\n \n
\n\nReturns
\n", "signature": "(self, chan, gain, avg_sec, data_rate=475)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Boards.PiGPIO.ADS1115.Board_ADS1115.V_sampchan", "modulename": "jupyterpidaq.Boards.PiGPIO.ADS1115", "qualname": "Board_ADS1115.V_sampchan", "type": "function", "doc": "This routine returns the voltage for the
\n\nReturns a tuple of the following 3 objects:\n V -- float, the measured voltage
\n\ntime_stamp -- float, the time at halfway through the averaging\ninterval in seconds since the beginning of the epoch (OS\ndependent begin time)\n\nself.Vdd -- float, the reference voltage.\n
\n\nParameters
\n\n\nint chan: the channel number (0, 1, 2, 3)
\ngain: 2/3 (+/-6.144V), 1(+/-4.096V), 2(+/-2.048V),\n4(+/-1.024V), 8 (+/-0.512V), 16 (+/-0.256V))
\nint data_rate: the ADC sample rate in Hz (8, 16, 32, 64,\n128,250, 475 or 860 Hz). Set to 475 Hz by default.
\n
\n\n:returns: V, time_stamp, self.Vdd
\n\nReturns
\n\n\n \n
\n\nReturns
\n\n\n \n
\n\nReturns
\n", "signature": "(self, chan, gain, data_rate=475)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Boards.PiGPIO.DAQC2", "modulename": "jupyterpidaq.Boards.PiGPIO.DAQC2", "type": "module", "doc": "\n"}, {"fullname": "jupyterpidaq.Boards.PiGPIO.DAQC2.find_boards", "modulename": "jupyterpidaq.Boards.PiGPIO.DAQC2", "qualname": "find_boards", "type": "function", "doc": "A rountine like this must be implemented by all board packages.
\n\nReturns
\n\n\n list of DAQC2 board objects (maximum of 8 boards)
\n
\n", "signature": "()", "funcdef": "def"}, {"fullname": "jupyterpidaq.Boards.PiGPIO.DAQC2.Board_DAQC2", "modulename": "jupyterpidaq.Boards.PiGPIO.DAQC2", "qualname": "Board_DAQC2", "type": "class", "doc": "Class defining the properties of the analog-to-digital block of the\npi-Plates DAQC2 board. Key characteristics:
\n\n\n- 8 channels (0 - 7) with pseudo 16 bit resolution (oversampled 14 bit) and\na range of +/- 12 V.
\n- 1 channel (8) dedicated to monitoring Vdd.
\n- Programmable RGB LED to use as indicator.
\n- Other available facilities are Digital I/O, Digital-to-Analog and\n2-channel o-scope modes. These are not supported by this class.
\n
\n", "bases": "jupyterpidaq.Boards.boards.Board"}, {"fullname": "jupyterpidaq.Boards.PiGPIO.DAQC2.Board_DAQC2.__init__", "modulename": "jupyterpidaq.Boards.PiGPIO.DAQC2", "qualname": "Board_DAQC2.__init__", "type": "function", "doc": "Should be overridden by each board and define at minimum:\nself.name = 'board name/adc name/type' Short an useful to end user\nself.vendor = 'Vendor/Manufacturer name`\nself.channels = tuple of available channel IDs\nself.gains = list of gains\nself.Vdd = voltage provided by board to sensors
\n", "signature": "(self, addr)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Boards.PiGPIO.DAQC2.Board_DAQC2.getsensors", "modulename": "jupyterpidaq.Boards.PiGPIO.DAQC2", "qualname": "Board_DAQC2.getsensors", "type": "function", "doc": "Return a list of valid sensor object names for this board.
\n\nReturns
\n\n\n list of classnames
\n
\n", "signature": "(self)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Boards.PiGPIO.DAQC2.Board_DAQC2.V_oversampchan", "modulename": "jupyterpidaq.Boards.PiGPIO.DAQC2", "qualname": "Board_DAQC2.V_oversampchan", "type": "function", "doc": "This routine returns the average voltage for the channel\naveraged at the default rate for the board and returns an\naverage and observed range.
\n\nReturns a tuple of the following 5 objects:\n V_avg -- float, the averaged voltage
\n\nV_min -- float, the minimum voltage read during\nthe interval\n\nV_max -- float, the maximum voltage read during the\ninterval\n\ntime_stamp -- float, the time at halfway through the averaging\ninterval in seconds since the beginning of the epoch (OS\ndependent begin time)\n\nVdd_avg -- float, the reference voltage (Vdd) collected\nsimultaneously.\n
\n\nParameters
\n\n\nint chan: the channel number (0, 1, 2, 3, 4, 5, 6, 7,\n8). NOTE: channel 8 returns a measurement of Vdd.
\ngain: ignored by board. Defaults to 1.
\nint data_rate: ignored by board.
\nfloat avg_sec: seconds to average for, actual\naveraging interval will be as close as possible for an integer\nnumber of samples
\n
\n\n:returns: V_avg, V_min, V_max, time_stamp, Vdd_avg
\n\nReturns
\n\n\n description
\n
\n\nReturns
\n\n\n \n
\n\nReturns
\n\n\n \n
\n\nReturns
\n\n\n \n
\n\nReturns
\n", "signature": "(self, chan, gain, avg_sec, data_rate=475)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Boards.PiGPIO.DAQC2.Board_DAQC2.V_oversampchan_stats", "modulename": "jupyterpidaq.Boards.PiGPIO.DAQC2", "qualname": "Board_DAQC2.V_oversampchan_stats", "type": "function", "doc": "This routine returns the average voltage for the channel\naveraged at the maximum rate for the board. The standard\ndeviation and the estimated deviation of the mean are also\nreturned.
\n\nReturns a tuple of the following 5 objects:\n V_avg -- float, the averaged voltage
\n\nstdev -- float, the standard deviation of the measured values\nduring the averaging interval\n\nstdev_avg -- float, the estimated standard deviation of the\nreturned average\n\ntime_stamp -- float, the time at halfway through the averaging\ninterval in seconds since the beginning of the epoch (OS\ndependent begin time)\n\nVdd_avg -- float, the reference voltage (Vdd) collected\nsimultaneously.\n
\n\nParameters
\n\n\nint chan: the channel number (0, 1, 2, 3, 4, 5, 6, 7,\n8). NOTE: channel 8 returns a measurement of Vdd.
\ngain: ignored by board. Defaults to 1.
\nint data_rate: ignored by board.
\nfloat avg_sec: seconds to average for, actual\naveraging interval will be as close as possible for an integer\nnumber of samples
\n
\n\n:returns: V_avg, stdev, stdev_avg, time_stamp, Vdd_avg
\n\nReturns
\n\n\n description
\n
\n\nReturns
\n\n\n \n
\n\nReturns
\n\n\n \n
\n\nReturns
\n\n\n \n
\n\nReturns
\n", "signature": "(self, chan, gain, avg_sec, data_rate=475)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Boards.PiGPIO.DAQC2.Board_DAQC2.V_sampchan", "modulename": "jupyterpidaq.Boards.PiGPIO.DAQC2", "qualname": "Board_DAQC2.V_sampchan", "type": "function", "doc": "This routine returns a single reading of the voltage for the channel.
\n\nReturns a tuple of the following 5 objects:\n V -- float, the measured voltage
\n\ntime_stamp -- float, the time of the measurement in seconds since\nthe beginning of the epoch (OS dependent begin time)\n\nref -- float, the reference voltage (Vdd) collected\nsimultaneously.\n
\n\nParameters
\n\n\nint chan: the channel number (0, 1, 2, 3, 4, 5, 6, 7,\n8). NOTE: channel 8 returns a measurement of Vdd.
\ngain: ignored by board. Defaults to 1.
\nint data_rate: ignored by board.
\n
\n\n:returns: V_avg, stdev, stdev_avg, time_stamp, Vdd_avg
\n\nReturns
\n\n\n \n
\n\nReturns
\n\n\n \n
\n\nReturns
\n", "signature": "(self, chan, gain, data_rate=475)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Boards.Simulated", "modulename": "jupyterpidaq.Boards.Simulated", "type": "module", "doc": "This module wraps modules for simulated boards.
\n"}, {"fullname": "jupyterpidaq.Boards.Simulated.ADCsim", "modulename": "jupyterpidaq.Boards.Simulated.ADCsim", "type": "module", "doc": "\n"}, {"fullname": "jupyterpidaq.Boards.Simulated.ADCsim.find_boards", "modulename": "jupyterpidaq.Boards.Simulated.ADCsim", "qualname": "find_boards", "type": "function", "doc": "\n", "signature": "()", "funcdef": "def"}, {"fullname": "jupyterpidaq.Boards.Simulated.ADCsim.Board_ADCsim_random", "modulename": "jupyterpidaq.Boards.Simulated.ADCsim", "qualname": "Board_ADCsim_random", "type": "class", "doc": "Base class for all boards. Each board should be an extension of this class.
\n", "bases": "jupyterpidaq.Boards.boards.Board"}, {"fullname": "jupyterpidaq.Boards.Simulated.ADCsim.Board_ADCsim_random.__init__", "modulename": "jupyterpidaq.Boards.Simulated.ADCsim", "qualname": "Board_ADCsim_random.__init__", "type": "function", "doc": "Should be overridden by each board and define at minimum:\nself.name = 'board name/adc name/type' Short an useful to end user\nself.vendor = 'Vendor/Manufacturer name`\nself.channels = tuple of available channel IDs\nself.gains = list of gains\nself.Vdd = voltage provided by board to sensors
\n", "signature": "(self, adc)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Boards.Simulated.ADCsim.Board_ADCsim_random.getsensors", "modulename": "jupyterpidaq.Boards.Simulated.ADCsim", "qualname": "Board_ADCsim_random.getsensors", "type": "function", "doc": "Return a list of valid sensor object names for this board.
\n\nReturns
\n\n\n list of classnames
\n
\n", "signature": "(self)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Boards.Simulated.ADCsim.Board_ADCsim_random.V_oversampchan_stats", "modulename": "jupyterpidaq.Boards.Simulated.ADCsim", "qualname": "Board_ADCsim_random.V_oversampchan_stats", "type": "function", "doc": "This routine returns the average voltage for the channel\naveraged at (0.0012 + 1/data_rate)^-1 Hz for avg_sec\nnumber of seconds. The 0.0012 is the required loop time\non a RPI 3B+ in python3. The voltage is rounded to the number\nof decimals indicated by the standard deviation. The standard\ndeviation and the estimated deviation of the mean are also\nreturned.\nParameters\n chan the channel number 0, 1, 2, 3\n gain 2/3 (+/-6.144V), 1(+/-4.096V), 2(+/-2.048V), 4(+/-1.024V),\n 8 (+/-0.512V), 16 (+/-0.256V)\n data_rate the ADC sample rate in Hz (8, 16, 32, 64, 128, 250, 475 or 860 Hz)\n avg_sec seconds to average for, actual averaging interval will be as close\n as possible for an integer number of samples.\nReturns a tuple (V_avg, V_min, V_max, time_stamp)\n V_avg the averaged voltage\n stdev estimated standard deviation of the measurements\n stdev_avg estimated standard deviation of the mean\n time_stamp the time at halfway through the averaging interval in seconds\n since the beginning of the epoch (OS dependent begin time).
\n", "signature": "(self, chan, gain, avg_sec, data_rate=475)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Boards.Simulated.ADCsim.Board_ADCsim_random.V_oversampchan", "modulename": "jupyterpidaq.Boards.Simulated.ADCsim", "qualname": "Board_ADCsim_random.V_oversampchan", "type": "function", "doc": "This routine returns the average voltage for the channel\naveraged at (0.0012 + 1/data_rate)^-1 Hz for avg_sec\nnumber of seconds. The 0.0012 is the required loop time\non a RPI 3B+ in python3. The voltage is rounded to the number\nof decimals indicated by the standard deviation. The standard\ndeviation and the estimated deviation of the mean are also\nreturned.\nParameters\n chan the channel number 0, 1, 2, 3\n gain 2/3 (+/-6.144V), 1(+/-4.096V), 2(+/-2.048V), 4(+/-1.024V),\n 8 (+/-0.512V), 16 (+/-0.256V)\n data_rate the ADC sample rate in Hz (8, 16, 32, 64, 128, 250, 475 or 860 Hz)\n avg_sec seconds to average for, actual averaging interval will be as close\n as possible for an integer number of samples.\nReturns a tuple (V_avg, V_min, V_max, time_stamp)\n V_avg the averaged voltage\n stdev estimated standard deviation of the measurements\n stdev_avg estimated standard deviation of the mean\n time_stamp the time at halfway through the averaging interval in seconds\n since the beginning of the epoch (OS dependent begin time).
\n", "signature": "(self, chan, gain, avg_sec, data_rate=475)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Boards.Simulated.ADCsim.Board_ADCsim_random.V_sampchan", "modulename": "jupyterpidaq.Boards.Simulated.ADCsim", "qualname": "Board_ADCsim_random.V_sampchan", "type": "function", "doc": "This function returns a single measurement and the time it was\ncollected.
\n\nParameters
\n\n\n- chan: id of the channel to be measured
\n- gain: gain of the channel if adjustable
\n
\n\nReturns
\n\n\n a tuple consisting of V, time_stamp, where V = the single\n voltage measurement and time_stamp the time it was collected.
\n
\n", "signature": "(self, chan, gain, **kwargs)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Boards.Simulated.ADCsim_line", "modulename": "jupyterpidaq.Boards.Simulated.ADCsim_line", "type": "module", "doc": "\n"}, {"fullname": "jupyterpidaq.Boards.Simulated.ADCsim_line.find_boards", "modulename": "jupyterpidaq.Boards.Simulated.ADCsim_line", "qualname": "find_boards", "type": "function", "doc": "\n", "signature": "()", "funcdef": "def"}, {"fullname": "jupyterpidaq.Boards.Simulated.ADCsim_line.Board_ADCsim_line", "modulename": "jupyterpidaq.Boards.Simulated.ADCsim_line", "qualname": "Board_ADCsim_line", "type": "class", "doc": "This class simulates an Analog-to-Digital board that returns a linearly\nincreasing signal with a small amount of noise on the signal. The\nintercept and slope depend upon which hour of the day the simulation is\nrun.
\n", "bases": "jupyterpidaq.Boards.boards.Board"}, {"fullname": "jupyterpidaq.Boards.Simulated.ADCsim_line.Board_ADCsim_line.__init__", "modulename": "jupyterpidaq.Boards.Simulated.ADCsim_line", "qualname": "Board_ADCsim_line.__init__", "type": "function", "doc": "Should be overridden by each board and define at minimum:\nself.name = 'board name/adc name/type' Short an useful to end user\nself.vendor = 'Vendor/Manufacturer name`\nself.channels = tuple of available channel IDs\nself.gains = list of gains\nself.Vdd = voltage provided by board to sensors
\n", "signature": "(self, adc)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Boards.Simulated.ADCsim_line.Board_ADCsim_line.getsensors", "modulename": "jupyterpidaq.Boards.Simulated.ADCsim_line", "qualname": "Board_ADCsim_line.getsensors", "type": "function", "doc": "Return a list of valid sensor object names for this board.
\n\nReturns
\n\n\n list of classnames
\n
\n", "signature": "(self)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Boards.Simulated.ADCsim_line.Board_ADCsim_line.V_oversampchan", "modulename": "jupyterpidaq.Boards.Simulated.ADCsim_line", "qualname": "Board_ADCsim_line.V_oversampchan", "type": "function", "doc": "This routine returns the average voltage for the channel\naveraged at (0.0012 + 1/data_rate)^-1 Hz for avg_sec\nnumber of seconds. The 0.0012 is the required loop time\non a RPI 3B+ in python3. The voltage is rounded to the number\nof decimals indicated by the standard deviation. The standard\ndeviation and the estimated deviation of the mean are also\nreturned.\nParameters\n chan the channel number 0, 1, 2, 3\n gain 2/3 (+/-6.144V), 1(+/-4.096V), 2(+/-2.048V), 4(+/-1.024V),\n 8 (+/-0.512V), 16 (+/-0.256V)\n data_rate the ADC sample rate in Hz (8, 16, 32, 64, 128, 250, 475\n or 860 Hz)\n avg_sec seconds to average for, actual averaging interval will be\n as close as possible for an integer number of samples.\nReturns a tuple (V_avg, V_min, V_max, time_stamp)\n V_avg the averaged voltage\n stdev estimated standard deviation of the measurements\n stdev_avg estimated standard deviation of the mean\n time_stamp the time at halfway through the averaging interval in\n seconds since the beginning of the epoch (OS dependent begin\n time).
\n", "signature": "(self, chan, gain, avg_sec, data_rate=475)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Boards.Simulated.ADCsim_line.Board_ADCsim_line.V_oversampchan_stats", "modulename": "jupyterpidaq.Boards.Simulated.ADCsim_line", "qualname": "Board_ADCsim_line.V_oversampchan_stats", "type": "function", "doc": "This routine returns the average voltage for the channel\naveraged at (0.0012 + 1/data_rate)^-1 Hz for avg_sec\nnumber of seconds. The 0.0012 is the required loop time\non a RPI 3B+ in python3. The voltage is rounded to the number\nof decimals indicated by the standard deviation. The standard\ndeviation and the estimated deviation of the mean are also\nreturned.\nParameters\n chan the channel number 0, 1, 2, 3\n gain 2/3 (+/-6.144V), 1(+/-4.096V), 2(+/-2.048V), 4(+/-1.024V),\n 8 (+/-0.512V), 16 (+/-0.256V)\n data_rate the ADC sample rate in Hz (8, 16, 32, 64, 128, 250, 475\n or 860 Hz)\n avg_sec seconds to average for, actual averaging interval will be\n as close as possible for an integer number of samples.\nReturns a tuple (V_avg, V_min, V_max, time_stamp)\n V_avg the averaged voltage\n stdev estimated standard deviation of the measurements\n stdev_avg estimated standard deviation of the mean\n time_stamp the time at halfway through the averaging interval in\n seconds since the beginning of the epoch (OS dependent begin\n time).
\n", "signature": "(self, chan, gain, avg_sec, data_rate=475)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Boards.Simulated.ADCsim_line.Board_ADCsim_line.V_sampchan", "modulename": "jupyterpidaq.Boards.Simulated.ADCsim_line", "qualname": "Board_ADCsim_line.V_sampchan", "type": "function", "doc": "This routine returns the average voltage for the channel\naveraged at (0.0012 + 1/data_rate)^-1 Hz for avg_sec\nnumber of seconds. The 0.0012 is the required loop time\non a RPI 3B+ in python3. The voltage is rounded to the number\nof decimals indicated by the standard deviation. The standard\ndeviation and the estimated deviation of the mean are also\nreturned.\nParameters\n chan the channel number 0, 1, 2, 3\n gain 2/3 (+/-6.144V), 1(+/-4.096V), 2(+/-2.048V), 4(+/-1.024V),\n 8 (+/-0.512V), 16 (+/-0.256V)\n data_rate the ADC sample rate in Hz (8, 16, 32, 64, 128, 250, 475\n or 860 Hz) avg_sec seconds to average for, actual averaging\n interval will be as close as possible for an integer number of\n samples.\nReturns a tuple (V_avg, V_min, V_max, time_stamp)\n V_avg the averaged voltage\n stdev estimated standard deviation of the measurements\n stdev_avg estimated standard deviation of the mean\n time_stamp the time at halfway through the averaging interval in\n seconds since the beginning of the epoch (OS dependent begin\n time).
\n", "signature": "(self, chan, gain, data_rate=475)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Boards.boards", "modulename": "jupyterpidaq.Boards.boards", "type": "module", "doc": "This file handles loading adc board control software and sensor information.\nIt uses the list of known boards. It will skip boards that produce an error\neither because the pypi package is not installed or an error occurs when\ntrying to communicate with the board.
\n\nThe ADC simulator will be installed if no boards are available.
\n"}, {"fullname": "jupyterpidaq.Boards.boards.load_boards", "modulename": "jupyterpidaq.Boards.boards", "qualname": "load_boards", "type": "function", "doc": "Uses the list of known board packages to search for available boards.\nThe file .py should at minimum\nimplement a find_boards(): routine that overrides the function below and\ndefine a class for the particular board that extends the
Board` class\ndefined below.
\n\nReturns
\n\n\n list of adc board objects.
\n
\n", "signature": "()", "funcdef": "def"}, {"fullname": "jupyterpidaq.Boards.boards.find_boards", "modulename": "jupyterpidaq.Boards.boards", "qualname": "find_boards", "type": "function", "doc": "A function overriding this must be implemented by all board packages.\nSee examples in working packages. This is highly board dependent.
\n\nReturns
\n\n\n list of board objects
\n
\n", "signature": "()", "funcdef": "def"}, {"fullname": "jupyterpidaq.Boards.boards.Board", "modulename": "jupyterpidaq.Boards.boards", "qualname": "Board", "type": "class", "doc": "Base class for all boards. Each board should be an extension of this class.
\n"}, {"fullname": "jupyterpidaq.Boards.boards.Board.__init__", "modulename": "jupyterpidaq.Boards.boards", "qualname": "Board.__init__", "type": "function", "doc": "Should be overridden by each board and define at minimum:\nself.name = 'board name/adc name/type' Short an useful to end user\nself.vendor = 'Vendor/Manufacturer name`\nself.channels = tuple of available channel IDs\nself.gains = list of gains\nself.Vdd = voltage provided by board to sensors
\n", "signature": "(self)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Boards.boards.Board.getname", "modulename": "jupyterpidaq.Boards.boards", "qualname": "Board.getname", "type": "function", "doc": "Returns
\n\n\n string value of the board name, a short label of board type.
\n
\n", "signature": "(self)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Boards.boards.Board.getchannels", "modulename": "jupyterpidaq.Boards.boards", "qualname": "Board.getchannels", "type": "function", "doc": "Returns
\n\n\n tuple of ids for available channels
\n
\n", "signature": "(self)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Boards.boards.Board.getgains", "modulename": "jupyterpidaq.Boards.boards", "qualname": "Board.getgains", "type": "function", "doc": "If not defined for a specific board the gain is fixed at 1.
\n\nReturns
\n\n\n tuple of gains availabe for onboard preamp
\n
\n", "signature": "(self)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Boards.boards.Board.getvendor", "modulename": "jupyterpidaq.Boards.boards", "qualname": "Board.getvendor", "type": "function", "doc": "Returns
\n\n\n string value of the vendor name
\n
\n", "signature": "(self)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Boards.boards.Board.getVdd", "modulename": "jupyterpidaq.Boards.boards", "qualname": "Board.getVdd", "type": "function", "doc": "Returns
\n\n\n numerical value of the Vdd, voltage provided to sensors
\n
\n", "signature": "(self)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Boards.boards.Board.getsensors", "modulename": "jupyterpidaq.Boards.boards", "qualname": "Board.getsensors", "type": "function", "doc": "This returns a list of objects that allow the software to translate\nthe measured voltage into a sensor reading in appropriate units.\nMust be provided by the specific board implementation. See examples\nin working board packages.
\n\nReturns
\n\n\n A list of valid sensor objects to use with this board. This\n should be a subset of all the sensors returned by the listSensors\n function in sensors.py.
\n
\n", "signature": "(self)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Boards.boards.Board.V_oversampchan", "modulename": "jupyterpidaq.Boards.boards", "qualname": "Board.V_oversampchan", "type": "function", "doc": "This function should return a tuple with average, minimum and maximum\nfor a channel averaged over the period of time avg_sec. How the\naveraging is performed will depend on the board.
\n\nParameters
\n\n\n- chan: id of the channel to be measured
\n- gain: gain of the channel if adjustable
\n- avg_sec: float period of time over which to average
\n
\n\nReturns
\n\n\n a tuple consisting of V_avg, V_min, V_max, time_stamp, avg_Vdd\n The time_stamp is the time the data was collected, usually the\n middle of the averaging period. avg_Vdd should be the measured\n average Vdd taken simultaneously, immediately before,\n or immediately after the voltage being measured. If the board or\n power supply is very stable self.Vdd can be returned instead.
\n
\n", "signature": "(self, chan, gain, avg_sec, **kwargs)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Boards.boards.Board.V_oversampchan_stats", "modulename": "jupyterpidaq.Boards.boards", "qualname": "Board.V_oversampchan_stats", "type": "function", "doc": "This function should return a tuple of statistical information for a\nchannel averaged over the period of time avg_sec.
\n\nParameters
\n\n\n- chan: id of the channel to be measured
\n- gain: gain of the channel if adjustable
\n- avg_sec: float period of time over which to average
\n
\n\nReturns
\n\n\n tuple consisting of V_avg, stdev, stdev_avg, time_stamp,\n avg_Vdd where stdev_avg is the estimated standard deviation\n of the average not the standard deviation of the values\n sampled (stdev). avg_Vdd should be the measured\n average Vdd taken simultaneously, immediately before,\n or immediately after the voltage being measured. If the board or\n power supply is very stable self.Vdd can be returned instead.
\n
\n", "signature": "(self, chan, gain, avg_sec, **kwargs)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Boards.boards.Board.V_sampchan", "modulename": "jupyterpidaq.Boards.boards", "qualname": "Board.V_sampchan", "type": "function", "doc": "This function returns a single measurement and the time it was\ncollected.
\n\nParameters
\n\n\n- chan: id of the channel to be measured
\n- gain: gain of the channel if adjustable
\n
\n\nReturns
\n\n\n a tuple consisting of V, time_stamp, ref_Vdd, where V = the\n single voltage measurement and time_stamp the time it was\n collected. ref_Vdd should be the measured\n Vdd taken simultaneously, immediately before,\n or immediately after the voltage being measured. If the board or\n power supply is very stable self.Vdd can be returned instead.
\n
\n", "signature": "(self, chan, gain, **kwargs)", "funcdef": "def"}, {"fullname": "jupyterpidaq.ChannelSettings", "modulename": "jupyterpidaq.ChannelSettings", "type": "module", "doc": "\n"}, {"fullname": "jupyterpidaq.ChannelSettings.ChannelSettings", "modulename": "jupyterpidaq.ChannelSettings", "qualname": "ChannelSettings", "type": "class", "doc": "This class takes care of interacting with the user to get settings for data\ncollection on each channel. Should be initialized with an idno, so that\nit knows what number has been assigned to it.
\n"}, {"fullname": "jupyterpidaq.ChannelSettings.ChannelSettings.__init__", "modulename": "jupyterpidaq.ChannelSettings", "qualname": "ChannelSettings.__init__", "type": "function", "doc": "Parameters
\n\n\n- idno: int number iding this instance of ChannelSettings
\n
\n", "signature": "(self, idno, availboards)", "funcdef": "def"}, {"fullname": "jupyterpidaq.ChannelSettings.ChannelSettings.activate", "modulename": "jupyterpidaq.ChannelSettings", "qualname": "ChannelSettings.activate", "type": "function", "doc": "This function makes this channel active. No return value unless an e\nrror is thrown by something called by this function.
\n\nReturns
\n\n\n None
\n
\n", "signature": "(self)", "funcdef": "def"}, {"fullname": "jupyterpidaq.ChannelSettings.ChannelSettings.deactivate", "modulename": "jupyterpidaq.ChannelSettings", "qualname": "ChannelSettings.deactivate", "type": "function", "doc": "This function makes the channel inactive. No return value unless an\nerror is thrown by something called by this function.
\n\nReturns
\n\n\n None
\n
\n", "signature": "(self)", "funcdef": "def"}, {"fullname": "jupyterpidaq.ChannelSettings.ChannelSettings.checkchanged", "modulename": "jupyterpidaq.ChannelSettings", "qualname": "ChannelSettings.checkchanged", "type": "function", "doc": "This function is called when the checkbox changes.
\n\nParameters
\n\n\n- self:
\n- change: change object passed by the observe tool
\n
\n\nReturns
\n\n\n None
\n
\n", "signature": "(self, change)", "funcdef": "def"}, {"fullname": "jupyterpidaq.ChannelSettings.ChannelSettings.boardchanged", "modulename": "jupyterpidaq.ChannelSettings", "qualname": "ChannelSettings.boardchanged", "type": "function", "doc": "This function responds to a change in board choice.
\n\nParameters
\n\n\n- change: change object passed by the observe tool
\n
\n\nReturns
\n", "signature": "(self, change)", "funcdef": "def"}, {"fullname": "jupyterpidaq.ChannelSettings.ChannelSettings.channelchanged", "modulename": "jupyterpidaq.ChannelSettings", "qualname": "ChannelSettings.channelchanged", "type": "function", "doc": "This function responds to a change in board choice.
\n\nParameters
\n\n\n- change: change object passed by the observe tool
\n
\n\nReturns
\n", "signature": "(self, change)", "funcdef": "def"}, {"fullname": "jupyterpidaq.ChannelSettings.ChannelSettings.sensorchanged", "modulename": "jupyterpidaq.ChannelSettings", "qualname": "ChannelSettings.sensorchanged", "type": "function", "doc": "Called by the observe function of sensorchoice when the user changes\nthe sensor choice.
\n\nParameters
\n\n\n- self:
\n- change: change object passed by the observe tool
\n
\n\nReturns
\n\n\n None
\n
\n", "signature": "(self, change)", "funcdef": "def"}, {"fullname": "jupyterpidaq.ChannelSettings.ChannelSettings.unitschanged", "modulename": "jupyterpidaq.ChannelSettings", "qualname": "ChannelSettings.unitschanged", "type": "function", "doc": "Called by the observe function for the units selector when units are\nchanged
\n\nParameters
\n\n\n- self:
\n- change: change object passed by the observe tool
\n
\n\nReturns
\n", "signature": "(self, change)", "funcdef": "def"}, {"fullname": "jupyterpidaq.ChannelSettings.ChannelSettings.gainschanged", "modulename": "jupyterpidaq.ChannelSettings", "qualname": "ChannelSettings.gainschanged", "type": "function", "doc": "Called by the observe function for the gains selector when the gain is\nchanged.
\n\nParameters
\n\n\n- self:
\n- change: change object passed by the observe tool
\n
\n\nReturns
\n", "signature": "(self, change)", "funcdef": "def"}, {"fullname": "jupyterpidaq.ChannelSettings.ChannelSettings.setup", "modulename": "jupyterpidaq.ChannelSettings", "qualname": "ChannelSettings.setup", "type": "function", "doc": "Sets up the GUI and the necessary monitoring.
\n\nReturns
\n\n\n None
\n
\n", "signature": "(self)", "funcdef": "def"}, {"fullname": "jupyterpidaq.ChannelSettings.ChannelSettings.hideGUI", "modulename": "jupyterpidaq.ChannelSettings", "qualname": "ChannelSettings.hideGUI", "type": "function", "doc": "\n", "signature": "(self)", "funcdef": "def"}, {"fullname": "jupyterpidaq.DAQProc", "modulename": "jupyterpidaq.DAQProc", "type": "module", "doc": "\n"}, {"fullname": "jupyterpidaq.DAQProc.DAQProc", "modulename": "jupyterpidaq.DAQProc", "qualname": "DAQProc", "type": "function", "doc": "This function is to be run in a separate thread to asynchronously\ncommunicate with the ADC board.
\n\nParameters
\n\n\nlist whichchn: a list of dictionaries. Each dictionary is of the\nform:{'board': board_object, 'chnl': chnlID}.
\nlist gains: a list of the numerical gain for each channel.
\nfloat avgtime: the averaging time in seconds for a data point.
\nfloat timedelta: the target time between data points.
\npipe DAQconn: the connection pipe
\npipe DAQCTL: the control pipe
\n
\n\nReturns
\n\n\n Data is returned via the pipes.\n On the DAQCTL pipe this only returns 'done'\n On the DAQconn pipe a list of lists with data is returned.
\n
\n", "signature": "(whichchn, gains, avgtime, timedelta, DAQconn, DAQCTL)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Sensors", "modulename": "jupyterpidaq.Sensors", "type": "module", "doc": "This module wraps all the modules related to interpretting data from known\nsensors.
\n"}, {"fullname": "jupyterpidaq.Sensors.sensors", "modulename": "jupyterpidaq.Sensors.sensors", "type": "module", "doc": "\n"}, {"fullname": "jupyterpidaq.Sensors.sensors.to_reasonable_significant_figures", "modulename": "jupyterpidaq.Sensors.sensors", "qualname": "to_reasonable_significant_figures", "type": "function", "doc": "This function will return value rounded to a reasonable number of\nsignificant figures based on the uncertainty. If you are doing this\nbased on the standard return from the raw voltage or the sensor\ndefinitions in this file it is recommend that this be the standard\ndeviation of the average, which will often provide about one more digit\nthan the standard deviation. This will provide a guard digit for further\ncomputations.
\n\nParameters
\n\n\n- float value: the value to be rounded
\n- float uncertainty: the uncertainty.
\n
\n\n:returns float:
\n\nReturns: rounded_value a floating point number.
\n", "signature": "(value, uncertainty)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Sensors.sensors.to_reasonable_significant_figures_fast", "modulename": "jupyterpidaq.Sensors.sensors", "qualname": "to_reasonable_significant_figures_fast", "type": "function", "doc": "This function will return values rounded to a reasonable number of\nsignificant figures based on the avg_std. This function requires fewer\ncompares so is a little more efficient than calling\nto_reasonable_significant_figures(value, uncertainty) for avg, std,\navg_std separately.
\n\nParameters
\n\n\n- float avg: the average value
\n- float std: the standard deviation
\n- float avg_std: the estimated standard deviation in avg\n:returns list:
\n
\n\nReturns: list of rounded values for each [avg, std, avg_std]
\n", "signature": "(avg, std, avg_std)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Sensors.sensors.listSensors", "modulename": "jupyterpidaq.Sensors.sensors", "qualname": "listSensors", "type": "function", "doc": "Provides a list of the sensor classes provided by this file. The list must\nbe manually updated with each new class.
\n\nReturns
\n\n\n list of classnames
\n
\n", "signature": "()", "funcdef": "def"}, {"fullname": "jupyterpidaq.Sensors.sensors.RawAtoD", "modulename": "jupyterpidaq.Sensors.sensors", "qualname": "RawAtoD", "type": "class", "doc": "This is the base sensor class which all sensors should extend. See how to\ndo this properly using one of the examples below.\nThis class contains definitions for the raw AtoD return in volts. The\ndigital values are not used as the AtoD may have a builtin pre-amp,\nso a given digital value has different meanings depending upon the pre-amp\nsetting.
\n"}, {"fullname": "jupyterpidaq.Sensors.sensors.RawAtoD.__init__", "modulename": "jupyterpidaq.Sensors.sensors", "qualname": "RawAtoD.__init__", "type": "function", "doc": "This init should be called first in the init section of any class\nextending this class (e.g. super().__init__(Vdd)
). Then set\nself.name
and self.vendor
to the proper values. Append units\nspecific to the sensor to self.units
. The parameter Vdd must be\nsupplied upon initialization because the output voltage of some\nsensors depends on Vdd.
\n\nParameters
\n\n\n- float Vdd: the voltage supplied to the sensor by the A-to-D\nboard in case the sensor output depends on this.
\n
\n", "signature": "(self, Vdd)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Sensors.sensors.RawAtoD.getname", "modulename": "jupyterpidaq.Sensors.sensors", "qualname": "RawAtoD.getname", "type": "function", "doc": "Provides a string name for the sensor
\n\nReturns
\n\n\n string containing the sensor name
\n
\n", "signature": "(self)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Sensors.sensors.RawAtoD.getvendor", "modulename": "jupyterpidaq.Sensors.sensors", "qualname": "RawAtoD.getvendor", "type": "function", "doc": "Provides a string name for the sensor vendor/manufacturer
\n\nReturns
\n\n\n string containing the vendor/manufacturer name
\n
\n", "signature": "(self)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Sensors.sensors.RawAtoD.getunits", "modulename": "jupyterpidaq.Sensors.sensors", "qualname": "RawAtoD.getunits", "type": "function", "doc": "Provides the string names for the available units for this sensor.\nThese string names are also the functions within this class that\nreturn the measurement in those units.
\n\nReturns
\n\n\n units a list of strings.
\n
\n", "signature": "(self)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Sensors.sensors.RawAtoD.V", "modulename": "jupyterpidaq.Sensors.sensors", "qualname": "RawAtoD.V", "type": "function", "doc": "It is not really necessary to call this function because it just\nreturns the same values that are passed to it.\nIt is provided for consistency with the way sensors units are defined.
\n\nParameters
\n\n\n- v_avg: v_avg: average voltage from A-to-D
\n- v_std: standard deviation of the A-to-D measurements
\n- avg_std: estimate of the standard deviation of v_avg
\n- float avg_vdd: simultaneously measured average Vdd.
\n
\n\nReturns
\n\n\n [v_avg, v_std, avg_std]
\n
\n", "signature": "(self, v_avg, v_std, avg_std, avg_vdd)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Sensors.sensors.RawAtoD.mV", "modulename": "jupyterpidaq.Sensors.sensors", "qualname": "RawAtoD.mV", "type": "function", "doc": "Convert the raw AtoD voltage to mV.
\n\nParameters
\n\n\n- v_avg: v_avg: average voltage from A-to-D
\n- v_std: standard deviation of the A-to-D measurements
\n- avg_std: estimate of the standard deviation of v_avg
\n- float avg_vdd: simultaneously measured average Vdd.
\n
\n\nReturns
\n\n\n [v_avg, v_std, avg_std] converted to mV
\n
\n", "signature": "(self, v_avg, v_std, avg_std, avg_vdd)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Sensors.sensors.BuiltInThermistor", "modulename": "jupyterpidaq.Sensors.sensors", "qualname": "BuiltInThermistor", "type": "class", "doc": "This class contains the definitions for builtin thermistor.
\n", "bases": "RawAtoD"}, {"fullname": "jupyterpidaq.Sensors.sensors.BuiltInThermistor.__init__", "modulename": "jupyterpidaq.Sensors.sensors", "qualname": "BuiltInThermistor.__init__", "type": "function", "doc": "This init should be called first in the init section of any class\nextending this class (e.g. super().__init__(Vdd)
). Then set\nself.name
and self.vendor
to the proper values. Append units\nspecific to the sensor to self.units
. The parameter Vdd must be\nsupplied upon initialization because the output voltage of some\nsensors depends on Vdd.
\n\nParameters
\n\n\n- float Vdd: the voltage supplied to the sensor by the A-to-D\nboard in case the sensor output depends on this.
\n
\n", "signature": "(self, Vdd)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Sensors.sensors.BuiltInThermistor.K", "modulename": "jupyterpidaq.Sensors.sensors", "qualname": "BuiltInThermistor.K", "type": "function", "doc": "The returned values are in K. It is assumed that the distribution is\nsymmetric guassian even in K. This may not be true, but still gives\na reasonable estimate of the standard deviation.
\n\nParameters
\n\n\n- v_avg: average voltage from sensor.
\n- v_std: standard deviation of voltage from sensor.
\n- avg_std: estimated standard deviation of the avg.
\n- float avg_vdd: simultaneously measured average Vdd.
\n
\n\nReturns
\n\n\n \n
\n\nReturns: list [K_avg, K_std, K_avg_std]\n [average temperature in K,\n standard deviation of temperature in K,\n estimated standard deviation of the average temperature].
\n", "signature": "(self, v_avg, v_std, avg_std, avg_vdd)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Sensors.sensors.BuiltInThermistor.C", "modulename": "jupyterpidaq.Sensors.sensors", "qualname": "BuiltInThermistor.C", "type": "function", "doc": "The returned values are in deg C. It is assumed that the distribution\nis symmetric guassian even in deg C. This may not be true, but still\ngives a reasonable estimate of the standard deviation.
\n\nParameters
\n\n\n- v_avg: average voltage from sensor.
\n- v_std: standard deviation of voltage from sensor.
\n- avg_std: estimated standard deviation of the avg.
\n- float avg_vdd: simultaneously measured average Vdd.
\n
\n\nReturns
\n\n\n \n
\n\nReturns: list [C_avg, C_std, C_avg_std]\n [average temperature in C, standard deviation of temperature in C,\n estimated standard deviation of the average temperature].
\n", "signature": "(self, v_avg, v_std, avg_std, avg_vdd)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Sensors.sensors.BuiltInThermistor.F", "modulename": "jupyterpidaq.Sensors.sensors", "qualname": "BuiltInThermistor.F", "type": "function", "doc": "The returned values are in deg F. It is assumed that the distribution\nis symmetric guassian even in deg F. This may not be true, but still\ngives a reasonable estimate of the standard deviation.
\n\nParameters
\n\n\n- float v_avg: average voltage from sensor.
\n- float v_std: standard deviation of voltage from sensor.
\n- float avg_std: estimated standard deviation of the avg.
\n- float avg_vdd: simultaneously measured average Vdd.\n:returns list:
\n
\n\nReturns: list [F_avg, F_std, F_avg_std]\n [average temperature in F, standard deviation of temperature in F,\n estimated standard deviation of the average temperature].
\n", "signature": "(self, v_avg, v_std, avg_std, avg_vdd)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Sensors.sensors.VernierSSTemp", "modulename": "jupyterpidaq.Sensors.sensors", "qualname": "VernierSSTemp", "type": "class", "doc": "This class contains the definitions for Vernier Stainless Steel Temperature\nProbe. A 20K thermistor.
\n", "bases": "RawAtoD"}, {"fullname": "jupyterpidaq.Sensors.sensors.VernierSSTemp.__init__", "modulename": "jupyterpidaq.Sensors.sensors", "qualname": "VernierSSTemp.__init__", "type": "function", "doc": "This init should be called first in the init section of any class\nextending this class (e.g. super().__init__(Vdd)
). Then set\nself.name
and self.vendor
to the proper values. Append units\nspecific to the sensor to self.units
. The parameter Vdd must be\nsupplied upon initialization because the output voltage of some\nsensors depends on Vdd.
\n\nParameters
\n\n\n- float Vdd: the voltage supplied to the sensor by the A-to-D\nboard in case the sensor output depends on this.
\n
\n", "signature": "(self, Vdd)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Sensors.sensors.VernierSSTemp.K", "modulename": "jupyterpidaq.Sensors.sensors", "qualname": "VernierSSTemp.K", "type": "function", "doc": "The returned values are in K. It is assumed that the distribution is\nsymmetric guassian even in K. This may not be true, but still gives\na reasonable estimate of the standard deviation.
\n\nParameters
\n\n\n- float v_avg: average voltage from sensor.
\n- float v_std: standard deviation of voltage from sensor.
\n- float avg_std: estimated standard deviation of the avg.
\n- float avg_vdd: simultaneously measured average Vdd.\n:returns list:
\n
\n\nReturns list [K_avg, K_std, K_avg_std]\n [average temperature in K, standard deviation of temperature in K,\n estimated standard deviation of the average temperature].
\n", "signature": "(self, v_avg, v_std, avg_std, avg_vdd)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Sensors.sensors.VernierSSTemp.C", "modulename": "jupyterpidaq.Sensors.sensors", "qualname": "VernierSSTemp.C", "type": "function", "doc": "The returned values are in deg C. It is assumed that the distribution\nis symmetric guassian even in deg C. This may not be true, but still\ngives a reasonable estimate of the standard deviation.
\n\nParameters
\n\n\n- float v_avg: average voltage from sensor.
\n- float v_std: standard deviation of voltage from sensor.
\n- float avg_std: estimated standard deviation of the avg.
\n- float avg_vdd: simultaneously measured average Vdd.
\n
\n\nReturns
\n\n\n \n
\n\nReturns: C_avg, C_std, C_avg_std\n average temperature in C, standard deviation of temperature in C,\n estimated standard deviation of the average temperature.
\n", "signature": "(self, v_avg, v_std, avg_std, avg_vdd)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Sensors.sensors.VernierSSTemp.F", "modulename": "jupyterpidaq.Sensors.sensors", "qualname": "VernierSSTemp.F", "type": "function", "doc": "The returned values are in deg F. It is assumed that the\ndistribution is symmetric guassian even in deg F. This may not be\ntrue, but still gives a reasonable estimate of the standard\ndeviation.
\n\nParameters
\n\n\n- float v_avg: average voltage from sensor.
\n- float v_std: standard deviation of voltage from sensor.
\n- float avg_std: estimated standard deviation of the avg.
\n- float avg_vdd: simultaneously measured average Vdd.
\n
\n\nReturns
\n\n\n \n
\n\nReturns: F_avg, F_std, F_avg_std\n average temperature in F, standard deviation of\n temperature in F, estimated standard deviation of the average\n temperature.
\n", "signature": "(self, v_avg, v_std, avg_std, avg_vdd)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Sensors.sensors.VernierGasP", "modulename": "jupyterpidaq.Sensors.sensors", "qualname": "VernierGasP", "type": "class", "doc": "This class contains the definitions for Vernier absolute gas pressure\nsensor, GPS-BTA (post 2011 manufacture).
\n", "bases": "RawAtoD"}, {"fullname": "jupyterpidaq.Sensors.sensors.VernierGasP.__init__", "modulename": "jupyterpidaq.Sensors.sensors", "qualname": "VernierGasP.__init__", "type": "function", "doc": "This init should be called first in the init section of any class\nextending this class (e.g. super().__init__(Vdd)
). Then set\nself.name
and self.vendor
to the proper values. Append units\nspecific to the sensor to self.units
. The parameter Vdd must be\nsupplied upon initialization because the output voltage of some\nsensors depends on Vdd.
\n\nParameters
\n\n\n- float Vdd: the voltage supplied to the sensor by the A-to-D\nboard in case the sensor output depends on this.
\n
\n", "signature": "(self, Vdd)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Sensors.sensors.VernierGasP.Pa", "modulename": "jupyterpidaq.Sensors.sensors", "qualname": "VernierGasP.Pa", "type": "function", "doc": "Parameters
\n\n\n- float v_avg: average raw voltage
\n- float v_std: standard deviation of the raw voltage
\n- float avg_std: estimated standard deviation of v_avg
\n- float avg_vdd: the Vdd measured simultaneously with v_avg (not\nused)
\n
\n\nReturns
\n\n\n \n
\n\nReturns: P_avg, P_std, P_avg_std all in Pascals
\n", "signature": "(self, v_avg, v_std, avg_std, avg_vdd)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Sensors.sensors.VernierGasP.kPa", "modulename": "jupyterpidaq.Sensors.sensors", "qualname": "VernierGasP.kPa", "type": "function", "doc": "Parameters
\n\n\n- float v_avg: average raw voltage
\n- float v_std: standard deviation of the raw voltage
\n- float avg_std: estimated standard deviation of v_avg
\n- float avg_vdd: the Vdd measured simultaneously with v_avg (not\nused)
\n
\n\nReturns
\n\n\n \n
\n\nReturns: P_avg, P_std, P_avg_std all in kiloPascals
\n", "signature": "(self, v_avg, v_std, avg_std, avg_vdd)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Sensors.sensors.VernierGasP.Bar", "modulename": "jupyterpidaq.Sensors.sensors", "qualname": "VernierGasP.Bar", "type": "function", "doc": "Parameters
\n\n\n- float v_avg: average raw voltage
\n- float v_std: standard deviation of the raw voltage
\n- float avg_std: estimated standard deviation of v_avg
\n- float avg_vdd: the Vdd measured simultaneously with v_avg (not\nused)
\n
\n\nReturns
\n\n\n \n
\n\nReturns: P_avg, P_std, P_avg_std all in Bars
\n", "signature": "(self, v_avg, v_std, avg_std, avg_vdd)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Sensors.sensors.VernierGasP.Torr", "modulename": "jupyterpidaq.Sensors.sensors", "qualname": "VernierGasP.Torr", "type": "function", "doc": "Parameters
\n\n\n- float v_avg: average raw voltage
\n- float v_std: standard deviation of the voltage measurements
\n- float avg_std: estimate of the standard deviation of the average
\n- float avg_vdd: the Vdd measured simultaneously with v_avg (\nnot used)
\n
\n\nReturns
\n\n\n \n
\n\nReturns: P_avg, P_std, P_avg_std all in Torr
\n", "signature": "(self, v_avg, v_std, avg_std, avg_vdd)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Sensors.sensors.VernierGasP.mmHg", "modulename": "jupyterpidaq.Sensors.sensors", "qualname": "VernierGasP.mmHg", "type": "function", "doc": "Parameters
\n\n\n- float v_avg: average raw voltage
\n- float v_std: standard deviation of the voltage measurements
\n- float avg_std: estimate of the standard deviation of the average
\n- float avg_vdd: the Vdd measured simultaneously with v_avg (\nnot used)
\n
\n\nReturns
\n\n\n \n
\n\nReturns: P_avg, P_std, P_avg_std all in mmHg
\n", "signature": "(self, v_avg, v_std, avg_std, avg_vdd)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Sensors.sensors.VernierGasP.atm", "modulename": "jupyterpidaq.Sensors.sensors", "qualname": "VernierGasP.atm", "type": "function", "doc": "Parameters
\n\n\n- float v_avg: average raw voltage
\n- float v_std: standard deviation of the voltage measurements
\n- float avg_std: estimate of the standard deviation of the average
\n- float avg_vdd: the Vdd measured simultaneously with v_avg (\nnot used)
\n
\n\nReturns
\n\n\n \n
\n\nReturns: P_avg, P_std, P_avg_std all in atm
\n", "signature": "(self, v_avg, v_std, avg_std, avg_vdd)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Sensors.sensors.VernierGasP_OLD", "modulename": "jupyterpidaq.Sensors.sensors", "qualname": "VernierGasP_OLD", "type": "class", "doc": "This class contains the definitions for Vernier absolute gas pressure\nsensor, GPS-BTA (pre 2011 manufacture. Label does not depict a caliper\nwith the registered trademark symbol).
\n", "bases": "RawAtoD"}, {"fullname": "jupyterpidaq.Sensors.sensors.VernierGasP_OLD.__init__", "modulename": "jupyterpidaq.Sensors.sensors", "qualname": "VernierGasP_OLD.__init__", "type": "function", "doc": "This init should be called first in the init section of any class\nextending this class (e.g. super().__init__(Vdd)
). Then set\nself.name
and self.vendor
to the proper values. Append units\nspecific to the sensor to self.units
. The parameter Vdd must be\nsupplied upon initialization because the output voltage of some\nsensors depends on Vdd.
\n\nParameters
\n\n\n- float Vdd: the voltage supplied to the sensor by the A-to-D\nboard in case the sensor output depends on this.
\n
\n", "signature": "(self, Vdd)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Sensors.sensors.VernierGasP_OLD.Pa", "modulename": "jupyterpidaq.Sensors.sensors", "qualname": "VernierGasP_OLD.Pa", "type": "function", "doc": "Parameters
\n\n\n- float v_avg: average raw voltage
\n- float v_std: standard deviation of the raw voltage
\n- float avg_std: estimated standard deviation of v_avg
\n- float avg_vdd: the Vdd measured simultaneously with v_avg (not\nused)
\n
\n\nReturns
\n\n\n \n
\n\nReturns: P_avg, P_std, P_avg_std all in Pascals
\n", "signature": "(self, v_avg, v_std, avg_std, avg_vdd)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Sensors.sensors.VernierGasP_OLD.kPa", "modulename": "jupyterpidaq.Sensors.sensors", "qualname": "VernierGasP_OLD.kPa", "type": "function", "doc": "Parameters
\n\n\n- float v_avg: average raw voltage
\n- float v_std: standard deviation of the raw voltage
\n- float avg_std: estimated standard deviation of v_avg
\n- float avg_vdd: the Vdd measured simultaneously with v_avg (not\nused)
\n
\n\nReturns
\n\n\n \n
\n\nReturns: P_avg, P_std, P_avg_std all in kiloPascals
\n", "signature": "(self, v_avg, v_std, avg_std, avg_vdd)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Sensors.sensors.VernierGasP_OLD.Bar", "modulename": "jupyterpidaq.Sensors.sensors", "qualname": "VernierGasP_OLD.Bar", "type": "function", "doc": "Parameters
\n\n\n- float v_avg: average raw voltage
\n- float v_std: standard deviation of the raw voltage
\n- float avg_std: estimated standard deviation of v_avg
\n- float avg_vdd: the Vdd measured simultaneously with v_avg (not\nused)
\n
\n\nReturns
\n\n\n \n
\n\nReturns: P_avg, P_std, P_avg_std all in Bars
\n", "signature": "(self, v_avg, v_std, avg_std, avg_vdd)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Sensors.sensors.VernierGasP_OLD.Torr", "modulename": "jupyterpidaq.Sensors.sensors", "qualname": "VernierGasP_OLD.Torr", "type": "function", "doc": "Parameters
\n\n\n- float v_avg: average raw voltage
\n- float v_std: standard deviation of the voltage measurements
\n- float avg_std: estimate of the standard deviation of the average
\n- float avg_vdd: the Vdd measured simultaneously with v_avg (\nnot used)
\n
\n\nReturns
\n\n\n \n
\n\nReturns: P_avg, P_std, P_avg_std all in Torr
\n", "signature": "(self, v_avg, v_std, avg_std, avg_vdd)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Sensors.sensors.VernierGasP_OLD.mmHg", "modulename": "jupyterpidaq.Sensors.sensors", "qualname": "VernierGasP_OLD.mmHg", "type": "function", "doc": "Parameters
\n\n\n- float v_avg: average raw voltage
\n- float v_std: standard deviation of the voltage measurements
\n- float avg_std: estimate of the standard deviation of the average
\n- float avg_vdd: the Vdd measured simultaneously with v_avg (\nnot used)
\n
\n\nReturns
\n\n\n \n
\n\nReturns: P_avg, P_std, P_avg_std all in mmHg
\n", "signature": "(self, v_avg, v_std, avg_std, avg_vdd)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Sensors.sensors.VernierGasP_OLD.atm", "modulename": "jupyterpidaq.Sensors.sensors", "qualname": "VernierGasP_OLD.atm", "type": "function", "doc": "Parameters
\n\n\n- float v_avg: average raw voltage
\n- float v_std: standard deviation of the voltage measurements
\n- float avg_std: estimate of the standard deviation of the average
\n- float avg_vdd: the Vdd measured simultaneously with v_avg (\nnot used)
\n
\n\nReturns
\n\n\n \n
\n\nReturns: P_avg, P_std, P_avg_std all in atm
\n", "signature": "(self, v_avg, v_std, avg_std, avg_vdd)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Sensors.sensors.VernierpH", "modulename": "jupyterpidaq.Sensors.sensors", "qualname": "VernierpH", "type": "class", "doc": "This class contains the definitions for Vernier standard pH\nsensor, PH-BTA.
\n", "bases": "RawAtoD"}, {"fullname": "jupyterpidaq.Sensors.sensors.VernierpH.__init__", "modulename": "jupyterpidaq.Sensors.sensors", "qualname": "VernierpH.__init__", "type": "function", "doc": "This init should be called first in the init section of any class\nextending this class (e.g. super().__init__(Vdd)
). Then set\nself.name
and self.vendor
to the proper values. Append units\nspecific to the sensor to self.units
. The parameter Vdd must be\nsupplied upon initialization because the output voltage of some\nsensors depends on Vdd.
\n\nParameters
\n\n\n- float Vdd: the voltage supplied to the sensor by the A-to-D\nboard in case the sensor output depends on this.
\n
\n", "signature": "(self, Vdd)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Sensors.sensors.VernierpH.pH", "modulename": "jupyterpidaq.Sensors.sensors", "qualname": "VernierpH.pH", "type": "function", "doc": "Parameters
\n\n\n- float v_avg: average raw voltage
\n- float v_std: standard deviation of the raw voltage
\n- float avg_std: estimated standard deviation of v_avg
\n- float avg_vdd: the Vdd measured simultaneously with v_avg (not\nused)
\n
\n\nReturns
\n\n\n \n
\n\nReturns: pH_avg, pH_std, pH_avg_std all in pH units
\n", "signature": "(self, v_avg, v_std, avg_std, avg_vdd)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Sensors.sensors.VernierFlatpH", "modulename": "jupyterpidaq.Sensors.sensors", "qualname": "VernierFlatpH", "type": "class", "doc": "This class contains the definitions for Vernier flat tris-compatible pH\nsensor, FPH-BTA.
\n", "bases": "RawAtoD"}, {"fullname": "jupyterpidaq.Sensors.sensors.VernierFlatpH.__init__", "modulename": "jupyterpidaq.Sensors.sensors", "qualname": "VernierFlatpH.__init__", "type": "function", "doc": "This init should be called first in the init section of any class\nextending this class (e.g. super().__init__(Vdd)
). Then set\nself.name
and self.vendor
to the proper values. Append units\nspecific to the sensor to self.units
. The parameter Vdd must be\nsupplied upon initialization because the output voltage of some\nsensors depends on Vdd.
\n\nParameters
\n\n\n- float Vdd: the voltage supplied to the sensor by the A-to-D\nboard in case the sensor output depends on this.
\n
\n", "signature": "(self, Vdd)", "funcdef": "def"}, {"fullname": "jupyterpidaq.Sensors.sensors.VernierFlatpH.pH", "modulename": "jupyterpidaq.Sensors.sensors", "qualname": "VernierFlatpH.pH", "type": "function", "doc": "Parameters
\n\n\n- float v_avg: average raw voltage
\n- float v_std: standard deviation of the raw voltage
\n- float avg_std: estimated standard deviation of v_avg
\n- float avg_vdd: the Vdd measured simultaneously with v_avg (not\nused)
\n
\n\nReturns
\n\n\n \n
\n\nReturns: pH_avg, pH_std, pH_avg_std all in pH units
\n", "signature": "(self, v_avg, v_std, avg_std, avg_vdd)", "funcdef": "def"}];
// mirrored in build-search-index.js (part 1)
// Also split on html tags. this is a cheap heuristic, but good enough.
diff --git a/setup.py b/setup.py
index e56bdb2..dab05d9 100644
--- a/setup.py
+++ b/setup.py
@@ -6,7 +6,7 @@
setuptools.setup(
name="JupyterPiDAQ",
url = "https://github.com/JupyterPhysSciLab/JupyterPiDAQ",
- version="0.7.7rc0",
+ version="0.7.7",
description="Data Acquisition in Jupyter notebook on Raspberry Pi",
long_description=long_description,
long_description_content_type="text/markdown",