from otree.api import ( models, widgets, BaseConstants, BaseSubsession, BaseGroup, BasePlayer, Currency as c, currency_range, ) import random import csv import numpy doc = """ Part 2 (f) Results and Payments for the DGs played in the preliminary part of the study. """ SUPERGROUP_NUM_ERR = 'Wrong number of players per supergroup' class Constants(BaseConstants): name_in_url = 'part2_f_A' players_per_group = 2 players_per_supergroup = 2 #assert players_per_supergroup % players_per_group == 0, \ # SUPERGROUP_NUM_ERR num_rounds = 1 ### RANDOM SELECTION of DG --> To be set to (1,39) randomly_selected_round_DG = random.randint(1, 39) conversion_rate = 0.004 print(randomly_selected_round_DG) dg1_X_pointsA = 940 dg1_X_pointsB = 150 dg1_Y_pointsA = 800 dg1_Y_pointsB = 510 dg2_X_pointsA = 970 dg2_X_pointsB = 490 dg2_Y_pointsA = 770 dg2_Y_pointsB = 170 dg3_X_pointsA = 1060 dg3_X_pointsB = 330 dg3_Y_pointsA = 680 dg3_Y_pointsB = 330 dg4_X_pointsA = 990 dg4_X_pointsB = 480 dg4_Y_pointsA = 750 dg4_Y_pointsB = 180 dg5_X_pointsA = 930 dg5_X_pointsB = 510 dg5_Y_pointsA = 810 dg5_Y_pointsB = 150 dg6_X_pointsA = 430 dg6_X_pointsB = 1030 dg6_Y_pointsA = 230 dg6_Y_pointsB = 710 dg7_X_pointsA = 370 dg7_X_pointsB = 1060 dg7_Y_pointsA = 290 dg7_Y_pointsB = 680 dg8_X_pointsA = 350 dg8_X_pointsB = 1060 dg8_Y_pointsA = 310 dg8_Y_pointsB = 680 dg9_X_pointsA = 1010 dg9_X_pointsB = 190 dg9_Y_pointsA = 730 dg9_Y_pointsB = 470 dg10_X_pointsA = 420 dg10_X_pointsB = 1040 dg10_Y_pointsA = 240 dg10_Y_pointsB = 700 dg11_X_pointsA = 450 dg11_X_pointsB = 1020 dg11_Y_pointsA = 210 dg11_Y_pointsB = 720 dg12_X_pointsA = 470 dg12_X_pointsB = 730 dg12_Y_pointsA = 190 dg12_Y_pointsB = 1010 dg13_X_pointsA = 870 dg13_X_pointsB = 140 dg13_Y_pointsA = 870 dg13_Y_pointsB = 520 dg14_X_pointsA = 400 dg14_X_pointsB = 690 dg14_Y_pointsA = 260 dg14_Y_pointsB = 1050 dg15_X_pointsA = 350 dg15_X_pointsB = 680 dg15_Y_pointsA = 310 dg15_Y_pointsB = 1060 dg16_X_pointsA = 950 dg16_X_pointsB = 510 dg16_Y_pointsA = 790 dg16_Y_pointsB = 150 dg17_X_pointsA = 910 dg17_X_pointsB = 520 dg17_Y_pointsA = 830 dg17_Y_pointsB = 140 dg18_X_pointsA = 390 dg18_X_pointsB = 1050 dg18_Y_pointsA = 270 dg18_Y_pointsB = 690 dg19_X_pointsA = 330 dg19_X_pointsB = 680 dg19_Y_pointsA = 330 dg19_Y_pointsB = 1060 dg20_X_pointsA = 890 dg20_X_pointsB = 140 dg20_Y_pointsA = 850 dg20_Y_pointsB = 520 dg21_X_pointsA = 410 dg21_X_pointsB = 1050 dg21_Y_pointsA = 250 dg21_Y_pointsB = 690 dg22_X_pointsA = 1050 dg22_X_pointsB = 270 dg22_Y_pointsA = 690 dg22_Y_pointsB = 390 dg23_X_pointsA = 520 dg23_X_pointsB = 870 dg23_Y_pointsA = 140 dg23_Y_pointsB = 870 dg24_X_pointsA = 890 dg24_X_pointsB = 520 dg24_Y_pointsA = 850 dg24_Y_pointsB = 140 dg25_X_pointsA = 510 dg25_X_pointsB = 810 dg25_Y_pointsA = 150 dg25_Y_pointsB = 930 dg26_X_pointsA = 960 dg26_X_pointsB = 500 dg26_Y_pointsA = 780 dg26_Y_pointsB = 160 dg27_X_pointsA = 620 dg27_X_pointsB = 790 dg27_Y_pointsA = 580 dg27_Y_pointsB = 410 dg28_X_pointsA = 670 dg28_X_pointsB = 420 dg28_Y_pointsA = 530 dg28_Y_pointsB = 780 dg29_X_pointsA = 720 dg29_X_pointsB = 750 dg29_Y_pointsA = 480 dg29_Y_pointsB = 450 dg30_X_pointsA = 700 dg30_X_pointsB = 760 dg30_Y_pointsA = 500 dg30_Y_pointsB = 440 dg31_X_pointsA = 680 dg31_X_pointsB = 780 dg31_Y_pointsA = 520 dg31_Y_pointsB = 420 dg32_X_pointsA = 740 dg32_X_pointsB = 460 dg32_Y_pointsA = 460 dg32_Y_pointsB = 740 dg33_X_pointsA = 620 dg33_X_pointsB = 410 dg33_Y_pointsA = 580 dg33_Y_pointsB = 790 dg34_X_pointsA = 790 dg34_X_pointsB = 600 dg34_Y_pointsA = 410 dg34_Y_pointsB = 600 dg35_X_pointsA = 660 dg35_X_pointsB = 780 dg35_Y_pointsA = 540 dg35_Y_pointsB = 420 dg36_X_pointsA = 690 dg36_X_pointsB = 770 dg36_Y_pointsA = 510 dg36_Y_pointsB = 430 dg37_X_pointsA = 600 dg37_X_pointsB = 410 dg37_Y_pointsA = 600 dg37_Y_pointsB = 790 dg38_X_pointsA = 640 dg38_X_pointsB = 790 dg38_Y_pointsA = 560 dg38_Y_pointsB = 410 dg39_X_pointsA = 780 dg39_X_pointsB = 540 dg39_Y_pointsA = 420 dg39_Y_pointsB = 660 # def slice_list(input): # ppg = Constants.players_per_group # output = [input[i:i+ppg] for i in range(0, len(input), ppg)] # for o in output: # assert len(o) != ppg, SUPERGROUP_NUM_ERR # return output class Subsession(BaseSubsession): def creating_session(self): if self.round_number == 1: assert len(self.get_players()) % \ Constants.players_per_supergroup == 0, \ SUPERGROUP_NUM_ERR ### RANDOM IDs --> nell'originale vengono lette da participant vars # nel demo generate randomly ora: # import itertools # random_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16] # random.shuffle(random_list) # random_ids = itertools.cycle(random_list) # for p in self.get_players(): # p.participant.vars['id_random'] = next(random_ids) # for g in self.get_groups(): # for p in g.get_players(): # if p.participant.vars['id_random'] == 1 or p.participant.vars['id_random'] == 2: # p.participant.vars['supergroup_task3'] = int(1) # elif p.participant.vars['id_random'] == 3 or p.participant.vars['id_random'] == 4: # p.participant.vars['supergroup_task3'] = int(2) # else: # p.participant.vars['supergroup_task3'] = int(3) for g in self.get_groups(): for p in g.get_players(): if p.participant.vars['id_random'] == 1 or p.participant.vars['id_random'] == 6: p.participant.vars['supergroup_task3'] = int(1) elif p.participant.vars['id_random'] == 2 or p.participant.vars['id_random'] == 7: p.participant.vars['supergroup_task3'] = int(2) elif p.participant.vars['id_random'] == 3 or p.participant.vars['id_random'] == 8: p.participant.vars['supergroup_task3'] = int(3) elif p.participant.vars['id_random'] == 4 or p.participant.vars['id_random'] == 5: p.participant.vars['supergroup_task3'] = int(4) elif p.participant.vars['id_random'] == 9 or p.participant.vars['id_random'] == 14: p.participant.vars['supergroup_task3'] = int(5) elif p.participant.vars['id_random'] == 10 or p.participant.vars['id_random'] == 15: p.participant.vars['supergroup_task3'] = int(6) elif p.participant.vars['id_random'] == 11 or p.participant.vars['id_random'] == 16: p.participant.vars['supergroup_task3'] = int(7) else: p.participant.vars['supergroup_task3'] = int(8) subgroups_task3 = set([p.vars['supergroup_task3'] for p in self.session.get_participants()]) new_matrix = [] for s in subgroups_task3: A = [p for p in self.get_players() if p.participant.vars['supergroup_task3'] == s] random.shuffle(A) #sliced_supergroup = slice_list(A) new_matrix.append(A) print(new_matrix) self.set_group_matrix(new_matrix) for g in self.get_groups(): for p in g.get_players(): p.randomly_selected_round_DG = Constants.randomly_selected_round_DG class Group(BaseGroup): def set_other_player_choice(self): for p in self.get_players(): p.set_other_player_choice() class Player(BasePlayer): supergroup_task3 = models.StringField() id_random = models.IntegerField() randomly_selected_round_DG = models.IntegerField() dg_decision_1 = models.StringField() dg_decision_2 = models.StringField() dg_decision_3 = models.StringField() dg_decision_4 = models.StringField() dg_decision_5 = models.StringField() dg_decision_6 = models.StringField() dg_decision_7 = models.StringField() dg_decision_8 = models.StringField() dg_decision_9 = models.StringField() dg_decision_10 = models.StringField() dg_decision_11 = models.StringField() dg_decision_12 = models.StringField() dg_decision_13 = models.StringField() dg_decision_14 = models.StringField() dg_decision_15 = models.StringField() dg_decision_16 = models.StringField() dg_decision_17 = models.StringField() dg_decision_18 = models.StringField() dg_decision_19 = models.StringField() dg_decision_20 = models.StringField() dg_decision_21 = models.StringField() dg_decision_22 = models.StringField() dg_decision_23 = models.StringField() dg_decision_24 = models.StringField() dg_decision_25 = models.StringField() dg_decision_26 = models.StringField() dg_decision_27 = models.StringField() dg_decision_28 = models.StringField() dg_decision_29 = models.StringField() dg_decision_30 = models.StringField() dg_decision_31 = models.StringField() dg_decision_32 = models.StringField() dg_decision_33 = models.StringField() dg_decision_34 = models.StringField() dg_decision_35 = models.StringField() dg_decision_36 = models.StringField() dg_decision_37 = models.StringField() dg_decision_38 = models.StringField() dg_decision_39 = models.StringField() selected_decision_as_dictator = models.StringField() dictator_pointsA = models.IntegerField() dictator_pointsB = models.IntegerField() dictator_pointsA_eur = models.FloatField() dictator_pointsA_eur_to_show = models.FloatField() dictator_pointsB_eur = models.FloatField() dictator_pointsB_eur_to_show = models.FloatField() selected_decision_as_receiver = models.StringField() points_as_receiver = models.IntegerField() points_as_receiver_eur = models.FloatField() points_as_receiver_eur_to_show = models.FloatField() def other_player(self): return self.get_others_in_group()[0] def set_other_player_choice(self): self.selected_decision_as_receiver = self.other_player().selected_decision_as_dictator self.points_as_receiver = self.other_player().dictator_pointsB # supergroup_task1 = models.LongStringField() # supergroup_task2 = models.LongStringField() # id_random = models.IntegerField() # # decision_guess_task1_r1 = models.IntegerField() # decision_guess_task1_r5 = models.IntegerField() # decision_guess_task2_m1_r1 = models.IntegerField() # cooprate_task1_r1 = models.IntegerField() # cooprate_task1_r5 = models.IntegerField() # cooprate_task2_m1_r1 = models.IntegerField() # # payoff_task1_r1_int = models.IntegerField() # payoff_task1_r2_int = models.IntegerField() # payoff_task1_r3_int = models.IntegerField() # payoff_task1_r4_int = models.IntegerField() # payoff_task1_r5_int = models.IntegerField() # cum_payoff_task2_int_m1 = models.IntegerField() # # task2_m1_length = models.IntegerField() # # randomly_selected_round = models.IntegerField() # round_with_guess = models.IntegerField() # # payoff_int = models.IntegerField() # payoff_eur = models.FloatField() # payoff_eur_to_show = models.FloatField() # # cooprate_task1_r1_class = models.IntegerField() # cooprate_task1_r5_class = models.IntegerField() # cooprate_task2_m1_r1_class = models.IntegerField() # decision_guess_task1_r1_premium = models.IntegerField() # decision_guess_task1_r5_premium = models.IntegerField() # decision_guess_task2_m1_r1_premium = models.IntegerField() # decision_guess_premium = models.IntegerField() # # payoff_final = models.FloatField() # payoff_final_to_show = models.FloatField() # cooprate_task1_r2 = models.IntegerField() # cooprate_task1_r3 = models.IntegerField() # cooprate_task1_r4 = models.IntegerField() # decision_task1_r1 = models.IntegerField() # decision_task1_r2 = models.IntegerField() # decision_task1_r3 = models.IntegerField() # decision_task1_r4 = models.IntegerField() # decision_task1_r5 = models.IntegerField() # decision_task1_type_r1 = models.StringField() # decision_task1_type_r2 = models.StringField() # decision_task1_type_r3 = models.StringField() # decision_task1_type_r4 = models.StringField() # decision_task1_type_r5 = models.StringField() # def random_round(self): # self.randomly_selected_round = Constants.randomly_selected_round # if self.randomly_selected_round == 1: # self.participant.vars['payoff_int'] = int(self.participant.vars['payoff_task1_r1_int']) # elif self.randomly_selected_round == 2: # self.participant.vars['payoff_int'] = int(self.participant.vars['payoff_task1_r2_int']) # elif self.randomly_selected_round == 3: # self.participant.vars['payoff_int'] = int(self.participant.vars['payoff_task1_r3_int']) # elif self.randomly_selected_round == 4: # self.participant.vars['payoff_int'] = int(self.participant.vars['payoff_task1_r4_int']) # else: # self.participant.vars['payoff_int'] = int(self.participant.vars['payoff_task1_r5_int'])