# drEffects, survey from otree.api import Currency as c, currency_range from . import models from ._builtin import Page, WaitPage from .models import Constants from django.conf import settings import time import random import math class payoffWaitPage(WaitPage): def after_all_players_arrive(self): for p in self.subsession.get_players(): p.task_A_score = p.participant.vars['task_A_score'] p.task_B_score = p.participant.vars['task_B_score'] p.task_C_score = p.participant.vars['task_C_score'] p.task_A_belief = p.participant.vars['task_A_belief'] p.task_B_belief = p.participant.vars['task_B_belief'] class payoffs(Page): def vars_for_template(self): players = self.subsession.get_players() other_players = self.player.get_others_in_subsession() count_other_players = len(other_players) self.player.count_other_players = len(other_players) count_lower_task_A = len([p for p in other_players if p.task_A_score < self.player.task_A_score]) self.player.count_lower_task_A = count_lower_task_A percentage_lower_A = (count_lower_task_A/count_other_players)*100 self.player.percentage_lower_A = percentage_lower_A self.player.task_A_belief_payoffs = self.session.config['additional_tokens'] - abs(percentage_lower_A - self.player.task_A_belief)*self.session.config['additional_token_reduction'] count_lower_task_B = len([p for p in other_players if p.task_B_score < self.player.task_B_score]) self.player.count_lower_task_B = count_lower_task_B percentage_lower_B = (count_lower_task_B/count_other_players)*100 self.player.percentage_lower_B = percentage_lower_B self.player.task_B_belief_payoffs = self.session.config['additional_tokens'] - abs(percentage_lower_B - self.player.task_B_belief)*self.session.config['additional_token_reduction'] if self.player.payoff_task == 1: self.player.chosen_score = self.player.task_C_score self.player.payoff = self.player.task_C_score elif self.player.payoff_task == 2: self.player.chosen_score = round(self.player.task_A_score,1) self.player.correct_answers = self.player.chosen_score self.player.chosen_belief_score = self.player.task_A_belief_payoffs self.player.payoff = self.player.task_A_score + self.player.task_A_belief_payoffs else: self.player.chosen_score = round(self.player.task_B_score,1) if self.participant.vars['choose_task_2']==1: self.player.correct_answers = round(self.player.task_B_score/self.session.config['amount_tokens']) else: self.player.correct_answers = round(self.player.task_B_score/self.session.config['amount_tokens_higher']) self.player.chosen_belief_score = self.player.task_B_belief_payoffs self.player.payoff = self.player.task_B_score + self.player.task_B_belief_payoffs self.participant.payoff = self.player.payoff return { 'final_earnings': self.player.payoff.to_real_world_currency(self.session) + self.session.config['participation_fee'], 'choose_task_2' : self.player.participant.vars['choose_task_2'], 'token_amount' : self.session.config['amount_tokens_higher'] # 'final_earnings': self.participant.payoff_plus_participation_fee() } page_sequence = [ payoffWaitPage, payoffs ]