Raspberry Pi-based visually-guided reaching task for mice used for studying neural representations of visuomotor control.
git clone https://mcol.xyz/code/reach
Log | Files | Refs | README

DateCommit messageAuthorFiles+-
2020-10-14 15:02increase cue duration reduction factormcol1+1-1
2020-10-08 15:17add single_spout kwarg to Session.run and Mouse.trainmcol2+17-2
2020-10-07 15:10do not format trial start and end time into stringsmcol1+0-2
2020-10-04 15:21add get_spontaneous_reach methodsmcol6+70-0
2020-10-02 13:37include d' in output of print_resultsmcol1+2-0
2020-09-29 00:08Add tests that simulate full training sessionsmcol3+121-9
2020-09-27 19:44remove tmp test data from /tmp when completemcol1+4-2
2020-09-27 17:34add tests for {Mouse,Session}.get_trialsmcol2+11-2
2020-09-27 15:16training_summary.py: do not plot metrics for days with no trialsmcol1+5-0
2020-09-27 13:05Make session data immutable, and update print_results with new gettermcol1+11-9
2020-09-27 12:39This removes all get_ methods except get_trials and get_results, which are present on Cohort, Mouse and Session, and can be directly passed to pandas.DataFrame for nicer handling of data.mcol7+34-145
2020-09-26 23:35small typo fixesmcol3+7-2
2020-09-26 23:35add tests for reach.Sessionmcol4+100-11
2020-09-26 23:17reaction times are actually in seconds, not millisecondsmcol3+3-4
2020-09-26 22:06Mouse.training_data -> Mouse.data to be consistent with Sessionmcol5+21-21
2020-09-26 22:00clean up some pylint thingsmcol3+6-4
2020-09-26 21:50remove unnecessary importmcol1+0-2
2020-09-26 21:48add test for Mouse.save_data_to_filemcol1+8-2
2020-09-26 20:53add tests for reach.mousemcol3+55-1
2020-09-26 20:53pylint testsmcol1+1-1
2020-09-26 20:39add Cohort.get_reaction_timesmcol2+18-3
2020-09-26 20:26finally add some bloody tests before i shoot my other footmcol4+54-2
2020-09-26 15:03Update from calls to deprecated propertiesmcol3+12-11
2020-09-26 12:16actually print correct path when saving datamcol1+2-2
2020-09-26 12:14Remove @cache, convert methods to explicit gettersmcol4+21-65
2020-09-26 12:12pylint: ignore too-few-public-methodsmcol1+2-1
2020-09-26 11:32Make cohort.results directly convertible into pd.DataFramemcol2+13-15
2020-09-25 20:13use pathlib.Path instead of os.pathmcol1+15-10
2020-09-25 20:13use a constants class for LEFT and RIGHT target sidesmcol3+37-24
2020-09-25 20:12Some light formatting changesmcol7+3-16
2020-09-25 11:45always save new end_time when exitingmcol1+2-3
2020-09-25 10:58remove redundant method get_session_reaction_timesmcol1+0-18
2020-09-25 10:43remove data-based versionmcol1+0-2
2020-09-25 14:52use 6-digit hex colours in plots for more compatibilitymcol1+3-3
2020-09-24 18:10add d' to training_summary.py and reformat some axesmcol2+19-3
2020-09-24 15:40use loglinear correction for d' (Hautus 1995)mcol1+5-7
2020-09-24 14:46add d' to basic session resultsmcol3+47-3
2020-09-18 14:40save data in tempdir upon save exceptionmcol1+11-8
2020-09-16 15:26typo in scriptmcol1+1-1
2020-09-16 14:23Test utilities on Pi and update scripts accordinglymcol11+66-112
2020-09-16 11:59update utilitiy docstringmcol2+4-4
2020-09-16 11:58update setup.py and add requirements.txt for optional depsmcol3+10-7
2020-09-16 11:57replace buttons in utilities with readcharmcol2+67-82
2020-09-16 11:16remove curses backendmcol5+1-470
2020-09-16 10:52small flake8 fixmcol3+6-4
2020-09-16 10:50remove ConditioningSession; just don't give paw_sensor pins to RaspberryPimcol5+4-181
2020-09-16 10:33use Outcomes class for all outcome valuesmcol2+14-13
2020-09-15 17:34Pi: change default pinsmcol1+8-8
2020-09-15 17:06dispense_water -> give_rewardmcol6+9-11
2020-09-15 16:57Pi: handle pin numbers as classmcol2+39-37
2020-09-15 16:26wait_for_rest: return False if cancellingmcol4+13-4
2020-09-15 16:03remove all button-specific code except Raspberrypi utilities (todo)mcol4+3-61
2020-09-15 15:58hard-code actuatormcol2+7-103
2020-09-15 15:22remove all air-puff related codemcol6+0-127
2020-09-15 14:48move spout position every 5 trialsmcol1+3-1
2020-09-15 14:33num_hits should be a summcol1+1-1
2020-09-15 14:04move outcome values into constantsmcol2+21-14
2020-09-15 13:59various formatting tidiesmcol6+71-52
2020-09-15 13:40replace TrialDeque with easier to understand sliding windowmcol2+19-23
2020-09-15 13:23remove shaping code i.e. _water_at_cue_onsetmcol2+7-32
2020-09-15 11:39also timeout when ITI is brokenmcol2+7-1
2020-09-11 13:22correct timeout sleep call; increase default timeout to 8smcol1+2-3
2020-09-09 15:19set RaspbrryPi._is_trial at end_trial, not start_iti, so include timeoutmcol2+2-9
2020-09-08 15:01Add hook usage example to scripts to save data after trialsmcol3+8-2
2020-09-08 14:58raspberrypi: only attempt air puffs in they are enabledmcol1+2-1
2020-09-08 14:57add timeout option for trainingmcol2+14-0
2020-08-26 15:17Only initialise pins that are usedmcol1+31-22
2020-04-07 17:18add module for loading deeplabcut data for sessionsmcol2+170-1
2020-04-07 17:16pylint: disable false positive session.outcome.countmcol3+6-4
2020-04-07 16:56full_path -> data_file; and make Cohort args non-kwargsmcol4+12-13
2020-04-07 16:55add script to merge two sessionsmcol2+66-1
2020-04-07 10:57add black to makefilemcol2+6-1
2020-04-07 10:56basic formatting changesmcol14+219-248
2020-03-17 16:41RaspberryPi backend can accept custom pin mappingsmcol1+15-10
2020-03-16 12:22add hook parameters to be called at the end of every trialmcol3+17-8
2020-03-05 17:25Sessions should not start with huge cue durations if the last trial was extendedmcol1+3-1
2020-03-05 17:23Remove backend.disable_spoutsmcol4+22-53
2020-03-03 12:08fix example session script prompt to save datamcol1+3-7
2020-03-03 12:07only run GPIO.cleanup upon garbage collection of raspberrypimcol1+6-0
2020-03-03 12:06condition sessions should no dispense water with cue; fix eg scriptmcol2+5-5
2020-02-28 15:10add utility: test sensors with mousemcol1+16-0
2020-02-28 12:41quick pylint cleanup and increase max-argsmcol4+5-5
2020-02-28 12:40add ConditioningSession and example usage scriptmcol4+174-5
2020-02-28 12:04update RaspberryPi docstringsmcol2+5-6
2020-02-28 12:01session.inter_trial_interval docstring specifies return valmcol2+7-1
2020-02-28 11:24update undo_last_session example script with new apimcol2+28-40
2020-02-28 10:39remove outdated example curses session scriptmcol1+0-24
2020-02-28 10:36update example_data with a newer versionmcol3+1-66
2020-02-17 15:47session.outcomes should return None for trials with no outcomemcol1+1-1
2020-02-14 15:56training summary example ought to display mouse ID legendmcol1+1-1
2020-02-13 15:59New sessions should start with previous session's shaping statusmcol1+2-1
2020-02-12 16:58Split Cohort.results across Mouse and Session to modularisemcol4+72-47
2020-02-12 15:53call backend.miss_trial also on incorrect reachesmcol1+1-2
2020-02-12 15:52raspberry button callbacks need to get session from selfmcol1+2-2
2020-02-11 15:28session.on_trial_ methods do not want argumentsmcol1+2-2
2020-02-11 15:04print shaping boolean at start of every trialmcol1+2-0
2020-02-10 15:14Previous data shouldn't go in session._recent_trials if no trialsmcol1+1-1
2020-02-10 13:56Only add_event_detect once per pin rather than dynamically to prevent coredumpingmcol1+79-105
2020-02-07 17:55move gpio_callback to RaspberryPi staticmethod; add L12 actuatormcol2+112-50
2020-02-07 17:53update raspberrypi backend Utilities classmcol2+62-35
2020-02-07 17:48update RaspberryPi utilities with new backend systemmcol9+19-19
2020-02-03 17:11run_session should correct detect if there were trialsmcol1+3-3
2020-02-03 15:34Update example plot scripts, add reaction_time to cohort.trialsmcol3+98-75
2020-02-03 12:52lintmcol9+36-41
2020-02-03 12:24Update docs following refactormcol45+1602-1371
2020-01-31 16:33remove run_session_with_inputs scriptmcol1+0-99
2020-01-31 16:33add minimal Mock backend examplemcol1+62-0
2020-01-31 16:32Reduce run_session to minimal training examplemcol1+58-119
2020-01-31 16:32Isolate backends from Session and trim APImcol19+1667-1759
2020-01-27 14:20allow floats as inputs rather than intsmcol1+4-4
2020-01-24 13:20do not punish mice too much for failure; gradually advance parametersmcol2+40-48
2019-12-12 18:01add cohort.results methodmcol1+30-8
2019-12-09 17:31Replace hit_rate plotting script with general high level resultsmcol2+61-45
2019-12-09 17:29add pandas DataFrame-yielding properties to Cohortmcol1+34-1
2019-12-07 18:40Actually save trial end time during miss trials!!mcol1+1-0
2019-12-07 18:38Remove all traces of spout countmcol4+13-23
2019-12-05 17:57save cue duration in ms; catch error if Ctrl-C during trialmcol1+22-12
2019-12-05 14:30Make session adaptation do all spout movements before adapting cue duration or shapingmcol1+42-21
2019-12-04 18:59generalise alternative RPi specificationmcol5+29-22
2019-12-04 18:43Cue duration adaptation; print shaping bool after new trial banner; dont bring back actuator if last trial correctmcol1+21-12
2019-12-04 18:42Add outcomes properties to data classes for analysis + some clean upmcol7+95-30
2019-12-03 15:39specify watering volume with arg to run_session.pymcol2+11-3
2019-11-28 18:13add hold_spouts rpi method to zero actuator duty cyclemcol2+23-9
2019-11-27 16:20append to trials list at beginning of trial in case of very early spont triggermcol1+11-5
2019-11-27 16:20scripts: dont save if no new trialsmcol2+17-2
2019-11-25 18:00default 2 spouts; inform when shaping; disable actuators after movingmcol3+7-8
2019-11-25 17:35add 2 more buttons to actuator utilitiesmcol1+20-10
2019-11-21 15:45Hardcode actuator limits; add free duty cycle movement utilitymcol4+71-19
2019-11-18 17:41hardcode duty cycles in list indexed by spout mm positionmcol1+19-24
2019-11-18 17:40append rpi.cleanup() to utility scriptsmcol8+16-8
2019-11-12 17:13Implement actuator PWM control Spout-level and RPi-level controlmcol3+111-45
2019-11-12 14:16record lift timepoints directly in trial datamcol4+46-92
2019-11-11 11:35add test data (though this needs updating)mcol1+64-0
2019-11-11 11:35introduce adaptive shaping, cue duration, and target distancemcol5+178-215
2019-11-11 11:14increase allowed max line length; add couple todos; update parts listmcol3+33-26
2019-11-07 18:09zero-index all button code and referencesmcol3+18-19
2019-11-07 18:03move spout control to separate class with actuator functions; add adapt_settings() to Sessionsmcol3+94-45
2019-11-07 15:14add script to plot cohort reaction timesmcol1+20-26
2019-11-05 00:22lint check; update todos with testingmcol2+23-5
2019-11-05 00:11Clean up run scripts; add new run script with pre-filled metadatamcol3+129-43
2019-11-05 00:09Update mock and curses Pis with new button and sensor monitoring APImcol3+4-3
2019-11-04 23:34make Mouse indexable. json_dir -> json_pathmcol2+15-3
2019-11-04 16:16make next trial an extended trial if button 2 pressed in ITImcol2+20-6
2019-11-04 16:07puff air upon incorrect grasp when using 2 spoutsmcol1+3-1
2019-11-04 15:52re-allow recording of spontaneous reaches at any point in ITI; filtering can be done in postmcol3+11-15
2019-11-04 15:42add "rm" note that will ignore data saving to run_session scriptmcol1+8-2
2019-11-04 15:34move post-session watering vol display into external script, exposing Session.reward_countmcol2+16-9
2019-11-04 15:23remove mock pins from mock pimcol1+3-18
2019-11-04 15:20Add third button; disable button callbacks at end of ITImcol3+25-18
2019-11-03 17:08Only print results if there were trialsmcol2+7-4
2019-10-30 18:32add script to delete last session from training filemcol1+63-0
2019-10-23 20:48Disable spontaneous reaches until after mouse has rest paws once during ITImcol1+8-3
2019-10-23 20:41increase bouncetime of spontaneous reaches to 1 secondmcol1+1-1
2019-10-23 20:40print when water_at_cue_onset is manually changed during ITImcol1+1-0
2019-10-23 20:37correct calculation of number of trialsmcol1+1-1
2019-10-23 20:32add utility: test_reward_volume_with_air_puffsmcol2+45-0
2019-10-22 14:53Allow opening solenoid when testing air puffermcol1+16-0
2019-10-18 17:19neatly print all messages on new linemcol1+1-5
2019-10-18 17:15allow different solenoid opening times for each spoutmcol3+12-13
2019-10-18 15:07cleanly handle ITI ctrl-c signal without printing unnecessary GPIO errorsmcol2+20-18
2019-10-18 13:59only save notes when specified; print when spontaneous reach mademcol4+30-14
2019-10-09 15:42add new line to some prints; update raspberry pi pins to new boardmcol7+51-19
2019-10-15 14:35Merge branch 'master' of https://github.com/m-col/reachmcol3+56-3
2019-10-15 14:35Move fritzing circuit to PiBreak Plus, unfinishedmcol1+0-0
2019-10-08 14:03Handle Ctrl-C signal cleanly while waiting to begin from within sessionmcol2+40-50
2019-10-08 11:51add threading.Thread subclass to handle curses key presses; do not lint setup.pymcol2+74-105
2019-10-07 15:19Half fix curses threaded callbacks and session endingmcol4+110-50
2019-10-06 22:56incorporate threading module to handle task callbacksmcol1+128-68
2019-10-06 22:56Clean up some formatting with pylintmcol5+4-4
2019-10-06 22:36typos, remove RPi.is_real, add todomcol4+7-10
2019-10-06 17:06remove need to add reach to PYTHONPATH in scriptsmcol2+5-0
2019-10-06 14:23replace SystemError calls with sys.exitmcol3+12-8
2019-10-01 14:19Add curses interface and drawings to build functionality intomcol5+464-10
2019-10-01 13:51add Session._message for changing print destination; typosmcol4+30-18
2019-10-01 13:40add _RPi.is_real, hide _initialise_pins(), clean up raspberry docstringsmcol1+9-9
2019-10-01 13:35pylint: ignore invalid-namemcol1+2-1
2019-10-01 13:35update pi_hat_circuit.fzz to single boardmcol6+5-3
2019-09-19 16:51update docs with correct pi_hat link; added lift timepoints key to datamcol7+26-18
2019-09-19 16:50deduplicate fritzing file in generated docsmcol2+2-2
2019-09-19 16:39record trial paw lift timepointsmcol3+41-7
2019-09-18 16:37Version 4 of fritzing file; remove steppers, add 2nd spout parts, add PuffAddermcol2+0-0
2019-09-18 16:26Version 4 of fritzing file; remove steppers, add 2nd spout parts, add PuffAddermcol1+0-0
2019-09-18 14:32Add placeholder pin numbers to future hardware so utilities workmcol1+12-11
2019-09-17 13:49add todo listmcol1+8-0
2019-09-14 19:21add githubpages sphinx extension for auto nojekyllingmcol1+1-1
2019-09-14 19:07add .nojekyll to docsmcol1+0-0
2019-09-14 18:45add /docs; ignore /docsrc/_buildmcol66+19106-1
2019-09-14 18:44move docs to docsrc to make way for /docs for github pagesmcol10+24-20
2019-09-14 18:39add pylint options to setup.cfg; remove tests from makefile and simplymcol2+10-21
2019-09-14 17:04remove :class: formatting from private docstrings; remove spont_spout_pins from Session.datamcol4+57-56
2019-09-14 17:03ignore temp data file generated if json path wrongmcol1+2-0
2019-09-14 16:45add table to data page to list data keys in Session.datamcol1+40-43
2019-09-14 16:15Proof-read all docstrings in code; clarify parts fit together for docsmcol4+60-160
2019-09-14 16:14remove metadata, simplify to data only; publicise mouse.training_data and proofread mouse docsmcol2+41-23
2019-09-14 16:13ignore buildmcol1+1-0
2019-09-14 16:13Complete docsmcol6+213-43
2019-09-14 16:11ignore distmcol1+2-2
2019-09-13 12:07add sphinx doc generationmcol14+237-168
2019-09-10 21:11Merge pull request #1 from DuguidLab/refactorm-col19+1652-782
2019-08-17 23:23simplify Pi class and move all GPIO and spout stuff into itmcol5+161-156
2019-08-17 01:57create params dict to house session parametersmcol5+159-154
2019-08-17 01:56add makefile for linting and testingmcol3+41-5
2019-08-12 00:20add append_last_entry default value of falsemcol2+6-6
2019-08-16 01:03bow to the pep8 godsmcol4+119-119
2019-08-16 00:58bow to the flake8 lordsmcol5+189-181
2019-08-15 00:56visible bell in terminal when session endsmcol1+1-0
2019-08-09 02:58add reward utility; remove some redundant data var lines; print when cue is illumintedmcol2+62-12
2019-08-08 21:36dont print iti messages all on new linesmcol1+1-1
2019-08-09 17:26Add base code for ability to append to previous data entrymcol2+27-6
2019-08-08 20:39properly format elapsed time in trial headermcol1+2-2
2019-08-09 16:09print seconds elapsed in trial start headermcol1+3-3
2019-08-08 19:08allow water_at_cue_onset toggle to be reversible; remove redundant start_button remove_edge_detectmcol1+2-3
2019-08-08 16:53Remove all trace of is_iti, and fix reverse_shapingmcol2+3-6
2019-08-08 16:10Merge branch 'master' of https://github.com/DuguidLab/reachmcol4+60-34
2019-08-08 16:10update setup doc a little bit, and pi hat fritzing filemcol3+127-154
2019-08-02 10:13save shaping boolean; default 40m session; ask at end for notes to savemcol2+10-2
2019-08-02 05:22Enable saving data even when interrupting training. Cleaned up data saving code in general.mcol3+91-65
2019-08-02 02:46Data handling is at usable stage. Files all organised properlymclgn9+691-716
2019-08-02 00:50Debug refactor on reach rig pi up to data processing and storagemclgn4+150-84
2019-08-03 00:37huge code refactormcol17+702-1877
2019-08-01 19:34Beginning of monumental code refactoringmclgn7+148-184
2019-08-01 18:16Merge branch 'master' of https://github.com/duguidlab/reachmclgn2+8-0
2019-08-01 18:15revert some test code, update sensor parametersmclgn4+96-66
2019-06-05 15:28Merge branch 'master' of https://github.com/duguidlab/reachmclgn1+0-0
2019-06-05 15:27back up some small changes before testing stepper motor driver at 12vmclgn3+55-20
2019-05-29 16:34make grand strides and terrible stumbles outputting data and trying to reverse touch sensing respectivelymclgn4+95-56
2019-05-27 16:43remove all traces of solenoids and replace with more general water dispensor for claritymclgn4+11-11
2019-05-29 10:33add LED /boot/config.txt params; update syringe parts list and stepsMatt Colligan2+17-12
2019-05-15 18:44refine syringe pump parts listmclgn1+13-9
2019-05-14 16:12Merge branch 'master' of https://github.com/duguidlab/reachmclgn3+43-12
2019-05-14 16:11added syringe pump setup docmclgn1+35-0
2019-04-13 09:12Merge branch 'master' of https://github.com/duguidlab/reachmclgn2+3-3
2019-04-13 09:11incorporate data into metadata codemclgn5+172-148
2019-04-12 08:41Updated setup readme with base and circuitrymclgn1+81-79
2019-04-12 07:54added readme for pi-hat fritzing filemclgn1+13-0
2019-04-11 17:53added pi-hat fritzing file#Matt Colligan2+0-0
2019-04-10 17:53update utilities for smaller bouncetime, update listingmclgn4+32-17
2019-04-10 17:52change ping numbering for pi-hat prototypemclgn1+5-5
2019-04-10 15:45added spout touch sensor to touch utilitymclgn2+32-16
2019-04-05 21:15initialise data variables; neaten file headersmclgn6+48-18
2019-04-05 16:30move gen_config into main from helpers to avoid circular dependency in config modulemclgn3+42-23
2019-04-05 15:43add locale of en_US.UTF-8 for tmux to workmclgn1+1-1
2019-04-05 13:50Merge branch 'master' of https://github.com/duguidlab/reachmatt colligan1+0-0
2019-04-05 13:50move pins to new position on pimatt colligan3+7-7
2019-04-04 18:25changed pin outmatt colligan2+13-24
2019-04-03 18:00added utils; settings dict, re-ordered pins, general honingmatt colligan5+206-62
2019-04-02 16:14Filled out setup.md during setup of first pimcolligan4+121-72
2019-02-21 14:02organise modules into folders; add testing file; incorporate stepper control into spout moduleMatt Colligan11+327-296
2019-02-19 23:34Merge branch 'master' of http://github.com/duguidlab/reachmcolligan1+39-0
2019-02-19 23:33added some proto-gertbot codemcolligan3+85-1
2019-02-17 16:09added gertbot.py drivers with source references in docmcolligan2+987-0
2019-02-12 23:09save metadata to training json filemcolligan3+134-56
2019-02-11 23:28added some start and end inputs and infomcolligan2+69-12
2019-02-11 22:15added help messagemcolligan1+11-2
2019-02-11 22:09full trial sequence is functionalmcolligan4+25-16
2019-02-11 21:24built structure for main reach stage and rewardmcolligan1+47-18
2019-02-09 23:52added pinout pngmcolligan2+0-0
2019-02-09 23:51set up ITI and structure of main task loopmcolligan2+65-25
2019-02-09 21:18added arg parser and ability to specify different config filemcolligan3+72-29
2019-02-09 20:07run->main, moved spout specific definitions into spout-specific modulemcolligan4+140-125
2019-02-09 20:05integrated states of task into main function along with params from config parsermcolligan1+48-10
2019-02-09 20:04added config parser to specify settings via ini filemcolligan2+63-4
2019-02-09 19:59git ignore python bytecode and ini configsmcolligan1+6-0
2019-02-08 18:37added spout count user settingmcolligan1+3-2
2019-02-08 18:36added docs dir with pinout and parts listmcolligan2+6-0
2019-02-07 23:21setup spout and pinsmcolligan2+63-21
2019-02-07 20:18added raspberry pi pinout ascii filemcolligan1+24-0
2019-02-07 20:18ignore python bytecodemcolligan1+2-0
2019-02-07 14:03added helper script; set up pins and planMatt Colligan2+47-2
2019-02-07 12:03added run as main scriptmcolligan1+14-0
2019-02-07 10:12Initial commitmcolligan1+2-0