from otree.api import ( models, widgets, BaseConstants, BaseSubsession, BaseGroup, BasePlayer, Currency as c, currency_range ) import random import statistics import json import itertools doc = """ Experiment_KS1_2019_MC """ class Constants(BaseConstants): name_in_url = 'Experiment_KS1_2019_M' #number of player per group: None if group if equal to 1 or all.# players_per_group = None num_rounds = 1 #Constant values payoff IQ# IQ_payment = c(2) IQ_max = c(6) #Slider initial value but will be replaced by random variable at individual level# randomInitial = random.randint(0,100) #Constant values composition of balls in the urn (probabilities) by feedback mode# #The values indicate the threshold. Ex: 40 means that there is 60% chance of getting green ball# #Thresholds are defined for green signals always# #Feedback Mode A# Threshold_Private = c(40) Threshold_Public = c(10) #IQ test correct answers# correct_Puzzles1 = c(3) correct_Puzzles2 = c(1) correct_Puzzles3 = c(3) correct_Puzzles4 = c(4) correct_Puzzles5 = c(1) correct_Puzzles6 = c(3) correct_Puzzles7 = c(3) correct_Puzzles8 = c(3) correct_Puzzles9 = c(1) correct_Puzzles10 = c(1) correct_Puzzles11 = c(2) correct_Puzzles12 = c(2) correct_Puzzles13 = c(2) correct_Puzzles14 = c(1) correct_Puzzles15 = c(1) correct_Puzzles16 = c(1) correct_Puzzles17 = c(1) correct_Puzzles18 = c(3) correct_Puzzles19 = c(2) correct_Puzzles20 = c(4) correct_Puzzles21 = c(3) correct_Puzzles22 = c(4) correct_Puzzles23 = c(2) correct_Puzzles24 = c(3) correct_Puzzles25 = c(2) class Subsession(BaseSubsession): def creating_session(self): #I randomize at the individual level all the random variables needed in the experiment# for p in self.get_players (): #For median split: a random number between 0 and 1 such to avoid unequal split of individuals# p.random_median = random.uniform(0, 1) #For signal receive. Need to draw one numbers in [0;100], based on its value you get a particular signal# p.randomfeedback1 = random.randint (1, 100) #For IQ payment questions: I draw without replacement three numbers. First line: I create a list of 20 numbers [1,20]; #Second line: I draw three numbers from the list without replacement; Third line: I save the numbers in a string# c = list(range (1, 21)) drawns = random.sample(c, 3) p.drawn_IQ_puzzles = json.dumps(drawns) class Group(BaseGroup): # I calculate the median IQ score at the group level. The median score features the random number between 0 and 1 to avoid ties# def set_IQ_median(self): players = self.get_players() IQ_all_correct = [p.total_correct_IQ_random for p in players] self.IQ_median = statistics.median(IQ_all_correct) #I save the result of the median value in a variable at the group level# IQ_median = models.FloatField() class Player(BasePlayer): ##Condition column## subject_condition = models.IntegerField() random_median = models.FloatField() ##Form Fields to make the experiment go smooth in the lab## #First Computer Terminal: check everyonce inserted the right # ComputerTerminal = models.IntegerField(min=1, max=20) #Sets the label of participant for me to quickly check# def Label_Participant(self): self.participant.label = str(self.ComputerTerminal) #Continue variables to prevent participants from jumping ahead# continue1 = models.IntegerField () continue2 = models.IntegerField () ##Comprehension Questions## #Task 1 Comprehension Questions# Task1CQ1 = models.IntegerField ( choices=[ [1, '5 questions'], [2, '10 questions'], [3, '15 questions'], [4, '20 questions'], [5, '25 questions'], ] ) Task1CQ2 = models.IntegerField ( choices=[ [1, '5 minutes'], [2, '10 minutes'], [3, '15 minutes'], [4, '20 minutes'], [5, '25 minutes'], ] ) Task1CQ3 = models.IntegerField ( choices=[ [1, '£0.00'], [2, '£1.00'], [3, '£2.00'], [4, '£4.00'], [5, '£6.00'], ] ) Task1CQ4 = models.IntegerField ( choices=[ [1, 'Yes'], [2, 'No'], ] ) ##IQ variables## #IQ participants' answers# Puzzles1 = models.IntegerField ( blank=True, choices=[[1, 'A'], [2, 'B'], [3, 'C'], [4, 'D'], ], ) Puzzles2 = models.IntegerField ( blank=True, choices=[[1, 'A'], [2, 'B'], [3, 'C'], [4, 'D'], ], ) Puzzles3 = models.IntegerField ( blank=True, choices=[[1, 'A'], [2, 'B'], [3, 'C'], [4, 'D'], ], ) Puzzles4 = models.IntegerField ( blank=True, choices=[[1, 'A'], [2, 'B'], [3, 'C'], [4, 'D'], ], ) Puzzles5 = models.IntegerField ( blank=True, choices=[[1, 'A'], [2, 'B'], [3, 'C'], [4, 'D'], ], ) Puzzles6 = models.IntegerField ( blank=True, choices=[[1, 'Anna Kournikova'], [2, 'Serena Williams '], [3, 'Maria Sharapova'], [4, 'Venus Williams'], ], ) Puzzles7 = models.IntegerField ( blank=True, choices=[[1, 'Tennis'], [2, 'Volleyball'], [3, 'Football'], [4, 'Baseball'], ], ) Puzzles8 = models.IntegerField ( blank=True, choices=[[1, 'Rocardo Alarcon'], [2, 'Pablo Aimar'], [3, 'Roberto Ayala'], [4, 'Matias Almeyda'], ], ) Puzzles9 = models.IntegerField ( blank=True, choices=[[1, 'Alessandro Altobelli'], [2, 'Pietro Anastasi'], [3, 'Florian Albert'], [4, 'Antonio Alsamendi Casas'], ], ) Puzzles10 = models.IntegerField ( blank=True, choices=[[1, 'Coxswain'], [2, 'Sculler'], [3, 'Sweep'], [4, 'Rigger'], ], ) Puzzles11 = models.IntegerField ( blank=True, choices=[[1, 'Distributor'], [2, 'Carburetor'], [3, 'Manifold'], [4, 'Oild filter'], ], ) Puzzles12 = models.IntegerField ( blank=True, choices=[[1, 'Distributor'], [2, 'Regulator'], [3, 'Inverter'], [4, 'Ignition Coil'], ], ) Puzzles13 = models.IntegerField ( blank=True, choices=[[1, 'Camshaft'], [2, 'Ignition Coil'], [3, 'Valves'], [4, 'Rotor'], ], ) Puzzles14 = models.IntegerField ( blank=True, choices=[[1, 'Intake stroke, compression stroke, power stroke, exhaust stroke'], [2, 'Compression stroke, intake stroke, exhaust stroke, power stroke'], [3, 'Intake stroke, power stroke, compression stroke, exhaust stroke'], [4, 'Power stroke, compression stroke, intake stroke, exhaust stroke'], ], ) Puzzles15 = models.IntegerField ( blank=True, choices=[[1, 'Watt (W)'], [2, 'Joule (J)'], [3, 'Newton (N)'], [4, 'Coulomb (C)'], ], ) Puzzles16 = models.IntegerField ( blank=True, choices=[[1, '14π'], [2, '28π'], [3, '7π'], [4, '12π'], ], ) Puzzles17 = models.IntegerField ( blank=True, choices=[[1, 'two points'], [2, 'two rays'], [3, 'two angles'], [4, 'none of the above'], ], ) Puzzles18 = models.IntegerField ( blank=True, choices=[[1, '20'], [2, '25'], [3, '30'], [4, '50'], ], ) Puzzles19 = models.IntegerField ( blank=True, choices=[[1, '120'], [2, '720'], [3, '360'], [4, '24'], ], ) Puzzles20 = models.IntegerField ( blank=True, choices=[[1, '4'], [2, '8'], [3, '10'], [4, 'All of the above can be a side length'], ], ) Puzzles21 = models.IntegerField ( blank=True, choices=[[1, 'Temperature'], [2, 'Humidity'], [3, 'Wind'], [4, 'Pressure'], ], ) Puzzles22 = models.IntegerField ( blank=True, choices=[[1, 'Convection'], [2, 'Conduction'], [3, 'Insulation'], [4, 'Radiation'], ], ) Puzzles23 = models.IntegerField ( blank=True, choices=[[1, 'Speed'], [2, 'Direction'], [3, 'Magnitude and Direction'], [4, 'Magnitude'], ], ) Puzzles24 = models.IntegerField ( blank=True, choices=[[1, 'Vitamin B12'], [2, 'Vitamin E'], [3, 'Vitamin C'], [4, 'Vitamin A'], ], ) Puzzles25 = models.IntegerField ( blank=True, choices=[[1, '212 degrees'], [2, '100 degrees'], [3, '180 degrees'], [4, '32 degrees'], ], ) #IQ correct answers or not (dummy variables)# Puzzles_Q1_correct = models.IntegerField () Puzzles_Q2_correct = models.IntegerField () Puzzles_Q3_correct = models.IntegerField () Puzzles_Q4_correct = models.IntegerField () Puzzles_Q5_correct = models.IntegerField () Puzzles_Q6_correct = models.IntegerField () Puzzles_Q7_correct = models.IntegerField () Puzzles_Q8_correct = models.IntegerField () Puzzles_Q9_correct = models.IntegerField () Puzzles_Q10_correct = models.IntegerField () Puzzles_Q11_correct = models.IntegerField () Puzzles_Q12_correct = models.IntegerField () Puzzles_Q13_correct = models.IntegerField () Puzzles_Q14_correct = models.IntegerField () Puzzles_Q15_correct = models.IntegerField () Puzzles_Q16_correct = models.IntegerField () Puzzles_Q17_correct = models.IntegerField () Puzzles_Q18_correct = models.IntegerField () Puzzles_Q19_correct = models.IntegerField () Puzzles_Q20_correct = models.IntegerField () Puzzles_Q21_correct = models.IntegerField () Puzzles_Q22_correct = models.IntegerField () Puzzles_Q23_correct = models.IntegerField () Puzzles_Q24_correct = models.IntegerField () Puzzles_Q25_correct = models.IntegerField () #How many correct IQ answers# total_correct_IQ = models.IntegerField () #I create this variable at the subsession level: random number to be added to IQ correct answers# random_median = models.FloatField() #How many correct IQ answers + random number# total_correct_IQ_random = models.FloatField() #Signal# signal1_private = models.IntegerField() signal1_public = models.IntegerField() randomfeedback1 = models.IntegerField() ## IQ Functions## # Functions that determine whether an IQ answer is correct or not# def set_payoff1(self): if Constants.correct_Puzzles1 == self.Puzzles1: self.Puzzles_Q1_correct = 1 * 1 if not Constants.correct_Puzzles1 == self.Puzzles1: self.Puzzles_Q1_correct = 0 * 0 def set_payoff2(self): if Constants.correct_Puzzles2 == self.Puzzles2: self.Puzzles_Q2_correct = 1 * 1 if not Constants.correct_Puzzles2 == self.Puzzles2: self.Puzzles_Q2_correct = 0 * 0 def set_payoff3(self): if Constants.correct_Puzzles3 == self.Puzzles3: self.Puzzles_Q3_correct = 1 * 1 if not Constants.correct_Puzzles3 == self.Puzzles3: self.Puzzles_Q3_correct = 0 * 0 def set_payoff4(self): if Constants.correct_Puzzles4 == self.Puzzles4: self.Puzzles_Q4_correct = 1 * 1 if not Constants.correct_Puzzles4 == self.Puzzles4: self.Puzzles_Q4_correct = 0 * 0 def set_payoff5(self): if Constants.correct_Puzzles5 == self.Puzzles5: self.Puzzles_Q5_correct = 1 * 1 if not Constants.correct_Puzzles5 == self.Puzzles5: self.Puzzles_Q5_correct = 0 * 0 def set_payoff6(self): if Constants.correct_Puzzles6 == self.Puzzles6: self.Puzzles_Q6_correct = 1 * 1 if not Constants.correct_Puzzles6 == self.Puzzles6: self.Puzzles_Q6_correct = 0 * 0 def set_payoff7(self): if Constants.correct_Puzzles7 == self.Puzzles7: self.Puzzles_Q7_correct = 1 * 1 if not Constants.correct_Puzzles7 == self.Puzzles7: self.Puzzles_Q7_correct = 0 * 0 def set_payoff8(self): if Constants.correct_Puzzles8 == self.Puzzles8: self.Puzzles_Q8_correct = 1 * 1 if not Constants.correct_Puzzles8 == self.Puzzles8: self.Puzzles_Q8_correct = 0 * 0 def set_payoff9(self): if Constants.correct_Puzzles9 == self.Puzzles9: self.Puzzles_Q9_correct = 1 * 1 if not Constants.correct_Puzzles9 == self.Puzzles9: self.Puzzles_Q9_correct = 0 * 0 def set_payoff10(self): if Constants.correct_Puzzles10 == self.Puzzles10: self.Puzzles_Q10_correct = 1 * 1 if not Constants.correct_Puzzles10 == self.Puzzles10: self.Puzzles_Q10_correct = 0 * 0 def set_payoff11(self): if Constants.correct_Puzzles11 == self.Puzzles11: self.Puzzles_Q11_correct = 1 * 1 if not Constants.correct_Puzzles11 == self.Puzzles11: self.Puzzles_Q11_correct = 0 * 0 def set_payoff12(self): if Constants.correct_Puzzles12 == self.Puzzles12: self.Puzzles_Q12_correct = 1 * 1 if not Constants.correct_Puzzles12 == self.Puzzles12: self.Puzzles_Q12_correct = 0 * 0 def set_payoff13(self): if Constants.correct_Puzzles13 == self.Puzzles13: self.Puzzles_Q13_correct = 1 * 1 if not Constants.correct_Puzzles13 == self.Puzzles13: self.Puzzles_Q13_correct = 0 * 0 def set_payoff14(self): if Constants.correct_Puzzles14 == self.Puzzles14: self.Puzzles_Q14_correct = 1 * 1 if not Constants.correct_Puzzles14 == self.Puzzles14: self.Puzzles_Q14_correct = 0 * 0 def set_payoff15(self): if Constants.correct_Puzzles15 == self.Puzzles15: self.Puzzles_Q15_correct = 1 * 1 if not Constants.correct_Puzzles15 == self.Puzzles15: self.Puzzles_Q15_correct = 0 * 0 def set_payoff16(self): if Constants.correct_Puzzles16 == self.Puzzles16: self.Puzzles_Q16_correct = 1 * 1 if not Constants.correct_Puzzles16 == self.Puzzles16: self.Puzzles_Q16_correct = 0 * 0 def set_payoff17(self): if Constants.correct_Puzzles17 == self.Puzzles17: self.Puzzles_Q17_correct = 1 * 1 if not Constants.correct_Puzzles17 == self.Puzzles17: self.Puzzles_Q17_correct = 0 * 0 def set_payoff18(self): if Constants.correct_Puzzles18 == self.Puzzles18: self.Puzzles_Q18_correct = 1 * 1 if not Constants.correct_Puzzles18 == self.Puzzles18: self.Puzzles_Q18_correct = 0 * 0 def set_payoff19(self): if Constants.correct_Puzzles19 == self.Puzzles19: self.Puzzles_Q19_correct = 1 * 1 if not Constants.correct_Puzzles19 == self.Puzzles19: self.Puzzles_Q19_correct = 0 * 0 def set_payoff20(self): if Constants.correct_Puzzles20 == self.Puzzles20: self.Puzzles_Q20_correct = 1 * 1 if not Constants.correct_Puzzles20 == self.Puzzles20: self.Puzzles_Q20_correct = 0 * 0 def set_payoff21(self): if Constants.correct_Puzzles21 == self.Puzzles21: self.Puzzles_Q21_correct = 1 * 1 if not Constants.correct_Puzzles21 == self.Puzzles21: self.Puzzles_Q21_correct = 0 * 0 def set_payoff22(self): if Constants.correct_Puzzles22 == self.Puzzles22: self.Puzzles_Q22_correct = 1 * 1 if not Constants.correct_Puzzles22 == self.Puzzles22: self.Puzzles_Q22_correct = 0 * 0 def set_payoff23(self): if Constants.correct_Puzzles23 == self.Puzzles23: self.Puzzles_Q23_correct = 1 * 1 if not Constants.correct_Puzzles23 == self.Puzzles23: self.Puzzles_Q23_correct = 0 * 0 def set_payoff24(self): if Constants.correct_Puzzles24 == self.Puzzles24: self.Puzzles_Q24_correct = 1 * 1 if not Constants.correct_Puzzles24 == self.Puzzles24: self.Puzzles_Q24_correct = 0 * 0 def set_payoff25(self): if Constants.correct_Puzzles25 == self.Puzzles25: self.Puzzles_Q25_correct = 1 * 1 if not Constants.correct_Puzzles25 == self.Puzzles25: self.Puzzles_Q25_correct = 0 * 0 # Summing up IQ questions solved correctly # def set_correct_Quiz_total(self): if self.Puzzles_Q1_correct + self.Puzzles_Q2_correct + self.Puzzles_Q3_correct + self.Puzzles_Q4_correct + self.Puzzles_Q5_correct + self.Puzzles_Q6_correct + self.Puzzles_Q7_correct + self.Puzzles_Q8_correct + self.Puzzles_Q9_correct + self.Puzzles_Q10_correct + self.Puzzles_Q11_correct + self.Puzzles_Q12_correct + self.Puzzles_Q13_correct + self.Puzzles_Q14_correct + self.Puzzles_Q15_correct + self.Puzzles_Q16_correct + self.Puzzles_Q17_correct + self.Puzzles_Q18_correct + self.Puzzles_Q19_correct + self.Puzzles_Q20_correct + self.Puzzles_Q21_correct + self.Puzzles_Q22_correct + self.Puzzles_Q23_correct + self.Puzzles_Q24_correct + self.Puzzles_Q25_correct == 25: self.total_correct_IQ = 25 if self.Puzzles_Q1_correct + self.Puzzles_Q2_correct + self.Puzzles_Q3_correct + self.Puzzles_Q4_correct + self.Puzzles_Q5_correct + self.Puzzles_Q6_correct + self.Puzzles_Q7_correct + self.Puzzles_Q8_correct + self.Puzzles_Q9_correct + self.Puzzles_Q10_correct + self.Puzzles_Q11_correct + self.Puzzles_Q12_correct + self.Puzzles_Q13_correct + self.Puzzles_Q14_correct + self.Puzzles_Q15_correct + self.Puzzles_Q16_correct + self.Puzzles_Q17_correct + self.Puzzles_Q18_correct + self.Puzzles_Q19_correct + self.Puzzles_Q20_correct + self.Puzzles_Q21_correct + self.Puzzles_Q22_correct + self.Puzzles_Q23_correct + self.Puzzles_Q24_correct + self.Puzzles_Q25_correct == 24: self.total_correct_IQ = 24 if self.Puzzles_Q1_correct + self.Puzzles_Q2_correct + self.Puzzles_Q3_correct + self.Puzzles_Q4_correct + self.Puzzles_Q5_correct + self.Puzzles_Q6_correct + self.Puzzles_Q7_correct + self.Puzzles_Q8_correct + self.Puzzles_Q9_correct + self.Puzzles_Q10_correct + self.Puzzles_Q11_correct + self.Puzzles_Q12_correct + self.Puzzles_Q13_correct + self.Puzzles_Q14_correct + self.Puzzles_Q15_correct + self.Puzzles_Q16_correct + self.Puzzles_Q17_correct + self.Puzzles_Q18_correct + self.Puzzles_Q19_correct + self.Puzzles_Q20_correct + self.Puzzles_Q21_correct + self.Puzzles_Q22_correct + self.Puzzles_Q23_correct + self.Puzzles_Q24_correct + self.Puzzles_Q25_correct == 23: self.total_correct_IQ = 23 if self.Puzzles_Q1_correct + self.Puzzles_Q2_correct + self.Puzzles_Q3_correct + self.Puzzles_Q4_correct + self.Puzzles_Q5_correct + self.Puzzles_Q6_correct + self.Puzzles_Q7_correct + self.Puzzles_Q8_correct + self.Puzzles_Q9_correct + self.Puzzles_Q10_correct + self.Puzzles_Q11_correct + self.Puzzles_Q12_correct + self.Puzzles_Q13_correct + self.Puzzles_Q14_correct + self.Puzzles_Q15_correct + self.Puzzles_Q16_correct + self.Puzzles_Q17_correct + self.Puzzles_Q18_correct + self.Puzzles_Q19_correct + self.Puzzles_Q20_correct + self.Puzzles_Q21_correct + self.Puzzles_Q22_correct + self.Puzzles_Q23_correct + self.Puzzles_Q24_correct + self.Puzzles_Q25_correct == 22: self.total_correct_IQ = 22 if self.Puzzles_Q1_correct + self.Puzzles_Q2_correct + self.Puzzles_Q3_correct + self.Puzzles_Q4_correct + self.Puzzles_Q5_correct + self.Puzzles_Q6_correct + self.Puzzles_Q7_correct + self.Puzzles_Q8_correct + self.Puzzles_Q9_correct + self.Puzzles_Q10_correct + self.Puzzles_Q11_correct + self.Puzzles_Q12_correct + self.Puzzles_Q13_correct + self.Puzzles_Q14_correct + self.Puzzles_Q15_correct + self.Puzzles_Q16_correct + self.Puzzles_Q17_correct + self.Puzzles_Q18_correct + self.Puzzles_Q19_correct + self.Puzzles_Q20_correct + self.Puzzles_Q21_correct + self.Puzzles_Q22_correct + self.Puzzles_Q23_correct + self.Puzzles_Q24_correct + self.Puzzles_Q25_correct == 21: self.total_correct_IQ = 21 if self.Puzzles_Q1_correct + self.Puzzles_Q2_correct + self.Puzzles_Q3_correct + self.Puzzles_Q4_correct + self.Puzzles_Q5_correct + self.Puzzles_Q6_correct + self.Puzzles_Q7_correct + self.Puzzles_Q8_correct + self.Puzzles_Q9_correct + self.Puzzles_Q10_correct + self.Puzzles_Q11_correct + self.Puzzles_Q12_correct + self.Puzzles_Q13_correct + self.Puzzles_Q14_correct + self.Puzzles_Q15_correct + self.Puzzles_Q16_correct + self.Puzzles_Q17_correct + self.Puzzles_Q18_correct + self.Puzzles_Q19_correct + self.Puzzles_Q20_correct + self.Puzzles_Q21_correct + self.Puzzles_Q22_correct + self.Puzzles_Q23_correct + self.Puzzles_Q24_correct + self.Puzzles_Q25_correct == 20: self.total_correct_IQ = 20 if self.Puzzles_Q1_correct + self.Puzzles_Q2_correct + self.Puzzles_Q3_correct + self.Puzzles_Q4_correct + self.Puzzles_Q5_correct + self.Puzzles_Q6_correct + self.Puzzles_Q7_correct + self.Puzzles_Q8_correct + self.Puzzles_Q9_correct + self.Puzzles_Q10_correct + self.Puzzles_Q11_correct + self.Puzzles_Q12_correct + self.Puzzles_Q13_correct + self.Puzzles_Q14_correct + self.Puzzles_Q15_correct + self.Puzzles_Q16_correct + self.Puzzles_Q17_correct + self.Puzzles_Q18_correct + self.Puzzles_Q19_correct + self.Puzzles_Q20_correct + self.Puzzles_Q21_correct + self.Puzzles_Q22_correct + self.Puzzles_Q23_correct + self.Puzzles_Q24_correct + self.Puzzles_Q25_correct == 19: self.total_correct_IQ = 19 if self.Puzzles_Q1_correct + self.Puzzles_Q2_correct + self.Puzzles_Q3_correct + self.Puzzles_Q4_correct + self.Puzzles_Q5_correct + self.Puzzles_Q6_correct + self.Puzzles_Q7_correct + self.Puzzles_Q8_correct + self.Puzzles_Q9_correct + self.Puzzles_Q10_correct + self.Puzzles_Q11_correct + self.Puzzles_Q12_correct + self.Puzzles_Q13_correct + self.Puzzles_Q14_correct + self.Puzzles_Q15_correct + self.Puzzles_Q16_correct + self.Puzzles_Q17_correct + self.Puzzles_Q18_correct + self.Puzzles_Q19_correct + self.Puzzles_Q20_correct + self.Puzzles_Q21_correct + self.Puzzles_Q22_correct + self.Puzzles_Q23_correct + self.Puzzles_Q24_correct + self.Puzzles_Q25_correct == 18: self.total_correct_IQ = 18 if self.Puzzles_Q1_correct + self.Puzzles_Q2_correct + self.Puzzles_Q3_correct + self.Puzzles_Q4_correct + self.Puzzles_Q5_correct + self.Puzzles_Q6_correct + self.Puzzles_Q7_correct + self.Puzzles_Q8_correct + self.Puzzles_Q9_correct + self.Puzzles_Q10_correct + self.Puzzles_Q11_correct + self.Puzzles_Q12_correct + self.Puzzles_Q13_correct + self.Puzzles_Q14_correct + self.Puzzles_Q15_correct + self.Puzzles_Q16_correct + self.Puzzles_Q17_correct + self.Puzzles_Q18_correct + self.Puzzles_Q19_correct + self.Puzzles_Q20_correct + self.Puzzles_Q21_correct + self.Puzzles_Q22_correct + self.Puzzles_Q23_correct + self.Puzzles_Q24_correct + self.Puzzles_Q25_correct == 17: self.total_correct_IQ = 17 if self.Puzzles_Q1_correct + self.Puzzles_Q2_correct + self.Puzzles_Q3_correct + self.Puzzles_Q4_correct + self.Puzzles_Q5_correct + self.Puzzles_Q6_correct + self.Puzzles_Q7_correct + self.Puzzles_Q8_correct + self.Puzzles_Q9_correct + self.Puzzles_Q10_correct + self.Puzzles_Q11_correct + self.Puzzles_Q12_correct + self.Puzzles_Q13_correct + self.Puzzles_Q14_correct + self.Puzzles_Q15_correct + self.Puzzles_Q16_correct + self.Puzzles_Q17_correct + self.Puzzles_Q18_correct + self.Puzzles_Q19_correct + self.Puzzles_Q20_correct + self.Puzzles_Q21_correct + self.Puzzles_Q22_correct + self.Puzzles_Q23_correct + self.Puzzles_Q24_correct + self.Puzzles_Q25_correct == 16: self.total_correct_IQ = 16 if self.Puzzles_Q1_correct + self.Puzzles_Q2_correct + self.Puzzles_Q3_correct + self.Puzzles_Q4_correct + self.Puzzles_Q5_correct + self.Puzzles_Q6_correct + self.Puzzles_Q7_correct + self.Puzzles_Q8_correct + self.Puzzles_Q9_correct + self.Puzzles_Q10_correct + self.Puzzles_Q11_correct + self.Puzzles_Q12_correct + self.Puzzles_Q13_correct + self.Puzzles_Q14_correct + self.Puzzles_Q15_correct + self.Puzzles_Q16_correct + self.Puzzles_Q17_correct + self.Puzzles_Q18_correct + self.Puzzles_Q19_correct + self.Puzzles_Q20_correct + self.Puzzles_Q21_correct + self.Puzzles_Q22_correct + self.Puzzles_Q23_correct + self.Puzzles_Q24_correct + self.Puzzles_Q25_correct == 15: self.total_correct_IQ = 15 if self.Puzzles_Q1_correct + self.Puzzles_Q2_correct + self.Puzzles_Q3_correct + self.Puzzles_Q4_correct + self.Puzzles_Q5_correct + self.Puzzles_Q6_correct + self.Puzzles_Q7_correct + self.Puzzles_Q8_correct + self.Puzzles_Q9_correct + self.Puzzles_Q10_correct + self.Puzzles_Q11_correct + self.Puzzles_Q12_correct + self.Puzzles_Q13_correct + self.Puzzles_Q14_correct + self.Puzzles_Q15_correct + self.Puzzles_Q16_correct + self.Puzzles_Q17_correct + self.Puzzles_Q18_correct + self.Puzzles_Q19_correct + self.Puzzles_Q20_correct + self.Puzzles_Q21_correct + self.Puzzles_Q22_correct + self.Puzzles_Q23_correct + self.Puzzles_Q24_correct + self.Puzzles_Q25_correct == 14: self.total_correct_IQ = 14 if self.Puzzles_Q1_correct + self.Puzzles_Q2_correct + self.Puzzles_Q3_correct + self.Puzzles_Q4_correct + self.Puzzles_Q5_correct + self.Puzzles_Q6_correct + self.Puzzles_Q7_correct + self.Puzzles_Q8_correct + self.Puzzles_Q9_correct + self.Puzzles_Q10_correct + self.Puzzles_Q11_correct + self.Puzzles_Q12_correct + self.Puzzles_Q13_correct + self.Puzzles_Q14_correct + self.Puzzles_Q15_correct + self.Puzzles_Q16_correct + self.Puzzles_Q17_correct + self.Puzzles_Q18_correct + self.Puzzles_Q19_correct + self.Puzzles_Q20_correct + self.Puzzles_Q21_correct + self.Puzzles_Q22_correct + self.Puzzles_Q23_correct + self.Puzzles_Q24_correct + self.Puzzles_Q25_correct == 13: self.total_correct_IQ = 13 if self.Puzzles_Q1_correct + self.Puzzles_Q2_correct + self.Puzzles_Q3_correct + self.Puzzles_Q4_correct + self.Puzzles_Q5_correct + self.Puzzles_Q6_correct + self.Puzzles_Q7_correct + self.Puzzles_Q8_correct + self.Puzzles_Q9_correct + self.Puzzles_Q10_correct + self.Puzzles_Q11_correct + self.Puzzles_Q12_correct + self.Puzzles_Q13_correct + self.Puzzles_Q14_correct + self.Puzzles_Q15_correct + self.Puzzles_Q16_correct + self.Puzzles_Q17_correct + self.Puzzles_Q18_correct + self.Puzzles_Q19_correct + self.Puzzles_Q20_correct + self.Puzzles_Q21_correct + self.Puzzles_Q22_correct + self.Puzzles_Q23_correct + self.Puzzles_Q24_correct + self.Puzzles_Q25_correct == 12: self.total_correct_IQ = 12 if self.Puzzles_Q1_correct + self.Puzzles_Q2_correct + self.Puzzles_Q3_correct + self.Puzzles_Q4_correct + self.Puzzles_Q5_correct + self.Puzzles_Q6_correct + self.Puzzles_Q7_correct + self.Puzzles_Q8_correct + self.Puzzles_Q9_correct + self.Puzzles_Q10_correct + self.Puzzles_Q11_correct + self.Puzzles_Q12_correct + self.Puzzles_Q13_correct + self.Puzzles_Q14_correct + self.Puzzles_Q15_correct + self.Puzzles_Q16_correct + self.Puzzles_Q17_correct + self.Puzzles_Q18_correct + self.Puzzles_Q19_correct + self.Puzzles_Q20_correct + self.Puzzles_Q21_correct + self.Puzzles_Q22_correct + self.Puzzles_Q23_correct + self.Puzzles_Q24_correct + self.Puzzles_Q25_correct == 11: self.total_correct_IQ = 11 if self.Puzzles_Q1_correct + self.Puzzles_Q2_correct + self.Puzzles_Q3_correct + self.Puzzles_Q4_correct + self.Puzzles_Q5_correct + self.Puzzles_Q6_correct + self.Puzzles_Q7_correct + self.Puzzles_Q8_correct + self.Puzzles_Q9_correct + self.Puzzles_Q10_correct + self.Puzzles_Q11_correct + self.Puzzles_Q12_correct + self.Puzzles_Q13_correct + self.Puzzles_Q14_correct + self.Puzzles_Q15_correct + self.Puzzles_Q16_correct + self.Puzzles_Q17_correct + self.Puzzles_Q18_correct + self.Puzzles_Q19_correct + self.Puzzles_Q20_correct + self.Puzzles_Q21_correct + self.Puzzles_Q22_correct + self.Puzzles_Q23_correct + self.Puzzles_Q24_correct + self.Puzzles_Q25_correct == 10: self.total_correct_IQ = 10 if self.Puzzles_Q1_correct + self.Puzzles_Q2_correct + self.Puzzles_Q3_correct + self.Puzzles_Q4_correct + self.Puzzles_Q5_correct + self.Puzzles_Q6_correct + self.Puzzles_Q7_correct + self.Puzzles_Q8_correct + self.Puzzles_Q9_correct + self.Puzzles_Q10_correct + self.Puzzles_Q11_correct + self.Puzzles_Q12_correct + self.Puzzles_Q13_correct + self.Puzzles_Q14_correct + self.Puzzles_Q15_correct + self.Puzzles_Q16_correct + self.Puzzles_Q17_correct + self.Puzzles_Q18_correct + self.Puzzles_Q19_correct + self.Puzzles_Q20_correct + self.Puzzles_Q21_correct + self.Puzzles_Q22_correct + self.Puzzles_Q23_correct + self.Puzzles_Q24_correct + self.Puzzles_Q25_correct == 9: self.total_correct_IQ = 9 if self.Puzzles_Q1_correct + self.Puzzles_Q2_correct + self.Puzzles_Q3_correct + self.Puzzles_Q4_correct + self.Puzzles_Q5_correct + self.Puzzles_Q6_correct + self.Puzzles_Q7_correct + self.Puzzles_Q8_correct + self.Puzzles_Q9_correct + self.Puzzles_Q10_correct + self.Puzzles_Q11_correct + self.Puzzles_Q12_correct + self.Puzzles_Q13_correct + self.Puzzles_Q14_correct + self.Puzzles_Q15_correct + self.Puzzles_Q16_correct + self.Puzzles_Q17_correct + self.Puzzles_Q18_correct + self.Puzzles_Q19_correct + self.Puzzles_Q20_correct + self.Puzzles_Q21_correct + self.Puzzles_Q22_correct + self.Puzzles_Q23_correct + self.Puzzles_Q24_correct + self.Puzzles_Q25_correct == 8: self.total_correct_IQ = 8 if self.Puzzles_Q1_correct + self.Puzzles_Q2_correct + self.Puzzles_Q3_correct + self.Puzzles_Q4_correct + self.Puzzles_Q5_correct + self.Puzzles_Q6_correct + self.Puzzles_Q7_correct + self.Puzzles_Q8_correct + self.Puzzles_Q9_correct + self.Puzzles_Q10_correct + self.Puzzles_Q11_correct + self.Puzzles_Q12_correct + self.Puzzles_Q13_correct + self.Puzzles_Q14_correct + self.Puzzles_Q15_correct + self.Puzzles_Q16_correct + self.Puzzles_Q17_correct + self.Puzzles_Q18_correct + self.Puzzles_Q19_correct + self.Puzzles_Q20_correct + self.Puzzles_Q21_correct + self.Puzzles_Q22_correct + self.Puzzles_Q23_correct + self.Puzzles_Q24_correct + self.Puzzles_Q25_correct == 7: self.total_correct_IQ = 7 if self.Puzzles_Q1_correct + self.Puzzles_Q2_correct + self.Puzzles_Q3_correct + self.Puzzles_Q4_correct + self.Puzzles_Q5_correct + self.Puzzles_Q6_correct + self.Puzzles_Q7_correct + self.Puzzles_Q8_correct + self.Puzzles_Q9_correct + self.Puzzles_Q10_correct + self.Puzzles_Q11_correct + self.Puzzles_Q12_correct + self.Puzzles_Q13_correct + self.Puzzles_Q14_correct + self.Puzzles_Q15_correct + self.Puzzles_Q16_correct + self.Puzzles_Q17_correct + self.Puzzles_Q18_correct + self.Puzzles_Q19_correct + self.Puzzles_Q20_correct + self.Puzzles_Q21_correct + self.Puzzles_Q22_correct + self.Puzzles_Q23_correct + self.Puzzles_Q24_correct + self.Puzzles_Q25_correct == 6: self.total_correct_IQ = 6 if self.Puzzles_Q1_correct + self.Puzzles_Q2_correct + self.Puzzles_Q3_correct + self.Puzzles_Q4_correct + self.Puzzles_Q5_correct + self.Puzzles_Q6_correct + self.Puzzles_Q7_correct + self.Puzzles_Q8_correct + self.Puzzles_Q9_correct + self.Puzzles_Q10_correct + self.Puzzles_Q11_correct + self.Puzzles_Q12_correct + self.Puzzles_Q13_correct + self.Puzzles_Q14_correct + self.Puzzles_Q15_correct + self.Puzzles_Q16_correct + self.Puzzles_Q17_correct + self.Puzzles_Q18_correct + self.Puzzles_Q19_correct + self.Puzzles_Q20_correct + self.Puzzles_Q21_correct + self.Puzzles_Q22_correct + self.Puzzles_Q23_correct + self.Puzzles_Q24_correct + self.Puzzles_Q25_correct == 5: self.total_correct_IQ = 5 if self.Puzzles_Q1_correct + self.Puzzles_Q2_correct + self.Puzzles_Q3_correct + self.Puzzles_Q4_correct + self.Puzzles_Q5_correct + self.Puzzles_Q6_correct + self.Puzzles_Q7_correct + self.Puzzles_Q8_correct + self.Puzzles_Q9_correct + self.Puzzles_Q10_correct + self.Puzzles_Q11_correct + self.Puzzles_Q12_correct + self.Puzzles_Q13_correct + self.Puzzles_Q14_correct + self.Puzzles_Q15_correct + self.Puzzles_Q16_correct + self.Puzzles_Q17_correct + self.Puzzles_Q18_correct + self.Puzzles_Q19_correct + self.Puzzles_Q20_correct + self.Puzzles_Q21_correct + self.Puzzles_Q22_correct + self.Puzzles_Q23_correct + self.Puzzles_Q24_correct + self.Puzzles_Q25_correct == 4: self.total_correct_IQ = 4 if self.Puzzles_Q1_correct + self.Puzzles_Q2_correct + self.Puzzles_Q3_correct + self.Puzzles_Q4_correct + self.Puzzles_Q5_correct + self.Puzzles_Q6_correct + self.Puzzles_Q7_correct + self.Puzzles_Q8_correct + self.Puzzles_Q9_correct + self.Puzzles_Q10_correct + self.Puzzles_Q11_correct + self.Puzzles_Q12_correct + self.Puzzles_Q13_correct + self.Puzzles_Q14_correct + self.Puzzles_Q15_correct + self.Puzzles_Q16_correct + self.Puzzles_Q17_correct + self.Puzzles_Q18_correct + self.Puzzles_Q19_correct + self.Puzzles_Q20_correct + self.Puzzles_Q21_correct + self.Puzzles_Q22_correct + self.Puzzles_Q23_correct + self.Puzzles_Q24_correct + self.Puzzles_Q25_correct == 3: self.total_correct_IQ = 3 if self.Puzzles_Q1_correct + self.Puzzles_Q2_correct + self.Puzzles_Q3_correct + self.Puzzles_Q4_correct + self.Puzzles_Q5_correct + self.Puzzles_Q6_correct + self.Puzzles_Q7_correct + self.Puzzles_Q8_correct + self.Puzzles_Q9_correct + self.Puzzles_Q10_correct + self.Puzzles_Q11_correct + self.Puzzles_Q12_correct + self.Puzzles_Q13_correct + self.Puzzles_Q14_correct + self.Puzzles_Q15_correct + self.Puzzles_Q16_correct + self.Puzzles_Q17_correct + self.Puzzles_Q18_correct + self.Puzzles_Q19_correct + self.Puzzles_Q20_correct + self.Puzzles_Q21_correct + self.Puzzles_Q22_correct + self.Puzzles_Q23_correct + self.Puzzles_Q24_correct + self.Puzzles_Q25_correct == 2: self.total_correct_IQ = 2 if self.Puzzles_Q1_correct + self.Puzzles_Q2_correct + self.Puzzles_Q3_correct + self.Puzzles_Q4_correct + self.Puzzles_Q5_correct + self.Puzzles_Q6_correct + self.Puzzles_Q7_correct + self.Puzzles_Q8_correct + self.Puzzles_Q9_correct + self.Puzzles_Q10_correct + self.Puzzles_Q11_correct + self.Puzzles_Q12_correct + self.Puzzles_Q13_correct + self.Puzzles_Q14_correct + self.Puzzles_Q15_correct + self.Puzzles_Q16_correct + self.Puzzles_Q17_correct + self.Puzzles_Q18_correct + self.Puzzles_Q19_correct + self.Puzzles_Q20_correct + self.Puzzles_Q21_correct + self.Puzzles_Q22_correct + self.Puzzles_Q23_correct + self.Puzzles_Q24_correct + self.Puzzles_Q25_correct == 1: self.total_correct_IQ = 1 if self.Puzzles_Q1_correct + self.Puzzles_Q2_correct + self.Puzzles_Q3_correct + self.Puzzles_Q4_correct + self.Puzzles_Q5_correct + self.Puzzles_Q6_correct + self.Puzzles_Q7_correct + self.Puzzles_Q8_correct + self.Puzzles_Q9_correct + self.Puzzles_Q10_correct + self.Puzzles_Q11_correct + self.Puzzles_Q12_correct + self.Puzzles_Q13_correct + self.Puzzles_Q14_correct + self.Puzzles_Q15_correct + self.Puzzles_Q16_correct + self.Puzzles_Q17_correct + self.Puzzles_Q18_correct + self.Puzzles_Q19_correct + self.Puzzles_Q20_correct + self.Puzzles_Q21_correct + self.Puzzles_Q22_correct + self.Puzzles_Q23_correct + self.Puzzles_Q24_correct + self.Puzzles_Q25_correct == 0: self.total_correct_IQ = 0 ##2.Median Split based on IQ## #Column that shows whether you are above/below median# AboveMedian = models.BooleanField() # Function to set median, with breaking ties# def set_median(self): self.total_correct_IQ_random = self.total_correct_IQ + round (self.random_median, 2) # It determines whether you are above/below average in the IQ test# def set_AboveMedian(self): if self.total_correct_IQ_random > self.group.IQ_median: self.AboveMedian = 1 * 1 if self.total_correct_IQ_random <= self.group.IQ_median: self.AboveMedian = 0 * 0 #Signal Received def set_feedback_signal1_public(self): if self.AboveMedian == 1: if self.randomfeedback1 > Constants.Threshold_Public: self.signal1_public = 1 if self.randomfeedback1 <= Constants.Threshold_Public: self.signal1_public = -1 if self.AboveMedian == 0: if self.randomfeedback1 < Constants.Threshold_Public: self.signal1_public = 1 if self.randomfeedback1 >= Constants.Threshold_Public: self.signal1_public = -1 def set_feedback_signal1_private(self): if self.AboveMedian == 1: if self.randomfeedback1 > Constants.Threshold_Private: self.signal1_private = 1 if self.randomfeedback1 <= Constants.Threshold_Private: self.signal1_private = -1 if self.AboveMedian == 0: if self.randomfeedback1 < Constants.Threshold_Private: self.signal1_private = 1 if self.randomfeedback1 >= Constants.Threshold_Private: self.signal1_private = -1 ##5. Payments## #1. IQ# #Vector of randomly drawn three IQ puzzles to be paid# drawn_IQ_puzzles = models.StringField () #Cleaning these numbers up# datacleaning_IQ1 = models.StringField() datacleaning_IQ2 = models.StringField() datacleaning_IQ3 = models.StringField() #From vector to three variables of randomly drawn three IQ puzzles to be paid, after cleaning# drawn_IQ_puzzles_1 = models.IntegerField () drawn_IQ_puzzles_2 = models.IntegerField () drawn_IQ_puzzles_3 = models.IntegerField () #Determining whether to pay out each of the randomly determined IQ puzzles depending on whether it is correct# IQ_payoff_1 = models.IntegerField() IQ_payoff_2 = models.IntegerField() IQ_payoff_3 = models.IntegerField() #Total to be paid for this IQ task# IQ_totalpayoff_random3 = models.CurrencyField() #Function that cleans the string that has stored the three randomly chosen IQ questions# def set_payoff_cleaning_IQ(self): self.datacleaning_IQ1 = self.drawn_IQ_puzzles.split()[0] self.datacleaning_IQ1 = self.datacleaning_IQ1[1:] self.datacleaning_IQ1 = self.datacleaning_IQ1[:-1] self.drawn_IQ_puzzles_1 = int(self.datacleaning_IQ1) self.datacleaning_IQ2 = self.drawn_IQ_puzzles.split()[1] self.datacleaning_IQ2 = self.datacleaning_IQ2[:-1] self.drawn_IQ_puzzles_2 = int(self.datacleaning_IQ2) self.datacleaning_IQ3 = self.drawn_IQ_puzzles.split()[2] self.datacleaning_IQ3 = self.datacleaning_IQ3[:-1] self.drawn_IQ_puzzles_3 = int(self.datacleaning_IQ3) #Functions to determine the three randomly chosen IQ questions# def set_IQ_payoff_1(self): self.IQ_payoff_1 = [0, self.Puzzles_Q1_correct, self.Puzzles_Q2_correct, self.Puzzles_Q3_correct, self.Puzzles_Q4_correct, self.Puzzles_Q5_correct, self.Puzzles_Q6_correct, self.Puzzles_Q7_correct, self.Puzzles_Q8_correct, self.Puzzles_Q9_correct, self.Puzzles_Q10_correct, self.Puzzles_Q11_correct, self.Puzzles_Q12_correct, self.Puzzles_Q13_correct, self.Puzzles_Q14_correct, self.Puzzles_Q15_correct, self.Puzzles_Q16_correct, self.Puzzles_Q17_correct, self.Puzzles_Q18_correct, self.Puzzles_Q19_correct, self.Puzzles_Q20_correct, self.Puzzles_Q21_correct,self.Puzzles_Q22_correct, self.Puzzles_Q23_correct, self.Puzzles_Q24_correct, self.Puzzles_Q25_correct][self.drawn_IQ_puzzles_1] def set_IQ_payoff_2(self): self.IQ_payoff_2 = [0, self.Puzzles_Q1_correct, self.Puzzles_Q2_correct, self.Puzzles_Q3_correct, self.Puzzles_Q4_correct, self.Puzzles_Q5_correct, self.Puzzles_Q6_correct, self.Puzzles_Q7_correct, self.Puzzles_Q8_correct, self.Puzzles_Q9_correct, self.Puzzles_Q10_correct, self.Puzzles_Q11_correct, self.Puzzles_Q12_correct, self.Puzzles_Q13_correct, self.Puzzles_Q14_correct, self.Puzzles_Q15_correct, self.Puzzles_Q16_correct, self.Puzzles_Q17_correct, self.Puzzles_Q18_correct, self.Puzzles_Q19_correct, self.Puzzles_Q20_correct, self.Puzzles_Q21_correct,self.Puzzles_Q22_correct, self.Puzzles_Q23_correct, self.Puzzles_Q24_correct, self.Puzzles_Q25_correct][self.drawn_IQ_puzzles_2] def set_IQ_payoff_3(self): self.IQ_payoff_3 = [0, self.Puzzles_Q1_correct, self.Puzzles_Q2_correct, self.Puzzles_Q3_correct, self.Puzzles_Q4_correct, self.Puzzles_Q5_correct, self.Puzzles_Q6_correct, self.Puzzles_Q7_correct, self.Puzzles_Q8_correct, self.Puzzles_Q9_correct, self.Puzzles_Q10_correct, self.Puzzles_Q11_correct, self.Puzzles_Q12_correct, self.Puzzles_Q13_correct, self.Puzzles_Q14_correct, self.Puzzles_Q15_correct, self.Puzzles_Q16_correct, self.Puzzles_Q17_correct, self.Puzzles_Q18_correct, self.Puzzles_Q19_correct, self.Puzzles_Q20_correct, self.Puzzles_Q21_correct,self.Puzzles_Q22_correct, self.Puzzles_Q23_correct, self.Puzzles_Q24_correct, self.Puzzles_Q25_correct][self.drawn_IQ_puzzles_3] #Function that sums up the three chosen questions and multiply the sum by how much we pay each question# def set_IQ_totalpayoff_random3(self): self.IQ_totalpayoff_random3 = (self.IQ_payoff_1 + self.IQ_payoff_2 + self.IQ_payoff_3)*Constants.IQ_payment ######## SAVING PARTICIPANT VARIABLES ######## def set_participant_variables(self): self.participant.vars['AboveMedian']=self.AboveMedian self.participant.vars['Signal1_public']=self.signal1_public self.participant.vars['Signal1_private']=self.signal1_private self.participant.vars['IQ_payoff']=self.IQ_totalpayoff_random3