From de5876b61686038b750976973792fa9450e96c54 Mon Sep 17 00:00:00 2001 From: Katherine Date: Wed, 16 Oct 2024 15:59:15 -0700 Subject: [PATCH 1/9] add inactive_tracking, inactive_tracking_penalty --- built_in_tasks/target_tracking_task.py | 31 +++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/built_in_tasks/target_tracking_task.py b/built_in_tasks/target_tracking_task.py index 847e18e0..044c8c04 100644 --- a/built_in_tasks/target_tracking_task.py +++ b/built_in_tasks/target_tracking_task.py @@ -49,6 +49,7 @@ class TargetTracking(Sequence): timeout_penalty = dict(timeout_penalty_end="wait", start_pause="pause", end_state=True), hold_penalty = dict(hold_penalty_end="wait", hold_penalty_end_retry="wait_retry", start_pause="pause", end_state=True), tracking_out_penalty = dict(tracking_out_penalty_end="wait", start_pause="pause", end_state=True), + inactive_tracking_penalty = dict(inactive_tracking_penalty_end="wait", start_pause="pause", end_state=True), reward = dict(reward_end="wait", start_pause="pause", stoppable=False, end_state=True), pause = dict(end_pause="wait", end_state=True) # all end_states will result in trial counter +1, so if you start pause during a penalty state, @@ -64,6 +65,8 @@ class TargetTracking(Sequence): reward_time = traits.Float(.5, desc="Length of reward dispensation") timeout_time = traits.Float(10, desc="Time allowed to go between trajectories") timeout_penalty_time = traits.Float(1, desc="Length of penalty time for initiation timeout error") + inactive_tracking = traits.Float(2, desc = "Length of time allowed for inactive tracking error") + inactive_tracking_penalty_time = traits.Float(0, desc="Length of penalty time for inactive tracking error") hold_time = traits.Float(.1, desc="Time of hold required at target before trajectory begins") hold_penalty_time = traits.Float(1, desc="Length of penalty time for target hold error") tracking_out_time = traits.Float(2.5, desc="Time allowed to be tracking outside the target") # AKA tolerance time @@ -79,6 +82,7 @@ def init(self): self.frame_index = 0 # index in the frame in a trial self.total_distance_error = 0 # Euclidian distance between cursor and target during each trial self.trial_timed_out = True # check if the trial is finished + self.inactive_tracking = True self.plant_position = [] self.disturbance_trial = False self.repeat_freq_set = False @@ -248,6 +252,18 @@ def _end_tracking_out_penalty(self): '''Nothing generic to do.''' pass + def _start_inactive_tracking_penalty_time(self): + '''Nothing generic to do.''' + pass + + def _while_inactive_tracking_penalty_time(self): + self.pos_offset = [0,0,0] + self.vel_offset = [0,0,0] + + def _end_inactive_tracking_penalty_time(self): + '''Nothing generic to do.''' + pass + def _start_reward(self): '''Nothing generic to do.''' pass @@ -303,9 +319,15 @@ def _test_trial_complete(self, time_in_state): def _test_tracking_out_timeout(self, time_in_state): return time_in_state > self.tracking_out_time + + def _test_inactive_tracking(self, time_in_state): + return time_in_state > self.inactive_tracking # change this def _test_timeout_penalty_end(self, time_in_state): return time_in_state > self.timeout_penalty_time #or self.pause + + def _test_inactive_tracking_penalty_end(self, time_in_state): + return time_in_state > self.inactive_tracking_penalty_time #or self.pause def _test_hold_penalty_end(self, time_in_state): return (time_in_state > self.hold_penalty_time) and (self.tries==self.max_hold_attempts) #or self.pause @@ -313,7 +335,7 @@ def _test_hold_penalty_end(self, time_in_state): def _test_hold_penalty_end_retry(self, time_in_state): return (time_in_state > self.hold_penalty_time) and (self.tries self.tracking_out_penalty_time #or self.pause def _test_reward_end(self, time_in_state): @@ -503,6 +525,13 @@ def _test_leave_target(self, time_in_state): cursor_pos = self.plant.get_endpoint_pos() d = np.linalg.norm(cursor_pos - self.target.get_position()) return d > (self.target_radius - self.cursor_radius) or super()._test_leave_target(time_in_state) + + def _test_cursor_is_still(self, prev_cursor = 0): + ''' + Test if the cursor has been still + ''' + cursor_pos = self.plant.get_endpoint_pos() + return cursor_pos == prev_cursor, prev_cursor #### STATE FUNCTIONS #### def setup_start_wait(self): From 2165ddb141d711269864c863829a1da02738692b Mon Sep 17 00:00:00 2001 From: crasgaitis Date: Wed, 23 Oct 2024 11:45:15 -0700 Subject: [PATCH 2/9] add inactive tracking timeout --- built_in_tasks/target_tracking_task.py | 34 ++++++++++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) diff --git a/built_in_tasks/target_tracking_task.py b/built_in_tasks/target_tracking_task.py index 044c8c04..488bf1be 100644 --- a/built_in_tasks/target_tracking_task.py +++ b/built_in_tasks/target_tracking_task.py @@ -49,6 +49,7 @@ class TargetTracking(Sequence): timeout_penalty = dict(timeout_penalty_end="wait", start_pause="pause", end_state=True), hold_penalty = dict(hold_penalty_end="wait", hold_penalty_end_retry="wait_retry", start_pause="pause", end_state=True), tracking_out_penalty = dict(tracking_out_penalty_end="wait", start_pause="pause", end_state=True), + # TODO inactive_tracking_penalty = dict(inactive_tracking_penalty_end="wait", start_pause="pause", end_state=True), reward = dict(reward_end="wait", start_pause="pause", stoppable=False, end_state=True), pause = dict(end_pause="wait", end_state=True) @@ -526,12 +527,14 @@ def _test_leave_target(self, time_in_state): d = np.linalg.norm(cursor_pos - self.target.get_position()) return d > (self.target_radius - self.cursor_radius) or super()._test_leave_target(time_in_state) - def _test_cursor_is_still(self, prev_cursor = 0): + ### UTILS FUNCTIONS #### + # TODO + def cursor_is_still(self, prev_cursor = [0,0,0]): ''' Test if the cursor has been still ''' cursor_pos = self.plant.get_endpoint_pos() - return cursor_pos == prev_cursor, prev_cursor + return cursor_pos == prev_cursor and self.count >= self.inactive_tracking #### STATE FUNCTIONS #### def setup_start_wait(self): @@ -556,6 +559,7 @@ def setup_start_wait(self): # Set up for progress bar self.bar_width = 12 self.tracking_frame_index = 0 + self.count = 0 # Set up the next trajectory next_trajectory = np.array(np.squeeze(self.targs)[:,2]) @@ -652,7 +656,13 @@ def _while_tracking_in(self): self.pos_offset = self.disturbance_path[self.frame_index] # Move target and trajectory to next frame so it appears to be moving + + # TODO self.update_frame() + self.count += self.frame_index / self.fps + if self.cursor_is_still(cursor_pos): + # go to penalty + return # Check if the trial is over and there are no more target frames to display if self.frame_index+self.lookahead >= np.shape(self.targs)[0]: @@ -704,6 +714,26 @@ def _while_timeout_penalty(self): def _end_timeout_penalty(self): super()._end_timeout_penalty() self.sync_event('TRIAL_END') + + # TODO + def _start_inactive_tracking_penalty(self): + super()._start_inactive_tracking_penalty() + # print('START TIMEOUT') + self.sync_event('INACTIVE_TRACKING_PENALTY') + + # self.in_end_state = True + self.setup_screen_reset() + + # skip to next generated trial using same freq set + self.repeat_freq_set = True + + def _while_inactive_tracking_penalty(self): + super()._while_inactive_tracking_penalty() + # # Add disturbance + + def _end_inactive_tracking_penalty(self): + super()._end_inactive_tracking_penalty() + self.sync_event('TRIAL_END') def _start_hold_penalty(self): super()._start_hold_penalty() From 5d615c963d1b43ff16cdcc7f35ff722c8a5bf243 Mon Sep 17 00:00:00 2001 From: crasgaitis Date: Wed, 23 Oct 2024 12:26:37 -0700 Subject: [PATCH 3/9] set dict keys for inactive tracking; make cursor still as test func --- built_in_tasks/target_tracking_task.py | 22 ++++++----- text.txt | 51 ++++++++++++++++++++++++++ text.txt.pub | 1 + 3 files changed, 65 insertions(+), 9 deletions(-) create mode 100644 text.txt create mode 100644 text.txt.pub diff --git a/built_in_tasks/target_tracking_task.py b/built_in_tasks/target_tracking_task.py index 488bf1be..d7106c3c 100644 --- a/built_in_tasks/target_tracking_task.py +++ b/built_in_tasks/target_tracking_task.py @@ -44,8 +44,8 @@ class TargetTracking(Sequence): wait_retry = dict(start_trial="trajectory", start_pause="pause"), trajectory = dict(enter_target="hold", timeout="timeout_penalty", start_pause="pause"), hold = dict(hold_complete="tracking_in", leave_target="hold_penalty", start_pause="pause"), - tracking_in = dict(trial_complete="reward", leave_target="tracking_out", start_pause="pause"), - tracking_out = dict(trial_complete="reward", enter_target="tracking_in", tracking_out_timeout="tracking_out_penalty", start_pause="pause"), + tracking_in = dict(trial_complete="reward", leave_target="tracking_out", start_pause="pause", cursor_is_still="inactive_tracking_penalty"), + tracking_out = dict(trial_complete="reward", enter_target="tracking_in", tracking_out_timeout="tracking_out_penalty", start_pause="pause", cursor_is_still="inactive_tracking_penalty"), timeout_penalty = dict(timeout_penalty_end="wait", start_pause="pause", end_state=True), hold_penalty = dict(hold_penalty_end="wait", hold_penalty_end_retry="wait_retry", start_pause="pause", end_state=True), tracking_out_penalty = dict(tracking_out_penalty_end="wait", start_pause="pause", end_state=True), @@ -527,14 +527,18 @@ def _test_leave_target(self, time_in_state): d = np.linalg.norm(cursor_pos - self.target.get_position()) return d > (self.target_radius - self.cursor_radius) or super()._test_leave_target(time_in_state) - ### UTILS FUNCTIONS #### # TODO - def cursor_is_still(self, prev_cursor = [0,0,0]): + def _test_cursor_is_still(self, prev_cursor = [0,0,0]): ''' Test if the cursor has been still ''' cursor_pos = self.plant.get_endpoint_pos() - return cursor_pos == prev_cursor and self.count >= self.inactive_tracking + + if cursor_pos == prev_cursor and self.count >= self.inactive_tracking: + return True + + self.count = 0 + return False #### STATE FUNCTIONS #### def setup_start_wait(self): @@ -660,9 +664,8 @@ def _while_tracking_in(self): # TODO self.update_frame() self.count += self.frame_index / self.fps - if self.cursor_is_still(cursor_pos): - # go to penalty - return + # if self.cursor_is_still(cursor_pos): + # # go to penalty # Check if the trial is over and there are no more target frames to display if self.frame_index+self.lookahead >= np.shape(self.targs)[0]: @@ -691,7 +694,8 @@ def _while_tracking_out(self): # Move target and trajectory to next frame so it appears to be moving self.update_frame() - + self.count += self.frame_index / self.fps + # Check if the trial is over and there are no more target frames to display if self.frame_index+self.lookahead >= np.shape(self.targs)[0]: self.trial_timed_out = True diff --git a/text.txt b/text.txt new file mode 100644 index 00000000..0237e31c --- /dev/null +++ b/text.txt @@ -0,0 +1,51 @@ +-----BEGIN RSA PRIVATE KEY----- +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 +-----END RSA PRIVATE KEY----- diff --git a/text.txt.pub b/text.txt.pub new file mode 100644 index 00000000..08da1dcd --- /dev/null +++ b/text.txt.pub @@ -0,0 +1 @@ +ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCv+XCa2DLewIAh1ZXT4C2lsTAs64VohxcUz9gs9CAuM5Y4sLB8Irxo4VOGCcEKrClAWIe7bnJ8zDhy8P3etlGKcQlOp58I+n5luEhuZfc0bjDLvxcPBkAr5Dsw6BecrisM+aK0wxJH7xltA6wPz6T3dEW8yfYf8o+0NPvAskIywH7kMFu1QQKLkF2xzgYpJIzQHXq+lOXwYxfEbA4suPzd0VDm/3ZnAzTWR5MUtanlhqZwnnnKhkr1ARsz4HSq305fAb+GHrzK39JrIPPziRZL7ch7hnPaerNWVc6o4Zl6TIo7e5i+jpuBcfOt41NWVz0SjoeMHTqi+2EKGhcZNIYF+DvbAcGXlHC83LIdm5QEMJjSBY+oHIoaWm8Zol35v1Wiz0zSoTMhS6AjwRnpOPl+RaaBffm6pSD2LD7uXNeo0jMM44VUJn4d+f8il01JTMm4SgmL00GqOfOxNTvSMQcNGzmSYmSSs06amTCE466F2YBpRIEQrm14F8FgRKesihbNpqOCIv6m/3AhB+E9+eRlyv2QVa0d6/vCU3ZZzzq081AmI7uW/g1MD9I1yBiR9XcvR2yJ1I3hDxxfzlUvZe1wlQzBbnj8iVuOOWnSELuDHav5Eck1RQUK/dYw+B1v1cysc6ZYM7vBgI+byh/QjgH5KwWrZ/jBdRTWED9NX57GYw== crasgaitis@gmail.com From 72b9ce13de6b0f1579e75c152dae1d07c966f020 Mon Sep 17 00:00:00 2001 From: crasgaitis Date: Wed, 23 Oct 2024 14:30:52 -0700 Subject: [PATCH 4/9] remove text files --- text.txt | 51 --------------------------------------------------- text.txt.pub | 1 - 2 files changed, 52 deletions(-) delete mode 100644 text.txt delete mode 100644 text.txt.pub diff --git a/text.txt b/text.txt deleted file mode 100644 index 0237e31c..00000000 --- a/text.txt +++ /dev/null @@ -1,51 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -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 ------END RSA PRIVATE KEY----- diff --git a/text.txt.pub b/text.txt.pub deleted file mode 100644 index 08da1dcd..00000000 --- a/text.txt.pub +++ /dev/null @@ -1 +0,0 @@ -ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCv+XCa2DLewIAh1ZXT4C2lsTAs64VohxcUz9gs9CAuM5Y4sLB8Irxo4VOGCcEKrClAWIe7bnJ8zDhy8P3etlGKcQlOp58I+n5luEhuZfc0bjDLvxcPBkAr5Dsw6BecrisM+aK0wxJH7xltA6wPz6T3dEW8yfYf8o+0NPvAskIywH7kMFu1QQKLkF2xzgYpJIzQHXq+lOXwYxfEbA4suPzd0VDm/3ZnAzTWR5MUtanlhqZwnnnKhkr1ARsz4HSq305fAb+GHrzK39JrIPPziRZL7ch7hnPaerNWVc6o4Zl6TIo7e5i+jpuBcfOt41NWVz0SjoeMHTqi+2EKGhcZNIYF+DvbAcGXlHC83LIdm5QEMJjSBY+oHIoaWm8Zol35v1Wiz0zSoTMhS6AjwRnpOPl+RaaBffm6pSD2LD7uXNeo0jMM44VUJn4d+f8il01JTMm4SgmL00GqOfOxNTvSMQcNGzmSYmSSs06amTCE466F2YBpRIEQrm14F8FgRKesihbNpqOCIv6m/3AhB+E9+eRlyv2QVa0d6/vCU3ZZzzq081AmI7uW/g1MD9I1yBiR9XcvR2yJ1I3hDxxfzlUvZe1wlQzBbnj8iVuOOWnSELuDHav5Eck1RQUK/dYw+B1v1cysc6ZYM7vBgI+byh/QjgH5KwWrZ/jBdRTWED9NX57GYw== crasgaitis@gmail.com From 7b6048792d876b06aafa3f65b5c2b27d9997bf79 Mon Sep 17 00:00:00 2001 From: katherineperks Date: Wed, 23 Oct 2024 16:03:00 -0700 Subject: [PATCH 5/9] updates to timeout --- built_in_tasks/target_tracking_task.py | 48 ++++++++++++++++---------- 1 file changed, 29 insertions(+), 19 deletions(-) diff --git a/built_in_tasks/target_tracking_task.py b/built_in_tasks/target_tracking_task.py index d7106c3c..3d11637f 100644 --- a/built_in_tasks/target_tracking_task.py +++ b/built_in_tasks/target_tracking_task.py @@ -83,7 +83,6 @@ def init(self): self.frame_index = 0 # index in the frame in a trial self.total_distance_error = 0 # Euclidian distance between cursor and target during each trial self.trial_timed_out = True # check if the trial is finished - self.inactive_tracking = True self.plant_position = [] self.disturbance_trial = False self.repeat_freq_set = False @@ -253,15 +252,15 @@ def _end_tracking_out_penalty(self): '''Nothing generic to do.''' pass - def _start_inactive_tracking_penalty_time(self): + def _start_inactive_tracking_penalty(self): '''Nothing generic to do.''' pass - def _while_inactive_tracking_penalty_time(self): + def _while_inactive_tracking_penalty(self): self.pos_offset = [0,0,0] self.vel_offset = [0,0,0] - def _end_inactive_tracking_penalty_time(self): + def _end_inactive_tracking_penalty(self): '''Nothing generic to do.''' pass @@ -321,8 +320,8 @@ def _test_trial_complete(self, time_in_state): def _test_tracking_out_timeout(self, time_in_state): return time_in_state > self.tracking_out_time - def _test_inactive_tracking(self, time_in_state): - return time_in_state > self.inactive_tracking # change this + # def _test_inactive_tracking(self, time_in_state): + # return time_in_state > self.inactive_tracking # change this def _test_timeout_penalty_end(self, time_in_state): return time_in_state > self.timeout_penalty_time #or self.pause @@ -349,6 +348,10 @@ def _test_enter_target(self, time_in_state): def _test_leave_target(self, time_in_state): '''This function is task-specific and not much can be done generically''' return False + + def _test_cursor_is_still(self, time_in_state): + '''This function is task-specific and not much can be done generically''' + return False def _test_start_pause(self, time_in_state): return self.pause @@ -411,6 +414,8 @@ def __init__(self, *args, **kwargs): self.cursor_vis_prev = True self.lookahead = 30 # number of frames to create a "lookahead" window of 0.5 seconds (half the screen) self.original_limit1d = self.limit1d # keep track of original settable trait + + self.count = 0 if not self.always_1d: self.limit1d = False # allow 2d movement before center-hold initiation @@ -451,6 +456,8 @@ def _cycle(self): ''' Calls any update functions necessary and redraws screen ''' + # print(self.count) + self.prev_cursor = self.last_pt self.move_effector(pos_offset=np.asarray(self.pos_offset), vel_offset=np.asarray(self.vel_offset)) # Run graphics commands to show/hide the plant if the visibility has changed @@ -528,17 +535,22 @@ def _test_leave_target(self, time_in_state): return d > (self.target_radius - self.cursor_radius) or super()._test_leave_target(time_in_state) # TODO - def _test_cursor_is_still(self, prev_cursor = [0,0,0]): + def _test_cursor_is_still(self, time_in_state): ''' Test if the cursor has been still ''' + print(self.count, self.frame_index) cursor_pos = self.plant.get_endpoint_pos() + if ((cursor_pos == self.prev_cursor).all()): + print('same pos') + self.count += self.frame_index / self.fps + else: + self.count = 0 - if cursor_pos == prev_cursor and self.count >= self.inactive_tracking: - return True - - self.count = 0 - return False + return (self.count >= self.inactive_tracking) or super()._test_cursor_is_still(time_in_state) + + # print(cursor_pos, self.prev_cursor, self.count) + # print(self.inactive_tracking, self.count, self.frame_index) #### STATE FUNCTIONS #### def setup_start_wait(self): @@ -563,6 +575,8 @@ def setup_start_wait(self): # Set up for progress bar self.bar_width = 12 self.tracking_frame_index = 0 + + # Set up for inactive tracking self.count = 0 # Set up the next trajectory @@ -663,9 +677,6 @@ def _while_tracking_in(self): # TODO self.update_frame() - self.count += self.frame_index / self.fps - # if self.cursor_is_still(cursor_pos): - # # go to penalty # Check if the trial is over and there are no more target frames to display if self.frame_index+self.lookahead >= np.shape(self.targs)[0]: @@ -694,7 +705,6 @@ def _while_tracking_out(self): # Move target and trajectory to next frame so it appears to be moving self.update_frame() - self.count += self.frame_index / self.fps # Check if the trial is over and there are no more target frames to display if self.frame_index+self.lookahead >= np.shape(self.targs)[0]: @@ -722,8 +732,8 @@ def _end_timeout_penalty(self): # TODO def _start_inactive_tracking_penalty(self): super()._start_inactive_tracking_penalty() - # print('START TIMEOUT') - self.sync_event('INACTIVE_TRACKING_PENALTY') + print('START INACTIVE PENALTY') + self.sync_event('TIMEOUT_PENALTY') # self.in_end_state = True self.setup_screen_reset() @@ -943,7 +953,7 @@ def generate_trajectories(num_trials=2, time_length=20, seed=40, sample_rate=120 trials['ref'][trial_id] = ref_trajectory/ref_A # previously, denominator was np.sum(a_ref) trials['dis'][trial_id] = dis_trajectory/dis_A # previously, denominator was np.sum(a_dis) # print(trial_order, ref_A, dis_A) - + return trials, trial_order @staticmethod From 09f325488a1d8ec757f55864bf2bd09c73fc05cb Mon Sep 17 00:00:00 2001 From: katherineperks Date: Wed, 23 Oct 2024 16:25:00 -0700 Subject: [PATCH 6/9] fix time counter for inactive timeout --- built_in_tasks/target_tracking_task.py | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/built_in_tasks/target_tracking_task.py b/built_in_tasks/target_tracking_task.py index 3d11637f..81128b55 100644 --- a/built_in_tasks/target_tracking_task.py +++ b/built_in_tasks/target_tracking_task.py @@ -539,19 +539,16 @@ def _test_cursor_is_still(self, time_in_state): ''' Test if the cursor has been still ''' - print(self.count, self.frame_index) + # print(self.count, self.frame_index) cursor_pos = self.plant.get_endpoint_pos() - if ((cursor_pos == self.prev_cursor).all()): - print('same pos') - self.count += self.frame_index / self.fps + if (cursor_pos == self.prev_cursor).all(): + # print('same pos') + self.count += 1/self.fps else: self.count = 0 return (self.count >= self.inactive_tracking) or super()._test_cursor_is_still(time_in_state) - # print(cursor_pos, self.prev_cursor, self.count) - # print(self.inactive_tracking, self.count, self.frame_index) - #### STATE FUNCTIONS #### def setup_start_wait(self): if self.calc_trial_num() == 0: @@ -674,8 +671,6 @@ def _while_tracking_in(self): self.pos_offset = self.disturbance_path[self.frame_index] # Move target and trajectory to next frame so it appears to be moving - - # TODO self.update_frame() # Check if the trial is over and there are no more target frames to display From 3a24baec2ca91331a59c73b37cde8c6fb2c00398 Mon Sep 17 00:00:00 2001 From: Lucas Date: Wed, 20 Nov 2024 13:54:18 -0800 Subject: [PATCH 7/9] add ip name for multi tablet --- reward_server/web_server.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/reward_server/web_server.py b/reward_server/web_server.py index f889527b..04125cb4 100644 --- a/reward_server/web_server.py +++ b/reward_server/web_server.py @@ -2,6 +2,10 @@ import time from riglib import tablet_reward +# ip address +# this: 205.175.106.178 +# other: 10.19.216.239 + hostName = "0.0.0.0" # open to anyone on the LAN - careful to not run this on the internet! serverPort = 8080 @@ -22,6 +26,7 @@ def do_GET(self): self.wfile.write(bytes("", "utf-8")) def do_POST(self): + print('go') tab = tablet_reward.open() tab.dispense() print('I got rest') @@ -30,7 +35,6 @@ def do_POST(self): self.send_header("Content-type", "text/html") self.end_headers() - if __name__ == "__main__": webServer = HTTPServer((hostName, serverPort), MyServer) print("Server started http://%s:%s" % (hostName, serverPort)) From 99a7964c9f73dfb74e8716b5a5baee2b00158fec Mon Sep 17 00:00:00 2001 From: Lucas Date: Wed, 20 Nov 2024 13:55:25 -0800 Subject: [PATCH 8/9] add ip address for multi tablet --- features/reward_features.py | 10 +++++++--- riglib/tablet_reward.py | 6 ++++-- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/features/reward_features.py b/features/reward_features.py index dd53bd81..6b07ba82 100644 --- a/features/reward_features.py +++ b/features/reward_features.py @@ -3,6 +3,7 @@ ''' import time import os +import socket import subprocess from riglib.experiment import traits from riglib.experiment.experiment import control_decorator @@ -69,6 +70,8 @@ def __init__(self, *args, **kwargs): super(RewardSystem, self).__init__(*args, **kwargs) self.reward = RemoteReward() self.reportstats['Reward #'] = 0 + hostname = socket.gethostname() + self.device_ip = socket.gethostbyname(hostname) def _start_reward(self): if hasattr(super(RewardSystem, self), '_start_reward'): @@ -76,9 +79,10 @@ def _start_reward(self): self.reportstats['Reward #'] += 1 if self.reportstats['Reward #'] % self.trials_per_reward == 0: - for _ in range(self.pellets_per_reward): # call trigger num of pellets_per_reward time - self.reward.trigger() - time.sleep(0.5) # wait for 0.5 seconds + for _ in range(self.pellets_per_reward): # call trigger num of pellets_per_reward time + print(self.device_ip) + self.reward.trigger(self.device_ip) + time.sleep(0.5) # wait for 0.5 seconds def _end_reward(self): if hasattr(super(RewardSystem, self), '_end_reward'): diff --git a/riglib/tablet_reward.py b/riglib/tablet_reward.py index 58ecffc5..b298a5b9 100644 --- a/riglib/tablet_reward.py +++ b/riglib/tablet_reward.py @@ -44,8 +44,10 @@ def __init__(self): self.hostName = "192.168.0.200" self.serverPort = 8080 - def trigger(self): - url = f"http://{self.hostName}:{self.serverPort}" + def trigger(self, ip_address): + # TODO: self.hostName + url = f"http://{ip_address}:{self.serverPort}" + print(url) try: requests.post(url, timeout=3) except: From beee94b1d30b5d20c796b6bd325752b0cf0d3781 Mon Sep 17 00:00:00 2001 From: crasgaitis Date: Fri, 22 Nov 2024 13:03:01 -0800 Subject: [PATCH 9/9] revert tablet reward to master --- reward_server/web_server.py | 6 +----- riglib/tablet_reward.py | 8 +++----- 2 files changed, 4 insertions(+), 10 deletions(-) diff --git a/reward_server/web_server.py b/reward_server/web_server.py index 04125cb4..f889527b 100644 --- a/reward_server/web_server.py +++ b/reward_server/web_server.py @@ -2,10 +2,6 @@ import time from riglib import tablet_reward -# ip address -# this: 205.175.106.178 -# other: 10.19.216.239 - hostName = "0.0.0.0" # open to anyone on the LAN - careful to not run this on the internet! serverPort = 8080 @@ -26,7 +22,6 @@ def do_GET(self): self.wfile.write(bytes("", "utf-8")) def do_POST(self): - print('go') tab = tablet_reward.open() tab.dispense() print('I got rest') @@ -35,6 +30,7 @@ def do_POST(self): self.send_header("Content-type", "text/html") self.end_headers() + if __name__ == "__main__": webServer = HTTPServer((hostName, serverPort), MyServer) print("Server started http://%s:%s" % (hostName, serverPort)) diff --git a/riglib/tablet_reward.py b/riglib/tablet_reward.py index b298a5b9..10b93af1 100644 --- a/riglib/tablet_reward.py +++ b/riglib/tablet_reward.py @@ -44,11 +44,9 @@ def __init__(self): self.hostName = "192.168.0.200" self.serverPort = 8080 - def trigger(self, ip_address): - # TODO: self.hostName - url = f"http://{ip_address}:{self.serverPort}" - print(url) + def trigger(self): + url = f"http://{self.hostName}:{self.serverPort}" try: requests.post(url, timeout=3) except: - traceback.print_exc() + traceback.print_exc() \ No newline at end of file