# Norm Experiment — oTree App ## Overview Three-condition between-subjects experiment eliciting participants' conditional preferences as a function of a descriptive norm. Conditions: | Condition | Elicitation method | |---|---| | `threshold` | Slider: participant states their norm threshold directly | | `staircase` | Staircasing: binary choices narrow down the switching point | | `full_MPL` | All 11 norm values presented in random order for each decision pair | Participants are **balanced across conditions** using a rotating session counter (participant 1 → threshold, 2 → staircase, 3 → full_MPL, then repeat). --- ## File Structure ``` dm_experiment/ ├── __init__.py ├── constants.py ← ALL INPUT TABLES go here — edit this file ├── models.py ← Player/Session data fields & helper methods ├── pages.py ← Page logic and sequence ├── settings.py ← oTree project settings (copy to project root) └── templates/ └── dm_experiment/ ├── _base.html ← Shared layout & CSS ├── Consent.html ├── NoConsent.html ├── GeneralInstructions.html ├── GeneralComprehension.html ├── ConditionInstructions.html ├── ConditionComprehension.html ├── TaskBlock1.html ← Shared template for both task blocks ├── TaskBlock2.html ├── ConsistencyChecks.html ├── FinalPayoff.html └── ProlificRedirect.html ``` --- ## Quick-Start Checklist ### 1. Install & set up ```bash pip install otree cp dm_experiment/settings.py settings.py # copy to project root otree devserver ``` ### 2. Edit `constants.py` — the only file you need to touch for content | Table | What to change | |---|---| | `DICTATOR_OPTIONS` | The 6 dictator options (own_payoff, transfer, multiplier) | | `RISK_OPTIONS` | The 6 risk options (left_outcome, right_outcome, probability_left) | | `ACTUAL_NORMS` | Real descriptive norm data for payoff calculation | | `CONSISTENCY_CHECKS` | Which 8 decision situations are used as consistency checks | Pairwise combinations (15 each) are **generated automatically** from these tables. ### 3. Add instruction text (placeholders are in templates) Search for `[Placeholder` or `[Add` in the template files and replace with your actual text. Files to update: - `GeneralInstructions.html` — main study instructions - `ConditionInstructions.html` — one block per condition (`threshold` / `staircase` / `full_MPL`) - `GeneralComprehension.html` — comprehension question labels & correct answers in `pages.py` - `ConditionComprehension.html` — condition-specific comprehension questions - `Consent.html` — information letter text ### 4. Update comprehension question correct answers in `pages.py` ```python # In GeneralComprehension class: CORRECT = {'gen_q1': 'a', 'gen_q2': 'b', 'gen_q3': 'c'} # In ConditionComprehension class: CORRECT = {'cond_q1': 'a', 'cond_q2': 'a'} ``` ### 5. Add your option visualisations The option boxes have a `[Visualization]` placeholder `