from otree.api import Currency as c, currency_range from . import models from ._builtin import Page, WaitPage from .models import Constants, path def getcv(value): if value == -1: return "-" elif value == 1: return "+" return "" class DecisionPage(Page): form_model = models.Player form_fields = [ 'choice', 'certainty', 'decisionStart', 'decisionEnd', 'certaintyEnd', 'decisionRT', 'certaintyRT' ] def vars_for_template(self): pdone = round(self.player.participant._index_in_pages / self.player.participant._max_page_index * 100) # We cannot access arrays by variable in a django template. # So we put everything into arrays here and then reshuffle # for the template. validities = [ self.player.val1, self.player.val2, self.player.val3, self.player.val4, self.player.val5, self.player.val6] cuevalues = [ [self.player.Acue1, self.player.Acue2, self.player.Acue3, self.player.Acue4, self.player.Acue5, self.player.Acue6], [self.player.Bcue1, self.player.Bcue2, self.player.Bcue3, self.player.Bcue4, self.player.Bcue5, self.player.Bcue6] ] optionnames = [self.player.option1name, self.player.option2name] # cueorder = [ self.player.cue1order-1, # self.player.cue2order-1, # self.player.cue3order-1, # self.player.cue4order-1, # self.player.cue5order-1, # self.player.cue6order-1 ] cuenames = [ self.player.cue1name, self.player.cue2name, self.player.cue3name, self.player.cue4name, self.player.cue5name, self.player.cue6name ] optionorder = [self.player.optionorder, 1-self.player.optionorder] return { "cue1val" : int(validities[0]*100), "cue2val" : int(validities[1]*100), "cue3val" : int(validities[2]*100), "cue4val" : int(validities[3]*100), "cue5val" : int(validities[4]*100), "cue6val" : int(validities[5]*100), "cue1value1" : getcv( cuevalues[optionorder[0]][0] ), "cue2value1" : getcv( cuevalues[optionorder[0]][1] ), "cue3value1" : getcv( cuevalues[optionorder[0]][2] ), "cue4value1" : getcv( cuevalues[optionorder[0]][3] ), "cue5value1" : getcv( cuevalues[optionorder[0]][4] ), "cue6value1" : getcv( cuevalues[optionorder[0]][5] ), "cue1value2" : getcv( cuevalues[optionorder[1]][0] ), "cue2value2" : getcv( cuevalues[optionorder[1]][1] ), "cue3value2" : getcv( cuevalues[optionorder[1]][2] ), "cue4value2" : getcv( cuevalues[optionorder[1]][3] ), "cue5value2" : getcv( cuevalues[optionorder[1]][4] ), "cue6value2" : getcv( cuevalues[optionorder[1]][5] ), "cue1name" : cuenames[0], "cue2name" : cuenames[1], "cue3name" : cuenames[2], "cue4name" : cuenames[3], "cue5name" : cuenames[4], "cue6name" : cuenames[5], "option1name" : optionnames[optionorder[0]], "option2name" : optionnames[optionorder[1]], "pdone" : pdone} def before_next_page(self): # TODO: Not 100% sure what NaiveBayes column indicates... # Usual guess: 1 if option1 should be chosen, 0 otherwise # NaiveBayes=1 # Correct if option1 is chosen, and sides are not flipped # or option2 is chosen and flipped = self.player.optionorder # is option1 chosen after flipping? if flipped == 1: cf = self.player.choice - 1 else: cf = 2 - self.player.choice # Was option1 correct? self.player.Acc = int( self.player.NaiveBayes == cf ) page_sequence = [ DecisionPage ]