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)
         """
         virtual_feedback = self.virtual_feedback(true_label)
+        logging.debug('step_decision: virtual feedback: {}'.format(virtual_feedback))
         if virtual_feedback is not None:
             return virtual_feedback
 
         if self.real_feedback_model is not None:
             fs, data = self.real_feedback_model.parse_data(data)
             p = self.real_feedback_model.step_probability(fs, data)
+            logging.debug('step_decison: model probability: {}'.format(str(p)))
             pred = np.argmax(p)
             real_decision = self.real_feedback_model.model.classes_[pred]
             return real_decision
@@ -153,7 +155,6 @@ class HMMModel:
         """
         fs, data = self.parse_data(data)
         p = self.step_probability(fs, data)
-        logging.debug(p, self.probability)
         return self.update_state(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
         # normalize
         self._probability /= np.sum(self._probability)
+        logging.debug("viterbi probability, {}".format(str(self._probability)))
 
         current_state = np.argmax(self._probability)
         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="height" valType="str" updates="None" name="Units"/>
     <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="" valType="str" updates="None" name="backgroundImg"/>
     <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="4242" valType="num" updates="None" name="gpPort"/>
     <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="CONTINUOUS" valType="str" updates="None" name="mgMove"/>
     <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="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="&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="algo" valType="code" updates="None" name="name"/>
       </CodeComponent>

+ 5 - 6
backend/general_grasp_training.py

@@ -2,7 +2,7 @@
 # -*- coding: utf-8 -*-
 """
 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:
 
     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.
     """
     # 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
-    logFile = logging.LogFile(filename+'.log', level=logging.EXP)
+    logFile = logging.LogFile(filename+'.log', level=logging.DEBUG)
     
     return logFile
 
@@ -249,7 +249,7 @@ def setupWindow(expInfo=None, win=None):
     if win is None:
         # if not given a window to setup, make one
         win = visual.Window(
-            size=[1493, 933], fullscr=True, screen=0,
+            size=[1440, 900], fullscr=True, screen=0,
             winType='pyglet', allowStencil=False,
             monitor='testMonitor', color=[1,1,1], colorSpace='rgb',
             backgroundImage='', backgroundFit='none',
@@ -884,8 +884,7 @@ def run(expInfo, thisExp, win, inputs, globalClock=None, thisSession=None):
             
             # write decision to data
             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)
             if routineForceEnded:
                 routineTimer.reset()