from otree.api import * c = cu doc = '' class Constants(BaseConstants): name_in_url = 'judgement' players_per_group = None num_rounds = 20 class Subsession(BaseSubsession): pass def storymaker_g(group): import random players=group.get_players() for p in players: trip_x=p.participant.vars['triplets'] trip_y=p.participant.vars['labels'] tripzip=zip(trip_x,trip_y) tripzipprime=[x for x in tripzip] selection=random.choice(tripzipprime) tmp=list(zip(selection[0],selection[1])) random.shuffle(tmp) p.Story1=tmp[0][0] p.Story2=tmp[1][0] p.Story3=tmp[2][0] p.Label1=tmp[0][1] p.Label2=tmp[1][1] p.Label3=tmp[2][1] class Group(BaseGroup): storymaker_g = storymaker_g def storymaker(player): participant = player.participant import random trip_x=player.participant.vars['triplets'] trip_y=player.participant.vars['labels'] tripzip=zip(trip_x,trip_y) tripzipprime=[x for x in tripzip] player.Slot=random.choice(range(len(tripzipprime))) selection=tripzipprime[player.round_number - 1] tmp=list(zip(selection[0],selection[1])) random.shuffle(tmp) tarlist=[tmp[0][1],tmp[1][1],tmp[2][1]] player.Target=tarlist.index(max(tarlist))+1 player.Story1=tmp[0][0] player.Story2=tmp[1][0] player.Story3=tmp[2][0] def get_triplets(player): import csv import os rawdata=[] all_files=os.listdir('csv_experiments') for file in all_files: with open('csv_experiments/'+file, newline='') as f: reader=csv.reader(f) subdata=[] for row in reader: subdata.append(row) rawdata.append(subdata) triplets=[] for datum in rawdata: header=datum[0] for i in range(1, len(datum)): for j in range(len(datum[i])): triplet=[] if header[j][-6:]=='Truth1' and datum[i][j] != '' and datum[i][j+1] != '' and datum[i][j+2] != '': triplet.append(datum[i][j]) triplet.append(datum[i][j+1]) triplet.append(datum[i][j+2]) triplets.append(triplet) triplet=[] labels=[[0,0,1]]*len(triplets) player.triplets=triplets player.triplabs=labels class Player(BasePlayer): Choice = models.IntegerField(choices=[[1, 'Story 1'], [2, 'Story 2'], [3, 'Story 3']], widget=widgets.RadioSelect) Story1 = models.LongStringField() Story2 = models.LongStringField() Story3 = models.LongStringField() Slot = models.IntegerField() Deceived = models.IntegerField() Target = models.IntegerField() Reward = models.CurrencyField(initial=5) Confidence = models.IntegerField(choices=[[1, '1'], [2, '2'], [3, '3'], [4, '4'], [5, '5'], [6, '6'], [7, '7'], [8, '8'], [9, '9'], [10, '10']], label='', widget=widgets.RadioSelect) Feedback = models.LongStringField(blank=True, label='') storymaker = storymaker get_triplets = get_triplets class TakeJudgements(Page): form_model = 'player' form_fields = ['Choice', 'Confidence', 'Feedback'] @staticmethod def vars_for_template(player): storymaker(player) return dict( s1=player.Story1, s2=player.Story2, s3=player.Story3, ) @staticmethod def before_next_page(player, timeout_happened): participant = player.participant if player.Choice == player.Target: player.Deceived=0 player.Reward += 1 player.payoff=.5 player.participant.vars['points'] += 1 else: player.Deceived=1 page_sequence = [TakeJudgements]