from otree.api import ( models, widgets, BaseConstants, BaseSubsession, BaseGroup, BasePlayer, Currency as c, currency_range, ) import numpy as np author = 'Alexander Schneeberger' doc = """ Introduction to the social group """ class Constants(BaseConstants): name_in_url = 'ITG' players_per_group = None num_rounds = 1 # Relevant Questions questions = [ 'Whether or not someone cared for someone weak or vulnerable', 'Whether or not some people were treated differently from others', 'Whether or not someone’s action showed love for his or her country', 'Whether or not someone violated standards of purity and decency' ] class Subsession(BaseSubsession): def creating_session(self): for p in self.get_players(): p.ITG_bonus = self.session.config['ITG_bonus'] if self.session.config['treatment'] == "IND": p.treatment = "IND" elif self.session.config['treatment'] == "COM": p.treatment = "COM" else: p.treatment = np.random.choice(["IND", "COM"]) class Group(BaseGroup): pass class Player(BasePlayer): # Important vars treatment = models.StringField() ITG_bonus = models.CurrencyField() ITG_correct = models.BooleanField() # Displayed Answers A1 = models.IntegerField() A2 = models.IntegerField() A3 = models.IntegerField() A4 = models.IntegerField() A5 = models.IntegerField() # Selected Question, Correct Answer and Entered Answer relevant_index = models.IntegerField() relevant_question = models.StringField() correct_answer = models.IntegerField() entered_answer = models.IntegerField(choices=( [5, 'Extremely relevant'], [4, 'Very relevant'], [3, 'Somewhat relevant'], [2, 'Slightly relevant'], [1, 'Not very relevant'], [0, 'Not at all relevant'], )) # Set Answers for the Questions def set_treatment_vars(self): # Set the Answers of the Social Group if self.treatment == 'IND': self.A1 = 4 self.A2 = 4 self.A3 = 1 self.A4 = 2 self.A5 = 2 elif self.treatment == 'COM': self.A1 = 3 self.A2 = 3 self.A3 = 3 self.A4 = 3 self.A5 = 3 # Determine the Payoff Relevant Question and Answer self.relevant_index = int(np.random.choice(range(len(Constants.questions)))) self.relevant_question = Constants.questions[self.relevant_index] answers = [self.A1, self.A2, self.A3, self.A4, self.A5] self.correct_answer = answers[self.relevant_index] # Determine the Payoff and Save it for the Conclusion def set_payoff(self): if self.entered_answer == self.correct_answer: self.ITG_correct = True self.payoff = self.ITG_bonus else: self.ITG_correct = False self.payoff = c(0) self.participant.vars['ITG_correct'] = self.ITG_correct self.participant.vars['ITG_profit'] = self.payoff