{
 "name": "Crowds against real pedestrians in four J\u00fclich experiments: counterflow, crossing, merging and a bottleneck with groups",
 "registered": "2026-10-07",
 "why": "The ETH/UCY test (protocol-peds.json) missed (JuPedSim ahead in 3 of 6 scenes, 5 needed) and stays a miss: in dense scenes real people walk in groups and the crowd kept everyone apart. The render session added groups (from each person's first 2 s only), a spring that lets members drift, a grouping distance that tightens where it is sparse, and walls for every model, developed only on crowds_zara03 and uni_examples. This test scores that crowd on data neither session has opened.",
 "data": "J\u00fclich Pedestrian Dynamics Data Archive, CC BY 4.0, txt trajectories downloaded 2026-10-07 to [host name redacted] lw-peds/juelich (SHA256SUMS): 2013bidirectional (DOI 10.34735/ped.2013.5, 15 files), 2013crossing_90 (10.34735/ped.2013.4, 43 files), 2009tjunction (10.34735/ped.2009.7, 11 files), 2014bottleneck_socialgroup (10.34735/ped.2014.1, 40 files). Only the zip listings, the dataset pages and the comment header of one file were read before registration. Every run is scored.",
 "conversion": "juelich_convert.py at this commit: 16 fps for crossing_90 and tjunction, 25 fps for bidirectional and bottleneck_socialgroup (dataset pages); centimetres where stated, else by the median rule in the script; one sample every 0.4 s; walkable area from the 0.2 m cells people occupied, grown by 0.4 m, largest piece.",
 "crowds": {
  "jupedsim": "livingworlds/render d39b15a pedreplay.py with use_groups, spring, density_aware and walls on, walkable = the run's WKT, matched speeds",
  "socialforce": "the same set-up and options with social force",
  "orca": "the same set-up and options with ORCA",
  "straight": "peds_straight.py, as in protocol-peds.json"
 },
 "measures": "peds_score.py unchanged (rank sum over speed, nearest distance, straightness and contact, against the real run)",
 "primary": "in each of the four experiments, jupedsim's rank sum is lower than both socialforce's and straight's in more than half of its runs",
 "secondary": "the share of all runs; jupedsim against orca; each measure",
 "development": "ETH/UCY dev scenes only, with this configuration: rank sums zara03 jupedsim 7, orca 10, socialforce 11, straight 12; uni_examples 7.5, 9.5, 11, 12 (the render session's dev scores and the straight crowd from protocol-peds.json, ranked by hand). The defaults reproduce the registered v0 output exactly.",
 "limits": "controlled experiments with instructed participants: this tests counterflow, crossing, merging and bottleneck interaction, not free street behaviour",
 "order": "after this commit: conversion, then the render session runs the three crowds once on every run, then the straight crowds, then peds_score.py once per experiment",
 "publish": "results-peds-juelich.json whatever the outcome",
 "amendment_2026_10_07": {
  "what": "The registered pass at render d39b15a crashed on 138 of 327 model runs (bidirectional 14 of 15 runs, crossing90 21 of 43, tjunction 11 of 11, bottleneck 0 of 40), all with one IndexError in pedreplay.groups(): with transitive grouping a follower can be linked to its group root only through another member and share no early frame with the root. As registered the test cannot be completed (juelich-run1-NOTES.txt, juelich-run1-runlog.txt).",
  "change": "Only that bug: each follower is offset against the member it was directly linked to, at their first shared frame, and offsets are chained to the root. No parameter, option or rule changes. The fixed render commit is named in the run notes and its diff against d39b15a is limited to groups().",
  "nothing_scored": "No run of the first pass was scored, by anyone; its 63 completed runs are not scored separately and are replaced by the second pass.",
  "order": "all 109 runs are re-run once with the fixed commit into lw-peds/juelich/sim2, then peds_score.py once per experiment"
 }
}