GithubHelp home page GithubHelp logo

bothlab / syntalos Goto Github PK

View Code? Open in Web Editor NEW
30.0 5.0 3.0 13.53 MB

Synchronized data acquisition from diverse sources and flexible control for behavior experiments

Home Page: https://syntalos.rtfd.io

License: GNU Lesser General Public License v3.0

C++ 95.50% C 2.13% Python 0.35% Shell 0.19% Meson 1.69% Makefile 0.01% CMake 0.15%
neuroscience miniscope data-acquisition camera linux-app behavior

syntalos's Introduction

Syntalos

Syntalos Screenshot Build Test

Syntalos (formerly known as MazeAmaze) is a software for timestamp-synchronized parallel data acquisition from diverse data sources, such as cameras, microendoscopes, Intan electrophysiology amplifiers or Firmata-based serial interfaces. The software also allows user-defined closed-loop interventions via its built-in Python scripting support. It is specifically designed for use in (neuro)scientific in vivo behavior experiments.

Syntalos is built with a set of core principles in mind:

  • Timestamps of all data sources of an experiment should be synchronized (within tolerance limits), so data at specific points in time can be directly compared. If hardware synchronization is unavailable, a software solution is used.
  • A data acquistion task must not block a different acquistion or processing task.
  • Data is stored in a fixed directory structure (Experiment Directory Layout, EDL) with all metadata alongside the data.
  • The software must account for experimenter error and have sane failure modes (autocorrect bad experimenter input, never have a component fail silently, ...)
  • The software must never auto-adjust parameters without logging the fact
  • Syntalos is Linux-native: It is written to be run on Linux, which enables it to make use of some beneficial Linux-specific functionality to increase its robustness or performance (a Windows port is likely possible, but would need extensive testing).

Users

You can install Syntalos directly from your App-Center if the Flathub repository is set up on your Linux system.

We also provide prebuilt binaries as native packages as well as more detailed installation instructions in the Syntalos documentation. The documentation also contains information how to best use Syntalos.

To make Syntalos work for your experimental setup, you can either create new modules and integration code, or utilize already existing modules to acquire and transform data without any required coding! You can find a list of built-in modules below.

Modules

Syntalos modules are self-contained entities which can perform arbitrary data acquisition, processing and/or storage tasks. All modules are supervised and driven by the Syntalos Engine and can communicate with each other using data streams.

Currently, the following modules are built-in or can be enabled at build-time:

  • audiosource: Play various acoustic signals.
  • canvas: An OpenGL-based display for single images and image streams. Will display frame times and framerates for interactive monitoring.
  • camera-flir: Use (USB) cameras from FLIR Systems which can be addressed via their Spinnaker SDK.
  • camera-generic: Use any camera compatible with UVC or the OpenCV videocapture abstraction (e.g. simple webcams).
  • camera-tis: Use a (USB) industrial camera from The Imaging Source to acquire a video stream.
  • camera-ueye: Record video with an uEye industrial camera from IDS (this module is unmaintained!).
  • deeplabcut-live: Example Python module for live animal tracking using DeepLabCut-live.
  • firmata-io: Control a (wired) serial device that speaks the Firmata protocol, usually an Arduino. This module can be controlled with a custom user script via the Python module.
  • firmata-userctl: Manually send commands to a firmata-io module to change pin states using a simple GUI.
  • intan-rhx: Use an RHD2000 USB Interface Board by IntanTech for biopotential recordings of up to 256 channels.
  • jsonwriter: Write data to Pandas-compatible JSON files.
  • miniscope: Perform calcium imaging in awake, freely moving animals using devices from the UCLA Miniscope Project.
  • plot-timeseries: Plot signal traces in real time.
  • pyscript: Run arbitrary Python 3 code and send automation commands to other modules in the active experiment.
  • runcmd: Run any external command when the experiment was started.
  • table: Display & record tabular data in a standardized CSV format.
  • sp210-pressuresense: Support for the SP210 differential pressure sensor driven by a Raspberry Pi Pico.
  • triled-tracker: Track an animal via three LEDs mounted on a headstage and save various behavior parameters.
  • videorecorder: Record image streams from cameras to video files in various formats.
  • videotransformer: Perform common transformations on frames, such as cropping & scaling.

Developers

This section is for everyone who wants to build Syntalos from source, or wants to change its code to submit a change, bugfix or new module.

Dependencies

  • C++20 compatible compiler (GCC >= 12 or Clang >= 16. GCC is recommended)
  • Meson (>= 0.64)
  • Qt5 (>= 5.12)
  • Qt5 Test
  • Qt5 OpenGL
  • Qt5 SVG
  • Qt5 SerialPort
  • GLib (>= 2.58)
  • Iceoryx (>= 2.0)
  • Eigen3
  • TOML++
  • FFmpeg (>= 4.1)
  • GStreamer (>= 1.0)
  • PipeWire
  • libVIPS (>= 8.14)
  • KF5 Archive
  • KF5 TextEditor
  • pybind11
  • libusb (>= 1.0)
  • OpenCV (>= 4.1) (only for some modules)
  • ImGui / ImPlot (optional, needed for plotting)

We recommend Debian 13 (Trixie) or Ubuntu 24.04 (Noble Numbat) to build & run Syntalos, but any Linux distribution that has a recent enough C++ compiler and Qt version should work. On Ubuntu, you can get some updated dependencies by adding the Syntalos PPA: sudo add-apt-repository -y ppa:ximion/syntalos

Some modules may require additional dependencies on libraries to communicate with hardware devices, or to implement their repective features. In case you get a dependency error when running meson, install the missing dependency or try to build with less modules enabled.

Before attempting to build Syntalos, ensure all dependencies (and their development files) are installed on your system. If you are using Debian or Ubuntu, you may choose to locally run the system package installation script that the CI system uses: sudo ./tests/ci/install-deps-deb.sh. IMPORTANT: This script runs APT with fsync/sync disabled to speed up package installation, but this leaves the system vulnerable to data corruption in case of an unexpected power outage or other issues during installation. If you are concerned by this, please install the packages mentioned in the script file manually.

After installing all dependencies, you should be able to build the software after configuring the build for your platform using Meson:

mkdir build && cd build
meson --buildtype=debugoptimized -Doptimize-native=true ..
ninja
sudo ninja install

Modules can be enabled and disabled via the -Dmodules flag - refer to meson_options.txt for a list of possible, comma-separated values.

Pull-requests for new modules, bugfixes or any changes are very welcome! (Code should be valid C++20, use 4 spaces for indentation. With clang-format installed, autoformat.py can be used to automatically format C++ and Python code)

syntalos's People

Contributors

ximion avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

syntalos's Issues

RHA intan is possible?

It would be possible to use the software with intan amplifier demo 1.03, inta's oldest software, used for the RHA board, not compatible with the RHX software.

DAQ not outputting signal when using Syntalos

Hello, Mattias

I am currently using Syntalos for experiments with Miniscope.
While the signal output from the DAQ terminal during frame acquisition (this) works correctly with PoMiDAQ, it does not output at all with Syntalos.

↓Sync Output port toggles its output on each frame acquisition.
IMG_3866

↓Sync Output when PoMiDAQ handles miniscope
IMG_3864

↓Sync Output when Syntalos handles miniscope
IMG_3865

Do you know what might be causing this issue?

Best regards,
Hayato

can not add modules

Hi
syntalos is a great tool.
after I open the software and click "Add Modules", there is no modules for me to select.
Any suggestions?
Thank you.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.