Browse Source

Setup logging

dk 1 year ago
parent
commit
5fbf284fea

+ 3 - 1
backend/bci_core/online.py

@@ -41,12 +41,14 @@ class Controller:
             int: 统一化标签 (-1: keep, 0: rest, 1: cylinder, 2: ball, 3: flex, 4: double, 5: treble)
             int: 统一化标签 (-1: keep, 0: rest, 1: cylinder, 2: ball, 3: flex, 4: double, 5: treble)
         """
         """
         virtual_feedback = self.virtual_feedback(true_label)
         virtual_feedback = self.virtual_feedback(true_label)
+        logging.debug('step_decision: virtual feedback: {}'.format(virtual_feedback))
         if virtual_feedback is not None:
         if virtual_feedback is not None:
             return virtual_feedback
             return virtual_feedback
 
 
         if self.real_feedback_model is not None:
         if self.real_feedback_model is not None:
             fs, data = self.real_feedback_model.parse_data(data)
             fs, data = self.real_feedback_model.parse_data(data)
             p = self.real_feedback_model.step_probability(fs, data)
             p = self.real_feedback_model.step_probability(fs, data)
+            logging.debug('step_decison: model probability: {}'.format(str(p)))
             pred = np.argmax(p)
             pred = np.argmax(p)
             real_decision = self.real_feedback_model.model.classes_[pred]
             real_decision = self.real_feedback_model.model.classes_[pred]
             return real_decision
             return real_decision
@@ -153,7 +155,6 @@ class HMMModel:
         """
         """
         fs, data = self.parse_data(data)
         fs, data = self.parse_data(data)
         p = self.step_probability(fs, data)
         p = self.step_probability(fs, data)
-        logging.debug(p, self.probability)
         return self.update_state(p)
         return self.update_state(p)
     
     
     def update_state(self, current_p):
     def update_state(self, current_p):
@@ -161,6 +162,7 @@ class HMMModel:
         self._probability = (self.state_trans_matrix * self._probability.T).sum(axis=1) * current_p
         self._probability = (self.state_trans_matrix * self._probability.T).sum(axis=1) * current_p
         # normalize
         # normalize
         self._probability /= np.sum(self._probability)
         self._probability /= np.sum(self._probability)
+        logging.debug("viterbi probability, {}".format(str(self._probability)))
 
 
         current_state = np.argmax(self._probability)
         current_state = np.argmax(self._probability)
         if current_state == self._last_state:
         if current_state == self._last_state:

+ 3 - 3
backend/general_grasp_training.psyexp

@@ -26,7 +26,7 @@
     <Param val="False" valType="bool" updates="None" name="Show mouse"/>
     <Param val="False" valType="bool" updates="None" name="Show mouse"/>
     <Param val="height" valType="str" updates="None" name="Units"/>
     <Param val="height" valType="str" updates="None" name="Units"/>
     <Param val="" valType="str" updates="None" name="Use version"/>
     <Param val="" valType="str" updates="None" name="Use version"/>
-    <Param val="[1493, 933]" valType="list" updates="None" name="Window size (pixels)"/>
+    <Param val="[1440, 900]" valType="list" updates="None" name="Window size (pixels)"/>
     <Param val="none" valType="str" updates="None" name="backgroundFit"/>
     <Param val="none" valType="str" updates="None" name="backgroundFit"/>
     <Param val="" valType="str" updates="None" name="backgroundImg"/>
     <Param val="" valType="str" updates="None" name="backgroundImg"/>
     <Param val="avg" valType="str" updates="None" name="blendMode"/>
     <Param val="avg" valType="str" updates="None" name="blendMode"/>
@@ -49,7 +49,7 @@
     <Param val="127.0.0.1" valType="str" updates="None" name="gpAddress"/>
     <Param val="127.0.0.1" valType="str" updates="None" name="gpAddress"/>
     <Param val="4242" valType="num" updates="None" name="gpPort"/>
     <Param val="4242" valType="num" updates="None" name="gpPort"/>
     <Param val="PsychToolbox" valType="str" updates="None" name="keyboardBackend"/>
     <Param val="PsychToolbox" valType="str" updates="None" name="keyboardBackend"/>
-    <Param val="exp" valType="code" updates="None" name="logging level"/>
+    <Param val="debug" valType="code" updates="None" name="logging level"/>
     <Param val="('MIDDLE_BUTTON',)" valType="list" updates="None" name="mgBlink"/>
     <Param val="('MIDDLE_BUTTON',)" valType="list" updates="None" name="mgBlink"/>
     <Param val="CONTINUOUS" valType="str" updates="None" name="mgMove"/>
     <Param val="CONTINUOUS" valType="str" updates="None" name="mgMove"/>
     <Param val="0.5" valType="num" updates="None" name="mgSaccade"/>
     <Param val="0.5" valType="num" updates="None" name="mgSaccade"/>
@@ -453,7 +453,7 @@
         <Param val="" valType="extendedCode" updates="constant" name="End Experiment"/>
         <Param val="" valType="extendedCode" updates="constant" name="End Experiment"/>
         <Param val="predict = 0;&amp;#10;if ((predict === 1)) {&amp;#10;    feedback_time = 15;&amp;#10;} else {&amp;#10;    if ((predict === 0)) {&amp;#10;        feedback_time = 2;&amp;#10;    }&amp;#10;}&amp;#10;" valType="extendedCode" updates="constant" name="End JS Experiment"/>
         <Param val="predict = 0;&amp;#10;if ((predict === 1)) {&amp;#10;    feedback_time = 15;&amp;#10;} else {&amp;#10;    if ((predict === 0)) {&amp;#10;        feedback_time = 2;&amp;#10;    }&amp;#10;}&amp;#10;" valType="extendedCode" updates="constant" name="End JS Experiment"/>
         <Param val="" valType="extendedCode" updates="constant" name="End JS Routine"/>
         <Param val="" valType="extendedCode" updates="constant" name="End JS Routine"/>
-        <Param val="&amp;#10;data_from_buffer = receiver.get_trial_data(clear=False)&amp;#10;decision = controller.step_decision(data_from_buffer, current_true_label)&amp;#10;decision_buffer.append(decision)&amp;#10;&amp;#10;# write decision to data&amp;#10;thisExp.addData('decision.class', decision)&amp;#10;if controller.real_feedback_model is not None:&amp;#10;    thisExp.addData('decision.prob', controller.real_feedback_model.probability)" valType="extendedCode" updates="constant" name="End Routine"/>
+        <Param val="&amp;#10;data_from_buffer = receiver.get_trial_data(clear=False)&amp;#10;decision = controller.step_decision(data_from_buffer, current_true_label)&amp;#10;decision_buffer.append(decision)&amp;#10;&amp;#10;# write decision to data&amp;#10;thisExp.addData('decision.class', decision)&amp;#10;" valType="extendedCode" updates="constant" name="End Routine"/>
         <Param val="False" valType="bool" updates="None" name="disabled"/>
         <Param val="False" valType="bool" updates="None" name="disabled"/>
         <Param val="algo" valType="code" updates="None" name="name"/>
         <Param val="algo" valType="code" updates="None" name="name"/>
       </CodeComponent>
       </CodeComponent>

+ 5 - 6
backend/general_grasp_training.py

@@ -2,7 +2,7 @@
 # -*- coding: utf-8 -*-
 # -*- coding: utf-8 -*-
 """
 """
 This experiment was created using PsychoPy3 Experiment Builder (v2023.2.3),
 This experiment was created using PsychoPy3 Experiment Builder (v2023.2.3),
-    on Mon Nov 20 21:55:44 2023
+    on Tue Nov 21 09:47:06 2023
 If you publish work using this script the most relevant publication is:
 If you publish work using this script the most relevant publication is:
 
 
     Peirce J, Gray JR, Simpson S, MacAskill M, Höchenberger R, Sogo H, Kastman E, Lindeløv JK. (2019) 
     Peirce J, Gray JR, Simpson S, MacAskill M, Höchenberger R, Sogo H, Kastman E, Lindeløv JK. (2019) 
@@ -223,9 +223,9 @@ def setupLogging(filename):
         Text stream to receive inputs from the logging system.
         Text stream to receive inputs from the logging system.
     """
     """
     # this outputs to the screen, not a file
     # this outputs to the screen, not a file
-    logging.console.setLevel(logging.EXP)
+    logging.console.setLevel(logging.DEBUG)
     # save a log file for detail verbose info
     # save a log file for detail verbose info
-    logFile = logging.LogFile(filename+'.log', level=logging.EXP)
+    logFile = logging.LogFile(filename+'.log', level=logging.DEBUG)
     
     
     return logFile
     return logFile
 
 
@@ -249,7 +249,7 @@ def setupWindow(expInfo=None, win=None):
     if win is None:
     if win is None:
         # if not given a window to setup, make one
         # if not given a window to setup, make one
         win = visual.Window(
         win = visual.Window(
-            size=[1493, 933], fullscr=True, screen=0,
+            size=[1440, 900], fullscr=True, screen=0,
             winType='pyglet', allowStencil=False,
             winType='pyglet', allowStencil=False,
             monitor='testMonitor', color=[1,1,1], colorSpace='rgb',
             monitor='testMonitor', color=[1,1,1], colorSpace='rgb',
             backgroundImage='', backgroundFit='none',
             backgroundImage='', backgroundFit='none',
@@ -884,8 +884,7 @@ def run(expInfo, thisExp, win, inputs, globalClock=None, thisSession=None):
             
             
             # write decision to data
             # write decision to data
             thisExp.addData('decision.class', decision)
             thisExp.addData('decision.class', decision)
-            if controller.real_feedback_model is not None:
+            
-                thisExp.addData('decision.prob', controller.real_feedback_model.probability)
             # using non-slip timing so subtract the expected duration of this Routine (unless ended on request)
             # using non-slip timing so subtract the expected duration of this Routine (unless ended on request)
             if routineForceEnded:
             if routineForceEnded:
                 routineTimer.reset()
                 routineTimer.reset()