Code Monkey home page Code Monkey logo

mies's Introduction

GitHub release (latest by date) Build Main Documentation Signed Installer Coverage pre-commit GitHub contributors

MIES is a proven [1, 2, 3, 4, 5, 6] sweep based data acquisition software package for intracellular electrophysiology (patch clamp). It offers top of its class flexibility and robustness for stimulus generation, data acquisition, and analysis.

Highlights

  • Acquire data on up to eight headstage on a single DAC.
  • Run up to five DACs in parallel.
  • Create arbitrarily complex stimulus sets with an easy to use GUI
  • Export all data, including all of its metadata, into the industry-standard NWBv2-format and read it back in
  • Run custom code during data acquisition for Automatic Experiment Control
  • Completely automate the experimental setup using JSON configuration files
  • Interact with MIES from other programming languages (Python, C++, Javascript, ...) using ZeroMQ.
  • Comprehensive experimental metadata acquisition and browsing tools
  • Use the integrated scripting language for convenient on-the-fly data evaluation.
  • Fully backward compatible with every earlier MIES version

Slideshow showing the main graphical user interfaces of MIES in Igor Pro

Supported Hardware

  • Digital to analog converters (DAC):

    • National Instruments:

      Other NI hardware models can be added on request. Please open an issue from within MIES, MIES Panels->Report an issue, for that.

    • Instrutech/HEKA ITC:

      ITC devices are at the End-Of-Service-Life (EOSL). National Instruments DACs are recommended for MIES users looking for new hardware.

  • Amplifier: Molecular Devices 700B

  • Pressure control (optional): ITC 18/1600 or National Instruments USB 6001

Required Software

Acquisition

Data evaluation

  • Windows 10x64 or MacOSX 10.10

Getting started

Support statement

The last released version receives fixes for all critical bugs.

Bug reporting

Instructions

mies's People

Contributors

adamltaylor avatar arielleleon avatar campagnola avatar daver98133 avatar garados007 avatar michaelhuth avatar scseeman avatar t-b avatar timjarsky avatar

Stargazers

 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  avatar  avatar  avatar  avatar

mies's Issues

Add more MCC functionality

MCC app has Zap/Pulse/Buzz functions, but these are not exposed by the MCC XOP (DLL has them) and thus are not usable from within MIES

Add zap button(s) to clamp mode tabs.

Record user pressure

We currently don't use the ADC for pressure control. The task is to record the applied user pressure.

Add analysis features

The basic idea is that the user can define epochs (start time and end time) in the data waves for which they can then pick an analysis type(ex. simple type: max, min etc. Complex:..spike detection, epsp detection). These analysis would be applied to all the data sweeps, or a subset of sweeps as defined by the user. The results would be stored in analysis results waves (in a analysis folder) and could be plotted in a graph in the data browser.

Allow user to change clamp mode/headstage during DAQ

  • Allow to put GUI control change events into a queue when a user changes something during DAQ
  • On the next sweep start we process all these changes, call the respective GUI control procedures and continue
  • The GUI state wave changes only after the events from the queue have been processed.

For this we need to convert all GUI control users to always use the GUI state wave.

Move proprietary repository with MIES here

Add simulation mode

For testing without hardware it would be nice to have a simulation mode. Decide if it should be hardware independent or not.

Rework labnotebook querying API

  • move into own file
  • Streamline interface to be more consistent
  • Reduce number of functions
  • add a way to get the numericalValues from textualValues and vice versa
  • add entrySourceType as input parameter to GetLastSweepWithSetting and friends

Will not be API compatible.

Functions like GetLastSettingEachSCI should also allow to only return the last valid entry of a particular headstage.

The logic behind MSQ_GetLBNEntryForHeadstageSCI should then also be included in that rewrite.

Add pyQT-like zooming

Scope: Something like: right click on a plot with mouse movement zooms in/out depending on the direction of mouse movement

SweepFormula: Add tpdelta(sweeps, channels, type) function

Where type is steady state resistance or instantaneous resistance. Later versions should also support: baseline average, capacitance and baseline noise quantification.

The function will evaluate all epochs (stock and user) with a shortname matching ^(U_)?TP[[:digit:]]*$, the baselines and pulse is expected to match ^(U_)?TP[[:digit:]]*_(P|B0|B1)$. If multiple testpulses are present the raw data is averaged before continuing.

The code in CalculateTPLikePropsFromSweep already does part of the evaluation.

Output: one value per headstage (a sweep can have multiple headstages active) -> 3D wave like data with dimensions
ROW: value
COL: sweeps
LAYER: channels

Ensure that the ITI is respected also for manual sweep starts

It would be nice if MIES ensured that the ITI was respected between stimsets when manually initialized. MIES could use the start time of the last sweep recorded in the lab notebook. It wouldn't need to be super precise, the interval would just need to be longer than the specified ITI of the previous stim set.

We would need to lookup the ITI of the last sweep from the labnotebook add that onto the high precision timestamp of the last sweep and wait with sweep starting until the ITI is over. And of course introduce a setting for that as we don't want to have it always.

Prevent DAQ if ITI is not yet reached and tell the user the leftover time.

Enhance oscilloscope view and add some options

  • Options for tuning axis scaling: One for continuous axes updates (default igor option),
    one for a fixed scaling (no updates) or updating as now.
    Having these modes are helpful for trouble shooting electrical noise on the rig.
  • TP update frequency set by the user

Always run the testpulse during DAQ

The new mode is called "TP during DAQ" for the headstages which have that activated. Similiar to the name "TP during ITI" (inter trial interval).

  • A special stimset named "Testpulse" can be selected
  • This stimset will be generated on the fly from the testpulse settings using the existing TP MD code for ITC hardware
  • DAQ itself is done as usual
  • Display is different for channels with "TestPulse" stimset. On these channels we have a display like TP.
    Think about adding two different groups in the oscilloscope window. One for TP data with its own x-axis and one for DAQ data.
  • TP_Delta will be called on every one of these pulses from the "Testpulse" stimsets. LBN entries only for the last one as we do for TP itself.
  • PressureControl should still work with "TP during DAQ", (calling P_PressureControl should be enough)
  • Ignore "TP during DAQ" headstages for dDAQ/oodDAQ. (dDAQ = "distributed DAQ", oodDAQ = "optimized overlapped distributed DAQ")

Extend export settings

  • Add option to use average for Y-axes scaling
  • Add option to use scale bars instead of axes
    • if Equal Y, use only 1 vertical scale bar
    • use only one horizontal scale bar if bottom axes is the same for all plots
    • non overlapping placement of scale bars
  • support two formatting options: presentation and publication
  • add a pulse range in addition to a pulse count option
  • add option to zero exported traces
  • extend to support SF plot (12/5/2022)

Enhance settings history panel

  • Add popupmenu for categories of lbn entries (add "all" category as well)
  • Merge numerical and textual entries,
  • add search setvariable and listbox for lbn entries. Use checkboxes to visualize entry.

Autobias and Send to all Amp failure

Autobias and Send to all Amp does not play nice together. E.g. the holding potential of one headstage is applied to the other headstages as well, but it should actually be calculated by the autobias function.

Enhance Pulse averaging

  • fallback length will become override length with checkbox
  • Instead of a user specified length/duration, instead have a max length. This will avoid the situation where second pulses would be plotted when the user input is longer than the interpulse interval.
  • Y-scale to max option on all channels without spikes (non diagonal elements).
  • time align spikes and corresponding responses
  • Use the pulse length of each pulse and not the average one for mixed frequency

Rewrite TP_Delta

  • Properly implement the generic threadsafe framework prototyped in branch postponed/feature/threadsafe-NWB-writing with documentation and tests
  • Finalize documentation what we are calculating here, CalculateTPLikePropsFromSweep does something very similiar to TP_Delta. For testing if it works we want both the old and new code results be outputted/comared.
  • Rewrite, remove the activeAD columns approach, make it threadsafe so that it can run in a preemptive thread (so it must not access any DFREFs)
  • Execute TP_Delta with that threadsafe framework in a separate thread

Use the installer to install the software package on the CI

This also tests the installer and is therefore better.

  • Add script install-from-installer.sh
  • Add installer CLI option to select "install without hardware"
  • Add option to autorun-test.sh to choose the igor version
  • Add option to install-from-installer.sh to "install without hardware"
  • reorganize scripts
    • remove bit-rotted batch files
    • unify compilation-testing and unit-testing to testing
  • Adapt bamboo tests
    Tests to perform:
    • Compilation testing with full repository (mint box)
    • Build installer (with userMode flag) and add installer and release package as artefact, reuse artefacts on all later stages (mint box)
    • Compilation testing with release package (mint box)
    • Build documentation, add documentation as artefact (mint box)
    • Generic tests, use installation package without hardware XOPs (Windows)
      • IP7/8 32/64bit
    • Testing with hardware, use installation package with hardware XOPs (Windows)
      • IP7 64bit (NI)
      • IP8 64bit (ITC)

Enhance ITI accuracy

  • Don't ignore the time DC_ConfigureDataForITC takes in RA:
    A totally crazy idea: Why do we not call DC_ConfigureDataForITC(panelTitle,
    DATA_ACQUISITION_MODE) before we start waiting for the ITT elapse? This would
    not require any guessing about the config time from our part we just would have
    to keep separate ITCDataWaves and ITCConfigWaves for DAQ and TP. As we need to
    configure DAQ before TP.
    • GetITCDataWave and friends would get a dataAcqOrTP parameter like
      DC_UpdateGlobals and create the wave either in
      MIES:ITCDevices:ITC18USB_DEV or MIES:ITCDevices:ITC18USB_DEV:TestPulse
    • Most of the code in RA_CounterMD and RA_Counter has to be moved and done
      in RA_HandleITI before we can fill the ITCDataWave for DAQ and before we
      can start TP.
    • In ITC_StartDAQMultiDeviceLowLevel we need to pull out the DC_ConfigureDataForITC calls.
      See also the discussion in PR 459 (AI stash)

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.