VAST · Claude Sonnet 5 · C3

Vastopolis outbreak investigation — C3 · ATWL + library

C3

Raw session log. Atwl spec + example + 54-workflow library (atwl form).

6 turns (3 user · 3 assistant) json raw log

1 Researcher

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.

2 Model

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.

3 Researcher

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.

4 Model

I'm noticing the user already provided the task description in this message about analyzing a public health outbreak in Vastopolis, along with details about the attachment structure, so I don't need to wait for further confirmation before proceeding.

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.
5 Researcher

Make a list of the papers from which you have taken relevant approaches.

6 Model

I need to pull together the full citations from my earlier response so I can provide the user with a proper reference list of the papers I drew from.

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:

  1. 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.)

  2. 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.)

  3. 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.)

  4. 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.)

  5. 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.)

  6. 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.)