Skip to content

Commit b012f6d

Browse files
Merge pull request #1646 from AllenNeuralDynamics/production_testing
[update main] 2025-10-28
2 parents d0f2159 + 8e2fbdb commit b012f6d

4 files changed

Lines changed: 47 additions & 27 deletions

File tree

src/foraging_gui/Foraging.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3800,7 +3800,7 @@ def _Save(self, ForceSave=0, SaveAs=0, SaveContinue=0, BackupSave=0):
38003800
and self.InitializeBonsaiSuccessfully == 1
38013801
and BackupSave == 0
38023802
):
3803-
self.GeneratedTrials._get_irregular_timestamp(self.Channel2)
3803+
self.GeneratedTrials._get_irregular_timestamp(self.Channel2, self.data_lock)
38043804

38053805
# Create new folders.
38063806
if self.CreateNewFolder == 1:
@@ -6143,7 +6143,7 @@ def _Start(self):
61436143
)
61446144
worker1.signals.finished.connect(self._thread_complete)
61456145
workerLick = Worker(
6146-
GeneratedTrials._get_irregular_timestamp, self.Channel2
6146+
GeneratedTrials._get_irregular_timestamp, self.Channel2, self.data_lock
61476147
)
61486148
workerLick.signals.finished.connect(self._thread_complete2)
61496149
workerPlot = Worker(

src/foraging_gui/MyFunctions.py

Lines changed: 44 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
import math
33
import random
44
import sys
5+
import threading
56
import time
67
import traceback
78
from datetime import datetime
@@ -2838,83 +2839,102 @@ def _GiveRight(self, channel3):
28382839
channel3.ManualWater_Right(int(1))
28392840
channel3.RightValue1(float(self.win.RightValue.text()) * 1000)
28402841

2841-
def _get_irregular_timestamp(self, Channel2):
2842+
def _get_irregular_timestamp(self, Channel2, data_lock: threading.Lock):
28422843
"""Get timestamps occurred irregularly (e.g. licks and reward delivery time)"""
28432844
while not Channel2.msgs.empty():
28442845
Rec = Channel2.receive()
28452846
if Rec[0].address == "/LeftLickTime":
2846-
self.B_LeftLickTime = np.append(
2847-
self.B_LeftLickTime, Rec[1][1][0]
2848-
)
2847+
with data_lock:
2848+
self.B_LeftLickTime = np.append(
2849+
self.B_LeftLickTime, Rec[1][1][0]
2850+
)
28492851
elif Rec[0].address == "/RightLickTime":
2850-
self.B_RightLickTime = np.append(
2852+
with data_lock:
2853+
self.B_RightLickTime = np.append(
28512854
self.B_RightLickTime, Rec[1][1][0]
28522855
)
28532856
elif Rec[0].address == "/LeftRewardDeliveryTime":
2854-
self.B_LeftRewardDeliveryTime = np.append(
2857+
with data_lock:
2858+
self.B_LeftRewardDeliveryTime = np.append(
28552859
self.B_LeftRewardDeliveryTime, Rec[1][1][0]
28562860
)
28572861
elif Rec[0].address == "/RightRewardDeliveryTime":
2858-
self.B_RightRewardDeliveryTime = np.append(
2862+
with data_lock:
2863+
self.B_RightRewardDeliveryTime = np.append(
28592864
self.B_RightRewardDeliveryTime, Rec[1][1][0]
28602865
)
28612866
elif Rec[0].address == "/LeftRewardDeliveryTimeHarp":
2862-
self.B_LeftRewardDeliveryTimeHarp = np.append(
2867+
with data_lock:
2868+
self.B_LeftRewardDeliveryTimeHarp = np.append(
28632869
self.B_LeftRewardDeliveryTimeHarp, Rec[1][1][0]
28642870
)
28652871
elif Rec[0].address == "/RightRewardDeliveryTimeHarp":
2866-
self.B_RightRewardDeliveryTimeHarp = np.append(
2872+
with data_lock:
2873+
self.B_RightRewardDeliveryTimeHarp = np.append(
28672874
self.B_RightRewardDeliveryTimeHarp, Rec[1][1][0]
28682875
)
28692876
elif Rec[0].address == "/PhotometryRising":
2870-
self.B_PhotometryRisingTimeHarp = np.append(
2877+
with data_lock:
2878+
self.B_PhotometryRisingTimeHarp = np.append(
28712879
self.B_PhotometryRisingTimeHarp, Rec[1][1][0]
28722880
)
28732881
elif Rec[0].address == "/PhotometryFalling":
2874-
self.B_PhotometryFallingTimeHarp = np.append(
2882+
with data_lock:
2883+
self.B_PhotometryFallingTimeHarp = np.append(
28752884
self.B_PhotometryFallingTimeHarp, Rec[1][1][0]
28762885
)
28772886
elif Rec[0].address == "/OptogeneticsTimeHarp":
2878-
self.B_OptogeneticsTimeHarp = np.append(
2887+
with data_lock:
2888+
self.B_OptogeneticsTimeHarp = np.append(
28792889
self.B_OptogeneticsTimeHarp, Rec[1][1][0]
28802890
)
28812891
elif Rec[0].address == "/ManualLeftWaterStartTime":
2882-
self.B_ManualLeftWaterStartTime = np.append(
2892+
with data_lock:
2893+
self.B_ManualLeftWaterStartTime = np.append(
28832894
self.B_ManualLeftWaterStartTime, Rec[1][1][0]
28842895
)
28852896
elif Rec[0].address == "/ManualRightWaterStartTime":
2886-
self.B_ManualRightWaterStartTime = np.append(
2897+
with data_lock:
2898+
self.B_ManualRightWaterStartTime = np.append(
28872899
self.B_ManualRightWaterStartTime, Rec[1][1][0]
28882900
)
28892901
elif Rec[0].address == "/EarnedLeftWaterStartTime":
2890-
self.B_EarnedLeftWaterStartTime = np.append(
2902+
with data_lock:
2903+
self.B_EarnedLeftWaterStartTime = np.append(
28912904
self.B_EarnedLeftWaterStartTime, Rec[1][1][0]
28922905
)
28932906
elif Rec[0].address == "/EarnedRightWaterStartTime":
2894-
self.B_EarnedRightWaterStartTime = np.append(
2907+
with data_lock:
2908+
self.B_EarnedRightWaterStartTime = np.append(
28952909
self.B_EarnedRightWaterStartTime, Rec[1][1][0]
28962910
)
28972911
elif Rec[0].address == "/AutoLeftWaterStartTime":
2898-
self.B_AutoLeftWaterStartTime = np.append(
2912+
with data_lock:
2913+
self.B_AutoLeftWaterStartTime = np.append(
28992914
self.B_AutoLeftWaterStartTime, Rec[1][1][0]
29002915
)
29012916
elif Rec[0].address == "/AutoRightWaterStartTime":
2902-
self.B_AutoRightWaterStartTime = np.append(
2917+
with data_lock:
2918+
self.B_AutoRightWaterStartTime = np.append(
29032919
self.B_AutoRightWaterStartTime, Rec[1][1][0]
29042920
)
29052921
elif Rec[0].address == "/EnvironmentSensorTemperature":
2906-
value = Rec[1][1][0] if type(Rec[1][1][0]) != float else round(Rec[1][1][0], 1)
2907-
self.B_EnvironmentSensorTemperature.append(value)
2922+
with data_lock:
2923+
value = Rec[1][1][0] if type(Rec[1][1][0]) != float else round(Rec[1][1][0], 1)
2924+
self.B_EnvironmentSensorTemperature.append(value)
29082925

29092926
elif Rec[0].address == "/EnvironmentSensorHumidity":
2910-
value = Rec[1][1][0] if type(Rec[1][1][0]) != float else round(Rec[1][1][0], 1)
2911-
self.B_EnvironmentSensorHumidity.append(value)
2927+
with data_lock:
2928+
value = Rec[1][1][0] if type(Rec[1][1][0]) != float else round(Rec[1][1][0], 1)
2929+
self.B_EnvironmentSensorHumidity.append(value)
29122930

29132931
elif Rec[0].address == "/EnvironmentSensorPressure":
2914-
self.B_EnvironmentSensorPressure.append(Rec[1][1][0])
2932+
with data_lock:
2933+
self.B_EnvironmentSensorPressure.append(Rec[1][1][0])
29152934

29162935
elif Rec[0].address == "/EnvironmentSensorTimestamp":
2917-
self.B_EnvironmentSensorTimestamp.append(Rec[1][1][0])
2936+
with data_lock:
2937+
self.B_EnvironmentSensorTimestamp.append(Rec[1][1][0])
29182938

29192939
def _DeletePreviousLicks(self, Channel2):
29202940
"""Delete licks from the previous session"""

src/foraging_gui/Visualization.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ def _Update(self, GeneratedTrials=None, Channel=None):
5151
return
5252

5353
if Channel is not None:
54-
GeneratedTrials._get_irregular_timestamp(Channel)
54+
GeneratedTrials._get_irregular_timestamp(Channel, self.main_win.data_lock)
5555

5656
# Unpack data
5757
self.B_AnimalResponseHistory = GeneratedTrials.B_AnimalResponseHistory
234 KB
Loading

0 commit comments

Comments
 (0)