from otree.api import ( Currency as c, currency_range, BasePlayer ) from _builtin import Page from .models import Constants import random from numpy.random import choice import numpy import time from functools import reduce from collections import Counter import string from decimal import Decimal, ROUND_HALF_UP from psycopg2.extensions import register_adapter, AsIs def addapt_numpy_float64(numpy_float64): return AsIs(numpy_float64) def addapt_numpy_int64(numpy_int64): return AsIs(numpy_int64) register_adapter(numpy.float64, addapt_numpy_float64) register_adapter(numpy.int64, addapt_numpy_int64) class ID(Page): def is_displayed(self): return self.round_number == 1 form_model = 'player' form_fields = ['prolific_id'] ######################################################################################################################## # Device ############################################################################################################### ######################################################################################################################## class Device(Page): def is_displayed(self): return self.round_number == 1 form_model = 'player' form_fields = ['access_device'] def before_next_page(self): if self.session.config['name'] == 'FL': letters_and_digits = string.ascii_letters + string.digits result_str = ''.join((random.choice(letters_and_digits) for i in range(7))) + str(random.randint(1, 8)) self.player.completion_code = result_str self.participant.vars['completion_code'] = result_str treatments = ['similar', 'dissimilar'] weights_3 = [0, 1] draw_t = choice(treatments, 1, p=weights_3) self.participant.vars['draw_t'] = draw_t[0] if draw_t[0] == 'similar': self.player.new_option_similar = self.participant.vars['new_option_similar'] = True else: self.player.new_option_similar = self.participant.vars['new_option_similar'] = False env = [1, 2, 3] weights_env = [0, 1, 0] draw_env = choice(env, 1, p=weights_env) self.player.environment = self.participant.vars['environment'] = draw_env[0] rounds_after = [1, 40] weights_ra = [0, 1] draw_roundsafter = choice(rounds_after, 1, p=weights_ra) self.player.rounds_after = self.participant.vars['rounds_after'] = draw_roundsafter[0] solution = ['yes', 'no'] weights_4 = [1, 0] draw_solution = choice(solution, 1, p=weights_4) self.participant.vars['draw_solution'] = draw_solution[0] if draw_solution[0] == 'yes': self.player.solution = self.participant.vars['solution'] = True else: self.player.solution = self.participant.vars['solution'] = False order = ['TSR', 'STR', 'RTS', 'TRS', 'SRT', 'RST'] weights = [1/6, 1/6, 1/6, 1/6, 1/6, 1/6] draw = choice(order, 1, p=weights) self.participant.vars['draw'] = draw[0] self.participant.vars['round_fkt'] = self.player.round_fkt order_4th = ['first', 'second', 'third', 'fourth'] weights_4th =[1/4, 1/4, 1/4, 1/4] draw_4th = choice(order_4th, 1, p=weights_4th) self.participant.vars['draw_4th'] = draw_4th[0] self.participant.vars['rounds_exploration'] = 80 + self.player.rounds_after if self.player.rounds_after == 40: dummy = [0, 1] weights_dummy = [1, 0] draw_dummy = choice(dummy, 1, p = weights_dummy) if draw_dummy == 0: self.player.uncertain_rounds = self.participant.vars['uncertain_rounds'] = False elif draw_dummy == 1: self.player.uncertain_rounds = self.participant.vars['uncertain_rounds'] = True else: self.player.uncertain_rounds = self.participant.vars['uncertain_rounds'] = False ######################################################################################################################## # AttentionCheck ########################################################################################################## ######################################################################################################################## class AttentionCheck(Page): def is_displayed(self): return self.round_number == 1 and self.player.access_device != 0 form_model = 'player' form_fields = ['attention_check_1', 'attention_check_2'] ######################################################################################################################## # DeadEnd ############################################################################################################## ######################################################################################################################## class DeadEnd(Page): # this page is only displayed to people with mobile devices # which we do not want to partake and that are "trapped" on this page due to the missing {% next_button %} def is_displayed(self): try: return self.round_number == 1 and self.player.access_device == 0 or self.player.attention_check_1 == 0 or self.player.attention_check_2 != "shoe" except TypeError: self.player.attention_check_1 = None return self.round_number == 1 ######################################################################################################################## # InstruStart ########################################################################################################## ######################################################################################################################## class InstruStart(Page): def is_displayed(self): return self.round_number == 1 def vars_for_template(self): return {'participation_fee': self.session.config['participation_fee'], 'conversion_factor': int(self.session.config['real_world_currency_per_point'] * 100), 'draw': self.participant.vars['draw'], 'environment': self.participant.vars['environment'], 'new_option_similar': self.participant.vars['new_option_similar'], } def before_next_page(self): self.player.instru_page += 1 ######################################################################################################################## # ComprehensionQuestions ############################################################################################### ######################################################################################################################## # class ComprehensionQuestions(Page): form_model = 'player' def is_displayed(self): return self.round_number == 1 and self.player.controls != 1 def vars_for_template(self): return {'participation_fee': self.session.config['participation_fee'], 'conversion_factor': int(self.session.config['real_world_currency_per_point'] * 1000), 'fields': ['cq1', 'cq2', 'cq3'], 'cq_1': self.player.cq1, 'cq_2': self.player.cq2, 'cq_3': self.player.cq3, } def get_form_fields(self): return ['cq1', 'cq2', 'cq3'] def before_next_page(self): if sum([self.player.cq1, self.player.cq2, self.player.cq3]) < 5: self.player.controls = 1 self.player.comprehension_page += 1 self.participant.payoff_value = int(self.participant.payoff) print(self.player.environment) class DeadEnd2(Page): def is_displayed(self) -> bool: return self.player.in_round(1).controls !=1 and self.round_number == 1 ######################################################################################################################## # SAMPLING ############################################################################################################# ######################################################################################################################## class SamplingTransition(Page): form_model = 'player' def is_displayed(self): return self.round_number == 1 def before_next_page(self): self.participant.payoff = 0 class Sampling1(Page): form_model = 'player' def is_displayed(self): return self.round_number <= 20 def get_form_fields(self): return ['option_1_samp', 'option_2_samp', 'option_3_samp'] def vars_for_template(self): return {'draw': self.participant.vars['draw'], 'sampling_round': self.player.sampling_round, 'payoff': self.participant.payoff, 'payoff_value': self.participant.payoff_value, 'bar_width': (self.participant.payoff_value + 400) } def before_next_page(self): zero = [0, 1] zero_weights = [0.8, 0.2] zerodraw_1 = choice(zero, 1, p = zero_weights) zerodraw_2 = choice(zero, 1, p = zero_weights) zerodraw_3 = choice(zero, 1, p = zero_weights) error_1 = numpy.random.normal(loc=0.0, scale= 10, size=None) error_2 = numpy.random.normal(loc=0.0, scale= 10, size=None) error_3 = numpy.random.normal(loc=0.0, scale= 10, size=None) print(error_1) print(error_2) print(error_3) if self.player.option_1_samp == 1: self.player.error_1 = int(error_1) self.player.error_2 = int(error_2) self.player.error_3 = int(error_3) if zerodraw_1 == 1: self.player.payoff= 0 self.player.urn_chosen = "Aegisthus" else: self.player.payoff = 40 + self.player.error_1 self.player.urn_chosen = "Aegisthus" elif self.player.option_2_samp == 1: self.player.error_2 = int(error_2) self.player.error_1 = int(error_1) self.player.error_3 = int(error_3) if zerodraw_2 == 1: self.player.payoff= 0 self.player.urn_chosen = "Achelous" else: self.player.payoff = 50 + self.player.error_2 self.player.urn_chosen = "Achelous" elif self.player.option_3_samp == 1: self.player.error_3 = int(error_3) self.player.error_1 = int(error_1) self.player.error_2 = int(error_2) if zerodraw_3 == 1: self.player.payoff = 0 self.player.urn_chosen = "Actaeon" else: self.player.payoff = 60 + self.player.error_3 self.player.urn_chosen = "Actaeon" if zerodraw_1 == 1: self.player.materials_1 = 0 else: self.player.materials_1 = 40 + self.player.error_1 if zerodraw_2 == 1: self.player.materials_2 = 0 else: self.player.materials_2 = 50 + self.player.error_2 if zerodraw_3 == 1: self.player.materials_3 = 0 else: self.player.materials_3 = 60 + self.player.error_3 print(self.participant.payoff) self.participant.payoff_value = int(self.participant.payoff) class Feedback_Sampling1(Page): form_model = 'player' timeout_seconds = 2 def is_displayed(self): return self.round_number <= 20 def vars_for_template(self): return {'draw': self.participant.vars['draw'], 'materials_1': self.player.materials_1, 'materials_2': self.player.materials_2, 'materials_3': self.player.materials_3, 'payoff': self.player.payoff, 'urn_chosen': self.player.urn_chosen, } class Sampling2(Page): form_model = 'player' def is_displayed(self): return self.round_number > 20 and self.round_number <= 40 def get_form_fields(self): return ['option_1_samp', 'option_2_samp', 'option_3_samp'] def vars_for_template(self): return {'draw': self.participant.vars['draw'], 'sampling_round': self.player.sampling_round, 'payoff': self.participant.payoff, 'payoff_value': self.participant.payoff_value, 'bar_width': (self.participant.payoff_value + 400) } def before_next_page(self): zero = [0, 1] zero_weights = [0.8, 0.2] zerodraw_1 = choice(zero, 1, p = zero_weights) zerodraw_2 = choice(zero, 1, p = zero_weights) zerodraw_3 = choice(zero, 1, p = zero_weights) error_1 = numpy.random.normal(loc=0.0, scale= 10, size=None) error_2 = numpy.random.normal(loc=0.0, scale= 10, size=None) error_3 = numpy.random.normal(loc=0.0, scale= 10, size=None) print(error_1) print(error_2) print(error_3) if self.participant.vars['environment'] == 1: if self.player.option_1_samp == 1: self.player.error_1 = int(error_1) self.player.error_2 = int(error_2) self.player.error_3 = int(error_3) if zerodraw_1 == 1: self.player.payoff= 0 self.player.urn_chosen = "Aegisthus" else: self.player.payoff = 35 + self.player.error_1 self.player.urn_chosen = "Aegisthus" elif self.player.option_2_samp == 1: self.player.error_2 = int(error_2) self.player.error_1 = int(error_1) self.player.error_3 = int(error_3) if zerodraw_2 == 1: self.player.payoff= 0 self.player.urn_chosen = "Achelous" else: self.player.payoff = 45 + self.player.error_2 self.player.urn_chosen = "Achelous" elif self.player.option_3_samp == 1: self.player.error_3 = int(error_3) self.player.error_1 = int(error_1) self.player.error_2 = int(error_2) if zerodraw_3 == 1: self.player.payoff = 0 self.player.urn_chosen = "Actaeon" else: self.player.payoff = 55 + self.player.error_3 self.player.urn_chosen = "Actaeon" if zerodraw_1 == 1: self.player.materials_1 = 0 else: self.player.materials_1 = 35 + self.player.error_1 if zerodraw_2 == 1: self.player.materials_2 = 0 else: self.player.materials_2 = 45 + self.player.error_2 if zerodraw_3 == 1: self.player.materials_3 = 0 else: self.player.materials_3 = 55 + self.player.error_3 elif self.participant.vars['environment']==2: if self.player.option_1_samp == 1: self.player.error_1 = int(error_1) self.player.error_2 = int(error_2) self.player.error_3 = int(error_3) if zerodraw_1 == 1: self.player.payoff= 0 self.player.urn_chosen = "Aegisthus" else: self.player.payoff = 40 + self.player.error_1 self.player.urn_chosen = "Aegisthus" elif self.player.option_2_samp == 1: self.player.error_2 = int(error_2) self.player.error_1 = int(error_1) self.player.error_3 = int(error_3) if zerodraw_2 == 1: self.player.payoff= 0 self.player.urn_chosen = "Achelous" else: self.player.payoff = 50 + self.player.error_2 self.player.urn_chosen = "Achelous" elif self.player.option_3_samp == 1: self.player.error_3 = int(error_3) self.player.error_1 = int(error_1) self.player.error_2 = int(error_2) if zerodraw_3 == 1: self.player.payoff = 0 self.player.urn_chosen = "Actaeon" else: self.player.payoff = 60 + self.player.error_3 self.player.urn_chosen = "Actaeon" if zerodraw_1 == 1: self.player.materials_1 = 0 else: self.player.materials_1 = 40 + self.player.error_1 if zerodraw_2 == 1: self.player.materials_2 = 0 else: self.player.materials_2 = 50 + self.player.error_2 if zerodraw_3 == 1: self.player.materials_3 = 0 else: self.player.materials_3 = 60 + self.player.error_3 if self.participant.vars['environment'] == 3: if self.player.option_1_samp == 1: self.player.error_1 = int(error_1) self.player.error_2 = int(error_2) self.player.error_3 = int(error_3) if zerodraw_1 == 1: self.player.payoff= 0 self.player.urn_chosen = "Aegisthus" else: self.player.payoff = 45 + self.player.error_1 self.player.urn_chosen = "Aegisthus" elif self.player.option_2_samp == 1: self.player.error_2 = int(error_2) self.player.error_1 = int(error_1) self.player.error_3 = int(error_3) if zerodraw_2 == 1: self.player.payoff= 0 self.player.urn_chosen = "Achelous" else: self.player.payoff = 55 + self.player.error_2 self.player.urn_chosen = "Achelous" elif self.player.option_3_samp == 1: self.player.error_3 = int(error_3) self.player.error_1 = int(error_1) self.player.error_2 = int(error_2) if zerodraw_3 == 1: self.player.payoff = 0 self.player.urn_chosen = "Actaeon" else: self.player.payoff = 65 + self.player.error_3 self.player.urn_chosen = "Actaeon" if zerodraw_1 == 1: self.player.materials_1 = 0 else: self.player.materials_1 = 45 + self.player.error_1 if zerodraw_2 == 1: self.player.materials_2 = 0 else: self.player.materials_2 = 55 + self.player.error_2 if zerodraw_3 == 1: self.player.materials_3 = 0 else: self.player.materials_3 = 65 + self.player.error_3 self.participant.payoff_value = int(self.participant.payoff) class Feedback_Sampling2(Page): form_model = 'player' timeout_seconds = 2 def is_displayed(self): return self.round_number > 20 and self.round_number <= 40 def vars_for_template(self): return {'draw': self.participant.vars['draw'], 'materials_1': self.player.materials_1, 'materials_2': self.player.materials_2, 'materials_3': self.player.materials_3, 'payoff': self.player.payoff, 'urn_chosen': self.player.urn_chosen, } class Sampling3(Page): form_model = 'player' def is_displayed(self): return self.round_number > 40 and self.round_number <= 60 def get_form_fields(self): return ['option_1_samp', 'option_2_samp', 'option_3_samp'] def vars_for_template(self): return { 'draw': self.participant.vars['draw'], 'sampling_round': self.player.sampling_round, 'payoff': self.participant.payoff, 'payoff_value': self.participant.payoff_value, 'bar_width': (self.participant.payoff_value + 400) } def before_next_page(self): zero = [0, 1] zero_weights = [0.8, 0.2] zerodraw_1 = choice(zero, 1, p=zero_weights) zerodraw_2 = choice(zero, 1, p=zero_weights) zerodraw_3 = choice(zero, 1, p=zero_weights) error_1 = numpy.random.normal(loc=0.0, scale=10, size=None) error_2 = numpy.random.normal(loc=0.0, scale=10, size=None) error_3 = numpy.random.normal(loc=0.0, scale=10, size=None) print(error_1) print(error_2) print(error_3) if self.participant.vars['environment'] == 1: if self.player.option_1_samp == 1: self.player.error_1 = int(error_1) self.player.error_2 = int(error_2) self.player.error_3 = int(error_3) if zerodraw_1 == 1: self.player.payoff = 0 self.player.urn_chosen = "Aegisthus" else: self.player.payoff = 30 + self.player.error_1 self.player.urn_chosen = "Aegisthus" elif self.player.option_2_samp == 1: self.player.error_2 = int(error_2) self.player.error_1 = int(error_1) self.player.error_3 = int(error_3) if zerodraw_2 == 1: self.player.payoff = 0 self.player.urn_chosen = "Achelous" else: self.player.payoff = 40 + self.player.error_2 self.player.urn_chosen = "Achelous" elif self.player.option_3_samp == 1: self.player.error_3 = int(error_3) self.player.error_1 = int(error_1) self.player.error_2 = int(error_2) if zerodraw_3 == 1: self.player.payoff = 0 self.player.urn_chosen = "Actaeon" else: self.player.payoff = 50 + self.player.error_3 self.player.urn_chosen = "Actaeon" if zerodraw_1 == 1: self.player.materials_1 = 0 else: self.player.materials_1 = 30 + self.player.error_1 if zerodraw_2 == 1: self.player.materials_2 = 0 else: self.player.materials_2 = 40 + self.player.error_2 if zerodraw_3 == 1: self.player.materials_3 = 0 else: self.player.materials_3 = 50 + self.player.error_3 elif self.participant.vars['environment'] == 2: if self.player.option_1_samp == 1: self.player.error_1 = int(error_1) self.player.error_2 = int(error_2) self.player.error_3 = int(error_3) if zerodraw_1 == 1: self.player.payoff = 0 self.player.urn_chosen = "Aegisthus" else: self.player.payoff = 40 + self.player.error_1 self.player.urn_chosen = "Aegisthus" elif self.player.option_2_samp == 1: self.player.error_2 = int(error_2) self.player.error_1 = int(error_1) self.player.error_3 = int(error_3) if zerodraw_2 == 1: self.player.payoff = 0 self.player.urn_chosen = "Achelous" else: self.player.payoff = 50 + self.player.error_2 self.player.urn_chosen = "Achelous" elif self.player.option_3_samp == 1: self.player.error_3 = int(error_3) self.player.error_1 = int(error_1) self.player.error_2 = int(error_2) if zerodraw_3 == 1: self.player.payoff = 0 self.player.urn_chosen = "Actaeon" else: self.player.payoff = 60 + self.player.error_3 self.player.urn_chosen = "Actaeon" if zerodraw_1 == 1: self.player.materials_1 = 0 else: self.player.materials_1 = 40 + self.player.error_1 if zerodraw_2 == 1: self.player.materials_2 = 0 else: self.player.materials_2 = 50 + self.player.error_2 if zerodraw_3 == 1: self.player.materials_3 = 0 else: self.player.materials_3 = 60 + self.player.error_3 if self.participant.vars['environment'] == 3: if self.player.option_1_samp == 1: self.player.error_1 = int(error_1) self.player.error_2 = int(error_2) self.player.error_3 = int(error_3) if zerodraw_1 == 1: self.player.payoff = 0 self.player.urn_chosen = "Aegisthus" else: self.player.payoff = 50 + self.player.error_1 self.player.urn_chosen = "Aegisthus" elif self.player.option_2_samp == 1: self.player.error_2 = int(error_2) self.player.error_1 = int(error_1) self.player.error_3 = int(error_3) if zerodraw_2 == 1: self.player.payoff = 0 self.player.urn_chosen = "Achelous" else: self.player.payoff = 60 + self.player.error_2 self.player.urn_chosen = "Achelous" elif self.player.option_3_samp == 1: self.player.error_3 = int(error_3) self.player.error_1 = int(error_1) self.player.error_2 = int(error_2) if zerodraw_3 == 1: self.player.payoff = 0 self.player.urn_chosen = "Actaeon" else: self.player.payoff = 70 + self.player.error_3 self.player.urn_chosen = "Actaeon" if zerodraw_1 == 1: self.player.materials_1 = 0 else: self.player.materials_1 = 50 + self.player.error_1 if zerodraw_2 == 1: self.player.materials_2 = 0 else: self.player.materials_2 = 60 + self.player.error_2 if zerodraw_3 == 1: self.player.materials_3 = 0 else: self.player.materials_3 = 70 + self.player.error_3 self.participant.payoff_value = int(self.participant.payoff) class Feedback_Sampling3(Page): form_model = 'player' timeout_seconds = 2 def is_displayed(self): return self.round_number > 40 and self.round_number <= 60 def vars_for_template(self): return { 'draw': self.participant.vars['draw'], 'materials_1': self.player.materials_1, 'materials_2': self.player.materials_2, 'materials_3': self.player.materials_3, 'payoff': self.player.payoff, 'urn_chosen': self.player.urn_chosen, } class Sampling4(Page): form_model = 'player' def is_displayed(self): return self.round_number > 60 and self.round_number <= 80 def get_form_fields(self): return ['option_1_samp', 'option_2_samp', 'option_3_samp'] def vars_for_template(self): return { 'draw': self.participant.vars['draw'], 'sampling_round': self.player.sampling_round, 'payoff': self.participant.payoff, 'payoff_value': self.participant.payoff_value, 'bar_width': (self.participant.payoff_value + 400), } def before_next_page(self): zero = [0, 1] zero_weights = [0.8, 0.2] zerodraw_1 = choice(zero, 1, p=zero_weights) zerodraw_2 = choice(zero, 1, p=zero_weights) zerodraw_3 = choice(zero, 1, p=zero_weights) error_1 = numpy.random.normal(loc=0.0, scale=10, size=None) error_2 = numpy.random.normal(loc=0.0, scale=10, size=None) error_3 = numpy.random.normal(loc=0.0, scale=10, size=None) print(error_1) print(error_2) print(error_3) if self.participant.vars['environment'] == 1: if self.player.option_1_samp == 1: self.player.error_1 = int(error_1) self.player.error_2 = int(error_2) self.player.error_3 = int(error_3) if zerodraw_1 == 1: self.player.payoff = 0 self.player.urn_chosen = "Aegisthus" else: self.player.payoff = 25 + self.player.error_1 self.player.urn_chosen = "Aegisthus" elif self.player.option_2_samp == 1: self.player.error_2 = int(error_2) self.player.error_1 = int(error_1) self.player.error_3 = int(error_3) if zerodraw_2 == 1: self.player.payoff = 0 self.player.urn_chosen = "Achelous" else: self.player.payoff = 35 + self.player.error_2 self.player.urn_chosen = "Achelous" elif self.player.option_3_samp == 1: self.player.error_3 = int(error_3) self.player.error_1 = int(error_1) self.player.error_2 = int(error_2) if zerodraw_3 == 1: self.player.payoff = 0 self.player.urn_chosen = "Actaeon" else: self.player.payoff = 45 + self.player.error_3 self.player.urn_chosen = "Actaeon" if zerodraw_1 == 1: self.player.materials_1 = 0 else: self.player.materials_1 = 25 + self.player.error_1 if zerodraw_2 == 1: self.player.materials_2 = 0 else: self.player.materials_2 = 35 + self.player.error_2 if zerodraw_3 == 1: self.player.materials_3 = 0 else: self.player.materials_3 = 45 + self.player.error_3 elif self.participant.vars['environment'] == 2: if self.player.option_1_samp == 1: self.player.error_1 = int(error_1) self.player.error_2 = int(error_2) self.player.error_3 = int(error_3) if zerodraw_1 == 1: self.player.payoff = 0 self.player.urn_chosen = "Aegisthus" else: self.player.payoff = 40 + self.player.error_1 self.player.urn_chosen = "Aegisthus" elif self.player.option_2_samp == 1: self.player.error_2 = int(error_2) self.player.error_1 = int(error_1) self.player.error_3 = int(error_3) if zerodraw_2 == 1: self.player.payoff = 0 self.player.urn_chosen = "Achelous" else: self.player.payoff = 50 + self.player.error_2 self.player.urn_chosen = "Achelous" elif self.player.option_3_samp == 1: self.player.error_3 = int(error_3) self.player.error_1 = int(error_1) self.player.error_2 = int(error_2) if zerodraw_3 == 1: self.player.payoff = 0 self.player.urn_chosen = "Actaeon" else: self.player.payoff = 60 + self.player.error_3 self.player.urn_chosen = "Actaeon" if zerodraw_1 == 1: self.player.materials_1 = 0 else: self.player.materials_1 = 40 + self.player.error_1 if zerodraw_2 == 1: self.player.materials_2 = 0 else: self.player.materials_2 = 50 + self.player.error_2 if zerodraw_3 == 1: self.player.materials_3 = 0 else: self.player.materials_3 = 60 + self.player.error_3 elif self.participant.vars['environment'] == 3: if self.player.option_1_samp == 1: self.player.error_1 = int(error_1) self.player.error_2 = int(error_2) self.player.error_3 = int(error_3) if zerodraw_1 == 1: self.player.payoff = 0 self.player.urn_chosen = "Aegisthus" else: self.player.payoff = 55 + self.player.error_1 self.player.urn_chosen = "Aegisthus" elif self.player.option_2_samp == 1: self.player.error_2 = int(error_2) self.player.error_1 = int(error_1) self.player.error_3 = int(error_3) if zerodraw_2 == 1: self.player.payoff = 0 self.player.urn_chosen = "Achelous" else: self.player.payoff = 65 + self.player.error_2 self.player.urn_chosen = "Achelous" elif self.player.option_3_samp == 1: self.player.error_3 = int(error_3) self.player.error_1 = int(error_1) self.player.error_2 = int(error_2) if zerodraw_3 == 1: self.player.payoff = 0 self.player.urn_chosen = "Actaeon" else: self.player.payoff = 75 + self.player.error_3 self.player.urn_chosen = "Actaeon" if zerodraw_1 == 1: self.player.materials_1 = 0 else: self.player.materials_1 = 55 + self.player.error_1 if zerodraw_2 == 1: self.player.materials_2 = 0 else: self.player.materials_2 = 65 + self.player.error_2 if zerodraw_3 == 1: self.player.materials_3 = 0 else: self.player.materials_3 = 75 + self.player.error_3 self.participant.payoff_value = int(self.participant.payoff) class Feedback_Sampling4(Page): form_model = 'player' timeout_seconds = 2 def is_displayed(self): return self.round_number > 60 and self.round_number <= 80 def vars_for_template(self): return { 'draw': self.participant.vars['draw'], 'materials_1': self.player.materials_1, 'materials_2': self.player.materials_2, 'materials_3': self.player.materials_3, 'payoff': self.player.payoff, 'urn_chosen': self.player.urn_chosen, } def before_next_page(self): if self.round_number == 100: self.player.payoff_firststage = int(self.participant.payoff) ######################################################################################################################## # FKT ################################################################################################################## ######################################################################################################################## class FKTTransition_3(Page): form_model = 'player' def is_displayed(self): return self.round_number == 80 # class FKT(Page): # # form_model = 'player' # # def is_displayed(self): # return self.round_number > 79 and self.round_number <= 89 # # def get_form_fields(self): # return ['FKT_1', 'FKT_2', 'FKT_3', 'FKT_4'] # # def vars_for_template(self): # return { # 'round_fkt': self.participant.vars['round_fkt'], # # } # # def before_next_page(self): # # zero = [0, 1] # zero_weights = [0.8, 0.2] # # zerodraw_1 = choice(zero, 1, p=zero_weights) # zerodraw_2 = choice(zero, 1, p=zero_weights) # zerodraw_3 = choice(zero, 1, p=zero_weights) # zerodraw_4 = choice(zero, 1, p=zero_weights) # # error_1 = numpy.random.normal(loc=0.0, scale=10, size=None) # error_2 = numpy.random.normal(loc=0.0, scale=10, size=None) # error_3 = numpy.random.normal(loc=0.0, scale=10, size=None) # error_4 = numpy.random.normal(loc=0.0, scale=10, size=None) # # if self.player.FKT_1 == 1: # self.player.error_fkt_1 = int(error_1) # # self.player.error_fkt_2 = int(error_2) # # self.player.error_fkt_3 = int(error_3) # # self.player.error_fkt_4 = int(error_4) # # if zerodraw_1 == 1: # self.player.payoff = 0 # self.player.urn_chosen = "Honziorus" # # else: # self.player.payoff = 30 + self.player.error_fkt_1 # self.player.urn_chosen = "Honziorus" # # elif self.player.FKT_2 == 1: # self.player.error_fkt_1 = int(error_1) # # self.player.error_fkt_2 = int(error_2) # # self.player.error_fkt_3 = int(error_3) # # self.player.error_fkt_4 = int(error_4) # # if zerodraw_2 == 1: # self.player.payoff = 0 # self.player.urn_chosen = "Dochuipra" # # else: # self.player.payoff = 40 + self.player.error_fkt_2 # self.player.urn_chosen = "Dochuipra" # # elif self.player.FKT_3 == 1: # self.player.error_fkt_1 = int(error_1) # # self.player.error_fkt_2 = int(error_2) # # self.player.error_fkt_3 = int(error_3) # # self.player.error_fkt_4 = int(error_4) # # # if zerodraw_3 == 1: # self.player.payoff = 0 # self.player.urn_chosen = "Tinkinda" # # else: # self.player.payoff = 60 + self.player.error_fkt_3 # self.player.urn_chosen = "Tinkinda" # # elif self.player.FKT_4 == 1: # self.player.error_fkt_1 = int(error_1) # # self.player.error_fkt_2 = int(error_2) # # self.player.error_fkt_3 = int(error_3) # # self.player.error_fkt_4 = int(error_4) # # if zerodraw_4 == 1: # self.player.payoff = 0 # self.player.urn_chosen = "Ubbarvis" # # else: # self.player.payoff = 80 + self.player.error_fkt_4 # self.player.urn_chosen = "Ubbarvis" # # if zerodraw_1 == 1: # self.player.materials_1_fkt = 0 # else: # self.player.materials_1_fkt = 30 + self.player.error_fkt_1 # # if zerodraw_2 == 1: # self.player.materials_2_fkt = 0 # else: # self.player.materials_2_fkt = 40 + self.player.error_fkt_2 # # if zerodraw_3 == 1: # self.player.materials_3_fkt = 0 # else: # self.player.materials_3_fkt = 60 + self.player.error_fkt_3 # # if zerodraw_4 == 1: # self.player.materials_4_fkt = 0 # else: # self.player.materials_4_fkt = 80 + self.player.error_fkt_4 # # self.participant.vars['round_fkt'] += 1 class FKT_3Planets(Page): form_model = 'player' def is_displayed(self): return self.round_number > 79 and self.round_number <= 89 def get_form_fields(self): return ['FKT_1', 'FKT_2', 'FKT_3', 'FKT_4'] def vars_for_template(self): return { 'round_fkt': self.participant.vars['round_fkt'], } def before_next_page(self): zero = [0, 1] zero_weights = [0.8, 0.2] zerodraw_1 = choice(zero, 1, p=zero_weights) zerodraw_2 = choice(zero, 1, p=zero_weights) zerodraw_3 = choice(zero, 1, p=zero_weights) zerodraw_4 = choice(zero, 1, p=zero_weights) error_1 = numpy.random.normal(loc=0.0, scale=10, size=None) error_2 = numpy.random.normal(loc=0.0, scale=10, size=None) error_3 = numpy.random.normal(loc=0.0, scale=10, size=None) error_4 = numpy.random.normal(loc=0.0, scale=10, size=None) if self.player.FKT_1 == 1: self.player.error_fkt_1 = int(error_1) self.player.error_fkt_2 = int(error_2) self.player.error_fkt_3 = int(error_3) self.player.error_fkt_4 = int(error_4) if zerodraw_1 == 1: self.player.payoff = 0 self.player.urn_chosen = "Honziorus" else: self.player.payoff = 30 + self.player.error_fkt_1 self.player.urn_chosen = "Honziorus" elif self.player.FKT_2 == 1: self.player.error_fkt_1 = int(error_1) self.player.error_fkt_2 = int(error_2) self.player.error_fkt_3 = int(error_3) self.player.error_fkt_4 = int(error_4) if zerodraw_2 == 1: self.player.payoff = 0 self.player.urn_chosen = "Dochuipra" else: self.player.payoff = 40 + self.player.error_fkt_2 self.player.urn_chosen = "Dochuipra" elif self.player.FKT_3 == 1: self.player.error_fkt_1 = int(error_1) self.player.error_fkt_2 = int(error_2) self.player.error_fkt_3 = int(error_3) self.player.error_fkt_4 = int(error_4) if zerodraw_3 == 1: self.player.payoff = 0 self.player.urn_chosen = "Tinkinda" else: self.player.payoff = 60 + self.player.error_fkt_3 self.player.urn_chosen = "Tinkinda" elif self.player.FKT_4 == 1: self.player.error_fkt_1 = int(error_1) self.player.error_fkt_2 = int(error_2) self.player.error_fkt_3 = int(error_3) self.player.error_fkt_4 = int(error_4) if zerodraw_4 == 1: self.player.payoff = 0 self.player.urn_chosen = "Ubbarvis" else: self.player.payoff = 80 + self.player.error_fkt_4 self.player.urn_chosen = "Ubbarvis" if zerodraw_1 == 1: self.player.materials_1_fkt = 0 else: self.player.materials_1_fkt = 30 + self.player.error_fkt_1 if zerodraw_2 == 1: self.player.materials_2_fkt = 0 else: self.player.materials_2_fkt = 40 + self.player.error_fkt_2 if zerodraw_3 == 1: self.player.materials_3_fkt = 0 else: self.player.materials_3_fkt = 60 + self.player.error_fkt_3 if zerodraw_4 == 1: self.player.materials_4_fkt = 0 else: self.player.materials_4_fkt = 80 + self.player.error_fkt_4 self.participant.vars['round_fkt'] += 1 class FKT_Solution(Page): form_model = 'player' def is_displayed(self): return self.round_number == 89 and self.participant.vars['solution'] == True def vars_for_template(self): return { 'solution': self.participant.vars['solution'], } ######################################################################################################################## # Appearance 4th Option ################################################################################################ ######################################################################################################################## class NewOptionTransition(Page): form_model = 'player' def is_displayed(self): return self.round_number == 90 def vars_for_template(self): return{ 'rounds_after': self.participant.vars['rounds_after'], 'uncertain_rounds': self.participant.vars['uncertain_rounds'], } def before_next_page(self): self.player.round_lastblock = 91 - self.player.round_number self.participant.vars['round_lastblock'] = self.player.round_lastblock print(self.participant.vars['environment']) self.participant.payoff = 0 self.participant.payoff_value = self.participant.payoff class Sampling5(Page): form_model = 'player' def is_displayed(self): return self.round_number > 89 and self.round_number <= 129 def get_form_fields(self): return ['option_1_samp', 'option_2_samp', 'option_3_samp', 'option_4_samp'] def vars_for_template(self): return { 'draw': self.participant.vars['draw'], 'sampling_round': self.player.sampling_round, 'new_option_similar': self.participant.vars['new_option_similar'], 'round_lastblock': self.participant.vars['round_lastblock'], 'draw_4th': self.participant.vars['draw_4th'], 'payoff': self.participant.payoff, 'payoff_value': self.participant.payoff_value, 'bar_width': (self.participant.payoff_value + 400), 'rounds_after': self.participant.vars['rounds_after'], 'uncertain_rounds': self.participant.vars['uncertain_rounds'], } def before_next_page(self): if self.participant.vars['new_option_similar'] or not self.participant.vars['new_option_similar']: zero = [0, 1] zero_weights = [0.8, 0.2] zerodraw_1 = choice(zero, 1, p = zero_weights) zerodraw_2 = choice(zero, 1, p = zero_weights) zerodraw_3 = choice(zero, 1, p = zero_weights) zerodraw_4 = choice(zero, 1, p = zero_weights) error_1 = numpy.random.normal(loc=0.0, scale= 10, size=None) error_2 = numpy.random.normal(loc=0.0, scale= 10, size=None) error_3 = numpy.random.normal(loc=0.0, scale= 10, size=None) error_4 = numpy.random.normal(loc=0.0, scale= 10, size=None) print(error_1) print(error_2) print(error_3) if self.participant.vars['environment'] == 1: if self.player.option_1_samp == 1: self.player.error_1 = int(error_1) self.player.error_2 = int(error_2) self.player.error_3 = int(error_3) self.player.error_4 = int(error_4) if zerodraw_1 == 1: self.player.payoff= 0 self.player.urn_chosen = "Aegisthus" else: self.player.payoff = 25 + self.player.error_1 self.player.urn_chosen = "Aegisthus" elif self.player.option_2_samp == 1: self.player.error_2 = int(error_2) self.player.error_1 = int(error_1) self.player.error_3 = int(error_3) self.player.error_4 = int(error_4) if zerodraw_2 == 1: self.player.payoff= 0 self.player.urn_chosen = "Achelous" else: self.player.payoff = 35 + self.player.error_2 self.player.urn_chosen = "Achelous" elif self.player.option_3_samp == 1: self.player.error_3 = int(error_3) self.player.error_1 = int(error_1) self.player.error_2 = int(error_2) self.player.error_4 = int(error_4) if zerodraw_3 == 1: self.player.payoff = 0 self.player.urn_chosen = "Actaeon" else: self.player.payoff = 45 + self.player.error_3 self.player.urn_chosen = "Actaeon" elif self.player.option_4_samp == 1: self.player.error_3 = int(error_3) self.player.error_1 = int(error_1) self.player.error_2 = int(error_2) self.player.error_4 = int(error_4) if zerodraw_4 == 1: self.player.payoff = 0 self.player.urn_chosen = "Admetus" else: self.player.payoff = 55 + self.player.error_4 self.player.urn_chosen = "Admetus" if zerodraw_1 == 1: self.player.materials_1 = 0 else: self.player.materials_1 = 25 + self.player.error_1 if zerodraw_2 == 1: self.player.materials_2 = 0 else: self.player.materials_2 = 35 + self.player.error_2 if zerodraw_3 == 1: self.player.materials_3 = 0 else: self.player.materials_3 = 45 + self.player.error_3 if zerodraw_4 == 1: self.player.materials_4 = 0 else: self.player.materials_4 = 55 + self.player.error_4 elif self.participant.vars['environment'] == 2: if self.player.option_1_samp == 1: self.player.error_1 = int(error_1) self.player.error_2 = int(error_2) self.player.error_3 = int(error_3) self.player.error_4 = int(error_4) if zerodraw_1 == 1: self.player.payoff= 0 self.player.urn_chosen = "Aegisthus" else: self.player.payoff = 40 + self.player.error_1 self.player.urn_chosen = "Aegisthus" elif self.player.option_2_samp == 1: self.player.error_2 = int(error_2) self.player.error_1 = int(error_1) self.player.error_3 = int(error_3) self.player.error_4 = int(error_4) if zerodraw_2 == 1: self.player.payoff= 0 self.player.urn_chosen = "Achelous" else: self.player.payoff = 50 + self.player.error_2 self.player.urn_chosen = "Achelous" elif self.player.option_3_samp == 1: self.player.error_3 = int(error_3) self.player.error_1 = int(error_1) self.player.error_2 = int(error_2) self.player.error_4 = int(error_4) if zerodraw_3 == 1: self.player.payoff = 0 self.player.urn_chosen = "Actaeon" else: self.player.payoff = 60 + self.player.error_3 self.player.urn_chosen = "Actaeon" elif self.player.option_4_samp == 1: self.player.error_3 = int(error_3) self.player.error_1 = int(error_1) self.player.error_2 = int(error_2) self.player.error_4 = int(error_4) if zerodraw_4 == 1: self.player.payoff = 0 self.player.urn_chosen = "Admetus" else: self.player.payoff = 70 + self.player.error_4 self.player.urn_chosen = "Admetus" if zerodraw_1 == 1: self.player.materials_1 = 0 else: self.player.materials_1 = 40 + self.player.error_1 if zerodraw_2 == 1: self.player.materials_2 = 0 else: self.player.materials_2 = 50 + self.player.error_2 if zerodraw_3 == 1: self.player.materials_3 = 0 else: self.player.materials_3 = 60 + self.player.error_3 if zerodraw_4 == 1: self.player.materials_4 = 0 else: self.player.materials_4 = 70 + self.player.error_4 print(self.participant.payoff) if self.participant.vars['environment'] == 3: if self.player.option_1_samp == 1: self.player.error_1 = int(error_1) self.player.error_2 = int(error_2) self.player.error_3 = int(error_3) self.player.error_4 = int(error_4) if zerodraw_1 == 1: self.player.payoff= 0 self.player.urn_chosen = "Aegisthus" else: self.player.payoff = 55 + self.player.error_1 self.player.urn_chosen = "Aegisthus" elif self.player.option_2_samp == 1: self.player.error_2 = int(error_2) self.player.error_1 = int(error_1) self.player.error_3 = int(error_3) self.player.error_4 = int(error_4) if zerodraw_2 == 1: self.player.payoff= 0 self.player.urn_chosen = "Achelous" else: self.player.payoff = 65 + self.player.error_2 self.player.urn_chosen = "Achelous" elif self.player.option_3_samp == 1: self.player.error_3 = int(error_3) self.player.error_1 = int(error_1) self.player.error_2 = int(error_2) self.player.error_4 = int(error_4) if zerodraw_3 == 1: self.player.payoff = 0 self.player.urn_chosen = "Actaeon" else: self.player.payoff = 75 + self.player.error_3 self.player.urn_chosen = "Actaeon" elif self.player.option_4_samp == 1: self.player.error_3 = int(error_3) self.player.error_1 = int(error_1) self.player.error_2 = int(error_2) self.player.error_4 = int(error_4) if zerodraw_4 == 1: self.player.payoff = 0 self.player.urn_chosen = "Admetus" else: self.player.payoff = 85 + self.player.error_4 self.player.urn_chosen = "Admetus" if zerodraw_1 == 1: self.player.materials_1 = 0 else: self.player.materials_1 = 55 + self.player.error_1 if zerodraw_2 == 1: self.player.materials_2 = 0 else: self.player.materials_2 = 65 + self.player.error_2 if zerodraw_3 == 1: self.player.materials_3 = 0 else: self.player.materials_3 = 75 + self.player.error_3 if zerodraw_4 == 1: self.player.materials_4 = 0 else: self.player.materials_4 = 85 + self.player.error_4 # elif not self.participant.vars['new_option_similar']: # # # zero = [0, 1] # zero_weights = [0.8, 0.2] # zero_weights_new = [0.4, 0.6] # # zerodraw_1 = choice(zero, 1, p=zero_weights) # zerodraw_2 = choice(zero, 1, p=zero_weights) # zerodraw_3 = choice(zero, 1, p=zero_weights) # zerodraw_4 = choice(zero, 1, p=zero_weights_new) # # error_1 = numpy.random.normal(loc=0.0, scale=10, size=None) # error_2 = numpy.random.normal(loc=0.0, scale=10, size=None) # error_3 = numpy.random.normal(loc=0.0, scale=10, size=None) # error_4 = numpy.random.normal(loc=0.0, scale=10, size=None) # # if self.participant.vars['environment'] == 1: # # # if self.player.option_1_samp == 1: # self.player.error_1 = int(error_1) # # self.player.error_2 = int(error_2) # # self.player.error_3 = int(error_3) # # self.player.error_4 = int(error_4) # # # if zerodraw_1 == 1: # self.player.payoff= 0 # self.player.urn_chosen = "Aegisthus" # # else: # self.player.payoff = 25 + self.player.error_1 # self.player.urn_chosen = "Aegisthus" # # elif self.player.option_2_samp == 1: # self.player.error_2 = int(error_2) # # self.player.error_1 = int(error_1) # # self.player.error_3 = int(error_3) # # self.player.error_4 = int(error_4) # # if zerodraw_2 == 1: # self.player.payoff= 0 # self.player.urn_chosen = "Achelous" # # else: # self.player.payoff = 35 + self.player.error_2 # self.player.urn_chosen = "Achelous" # # elif self.player.option_3_samp == 1: # self.player.error_3 = int(error_3) # # self.player.error_1 = int(error_1) # # self.player.error_2 = int(error_2) # # self.player.error_4 = int(error_4) # # if zerodraw_3 == 1: # self.player.payoff = 0 # self.player.urn_chosen = "Actaeon" # # else: # self.player.payoff = 45 + self.player.error_3 # self.player.urn_chosen = "Actaeon" # # elif self.player.option_4_samp == 1: # self.player.error_3 = int(error_3) # # self.player.error_1 = int(error_1) # # self.player.error_2 = int(error_2) # # self.player.error_4 = int(error_4) # # if zerodraw_4 == 1: # self.player.payoff = 0 # self.player.urn_chosen = "Admetus" # # else: # self.player.payoff = 110 + self.player.error_4 # self.player.urn_chosen = "Admetus" # # if zerodraw_1 == 1: # self.player.materials_1 = 0 # else: # self.player.materials_1 = 25 + self.player.error_1 # # if zerodraw_2 == 1: # self.player.materials_2 = 0 # else: # self.player.materials_2 = 35 + self.player.error_2 # # if zerodraw_3 == 1: # self.player.materials_3 = 0 # else: # self.player.materials_3 = 45 + self.player.error_3 # # if zerodraw_4 == 1: # self.player.materials_4 = 0 # else: # self.player.materials_4 = 110 + self.player.error_4 # # # elif self.participant.vars['environment'] == 2: # # if self.player.option_1_samp == 1: # self.player.error_1 = int(error_1) # # self.player.error_2 = int(error_2) # # self.player.error_3 = int(error_3) # # self.player.error_4 = int(error_4) # # if zerodraw_1 == 1: # self.player.payoff = 0 # self.player.urn_chosen = "Aegisthus" # # else: # self.player.payoff = 40 + self.player.error_1 # self.player.urn_chosen = "Aegisthus" # # elif self.player.option_2_samp == 1: # self.player.error_2 = int(error_2) # # self.player.error_1 = int(error_1) # # self.player.error_3 = int(error_3) # # self.player.error_4 = int(error_4) # # if zerodraw_2 == 1: # self.player.payoff = 0 # self.player.urn_chosen = "Achelous" # # else: # self.player.payoff = 50 + self.player.error_2 # self.player.urn_chosen = "Achelous" # # elif self.player.option_3_samp == 1: # self.player.error_3 = int(error_3) # # self.player.error_1 = int(error_1) # # self.player.error_2 = int(error_2) # # self.player.error_4 = int(error_4) # # if zerodraw_3 == 1: # self.player.payoff = 0 # self.player.urn_chosen = "Actaeon" # # else: # self.player.payoff = 60 + self.player.error_3 # self.player.urn_chosen = "Actaeon" # # elif self.player.option_4_samp == 1: # self.player.error_3 = int(error_3) # # self.player.error_1 = int(error_1) # # self.player.error_2 = int(error_2) # # self.player.error_4 = int(error_4) # # if zerodraw_4 == 1: # self.player.payoff = 0 # self.player.urn_chosen = "Admetus" # # else: # self.player.payoff = 140 + self.player.error_4 # self.player.urn_chosen = "Admetus" # # if zerodraw_1 == 1: # self.player.materials_1 = 0 # else: # self.player.materials_1 = 40 + self.player.error_1 # # if zerodraw_2 == 1: # self.player.materials_2 = 0 # else: # self.player.materials_2 = 50 + self.player.error_2 # # if zerodraw_3 == 1: # self.player.materials_3 = 0 # else: # self.player.materials_3 = 60 + self.player.error_3 # # if zerodraw_4 == 1: # self.player.materials_4 = 0 # else: # self.player.materials_4 = 140 + self.player.error_4 # # elif self.participant.vars['environment'] == 3: # # if self.player.option_1_samp == 1: # self.player.error_1 = int(error_1) # # self.player.error_2 = int(error_2) # # self.player.error_3 = int(error_3) # # self.player.error_4 = int(error_4) # # if zerodraw_1 == 1: # self.player.payoff = 0 # self.player.urn_chosen = "Aegisthus" # # else: # self.player.payoff = 55 + self.player.error_1 # self.player.urn_chosen = "Aegisthus" # # elif self.player.option_2_samp == 1: # self.player.error_2 = int(error_2) # # self.player.error_1 = int(error_1) # # self.player.error_3 = int(error_3) # # self.player.error_4 = int(error_4) # # if zerodraw_2 == 1: # self.player.payoff = 0 # self.player.urn_chosen = "Achelous" # # else: # self.player.payoff = 65 + self.player.error_2 # self.player.urn_chosen = "Achelous" # # elif self.player.option_3_samp == 1: # self.player.error_3 = int(error_3) # # self.player.error_1 = int(error_1) # # self.player.error_2 = int(error_2) # # self.player.error_4 = int(error_4) # # if zerodraw_3 == 1: # self.player.payoff = 0 # self.player.urn_chosen = "Actaeon" # # else: # self.player.payoff = 75 + self.player.error_3 # self.player.urn_chosen = "Actaeon" # # elif self.player.option_4_samp == 1: # self.player.error_3 = int(error_3) # # self.player.error_1 = int(error_1) # # self.player.error_2 = int(error_2) # # self.player.error_4 = int(error_4) # # if zerodraw_4 == 1: # self.player.payoff = 0 # self.player.urn_chosen = "Admetus" # # else: # self.player.payoff = 170 + self.player.error_4 # self.player.urn_chosen = "Admetus" # # if zerodraw_1 == 1: # self.player.materials_1 = 0 # else: # self.player.materials_1 = 55 + self.player.error_1 # # if zerodraw_2 == 1: # self.player.materials_2 = 0 # else: # self.player.materials_2 = 65 + self.player.error_2 # # if zerodraw_3 == 1: # self.player.materials_3 = 0 # else: # self.player.materials_3 = 75 + self.player.error_3 # # if zerodraw_4 == 1: # self.player.materials_4 = 0 # else: # self.player.materials_4 = 170 + self.player.error_4 self.participant.vars['round_lastblock'] += 1 self.participant.payoff_value = int(self.participant.payoff) class Feedback_Sampling5(Page): form_model = 'player' timeout_seconds = 2 def is_displayed(self): return self.round_number > 89 and self.round_number <= 129 def vars_for_template(self): return { 'draw': self.participant.vars['draw'], 'materials_1': self.player.materials_1, 'materials_2': self.player.materials_2, 'materials_3': self.player.materials_3, 'materials_4': self.player.materials_4, 'payoff': self.player.payoff, 'draw_4th': self.participant.vars['draw_4th'], } # def before_next_page(self): # if self.round_number == 107: # self.player.payoff_secondstage = int(self.participant.payoff) class TransitionQuestionnaire(Page): form_model = 'player' def is_displayed(self): return self.round_number == 129 def vars_for_template(self): return { } def before_next_page(self): pass ######################################################################################################################## # Questionnaire and Final Page ######################################################################################### ######################################################################################################################## class Questionnaire(Page): form_model ='player' form_fields = Constants.ETHNICITIES def get_form_fields(self): if self.player.questionnaire_page == 1: return ['q_risk'] elif self.player.questionnaire_page == 2: return ['q_functions'] elif self.player.questionnaire_page == 3: epo = [f'q_cur_{i}' for i in range(1, 11)] return epo elif self.player.questionnaire_page == 4: return ['q_year', 'q_sex', 'q_employment', 'q_education'] def is_displayed(self): return self.round_number == 129 def vars_for_template(self): return{'questionnaire_page': self.player.questionnaire_page, 'round': self.player.round_number, 'Ethnicities': Constants.ETHNICITIES, 'AA': self.player.AA, 'AI': self.player.AI, 'AS': self.player.AS, 'HL': self.player.HL, 'W': self.player.W, 'O': self.player.O, } def before_next_page(self): self.player.questionnaire_page += 1 class FinalInfo(Page): def is_displayed(self): return self.round_number == 129 def vars_for_template(self): return {'participation_fee': self.session.config['participation_fee'], 'total_payoff': self.participant.payoff_plus_participation_fee(), 'bonus': self.participant.payoff.to_real_world_currency(self.session), 'completion_code': self.participant.vars['completion_code'], 'conversion_factor': int(self.session.config['real_world_currency_per_point'] * 100), } page_sequence = [ #ID, Device, AttentionCheck, DeadEnd, InstruStart, ComprehensionQuestions, ComprehensionQuestions, DeadEnd2, Sampling1, Feedback_Sampling1, Sampling2, Feedback_Sampling2, Sampling3, Feedback_Sampling3, Sampling4, Feedback_Sampling4, FKTTransition_3, FKT_3Planets, FKT_Solution, NewOptionTransition, Sampling5, Feedback_Sampling5, TransitionQuestionnaire, Questionnaire, Questionnaire, Questionnaire, Questionnaire, FinalInfo, ]