|
@@ -58,12 +58,15 @@
|
|
|
"metadata": {},
|
|
|
"outputs": [],
|
|
|
"source": [
|
|
|
- "#cfg_filename = os.path.join('profiles', 'gokce_timeSIT_50_52.5.json')\n",
|
|
|
- "#cfg_filename = os.path.join('profiles', 'gokce_timeSIT_90_60.json')\n",
|
|
|
+ "cfg_filename = os.path.join('profiles', 'gokce_timeSIT_50_100.json')\n",
|
|
|
+ "# cfg_filename = os.path.join('profiles', 'gokce_timeSIT_90_99.json')\n",
|
|
|
"#'gokce_timeSIT_90_108.json')\n",
|
|
|
"\n",
|
|
|
- "# cfg_filename = os.path.join('profiles', 'social_test_actual.json')\n",
|
|
|
- "cfg_filename = os.path.join('profiles', 'andrey_ppcSIT_SL_009266.json')"
|
|
|
+ "# cfg_filename = os.path.join('profiles', 'gokce_socialSIT.json')\n",
|
|
|
+ "#cfg_filename = os.path.join('profiles', 'miguel_socialSIT_fireface.json')\n",
|
|
|
+ "# cfg_filename = os.path.join('profiles', 'miguel_socialSIT_fireface_chirp.json')\n",
|
|
|
+ "\n",
|
|
|
+ "# cfg_filename = os.path.join('profiles', 'andrey_ppcSIT_SL_009266.json')"
|
|
|
]
|
|
|
},
|
|
|
{
|
|
@@ -88,19 +91,6 @@
|
|
|
"#print(json.dumps(cfg, indent=4))"
|
|
|
]
|
|
|
},
|
|
|
- {
|
|
|
- "cell_type": "code",
|
|
|
- "execution_count": 4,
|
|
|
- "metadata": {},
|
|
|
- "outputs": [],
|
|
|
- "source": [
|
|
|
- "# check if the sound interface is there\n",
|
|
|
- "import sounddevice as sd\n",
|
|
|
- "asio = [x for x in sd.query_devices() if x['name'].find('ASIO') > 0]\n",
|
|
|
- "#if len(asio) == 0:\n",
|
|
|
- "# raise SystemExit('The sound interface is not found. Please restart the computer')"
|
|
|
- ]
|
|
|
- },
|
|
|
{
|
|
|
"cell_type": "markdown",
|
|
|
"metadata": {},
|
|
@@ -112,7 +102,7 @@
|
|
|
},
|
|
|
{
|
|
|
"cell_type": "code",
|
|
|
- "execution_count": 5,
|
|
|
+ "execution_count": 4,
|
|
|
"metadata": {},
|
|
|
"outputs": [],
|
|
|
"source": [
|
|
@@ -136,6 +126,8 @@
|
|
|
"cfg['sound']['file_path'] = os.path.join(save_to, cfg['sound']['file_path'])\n",
|
|
|
"cfg['position']['background_light'] = os.path.join('assets', cfg['position']['background_light'])\n",
|
|
|
"cfg['position']['background_dark'] = os.path.join('assets', cfg['position']['background_dark'])\n",
|
|
|
+ "if 'wav_file' in cfg['sound']:\n",
|
|
|
+ " cfg['sound']['wav_file'] = os.path.join('assets', cfg['sound']['wav_file'])\n",
|
|
|
"if 'continuous' in cfg['sound']:\n",
|
|
|
" cfg['sound']['continuous']['wav_file'] = os.path.join('assets', cfg['sound']['continuous']['wav_file'])\n",
|
|
|
" \n",
|
|
@@ -153,7 +145,7 @@
|
|
|
},
|
|
|
{
|
|
|
"cell_type": "code",
|
|
|
- "execution_count": 6,
|
|
|
+ "execution_count": 5,
|
|
|
"metadata": {},
|
|
|
"outputs": [],
|
|
|
"source": [
|
|
@@ -163,7 +155,7 @@
|
|
|
},
|
|
|
{
|
|
|
"cell_type": "code",
|
|
|
- "execution_count": 7,
|
|
|
+ "execution_count": 6,
|
|
|
"metadata": {},
|
|
|
"outputs": [],
|
|
|
"source": [
|
|
@@ -174,7 +166,7 @@
|
|
|
},
|
|
|
{
|
|
|
"cell_type": "code",
|
|
|
- "execution_count": 8,
|
|
|
+ "execution_count": 7,
|
|
|
"metadata": {},
|
|
|
"outputs": [],
|
|
|
"source": [
|
|
@@ -189,7 +181,7 @@
|
|
|
},
|
|
|
{
|
|
|
"cell_type": "code",
|
|
|
- "execution_count": 9,
|
|
|
+ "execution_count": 8,
|
|
|
"metadata": {},
|
|
|
"outputs": [],
|
|
|
"source": [
|
|
@@ -215,7 +207,7 @@
|
|
|
},
|
|
|
{
|
|
|
"cell_type": "code",
|
|
|
- "execution_count": 10,
|
|
|
+ "execution_count": 9,
|
|
|
"metadata": {
|
|
|
"scrolled": true
|
|
|
},
|
|
@@ -227,6 +219,7 @@
|
|
|
"Webcam stream 1024.0:768.0 at 30.00 FPS started\n",
|
|
|
"Position tracker stopped\n",
|
|
|
"Video writer stopped\n",
|
|
|
+ "Video writer stopped\n",
|
|
|
"Camera released\n"
|
|
|
]
|
|
|
}
|
|
@@ -263,10 +256,17 @@
|
|
|
"vs = WebcamStream(cfg['camera'])\n",
|
|
|
"vs.start()\n",
|
|
|
"\n",
|
|
|
- "# init video recorder\n",
|
|
|
- "vw = VideoWriter(status, vs, cfg['video'])\n",
|
|
|
+ "# init video recorders\n",
|
|
|
+ "vw = VideoWriter(status, vs, cfg['video']) # recorder with infos\n",
|
|
|
"vw.start()\n",
|
|
|
"\n",
|
|
|
+ "cfg_video_raw = dict(cfg['video'])\n",
|
|
|
+ "cfg_video_raw['file_path'] = os.path.join(save_to, 'raw.avi')\n",
|
|
|
+ "cfg_video_raw['csv_path'] = os.path.join(save_to, 'raw.csv')\n",
|
|
|
+ "cfg_video_raw['frame_attr_name'] = 'frame_raw'\n",
|
|
|
+ "vwr = VideoWriter(status, vs, cfg_video_raw) # recorder of raw video\n",
|
|
|
+ "vwr.start()\n",
|
|
|
+ "\n",
|
|
|
"# init microphone controller, if required\n",
|
|
|
"if cfg['microphones']['record_audio']:\n",
|
|
|
" mc = mp.Process(target=MicrophoneController.run, args=(status,cfg[\"microphones\"]))\n",
|
|
@@ -280,7 +280,7 @@
|
|
|
"dc = SITDisplay(pt, cfg['video'])\n",
|
|
|
"\n",
|
|
|
"# playing sound in a separate process for performance\n",
|
|
|
- "sc = mp.Process(target=SoundController.run, args=(sound, status, cfg['sound']))\n",
|
|
|
+ "sc = mp.Process(target=SoundController.run, args=(sound, status, cfg['sound'], SoundController.commutator))\n",
|
|
|
"sc.start()\n",
|
|
|
"\n",
|
|
|
"cfg_pos = cfg['position']\n",
|
|
@@ -324,6 +324,7 @@
|
|
|
" \n",
|
|
|
" # ---------- rendering logic -----------\n",
|
|
|
" frame = vs.read()\n",
|
|
|
+ " \n",
|
|
|
" if frame is None:\n",
|
|
|
" time.sleep(0.1)\n",
|
|
|
" continue # wait for the stream\n",
|
|
@@ -342,7 +343,6 @@
|
|
|
" if len(islands) > 0: # target island X, Y\n",
|
|
|
" target = [i for i in islands if not i.is_distractor][0]\n",
|
|
|
" text_infos.append('Target: %.3f %.3f' % (target.x, target.y))\n",
|
|
|
- "# print(frame.shape) \n",
|
|
|
" text_infos.append('Time: %.2f' % float(c_time - t_start) if t_start is not None else 'Time: Idle') # stopwatch\n",
|
|
|
" text_infos.append('Trial: %.2f' % float(cfg_exp['trial_duration'] - (c_time - trial_start)) if phase == 1 else 'Trial: not started')\n",
|
|
|
" text_infos.append('Trial: %s' % trial)\n",
|
|
@@ -350,6 +350,7 @@
|
|
|
" text_infos.append('In target: %.2f' % float(c_time - target_since) if target_since is not None else 'In target: --')\n",
|
|
|
" text_infos.append('ITI distance: %.2f' % iti_distance if iti_distance > 0 else 'ITI distance: --')\n",
|
|
|
"\n",
|
|
|
+ " vs.frame_raw = frame # save raw frame\n",
|
|
|
" frame, frame_to_save = dc.render(frame, status, islands=islands, angles=angles, text_infos=text_infos)\n",
|
|
|
" \n",
|
|
|
" # assign the frame back to the video stream for other controllers\n",
|
|
@@ -374,7 +375,8 @@
|
|
|
"\n",
|
|
|
" elif c_time - target_since > cfg_exp['target_duration']: # successful trial\n",
|
|
|
" log_event(c_time, round(tgt.x, 4), round(tgt.y, 4), round(tgt.r, 4), trial, 1) # log trial success\n",
|
|
|
- " board.feed()\n",
|
|
|
+ " tf = threading.Timer(0, board.feed, args=[])\n",
|
|
|
+ " tf.start()\n",
|
|
|
" \n",
|
|
|
" # init inter-trial interval and new trial\n",
|
|
|
" trial_start = c_time + cfg_exp['iti_duration'] + 5 * np.random.rand() # random b/w 20-25 sec\n",
|
|
@@ -590,7 +592,7 @@
|
|
|
" \n",
|
|
|
" cv2.destroyAllWindows()\n",
|
|
|
" sc.join()\n",
|
|
|
- " for ctrl in [pt, vw, vs]:\n",
|
|
|
+ " for ctrl in [pt, vw, vwr, vs]:\n",
|
|
|
" ctrl.stop()\n",
|
|
|
"\n",
|
|
|
" # stop microphones recording process\n",
|
|
@@ -611,7 +613,7 @@
|
|
|
},
|
|
|
{
|
|
|
"cell_type": "code",
|
|
|
- "execution_count": 11,
|
|
|
+ "execution_count": 10,
|
|
|
"metadata": {},
|
|
|
"outputs": [],
|
|
|
"source": [
|
|
@@ -623,7 +625,7 @@
|
|
|
},
|
|
|
{
|
|
|
"cell_type": "code",
|
|
|
- "execution_count": 12,
|
|
|
+ "execution_count": 11,
|
|
|
"metadata": {},
|
|
|
"outputs": [
|
|
|
{
|
|
@@ -633,7 +635,7 @@
|
|
|
"traceback": [
|
|
|
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
|
|
|
"\u001b[1;31mIndexError\u001b[0m Traceback (most recent call last)",
|
|
|
- "\u001b[1;32m<ipython-input-12-df6d003c4298>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m\u001b[0m\n\u001b[0;32m 3\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 4\u001b[0m \u001b[1;31m# do pack data to HDF5\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 5\u001b[1;33m \u001b[0mh5name\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mpack\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0msession_path\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 6\u001b[0m \u001b[0mtrial\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;36m0\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
|
|
|
+ "\u001b[1;32m<ipython-input-11-df6d003c4298>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m\u001b[0m\n\u001b[0;32m 3\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 4\u001b[0m \u001b[1;31m# do pack data to HDF5\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 5\u001b[1;33m \u001b[0mh5name\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mpack\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0msession_path\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 6\u001b[0m \u001b[0mtrial\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;36m0\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
|
|
|
"\u001b[1;32mD:\\runSIT\\..\\pipeline\\postprocessing\\pack.py\u001b[0m in \u001b[0;36mpack\u001b[1;34m(session_path)\u001b[0m\n\u001b[0;32m 165\u001b[0m \u001b[1;31m# head direction\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 166\u001b[0m \u001b[0mtemp_tl\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mcolumn_stack\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mpos_at_freq\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;36m0\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mx_smooth\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0my_smooth\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mspeed\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 167\u001b[1;33m \u001b[0mhd\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mhead_direction\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mtemp_tl\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 168\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 169\u001b[0m \u001b[1;31m# trial numbers\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
|
|
|
"\u001b[1;32mD:\\runSIT\\..\\pipeline\\postprocessing\\head_direction.py\u001b[0m in \u001b[0;36mhead_direction\u001b[1;34m(tl, hd_update_speed)\u001b[0m\n\u001b[0;32m 22\u001b[0m \u001b[0mcrit\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mwhere\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mnp\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mdiff\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0midle_idxs\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;33m>\u001b[0m \u001b[1;36m1\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m0\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 23\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 24\u001b[1;33m \u001b[0midle_periods\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mappend\u001b[0m\u001b[1;33m(\u001b[0m \u001b[1;33m(\u001b[0m\u001b[0midle_idxs\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m0\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0midle_idxs\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mcrit\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m0\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;33m)\u001b[0m \u001b[1;31m# first idle period\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 25\u001b[0m \u001b[1;32mfor\u001b[0m \u001b[0mi\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mpoint\u001b[0m \u001b[1;32min\u001b[0m \u001b[0menumerate\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mcrit\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m-\u001b[0m\u001b[1;36m1\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 26\u001b[0m \u001b[0midx_start\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0midle_idxs\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mcrit\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mi\u001b[0m\u001b[1;33m]\u001b[0m \u001b[1;33m+\u001b[0m \u001b[1;36m1\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
|
|
|
"\u001b[1;31mIndexError\u001b[0m: index 0 is out of bounds for axis 0 with size 0"
|
|
@@ -834,7 +836,9 @@
|
|
|
"execution_count": null,
|
|
|
"metadata": {},
|
|
|
"outputs": [],
|
|
|
- "source": []
|
|
|
+ "source": [
|
|
|
+ "\n"
|
|
|
+ ]
|
|
|
}
|
|
|
],
|
|
|
"metadata": {
|
|
@@ -853,7 +857,7 @@
|
|
|
"name": "python",
|
|
|
"nbconvert_exporter": "python",
|
|
|
"pygments_lexer": "ipython3",
|
|
|
- "version": "3.10.8"
|
|
|
+ "version": "3.8.8"
|
|
|
}
|
|
|
},
|
|
|
"nbformat": 4,
|