from otree.api import * import random import string #I nead those to convert csv to matrix #import pandas as pd # import numpy as np doc = """ This is the second session of the iq project. First Subjects have to do IQ test, ... """ def get_id(player): player.Melessa_ID = player.participant.melessa_id class Constants(BaseConstants): name_in_url = 'transcription_start_b_w' players_per_group = None num_rounds = 40 num_letters = 6 numbers_list = [] for i in range(1, 27): numbers_list.append(i) code_dict = {} for j in range(0, num_rounds + 1): chars_list = list(string.ascii_uppercase) random.shuffle(chars_list) code_dict[j] = chars_list words_dict = {} chiffre_dict = {} for j in range(0, num_rounds + 1): word = '' chiffre = '' for i in range(0, num_letters): k = random.randint(0, 25) word = word + code_dict[j][k] if i == 0: # to prevent a leading space in the string chiffre = chiffre + str(k + 1) else: chiffre = chiffre + ' ' + str(k + 1) words_dict[j] = word chiffre_dict[j] = chiffre # we have to set actual payment when we know how long it takes to do the experiment, these are just example numbers so far. base_payment = 14 extra_payoff = 6 days_single = 14 days_double = 28 base_tasks = 40 num_training_rounds = 0 class Subsession(BaseSubsession): pass class Group(BaseGroup): pass class Player(BasePlayer): Melessa_ID = models.StringField() num_tasks_total = models.IntegerField() #number of tasks to solve in this session num_tasks_today = models.IntegerField(min=0, max=40, initial=None, blank=True) num_tasks = models.IntegerField() #details_task_2 =models.BooleanField(initial=False) def still_to_solve(player): # if player.session.config['stage_1'] == 1: #return Constants.num_training_rounds - (player.round_number - 1) #elif player.session.config['stage_1'] == 0: return player.in_round(1).num_tasks - (player.round_number - 1) class ChooseToWork(Page): def is_displayed(player): return player.round_number == 1 form_model = 'player' form_fields = ['num_tasks_today'] @staticmethod def error_message(player: Player, values): if values['num_tasks_today']==None and values['details_task_2']==False: return 'You need to choose how many sequences you want to solve right now.' @staticmethod def before_next_page(player: Player, timeout_happened): if player.field_maybe_none('num_tasks_today') != None: player.num_tasks = player.num_tasks_today class ExplanationTask(Page): def is_displayed(player): return player.round_number == 1 @staticmethod def vars_for_template(player: Player): return { 'num_letters': Constants.num_letters, 'number_words': Constants.num_training_rounds, 'number_string': Constants.chiffre_dict[0], 'solution': Constants.words_dict[0], 'display_numbers': Constants.numbers_list, 'display_chars': Constants.code_dict[0], 'words_dict': Constants.words_dict, 'chiffre_dict': Constants.chiffre_dict, } class EnterSolution(Page): # template_name = 'transcription_task/EnterSolution.html' @staticmethod def is_displayed(player): return player.round_number <= player.in_round(1).num_tasks @staticmethod def vars_for_template(player: Player): return { 'number_string': Constants.chiffre_dict[player.round_number], 'solution': Constants.words_dict[player.round_number], 'display_numbers': Constants.numbers_list, 'display_chars': Constants.code_dict[player.round_number], 'solved_words': player.round_number - 1, 'still_to_solve': player.still_to_solve(), 'words_dict': Constants.words_dict, 'chiffre_dict': Constants.chiffre_dict, } @staticmethod def before_next_page(player, timeout_happened): return { 'solved_words': player.round_number, } class LastPage2(Page): def is_displayed(player): # if player.session.config['stage_1'] == 1: return player.round_number == Constants.num_rounds @staticmethod def vars_for_template(player: Player): return dict( Melessa_ID=get_id(player) ) class Part3(Page): def is_displayed(player): return player.round_number == 1 page_sequence = [ Part3, ChooseToWork, #ChooseToWorkB, ExplanationTask, EnterSolution, LastPage2, ]