@@ -243,10 +243,6 @@ def __init__(self, parent=None, box_number=1, start_bonsai_ide=True):
243
243
# initialize thread lock
244
244
self .data_lock = threading .Lock ()
245
245
246
- # intialize behavior baseline time flag
247
- self .behavior_baseline_period = threading .Event ()
248
- self .baseline_min_elapsed = 0
249
-
250
246
# create bias indicator
251
247
self .bias_n_size = 200
252
248
self .bias_indicator = BiasIndicator (
@@ -2765,7 +2761,6 @@ def keyPressEvent(self, event=None, allow_reset=False):
2765
2761
"laser_2_calibration_power" ,
2766
2762
"laser_1_calibration_voltage" ,
2767
2763
"laser_2_calibration_voltage" ,
2768
- "hab_time_box"
2769
2764
}:
2770
2765
continue
2771
2766
if child .objectName () == "UncoupledReward" :
@@ -4011,11 +4006,11 @@ def _Save(self, ForceSave=0, SaveAs=0, SaveContinue=0, BackupSave=0):
4011
4006
):
4012
4007
self ._AddWaterLogResult (session )
4013
4008
elif self .BaseWeight .text () == "" or self .WeightAfter .text () == "" :
4014
- logging .warning (f"Waterlog for mouse { self .behavior_session_model .subject } cannot be added to slims"
4015
- f" due do unrecorded weight information." )
4009
+ logging .error (f"Waterlog for mouse { self .behavior_session_model .subject } cannot be added to slims "
4010
+ f" due do unrecorded weight information." )
4016
4011
elif session is None :
4017
- logging .warning (f"Waterlog for mouse { self .behavior_session_model .subject } cannot be added to slims"
4018
- f" due do metadata generation failure." )
4012
+ logging .error (f"Waterlog for mouse { self .behavior_session_model .subject } cannot be added to slims "
4013
+ f" due do metadata generation failure." )
4019
4014
except Exception as e :
4020
4015
logging .warning (
4021
4016
"Meta data is not saved!" ,
@@ -5462,7 +5457,6 @@ def _NewSession(self):
5462
5457
5463
5458
self .unsaved_data = False
5464
5459
self .ManualWaterVolume = [0 , 0 ]
5465
- self .baseline_min_elapsed = 0 # variable to track baseline time elapsed before session for start/stop
5466
5460
5467
5461
# Clear Plots
5468
5462
if hasattr (self , "PlotM" ) and self .clear_figure_after_save :
@@ -5899,6 +5893,57 @@ def _Start(self):
5899
5893
elif self .behavior_session_model .allow_dirty_repo is None :
5900
5894
logging .error ("Could not check for untracked local changes" )
5901
5895
5896
+ if self .PhotometryB .currentText () == "on" and (
5897
+ not self .FIP_started
5898
+ ):
5899
+ reply = QMessageBox .critical (
5900
+ self ,
5901
+ "Box {}, Start" .format (self .box_letter ),
5902
+ 'Photometry is set to "on", but the FIP workflow has not been started' ,
5903
+ QMessageBox .Ok ,
5904
+ )
5905
+ self .Start .setChecked (False )
5906
+ logging .info (
5907
+ "Cannot start session without starting FIP workflow"
5908
+ )
5909
+ return
5910
+
5911
+ # Check if photometry excitation is running or not
5912
+ if self .PhotometryB .currentText () == "on" and (
5913
+ not self .StartExcitation .isChecked ()
5914
+ ):
5915
+ logging .warning (
5916
+ 'photometry is set to "on", but excitation is not running'
5917
+ )
5918
+
5919
+ reply = QMessageBox .question (
5920
+ self ,
5921
+ "Box {}, Start" .format (self .box_letter ),
5922
+ 'Photometry is set to "on", but excitation is not running. Start excitation now?' ,
5923
+ QMessageBox .Yes | QMessageBox .No ,
5924
+ QMessageBox .Yes ,
5925
+ )
5926
+ if reply == QMessageBox .Yes :
5927
+ self .StartExcitation .setChecked (True )
5928
+ logging .info ("User selected to start excitation" )
5929
+ started = self ._StartExcitation ()
5930
+ if started == 0 :
5931
+ reply = QMessageBox .critical (
5932
+ self ,
5933
+ "Box {}, Start" .format (self .box_letter ),
5934
+ "Could not start excitation, therefore cannot start the session" ,
5935
+ QMessageBox .Ok ,
5936
+ )
5937
+ logging .info (
5938
+ "could not start session, due to failure to start excitation"
5939
+ )
5940
+ self .Start .setChecked (False )
5941
+ return
5942
+ else :
5943
+ logging .info ("User selected not to start excitation" )
5944
+ self .Start .setChecked (False )
5945
+ return
5946
+
5902
5947
# disable sound button
5903
5948
self .sound_button .setEnabled (False )
5904
5949
@@ -5915,9 +5960,6 @@ def _Start(self):
5915
5960
self .session_run = True # session has been started
5916
5961
self .keyPressEvent (allow_reset = True )
5917
5962
5918
- # set flag to perform habituation period
5919
- self .behavior_baseline_period .set ()
5920
-
5921
5963
else :
5922
5964
# Prompt user to confirm stopping trials
5923
5965
reply = QMessageBox .question (
@@ -5949,7 +5991,6 @@ def _Start(self):
5949
5991
5950
5992
self .session_end_tasks ()
5951
5993
self .sound_button .setEnabled (True )
5952
- self .behavior_baseline_period .clear () # set flag to break out of habituation period
5953
5994
5954
5995
if (self .StartANewSession == 1 ) and (self .ANewTrial == 0 ):
5955
5996
# If we are starting a new session, we should wait for the last trial to finish
@@ -6096,21 +6137,12 @@ def _Start(self):
6096
6137
workerStartTrialLoop1 = self .workerStartTrialLoop1
6097
6138
worker_save = self .worker_save
6098
6139
6099
- # pause for specified habituation time
6100
- if self .baseline_min_elapsed <= self .hab_time_box .value ():
6101
- self .wait_for_baseline ()
6102
-
6103
6140
# collecting the base signal for photometry. Only run once
6104
6141
if (
6105
- self .Start .isChecked ()
6106
- and self .PhotometryB .currentText () == "on"
6107
- and self .PhotometryRun == 0
6142
+ self .Start .isChecked ()
6143
+ and self .PhotometryB .currentText () == "on"
6144
+ and self .PhotometryRun == 0
6108
6145
):
6109
- # check if workflow is running and start photometry timer
6110
- if not self .photometry_workflow_running ():
6111
- self .Start .setChecked (False )
6112
- return
6113
-
6114
6146
logging .info ("Starting photometry baseline timer" )
6115
6147
self .finish_Timer = 0
6116
6148
self .PhotometryRun = 1
@@ -6290,53 +6322,17 @@ def end_session_log(self) -> None:
6290
6322
else :
6291
6323
logging .info ("No active session logger" )
6292
6324
6293
- def wait_for_baseline (self ) -> None :
6294
- """
6295
- Function to wait for a baseline time before behavior
6296
- """
6297
-
6298
- # pause for specified habituation time
6299
- start_time = time .time ()
6300
-
6301
- # create habituation timer label and update every minute
6302
- hab_lab = QLabel ()
6303
- hab_lab .setStyleSheet (f"color: { self .default_warning_color } ;" )
6304
- self .warning_widget .layout ().insertWidget (0 , hab_lab )
6305
- update_hab_timer = QtCore .QTimer (
6306
- timeout = lambda : hab_lab .setText (f"Time elapsed: "
6307
- f"{ round ((self .baseline_min_elapsed * 60 ) // 60 )} minutes"
6308
- f" { round ((self .baseline_min_elapsed * 60 ) % 60 )} seconds" ),
6309
- interval = 1000 )
6310
- update_hab_timer .start ()
6311
-
6312
- logging .info (f"Waiting { round (self .hab_time_box .value () - self .baseline_min_elapsed )} min before starting "
6313
- f"session." )
6314
-
6315
- elapsed = self .baseline_min_elapsed
6316
- while self .baseline_min_elapsed < self .hab_time_box .value () and self .behavior_baseline_period .is_set ():
6317
- QApplication .processEvents ()
6318
- # update baseline time elapsed before session for start/stop logic
6319
- self .baseline_min_elapsed = ((time .time () - start_time ) / 60 ) + elapsed
6320
-
6321
- update_hab_timer .stop ()
6322
- self .behavior_baseline_period .clear ()
6323
-
6324
-
6325
6325
def _StartTrialLoop (self , GeneratedTrials , worker1 , worker_save ):
6326
-
6327
- if not self .Start .isChecked ():
6326
+ if self .Start .isChecked ():
6327
+ logging .info ("starting trial loop" )
6328
+ else :
6328
6329
logging .info ("ending trial loop" )
6329
- return
6330
-
6331
- logging .info ("starting trial loop" )
6332
6330
6333
6331
# Track elapsed time in case Bonsai Stalls
6334
6332
last_trial_start = time .time ()
6335
6333
stall_iteration = 1
6336
6334
stall_duration = 5 * 60
6337
6335
6338
- logging .info (f"Starting session." )
6339
-
6340
6336
while self .Start .isChecked ():
6341
6337
QApplication .processEvents ()
6342
6338
if (
0 commit comments