C6
Designed by Claude Sonnet 5. Faithful ATWL translation of the model's own C4 prose design (continuing that chat); instructed not to fabricate structure. ↓ download raw .atwl
Workflow header & template
workflow vastopolis-outbreak-origin-and-transmission
template: characterise (extract-symptom-features) →
loop(assess → characterise (refine-lexicon)) →
define-unit (filter-illness-events) →
define-unit (daily-episodes) → characterise (daily-profile) →
define-unit (cluster-days) → contextualise (calendar) →
visualise → abstract → generate-knowledge →
define-unit (derive-places) → characterise (place-timeseries) →
characterise (per-capita-incidence) → contextualise (map) →
visualise → abstract →
characterise (zone-incidence) → define-unit (cluster-zones) →
contextualise (map) → visualise → build-model (growth) →
characterise (residuals) → visualise → abstract →
characterise (downwind-alignment) →
loop(define-unit (lag-windows) → characterise (cross-impact) →
visualise → assess) →
generate-knowledge →
characterise (social-mentions) → define-unit (social-network) →
visualise → abstract →
visualise (water-overlay) → abstract →
generate-knowledge (mechanism-checklist) →
generate-knowledge (final-report)
description: "Visual analytics workflow for identifying the spatio-temporal
origin of a flu-like outbreak in Vastopolis from geolocated microblogs,
and for adjudicating among candidate transmission mechanisms (airborne,
person-to-person, waterborne) using map, population, and wind data."
Input Artifacts
artifact D_microblogs : entities
origin: given
internal structure: elementary
embedment: {space, time}
features:
- id: text_content
value structure: atomic
value type: text
description: "Raw message text"
description: "Geolocated microblog messages posted from mobile devices
over several days, each with timestamp, GPS coordinates, and text
content"
artifact D_map_features : entities
origin: given
internal structure: elementary
embedment: space
features:
- id: feature_type
value structure: atomic
value type: categorical
description: "Category of map feature: highway, hospital, landmark,
water body"
description: "Static geographic features of the Vastopolis metropolitan
area, used as map context"
artifact D_zones : entities
origin: given
internal structure: region
embedment: space
features:
- id: population
value structure: atomic
value type: numeric
description: "Resident population of the zone"
description: "13 city zones of Vastopolis with population statistics"
artifact D_weather : entities
origin: given
internal structure: elementary
embedment: time
features:
- id: wind_speed
value structure: atomic
value type: numeric
description: "Daily wind speed"
- id: wind_direction
value structure: atomic
value type: {numeric, spatial}
description: "Daily wind direction (bearing)"
description: "Daily weather observations including wind speed and
direction"
artifact D_calendar : entities
origin: given
internal structure: elementary
embedment: time
features:
- id: date
value structure: atomic
value type: temporal
description: "Calendar date"
description: "Calendar days spanning the observation period, used as
arrangement context"
artifact S_symptom_lexicon : specification
origin: given
representation form: "keyword lexicon"
description: "Flu-related symptom terms and severity indicators (fever,
cough, vomiting, hospital, death, etc.) used to seed text extraction"
Stage A: Extract And Validate Illness-Report Events From Text
transform T_extract_symptoms :
intent: characterise
manner: "extract (keyword/entity extraction of symptom and severity
terms)"
input: D_microblogs, S_symptom_lexicon
output: F_symptom_features
actor: machine
description: "Extract symptom mentions, severity indicators
(hospitalization, death), and embedded place references from message
text"
artifact F_symptom_features : feature(D_microblogs)
value structure: vector
value type: {categorical, ordinal, text}
description: "Per-message symptom type(s), severity level, and any
embedded place mentions"
loop L_extraction_validation:
purpose: "Validate and correct automatically extracted symptom/severity
indicators against raw message text before trusting the derived event
set"
until: "Sampled false positive/negative rate in extracted indicators is
acceptable to the analyst"
body:
transform T_assess_extraction :
intent: assess
manner: "sample and inspect raw text against extracted indicators"
input: F_symptom_features, D_microblogs
output: K_extraction_quality
actor: human
description: "Sample messages and check extracted symptom/severity
labels against raw text for false positives (e.g., sarcastic
'sick of...') and false negatives"
artifact K_extraction_quality : knowledge(F_symptom_features)
representation form: "quality judgment"
description: "Judgment of whether extraction lexicon/rules yield an
acceptable false positive/negative rate"
if K_extraction_quality indicates refinement needed:
then:
transform T_refine_lexicon :
intent: characterise
manner: "refine extraction lexicon/rules"
input: D_microblogs, S_symptom_lexicon, K_extraction_quality
output: F_symptom_features_r, S_symptom_lexicon_r
actor: human
description: "Adjust keyword lexicon or extraction rules based on
observed errors and re-extract"
artifact F_symptom_features_r : feature(D_microblogs)
value structure: vector
value type: {categorical, ordinal, text}
description: "Updated per-message symptom/severity/place-mention
indicators"
artifact S_symptom_lexicon_r : specification
representation form: "keyword lexicon"
description: "Revised symptom lexicon"
assign:
F_symptom_features := F_symptom_features_r
S_symptom_lexicon := S_symptom_lexicon_r
else:
exit loop L_extraction_validation
end loop L_extraction_validation
transform T_define_illness_events :
intent: define-unit
manner: "filter messages with validated symptom/severity indicators"
input: D_microblogs, F_symptom_features
output: D_illness_events
actor: hybrid
description: "Retain only messages carrying validated illness-related
indicators as geolocated, time-stamped illness-report events"
artifact D_illness_events : entities
internal structure: elementary
embedment: {space, time}
features:
- id: symptom_type
value structure: atomic
value type: categorical
description: "Symptom type(s) mentioned"
- id: severity
value structure: atomic
value type: ordinal
description: "Severity level (mild symptom vs.
severe/hospitalization/death mention)"
- id: raw_text
value structure: atomic
value type: text
description: "Original message text retained for drill-down"
description: "Geolocated, time-stamped illness-report events derived from
validated microblog messages"
Stage B: Temporal Overview - Onset Detection
transform T_define_days :
intent: define-unit
manner: "time-partitioning into per-zone daily episodes"
input: D_illness_events, D_zones
output: D_days
actor: machine
description: "Aggregate illness events into hourly/6-hour bins and group
into daily episodes per zone"
artifact D_days : entities
internal structure: episode
embedment: {set, time}
features:
- id: hourly_counts
value structure: vector
value type: numeric
description: "Hourly (or 6-hour) event counts within the day, per
zone"
description: "Per-zone daily episodes of illness-event counts"
transform T_characterise_daily_profile :
intent: characterise
manner: "profile"
input: D_days
output: F_daily_profile
actor: machine
description: "Normalise hourly count vectors into comparable daily shape
profiles"
artifact F_daily_profile : feature(D_days)
value structure: vector
value type: numeric
representation form: "daily count profile"
description: "Normalized daily profile shape used for baseline-deviation
clustering"
transform T_cluster_days :
intent: define-unit
manner: "cluster-by-similarity of daily profile shape"
input: D_days, F_daily_profile
output: D_day_clusters, F_day_cluster_label
actor: machine
description: "Cluster days by profile shape so that days deviating from
the pre-outbreak baseline pattern are separated out"
artifact D_day_clusters : entities
internal structure: group/cluster
embedment: set
description: "Groups of days with similar profile shape (baseline vs.
deviating clusters)"
artifact F_day_cluster_label : feature(D_days)
value structure: atomic
value type: categorical
description: "Cluster membership label (baseline vs. deviating) for each
day"
transform T_arrange_calendar :
intent: contextualise
manner: "calendar-based"
input: D_days, D_calendar
output: A_calendar
actor: machine
description: "Position each per-zone daily episode in its corresponding
calendar cell"
artifact A_calendar : arrangement(D_days)
context: D_calendar
principle: "calendar(date, zone)"
description: "Calendar-based arrangement of daily episodes per zone"
transform T_vis_calendar :
intent: visualise
manner: "coloured-marks"
input: A_calendar, F_day_cluster_label
output: V_calendar_clusters
actor: machine
description: "Calendar view showing cluster membership (baseline vs.
deviating) of each day, per zone"
artifact V_calendar_clusters : visualisation(A_calendar, F_day_cluster_label)
layout: "calendar grid per zone"
form: "coloured marks"
encoding: "layout: from A_calendar (day -> calendar cell); colour: from
F_day_cluster_label"
description: "Visual overview for spotting onset day(s) and
earliest-deviating zones"
transform T_abstract_onset :
intent: abstract
manner: "perception-and-interpretation"
input: V_calendar_clusters
output: P_onset_pattern
actor: human
description: "Identify the earliest day(s) and zone(s) whose profile
breaks from the baseline pattern"
artifact P_onset_pattern : pattern(D_days)
representation form: "textual description"
description: "Description of onset day(s) and earliest-deviating
zone(s)"
transform T_knowledge_onset :
intent: generate-knowledge
manner: "formulate-statements"
input: P_onset_pattern
output: K_onset_candidates
actor: human
description: "Formulate candidate outbreak onset time window and
earliest zone(s) as working hypothesis for spatial origin"
artifact K_onset_candidates : knowledge(D_days)
representation form: "statements"
description: "Candidate onset time window and earliest-affected zone(s),
to be confirmed against place-level evidence"
Stage C: Spatial Hotspot / Significant-Place Extraction
transform T_define_places :
intent: define-unit
manner: "derive-places (spatio-temporal density clustering)"
input: D_illness_events
output: D_places, F_place_membership
actor: machine
description: "Cluster illness events jointly by spatial and temporal
proximity into candidate significant places, treating isolated events
as noise"
artifact D_places : entities
internal structure: group/cluster
embedment: space
features:
- id: place_extent
value structure: atomic
value type: spatial
description: "Spatial hull/buffer delineating the place"
- id: onset_time
value structure: atomic
value type: temporal
description: "Earliest event time within the place cluster"
description: "Candidate significant places (spatio-temporal event
clusters) derived from illness events"
artifact F_place_membership : feature(D_illness_events)
value structure: atomic
value type: reference
description: "Assignment of each illness event to a place cluster (or
noise)"
transform T_characterise_place_timeseries :
intent: characterise
manner: "aggregate"
input: D_places, D_illness_events, F_place_membership
output: F_place_timeseries
actor: machine
description: "Compute per-place time series of event counts"
artifact F_place_timeseries : feature(D_places)
value structure: vector
value type: numeric
representation form: "time series per place"
description: "Event-count time series per candidate place"
transform T_characterise_place_incidence :
intent: characterise
manner: "normalise by population"
input: D_places, D_zones, F_place_timeseries
output: F_place_incidence
actor: machine
description: "Normalise place-level event counts by zone population to
obtain per-capita incidence"
artifact F_place_incidence : feature(D_places)
value structure: vector
value type: numeric
description: "Per-capita incidence time series per place"
transform T_arrange_map_places :
intent: contextualise
manner: "map-based"
input: D_places, D_map_features
output: A_map_places
actor: machine
description: "Overlay candidate places on the map context (highways,
hospitals, landmarks, water bodies)"
artifact A_map_places : arrangement(D_places)
context: D_map_features
principle: "geographic coordinates"
description: "Spatial arrangement of candidate places relative to map
features"
transform T_vis_map_hotspots :
intent: visualise
manner: "coloured-marks"
input: A_map_places, F_place_incidence, D_map_features
output: V_map_hotspots
actor: machine
description: "Map view of candidate places sized/coloured by onset time
and per-capita incidence, overlaid on landmarks and water bodies"
artifact V_map_hotspots : visualisation(A_map_places, F_place_incidence,
D_map_features)
layout: "geographic map"
form: "coloured marks with size/time encoding"
encoding: "position: from A_map_places; colour/size: from
F_place_incidence and onset_time; background: D_map_features"
description: "Visual identification of the earliest and most severe
place cluster(s) and their co-location with fixed landmarks"
transform T_abstract_origin_candidate :
intent: abstract
manner: "perception-and-interpretation"
input: V_map_hotspots
output: P_origin_candidate
actor: human
description: "Identify candidate origin place(s) and note whether they
coincide with a specific fixed feature (e.g., reservoir, festival
ground) versus diffuse residential spread"
artifact P_origin_candidate : pattern(D_places)
representation form: "textual description"
description: "Candidate origin place(s), their co-location with map
features, and earliest onset time"
Stage D: Spatio-Temporal Grouping And Growth Modelling Across Zones
transform T_characterise_zone_incidence :
intent: characterise
manner: "aggregate and normalise by population"
input: D_zones, D_illness_events
output: F_zone_incidence
actor: machine
description: "Compute per-capita incidence time series for each of the
13 zones"
artifact F_zone_incidence : feature(D_zones)
value structure: vector
value type: numeric
representation form: "time series per zone"
description: "Daily per-capita incidence time series per zone"
transform T_cluster_zones :
intent: define-unit
manner: "cluster-by-similarity of incidence profile"
input: D_zones, F_zone_incidence
output: D_zone_groups, F_zone_group_label
actor: machine
description: "Group the 13 zones by similarity of their temporal
incidence profile"
artifact D_zone_groups : entities
internal structure: group/cluster
embedment: space
description: "Groups of zones with similar temporal incidence profiles"
artifact F_zone_group_label : feature(D_zones)
value structure: atomic
value type: categorical
description: "Temporal-similarity group label for each zone"
transform T_arrange_map_zones :
intent: contextualise
manner: "map-based"
input: D_zones, D_map_features
output: A_map_zones
actor: machine
description: "Position zones on the map context, including the highway
network"
artifact A_map_zones : arrangement(D_zones)
context: D_map_features
principle: "geographic coordinates"
description: "Spatial arrangement of zones relative to highways and
other map features"
transform T_vis_zone_groups :
intent: visualise
manner: "coloured-marks"
input: A_map_zones, F_zone_group_label, D_map_features
output: V_zone_groups_map
actor: machine
description: "Map view of zones coloured by temporal-similarity group,
overlaid on the highway network, to check spatial contiguity versus
dispersion"
artifact V_zone_groups_map : visualisation(A_map_zones, F_zone_group_label,
D_map_features)
layout: "geographic map"
form: "coloured region marks"
encoding: "position: from A_map_zones; colour: from F_zone_group_label;
background: highway layer from D_map_features"
description: "Visual check of whether temporally similar zones are
spatially contiguous/highway-aligned or spatially disconnected"
transform T_build_growth_model :
intent: build-model
manner: "fit-growth-curve"
input: F_zone_incidence, D_zone_groups
output: M_growth
actor: machine
description: "Fit an exponential/logistic growth curve to each zone
group's representative incidence curve"
artifact M_growth : model(F_zone_incidence, D_zone_groups)
model type: "growth model"
representation form: "exponential/logistic curve parameters per group"
description: "Simple growth model of outbreak onset/expansion per zone
group"
transform T_characterise_residuals :
intent: characterise
manner: "compute-statistics (residuals)"
input: F_zone_incidence, M_growth
output: F_growth_residuals
actor: machine
description: "Compute residuals of observed incidence relative to the
fitted group growth curve, to flag zones deviating from the dominant
pattern"
artifact F_growth_residuals : feature(D_zones)
value structure: vector
value type: numeric
description: "Residual time series per zone relative to fitted growth
model"
transform T_vis_residuals :
intent: visualise
manner: "line-graph / coloured-marks on map"
input: F_growth_residuals, A_map_zones
output: V_residuals_map
actor: machine
description: "Map and/or timeline view highlighting zones with large
residuals (candidates for a distinct secondary source or delayed
exposure)"
artifact V_residuals_map : visualisation(F_growth_residuals, A_map_zones)
layout: "geographic map / aligned timelines"
form: "coloured marks / line graph"
encoding: "colour or line deviation: from F_growth_residuals; position:
from A_map_zones"
description: "Highlights zones whose incidence deviates from the
dominant growth pattern"
transform T_abstract_spread_pattern :
intent: abstract
manner: "perception-and-interpretation"
input: V_zone_groups_map, V_residuals_map, D_map_features
output: P_spread_pattern
actor: human
description: "Interpret whether zone grouping follows the
highway/mobility network (favouring person-to-person spread) or is
spatially disconnected (favouring a shared, non-contact exposure);
flag deviating zones as candidate secondary sources"
artifact P_spread_pattern : pattern(D_zone_groups, F_growth_residuals)
representation form: "textual description"
description: "Description of the dominant spread geometry
(contiguous/highway-aligned vs. disconnected) and any deviating zones"
Stage E: Wind-Spread Cross-Impact Analysis (Airborne Hypothesis)
transform T_characterise_downwind_alignment :
intent: characterise
manner: "compute directional alignment relative to wind"
input: D_zones, D_weather, P_origin_candidate
output: F_downwind_alignment
actor: machine
description: "For each zone and day, compute how well the zone's bearing
from the candidate origin matches that day's wind direction"
artifact F_downwind_alignment : feature(D_zones)
value structure: vector
value type: numeric
description: "Daily downwind alignment score per zone relative to the
candidate origin place"
artifact S_lag_spec : specification
origin: given
representation form: "parameter settings"
description: "Initial window length, lag range, and tolerance interval
for cross-impact analysis between wind and incidence/alignment
series"
loop L_wind_analysis:
purpose: "Compute and calibrate the wind-incidence cross-impact pattern
to test the airborne transmission hypothesis"
until: "Impact matrix is stable/interpretable enough to support a
judgment on the airborne hypothesis"
body:
transform T_define_lag_windows :
intent: define-unit
manner: "time-partitioning into sliding windows"
input: D_weather, F_zone_incidence, S_lag_spec
output: D_windows
actor: machine
description: "Partition the wind series and each zone's response
series into sliding comparison windows over a range of plausible
incubation lags"
artifact D_windows : entities
internal structure: episode
embedment: time
features:
- id: lag
value structure: atomic
value type: numeric
description: "Lag offset applied when comparing base and
response series in this window"
description: "Sliding time windows used to compare the wind (base)
series with each zone's response series at varying lags"
transform T_characterise_cross_impact :
intent: characterise
manner: "compute lagged association (tolerance-based)"
input: D_windows, D_weather, F_zone_incidence, F_downwind_alignment,
S_lag_spec
output: F_impact_matrix
actor: machine
description: "Compute a tolerance-based association measure (e.g.,
tolerance-Kendall's-tau) between the wind base series and each
zone's response series across the window/lag grid"
artifact F_impact_matrix : feature(D_zones)
value structure: matrix
value type: numeric
representation form: "time x lag impact matrix (Ikat-style)"
description: "Per-zone matrix of association strength across time
windows and lags"
transform T_vis_impact :
intent: visualise
manner: "matrix-plot"
input: F_impact_matrix
output: V_wind_impact
actor: machine
description: "Ikat-style visualisation of the time x lag impact
matrix for each zone (or aggregated downwind vs. upwind
comparison)"
artifact V_wind_impact : visualisation(F_impact_matrix)
layout: "time x lag grid, per zone"
form: "matrix plot"
encoding: "cell colour: from F_impact_matrix association strength"
description: "Visual display for inspecting whether downwind zones
show a consistent positive impact at a plausible lag"
transform T_assess_impact :
intent: assess
manner: "evaluate stability and interpretability of impact pattern"
input: V_wind_impact, D_weather, F_zone_incidence
output: K_impact_quality
actor: human
description: "Judge whether the current window/lag/tolerance
settings yield a stable, interpretable impact pattern,
cross-checking suspicious cells against the underlying wind and
incidence series"
artifact K_impact_quality : knowledge(F_impact_matrix)
representation form: "quality judgment"
description: "Judgment of whether the impact matrix is
stable/interpretable or requires recalibration of parameters"
if K_impact_quality indicates refinement needed:
then:
transform T_refine_lag_spec :
intent: generate-knowledge
manner: "adjust parameter settings"
input: K_impact_quality, S_lag_spec
output: S_lag_spec_r
actor: human
description: "Adjust window length, lag range, or tolerance
based on assessment"
artifact S_lag_spec_r : specification
representation form: "parameter settings"
description: "Revised window/lag/tolerance settings"
assign:
S_lag_spec := S_lag_spec_r
else:
exit loop L_wind_analysis
end loop L_wind_analysis
transform T_knowledge_airborne :
intent: generate-knowledge
manner: "formulate-statements"
input: V_wind_impact, F_impact_matrix
output: K_airborne_evidence
actor: human
description: "Formulate a statement on whether downwind zones show a
consistent lagged impact from wind at the candidate origin, supporting
or refuting airborne transmission"
artifact K_airborne_evidence : knowledge(F_impact_matrix)
representation form: "statements"
description: "Evidence for or against airborne transmission based on
stable directional wind-lag association"
Stage F: Person-To-Person And Waterborne Hypothesis Checks
transform T_characterise_social_mentions :
intent: characterise
manner: "extract (co-location/social mentions from text)"
input: D_illness_events
output: F_social_mentions
actor: hybrid
description: "Extract mentions of shared social context (coworkers,
family, shared venues, shared transit lines) from illness-event text"
artifact F_social_mentions : feature(D_illness_events)
value structure: list
value type: {text, categorical}
description: "Extracted social/co-location references per illness
event"
transform T_define_social_network :
intent: define-unit
manner: "derive relational structure from co-occurrence mentions"
input: D_illness_events, F_social_mentions
output: D_social_network
actor: hybrid
description: "Build a light co-occurrence network of people/places
mentioned together across illness events"
artifact D_social_network : entities
internal structure: formation
features:
- id: edge_weight
value structure: atomic
value type: numeric
description: "Strength of co-occurrence link"
description: "Co-occurrence network of persons/places mentioned together
in illness reports (single relational structure)"
transform T_vis_social_network :
intent: visualise
manner: "node-link-diagram"
input: D_social_network
output: V_social_network
actor: machine
description: "Node-link visualisation of the social/co-location
co-occurrence network"
artifact V_social_network : visualisation(D_social_network)
layout: "force-directed network layout"
form: "node-link diagram"
encoding: "edges: from D_social_network edge_weight"
description: "Visualisation for inspecting chains of social/mobility
contact among cases"
transform T_abstract_p2p_pattern :
intent: abstract
manner: "perception-and-interpretation"
input: V_social_network, V_zone_groups_map
output: P_p2p_pattern
actor: human
description: "Assess whether cases chain along social/mobility links and
whether spatial growth tracks the highway/transit network rather than
a single fixed landmark"
artifact P_p2p_pattern : pattern(D_social_network, D_zone_groups)
representation form: "textual description"
description: "Description of evidence for/against person-to-person
transmission via social and mobility chains"
transform T_vis_water_overlay :
intent: visualise
manner: "map-based overlay"
input: A_map_places, D_map_features
output: V_water_overlay
actor: machine
description: "Overlay origin and hotspot clusters directly on the
water-body layer and any known water-service-area boundaries"
artifact V_water_overlay : visualisation(A_map_places, D_map_features)
layout: "geographic map"
form: "coloured marks over water/service-area layer"
encoding: "hotspot marks: from A_map_places; background: water
bodies/service areas from D_map_features"
description: "Visual check of whether hotspot clusters are coincident
with water sources or service-area boundaries"
transform T_abstract_waterborne_pattern :
intent: abstract
manner: "perception-and-interpretation"
input: V_water_overlay, P_origin_candidate
output: P_waterborne_pattern
actor: human
description: "Assess whether the origin/hotspot clusters coincide with a
water source and whether case distribution matches water-service areas
rather than road proximity or social chains"
artifact P_waterborne_pattern : pattern(D_places)
representation form: "textual description"
description: "Description of evidence for/against waterborne
transmission"
transform T_knowledge_mechanism_checklist :
intent: generate-knowledge
manner: "formulate-statements (comparison checklist)"
input: K_airborne_evidence, P_p2p_pattern, P_waterborne_pattern,
P_spread_pattern
output: K_mechanism_assessment
actor: human
description: "Compile a diagnostic checklist comparing the expected
spatial/temporal/contextual signature of each transmission mechanism
(airborne, person-to-person, waterborne) against the observed
evidence"
artifact K_mechanism_assessment : knowledge(K_airborne_evidence,
P_p2p_pattern, P_waterborne_pattern, P_spread_pattern)
representation form: "comparison checklist / statements"
description: "Structured comparison of candidate transmission
mechanisms against observed diagnostic signatures"
Stage G: Synthesis And Reporting
transform T_synthesise_report :
intent: generate-knowledge
manner: "write-summary"
input: K_onset_candidates, P_origin_candidate, K_mechanism_assessment
output: K_final_report
actor: human
description: "Synthesise the probable origin place and time window, the
dominant spread pattern, and the best-supported transmission mechanism
into an evidence-linked report for emergency management"
artifact K_final_report : knowledge(D_places, D_zone_groups,
F_impact_matrix)
representation form: "statements / report"
description: "Evidence-linked report on outbreak origin, spread pattern,
and most probable transmission mechanism, to guide deployment of
emergency management resources"