Commits

Anonymous committed e4874f9

Added experiment log
Added a scroll box to set how long the session runs for, session terminates
after time expires
Fixed a bug where Generalization testing was remaining in the 'default' valve
list
Added the valve assignemnt for the session to the text file for output and to
the session display screen

  • Participants
  • Parent commits 00ff905

Comments (0)

Files changed (5)

File Discrimination2_7.py

     Basic replication of the D2 program in BBC basic
     '''
 
-    def __init__(self, startBlock = 1, sessionType = 'D2', listExperimentInfo = ['default','mouse','experiment','tech',''], valveList = [1,4,2,2,4,4]): #add something to allow the starting block to be differnet
+    def __init__(self, startBlock = 1, sessionType = 'D2', listExperimentInfo = ['default','mouse','experiment','tech',''], valveList = [1,4,2,2,4,4], sessionLength = 30): #add something to allow the starting block to be differnet
         super(Discrimination2, self).__init__() 
 
         self.curBlock = startBlock -2
         
         self.strExperimentInfo = listExperimentInfo
         self.dataFile = OutputData(self.strExperimentInfo[0], self.strExperimentInfo[1],self.strExperimentInfo[2], self.strExperimentInfo[3], self.strExperimentInfo[4])
+        
+        strValve = 'VALVE ASSIGNMENT,' + str(valveList)
+        self.dataFile.writeData(strValve)
         self.dataFileLong = OutputData(self.strExperimentInfo[0]+'Long', self.strExperimentInfo[1],self.strExperimentInfo[2], self.strExperimentInfo[3], self.strExperimentInfo[4])
         #self.startIti(self.itiTime)    
         self.newBlock()
-        self.reinforceOn(1.5)  #primes the reinforcer for the first trial
+        self.reinforceOn(1.2)  #primes the reinforcer for the first trial
+        self.sessionLength = sessionLength
         
         self.csPlusValve = valveList[0]
         self.csMinusValve = valveList[1]
         self.genValve2 = valveList[4]
         self.genValve3 = valveList[5]
         
+        self.sessionTimer = RunInternalTimer(self.sessionLength * 60) #FINISH THIS, WRITE A PROGRAM THAT STOPS IN THE UPDATE WHEN IT IS EXCEEDED
+        
+        
         
     def initVars(self):
         self.statesStarted = 8*[0]
 #        self.genValve1 = 2
 #        self.genValve2 = 3
 #        self.genValve3 = 4
-
-
-
         
         if self.sessionType == 'D2':
             #simple semi-random alternation between S+ and S-
 #            self.itiTime = self.totalBlocks*[5]
 #            self.TVRhits = 0
 #            self.TVRmisses = 0
-        
-            
-            
+                    
         self.curBlockHits = self.totalBlocks*[0] #met the interval threshold
         self.curBlockMisses = self.totalBlocks*[0] #missed the interval threshold
         self.curBlockFalseAlarms = self.totalBlocks*[0] #made the interval but didn't lick
         
         
         self.updateInputs()        
-        self.strCurBlockTrial = 'TIME,' + str(self.internalSessionTime.timeSince()) + ',BLOCK,' + str(self.curBlock) + ',TRIAL,' + str(self.curTrialInBlock) + ','
-        
+        self.strCurBlockTrial = 'TIME,' + str(self.internalSessionTime.timeSince()) + ',BLOCK,' + str(self.curBlock) + ',TRIAL,' + str(self.curTrialInBlock) + ','      
         self.headUpdate()
         self.lickUpdate()
         curStateUpdate = getattr(self,'updateState%d' % self.curState)
         curStateUpdate()
-        if self.curBlock > self.totalBlocks:
+        self.sessionMsg = 'SESSION RUNNING'
+        if self.curBlock > self.totalBlocks or self.sessionTimer.countDownComplete():
+            self.sessionMsg = 'SESSION FINISHED'
             self.bContinuePhase = False
+
         return self.bContinuePhase
 
 

File Experiment Log.ods

Binary file added.

File __main2__.py

     def setWaterTime(self):
         self.waterTime = self.dsbWaterTime.value()
         
+    def setSessionLength(self):
+        self.sessionLength = self.sbSessionLength.value()
+        
     def enableStartButtons(self):
         self.btnStartPhase3.setEnabled(True)
         self.btnStartPhase1.setEnabled(True)
         self.sbCSminus.setValue(3)
         self.sbNeutral.setValue(3)
         self.sbGen_1.setValue(1)
-        self.sbGen_2.setValue(2)
+        self.sbGen_2.setValue(4)
         self.sbGen_3.setValue(3)
         self.btnValveCommit.setEnabled(True)
         
         self.sbCSplus.setValue(1)
         self.sbCSminus.setValue(4)
         self.sbNeutral.setValue(3)
-        self.sbGen_1.setValue(1)
-        self.sbGen_2.setValue(2)
-        self.sbGen_3.setValue(3)
+        self.sbGen_1.setValue(2)
+        self.sbGen_2.setValue(3)
+        self.sbGen_3.setValue(4)
         self.btnValveCommit.setEnabled(True)
         
     def valveCustomEnable(self):
         self.startSession()
         self.bPhase1 = True
         self.curPhase = Phase1.Phase1(30, self.listTextFileInput) #start Phase 1 with 30 trials
-        self.disableStartButtons()
-        self.enableSimButtons()
+
         
     def startPhase3(self):
         self.startSession()
         startVal = self.sbPhase3.value()
         self.bPhase3 = True
+
         self.curPhase = P3.Phase3(startVal, self.listTextFileInput)
         self.disableStartButtons()
         self.enableSimButtons()
         self.startSession()
         startVal = self.sbPhase4.value()
         self.bDisc2 = True
-        self.curPhase = D2.Discrimination2(startVal,'Init1',self.listTextFileInput, self.valveList)
-        self.disableStartButtons()
-        self.enableSimButtons()
+        self.curPhase = D2.Discrimination2(startVal,'Init1',self.listTextFileInput, self.valveList, self.sessionLength)
+
     
     def startPhase5(self):
         self.startSession()
+
         startVal = self.sbPhase5.value()
         self.bDisc2 = True
-        self.curPhase = D2.Discrimination2(startVal,'Init2',self.listTextFileInput,self.valveList)
-        self.disableStartButtons()
-        self.enableSimButtons()        
-        
+        self.curPhase = D2.Discrimination2(startVal,'Init2',self.listTextFileInput,self.valveList, self.sessionLength)
+
         
     def startBoxTest(self):
         self.startSession()
     
     def startDisc2(self):
         self.startSession()
-        self.curPhase = D2.Discrimination2(1,'D2',self.listTextFileInput,self.valveList)
+       
+        self.curPhase = D2.Discrimination2(1,'D2',self.listTextFileInput,self.valveList, self.sessionLength)
         self.bDisc2 = True
-        self.disableStartButtons()
-        self.enableSimButtons()
+
         
     def startDisc2P2(self):
         self.startSession()
-        self.curPhase = D2.Discrimination2(1,'D2P2',self.listTextFileInput,self.valveList)
+        
+        self.curPhase = D2.Discrimination2(1,'D2P2',self.listTextFileInput,self.valveList, self.sessionLength)
         self.bDisc2 = True
-        self.disableStartButtons()
-        self.enableSimButtons()
+
         
     def startGenTest(self):
         self.startSession()
-        self.curPhase = D2.Discrimination2(1,'GENTEST',self.listTextFileInput)
+        
+        self.curPhase = D2.Discrimination2(1,'GENTEST',self.listTextFileInput,self.valveList, self.sessionLength)
         self.bDisc2 = True
-        self.disableStartButtons()
-        self.enableSimButtons()
+
         
     def startSession(self):
         self.timingInit()
+        self.setSessionLength()
+        self.sbSessionLength.setEnabled(False)
+        self.disableStartButtons()
+        self.enableSimButtons()
         print('Session start')   
 
     def updateDisplay(self):
             self.ectDisplay16 = ''#States Started: ' + str(self.curPhase.statesStarted)
             self.ectDisplay17 = 'ITI On: ' + str(self.curPhase.bITI) 
             self.ectDisplay18 = ''
-            self.ectDisplay19 = ''
+            self.ectDisplay19 = 'Session Length: '  + str(self.curPhase.sessionLength)
             self.ectDisplay20 = str(self.curPhase.sessionMsg)
             
             for i in range(20):
             
         if self.bDisc2 == True:
             self.ectDisplay1 = 'SESSION: ' + str(self.curPhase.sessionType)
-            self.ectDisplay2 = 'ITI On: ' + str(self.curPhase.bITI) 
-            self.ectDisplay3 = 'Waiting for Lick to Reinforce: ' + str(self.curPhase.bReinforcementAvailable)
+            self.ectDisplay2 = 'Time since trial start (sec): ' + str(-round(self.curPhase.ItiTimerRun.countDownTime(),1)) 
+            self.ectDisplay3 = '' # 'Waiting for Lick to Reinforce: ' + str(self.curPhase.bReinforcementAvailable)
             self.ectDisplay4 = 'Current Block Number: ' + str(self.curPhase.curBlock + 1)
             self.ectDisplay5 = 'Current Trial Type: ' + str(self.curPhase.curTrialType)
             self.ectDisplay6 = 'Current Trial In Block: ' + str(self.curPhase.curTrialInBlock)
             self.ectDisplay7 = ''
-            self.ectDisplay8 = 'Scent Load Time: ' + str(self.curPhase.scentLoadTime)
+            self.ectDisplay8 = ''#'Scent Load Time: ' + str(self.curPhase.scentLoadTime)
             self.ectDisplay9 = 'Response Window Time: ' + str(self.curPhase.responseWindow)
             self.ectDisplay10 = ''
-            self.ectDisplay11 = ''
-            self.ectDisplay12 = 'CS+ Valve: ' + str(self.curPhase.csPlusValve)
-            self.ectDisplay13 = 'CS- Valve: ' + str(self.curPhase.csMinusValve)
-            self.ectDisplay14 = ''
-            self.ectDisplay15 = ''
+            self.ectDisplay11 = 'CS+ Valve: ' + str(self.curPhase.csPlusValve)
+            self.ectDisplay12 = 'CS- Valve: ' + str(self.curPhase.csMinusValve)
+            self.ectDisplay13 = 'G1 Valve: ' + str(self.curPhase.genValve1)
+            self.ectDisplay14 = 'G2 Valve: ' + str(self.curPhase.genValve2)
+            self.ectDisplay15 = 'G3 Valve: ' + str(self.curPhase.genValve3)
             self.ectDisplay16 = ''
-            self.ectDisplay17 = ''
+            self.ectDisplay17 = 'Session Length (min): '  + str(self.curPhase.sessionLength)
             self.ectDisplay18 = 'Binned Resps on Trial: ' + str(self.curPhase.binRespList)
             self.ectDisplay19 = 'States Started: ' + str(self.curPhase.statesStarted)
-            self.ectDisplay20 = ''
+            self.ectDisplay20 = str(self.curPhase.sessionMsg)
 
             
             self.ectTextRunDisplay_1 = 'Block Hits: '
 
 # Form implementation generated from reading ui file 'gui.ui'
 #
-# Created: Fri Aug 16 15:39:40 2013
+# Created: Thu Aug 29 12:53:40 2013
 #      by: PyQt4 UI code generator 4.9.6
 #
 # WARNING! All changes made in this file will be lost!
         self.label_5.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
         self.label_5.setObjectName(_fromUtf8("label_5"))
         self.verticalLayout_5.addWidget(self.label_5)
+        self.label_6 = QtGui.QLabel(self.horizontalLayoutWidget_3)
+        self.label_6.setLayoutDirection(QtCore.Qt.LeftToRight)
+        self.label_6.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
+        self.label_6.setObjectName(_fromUtf8("label_6"))
+        self.verticalLayout_5.addWidget(self.label_6)
+        self.label_7 = QtGui.QLabel(self.horizontalLayoutWidget_3)
+        self.label_7.setLayoutDirection(QtCore.Qt.LeftToRight)
+        self.label_7.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
+        self.label_7.setObjectName(_fromUtf8("label_7"))
+        self.verticalLayout_5.addWidget(self.label_7)
         self.label_11 = QtGui.QLabel(self.horizontalLayoutWidget_3)
         self.label_11.setLayoutDirection(QtCore.Qt.LeftToRight)
         self.label_11.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
         self.label_11.setObjectName(_fromUtf8("label_11"))
         self.verticalLayout_5.addWidget(self.label_11)
-        self.label_7 = QtGui.QLabel(self.horizontalLayoutWidget_3)
-        self.label_7.setLayoutDirection(QtCore.Qt.LeftToRight)
-        self.label_7.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
-        self.label_7.setObjectName(_fromUtf8("label_7"))
-        self.verticalLayout_5.addWidget(self.label_7)
-        self.label_6 = QtGui.QLabel(self.horizontalLayoutWidget_3)
-        self.label_6.setLayoutDirection(QtCore.Qt.LeftToRight)
-        self.label_6.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
-        self.label_6.setObjectName(_fromUtf8("label_6"))
-        self.verticalLayout_5.addWidget(self.label_6)
         self.label_8 = QtGui.QLabel(self.horizontalLayoutWidget_3)
         self.label_8.setLayoutDirection(QtCore.Qt.LeftToRight)
         self.label_8.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
         self.tabInSes.setObjectName(_fromUtf8("tabInSes"))
         self.btnStartPhase1 = QtGui.QPushButton(self.tabInSes)
         self.btnStartPhase1.setEnabled(False)
-        self.btnStartPhase1.setGeometry(QtCore.QRect(10, 20, 141, 41))
+        self.btnStartPhase1.setGeometry(QtCore.QRect(10, 100, 141, 41))
         self.btnStartPhase1.setObjectName(_fromUtf8("btnStartPhase1"))
         self.btnStartPhase3 = QtGui.QPushButton(self.tabInSes)
         self.btnStartPhase3.setEnabled(False)
-        self.btnStartPhase3.setGeometry(QtCore.QRect(10, 70, 141, 41))
+        self.btnStartPhase3.setGeometry(QtCore.QRect(10, 150, 141, 41))
         self.btnStartPhase3.setObjectName(_fromUtf8("btnStartPhase3"))
         self.sbPhase3 = QtGui.QSpinBox(self.tabInSes)
-        self.sbPhase3.setGeometry(QtCore.QRect(90, 120, 51, 21))
+        self.sbPhase3.setGeometry(QtCore.QRect(160, 160, 51, 21))
         self.sbPhase3.setMinimum(1)
         self.sbPhase3.setMaximum(26)
         self.sbPhase3.setObjectName(_fromUtf8("sbPhase3"))
-        self.lblPhase3StartAt = QtGui.QLabel(self.tabInSes)
-        self.lblPhase3StartAt.setGeometry(QtCore.QRect(20, 110, 71, 41))
-        self.lblPhase3StartAt.setWordWrap(True)
-        self.lblPhase3StartAt.setObjectName(_fromUtf8("lblPhase3StartAt"))
         self.gridLayoutWidget_2 = QtGui.QWidget(self.tabInSes)
         self.gridLayoutWidget_2.setGeometry(QtCore.QRect(270, 40, 611, 451))
         self.gridLayoutWidget_2.setObjectName(_fromUtf8("gridLayoutWidget_2"))
         self.gridLayout_3.addWidget(self.lblEct20, 19, 0, 1, 1)
         self.btnStartDisc2 = QtGui.QPushButton(self.tabInSes)
         self.btnStartDisc2.setEnabled(False)
-        self.btnStartDisc2.setGeometry(QtCore.QRect(10, 310, 141, 41))
+        self.btnStartDisc2.setGeometry(QtCore.QRect(10, 300, 141, 41))
         self.btnStartDisc2.setObjectName(_fromUtf8("btnStartDisc2"))
         self.btnGenTest = QtGui.QPushButton(self.tabInSes)
         self.btnGenTest.setEnabled(False)
-        self.btnGenTest.setGeometry(QtCore.QRect(10, 410, 141, 41))
+        self.btnGenTest.setGeometry(QtCore.QRect(10, 400, 141, 41))
         self.btnGenTest.setObjectName(_fromUtf8("btnGenTest"))
         self.label_2 = QtGui.QLabel(self.tabInSes)
         self.label_2.setGeometry(QtCore.QRect(410, 20, 141, 16))
         self.label_2.setFont(font)
         self.label_2.setObjectName(_fromUtf8("label_2"))
         self.lcdTimeCnt = QtGui.QLCDNumber(self.tabInSes)
-        self.lcdTimeCnt.setGeometry(QtCore.QRect(10, 490, 71, 31))
+        self.lcdTimeCnt.setGeometry(QtCore.QRect(150, 10, 71, 31))
         self.lcdTimeCnt.setObjectName(_fromUtf8("lcdTimeCnt"))
         self.lblTimeLabel = QtGui.QLabel(self.tabInSes)
-        self.lblTimeLabel.setGeometry(QtCore.QRect(10, 460, 191, 16))
+        self.lblTimeLabel.setGeometry(QtCore.QRect(10, 10, 161, 21))
         font = QtGui.QFont()
-        font.setPointSize(12)
+        font.setPointSize(10)
         self.lblTimeLabel.setFont(font)
         self.lblTimeLabel.setObjectName(_fromUtf8("lblTimeLabel"))
         self.btnStartPhase4 = QtGui.QPushButton(self.tabInSes)
         self.btnStartPhase4.setEnabled(False)
-        self.btnStartPhase4.setGeometry(QtCore.QRect(10, 160, 141, 41))
+        self.btnStartPhase4.setGeometry(QtCore.QRect(10, 200, 141, 41))
         self.btnStartPhase4.setObjectName(_fromUtf8("btnStartPhase4"))
         self.horizontalLayoutWidget = QtGui.QWidget(self.tabInSes)
         self.horizontalLayoutWidget.setGeometry(QtCore.QRect(270, 500, 711, 111))
         self.verticalLayout_2.addWidget(self.lblRunData_5)
         self.horizontalLayout.addLayout(self.verticalLayout_2)
         self.sbPhase4 = QtGui.QSpinBox(self.tabInSes)
-        self.sbPhase4.setGeometry(QtCore.QRect(160, 170, 51, 21))
+        self.sbPhase4.setGeometry(QtCore.QRect(160, 210, 51, 21))
         self.sbPhase4.setMinimum(1)
         self.sbPhase4.setMaximum(12)
         self.sbPhase4.setObjectName(_fromUtf8("sbPhase4"))
         self.label_9 = QtGui.QLabel(self.tabInSes)
         self.label_9.setGeometry(QtCore.QRect(20, 590, 211, 16))
         self.label_9.setObjectName(_fromUtf8("label_9"))
-        self.sbSessionLength = QtGui.QSpinBox(self.tabInSes)
-        self.sbSessionLength.setEnabled(False)
-        self.sbSessionLength.setGeometry(QtCore.QRect(20, 560, 51, 21))
-        self.sbSessionLength.setMinimum(0)
-        self.sbSessionLength.setMaximum(600)
-        self.sbSessionLength.setSingleStep(5)
-        self.sbSessionLength.setProperty("value", 0)
-        self.sbSessionLength.setObjectName(_fromUtf8("sbSessionLength"))
-        self.label_10 = QtGui.QLabel(self.tabInSes)
-        self.label_10.setGeometry(QtCore.QRect(20, 530, 111, 31))
-        self.label_10.setObjectName(_fromUtf8("label_10"))
         self.btnStartDisc2P2 = QtGui.QPushButton(self.tabInSes)
         self.btnStartDisc2P2.setEnabled(False)
-        self.btnStartDisc2P2.setGeometry(QtCore.QRect(10, 360, 141, 41))
+        self.btnStartDisc2P2.setGeometry(QtCore.QRect(10, 350, 141, 41))
         self.btnStartDisc2P2.setObjectName(_fromUtf8("btnStartDisc2P2"))
         self.horizontalLayoutWidget_2 = QtGui.QWidget(self.tabInSes)
         self.horizontalLayoutWidget_2.setGeometry(QtCore.QRect(270, 620, 711, 150))
         self.sbPhase5.setMinimum(1)
         self.sbPhase5.setMaximum(45)
         self.sbPhase5.setObjectName(_fromUtf8("sbPhase5"))
+        self.sbSessionLength = QtGui.QSpinBox(self.tabInSes)
+        self.sbSessionLength.setEnabled(True)
+        self.sbSessionLength.setGeometry(QtCore.QRect(150, 50, 71, 31))
+        font = QtGui.QFont()
+        font.setPointSize(10)
+        self.sbSessionLength.setFont(font)
+        self.sbSessionLength.setLayoutDirection(QtCore.Qt.LeftToRight)
+        self.sbSessionLength.setMinimum(0)
+        self.sbSessionLength.setMaximum(600)
+        self.sbSessionLength.setSingleStep(10)
+        self.sbSessionLength.setProperty("value", 30)
+        self.sbSessionLength.setObjectName(_fromUtf8("sbSessionLength"))
+        self.label_10 = QtGui.QLabel(self.tabInSes)
+        self.label_10.setGeometry(QtCore.QRect(10, 50, 131, 31))
+        font = QtGui.QFont()
+        font.setPointSize(10)
+        self.label_10.setFont(font)
+        self.label_10.setObjectName(_fromUtf8("label_10"))
         self.tabWidget.addTab(self.tabInSes, _fromUtf8(""))
         self.tabBoxTest = QtGui.QWidget()
         self.tabBoxTest.setObjectName(_fromUtf8("tabBoxTest"))
         self.btnValveCus.setText(_translate("MainWindow", "Custom Valve Assignment:", None))
         self.label_4.setText(_translate("MainWindow", "CS+:", None))
         self.label_5.setText(_translate("MainWindow", "CS- :", None))
+        self.label_6.setText(_translate("MainWindow", "Gen S1:", None))
+        self.label_7.setText(_translate("MainWindow", "Gen S2:", None))
         self.label_11.setText(_translate("MainWindow", "Gen S3:", None))
-        self.label_7.setText(_translate("MainWindow", "Gen S2:", None))
-        self.label_6.setText(_translate("MainWindow", "Gen S1:", None))
         self.label_8.setText(_translate("MainWindow", "Neutral S:", None))
         self.btnValveCommit.setText(_translate("MainWindow", "Commit Valve Assignment", None))
         self.tabWidget.setTabText(self.tabWidget.indexOf(self.tabSetup), _translate("MainWindow", "Session Setup", None))
         self.btnStartPhase1.setText(_translate("MainWindow", "Start Phase 1", None))
-        self.btnStartPhase3.setText(_translate("MainWindow", "Start Phase 3", None))
-        self.lblPhase3StartAt.setText(_translate("MainWindow", "Phase 3 start at block:", None))
+        self.btnStartPhase3.setText(_translate("MainWindow", "Start Phase 3 at block:", None))
         self.btnStartDisc2.setText(_translate("MainWindow", "Start D2 ", None))
         self.btnGenTest.setText(_translate("MainWindow", "Start Gen Test", None))
         self.label_2.setText(_translate("MainWindow", "Session Info", None))
         self.lblRunData_4.setText(_translate("MainWindow", "TextLabel", None))
         self.lblRunData_5.setText(_translate("MainWindow", "TextLabel", None))
         self.label_9.setText(_translate("MainWindow", "Enter Post-Session Start Comments here:", None))
-        self.label_10.setText(_translate("MainWindow", "Session Length (min):", None))
         self.btnStartDisc2P2.setText(_translate("MainWindow", "Start D2 Part 2 ", None))
         self.lblRunText_6.setText(_translate("MainWindow", "TextLabel", None))
         self.lblRunText_7.setText(_translate("MainWindow", "TextLabel", None))
         self.lblRunData_12.setText(_translate("MainWindow", "TextLabel", None))
         self.lblRunData_13.setText(_translate("MainWindow", "TextLabel", None))
         self.btnStartPhase5.setText(_translate("MainWindow", "Start Phase5 at block:", None))
+        self.label_10.setText(_translate("MainWindow", "Session Length (min):", None))
         self.tabWidget.setTabText(self.tabWidget.indexOf(self.tabInSes), _translate("MainWindow", "Run Session", None))
         self.btnBoxTest.setText(_translate("MainWindow", "Start Box Test", None))
         self.btnHead.setText(_translate("MainWindow", "Sim Head", None))
           </widget>
          </item>
          <item>
-          <widget class="QLabel" name="label_11">
+          <widget class="QLabel" name="label_6">
            <property name="layoutDirection">
             <enum>Qt::LeftToRight</enum>
            </property>
            <property name="text">
-            <string>Gen S3:</string>
+            <string>Gen S1:</string>
            </property>
            <property name="alignment">
             <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
           </widget>
          </item>
          <item>
-          <widget class="QLabel" name="label_6">
+          <widget class="QLabel" name="label_11">
            <property name="layoutDirection">
             <enum>Qt::LeftToRight</enum>
            </property>
            <property name="text">
-            <string>Gen S1:</string>
+            <string>Gen S3:</string>
            </property>
            <property name="alignment">
             <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
       <property name="geometry">
        <rect>
         <x>10</x>
-        <y>20</y>
+        <y>100</y>
         <width>141</width>
         <height>41</height>
        </rect>
       <property name="geometry">
        <rect>
         <x>10</x>
-        <y>70</y>
+        <y>150</y>
         <width>141</width>
         <height>41</height>
        </rect>
       </property>
       <property name="text">
-       <string>Start Phase 3</string>
+       <string>Start Phase 3 at block:</string>
       </property>
      </widget>
      <widget class="QSpinBox" name="sbPhase3">
       <property name="geometry">
        <rect>
-        <x>90</x>
-        <y>120</y>
+        <x>160</x>
+        <y>160</y>
         <width>51</width>
         <height>21</height>
        </rect>
        <number>26</number>
       </property>
      </widget>
-     <widget class="QLabel" name="lblPhase3StartAt">
-      <property name="geometry">
-       <rect>
-        <x>20</x>
-        <y>110</y>
-        <width>71</width>
-        <height>41</height>
-       </rect>
-      </property>
-      <property name="text">
-       <string>Phase 3 start at block:</string>
-      </property>
-      <property name="wordWrap">
-       <bool>true</bool>
-      </property>
-     </widget>
      <widget class="QWidget" name="gridLayoutWidget_2">
       <property name="geometry">
        <rect>
       <property name="geometry">
        <rect>
         <x>10</x>
-        <y>310</y>
+        <y>300</y>
         <width>141</width>
         <height>41</height>
        </rect>
       <property name="geometry">
        <rect>
         <x>10</x>
-        <y>410</y>
+        <y>400</y>
         <width>141</width>
         <height>41</height>
        </rect>
      <widget class="QLCDNumber" name="lcdTimeCnt">
       <property name="geometry">
        <rect>
-        <x>10</x>
-        <y>490</y>
+        <x>150</x>
+        <y>10</y>
         <width>71</width>
         <height>31</height>
        </rect>
       <property name="geometry">
        <rect>
         <x>10</x>
-        <y>460</y>
-        <width>191</width>
-        <height>16</height>
+        <y>10</y>
+        <width>161</width>
+        <height>21</height>
        </rect>
       </property>
       <property name="font">
        <font>
-        <pointsize>12</pointsize>
+        <pointsize>10</pointsize>
        </font>
       </property>
       <property name="text">
       <property name="geometry">
        <rect>
         <x>10</x>
-        <y>160</y>
+        <y>200</y>
         <width>141</width>
         <height>41</height>
        </rect>
       <property name="geometry">
        <rect>
         <x>160</x>
-        <y>170</y>
+        <y>210</y>
         <width>51</width>
         <height>21</height>
        </rect>
        <string>Enter Post-Session Start Comments here:</string>
       </property>
      </widget>
-     <widget class="QSpinBox" name="sbSessionLength">
-      <property name="enabled">
-       <bool>false</bool>
-      </property>
-      <property name="geometry">
-       <rect>
-        <x>20</x>
-        <y>560</y>
-        <width>51</width>
-        <height>21</height>
-       </rect>
-      </property>
-      <property name="minimum">
-       <number>0</number>
-      </property>
-      <property name="maximum">
-       <number>600</number>
-      </property>
-      <property name="singleStep">
-       <number>5</number>
-      </property>
-      <property name="value">
-       <number>0</number>
-      </property>
-     </widget>
-     <widget class="QLabel" name="label_10">
-      <property name="geometry">
-       <rect>
-        <x>20</x>
-        <y>530</y>
-        <width>111</width>
-        <height>31</height>
-       </rect>
-      </property>
-      <property name="text">
-       <string>Session Length (min):</string>
-      </property>
-     </widget>
      <widget class="QPushButton" name="btnStartDisc2P2">
       <property name="enabled">
        <bool>false</bool>
       <property name="geometry">
        <rect>
         <x>10</x>
-        <y>360</y>
+        <y>350</y>
         <width>141</width>
         <height>41</height>
        </rect>
        <number>45</number>
       </property>
      </widget>
+     <widget class="QSpinBox" name="sbSessionLength">
+      <property name="enabled">
+       <bool>true</bool>
+      </property>
+      <property name="geometry">
+       <rect>
+        <x>150</x>
+        <y>50</y>
+        <width>71</width>
+        <height>31</height>
+       </rect>
+      </property>
+      <property name="font">
+       <font>
+        <pointsize>10</pointsize>
+       </font>
+      </property>
+      <property name="layoutDirection">
+       <enum>Qt::LeftToRight</enum>
+      </property>
+      <property name="minimum">
+       <number>0</number>
+      </property>
+      <property name="maximum">
+       <number>600</number>
+      </property>
+      <property name="singleStep">
+       <number>10</number>
+      </property>
+      <property name="value">
+       <number>30</number>
+      </property>
+     </widget>
+     <widget class="QLabel" name="label_10">
+      <property name="geometry">
+       <rect>
+        <x>10</x>
+        <y>50</y>
+        <width>131</width>
+        <height>31</height>
+       </rect>
+      </property>
+      <property name="font">
+       <font>
+        <pointsize>10</pointsize>
+       </font>
+      </property>
+      <property name="text">
+       <string>Session Length (min):</string>
+      </property>
+     </widget>
     </widget>
     <widget class="QWidget" name="tabBoxTest">
      <attribute name="title">