add threshold and init parameters
authorThomas Pietrzak <thomas.pietrzak@gmail.com>
Thu, 16 Jun 2011 15:43:39 +0000 (15:43 +0000)
committerThomas Pietrzak <thomas.pietrzak@gmail.com>
Thu, 16 Jun 2011 15:43:39 +0000 (15:43 +0000)
git-svn-id: svn+ssh://thomaspietrzak.com/var/svn/rep@36 47cf9a05-e0a8-4ed5-9e9b-101a649bc004

Tactons JND/answer3AFC.cpp
Tactons JND/answer3AFC.h
Tactons JND/tactonsjnd.cpp
Tactons JND/tactonsjnd.ui

index 34cbc13a0fe9e22c149d7c909e3e37c5559172d1..88ec83acb0fb29bddeba3cc7732cfe226046cc58 100644 (file)
@@ -1,14 +1,14 @@
 #include "answer3AFC.h"\r
 \r
 #include <QTimer>\r
+#include <QDate>\r
+#include <QTime>\r
 #include <QDebug>\r
 #include <cmath>\r
 \r
-#define RESETVAL (3)\r
-\r
 Answer3AFC::Answer3AFC(QWidget *parent, Qt::WFlags flags)\r
 :QDialog(parent, flags),\r
-_logfile(NULL), _tactonPlayer("COM3"), _defaulttacton(0x0f, 50, 205, 100), \r
+_logfile(NULL), _tactonPlayer("COM3"), _defaulttacton(0x0f, 100, 205, 100), \r
 _currenttest(0.0), _goodanswer(-1), _block(0)\r
 {\r
        //init the window\r
@@ -35,21 +35,31 @@ Answer3AFC::~Answer3AFC()
        _tactonPlayer.stop();\r
 }\r
 \r
-void Answer3AFC::init(QString user, int repetitions, int reversals, double tinc, double finc, int tseries, int fseries, QString experiment, QString gesture)\r
+void Answer3AFC::init(QString user, int repetitions, int reversals, double initval, double tinc, double finc, double threshold, double smalltinc, double smallfinc, int tseries, int fseries, QString experiment, QString gesture)\r
 {\r
        _user = user;\r
        _repetitions = repetitions;\r
        _reversals = reversals;\r
+       _initval = initval;\r
        _tinc = tinc;\r
        _finc = finc;\r
+       _threshold = threshold;\r
+       _smalltinc = smalltinc;\r
+       _smallfinc = smallfinc;\r
        _tseries = tseries;\r
        _fseries = fseries;\r
        _experiment = experiment;\r
        _gesture = gesture;\r
 \r
        //create log file\r
-       QString logfilename = user + "-" + experiment + "-" + gesture + "-";\r
-       _logfile = fopen(logfilename.toStdString().c_str(), "w");\r
+       QString date = QDate::currentDate().toString("yyyy-MM-dd") + "-" + QTime::currentTime().toString("HH-mm-ss");\r
+       QString logfilename = user + "-" + experiment + "-" + gesture + "-" + date + "-answers";\r
+       if (_logfile = fopen(logfilename.toStdString().c_str(), "w"))\r
+               fprintf(_logfile, "TRIAL,VALUE,TESTVALUE,DIFF,GOODANSWER,USERANSWER,NBPRESSED1,NBPRESSED2,NBPRESSED3\n");\r
+       logfilename = user + "-" + experiment + "-" + gesture + "-" + date + "-jnd";\r
+       if (_logfile2 = fopen(logfilename.toStdString().c_str(), "w"))\r
+               fprintf(_logfile2, "TRIAL,VALUE,JND\n");\r
+\r
 \r
        //load icons\r
        FILE *f = fopen((experiment + ".txt").toAscii().data(), "r");\r
@@ -157,22 +167,33 @@ void Answer3AFC::answer()
                {\r
                        if (val)\r
                        {\r
-                               if (_tseries == 1 && _currenttest >= _tinc)\r
+                               if (_tseries == 1)\r
                                {\r
                                        //change \r
-                                       _currenttest -= _tinc;\r
-                                       nb  = 0;\r
+                                       if (_currenttest < _threshold)\r
+                                       {\r
+                                               if (_currenttest > _smalltinc)\r
+                                               {\r
+                                                       _currenttest -= _smalltinc;\r
+                                                       nb  = 0;\r
+                                               }\r
+                                       }\r
+                                       else if (_currenttest > _tinc)\r
+                                       {\r
+                                               _currenttest -= _tinc;\r
+                                               nb  = 0;\r
+                                       }\r
                                }\r
                        }\r
                        //wrong answer: increase the gap\r
-                       else\r
+                       else if (_fseries == 1)// && _currenttest < _initval)\r
                        {\r
-                               if (_fseries == 1)// && _currenttest < RESETVAL)\r
-                               {\r
-                                       //change \r
+                               //change \r
+                               if (_currenttest < _threshold)\r
+                                       _currenttest += _smallfinc;\r
+                               else\r
                                        _currenttest += _finc;\r
-                                       nb = 0;\r
-                               }\r
+                               nb = 0;\r
                        }\r
                }\r
        }\r
@@ -184,22 +205,33 @@ void Answer3AFC::answer()
                //good answer: reduce the gap\r
                if (val)\r
                {\r
-                       if (nb >= _tseries && _currenttest >= _tinc)\r
+                       if (nb >= _tseries)\r
                        {\r
                                //change \r
-                               _currenttest -= _tinc;\r
-                               nb  = 0;\r
+                               if (_currenttest < _threshold)\r
+                               {\r
+                                       if (_currenttest > _smalltinc)\r
+                                       {\r
+                                               _currenttest -= _smalltinc;\r
+                                               nb  = 0;\r
+                                       }\r
+                               }\r
+                               else if (_currenttest > _tinc)\r
+                               {\r
+                                       _currenttest -= _tinc;\r
+                                       nb  = 0;\r
+                               }\r
                        }\r
                }\r
                //wrong answer: increase the gap\r
-               else\r
+               else if (nb >= _fseries)// && _currenttest < _initval)\r
                {\r
-                       if (nb >= _fseries)// && _currenttest < RESETVAL)\r
-                       {\r
-                               //change \r
+                       //change \r
+                       if (_currenttest < _threshold)\r
+                               _currenttest += _smallfinc;\r
+                       else\r
                                _currenttest += _finc;\r
-                               nb = 0;\r
-                       }\r
+                       nb = 0;\r
                }\r
        }\r
        lastval = val;\r
@@ -211,14 +243,14 @@ void Answer3AFC::log(int answer) const
 {\r
        if (_logfile == NULL)\r
                return;\r
-       fprintf(_logfile, "ANSWER,%d,%d,%0.2f,%d,%d,%d,%d,%d\n", _block, _trials[_block], _currenttest, _goodanswer, answer, _tplayed[0], _tplayed[1], _tplayed[2]);\r
+       fprintf(_logfile, "%d,%d,%d,%0.2f,%d,%d,%d,%d,%d\n", _block, _trials[_block], testValue(_trials[_block], _currenttest), _currenttest, _goodanswer, answer, _tplayed[0], _tplayed[1], _tplayed[2]);\r
 }\r
 \r
 void Answer3AFC::log2() const\r
 {\r
-       if (_logfile == NULL)\r
+       if (_logfile2 == NULL)\r
                return;\r
-       fprintf(_logfile, "JND,%d,%d,%0.2f\n", _block, _trials[_block], _jnd[_block]);\r
+       fprintf(_logfile2, "%d,%d,%0.2f\n", _block, _trials[_block], _jnd[_block]);\r
 }\r
 \r
 void Answer3AFC::runBlock()\r
@@ -234,7 +266,7 @@ void Answer3AFC::runBlock()
                label->setText("Finished!");\r
        }\r
 \r
-       _currenttest = RESETVAL;\r
+       _currenttest = _initval;\r
        runTrial();\r
 }\r
 \r
index a7c711f7fda8b49eb4dbcf76b2f3158d30eb50ed..443846dd2b39bc34dd012cdfd6b7f68a55576d44 100644 (file)
@@ -16,7 +16,7 @@ public:
        Answer3AFC(QWidget *parent = 0, Qt::WFlags flags = 0);\r
        ~Answer3AFC();\r
 \r
-       void init(QString user, int repetitions, int reversals, double tinc, double finc, int tseries, int fseries, QString experiment, QString gesture);\r
+       void init(QString user, int repetitions, int reversals, double initval, double tinc, double finc, double threshold, double smalltinc, double smallfinc, int tseries, int fseries, QString experiment, QString gesture);\r
 \r
        void setAnswer(bool same);\r
 \r
@@ -27,14 +27,14 @@ private:
        void runBlock();\r
        unsigned int testValue(unsigned int value, double db) const;\r
 \r
-       FILE *_logfile;\r
+       FILE *_logfile, *_logfile2;\r
        TactonPlayer _tactonPlayer;\r
        Tacton _defaulttacton;\r
 \r
        //exp parameters\r
        QString _user;\r
        int _repetitions, _reversals, _tseries, _fseries;\r
-       double _tinc, _finc;\r
+       double _initval, _tinc, _finc, _threshold, _smalltinc, _smallfinc;\r
        QString _experiment;\r
        QString _gesture;\r
 \r
index 7274998c48f24346d511e0c86ce3b957221d7db5..d0736ffbb43e960184531a256e52fb28c1411628 100644 (file)
@@ -47,7 +47,8 @@ void TactonsJND::runBlock(void)
 {\r
        this->hide();\r
        w.init(username->text(), repetitions->value(), \r
-               reversals->value(), tinc->value(), finc->value(), tseries->value(), fseries->value(), \r
+               reversals->value(), initval->value(), tinc->value(), finc->value(), threshold->value(), \r
+               smalltinc->value(), smallfinc->value(), tseries->value(), fseries->value(), \r
                experiment->currentText(), gesture->currentText());\r
        w.show();\r
 }\r
index 7b979449ff673f2414826ac9e9b7f7d9fcf4ccff..16ae61efffd076551d31f3f7f46e6afdf96b0546 100644 (file)
@@ -6,8 +6,8 @@
    <rect>\r
     <x>0</x>\r
     <y>0</y>\r
-    <width>231</width>\r
-    <height>279</height>\r
+    <width>230</width>\r
+    <height>357</height>\r
    </rect>\r
   </property>\r
   <property name="windowTitle">\r
@@ -21,7 +21,7 @@
     <item row="0" column="0">\r
      <layout class="QGridLayout" name="gridLayout_2">\r
       <item row="1" column="0">\r
-       <layout class="QGridLayout" name="gridLayout" rowstretch="0,0,0,0,0,0,0,0,0">\r
+       <layout class="QGridLayout" name="gridLayout" rowstretch="0,0,0,0,0,0,0,0,0,0,0,0,0">\r
         <item row="0" column="0">\r
          <widget class="QLabel" name="labeluser">\r
           <property name="text">\r
           </property>\r
          </widget>\r
         </item>\r
-        <item row="3" column="0">\r
+        <item row="12" column="1">\r
+         <widget class="QComboBox" name="gesture"/>\r
+        </item>\r
+        <item row="11" column="1">\r
+         <widget class="QComboBox" name="experiment"/>\r
+        </item>\r
+        <item row="10" column="1">\r
+         <widget class="QSpinBox" name="fseries">\r
+          <property name="minimum">\r
+           <number>1</number>\r
+          </property>\r
+          <property name="maximum">\r
+           <number>20</number>\r
+          </property>\r
+         </widget>\r
+        </item>\r
+        <item row="9" column="1">\r
+         <widget class="QSpinBox" name="tseries">\r
+          <property name="minimum">\r
+           <number>1</number>\r
+          </property>\r
+          <property name="maximum">\r
+           <number>20</number>\r
+          </property>\r
+         </widget>\r
+        </item>\r
+        <item row="12" column="0">\r
+         <widget class="QLabel" name="labelgesture">\r
+          <property name="text">\r
+           <string>Gesture:</string>\r
+          </property>\r
+         </widget>\r
+        </item>\r
+        <item row="11" column="0">\r
+         <widget class="QLabel" name="labelexperiment">\r
+          <property name="text">\r
+           <string>Experiment:</string>\r
+          </property>\r
+         </widget>\r
+        </item>\r
+        <item row="10" column="0">\r
+         <widget class="QLabel" name="fserieslabel">\r
+          <property name="text">\r
+           <string>F Series</string>\r
+          </property>\r
+         </widget>\r
+        </item>\r
+        <item row="9" column="0">\r
+         <widget class="QLabel" name="tserieslabel">\r
+          <property name="text">\r
+           <string>T Series</string>\r
+          </property>\r
+         </widget>\r
+        </item>\r
+        <item row="8" column="0">\r
+         <widget class="QLabel" name="labelsmallfinc">\r
+          <property name="text">\r
+           <string>Small F inc</string>\r
+          </property>\r
+         </widget>\r
+        </item>\r
+        <item row="7" column="0">\r
+         <widget class="QLabel" name="labelsmalltinc">\r
+          <property name="text">\r
+           <string>Small T inc</string>\r
+          </property>\r
+         </widget>\r
+        </item>\r
+        <item row="6" column="0">\r
+         <widget class="QLabel" name="labelthreshold">\r
+          <property name="text">\r
+           <string>Threshold</string>\r
+          </property>\r
+         </widget>\r
+        </item>\r
+        <item row="4" column="0">\r
          <widget class="QLabel" name="tinclabel">\r
           <property name="text">\r
            <string>T Inc</string>\r
           </property>\r
          </widget>\r
         </item>\r
-        <item row="3" column="1">\r
+        <item row="5" column="0">\r
+         <widget class="QLabel" name="finclabel">\r
+          <property name="text">\r
+           <string>F Inc</string>\r
+          </property>\r
+         </widget>\r
+        </item>\r
+        <item row="4" column="1">\r
          <widget class="QDoubleSpinBox" name="tinc">\r
           <property name="maximum">\r
            <double>10.000000000000000</double>\r
           </property>\r
          </widget>\r
         </item>\r
-        <item row="4" column="0">\r
-         <widget class="QLabel" name="finclabel">\r
-          <property name="text">\r
-           <string>F Inc</string>\r
-          </property>\r
-         </widget>\r
-        </item>\r
-        <item row="4" column="1">\r
+        <item row="5" column="1">\r
          <widget class="QDoubleSpinBox" name="finc">\r
           <property name="minimum">\r
            <double>0.000000000000000</double>\r
           </property>\r
          </widget>\r
         </item>\r
-        <item row="5" column="0">\r
-         <widget class="QLabel" name="tserieslabel">\r
-          <property name="text">\r
-           <string>T Series</string>\r
+        <item row="6" column="1">\r
+         <widget class="QDoubleSpinBox" name="threshold">\r
+          <property name="maximum">\r
+           <double>10.000000000000000</double>\r
           </property>\r
-         </widget>\r
-        </item>\r
-        <item row="6" column="0">\r
-         <widget class="QLabel" name="fserieslabel">\r
-          <property name="text">\r
-           <string>F Series</string>\r
+          <property name="singleStep">\r
+           <double>0.100000000000000</double>\r
           </property>\r
          </widget>\r
         </item>\r
-        <item row="7" column="0">\r
-         <widget class="QLabel" name="labelexperiment">\r
-          <property name="text">\r
-           <string>Experiment:</string>\r
+        <item row="7" column="1">\r
+         <widget class="QDoubleSpinBox" name="smalltinc">\r
+          <property name="minimum">\r
+           <double>0.100000000000000</double>\r
           </property>\r
-         </widget>\r
-        </item>\r
-        <item row="8" column="0">\r
-         <widget class="QLabel" name="labelgesture">\r
-          <property name="text">\r
-           <string>Gesture:</string>\r
+          <property name="maximum">\r
+           <double>10.000000000000000</double>\r
+          </property>\r
+          <property name="singleStep">\r
+           <double>0.100000000000000</double>\r
+          </property>\r
+          <property name="value">\r
+           <double>0.100000000000000</double>\r
           </property>\r
          </widget>\r
         </item>\r
-        <item row="5" column="1">\r
-         <widget class="QSpinBox" name="tseries">\r
+        <item row="8" column="1">\r
+         <widget class="QDoubleSpinBox" name="smallfinc">\r
           <property name="minimum">\r
-           <number>1</number>\r
+           <double>0.100000000000000</double>\r
           </property>\r
           <property name="maximum">\r
-           <number>20</number>\r
+           <double>10.000000000000000</double>\r
+          </property>\r
+          <property name="singleStep">\r
+           <double>0.100000000000000</double>\r
           </property>\r
          </widget>\r
         </item>\r
-        <item row="6" column="1">\r
-         <widget class="QSpinBox" name="fseries">\r
-          <property name="minimum">\r
-           <number>1</number>\r
+        <item row="3" column="0">\r
+         <widget class="QLabel" name="label">\r
+          <property name="text">\r
+           <string>Init val</string>\r
           </property>\r
+         </widget>\r
+        </item>\r
+        <item row="3" column="1">\r
+         <widget class="QDoubleSpinBox" name="initval">\r
           <property name="maximum">\r
-           <number>20</number>\r
+           <double>20.000000000000000</double>\r
+          </property>\r
+          <property name="singleStep">\r
+           <double>0.250000000000000</double>\r
+          </property>\r
+          <property name="value">\r
+           <double>6.000000000000000</double>\r
           </property>\r
          </widget>\r
         </item>\r
-        <item row="7" column="1">\r
-         <widget class="QComboBox" name="experiment"/>\r
-        </item>\r
-        <item row="8" column="1">\r
-         <widget class="QComboBox" name="gesture"/>\r
-        </item>\r
        </layout>\r
       </item>\r
      </layout>\r