Browse Source

增加得分统计

dk 1 year ago
parent
commit
c573d1a2c0
2 changed files with 24 additions and 3 deletions
  1. 19 2
      backend/general_grasp_training.psyexp
  2. 5 1
      backend/general_grasp_training.py

+ 19 - 2
backend/general_grasp_training.psyexp

@@ -396,6 +396,23 @@
         <Param val="from exp settings" valType="str" updates="None" name="units"/>
         <Param val="" valType="num" updates="constant" name="wrapWidth"/>
       </TextComponent>
+      <CodeComponent name="score" plugin="None">
+        <Param val="" valType="extendedCode" updates="constant" name="Before Experiment"/>
+        <Param val="" valType="extendedCode" updates="constant" name="Before JS Experiment"/>
+        <Param val="" valType="extendedCode" updates="constant" name="Begin Experiment"/>
+        <Param val="" valType="extendedCode" updates="constant" name="Begin JS Experiment"/>
+        <Param val="" valType="extendedCode" updates="constant" name="Begin JS Routine"/>
+        <Param val="mi_end.text = f&quot;实验结束,\n得分:{int(correct / args.n_trials * 100)}&quot;" valType="extendedCode" updates="constant" name="Begin Routine"/>
+        <Param val="Py" valType="str" updates="None" name="Code Type"/>
+        <Param val="" valType="extendedCode" updates="constant" name="Each Frame"/>
+        <Param val="" valType="extendedCode" updates="constant" name="Each JS Frame"/>
+        <Param val="" valType="extendedCode" updates="constant" name="End Experiment"/>
+        <Param val="" 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 Routine"/>
+        <Param val="False" valType="bool" updates="None" name="disabled"/>
+        <Param val="score" valType="code" updates="None" name="name"/>
+      </CodeComponent>
     </Routine>
     <Routine name="mi_begin">
       <RoutineSettingsComponent name="mi_begin" plugin="None">
@@ -509,12 +526,12 @@
         <Param val="False" valType="bool" updates="None" name="useWindowParams"/>
       </RoutineSettingsComponent>
       <CodeComponent name="decision" plugin="None">
-        <Param val="cnt_threshold_table = {&amp;#10;    'easy': 3,&amp;#10;    'mid': 4,&amp;#10;    'hard': 5&amp;#10;}&amp;#10;&amp;#10;cnt_threshold = cnt_threshold_table[args.difficulty]&amp;#10;" valType="extendedCode" updates="constant" name="Before Experiment"/>
+        <Param val="cnt_threshold_table = {&amp;#10;    'easy': 3,&amp;#10;    'mid': 4,&amp;#10;    'hard': 5&amp;#10;}&amp;#10;&amp;#10;cnt_threshold = cnt_threshold_table[args.difficulty]&amp;#10;&amp;#10;correct = 0" valType="extendedCode" updates="constant" name="Before Experiment"/>
         <Param val="cnt = 0;&amp;#10;for (var d, _pj_c = 0, _pj_a = decision_buffer, _pj_b = _pj_a.length; (_pj_c &lt; _pj_b); _pj_c += 1) {&amp;#10;    d = _pj_a[_pj_c];&amp;#10;    if ((d === current_true_label)) {&amp;#10;        cnt += 1;&amp;#10;    }&amp;#10;}&amp;#10;if ((cnt &gt;= 3)) {&amp;#10;    feedback_time = 10;&amp;#10;} else {&amp;#10;    feedback_time = 2;&amp;#10;}&amp;#10;" valType="extendedCode" updates="constant" name="Before JS Experiment"/>
         <Param val="" valType="extendedCode" updates="constant" name="Begin Experiment"/>
         <Param val="" valType="extendedCode" updates="constant" name="Begin JS Experiment"/>
         <Param val="" valType="extendedCode" updates="constant" name="Begin JS Routine"/>
-        <Param val="cnt = 0&amp;#10;for d in decision_buffer:&amp;#10;    if d == current_true_label:&amp;#10;        cnt += 1&amp;#10;&amp;#10;success = False&amp;#10;feedback_time = 2&amp;#10;if cnt &gt;= cnt_threshold:&amp;#10;    success = True&amp;#10;    if args.hand_feedback:&amp;#10;        feedback_time = 10" valType="extendedCode" updates="constant" name="Begin Routine"/>
+        <Param val="cnt = 0&amp;#10;for d in decision_buffer:&amp;#10;    if d == current_true_label:&amp;#10;        cnt += 1&amp;#10;&amp;#10;success = False&amp;#10;feedback_time = 2&amp;#10;if cnt &gt;= cnt_threshold:&amp;#10;    success = True&amp;#10;    correct += 1  # count all correct trials&amp;#10;    if args.hand_feedback:&amp;#10;        feedback_time = 10" valType="extendedCode" updates="constant" name="Begin Routine"/>
         <Param val="Py" valType="str" updates="None" name="Code Type"/>
         <Param val="" valType="extendedCode" updates="constant" name="Each Frame"/>
         <Param val="" valType="extendedCode" updates="constant" name="Each JS Frame"/>

+ 5 - 1
backend/general_grasp_training.py

@@ -2,7 +2,7 @@
 # -*- coding: utf-8 -*-
 """
 This experiment was created using PsychoPy3 Experiment Builder (v2023.2.3),
-    on Tue Nov 28 19:55:10 2023
+    on Tue Nov 28 22:28:11 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) 
@@ -142,6 +142,7 @@ cnt_threshold_table = {
 
 cnt_threshold = cnt_threshold_table[args.difficulty]
 
+correct = 0
 # --- Setup global variables (available in all functions) ---
 # Ensure that relative paths start from the same directory as this script
 _thisDir = os.path.dirname(os.path.abspath(__file__))
@@ -925,6 +926,7 @@ def run(expInfo, thisExp, win, inputs, globalClock=None, thisSession=None):
         feedback_time = 2
         if cnt >= cnt_threshold:
             success = True
+            correct += 1  # count all correct trials
             if args.hand_feedback:
                 feedback_time = 10
         # keep track of which components have finished
@@ -1282,6 +1284,8 @@ def run(expInfo, thisExp, win, inputs, globalClock=None, thisSession=None):
     continueRoutine = True
     # update component parameters for each repeat
     thisExp.addData('end.started', globalClock.getTime())
+    # Run 'Begin Routine' code from score
+    mi_end.text = f"实验结束,\n得分:{int(correct / args.n_trials * 100)}"
     # keep track of which components have finished
     endComponents = [mi_end]
     for thisComponent in endComponents: