from otree.api import ( models, widgets, BaseConstants, BaseSubsession, BaseGroup, BasePlayer, Currency as c, currency_range, ) author = 'Aaron Lob' doc = """ Simpsons Paradoxon """ class Constants(BaseConstants): name_in_url = 'Simpson' players_per_group = 3 num_rounds = 1 class Subsession(BaseSubsession): def group_by_arrival_time_method(self, waiting_players): import time if len(waiting_players) >= Constants.players_per_group: #import random #pickedCondition = random.choice(["11.02.","12.02.","13.02.","14.02."]) #players = self.get_players() #for p in players: #p.condition = pickedCondition #p.nickname = "Person {}".format(p.id_in_group) return waiting_players[:Constants.players_per_group] for p in waiting_players: if time.time() - p.participant.vars['ArrivalTime'] > 10*60: #pickedCondition = random.choice(["11.02.","12.02.","13.02","14.02."]) #for p in waiting_players: #import random #pickedCondition = random.choice(["11.02.","12.02.","13.02","14.02."]) #p.condition = random.choice(["11.02.","12.02.","13.02","14.02."]) p.Singleplayer = 1 return [p] else: pass class Group(BaseGroup): condition = models.StringField() groupIdentifier = models.StringField() # disagreement-check: Ginge noch besser indem ich immer wieder auf die gleiche Seite gehen lasse def check_for_disagreement_one(self): p1 = self.get_player_by_id(1) p2 = self.get_player_by_id(2) p3 = self.get_player_by_id(3) if p1.decGroup1 == p2.decGroup1 == p3.decGroup1: pass else: p1.disagreement += 1 p2.disagreement += 1 p3.disagreement += 1 def check_for_disagreement_two(self): p1 = self.get_player_by_id(1) p2 = self.get_player_by_id(2) p3 = self.get_player_by_id(3) if p1.decGroup2 == p2.decGroup2 == p3.decGroup2: pass else: p1.disagreement += 1 p2.disagreement += 1 p3.disagreement += 1 # wählt für eine Gruppe eine Bed. aus und verteilt sie dann an alle Spieler einer Gruppe # Funktion wird dann nach "group_by_arrival_time" auf der zweiten WaitPage gecallt def condition_picker(self): import random from operator import itemgetter if self.session.vars["conditionCounter"] == 0: pickedCondition=itemgetter(0)(self.session.vars["conditionsShuffeld"]) self.session.vars["conditionCounter"]+=1 elif self.session.vars["conditionCounter"] == 1: pickedCondition=itemgetter(1)(self.session.vars["conditionsShuffeld"]) self.session.vars["conditionCounter"]+=1 elif self.session.vars["conditionCounter"] == 2: pickedCondition=itemgetter(2)(self.session.vars["conditionsShuffeld"]) self.session.vars["conditionCounter"]+=1 else: pickedCondition=itemgetter(3)(self.session.vars["conditionsShuffeld"]) self.session.vars["conditionCounter"]=0 random.shuffle(self.session.vars["conditionsShuffeld"]) #pickedCondition = itertools.cycle(["11.02.","12.02.","13.02.","14.02."]) players = self.get_players() for p in players: p.condition = pickedCondition p.nickname = "Person {}".format(p.id_in_group) #if p.participant.vars['timeout'] == 1: #for p in players: #p.Singleplayer = 1 #p2.Singleplayer = 1 #p3.Singleplayer = 1 #else: #p.Singleplayer += 0 #p3.Singleplayer += 0 #p2.Singleplayer += 0 class Player(BasePlayer): # Experiment fast abgeschlossen -> damit ich checken kann, wie lange jemand gebraucht hat #timeEnded = models.FloatField() # chat nicknames nickname = models.StringField() # condition condition = models.StringField() Singleplayer = models.IntegerField(initial = 0) # disagreement check for group decision disagreement = models.IntegerField(initial = 0) # Manipulation Checks --> Müssen Style-mäßig wahrscheinlich noch angepasst werden. # Idee: Die alle hier als Tabelle anzeigen, bei der ich die Skala oben angebe relationship = models.IntegerField(label = "Wie empfanden Sie die Stimmung bei der Diskussion?", choices = [[1,""], [2,""],[3,""],[4,""],[5,""],[6,""], [7,"Gelöst"]], widget = widgets.RadioSelectHorizontal) vigilanzSelbst = models.IntegerField(label = "Wie sehr haben Sie sich bei der Aufgabe angestrengt?", choices = [[1,""], [2,""],[3,""],[4,""],[5,""],[6,""], [7,"Sehr stark"]], widget = widgets.RadioSelectHorizontal) # !!! hier das Label nicht in Frage reinschreiben, sondern ins html, damit ich auf den Spielernamen zurückgreifen kann vigilanzVP1 = models.IntegerField(#label = "Wie sehr hat sich XY bei der Aufgabe angestrengt?", choices = [[1,""], [2,""],[3,""],[4,""],[5,""],[6,""], [7,"Sehr stark"]], widget = widgets.RadioSelectHorizontal, blank=True) # bedeutet, dass die Person das selbst war vigilanzVP2 = models.IntegerField(#label = "Wie sehr hat sich XY bei der Aufgabe angestrengt?", choices = [[1,""], [2,""],[3,""],[4,""],[5,""],[6,""], [7,"Sehr stark"]], widget = widgets.RadioSelectHorizontal, blank=True) # bedeutet, dass die Person das selbst war vigilanzVP3 = models.IntegerField(#label = "Wie sehr hat sich XY bei der Aufgabe angestrengt?", choices = [[1,""], [2,""],[3,""],[4,""],[5,""],[6,""], [7,"Sehr stark"]], widget = widgets.RadioSelectHorizontal, blank=True) # bedeutet, dass die Person das selbst war # Beschreibung der anderen Gruppenmitglieder kompetenzVP1=models.IntegerField(choices=[[1,""], [2,""],[3,""],[4,""],[5,""],[6,""], [7,"kompetent"]], widget = widgets.RadioSelectHorizontal, blank=True) kompetenzVP2=models.IntegerField(choices=[[1,""], [2,""],[3,""],[4,""],[5,""],[6,""], [7,"kompetent"]], widget = widgets.RadioSelectHorizontal, blank=True) kompetenzVP3=models.IntegerField(choices=[[1,""], [2,""],[3,""],[4,""],[5,""],[6,""], [7,"kompetent"]], widget = widgets.RadioSelectHorizontal, blank=True) ehrlichkeitVP1=models.IntegerField(choices=[[1,""], [2,""],[3,""],[4,""],[5,""],[6,""], [7,"ehrlich"]], widget = widgets.RadioSelectHorizontal, blank=True) ehrlichkeitVP2=models.IntegerField(choices=[[1,""], [2,""],[3,""],[4,""],[5,""],[6,""], [7,"ehrlich"]], widget = widgets.RadioSelectHorizontal, blank=True) ehrlichkeitVP3=models.IntegerField(choices=[[1,""], [2,""],[3,""],[4,""],[5,""],[6,""], [7,"ehrlich"]], widget = widgets.RadioSelectHorizontal, blank=True) serioesitaetVP1=models.IntegerField(choices=[[1,""], [2,""],[3,""],[4,""],[5,""],[6,""], [7,"seriös"]], widget = widgets.RadioSelectHorizontal, blank=True) serioesitaetVP2=models.IntegerField(choices=[[1,""], [2,""],[3,""],[4,""],[5,""],[6,""], [7,"seriös"]], widget = widgets.RadioSelectHorizontal, blank=True) serioesitaetVP3=models.IntegerField(choices=[[1,""], [2,""],[3,""],[4,""],[5,""],[6,""], [7,"seriös"]], widget = widgets.RadioSelectHorizontal, blank=True) ##### # Beschreibung der Artikel kompetenzArtikel1=models.IntegerField(choices=[[1,""], [2,""],[3,""],[4,""],[5,""],[6,""], [7,"kompetent"]], widget = widgets.RadioSelectHorizontal, blank=True) kompetenzArtikel2=models.IntegerField(choices=[[1,""], [2,""],[3,""],[4,""],[5,""],[6,""], [7,"kompetent"]], widget = widgets.RadioSelectHorizontal, blank=True) ehrlichkeitArtikel1=models.IntegerField(choices=[[1,""], [2,""],[3,""],[4,""],[5,""],[6,""], [7,"ehrlich"]], widget = widgets.RadioSelectHorizontal, blank=True) ehrlichkeitArtikel2=models.IntegerField(choices=[[1,""], [2,""],[3,""],[4,""],[5,""],[6,""], [7,"ehrlich"]], widget = widgets.RadioSelectHorizontal, blank=True) serioesitaetArtikel1=models.IntegerField(choices=[[1,""], [2,""],[3,""],[4,""],[5,""],[6,""], [7,"seriös"]], widget = widgets.RadioSelectHorizontal, blank=True) serioesitaetArtikel2=models.IntegerField(choices=[[1,""], [2,""],[3,""],[4,""],[5,""],[6,""], [7,"seriös"]], widget = widgets.RadioSelectHorizontal, blank=True) studieBekannt = models.IntegerField(label = "Kannten Sie die Aufgabe (mit diesem Medikamenten-Szenario) bereits bzw. haben bereits an einer solchen Studie teilgenommen?", choices = [[1, "Ja"], [2, "Nein"]], widget = widgets.RadioSelect) austauschChat = models.IntegerField(#label = "Wie haben Sie den Austausch im Chat wahrgenommen?", choices =[[1,""], [2,""], [3,""], [4,""], [5,""], [6,""], [7,"Sehr natürlich"]], # hier muss ich ein Textfeld möglich machen widget = widgets.RadioSelectHorizontal) chatNutzung = models.IntegerField(#label="Wie häufig nutzen Sie Chats?", choices=[[1,""], [2,""], [3,""], [4,""], [5,""], [6,""], [7,"Sehr häufig"]], # hier muss ich ein Textfeld möglich machen widget = widgets.RadioSelectHorizontal) tastaturNutzung = models.IntegerField(#label="Wie gut bzw. schnell können Sie tippen?", choices=[[1,""], [2,""], [3,""], [4,""], [5,""], [6,""], [7,"Sehr schnell"]], # hier muss ich ein Textfeld möglich machen widget = widgets.RadioSelectHorizontal) chatZeit = models.IntegerField(#label="Wie gut bzw. schnell können Sie tippen?", choices=[[1,""], [2,""], [3,""], [4,""], [5,""], [6,""], [7,"zu lang"]], # hier muss ich ein Textfeld möglich machen widget = widgets.RadioSelectHorizontal) ### Decisions ## Group Condition # Gruop-decision decGroup1 = models.IntegerField(#label = "Bitte wählen Sie das Medikament aus, dass Sie empfehlen würden:", # besser schreiben: "als Gruppe" choices = [[1,"Caldivon"], [2,"Cyran"]],# Groupdecision widget=widgets.RadioSelect) decGroup2 = models.IntegerField(#label = "Bitte wählen Sie das Medikament aus, dass Sie empfehlen würden:", # besser schreiben: "als Gruppe" choices = [[1,"Caldivon"], [2,"Cyran"]],# Groupdecision widget=widgets.RadioSelect) decGroup3 = models.IntegerField(#label = "Bitte wählen Sie das Medikament aus, dass Sie empfehlen würden:", # besser schreiben: "als Gruppe" choices = [[1,"Caldivon"], [2,"Cyran"]],# Groupdecision widget=widgets.RadioSelect) # Confidence with decision and two extra questions if confidence changes when there is disagreement confGroup1 = models.IntegerField(#label = "Wie sicher sind Sie sich als Gruppe bei dieser Antwort?", choices = [[1,""], [2,""],[3,""],[4,""],[5,""], [6,"Voll und ganz sicher"]], #choices = [[1,"Gar nicht sicher"],2,3,4,5,[6,"Voll und ganz sicher"], widget=widgets.RadioSelectHorizontal)# Groupconfidence confGroup2 = models.IntegerField(#label = "Wie sicher sind Sie sich als Gruppe bei dieser Antwort?", choices = [[1,""], [2,""],[3,""],[4,""],[5,""], [6,"Voll und ganz sicher"]], #choices = [[1,"Gar nicht sicher"],2,3,4,5,[6,"Voll und ganz sicher"], widget=widgets.RadioSelectHorizontal)# Groupconfidence confGroup3 = models.IntegerField(#label = "Wie sicher sind Sie sich als Gruppe bei dieser Antwort?", choices = [[1,""], [2,""],[3,""],[4,""],[5,""], [6,"Voll und ganz sicher"]], #choices = [[1,"Gar nicht sicher"],2,3,4,5,[6,"Voll und ganz sicher"], widget=widgets.RadioSelectHorizontal)# Groupconfidence # stratGroup # groupstartegy --> war auch in Flo's Experiment nicht # individual Decision before Group decision decGroupIndPreChat = models.IntegerField(#label = "Welches Medikament würden Sie persönlich (unabhängig von der Gruppenentscheidung) empfehlen:", # besser schreiben: "als Gruppe" choices = [[1,"Caldivon"], [2,"Cyran"]],# Groupdecision widget=widgets.RadioSelect) # individual confidence before Group confidence confGroupIndPreChat = models.IntegerField(#label = "Wie sicher sind Sie sich persönlich bei dieser Antwort?", choices = [[1,""], [2,""],[3,""],[4,""],[5,""], [6,"Voll und ganz sicher"]], #choices = [[1,"Gar nicht sicher"],2,3,4,5,[6,"Voll und ganz sicher"], widget=widgets.RadioSelectHorizontal)# Groupconfidence # individual Decision after Group decision decGroupIndPostChat = models.IntegerField(#label = "Welches Medikament würden Sie persönlich (unabhängig von der Gruppenentscheidung) empfehlen:", # besser schreiben: "als Gruppe" choices = [[1,"Caldivon"], [2,"Cyran"]],# Groupdecision widget=widgets.RadioSelect) # gefährlich! Wenn jemand vergisst anzukreuzen, dann fällt das nicht auf. Gibt es dafür vielleicht eine Lösung? # individual confidence after Group confidence confGroupIndPostChat = models.IntegerField(#label = "Wie sicher sind Sie sich persönlich bei dieser Antwort?", choices = [[1,""], [2,""],[3,""],[4,""],[5,""], [6,"Voll und ganz sicher"]], #choices = [[1,"Gar nicht sicher"],2,3,4,5,[6,"Voll und ganz sicher"], widget=widgets.RadioSelectHorizontal)# Groupconfidence ## Single Condition # individual decision decSingle = models.IntegerField(#label = "Bitte wählen Sie das Medikament aus, dass Sie empfehlen würden:", choices = [[1,"Caldivon"], [2, "Cyran"]], widget = widgets.RadioSelect) # individual confidence confSingle = models.IntegerField(#label = "Wie sicher sind Sie sich bei dieser Antwort?", choices = [[1,""], [2,""],[3,""],[4,""],[5,""], [6,"Voll und ganz sicher"]], #choices = [[1,"Gar nicht sicher"],2,3,4,5,[6,"Voll und ganz sicher"], widget=widgets.RadioSelectHorizontal)# Groupconfidence # single strategy strategySingle = models.LongStringField(label = "Bitte beschreiben Sie kurz, wie Sie zu Ihrer Empfehlung gekommen sind:", blank=True) ### Projekt im Herbst Polizeigewalt = models.LongStringField(label="Welche Suchbegriffe würden Sie eingeben, wenn Sie sich für eine Diskussion über das Thema 'Polizeigewalt' vorbereiten wollten (Sie können gerne meherere Begriffe angeben)?", initial = "") Rassismus = models.LongStringField(label="Welche Suchbegriffe würden Sie eingeben, wenn Sie sich für eine Diskussion über das Thema 'Rassismus' vorbereiten möchten (Sie können gerne meherere Begriffe angeben)?", initial = "")