Raw session log. Atwl spec + example + 54-workflow library (atwl form).
6 turns (3 user · 3 assistant) json raw log
You have received three files: the ATWL specification, which defines a formal language for representing visual analytics workflows; an example workflow expressed in ATWL; and a document titled ATWL Library: Titles and ATWL Representations, which contains 53 visual analytics workflows drawn from the published research literature, each formalised in ATWL. The library was curated by our research group.
Please read all three carefully before we proceed.
The ATWL specification describes the language's artifact types, transform intents, actor designations, loop constructs, and syntax. The example workflow illustrates how these elements are used together to describe a specific visual analytics process. Note that the example represents one type of workflow among many possible; its specific analytical structure reflects its particular task and should not be treated as a template that must be followed for other tasks. What the example illustrates is how the language is used — the syntax, the vocabulary, and the conventions for organising artifacts, transforms, and loops.
The library is a resource of formalised workflows that you may consult when designing your recommendation. Each library workflow addresses a specific analytical problem in a specific domain. You may draw on the library to identify workflow structures, iteration patterns, artifact typing conventions, or methodological approaches that could inform your recommendation for the target task. You may combine elements from multiple library workflows, adapt them, or design new elements as the task requires. You are not obliged to use the library, but you should treat it as a substantive source of design ideas.
In the next message I will describe a specific visual analytics design task. Your job will be to design an analytical workflow that addresses the task, and to express your recommendation both in natural language (for readability) and in ATWL (for structural precision). The natural-language description should explain the analytical logic of the workflow; the ATWL representation should formally specify the artifacts, transforms, loops, actors, and control flow. Where you draw on specific library workflows, please cite them by name so the sources of your recommendation are traceable.
Before we proceed, could you briefly confirm that you have absorbed the specification, the example, and the library, and let me know if you have any questions about the language, the syntax, or the library before the task is described?
You need to reply in English.
I've absorbed the specification, the example, and the library. A few observations to confirm my understanding before you describe the task:
On the specification: I understand ATWL's core model — artifacts (entities, feature, arrangement, visualisation, pattern, model, knowledge, specification) connected by transforms carrying one of eight generic intents (define-unit, characterise, contextualise, visualise, abstract, build-model, generate-knowledge, assess), with manner as an optional specialisation. I understand the distinction between internal structure and embedment for entities, the difference between pattern (descriptive regularity) and model (generalising mechanism), and the distinction between evaluative knowledge (from assess) and substantive knowledge (from generate-knowledge). I also understand the control structures — loops with explicit-assessment or implicit-termination styles, conditionals, and assignment for iterative variable rebinding — and the optional template notation with loop(...) abstraction.
On the example: The HITL behaviour-pattern-recognition workflow illustrates a two-phase human-in-the-loop pattern (feature-engineering loop feeding a clustering/interpretation cycle, followed by a model-training loop with prediction/assessment/refinement), which is one useful structural template among many but not one I'll treat as a mandatory shape for other tasks.
On the library: I've reviewed all 53 workflows and see the range of structural idioms available to draw on: e.g., single vs. nested vs. sequential loops (cluster-calendar's single refinement loop vs. ST_analysis_modelling's nested grouping/modelling loops vs. progressive-trajectory-clustering's sequential phase loops); parameter-space exploration with response-surface models (ParaGlide, Tuner); topic-modeling-based rule/pattern extraction with candidate-count selection loops (episode-based-temporal-analysis, RuleSense, compound-property-model-interpretation); cohort/cluster comparison via classifiers (Kokiri, Coral); progressive computation (progressive-transaction-segmentation); multi-view coordinated exploration (Jigsaw, StratomeX, IVESA, SensePath); and knowledge-externalization/labeling loops (DaedalusData, image-based projection labeling). I noted the citation format used (short workflow name/title) for traceability.
I have no outstanding questions about the language or syntax. I'm ready for the task description — please go ahead.
A public health team in Vastopolis, a metropolitan area of about two million residents, has observed a sharp increase in flu-like illnesses over the past few days, with several deaths believed to be associated with the current outbreak. The team wants to understand where the outbreak started and how the infection is being transmitted (person-to-person, airborne, waterborne, or something else) so that emergency management resources can be deployed appropriately.
The available data consists of: geolocated microblog messages posted from mobile devices over a period of several days, each with a timestamp, GPS coordinates, and text content; a map of the metropolitan area showing highways, hospitals, landmarks, and water bodies; population statistics for 13 city zones; and daily weather observations including wind speed and direction.
The analyst will need to inspect intermediate results visually and use domain knowledge to interpret patterns and make judgements at each stage.
Design an analytical workflow for this problem.
Now I'm mapping out the analytical workflow: I need to extract disease-related events from the microblog text, then work through identifying the outbreak source location and transmission method using the geolocated data, map features, population statistics, and weather patterns. This is a human-in-the-loop analysis where the analyst will need to inspect intermediate results and apply domain knowledge at each step. Identify the outbreak origin by finding the earliest cluster, then test multiple transmission hypotheses by comparing the spatial-temporal spread pattern against wind data, water bodies, and population movement patterns to see which best explains the observed distribution. I'm thinking through this as a comparative workflow where I form hypotheses about transmission mode and iteratively check them against the visual evidence.
The IVESA event-sequence workflow seems most applicable here since I have time-stamped illness reports with location and environmental metadata that I can cross-tabulate. The cross-impact patterns approach is also relevant for detecting relationships between wind/water proximity and illness spread across zones, though it might be more complex than needed for this analysis.
I can extract significant places from the geolocated events to identify outbreak origins and spatial-temporal clusters, then characterize how the outbreak curves differ across zones using temporal similarity grouping. So my approach would start by extracting the illness reports and organizing them spatially and temporally.
Then I'd aggregate case counts by zone and day, normalized for population differences, visualize the spatio-temporal spread with maps and time animations to spot the earliest cluster as the likely origin, and finally test different transmission hypotheses by checking whether case patterns correlate with factors like wind direction, water proximity, road networks, or population density.
Now I'm defining the data entities: microblogs contain text, geolocation, and timestamps; I'll extract illness reports through keyword and symptom-based classification, producing structured events with confidence scores. I should probably add a quality-check step where a human validates a sample of the automated extractions to ensure accuracy.
Then I'll map these reports into spatial zones using point-in-polygon assignment, and finally compute daily case counts per zone normalized by population to generate an incidence matrix across zones and time.
For visualization, I'm creating an animated choropleth map showing how incidence spreads across zones over time, with individual case points overlaid. Next I'll identify the outbreak origin by finding the earliest spatial cluster, then test transmission hypotheses—starting with whether person-to-person spread follows population density patterns. For point-source outbreaks, I'd look for common venues or landmarks that early cases frequently visited—extracting mentions from case reports to identify potential gathering spots. This approach mirrors hypothesis exploration workflows like ParaGlide, and connects to cross-impact pattern detection methods that test correlations between paired time series using sliding windows and lag analysis to find stable relationships between variables like mobility and case counts.
For this investigation, I'm adapting that framework to examine wind patterns and case incidence across zones with lag analysis, while treating static factors like population density and water proximity through spatial correlation instead. The workflow I'm designing starts with extracting and quality-checking illness reports from microblogs, then geolocating and timestamping them to compute normalized case counts per zone per day, followed by contextualizing those patterns against environmental and demographic factors. boundaries/highways with case spread; scatter plots and timelines for correlation analysis. I'm setting up coordinated visualizations with map overlays of wind vectors and water bodies alongside line charts to interpret the evidence for or against each hypothesis. Once I've assessed whether the hypothesis is supported or needs refinement, I'll either synthesize the findings into origin location and transmission mode recommendations, or loop back to test the next candidate factor.
Now I'm defining the data artifacts needed for this analysis, starting with the microblogs dataset that captures text content, geolocation, and temporal information. Now I'm defining the microblog entities with text content as a core feature, and reconsidering the map context as separate entity types—roads, water bodies, landmarks, and hospitals each modeled individually rather than as a single composite artifact.
I'm also laying out the remaining data entities: zones representing the 13 city districts with population counts embedded in space, and weather observations as daily time-series readings with wind metrics. Then I'm sketching out a transformation that extracts illness reports from microblogs through keyword-based classification, combining automated detection with human review to produce a new illness reports entity.
I'm adding a refinement loop where the analyst can iteratively inspect flagged messages, visualize them spatially, assess the results, and adjust the classification criteria to minimize false positives and negatives—this captures the interactive inspection requirement.
Next I'm setting up a spatial join operation to assign each illness report to its corresponding zone polygon, then computing daily incidence rates by aggregating counts per zone and normalizing by population to create time series data for each zone.
For visualization, I'm considering whether to arrange this as a choropleth map with temporal small multiples showing each day separately, or use a space-time cube approach. I think the cleaner approach is to create two separate arrangements: one spatial showing zones on a map, and one that layers temporal context through small multiples or animation to show how the incidence spreads geographically over time.
The visualization itself should combine a choropleth representation where zone colors encode normalized daily case counts, overlaid with point markers for individual illness reports—this gives both the aggregate picture and the granular detail to identify outbreak origins in the early days.
From there, I need to abstract the origin identification task: looking at the spread overview to perceive and interpret the earliest spatial cluster, then output a pattern description that captures which zone(s) and day(s) the outbreak began and how it propagated—whether radiating outward, following corridors, or some other trajectory.
Now I'm setting up the hypothesis-testing loop, starting with defining what a hypothesis looks like in this context. I need to set up an accumulating knowledge artifact to track evidence for and against each transmission hypothesis as I test them across iterations. I'll initialize this evidence log as empty before the loop begins, then populate it with findings from each hypothesis test depending on the transmission mode being evaluated. For waterborne transmission, I'm computing the distance from case locations to water bodies and testing for spatial clustering along waterways and downstream flow patterns. For point-source or other transmission routes, I'm extracting common venue and landmark mentions from early case reports using text analysis. Since the template needs to be generic across different hypotheses, I'll structure this as a single characterization step that adapts its method based on which transmission hypothesis is being tested. I'll arrange the evidence by overlaying environmental factors like wind patterns, water bodies, and road networks onto the spread map with a timeline, then create a coordinated map and time-series visualization for comparing the outbreak pattern against each hypothesis. Finally, I'll interpret the correlation strength and spatial alignment between what I'm seeing and the candidate transmission factors to assess the evidence. I'm identifying relevant methodologies from existing research to support this pattern—cross-impact detection for lagged correlations, spatial aggregation techniques for place extraction, metadata exploration frameworks, and correlation analysis approaches that align with the iterative hypothesis-testing structure I'm building.
For the final synthesis step, I need to combine all the evidence into concrete findings about origin and transmission, then layer in an assessment phase to validate that the origin identification is sufficiently supported given the sparse data constraints, potentially triggering refinement loops where needed.
I'm also considering adding a spatial clustering refinement loop specifically for pinpointing the outbreak origin below zone-level granularity using the available GPS coordinates from geolocated posts, similar to the density-based clustering approach in the events-to-places workflow, which would let me iterate on clustering parameters to narrow down the precise outbreak epicenter. then loop back through hypothesis refinement with evidence gathering and visualization, ultimately synthesizing the origin, transmission mode, and recommendations. This matches the complexity of real HITL outbreak workflows with nested loops for iterative refinement. Given the length constraints, I'll aim for a comprehensive but concise ATWL representation that captures the full investigation process without unnecessary verbosity.
Now I'm deciding on the actors involved—text extraction and zone assignment will be machine-driven, while origin clustering and hypothesis formulation benefit from human validation. Evidence computation and visualization are machine tasks, but interpretation, assessment, and synthesis require human judgment. I also need to clarify the data structures, particularly how the contextual map includes distinct entity types like highways, hospitals, landmarks, and water bodies, and how the zones themselves are defined with their populations.
Defining the transforms and artifacts... (3) testing four competing transmission hypotheses—person-to-person diffusion, airborne/wind-driven spread, waterborne contamination, and point-source events—by comparing the observed spatial-temporal pattern against weather data, hydrography, road networks, and venue mentions; and (4) synthesizing all evidence into a characterization of the outbreak's origin and likely transmission mechanism to inform emergency response. In phase 1, I'm extracting illness reports from free text using a hybrid keyword and classifier approach to flag messages with flu-like symptoms, then geolocating and timestamping each inferred event.
Since false positives and negatives cascade through all downstream analysis, I'm iteratively refining the detection criteria by examining flagged and unflagged messages in their spatial and temporal context until the report quality meets my standards. In phase 2, I'm joining validated reports to the 13 zones and computing daily population-normalized incidence per zone using spatial-temporal aggregation methods.
I'm creating a small-multiples animated map sequence where each day shows zones colored by incidence with individual reports overlaid as points, allowing me to visually trace the outbreak's spread. Since zone-level aggregation is too coarse for pinpointing the outbreak origin, I'm applying density-based spatio-temporal clustering to the earliest reports' raw coordinates in a two-stage approach to isolate a compact candidate origin location and time, then adjusting clustering parameters until a stable, interpretable cluster emerges.
With the origin and spread pattern established, I'm now testing four alternative transmission hypotheses against different contextual data sources: person-to-person spread (checking for contiguous outward diffusion into adjacent densely populated zones and along major roads), airborne transmission (correlating new-case direction and timing with recorded wind direction and speed, similar to lagged cross-impact analysis), and two others I'm about to examine. The analyst iterates through this evidence-gathering loop—similar to how other systems explore correlations and metadata relationships—refining or testing additional hypotheses until the evidence for the most plausible transmission mode reaches sufficient confidence. Once that threshold is met, the system synthesizes the accumulated evidence, the identified origin point, and the characterized spread pattern into a concrete statement of the outbreak's likely source and transmission mechanism, along with specific deployment recommendations for emergency response resources tailored to that mechanism.
Now I'm laying out the full workflow structure for the outbreak analysis system, mapping the sequence of operations from initial unit definition through iterative characterization, visualization, and assessment loops, culminating in knowledge generation and synthesis.
Writing the complete workflow code... Defining the refinement loop to iteratively improve the extraction criteria—I'll characterize report density as a sanity check, visualize the messages on a map with a list view, assess quality, and either revise the criteria and re-extract or exit once the analyst is satisfied with the accuracy and completeness of the illness reports. I'm defining the visualization layout and encoding for the sampled reports, then setting up a human assessment step to evaluate how well the extraction captured flu-like symptoms based on domain knowledge. If that quality check reveals gaps, I'll adjust the keyword criteria and iterate. Wrapping up the extraction refinement loop by reassigning the updated criteria and reports, then moving into phase two where I'm spatially joining the illness reports to zone polygons for geographic contextualization.
Now I'm computing daily incidence rates by aggregating case counts per zone and normalizing by population to create a time-series feature, then arranging this data as a map-based visualization with temporal sequencing across zones. Defining the visualization layout with sequential map panels showing choropleth zones and individual report markers, where color intensity represents daily incidence and marker properties encode symptom confidence, then extracting the perceived spread pattern and trajectory from this spatial-temporal progression.
Now I'm setting up the origin refinement phase with density-clustering parameters to isolate a compact candidate outbreak cluster among the earliest reports, iterating until finding a stable, spatially coherent cluster that aligns with the map context. Adding cluster features and visualization... Adjusting the clustering parameters based on the quality assessment, then finalizing the origin location and time into confirmed statements. Moving into phase 3 to evaluate transmission-mode hypotheses.
I'm setting up the evidence log to accumulate assessments for each candidate transmission mode as I test them, starting with the four main hypotheses: person-to-person, airborne, waterborne, and point-source transmission.
Now I'm defining the loop that iterates through testing each hypothesis—selecting the next untested or inconclusive candidate, computing the specific evidence needed to evaluate it, and recording the results. For person-to-person transmission, I'm checking spatial contiguity and road-network proximity; for airborne, I'm looking at lagged correlations with wind patterns. Now I'm arranging the hypothesis view by overlaying the evidence features with contextual layers like wind patterns and water bodies, then visualizing this through coordinated map overlays paired with time-series correlation plots to show the spatial and temporal relationships. I'm recording each hypothesis assessment into an accumulated evidence log, then checking whether I've evaluated all relevant hypotheses with sufficient support for identifying the transmission modes.
If the evidence is still inconclusive, I'm selecting the next candidate hypothesis to test or refining the current one based on what the evidence contradicts or leaves unclear, then cycling back through the analysis loop.
Once I've gathered enough evidence to support one or more transmission modes, I'll move into the synthesis phase. Finalizing the answer structure with natural language explanation and ATWL representation sections, making sure the syntax is correct for each artifact type and including citations to the relevant workflows throughout. I'm settling on the essential features for each domain entity: keywords and confidence scores for illness reports, population counts for zones, and type classification for water bodies. For the road network, I need to define its internal structure.
Now I'm specifying the remaining entities—landmarks with category and name fields, and weather data with wind speed and direction as numeric values in degrees rather than categorical directions, since that's more useful for analytical purposes like lag correlation. I'm ready to write out the complete ATWL specification as a formatted code block.
I need to verify the loop syntax is correct: each loop requires a purpose statement, until condition, and indented body with transforms and conditional branches using if/then/else with assign blocks, plus exit loop statements where needed. Nested conditionals are definitely allowed based on the library examples. For initialization, I'm using artifact declarations with origin: given for pre-loop setup like extraction criteria and origin clustering, which get reassigned within the loop body.
For the accumulator K_evidence_log, I should follow the convention of declaring it without an origin field since it starts empty, letting it implicitly initialize rather than using an explicit assign statement before the loop—this matches how other library examples handle initially-empty accumulators like P_findings.
The specifications S_candidate_hypotheses, S_extraction_criteria, and S_origin_clustering are different since they have origin: given, so they need to be declared with that origin and then reassigned inside the loop via assign statements, which I've already done correctly.
Now I'm ready to write out the full answer. Given the complexity of the task, I could trim things down by merging the origin-localisation loop into the spread analysis, but the instructions ask for thorough design and the examples in the library are quite lengthy, so I'll provide a complete but efficient version. Let me finalize this and double-check the template structure at the top. Composing the final workflow definition...
Analytical Workflow: Locating the Vastopolis Outbreak Origin and Identifying its Transmission Mode
Natural-language description
The workflow proceeds in four phases, moving from raw social-media text to an actionable characterisation of where the outbreak began and how it is spreading.
Phase 1 — Extracting validated illness reports. Since no case data exist directly, illness events must first be inferred from free text. A hybrid keyword/classifier step flags microblog messages that plausibly report flu-like symptoms, producing a geolocated, timestamped "illness-report" entity set. Because extraction errors would bias every downstream spatial and temporal conclusion, the analyst inspects a sample of flagged and excluded messages in context and iteratively tunes the keyword/classifier criteria — an iterative criteria-refinement loop analogous to the feature-refinement loop in behaviour-pattern-recognition-in-time-series and the interactive labelling loop in DaedalusData.
Phase 2 — Spread overview and fine-grained origin localisation. Validated reports are spatially joined to the 13 zones and aggregated into population-normalised daily incidence, following the spatio-temporal aggregation approach of extracting significant places from trajectories (events-to-places). A small-multiples map sequence lets the analyst trace the spread across zones and days and form an initial impression of where and when it began. Because zone-level aggregation is too coarse to localise a plausible "site," a second step applies density-based spatio-temporal clustering directly to the raw coordinates of the earliest reports — reusing the two-stage clustering idea from the same events-to-places workflow — to isolate a compact, interpretable origin cluster, with the analyst iteratively tuning clustering parameters against the map context (landmarks, hospitals).
Phase 3 — Transmission-mode hypothesis testing. With an origin established, the analyst cycles through four competing transmission hypotheses, each tested against a different contextual data source: person-to-person (spatial contiguity/diffusion from the origin along road-network connectivity and population density), airborne (lagged correlation between daily wind direction/speed and the direction of new-case appearance — reusing the lagged cross-impact methodology of Detecting Stable Cross-Impact Patterns in Bivariate Time Series, here applied to wind vs. incidence instead of mobility vs. cases), waterborne (spatial clustering of cases near/along water bodies, independent of population density), and point-source/other (shared venue or landmark mentions in the text of early cases). For each hypothesis, coordinated map and time-series views — in the spirit of the metadata-relation-seeking multi-view design of IVESA and the correlation-exploration loop of LFPeers — let the analyst judge whether the evidence supports, contradicts, or is inconclusive for that mode, accumulating a running evidence log across iterations until the picture is sufficiently clear.
Phase 4 — Synthesis. The localised origin, the characterised spread pattern, and the accumulated hypothesis evidence are synthesised into an explicit statement of the outbreak's probable origin and transmission mechanism(s), with implications for emergency-resource deployment (contact tracing/quarantine near a person-to-person hotspot, ventilation/air-quality response if airborne, water-supply intervention if waterborne, or facility investigation/closure if point-source).
ATWL representation
workflow vastopolis-outbreak-source-and-transmission-analysis
template: define-unit →
loop(characterise → visualise → assess →
generate-knowledge → define-unit) →
contextualise → characterise → contextualise →
visualise → abstract →
loop(define-unit → define-unit → visualise → assess) →
generate-knowledge →
loop(generate-knowledge → characterise → contextualise →
visualise → abstract → assess → generate-knowledge) →
generate-knowledge
description: "Public-health investigation of a flu-like outbreak in
Vastopolis: extract validated illness reports from geolocated
microblogs, visualise their spatio-temporal spread across the city's
13 zones, localise a fine-grained outbreak origin via spatio-temporal
clustering, and iteratively test person-to-person, airborne,
waterborne, and point-source transmission hypotheses against weather,
hydrography, road-network, and text evidence to guide resource
deployment"
# ============================================================================
# INPUT
# ============================================================================
artifact D_microblogs : entities
origin: given
internal structure: elementary
embedment: {set, space, time}
features:
- id: f_text
value structure: atomic
value type: text
description: "Message text content"
description: "Geolocated, timestamped microblog messages posted by
residents over the outbreak period"
artifact D_zones : entities
origin: given
internal structure: region
embedment: space
features:
- id: f_population
value structure: atomic
value type: numeric
description: "Resident population of the zone"
description: "13 administrative city zones providing spatial context
and population denominators"
artifact D_water_bodies : entities
origin: given
internal structure: region
embedment: space
features:
- id: f_water_type
value structure: atomic
value type: categorical
description: "Water body type (river, lake, reservoir)"
description: "Water bodies within the metropolitan area"
artifact D_road_network : entities
origin: given
internal structure: formation
embedment: space
features:
- id: f_road_type
value structure: atomic
value type: categorical
description: "Road classification (highway, arterial, local)"
description: "Highway/road network providing a connectivity structure
for person-to-person diffusion analysis"
artifact D_landmarks : entities
origin: given
internal structure: elementary
embedment: space
features:
- id: f_category
value structure: atomic
value type: categorical
description: "Landmark category (hospital, market, venue, other)"
- id: f_name
value structure: atomic
value type: categorical
description: "Landmark name"
description: "Hospitals and other notable landmarks, used both as map
context and as candidate point-source locations"
artifact D_weather : entities
origin: given
internal structure: elementary
embedment: time
features:
- id: f_wind_speed
value structure: atomic
value type: numeric
description: "Daily wind speed"
- id: f_wind_direction
value structure: atomic
value type: numeric
description: "Daily prevailing wind direction (degrees)"
description: "Daily city-wide weather observations over the outbreak
period"
# ============================================================================
# PHASE 1: EXTRACT AND VALIDATE ILLNESS REPORTS
# ============================================================================
artifact S_extraction_criteria : specification
origin: given
representation form: "keyword list and classifier threshold"
description: "Initial symptom-keyword list and confidence threshold for
flagging microblog messages as flu-like illness reports"
transform T_extract_reports :
intent: define-unit
manner: "keyword/symptom-based text classification"
input: D_microblogs, S_extraction_criteria
output: D_illness_reports
actor: hybrid
description: "Flag microblog messages plausibly reporting flu-like
symptoms and extract them as illness-report entities"
artifact D_illness_reports : entities
internal structure: elementary
embedment: {set, space, time}
features:
- id: f_keywords
value structure: list
value type: categorical
description: "Matched symptom keywords"
- id: f_confidence
value structure: atomic
value type: numeric
description: "Classifier confidence that the message reports
genuine illness"
description: "Geolocated, timestamped candidate illness reports derived
from the microblog stream"
loop L_extraction_refinement:
purpose: "Refine symptom-keyword/classifier criteria so that extracted
reports neither miss genuine cases nor include irrelevant chatter"
until: "The analyst judges the report set to be a sufficiently accurate
and complete representation of flu-like illness reports"
body:
transform T_summarise_reports :
intent: characterise
manner: "compute daily report counts and a stratified sample of
flagged and excluded messages"
input: D_illness_reports, D_microblogs
output: F_report_sample
actor: machine
description: "Prepare daily counts and a sample of borderline
classifications for visual inspection"
artifact F_report_sample : feature(D_illness_reports)
value structure: vector
value type: {numeric, text}
description: "Daily report counts and sampled flagged/excluded
message texts with matched keywords highlighted"
transform T_visualise_sample :
intent: visualise
manner: "map and chronological list of sampled messages"
input: F_report_sample, D_illness_reports
output: V_report_sample
actor: machine
description: "Display sampled messages on the map and in a
chronological list, with matched keywords highlighted"
artifact V_report_sample : visualisation(D_illness_reports,
F_report_sample)
layout: "linked map and chronological message list"
form: "point markers on map; text list with highlighted keywords"
encoding: "marker position from message coordinates; marker colour
from classifier confidence; list highlighting from matched
keyword terms"
description: "Interface supporting inspection of extraction quality
in geographic and textual context"
transform T_assess_extraction :
intent: assess
manner: "evaluate completeness and precision of the extracted
report set against domain knowledge of symptom language"
input: V_report_sample
output: K_extraction_quality
actor: human
description: "Judge whether current criteria adequately separate
genuine illness reports from noise"
artifact K_extraction_quality : knowledge(D_illness_reports)
representation form: "quality judgment"
description: "Assessment of extraction precision/recall and
whether criteria adjustment is needed"
if K_extraction_quality indicates refinement needed:
then:
transform T_revise_criteria :
intent: generate-knowledge
manner: "adjust keyword list, threshold, or exclusion terms"
input: K_extraction_quality, S_extraction_criteria
output: S_extraction_criteria_r
actor: human
description: "Revise extraction criteria based on observed
errors"
artifact S_extraction_criteria_r : specification
representation form: "keyword list and classifier threshold"
description: "Updated extraction criteria"
transform T_reextract_reports :
intent: define-unit
manner: "keyword/symptom-based text classification, re-applied"
input: D_microblogs, S_extraction_criteria_r
output: D_illness_reports_r
actor: hybrid
description: "Re-extract illness reports under revised
criteria"
artifact D_illness_reports_r : entities
internal structure: elementary
embedment: {set, space, time}
features:
- id: f_keywords
value structure: list
value type: categorical
description: "Matched symptom keywords"
- id: f_confidence
value structure: atomic
value type: numeric
description: "Classifier confidence"
description: "Revised illness-report set"
assign:
S_extraction_criteria := S_extraction_criteria_r
D_illness_reports := D_illness_reports_r
else:
exit loop L_extraction_refinement
end loop L_extraction_refinement
# ============================================================================
# PHASE 2: SPREAD OVERVIEW AND ORIGIN LOCALISATION
# ============================================================================
transform T_assign_zone :
intent: contextualise
manner: "map-based, point-in-polygon assignment"
input: D_illness_reports, D_zones
output: A_reports_zone
actor: machine
description: "Assign each illness report to its containing city zone"
artifact A_reports_zone : arrangement(D_illness_reports)
context: D_zones
principle: "point-in-polygon assignment to zone polygons"
description: "Zone membership of every illness report"
transform T_compute_daily_incidence :
intent: characterise
manner: "aggregate per-zone, per-day counts and normalise by
population"
input: D_illness_reports, A_reports_zone, D_zones
output: F_daily_incidence
actor: machine
description: "Compute a population-normalised daily incidence rate per
zone"
artifact F_daily_incidence : feature(D_zones)
value structure: matrix
value type: numeric
representation form: "time series per zone"
description: "Daily, population-normalised illness-report incidence
per zone over the outbreak period"
transform T_arrange_spread :
intent: contextualise
manner: "map-based arrangement with daily temporal sequencing"
input: D_zones, F_daily_incidence, D_illness_reports
output: A_spread
actor: machine
description: "Arrange zones geographically and sequence them by day to
support a small-multiples spread overview"
artifact A_spread : arrangement(D_illness_reports)
context: D_zones
principle: "geographic zone positions crossed with daily temporal
sequencing"
description: "Spatio-temporal arrangement of illness reports and
zone-level incidence"
transform T_visualise_spread :
intent: visualise
manner: "small-multiples choropleth map sequence with point overlay"
input: A_spread, F_daily_incidence, D_illness_reports
output: V_spread_overview
actor: machine
description: "Display one map panel per day showing zone incidence and
individual reports"
artifact V_spread_overview : visualisation(A_spread, F_daily_incidence,
D_illness_reports)
layout: "chronologically ordered sequence of small map panels"
form: "choropleth zone polygons with overlaid point markers"
encoding: "zone fill intensity from normalised daily incidence; point
position from report coordinates; point colour/size from symptom
confidence"
description: "Overview enabling visual tracing of the outbreak's spatial
and temporal progression"
transform T_read_spread :
intent: abstract
manner: "perception-and-interpretation of spatial and temporal
progression"
input: V_spread_overview
output: P_spread_pattern
actor: human
description: "Identify the general spread trajectory and the earliest
affected zone(s)/day(s) as candidates for the outbreak origin"
artifact P_spread_pattern : pattern(D_illness_reports, F_daily_incidence)
representation form: "described spread trajectory"
description: "General direction/shape of spread (e.g. radiating
outward, corridor-following) and candidate origin zone/day"
artifact S_origin_clustering : specification
origin: given
representation form: "parameter settings"
description: "Initial spatial radius, temporal window, and minimum
point count for density-based clustering of the earliest reports"
loop L_origin_localisation:
purpose: "Isolate a compact, finer-than-zone spatio-temporal cluster
among the earliest reports that plausibly marks the outbreak's point
of origin"
until: "A stable, spatially compact, temporally coherent origin cluster
has been identified and is plausible given nearby landmarks"
body:
transform T_select_early_reports :
intent: define-unit
manner: "filter to the earliest days indicated by P_spread_pattern"
input: D_illness_reports, P_spread_pattern
output: D_early_reports
actor: human
description: "Restrict analysis to reports from the earliest phase
of the outbreak"
artifact D_early_reports : entities
internal structure: elementary
embedment: {set, space, time}
description: "Illness reports from the earliest outbreak days"
transform T_cluster_origin :
intent: define-unit
manner: "density-based spatio-temporal clustering"
input: D_early_reports, S_origin_clustering
output: D_origin_clusters, F_origin_labels
actor: machine
description: "Group early reports concentrated in space and time
into candidate origin clusters"
artifact D_origin_clusters : entities
internal structure: group/cluster
embedment: {space, time}
features:
- id: f_cluster_size
value structure: atomic
value type: numeric
description: "Number of reports in the cluster"
description: "Candidate compact origin clusters among early
reports"
artifact F_origin_labels : feature(D_early_reports)
value structure: atomic
value type: categorical
description: "Origin-cluster membership or noise designation"
transform T_visualise_origin :
intent: visualise
manner: "detailed local map with landmark and road overlay"
input: D_origin_clusters, F_origin_labels, D_landmarks,
D_road_network
output: V_origin_map
actor: machine
description: "Show candidate origin clusters against landmarks,
hospitals, and roads for plausibility checking"
artifact V_origin_map : visualisation(D_origin_clusters,
F_origin_labels, D_landmarks)
layout: "detailed local map"
form: "coloured cluster points; landmark/hospital icons; road
lines"
encoding: "point colour from cluster membership; icon shape from
landmark category; line style from road type"
description: "Local map supporting assessment of cluster
coherence and plausibility"
transform T_assess_origin :
intent: assess
manner: "evaluate cluster compactness, coherence, and plausibility"
input: V_origin_map, D_origin_clusters
output: K_origin_quality
actor: human
description: "Judge whether a candidate cluster is a satisfactory
origin, or whether clustering parameters need adjustment"
artifact K_origin_quality : knowledge(D_origin_clusters)
representation form: "quality judgment"
description: "Assessment of origin-cluster compactness, coherence,
and plausibility"
if K_origin_quality indicates satisfactory origin cluster:
then:
exit loop L_origin_localisation
else:
transform T_adjust_origin_params :
intent: generate-knowledge
manner: "adjust spatial radius, temporal window, or minimum
point count"
input: K_origin_quality, S_origin_clustering
output: S_origin_clustering_r
actor: human
description: "Revise clustering parameters based on
assessment"
artifact S_origin_clustering_r : specification
representation form: "parameter settings"
description: "Updated clustering parameters"
assign:
S_origin_clustering := S_origin_clustering_r
end loop L_origin_localisation
transform T_finalise_origin :
intent: generate-knowledge
manner: "formulate-statements"
input: D_origin_clusters, K_origin_quality, D_landmarks
output: K_origin
actor: human
description: "State the confirmed outbreak origin location and time,
noting any co-located landmark or facility"
artifact K_origin : knowledge(D_origin_clusters)
representation form: "statements"
description: "Confirmed origin location, onset time, and any
co-located landmark relevant to the point-source hypothesis"
# ============================================================================
# PHASE 3: TRANSMISSION-MODE HYPOTHESIS TESTING
# ============================================================================
artifact S_candidate_hypotheses : specification
origin: given
representation form: "ordered list of hypothesis types"
description: "The four candidate transmission modes to examine:
person-to-person, airborne, waterborne, point-source/other"
artifact K_evidence_log : knowledge(D_illness_reports)
representation form: "accumulated hypothesis assessments"
description: "Initially empty; accumulates the evidence for/against
each candidate transmission-mode hypothesis across iterations"
loop L_transmission_analysis:
purpose: "Iteratively test alternative transmission-mode hypotheses
against the observed spread pattern, weather, hydrography, road
network, and text evidence until the evidence for the most plausible
mode(s) is judged sufficiently strong"
until: "All relevant hypotheses have been evaluated and the evidence
log supports one or more transmission modes with sufficient
confidence"
body:
transform T_formulate_hypothesis :
intent: generate-knowledge
manner: "select the next untested or inconclusive candidate
transmission mode and specify the contextual variables and
evidence computation needed to test it"
input: S_candidate_hypotheses, K_evidence_log, K_origin
output: S_hypothesis
actor: human
description: "Choose which transmission mode to test next and how"
artifact S_hypothesis : specification
representation form: "hypothesis type and evidence-computation
specification"
description: "Current transmission-mode hypothesis and the
contextual data/method needed to test it"
transform T_compute_hypothesis_evidence :
intent: characterise
manner: "compute hypothesis-specific evidence: spatial contiguity
and road-network proximity for person-to-person; lagged
correlation between wind direction/speed and directional case
spread for airborne; distance-to-water-body and downstream
clustering for waterborne; shared-venue/landmark text mining
among early cases for point-source"
input: D_illness_reports, A_reports_zone, D_zones, D_weather,
D_water_bodies, D_road_network, D_landmarks, S_hypothesis
output: F_hypothesis_evidence
actor: machine
description: "Compute the evidence variables relevant to the
current hypothesis"
artifact F_hypothesis_evidence : feature(D_illness_reports)
value structure: vector
value type: numeric
description: "Per-report or per-zone evidence values specific to
the current hypothesis (e.g. contiguity metric, lagged wind
correlation, water-distance, venue co-mention count)"
transform T_arrange_hypothesis_view :
intent: contextualise
manner: "overlay hypothesis-relevant contextual layer with the
spread map and timeline"
input: F_hypothesis_evidence, A_spread, D_water_bodies,
D_road_network, D_weather, D_landmarks
output: A_hypothesis
actor: machine
description: "Combine the case-spread arrangement with the
contextual layer (wind vectors, water bodies, roads, or venues)
relevant to the current hypothesis"
artifact A_hypothesis : arrangement(D_illness_reports)
context: S_hypothesis
principle: "spread map and timeline overlaid with the
hypothesis-relevant contextual layer (wind field, hydrography,
road network, or venue markers)"
description: "Hypothesis-specific spatio-temporal arrangement for
visual comparison"
transform T_visualise_hypothesis :
intent: visualise
manner: "coordinated map overlay and correlation/time-series plot"
input: A_hypothesis, F_hypothesis_evidence
output: V_hypothesis
actor: machine
description: "Display the spread pattern against the contextual
layer and any derived correlation/time-series evidence"
artifact V_hypothesis : visualisation(A_hypothesis,
F_hypothesis_evidence)
layout: "map panel with contextual overlay, linked to a
correlation or time-series panel"
form: "map overlay (vectors/polygons/lines/markers as relevant);
scatter or line chart for correlation/lag evidence"
encoding: "overlay symbol/colour from contextual layer type; chart
axes from hypothesis evidence values"
description: "Coordinated view supporting visual judgment of
alignment between spread pattern and candidate factor"
transform T_interpret_hypothesis :
intent: abstract
manner: "perception-and-interpretation of spatial alignment and
correlation strength"
input: V_hypothesis
output: P_hypothesis_pattern
actor: human
description: "Interpret whether the spread pattern visually aligns
with, or correlates with, the candidate factor"
artifact P_hypothesis_pattern : pattern(D_illness_reports,
F_hypothesis_evidence)
representation form: "described alignment/correlation evidence"
description: "Observed degree and direction of alignment between
the spread pattern and the candidate transmission factor"
transform T_assess_hypothesis :
intent: assess
manner: "judge whether evidence supports, contradicts, or is
inconclusive for the hypothesis"
input: P_hypothesis_pattern, V_hypothesis
output: K_hypothesis_assessment
actor: human
description: "Evaluative judgment on the current hypothesis"
artifact K_hypothesis_assessment : knowledge(P_hypothesis_pattern)
representation form: "quality judgment"
description: "Support/contradiction/inconclusive verdict for the
current transmission-mode hypothesis, with rationale"
transform T_log_evidence :
intent: generate-knowledge
manner: "append the current assessment to the accumulated evidence
log"
input: K_hypothesis_assessment, K_evidence_log
output: K_evidence_log_r
actor: human
description: "Update the running record of tested hypotheses and
their evidentiary support"
artifact K_evidence_log_r : knowledge(D_illness_reports)
representation form: "accumulated hypothesis assessments"
description: "Evidence log extended with the current hypothesis's
assessment"
assign:
K_evidence_log := K_evidence_log_r
if K_evidence_log indicates sufficient evidence has been gathered
for one or more transmission modes and no untested plausible
hypotheses remain:
then:
exit loop L_transmission_analysis
else:
transform T_select_next_hypothesis :
intent: generate-knowledge
manner: "choose the next candidate hypothesis to test, or
refine the current one, based on inconclusive or contradicted
evidence"
input: K_evidence_log_r, S_candidate_hypotheses
output: S_candidate_hypotheses_r
actor: human
description: "Update the remaining hypothesis agenda"
artifact S_candidate_hypotheses_r : specification
representation form: "revised ordered list of remaining
hypotheses"
description: "Updated hypothesis agenda for the next
iteration"
assign:
S_candidate_hypotheses := S_candidate_hypotheses_r
end loop L_transmission_analysis
# ============================================================================
# PHASE 4: SYNTHESIS
# ============================================================================
transform T_synthesise :
intent: generate-knowledge
manner: "formulate-statements"
input: K_origin, P_spread_pattern, K_evidence_log
output: K_findings
actor: human
description: "Integrate the localised origin, characterised spread
pattern, and accumulated transmission-mode evidence into an
actionable outbreak characterisation"
artifact K_findings : knowledge(K_origin, K_evidence_log)
representation form: "statements and recommendations"
description: "Final characterisation of the outbreak: confirmed origin
location and time; most plausible transmission mode(s) with
supporting evidence and confidence; and recommended emergency
resource deployment (e.g. contact tracing/quarantine, air-quality
intervention, water-supply investigation, or facility closure)"
Sources drawn upon
- extracting significant places from trajectories (events-to-places): spatio-temporal aggregation of geolocated events and two-stage density clustering, adapted here for zone-level incidence and origin localisation.
- behaviour-pattern-recognition-in-time-series and DaedalusData: iterative criteria/feature-refinement loop pattern for validating text-derived event extraction.
- Detecting Stable Cross-Impact Patterns in Bivariate Time Series (Andrienko): lagged cross-impact methodology, adapted for testing wind vs. incidence correlation under the airborne hypothesis.
- IVESA and LFPeers: multi-view metadata-relation-seeking and correlation-exploration loop patterns underlying the transmission-mode hypothesis-testing loop.
Make a list of the papers from which you have taken relevant approaches.
Here is the list of papers from which I drew relevant approaches for the Vastopolis workflow recommendation, with full citations as given in the library:
-
Andrienko, G., Andrienko, N., Hurter, C., Rinzivillo, S., & Wrobel, S. (2011). From movement tracks through events to places: Extracting and characterizing significant places from mobility data. In 2011 IEEE Conference on Visual Analytics Science and Technology (VAST), pages 161–170. doi: 10.1109/VAST.2011.6102454 (Workflow: "Extracting significant places from trajectories" / events-to-places — spatio-temporal aggregation and two-stage density clustering, adapted for zone-level incidence aggregation and fine-grained origin localisation.)
-
Andrienko, N., Andrienko, G., Artikis, A., Mantenoglou, P., & Rinzivillo, S. (2024). Human-in-the-Loop: Visual Analytics for Building Models Recognizing Behavioral Patterns in Time Series. IEEE Computer Graphics and Applications, 44(3), 14–29. doi: 10.1109/MCG.2024.3379851 (Workflow: "Feature engineering for behaviour pattern recognition" / behaviour-pattern-recognition-in-time-series — iterative criteria/feature-refinement loop pattern underlying the extraction-validation loop.)
-
Wyss, A., Morgenshtern, G., Hirsch-Hüsler, A., & Bernard, J. (2025). DaedalusData: Exploration, Knowledge Externalization and Labeling of Particles in Medical Manufacturing — A Design Study. IEEE Transactions on Visualization and Computer Graphics, 31(1), 54–64. doi: 10.1109/TVCG.2024.3456329 (Workflow: "DaedalusData workflow" — interactive labelling/refinement loop pattern informing the extraction-criteria refinement loop.)
-
Andrienko, G., Andrienko, N., Akila, M., Kathirgamanathan, B., & Ponce-de-Leon, M. (2026). Detecting Stable Cross-Impact Patterns in Bivariate Time Series. IEEE Transactions on Visualization and Computer Graphics, 32(7), 5996–6013. doi: 10.1109/TVCG.2026.3676810 (Workflow: "Detecting Stable Cross-Impact Patterns in Bivariate Time Series" — lagged cross-impact detection methodology, adapted here for testing wind vs. incidence correlation under the airborne-transmission hypothesis.)
-
Bauer, R., Barth, C.-M., Cuba, E., Meier, A., Peiris, Y., & Shneiderman, B. (2025). IVESA – Visual Analysis of Time-Stamped Event Sequences. IEEE Transactions on Visualization and Computer Graphics, 31(4), 2235–2256. doi: 10.1109/TVCG.2024.3382760 (Workflow: "IVESA workflow" — metadata relation-seeking multi-view design pattern underlying the multi-view hypothesis-testing arrangement in Phase 3.)
-
Sachdeva, M., Burmeister, J., Kohlhammer, J., & Bernard, J. (2023). LFPeers: Temporal similarity search and result exploration. Computers & Graphics, 115, 81–95. doi: 10.1016/j.cag.2023.06.009 (Workflow: "LFPeers workflow" — correlation-exploration loop pattern (query → compute → visualise → assess → refine) underlying the iterative hypothesis-testing loop in Phase 3.)