from otree.api import ( models, widgets, BaseConstants, BaseSubsession, BaseGroup, BasePlayer, Currency as c, currency_range ) import random import datetime import pytz class Constants(BaseConstants): name_in_url = 'page_sv' players_per_group = None num_rounds = 1 instructions_slider = 't3_svotree/SliderInstructions.html' primary = True # If 15 items (secondary): False class Subsession(BaseSubsession): def creating_session(self): for p in self.get_players(): p.participant.vars['svo'] = True class Group(BaseGroup): def set_payoffs(self): active_players = [p.id_in_subsession for p in self.get_players() if p.slider1 > -1] print('The active players are ', active_players) for n, item in enumerate(active_players): if n % 2 == 0: self.get_player_by_id(item).self_paid = 1 else: self.get_player_by_id(item).self_paid = 0 payoff_own = [p.id_in_subsession for p in self.get_players() if p.self_paid == 1 and p.slider1 > -1] print('The players that get their own payoff are ', payoff_own) for p in self.get_players(): if p.slider1 > -1: if p.self_paid == 1: p.payoff = p.paid_slider_self print('Player {} received {} from his own payoff'.format(p.id_in_subsession,p.payoff)) else: other = self.get_player_by_id(payoff_own.pop()) p.payoff = other.paid_slider_other print('Player {} received {} from player {}'.format(p.id_in_subsession,p.payoff,other)) else: p.payoff = 0 p.participant.vars['payoff_svo'] = p.payoff class Player(BasePlayer): inactive = models.PositiveIntegerField(initial=0) # indicator for inactivity. If greater than X then cannot participate in experiment. # timeout_SliderPrimaryContinuous = models.PositiveIntegerField(initial=0) def payoff_precursor(self): self.slider1_self = 85 self.slider2_self = round(85 + self.slider2 * 0.15) self.slider3_self = round(50 + self.slider3 * 0.35) self.slider4_self = round(50 + self.slider4 * 0.35) self.slider5_self = round(100 - self.slider5 * 0.50) self.slider6_self = round(100 - self.slider6 * 0.15) # if not Constants.primary: # self.slider7_self = round(100 - self.slider7 * 0.30) # self.slider8_self = round(90 + self.slider8 * 0.10) # self.slider9_self = round(100 - self.slider9 * 0.50) # self.slider10_self = round(100 - self.slider10 * 0.10) # self.slider11_self = round(70 + self.slider11 * 0.30) # self.slider12_self = round(50 + self.slider12 * 0.50) # self.slider13_self = round(50 + self.slider13 * 0.50) # self.slider14_self = round(100 - self.slider14 * 0.30) # self.slider15_self = round(90 + self.slider15 * 0.10) self.slider1_other = round(85 - self.slider1 * 0.70) self.slider2_other = round(15 + self.slider2 * 0.35) self.slider3_other = round(100 - self.slider3 * 0.15) self.slider4_other = round(100 - self.slider4 * 0.85) self.slider5_other = round(50 + self.slider5 * 0.50) self.slider6_other = round(50 + self.slider6 * 0.35) # if not Constants.primary: # self.slider7_self = round(50 + self.slider7 * 0.50) # self.slider8_other = round(100 - self.slider8 * 0.10) # self.slider9_other = round(70 + self.slider9 * 0.30) # self.slider10_other = round(70 + self.slider10 * 0.30) # self.slider11_other = round(100 - self.slider11 * 0.30) # self.slider12_other = round(100 - self.slider12 * 0.10) # self.slider13_other = round(100 - self.slider13 * 0.50) # self.slider14_other = round(90 + self.slider14 * 0.10) # self.slider15_other = round(100 - self.slider15 * 0.50) if Constants.primary: self.slider_paid = random.randint(1, 6) # else: # self.slider_paid = random.randint(1, 15) if self.slider_paid == 1: self.paid_slider_self = self.slider1_self self.paid_slider_other = self.slider1_other elif self.slider_paid == 2: self.paid_slider_self = self.slider2_self self.paid_slider_other = self.slider2_other elif self.slider_paid == 3: self.paid_slider_self = self.slider3_self self.paid_slider_other = self.slider3_other elif self.slider_paid == 4: self.paid_slider_self = self.slider4_self self.paid_slider_other = self.slider4_other elif self.slider_paid == 5: self.paid_slider_self = self.slider5_self self.paid_slider_other = self.slider5_other elif self.slider_paid == 6: self.paid_slider_self = self.slider6_self self.paid_slider_other = self.slider6_other # elif self.slider_paid == 7: # self.paid_slider_self = self.slider7_self # self.paid_slider_other = self.slider7_other # elif self.slider_paid == 8: # self.paid_slider_self = self.slider8_self # self.paid_slider_other = self.slider8_other # elif self.slider_paid == 9: # self.paid_slider_self = self.slider9_self # self.paid_slider_other = self.slider9_other # elif self.slider_paid == 10: # self.paid_slider_self = self.slider10_self # self.paid_slider_other = self.slider10_other # elif self.slider_paid == 11: # self.paid_slider_self = self.slider11_self # self.paid_slider_other = self.slider11_other # elif self.slider_paid == 12: # self.paid_slider_self = self.slider12_self # self.paid_slider_other = self.slider12_other # elif self.slider_paid == 13: # self.paid_slider_self = self.slider13_self # self.paid_slider_other = self.slider13_other # elif self.slider_paid == 14: # self.paid_slider_self = self.slider14_self # self.paid_slider_other = self.slider14_other # elif self.slider_paid == 15: # self.paid_slider_self = self.slider15_self # self.paid_slider_other = self.slider15_other print('Slider paid = ', self.slider_paid) self_paid = models.PositiveIntegerField() slider_paid = models.PositiveIntegerField() # get_payoff_from = models.PositiveIntegerField() paid_slider_self = models.PositiveIntegerField() paid_slider_other = models.PositiveIntegerField() slider1 = models.FloatField() slider2 = models.FloatField() slider3 = models.FloatField() slider4 = models.FloatField() slider5 = models.FloatField() slider6 = models.FloatField() # slider7 = models.FloatField() # slider8 = models.FloatField() # slider9 = models.FloatField() # slider10 = models.FloatField() # slider11 = models.FloatField() # slider12 = models.FloatField() # slider13 = models.FloatField() # slider14 = models.FloatField() # slider15 = models.FloatField() slider_angle = models.DecimalField(decimal_places=2, max_digits=5) slider_classification = models.CharField() slider1_self = models.PositiveIntegerField() slider2_self = models.PositiveIntegerField() slider3_self = models.PositiveIntegerField() slider4_self = models.PositiveIntegerField() slider5_self = models.PositiveIntegerField() slider6_self = models.PositiveIntegerField() # slider7_self = models.PositiveIntegerField() # slider8_self = models.PositiveIntegerField() # slider9_self = models.PositiveIntegerField() # slider10_self = models.PositiveIntegerField() # slider11_self = models.PositiveIntegerField() # slider12_self = models.PositiveIntegerField() # slider13_self = models.PositiveIntegerField() # slider14_self = models.PositiveIntegerField() # slider15_self = models.PositiveIntegerField() slider1_other = models.PositiveIntegerField() slider2_other = models.PositiveIntegerField() slider3_other = models.PositiveIntegerField() slider4_other = models.PositiveIntegerField() slider5_other = models.PositiveIntegerField() slider6_other = models.PositiveIntegerField() # slider7_other = models.PositiveIntegerField() # slider8_other = models.PositiveIntegerField() # slider9_other = models.PositiveIntegerField() # slider10_other = models.PositiveIntegerField() # slider11_other = models.PositiveIntegerField() # slider12_other = models.PositiveIntegerField() # slider13_other = models.PositiveIntegerField() # slider14_other = models.PositiveIntegerField() # slider15_other = models.PositiveIntegerField()