from otree.api import ( models, widgets, BaseConstants, BaseSubsession, BaseGroup, BasePlayer, Currency as c, currency_range, ) author = 'Your name here' doc = """ Your app description """ class Constants(BaseConstants): name_in_url = 'my_public_goods' players_per_group = 2 num_rounds = 2 endowment = c(1000) # c() means its a currency multiplier = 2 other_players = range(0,players_per_group,1) x = range(-5,15,1) def make_field(label): return models.BooleanField(label=label,widget=widgets.RadioSelect,) class Subsession(BaseSubsession): treatment = models.StringField() def creating_session(self): if self.round_number == 1: self.treatment = 'https://ckurb.s3-us-west-2.amazonaws.com/A30201N2.json' elif self.round_number == 2: self.treatment = 'https://ckurb.s3-us-west-2.amazonaws.com/A20201N2.json' class Group(BaseGroup): total_contribution = models.CurrencyField() individual_share = models.CurrencyField() def set_payoffs(self): players = self.get_players() contributions = [p.contribution for p in players] self.total_contribution = sum(contributions) self.individual_share = self.total_contribution * Constants.multiplier / Constants.players_per_group for p in players: p.payoff = Constants.endowment - p.contribution + self.individual_share class Player(BasePlayer): contribution = models.CurrencyField( min=0, max=Constants.endowment, label="How much will you contribute?" ) q_05 = make_field('-0.5') q_04 = make_field('-0.4') q_03 = make_field('-0.3') q_02 = make_field('-0.2') q_01 = make_field('-0.1') q00 = make_field('0.0') q01 = make_field('0.1') q02 = make_field('0.2') q03 = make_field('0.3') q04 = make_field('0.4') q05 = make_field('0.5') q06 = make_field('0.6') q07 = make_field('0.7') q08 = make_field('0.8') q09 = make_field('0.9') q10 = make_field('1.0') q11 = make_field('1.1') q12 = make_field('1.2') q13 = make_field('1.3') q14 = make_field('1.4') q15 = make_field('1.5')