Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Random reward #1267

Open
wants to merge 190 commits into
base: develop
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
190 commits
Select commit Hold shift + click to select a range
0c984e1
adding the optical tagging icon
XX-Yin Dec 23, 2024
dba641c
adding optogenetics tagging to toolbar
XX-Yin Dec 23, 2024
2e12725
adding optical tagging to the main function
XX-Yin Dec 23, 2024
d54b6aa
adding OpticalTaggingDialog
XX-Yin Dec 23, 2024
66debaf
adding OpticalTagging ui
XX-Yin Dec 23, 2024
a37f269
loading OpticalTaggingDialog
XX-Yin Dec 23, 2024
11118db
connected to _OpticalTagging
XX-Yin Dec 23, 2024
1f5143f
set it as checkable
XX-Yin Dec 23, 2024
37ea62c
updated the Optical Tagging ui
XX-Yin Dec 23, 2024
70a2e7c
updated the optical tagging ui
XX-Yin Dec 23, 2024
fc6aa8e
set Start checkable
XX-Yin Dec 23, 2024
6f6a191
toggle color and disable widgets
XX-Yin Dec 23, 2024
c67388c
enable widgets
XX-Yin Dec 23, 2024
620ee2d
updating the ui
XX-Yin Dec 23, 2024
ff20908
separating laser 1 color and laser 2 color
XX-Yin Dec 23, 2024
1421618
prototype
XX-Yin Dec 23, 2024
2c33e13
updated the name
XX-Yin Dec 23, 2024
e63e1f1
produce waveform
XX-Yin Dec 23, 2024
964a838
changed the data type to float
XX-Yin Dec 23, 2024
7b434a2
grammar
XX-Yin Dec 23, 2024
9fd8f66
_generate_random_conditions
XX-Yin Dec 24, 2024
d6711f0
generate random conditions
XX-Yin Dec 24, 2024
47dea1e
changing pulse duration to ms
XX-Yin Dec 24, 2024
ca83df6
get input voltage
XX-Yin Dec 24, 2024
8761665
removing target power
XX-Yin Dec 24, 2024
4c9323c
updating fit_calibration_results
XX-Yin Dec 24, 2024
d7b6eb6
adding s
XX-Yin Dec 24, 2024
7e89ece
produce the waveform
XX-Yin Dec 24, 2024
f006eed
transfer to float
XX-Yin Dec 24, 2024
8561395
updating duration_each_cycle
XX-Yin Dec 24, 2024
9c45311
send waveform and initiate the laser
XX-Yin Dec 24, 2024
9e09619
update the overview
XX-Yin Dec 24, 2024
e14f3fa
adding interval
XX-Yin Dec 30, 2024
1cb0374
adding interval
XX-Yin Dec 30, 2024
c88d7c0
adding label show current
XX-Yin Dec 30, 2024
3954716
adding show current cycle and parameters
XX-Yin Dec 30, 2024
d92e7f0
adding emergency stop
XX-Yin Dec 30, 2024
fb98c6d
finish start
XX-Yin Dec 30, 2024
e4eab19
saving optical tagging parameters
XX-Yin Dec 30, 2024
e66c714
open and save OpticalTagging_dialog
XX-Yin Dec 30, 2024
98e2cfd
set Start checkable
XX-Yin Dec 30, 2024
455bb4a
changing extend to append
XX-Yin Dec 30, 2024
261c981
adding epoch and iteration
XX-Yin Dec 30, 2024
59e3750
changing name to Cycles_each_condition
XX-Yin Dec 30, 2024
19cdd7c
changing the name
XX-Yin Dec 30, 2024
0e649f3
showing only cycles
XX-Yin Dec 30, 2024
799a6ec
correcting the syntax
XX-Yin Dec 30, 2024
9beb543
correcting grammar and naming
XX-Yin Dec 30, 2024
d6a288e
Changing the channel name
XX-Yin Dec 30, 2024
6a2e9c2
adding QApplication.processEvents()
XX-Yin Dec 30, 2024
24af493
adding unit
XX-Yin Dec 30, 2024
fc1fc90
removing receive
XX-Yin Dec 30, 2024
a478726
saving success_tag and laser_start_timestamp
XX-Yin Dec 30, 2024
68dd906
removing while
XX-Yin Dec 30, 2024
048a938
updating interval_between_cycles_sampled and location_tag_sampled_all
XX-Yin Dec 30, 2024
536535b
grammar
XX-Yin Dec 30, 2024
28494ac
simplify
XX-Yin Dec 30, 2024
0ae42ad
change the location of information label
XX-Yin Dec 30, 2024
34d58cd
changing the color of Start
XX-Yin Dec 30, 2024
f68ef0d
changing the size of the information label
XX-Yin Dec 30, 2024
8c87ffb
adding the cycle finish tag
XX-Yin Dec 30, 2024
a5709d1
removing QApplication.processEvents()
XX-Yin Dec 30, 2024
e50d4b1
changing the location
XX-Yin Dec 30, 2024
5bd36dd
removing the thread finish tag
XX-Yin Dec 30, 2024
661225a
adding one to the tag
XX-Yin Dec 30, 2024
a1677c5
updating the worker
XX-Yin Dec 30, 2024
a31546c
changing the worker name
XX-Yin Dec 30, 2024
f9bb53d
updating the worker
XX-Yin Dec 30, 2024
053800f
Merge branch 'optical_tagging' of https://github.com/AllenNeuralDynam…
XX-Yin Dec 30, 2024
f5553fe
removing progress call
XX-Yin Dec 30, 2024
54b5c6b
revert
XX-Yin Dec 30, 2024
bc28938
adding WorkerTagging
XX-Yin Dec 30, 2024
8fd3b82
using the worker tagging
XX-Yin Dec 30, 2024
1a045c9
changing the WorkerSignalsTagging
XX-Yin Dec 30, 2024
efc1db5
toggle the Start button when finishing
XX-Yin Dec 30, 2024
3b97684
saving the laser_start_timestamp and success_tag
XX-Yin Dec 30, 2024
997c6f1
changing the font size
XX-Yin Dec 30, 2024
bcea79b
adjusting the font size
XX-Yin Dec 30, 2024
3ac5451
changing the show order
XX-Yin Dec 30, 2024
8d785db
adding the save button
XX-Yin Dec 30, 2024
eefb2b2
disable checkable
XX-Yin Dec 30, 2024
03bb740
save the optical tagging results
XX-Yin Dec 30, 2024
a8e909c
ID typo
XX-Yin Dec 30, 2024
9908c12
changing the saving format
XX-Yin Dec 30, 2024
f96674c
changing the position
XX-Yin Dec 30, 2024
d41edd4
set button not default
XX-Yin Dec 30, 2024
04ccdaa
ID typo
XX-Yin Dec 30, 2024
1584c5d
correcting syntax error
XX-Yin Dec 30, 2024
1e49bb6
adding the start and end time
XX-Yin Dec 30, 2024
d4a7c90
toggle the start button
XX-Yin Dec 30, 2024
c93233d
adding the optical tagging to the metadata
XX-Yin Dec 30, 2024
d8ef049
updating the optical tagging metadata
XX-Yin Dec 30, 2024
a00681d
check empty
XX-Yin Dec 30, 2024
ebd969c
changing the outputparameters
XX-Yin Dec 30, 2024
4204771
check empty optical_tagging_par
XX-Yin Dec 30, 2024
6fb44b6
deduplicate
XX-Yin Dec 30, 2024
186a85d
updating the behavior GUI
XX-Yin Dec 30, 2024
f278aa2
adding random reward ui
XX-Yin Dec 31, 2024
6f73ef7
adding random reward to the toolbar
XX-Yin Dec 31, 2024
39a9390
adding random reward to the behavior GUI
XX-Yin Dec 31, 2024
0e4cc86
adding fields to the random reward panel
XX-Yin Dec 31, 2024
52a5616
adding RandomRewardDialog
XX-Yin Dec 31, 2024
0bcb5e8
adding random reward to main
XX-Yin Dec 31, 2024
6144ee0
set checkable
XX-Yin Dec 31, 2024
f147fc2
set checkable
XX-Yin Dec 31, 2024
fcc4536
open random reward
XX-Yin Dec 31, 2024
b1ee7b8
connecting random reward
XX-Yin Dec 31, 2024
bc2c1b4
deleting dialogs copy
XX-Yin Dec 31, 2024
11b47ef
Merge branch 'optical_tagging' into random-reward
XX-Yin Dec 31, 2024
85c60f9
toggle color and disable/enable fields
XX-Yin Dec 31, 2024
ebc2009
_generate_random_conditions
XX-Yin Dec 31, 2024
478be08
_start_random_reward
XX-Yin Dec 31, 2024
804d68f
adding multiple functions
XX-Yin Dec 31, 2024
64cfe5d
adding emergency stop
XX-Yin Dec 31, 2024
d8d72d9
adding emergency stop
XX-Yin Dec 31, 2024
5cef84c
move sleep to the end
XX-Yin Dec 31, 2024
eecee5a
adding RandomWater_Left and RandomWater_Right
XX-Yin Dec 31, 2024
cc2136b
adding random water to bonsai workflow
XX-Yin Dec 31, 2024
79e8ed2
giving reward
XX-Yin Dec 31, 2024
1b8bf2e
adding RandomWaterVolume to water suggestion
XX-Yin Dec 31, 2024
109e7be
adding timestamp
XX-Yin Dec 31, 2024
6a3257b
adding MainWindow
XX-Yin Dec 31, 2024
f9d9580
adding random volume to random_reward_par
XX-Yin Dec 31, 2024
0c63b5a
changing the emergency stop to start over
XX-Yin Dec 31, 2024
ac228e3
adding clear data button and function
XX-Yin Dec 31, 2024
1c971d8
changing dataformat to float
XX-Yin Dec 31, 2024
b9c206d
typo
XX-Yin Dec 31, 2024
f909be4
typo
XX-Yin Dec 31, 2024
4b48761
typo
XX-Yin Dec 31, 2024
0018307
changing the name
XX-Yin Dec 31, 2024
8fd2baf
wait for the thread to finish
XX-Yin Dec 31, 2024
cd9675f
updating the reward volume when the thread finishes
XX-Yin Dec 31, 2024
2bb5300
removing print
XX-Yin Dec 31, 2024
9bd313d
using the spout name
XX-Yin Dec 31, 2024
e46c782
adding save button
XX-Yin Dec 31, 2024
dd4e628
not checkable
XX-Yin Dec 31, 2024
717b1d2
saving the random reward results
XX-Yin Jan 1, 2025
90d6ee1
adding 0.2
XX-Yin Jan 1, 2025
baff49a
saving random reward parameters
XX-Yin Jan 1, 2025
452861f
loading random reward parameters
XX-Yin Jan 1, 2025
4106637
removing copy
XX-Yin Jan 1, 2025
9733096
adding random reward stimulus
XX-Yin Jan 1, 2025
296bc9d
handle edge cases
XX-Yin Jan 1, 2025
5be817c
Saving is permitted when we only have random reward stimulus
XX-Yin Jan 1, 2025
ae8dbbd
changing the logic
XX-Yin Jan 1, 2025
fe6276a
adding random reward to the session metadata
XX-Yin Jan 1, 2025
9a0e342
get software name ealier
XX-Yin Jan 1, 2025
7c40576
changing name to start over
XX-Yin Jan 2, 2025
ac3defb
changing name to start over
XX-Yin Jan 2, 2025
d85c14c
adding clear data button
XX-Yin Jan 2, 2025
81d5cc7
changing the button name to Restart
XX-Yin Jan 2, 2025
4de97c1
Merge branch 'optical_tagging' into random-reward
XX-Yin Jan 2, 2025
0b6e9ff
changing the name to Restart
XX-Yin Jan 2, 2025
d5e6b60
format
XX-Yin Jan 2, 2025
523a3ee
adding random reward water to total water
XX-Yin Jan 2, 2025
b168bf3
saving the data
XX-Yin Jan 2, 2025
f3c4c54
adding the MainWindow
XX-Yin Jan 2, 2025
9bf33a7
restart logging
XX-Yin Jan 2, 2025
4fd3d43
saving the data
XX-Yin Jan 2, 2025
ee7bdea
Merge branch 'optical_tagging' into random-reward
XX-Yin Jan 2, 2025
cbac6f0
adding logging type check
XX-Yin Jan 2, 2025
fa63486
removing check logging type -1
XX-Yin Jan 2, 2025
04a92b1
changing to currentText
XX-Yin Jan 2, 2025
40dbb9d
move sleep to the end
XX-Yin Jan 2, 2025
c1c733c
check the optical tagging time
XX-Yin Jan 2, 2025
c041268
Merge branch 'optical_tagging' into random-reward
XX-Yin Jan 2, 2025
dcc2f29
adding start and end time
XX-Yin Jan 2, 2025
ffa6fca
force the input_voltage to be 0
XX-Yin Jan 2, 2025
df5be08
adding check reward collection combobox
XX-Yin Jan 2, 2025
89d7766
checking reward collection
XX-Yin Jan 2, 2025
375c914
adding label_show_2
XX-Yin Jan 2, 2025
6a7d998
updating the reward collection check
XX-Yin Jan 2, 2025
25bec31
removing information 2
XX-Yin Jan 2, 2025
5439cba
adding user stop
XX-Yin Jan 2, 2025
6cc4bca
adding not
XX-Yin Jan 2, 2025
bdcb8e7
check finish of the thread
XX-Yin Jan 2, 2025
5a69e12
check index
XX-Yin Jan 2, 2025
c6a1a04
sleep again only when the start is checked
XX-Yin Jan 2, 2025
7b245b1
continue if received licks
XX-Yin Jan 2, 2025
2eddeb2
don't start a new thread
XX-Yin Jan 2, 2025
4ccb062
adding thread finish tag
XX-Yin Jan 2, 2025
025c54d
waiting for the finish of the current cycle
XX-Yin Jan 2, 2025
71cb684
Merge branch 'optical_tagging' into random-reward
XX-Yin Jan 2, 2025
6c9c700
changing the start_time and end_time
XX-Yin Jan 2, 2025
e69ca51
changing the start time and end time
XX-Yin Jan 2, 2025
22e7e0c
return in empty start or end time
XX-Yin Jan 2, 2025
eb48e51
check left or right licks
XX-Yin Jan 2, 2025
6061643
typo
XX-Yin Jan 2, 2025
d650a2f
adding side
XX-Yin Jan 2, 2025
2b48714
changing the name
XX-Yin Jan 2, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
930 changes: 927 additions & 3 deletions src/foraging_gui/Dialogs.py

Large diffs are not rendered by default.

68 changes: 53 additions & 15 deletions src/foraging_gui/Foraging.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@
import foraging_gui.rigcontrol as rigcontrol
from foraging_gui.Visualization import PlotV,PlotLickDistribution,PlotTimeDistribution
from foraging_gui.Dialogs import OptogeneticsDialog,WaterCalibrationDialog,CameraDialog,MetadataDialog
from foraging_gui.Dialogs import LaserCalibrationDialog
from foraging_gui.Dialogs import LaserCalibrationDialog,OpticalTaggingDialog,RandomRewardDialog
from foraging_gui.Dialogs import LickStaDialog,TimeDistributionDialog
from foraging_gui.Dialogs import AutoTrainDialog, MouseSelectorDialog
from foraging_gui.MyFunctions import GenerateTrials, Worker,TimerWorker, NewScaleSerialY, EphysRecording
Expand Down Expand Up @@ -184,6 +184,8 @@ def __init__(self, parent=None,box_number=1,start_bonsai_ide=True):
self.OpenLaserCalibration=0
self.OpenCamera=0
self.OpenMetadata=0
self.OpenOpticalTagging=0
self.OpenRandomReward=0
self.NewTrialRewardOrder=0
self.LickSta=0
self.LickSta_ToInitializeVisual=1
Expand All @@ -205,6 +207,8 @@ def __init__(self, parent=None,box_number=1,start_bonsai_ide=True):
self._LaserCalibration()# to open the laser calibration panel
self._WaterCalibration()# to open the water calibration panel
self._Camera()
self._OpticalTagging()
self._RandomReward()
self._InitializeMotorStage()
self._load_stage()
self._Metadata()
Expand Down Expand Up @@ -319,6 +323,8 @@ def connectSignalsSlots(self):
self.action_About.triggered.connect(self._about)
self.action_Camera.triggered.connect(self._Camera)
self.actionMeta_Data.triggered.connect(self._Metadata)
self.actionOptical_Tagging.triggered.connect(self._OpticalTagging)
self.actionRandom_Reward.triggered.connect(self._RandomReward)
self.action_Optogenetics.triggered.connect(self._Optogenetics)
self.actionLicks_sta.triggered.connect(self._LickSta)
self.actionTime_distribution.triggered.connect(self._TimeDistribution)
Expand Down Expand Up @@ -2338,6 +2344,26 @@ def _Camera(self):
else:
self.Camera_dialog.hide()

def _OpticalTagging(self):
'''Open the optical tagging dialog'''
if self.OpenOpticalTagging==0:
self.OpticalTagging_dialog = OpticalTaggingDialog(MainWindow=self)
self.OpenOpticalTagging=1
if self.actionOptical_Tagging.isChecked()==True:
self.OpticalTagging_dialog.show()
else:
self.OpticalTagging_dialog.hide()

def _RandomReward(self):
'''Open the random reward dialog'''
if self.OpenRandomReward==0:
self.RandomReward_dialog = RandomRewardDialog(MainWindow=self)
self.OpenRandomReward=1
if self.actionRandom_Reward.isChecked()==True:
self.RandomReward_dialog.show()
else:
self.RandomReward_dialog.hide()

def _Metadata(self):
'''Open the metadata dialog'''
if self.OpenMetadata==0:
Expand Down Expand Up @@ -2564,7 +2590,7 @@ def _Save(self,ForceSave=0,SaveAs=0,SaveContinue=0,BackupSave=0):
QtWidgets.QComboBox,QtWidgets.QDoubleSpinBox,QtWidgets.QSpinBox))}
widget_dict.update({w.objectName(): w for w in self.TrainingParameters.findChildren(QtWidgets.QDoubleSpinBox)})
self._Concat(widget_dict,Obj,'None')
dialogs = ['LaserCalibration_dialog', 'Opto_dialog', 'Camera_dialog','Metadata_dialog']
dialogs = ['LaserCalibration_dialog', 'Opto_dialog', 'Camera_dialog','Metadata_dialog','OpticalTagging_dialog','RandomReward_dialog']
for dialog_name in dialogs:
if hasattr(self, dialog_name):
widget_dict = {w.objectName(): w for w in getattr(self, dialog_name).findChildren(
Expand Down Expand Up @@ -2665,6 +2691,9 @@ def _Save(self,ForceSave=0,SaveAs=0,SaveContinue=0,BackupSave=0):
# save manual water
Obj['ManualWaterVolume']=self.ManualWaterVolume

# save the random water
Obj['RandomWaterVolume']=self.RandomReward_dialog.random_reward_par['RandomWaterVolume']

# save camera start/stop time
Obj['Camera_dialog']['camera_start_time']=self.Camera_dialog.camera_start_time
Obj['Camera_dialog']['camera_stop_time']=self.Camera_dialog.camera_stop_time
Expand All @@ -2681,6 +2710,12 @@ def _Save(self,ForceSave=0,SaveAs=0,SaveContinue=0,BackupSave=0):
Obj['MetadataFolder']=self.MetadataFolder
Obj['SaveFile']=self.SaveFile

# save optical tagging parameters
Obj['optical_tagging_par']=self.OpticalTagging_dialog.optical_tagging_par

# save random reward parameters
Obj['random_reward_par']=self.RandomReward_dialog.random_reward_par

# generate the metadata file and update slims
try:
# save the metadata collected in the metadata dialogue
Expand All @@ -2702,8 +2737,7 @@ def _Save(self,ForceSave=0,SaveAs=0,SaveContinue=0,BackupSave=0):
if self.BaseWeight.text() != '' and self.WeightAfter.text() != '' and self.behavior_session_model.subject not in ['0','1','2','3','4','5','6','7','8','9','10']:
self._AddWaterLogResult(session)
self.bias_indicator.clear() # prepare for new session



except Exception as e:
logging.warning('Meta data is not saved!', extra= {'tags': {self.warning_log_tag}})
logging.error('Error generating session metadata: '+str(e))
Expand Down Expand Up @@ -3046,7 +3080,7 @@ def _Open(self,open_last = False,input_file = ''):
self.Obj = Obj

widget_dict={}
dialogs = ['LaserCalibration_dialog', 'Opto_dialog', 'Camera_dialog','centralwidget','TrainingParameters']
dialogs = ['LaserCalibration_dialog', 'Opto_dialog', 'Camera_dialog','centralwidget','TrainingParameters','OpticalTagging_dialog','RandomReward_dialog']
for dialog_name in dialogs:
if hasattr(self, dialog_name):
widget_types = (QtWidgets.QPushButton, QtWidgets.QLineEdit, QtWidgets.QTextEdit,
Expand Down Expand Up @@ -4060,14 +4094,15 @@ def _Start(self):
try:
# Do not start a new session if the camera is already open, this means the session log has been started or the existing session has not been completed.
if (not (self.Camera_dialog.StartRecording.isChecked() and self.Camera_dialog.AutoControl.currentText()=='No')) and (not self.FIP_started):
# Turn off the camera recording
self.Camera_dialog.StartRecording.setChecked(False)
# Turn off the preview if it is on and the autocontrol is on, which can make sure the trigger is off before starting the logging.
if self.Camera_dialog.AutoControl.currentText()=='Yes' and self.Camera_dialog.StartPreview.isChecked():
self.Camera_dialog.StartPreview.setChecked(False)
# sleep for 1 second to make sure the trigger is off
time.sleep(1)
self.Ot_log_folder=self._restartlogging()
if self.logging_type!=0:
# Turn off the camera recording
self.Camera_dialog.StartRecording.setChecked(False)
# Turn off the preview if it is on and the autocontrol is on, which can make sure the trigger is off before starting the logging.
if self.Camera_dialog.AutoControl.currentText()=='Yes' and self.Camera_dialog.StartPreview.isChecked():
self.Camera_dialog.StartPreview.setChecked(False)
# sleep for 1 second to make sure the trigger is off
time.sleep(1)
self.Ot_log_folder=self._restartlogging()
except Exception as e:
if 'ConnectionAbortedError' in str(e):
logging.info('lost bonsai connection: restartlogging()')
Expand Down Expand Up @@ -4501,7 +4536,6 @@ def _GiveLeft(self):
logger.info('Give left manual water (ul): '+str(np.round(float(self.TP_GiveWaterL_volume),3)),
extra={'tags': [self.warning_log_tag]})


def _give_reserved_water(self,valve=None):
'''give reserved water usually after the go cue'''
if valve=='left':
Expand Down Expand Up @@ -4599,7 +4633,11 @@ def _UpdateSuggestedWater(self,ManualWater=0):
ManualWaterVolume=np.sum(self.ManualWaterVolume)
else:
ManualWaterVolume=0
water_in_session=BS_TotalReward+ManualWaterVolume

if hasattr(self,'RandomReward_dialog'):
RandomWaterVolume=np.sum(self.RandomReward_dialog.random_reward_par['RandomWaterVolume'])

water_in_session=BS_TotalReward+ManualWaterVolume+RandomWaterVolume
self.water_in_session=water_in_session
if self.WeightAfter.text()!='' and self.BaseWeight.text()!='' and self.TargetRatio.text()!='':
# calculate the suggested water
Expand Down
51 changes: 36 additions & 15 deletions src/foraging_gui/ForagingGUI.ui
Original file line number Diff line number Diff line change
Expand Up @@ -691,8 +691,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>627</width>
<height>325</height>
<width>621</width>
<height>334</height>
</rect>
</property>
<layout class="QHBoxLayout" name="horizontalLayout">
Expand Down Expand Up @@ -1194,8 +1194,7 @@
</widget>
</item>
<item>
<widget class="QWidget" name="groupBox_6">
</widget>
<widget class="QWidget" name="groupBox_6" native="true"/>
</item>
</layout>
</widget>
Expand Down Expand Up @@ -1534,8 +1533,7 @@
</widget>
</item>
<item>
<widget class="QWidget" name="groupBox_6">
</widget>
<widget class="QWidget" name="groupBox_6" native="true"/>
</item>
<item>
<widget class="QWidget" name="widget" native="true">
Expand Down Expand Up @@ -1731,7 +1729,7 @@
<property name="value">
<double>0.030000000000000</double>
</property>
<property name="disabled">
<property name="disabled" stdset="0">
<bool>true</bool>
</property>
</widget>
Expand Down Expand Up @@ -1759,8 +1757,8 @@
<property name="value">
<double>0.030000000000000</double>
</property>
<property name="disabled">
<bool>true</bool>
<property name="disabled" stdset="0">
<bool>true</bool>
</property>
</widget>
</item>
Expand Down Expand Up @@ -1813,7 +1811,7 @@
<property name="value">
<double>3.000000000000000</double>
</property>
<property name="disabled">
<property name="disabled" stdset="0">
<bool>true</bool>
</property>
</widget>
Expand Down Expand Up @@ -1841,9 +1839,9 @@
<property name="value">
<double>3.000000000000000</double>
</property>
<property name="disabled">
<bool>true</bool>
</property>
<property name="disabled" stdset="0">
<bool>true</bool>
</property>
</widget>
</item>
<item row="2" column="3">
Expand Down Expand Up @@ -2344,7 +2342,7 @@ Double dipping:
<rect>
<x>0</x>
<y>0</y>
<width>1072</width>
<width>1177</width>
<height>463</height>
</rect>
</property>
Expand Down Expand Up @@ -4856,6 +4854,8 @@ Current pair:
<addaction name="action_Calibration"/>
<addaction name="actionLaser_Calibration"/>
<addaction name="actionMeta_Data"/>
<addaction name="actionOptical_Tagging"/>
<addaction name="actionRandom_Reward"/>
<addaction name="separator"/>
<addaction name="menuSimulation"/>
<addaction name="actionDrawing_after_stopping"/>
Expand Down Expand Up @@ -4982,6 +4982,7 @@ Current pair:
</attribute>
<addaction name="action_Calibration"/>
<addaction name="actionLaser_Calibration"/>
<addaction name="actionOptical_Tagging"/>
<addaction name="actionMeta_Data"/>
</widget>
<widget class="QToolBar" name="toolBar_3">
Expand Down Expand Up @@ -5246,6 +5247,26 @@ Current pair:
<string>Open video folder</string>
</property>
</action>
<action name="actionOptical_Tagging">
<property name="checkable">
<bool>true</bool>
</property>
<property name="icon">
<iconset>
<normaloff>resources/OpticalTagging.jpg</normaloff>resources/OpticalTagging.jpg</iconset>
</property>
<property name="text">
<string>Optical Tagging</string>
</property>
</action>
<action name="actionRandom_Reward">
<property name="checkable">
<bool>true</bool>
</property>
<property name="text">
<string>Random Reward</string>
</property>
</action>
</widget>
<tabstops>
<tabstop>Task</tabstop>
Expand Down Expand Up @@ -5285,4 +5306,4 @@ Current pair:
</hints>
</connection>
</connections>
</ui>
</ui>
49 changes: 36 additions & 13 deletions src/foraging_gui/ForagingGUI_Ephys.ui
Original file line number Diff line number Diff line change
Expand Up @@ -1463,9 +1463,9 @@
<property name="value">
<double>0.030000000000000</double>
</property>
<property name="disabled">
<bool>true</bool>
</property>
<property name="disabled" stdset="0">
<bool>true</bool>
</property>
</widget>
<widget class="QDoubleSpinBox" name="GiveWaterR">
<property name="geometry">
Expand All @@ -1491,9 +1491,9 @@
<property name="value">
<double>0.030000000000000</double>
</property>
<property name="disabled">
<bool>true</bool>
</property>
<property name="disabled" stdset="0">
<bool>true</bool>
</property>
</widget>
<widget class="QLabel" name="label_56">
<property name="geometry">
Expand Down Expand Up @@ -1884,9 +1884,9 @@
<property name="value">
<double>3.000000000000000</double>
</property>
<property name="disabled">
<bool>true</bool>
</property>
<property name="disabled" stdset="0">
<bool>true</bool>
</property>
</widget>
<widget class="QDoubleSpinBox" name="GiveWaterR_volume">
<property name="geometry">
Expand All @@ -1912,9 +1912,9 @@
<property name="value">
<double>3.000000000000000</double>
</property>
<property name="disabled">
<bool>true</bool>
</property>
<property name="disabled" stdset="0">
<bool>true</bool>
</property>
</widget>
<widget class="QDoubleSpinBox" name="RightValue_volume">
<property name="geometry">
Expand Down Expand Up @@ -2176,7 +2176,7 @@
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
<widget class="QLineEdit" name="min_time">
<widget class="QLineEdit" name="min_time">
<property name="geometry">
<rect>
<x>863</x>
Expand Down Expand Up @@ -4620,6 +4620,8 @@
<addaction name="action_Calibration"/>
<addaction name="actionLaser_Calibration"/>
<addaction name="actionMeta_Data"/>
<addaction name="actionOptical_Tagging"/>
<addaction name="actionRandom_Reward"/>
<addaction name="separator"/>
<addaction name="menuSimulation"/>
<addaction name="actionDrawing_after_stopping"/>
Expand Down Expand Up @@ -4745,6 +4747,7 @@
</attribute>
<addaction name="action_Calibration"/>
<addaction name="actionLaser_Calibration"/>
<addaction name="actionOptical_Tagging"/>
<addaction name="actionMeta_Data"/>
</widget>
<widget class="QToolBar" name="toolBar_3">
Expand Down Expand Up @@ -5009,6 +5012,26 @@
<string>Open video folder</string>
</property>
</action>
<action name="actionOptical_Tagging">
<property name="checkable">
<bool>true</bool>
</property>
<property name="icon">
<iconset>
<normaloff>resources/OpticalTagging.jpg</normaloff>resources/OpticalTagging.jpg</iconset>
</property>
<property name="text">
<string>Optical Tagging</string>
</property>
</action>
<action name="actionRandom_Reward">
<property name="checkable">
<bool>true</bool>
</property>
<property name="text">
<string>Random Reward</string>
</property>
</action>
</widget>
<tabstops>
<tabstop>NextBlock</tabstop>
Expand Down
Loading