{"id":18964143,"url":"https://github.com/janeliascicomp/wavesurfer","last_synced_at":"2025-04-19T12:50:35.249Z","repository":{"id":27879028,"uuid":"31370222","full_name":"JaneliaSciComp/WaveSurfer","owner":"JaneliaSciComp","description":"A Matlab application for electrophysiology data analysis","archived":false,"fork":false,"pushed_at":"2025-04-04T21:29:08.000Z","size":70393,"stargazers_count":21,"open_issues_count":60,"forks_count":10,"subscribers_count":13,"default_branch":"master","last_synced_at":"2025-04-16T05:44:47.621Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://wavesurfer.janelia.org/","language":"MATLAB","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/JaneliaSciComp.png","metadata":{"files":{"readme":"README.txt","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2015-02-26T14:15:10.000Z","updated_at":"2025-04-04T21:29:14.000Z","dependencies_parsed_at":"2022-09-11T04:01:23.887Z","dependency_job_id":null,"html_url":"https://github.com/JaneliaSciComp/WaveSurfer","commit_stats":null,"previous_names":[],"tags_count":93,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JaneliaSciComp%2FWaveSurfer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JaneliaSciComp%2FWaveSurfer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JaneliaSciComp%2FWaveSurfer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JaneliaSciComp%2FWaveSurfer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/JaneliaSciComp","download_url":"https://codeload.github.com/JaneliaSciComp/WaveSurfer/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":249699348,"owners_count":21312379,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-08T14:23:03.206Z","updated_at":"2025-04-19T12:50:35.230Z","avatar_url":"https://github.com/JaneliaSciComp.png","language":"MATLAB","readme":"WaveSurfer\n==========\n\nWaveSurfer is an application for acquiring electrophysiology\ndata.  It runs within Matlab R2015b and later (64-bit only).  At\npresent, you must have a Matlab license to use it.\n\n\nSystem Requirements\n-------------------\n\n64-bit Windows 7, 8, or 10\n\nNational Instruments X Series card (i.e. 63xx)\n\nNational Instruments DAQmx driver, version 9.8.x or later.\n\nMatlab R2015b or later (64-bit)\n\n\nInstallation\n------------\n\n1.  If you have a previous version of WaveSurfer installed, delete the\n    entries for it from your Matlab path.\n\n2.  Download the .zip file for the latest release from here:\n\n        http://wavesurfer.janelia.org/releases/index.html\n\n3.  Extract the .zip file contents to a convenient location.\n\n4.  In Matlab, cd to this just-created directory.\n\n5.  At the Matlab command line, execute \"installWavesurfer\".  This\n    will permanently modify your Matlab path so that all components\n    needed by WaveSurfer are on it.  (If you don't want to permanently\n    modify the path, execute \"installWavesurferForNow\" instead of the\n    above.  This modifies the path only for the current Matlab\n    session.)\n\n6.  At the Matlab command line, execute \"wavesurfer\".  You should now\n    be presented with the WaveSurfer user interface.\n\n7.  Go to Protocol \u003e Device \u0026 Channels... to specify what DAQ board you\n    want to use, what channels you want to use, and to set channel\n    units and scales, if desired.\n\n8.  Go to Protocol \u003e General... to launch the general settings window.\n    In it, click the Stimulation \u003e Enabled checkbox to turn on\n    stimulation.\n\n9.  In the main window, click the play button (the one with the black\n    righward-pointing arrow) to acquire data without saving to disk.\n    Click the record button (the one with the red circle) to acquire\n    data and save it to disk.\n\n10  To save your device settings, channel settings, and window\n    positions, go to File \u003e Save Protocol.  These can then be loaded\n    in a new WaveSurfer sessions by going to File \u003e Open Protocol...\n\n11.  If you have questions, please contact the WaveSurfer developers.\n\n\nCopyright\n---------\n\nExcept where noted, all code, documentation, images, and anything else\nin WaveSurfer is copyright 2013-2025 by the Howard Hughes Medical \nInstitute.\n\n\nLicense\n-------\n\nSee LICENSE.txt.\n\n\nAuthors\n-------\n\nWaveSurfer was developed at the HHMI Janelia Research Campus.  It\nstarted out as version 3 of Ephus, another electrophysiology package\nlargely authored by Vijay Iyer, with contributions by Tim O'Connor and\nothers.\n\nThe original developer of WaveSurfer was Patrick Edson.  \n\nWaveSurfer is currently developed by Adam L. Taylor, Ben J. Arthur,\nand David Ackerman.\n\n\nContributions\n-------------\n\nWaveSurfer includes code from the JSONlab project, by \nQianqian Fang (https://github.com/fangq/jsonlab).  This code is covered \nby its own copyright and licensing.  We thank Dr. Fang for making it \npublicly available.\n\n\nSupport\n-------\n\nWaveSurfer is developed at the HHMI Janelia Research Campus. It is\nsupported by the Svoboda Lab, who initiated the project, and by the\nMagee, Spruston, Jayaraman, Lee, Hantman, and Koyama Labs. The project\nis coordinated by Janelia's Scientific Computing Software group.\n\n\nMaintainers\n-----------\n\nAdam L. Taylor \nScientific Computing\nHHMI Janelia Research Campus\n\n\nVersion History\n---------------\n\n0.74:  (February 26, 2015) Added Axon Multiclamp support.  Now store\n       stimulus metadata in the data file header.  Now save data as\n       int16 instead of double-precision floating point.  Improved\n       ScanImage integration.\n\n0.75:  (March 9, 2015) Fixed bug with scope x-span.\n\n0.76:  (March 11, 2015) Fixed bug with README(!).\n\n0.77:  (March 17, 2015) Now supports timed digital outputs.\n\n0.771: (March 18, 2015) Updated README to reflect true NI DAQmx driver\n       requirements.\n\n0.772: (March 18, 2015) Can now change scope y limits during ongoing \n       acquisition.\n\n0.773: (March 23, 2015) Fixed bug with trial duration setting not \n       getting propagated to DAQ board on .cfg file load.\n\n0.774: (March 25, 2015) Fixed a few more bugs.\n\n0.775: (March 25, 2015) Fixed bug that prevented acquisition\n       if some AI channels specified in MDF were marked as \n       inactive.\n\n0.776: (April 2, 2015) Added ability to playback arbitrary stimuli\n       from .wav file.  Fixed bugs with multiple DO lines and\n       long-duration stimuli, and with stimuli not being generated\n       properly after 1st stimulus episode when externally triggered.\n\n0.777: (April 3, 2015) Fixed issue that prevented acquisition if\n       Matlab was installed on a drive other than the C drive.\n\n0.778: (April 14, 2015) Now have toggle-able autoscaling of y-axis\n       limits for both scope windows and the test pulse window.  Added\n       per-trialset and per-trial (approximate) timestamps to data\n       file.  No longer rely upon DABS callbacks during data\n       acquisition, but poll instead.  All internally-generated\n       triggers are now themselves triggered off a common \"master\"\n       trigger on PFI8.\n\n0.779: (April 14, 2015) Fixed bug where couldn't test pulse after\n       acquiring data.\n\n0.78:  (April 15, 2015) Data files for continuous recordings now use\n       the same file naming scheme as trial-based recordings.  Fixed\n       bug with fast protocols not getting cleared when you click that\n       button.  Added a very simple example user function .m file.\n\n0.781: (April 20, 2015) Added more options for data file naming.  \n       Fixed several small bugs.\n\n0.782: (April 22, 2015) Added a two-pulse stimulus.\n\n0.783: (April 22, 2015) Added a generic Matlab expression stimulus.\n\n0.784: (April 29, 2015) Test pulser now uses sampling rate of\n       acquisition system.\n\n0.785: (May 11, 2015) Inactived AI channels are now really and \n       truly inactivated.\n\n0.786: (May 12, 2015) Fixed bug with TestPulser model not getting \n       persisted to disk properly.\n\n0.787: (May 12, 2015) Commented out debugging fprintf.  Doh!\n\n0.8:   (May 19, 2015) Added support for digital inputs, untimed digital\n       outputs.  Changed user hook function infrastructure to more\n       powerful object-based scheme.  Added example user hook classes\n       that implement treadmill- and VR-triggered spike rasters.  Many\n       other small tweaks and improvements.  Note that version 0.8\n       will not generally read protocol files from earlier versions.\n\n0.801: (June 4, 2015) Made electrodes window narrower, so that it fits\n       on a 1280x1024 screen.  Added zoom in/out, scroll up/down\n       buttons to scope windows, got rid of green-on-black color\n       scheme.  Test pulser now shows resistance in units tailored to\n       the scale of the resistance value.  Protocol and user settings\n       file formats were not changed from release 0.8.\n\n0.802: (June 12, 2015) Fixed error on MDF load under R2013b.  Added\n       ability to turn on/off scope grids.  Protocol and user settings\n       files from release 0.8+ will still work with this release.\n\n0.803: (June 29, 2015) Fixed bug in ws.loadDataFile() that made it\n       error if any channels were not active.  Protocol and user\n       settings files from release 0.8+ will still work with this\n       release.\n\n0.804: (July 3, 2015) Fixed bug that caused warnings on .cfg load if\n       the acquisition sample rate had been changed.  Restored\n       green-on-black theme for scope windows as an option.  Scope\n       window buttons are now hidden if the window is not tall enough.\n       Added option to always hide scope window buttons.  Protocol and\n       user settings files from release 0.8+ will still work with this\n       release.\n\n0.805: (July 23, 2015) Fixed bug that made it impossible to record if \n       a user class was in use.\n\n0.9-beta-1: (October 12, 2015) Major redesign of WaveSurfer to support\n            low-latency (\u003c 5 ms) real-time feedback loops.  WaveSurfer\n            now spawns two additional Matlab processes when you lauch\n            it: one to aquire data and run real-time feedback loop\n            code, and another to ensure that the sweep-based output\n            buffer is refilled properly.  Also some streamlining of\n            the triggering settings, and changes in terminology\n            (e.g. \"trials\" are now sweeps, an \"experiment\" is now a\n            run).  Note that this is a beta release, so is likely\n            somewhat buggier than a regular release.\n\n0.9-beta-2: (October 15, 2015) Fixed several bugs.\n\n0.9-beta-3: (October 15, 2015) Fixed capitalization issues in the\n            README.\n\n0.9-beta-4: (October 17, 2015) Fixed another silly cosmetic bug.\n\n0.9-beta-5: (October 29, 2015) Added missing DLL.\n\n0.9-beta-6: (October 30, 2015) Fixed bug where satellite processes \n            didn't have proper search path.\n\n0.9-beta-7: (November 3, 2015) Fixed bug where zero digital inputs \n            caused eventual error during acquisition. \n\n0.9-beta-8: (November 9, 2015) Fixed several bugs.\n\n0.9-beta-9: (November 9, 2015) Cosmetic fix.\n\n0.9-beta-10: (November 11, 2015) Test Pulser now reports resistance \n             in VC mode, instead of conductance.  Minor improvements \n             to ws.example.RasterTreadMill.\n\n0.9-beta-11: (November 13, 2015) Fixes to WS-SI coordination code.\n\n0.9-beta-12: (November 18, 2015) Fixed bug with triggering schemes, \n             fixed bug with loading older WS data files.\n\n0.9-beta-13: (November 18, 2015) Fixed bug with mimic()'ing cell \n             arrays.\n\n0.9-beta-14: (November 20, 2015) Fixed bug where didn't work if no \n             input channels were defined.\n\n0.9      Dec 01, 2015    Rechristened 0.9-beta-14 as 0.9.\n\n0.901    Jan 07, 2016    Added support for DAQmx 15.1.x.  Fixed bug in\n                         error dialog message if the installed version\n                         of DAQmx is not supported by WaveSurfer.\n\n0.902    Jan 29, 2016    Fixed triggering issues that could cause acq\n                         tasks but not stim tasks to trigger for a \n                         finite-duration sweep, despite nominally \n                         using the same trigger. \n\n0.91     Feb 12, 2016    All things that used to be set in the MDF\n                         file are now settable in the GUI, and stored\n                         in the protocol file. \n\n0.912    Mar 01, 2016    Fixed bug in README.\n\n0.913    Mar 02, 2016    Fixed bug which resulted in actual sampling\n                         rate being slightly different from nominal\n                         sampling rate for sampling rates (in Hz) that\n                         do not evenly divide 100 MHz.\n\n0.914    Mar 11, 2016    Fixed bug where data was saved without\n                         scaling coefficients.  Added code to\n                         ws.loadDataFile() convert nominal sampling rate\n                         for pre-0.913 data files to correct sampling\n                         rate.  Added code to ws.loadDataFile() to\n                         error if asked to return floating-point\n                         (scaled) data when the data file lacks\n                         scaling coefficients, as a safeguard.\n\n0.915    Mar 22, 2016    Added tool,\n                         ws.addScalingToHDF5FilesRecursively(), to\n                         automatically append device scaling\n                         information to .h5 data files that currently\n                         lack it.\n\n0.916    Apr 14, 2016    All AI channels now explicitly set to\n                         differential terminal configuration.\n                         Stability and UI improvements.\n\n0.917    Apr 15, 2016    Fixed bug in UI display of AO channel scale\n                         units.  Verified bug went no deeper.\n\n0.918    May  8, 2016    Fixed many small bugs, changed\n                         TemplateUserClass to ExampleUserClass,\n                         cleaned up ws.examples package.\n\n0.919    Jun  1, 2016    Can now set test pulse y limits manually.\n                         Satellite Matlab windows are now hidden.\n                         Fixed issue with sweep timestamps being\n                         somewhat off.  Improved speed of loading\n                         protocol files.  Improved handling of old\n                         protocol files.  Added ability to duplicate\n                         stimulus maps.  Fixed issue with adding\n                         scaling coefficients to data files from WS\n                         v0.8.\n\n0.9191   Jun 3, 2016     Fixed bug with listing device AI terminals when\n                         device has more than 16 (single-ended) AI\n                         terminals.\n\n0.9192   Jun 3, 2016     Fixed bug with adding calibration\n                         coefficients to old files taken with devices\n                         with more than 16 (single-ended) AI\n                         terminals.\n\n0.92     Jun 27, 2016    Added support for more recent versions of\n                         DAQmx.  Can now duplicate stimuli, maps,\n                         sequences.  Better support for old protocol\n                         files.  Fixed bug causing errors on stimulus\n                         deletion in some cases.  Can now write\n                         calibration data to disk, use that file to\n                         add calibration to data files.  Fixed bug\n                         with electrode AO scaling.  Added debugging\n                         mode which shows satellite windows running in\n                         full-JVM Matlab sessions.  Added checkbox to\n                         optionally turn off electrode gain reading\n                         before a run or a test pulse.  Added tooltips\n                         to fast protocol buttons.  Improved speed of\n                         protocol file loading.  Improvements to\n                         display and data scaling speed, especially\n                         for long sweeps.  Fixed bug where stopping a\n                         run at an unlucky moment would put WS into a\n                         weird, unusable state.\n\n0.921    Jul 26, 2016    Fixed another bug with manual stopping.\n\n0.93     Aug 12, 2016    New chart-recorder-like display of traces.\n                         Improvements to user class handling.\n                         Includes two more custom user classes.\n                         \n0.931    Aug 23, 2016    Fixed bug with loading protocol file with\n                         fewer input channels after taking data.\n                       \n0.932    Sep 6, 2016     Fixed bug where outputs didn't get zeroed\n                         after a user-initiated stop.\n\n0.933    Sep 6, 2016     README bug fix.\n\n0.94     Oct 6, 2016     Changes to triggering to make it more\n                         flexible.  Also made satellite processes\n                         leaner, and made changes to the stimulus\n                         library go through the main WavesurferModel.\n\n0.941    Oct 14, 2016    Run will now continue past end of acquisition\n                         if stimulation is ongoing.  Also fixed hangs\n                         in some situations.\n\n0.942    Jan 11, 2017    User classes now print debug info to terminal.\n                         Updated and streamlined Bias user code.\n                         Also fixed bug with map durations loaded\n                         from protocol files.\n\n0.943    Feb 22, 2017    Fixes to BIAS-WS interface, incorporating our\n                         own version of JSONLab.\n                      \n0.945    Mar 10, 2017    Bug fix for MultiClamp 700A support.\n\n0.946    Apr 3, 2017     Added support for MultiClamp 700B Commander 2.2.\n                         Fixed bug with y auto-scaling.\n                         Enhanced ws.examples.TriggerOnThresholdCrossingClass.\n\n0.947    Apr 6, 2017     Added support for very-low sampling rates, \n                         down to ~1/(40 s).\n                         \n0.95     Aug 9, 2017     Improved SI-WS integration, now using SI-WS\n                         communication protocol version 2.0.0.  Input\n                         signals now displayed in main window,\n                         acquisition/stimulation settings moved to\n                         \"General\" window.  Eliminated direct external\n                         access to WavesurferModel subsystems in user\n                         code.  Eliminated Parent properties in all\n                         ws.Model objects.\n                         \n0.951    Aug 24, 2017    Fixed bug where WS used built-in contains()\n                         function, only introduced in R2016b.\n                       \n0.952    Aug 25, 2017    Fixed bug where Channels window didn't\n                         properly update after changes in the\n                         Electrodes window.\n                  \n0.96     Sep 5, 2017     Added support for multiple DAQ boards.\n\n0.961    Oct 14, 2017    Bug fixes.\n\n0.962    Oct 18, 2017    Added new stimulus type.  Streamlined\n                         handling of stimulus parameters.\n\n0.963    Oct 18, 2017    Fixed bug.\n\n0.964    Oct 19, 2017    Fixed bug with two square pulse stimulus.\n\n0.965    Dec 13, 2017    Added Micro-Manager user class.  Fixed bugs.\n\n0.966    Jan 29, 2018    Fixed bug with untimed DO during TP not\n                         working.\n\n0.967    Feb 1, 2018     Fixed bug with stim library figure not\n                         getting updated after protcol file load.\n                         \n0.968    Feb 5, 2018     Fixed bugs with user code management.\n                    \n0.97     Feb 7, 2018     Added wake() method to user classes.\n\n0.98     Sep 13, 2018    Improvements to ws.loadDataFile().\n\n0.981    Oct 1, 2018     Bug fixes.\n\n0.982    Apr 6, 2019     Fixed bug with finding NI DAQmx .h file.\n                         Fixed bug with HEKA integration in Matlab\n                         2018a/b.  Added example user class for\n                         controlling Hantman Lab pez dispenser.  Added\n                         new user class method,\n                         willSaveToProtocolFile().  File stimulus can\n                         now load a .mat file.  Fixed a few other bugs.\n                         \n1.0      Apr 14, 2019    User settings files have been replaced with\n                         user profiles that act as preferences,\n                         requiring less user fiddling.  WaveSurfer\n                         now does a better job of warning the user\n                         when they try to close a protocol with\n                         unsaved changes.  Stimulus preview is no\n                         longer a second-class window, and now\n                         automatically updates when the current\n                         stimulus/map/sequence is changed.  Dropped\n                         support for soft-real-time controllers in\n                         user code.  Dropped support for Matlab 2014b\n                         and 2015a.\n                         \n1.0.1    May 11, 2019    Fixed bugs.  Pez controller example code is\n                         now suitable for the v2 pez dispenser.\n                         Switched to semantic versioning\n                         (https://semver.org/).\n\n1.0.2    Jun 05, 2019    Fixed bug with opening old protocol files.\n\n1.0.5    Dec 01, 2020    Updates to pez controller example.  Added\n                         method to query whether logging is enabled\n                         to ws.WavesurferModel.\n\n1.0.6    Apr 25, 2022    Fixed bug with TP not updating in recent \n                         Matlab versions, and TP window not \n                         resizing properly.\n\n1.0.7    Mar 28, 2025    Added CITATION.cff.  Updates to pez ModularClient.\n\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjaneliascicomp%2Fwavesurfer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjaneliascicomp%2Fwavesurfer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjaneliascicomp%2Fwavesurfer/lists"}