from otree.api import ( models, widgets, BaseConstants, BaseSubsession, BaseGroup, BasePlayer, ) author = 'Your name here' doc = """ Your app description """ class Constants(BaseConstants): name_in_url = 'credibility_NI_NB' players_per_group = 6 num_rounds = 5 participation_fee = 1 pay_yellow_A = 10 #In + not roll pay_yellow_B = 100 #In + not roll pay_purple_6_A = 10 #In + Roll; dice = 6 pay_purple_A = 100 #In + Roll; dice < 6 pay_orange = 20 #Out pay_purple_B = 50 #In + Roll ## 2 payoff structure: pay_yellow_A 10c; pay_purple_B 70c and pay_yellow_A 10c 10c; pay_purple_B 50c class Subsession(BaseSubsession): #@staticmethod def group_by_arrival_time_method(self, waiting_players): new_group = [] for p in waiting_players: new_group.append(p) if len(new_group) == 6: # here the number of player that form a group are defined. return new_group for p in waiting_players: # this automatically advances players that have been waiting too long. if p.waiting_too_long(): p.participant.vars['time'] = 1 return [p] class Group(BaseGroup): pass class Player(BasePlayer): def waiting_too_long(self): import time return time.time() - self.participant.vars['wait_page_arrival'] > 300 failed_matching = models.IntegerField() is_dropout = models.BooleanField(initial=False) #### TRUST GAME ##### role_TG = models.CharField() group_TG = models.IntegerField() decisive_A = models.IntegerField() decisive_A_enter = models.IntegerField() #Participant A enter = models.IntegerField(initial=0) #Participant B promise = models.IntegerField() promise_TG = models.IntegerField(initial=0) roll = models.IntegerField(initial=1) die = models.IntegerField() reliable = models.IntegerField() reliable_TG = models.IntegerField() ### ASSESSMENT TASK #### belief = models.IntegerField(initial=0) qsr = models.FloatField(initial=0) #### MAINTENANCE GAME ##### group_MG = models.IntegerField() group_MG_id = models.IntegerField() intent = models.IntegerField(initial=20) intent_p1 = models.IntegerField() intent_p2 = models.IntegerField() intent_p3 = models.IntegerField() take = models.IntegerField(initial=20) take_p1 = models.IntegerField() take_p2 = models.IntegerField() take_p3 = models.IntegerField() left = models.IntegerField() current_pay = models.IntegerField() current_pay_p1 = models.IntegerField() current_pay_p2 = models.IntegerField() current_pay_p3 = models.IntegerField() #### PAYOFF #### lucky_number = models.FloatField() pay_qsr = models.FloatField() pay_TG = models.FloatField() pay_MG = models.FloatField() total_pay = models.FloatField() rand_round = models.IntegerField() code = models.IntegerField() #Demographics q_english = models.PositiveIntegerField(initial=None, choices=[[0, 'No'], [1, 'Yes']], label='Is English the language you use the most at home?', widget=widgets.RadioSelect()) q_age = models.PositiveIntegerField(label='How old are you?', choices=range(18, 80), initial=None, blank=True) q_gender = models.PositiveIntegerField(initial=None, choices=[[0, 'Male'], [1, 'Female'],[2, 'Other'],[3, 'Prefer not to say']], label='Which category best describe your gender?', widget=widgets.RadioSelect()) q_risk = models.PositiveIntegerField(label="Are you a person who is generally willing to take risks, or do you try to avoid taking risks on a scale from 0 (completely unwilling to take risks) to 10 (completely willing to take risks)?", choices=range(0, 11), initial=None, blank=True) q_clarity = models.PositiveIntegerField(initial=None, choices=[[0, 'Extremely unclear'], [1, 'Somewhat unclear'], [2, 'Somewhat clear'], [3, 'Extremely clear']], label='How would you rate the clarity of the questions?', widget=widgets.RadioSelect()) q_check = models.StringField( label="", ) q_other = models.CharField(blank=True) ### FAILED DECISIONS ### failed_promise = models.IntegerField(initial=0) failed_quizzA = models.IntegerField(initial=0) failed_quizzB = models.IntegerField(initial=0) failed_decisionA = models.IntegerField(initial=0) failed_decisionB = models.IntegerField(initial=0) failed_quizz2 = models.IntegerField(initial=0) failed_belief = models.IntegerField(initial=0) failed_intent = models.IntegerField(initial=0) failed_take = models.IntegerField(initial=0) ### BOXES COUNTER ### box_Part1_quizzA = models.IntegerField(blank=True) box_Part1_quizzB = models.IntegerField(blank=True) box_promise = models.IntegerField(blank=True) box_decisionA_TG = models.IntegerField(blank=True) box_decisionB_TG = models.IntegerField(blank=True) box_Part2_quizz = models.IntegerField(blank=True) box_intention_MG = models.IntegerField(blank=True) box_decision_MG = models.IntegerField(blank=True)