{
 "datasets": {
  "boxes": {
   "file": "data/boxes.json",
   "entries": 3,
   "note": "Folders and scans per box of the scanned Nachlass; PDAI documents per box; Caltech sections named on cover sheets."
  },
  "categories": {
   "file": "data/categories.json",
   "entries": 2,
   "note": "Categories of the PDAI documents grouped as in series.yaml; docs, pages, units."
  },
  "unit_types": {
   "file": "data/unit_types.json",
   "entries": 12,
   "note": "Types of the non-blank content units."
  },
  "years": {
   "file": "data/years.json",
   "entries": 3,
   "note": "Dated units per year (1895–1965), letters (letter, telegram, postcard), Kármán correspondence."
  },
  "places": {
   "file": "data/places.json",
   "entries": 7,
   "note": "Writing places normalised to cities (places.yaml); per-year stream of the nine most frequent cities."
  },
  "languages": {
   "file": "data/languages.json",
   "entries": 4,
   "note": "Languages of dated units per decade."
  },
  "correspondents": {
   "file": "data/correspondents.json",
   "entries": 5,
   "note": "Counterparts of Kármán (ent_id 8) in units he sent or received; role labels excluded."
  },
  "topics": {
   "file": "data/topics.json",
   "entries": 6,
   "note": "Curated subject tags per decade (count and share of dated units)."
  },
  "manuscripts": {
   "file": "data/manuscripts.json",
   "entries": 227,
   "note": "Documents of the manuscript categories; years parsed from folder slugs; no date inferred."
  },
  "period_check": {
   "file": "data/period_check.json",
   "entries": 2,
   "note": "Boundary checks of periods.yaml against the writing places per year."
  },
  "periods": {
   "file": "data/periods.json",
   "entries": 5,
   "note": "Per-period aggregates for the narrative Arbeitsperioden."
  },
  "sources": {
   "file": "data/sources.json",
   "entries": 2,
   "note": "Grounding sources on the history of aviation."
  },
  "facts": {
   "file": "data/facts.json",
   "entries": 93,
   "note": "Flat numbers used in the texts ({{key}} placeholders)."
  }
 },
 "queries": {
  "00_units": {
   "sql": "-- Content units of the PDAI collection, blank pages excluded.\n-- y: year from date_when, NULL when undated or outside 1890–1970.\n-- counterpart_id: the other party of a unit in which Kármán (ent_id 8) is sender or recipient.\nCREATE OR REPLACE TEMP VIEW u AS\nSELECT\n    l.letter_id,\n    l.doc_id,\n    l.letter_nr,\n    l.page_start,\n    l.doc_type,\n    coalesce(l.place, '') AS place,\n    l.date_when,\n    CASE WHEN try_cast(substr(l.date_when, 1, 4) AS INTEGER) BETWEEN 1890 AND 1970\n         THEN try_cast(substr(l.date_when, 1, 4) AS INTEGER) END AS y,\n    coalesce(l.language, '') AS language,\n    l.regest,\n    l.topics,\n    lr.sender_id,\n    lr.recipient_id,\n    CASE WHEN lr.sender_id = 8 AND lr.recipient_id IS NOT NULL AND lr.recipient_id <> 8 THEN lr.recipient_id\n         WHEN lr.recipient_id = 8 AND lr.sender_id IS NOT NULL AND lr.sender_id <> 8 THEN lr.sender_id\n    END AS counterpart_id,\n    CASE WHEN lr.sender_id = 8 THEN 'out' WHEN lr.recipient_id = 8 THEN 'in' END AS direction,\n    d.category,\n    try_cast(split_part(l.doc_id, '-', 1) AS INTEGER) AS box\nFROM letters l\nJOIN letters_resolved lr ON lr.letter_id = l.letter_id\nJOIN documents d ON d.doc_id = l.doc_id\nWHERE l.doc_type <> 'blank';",
   "calls": 1,
   "rows": null
  },
  "summary": {
   "sql": "-- Key figures of the PDAI collection.\nSELECT\n    (SELECT count(*) FROM documents WHERE category IS NOT NULL AND category <> '') AS n_documents,\n    (SELECT sum(pages) FROM documents) AS n_pages,\n    (SELECT count(*) FROM letters) AS n_records,\n    (SELECT count(*) FROM letters WHERE doc_type = 'blank') AS n_blank,\n    (SELECT count(*) FROM u) AS n_units,\n    (SELECT count(*) FROM u WHERE y IS NOT NULL) AS n_dated,\n    (SELECT count(*) FROM u WHERE direction IS NOT NULL) AS n_karman_units,\n    (SELECT count(*) FROM u WHERE direction = 'out') AS n_karman_out,\n    (SELECT count(*) FROM u WHERE direction = 'in') AS n_karman_in,\n    (SELECT count(DISTINCT counterpart_id) FROM u) AS n_counterparts,\n    (SELECT count(*) FROM ent_canonical WHERE kind = 'person') AS n_persons,\n    (SELECT count(*) FROM ent_canonical WHERE kind = 'institution') AS n_institutions,\n    (SELECT count(*) FROM ent_canonical WHERE kind = 'place') AS n_places,\n    (SELECT min(y) FROM u) AS y_min,\n    (SELECT max(y) FROM u) AS y_max,\n    (SELECT count(DISTINCT box) FROM u) AS n_boxes_pdai;",
   "calls": 1,
   "rows": 1
  },
  "documents": {
   "sql": "-- Document spine: one row per PDAI document with its unit counts.\nSELECT\n    d.doc_id,\n    d.category,\n    d.display_name,\n    d.year_range,\n    d.pages,\n    try_cast(split_part(d.doc_id, '-', 1) AS INTEGER) AS box,\n    (SELECT count(*) FROM u WHERE u.doc_id = d.doc_id) AS n_units,\n    (SELECT count(*) FROM u WHERE u.doc_id = d.doc_id AND u.direction IS NOT NULL) AS n_karman_units\nFROM documents d\nWHERE d.category IS NOT NULL AND d.category <> ''\nORDER BY box, d.doc_id;",
   "calls": 1,
   "rows": 1066
  },
  "units": {
   "sql": "-- All non-blank units with the fields the Python aggregation needs.\nSELECT\n    letter_id, doc_id, letter_nr, page_start, doc_type, place, y, language,\n    topics, sender_id, recipient_id, counterpart_id, direction, category, box\nFROM u\nORDER BY doc_id, letter_nr;",
   "calls": 1,
   "rows": 15149
  },
  "persons": {
   "sql": "-- Canonical persons and institutions that occur as sender or recipient.\nSELECT e.ent_id, e.kind, e.canonical\nFROM ent_canonical e\nWHERE e.ent_id IN (SELECT sender_id FROM u UNION SELECT recipient_id FROM u);",
   "calls": 1,
   "rows": 2592
  },
  "institutions": {
   "sql": "-- Institutions mentioned in dated units (one row per unit and institution).\nSELECT DISTINCT u.letter_id, u.y, u.topics, e.canonical AS institution\nFROM letter_institutions li\nJOIN u USING (letter_id)\nJOIN ent_canonical e ON e.ent_id = li.ent_id\nWHERE u.y IS NOT NULL;",
   "calls": 1,
   "rows": 16450
  },
  "manuscript_units": {
   "sql": "-- Units inside the documents of the manuscript catalogue, with regests.\nSELECT u.doc_id, u.letter_nr, u.page_start, u.doc_type, u.y, u.language, u.topics, u.regest\nFROM u\nWHERE u.category IN ('Manuscripts & Notes (Technical)', 'Manuscripts & Notes (General)',\n                     'Lectures & Courses', 'Book Manuscripts')\nORDER BY u.doc_id, u.letter_nr;",
   "calls": 1,
   "rows": 1646
  },
  "sections": {
   "sql": "-- Sections of the Caltech finding aid named on the archive cover sheets\n-- (\"Section IX: Manuscripts ...\"), with the PDAI boxes in which they occur.\nWITH s AS (\n    SELECT\n        regexp_extract(regest, 'Section ([IVXL]+)', 1) AS section,\n        lower(regexp_extract(regest, 'Section [IVXL]+[:,]? ?[(''\"]?([A-Za-z][A-Za-z &\\-]+)', 1)) AS name,\n        try_cast(split_part(doc_id, '-', 1) AS INTEGER) AS box\n    FROM letters\n    WHERE regexp_matches(regest, 'Section [IVXL]+')\n)\nSELECT section,\n       arg_max(name, cnt) AS name,\n       min(bmin) AS box_min,\n       max(bmax) AS box_max,\n       sum(cnt) AS n_cover_sheets\nFROM (\n    SELECT section, name, count(*) AS cnt, min(box) AS bmin, max(box) AS bmax\n    FROM s\n    WHERE name LIKE 'personal correspondence%' OR name LIKE 'technical files%'\n       OR name LIKE 'publication correspondence%' OR name LIKE 'manuscripts%'\n    GROUP BY section, name\n)\nGROUP BY section\nORDER BY box_min;",
   "calls": 1,
   "rows": 4
  },
  "evidence": {
   "sql": "-- Earliest dated units whose regest contains a search term ($term is bound by build_data.py).\nSELECT date_when, letter_id, doc_id, page_start, regest\nFROM u\nWHERE y IS NOT NULL AND regest ILIKE '%' || $term || '%'\nORDER BY date_when\nLIMIT 3;",
   "calls": 12,
   "rows": 34
  }
 },
 "excluded_role_labels": [
  "Advisory Committee on Long Span Suspension Bridges",
  "Advisory Committee on Long-Span Suspension Bridges",
  "Advisory Committee on the Investigation of Long-Span Suspension Bridges",
  "Aviation Honors Committee",
  "Business Office",
  "California Institute of Technology Secretary",
  "Chief Engineer",
  "Committee on Interpretation &amp; Analysis",
  "Committee on Interpretation and Analysis",
  "Committee on Model Studies",
  "Committee on the Tacoma Narrows Bridge",
  "Joint Technical Committee on Earthquake Protection",
  "Members of the Committee on Interpretation and Analysis",
  "Narrows Bridge Loss Committee",
  "Office National de la Propriété Industrielle",
  "Office of Air Research",
  "Office of Indian Affairs",
  "Office of Scientific Research",
  "Purchasing Office",
  "Secretary",
  "Secretary of the Interior",
  "Secretary to Dr. von Kármán",
  "Special Committee on Airship Design and Construction",
  "United States Patent Office",
  "Unknown",
  "[Unknown Caltech Staff]"
 ],
 "name_variant_candidates": [
  [
   {
    "id": 9685,
    "name": "Putnam, P. C.",
    "n": 114
   },
   {
    "id": 12059,
    "name": "Putnam, Palmer C.",
    "n": 9
   },
   {
    "id": 12043,
    "name": "Putnam, Palmer Cosslett",
    "n": 8
   }
  ],
  [
   {
    "id": 12258,
    "name": "Hoff, Nicholas J.",
    "n": 37
   },
   {
    "id": 6680,
    "name": "Hoff, N. J.",
    "n": 7
   }
  ],
  [
   {
    "id": 3992,
    "name": "Barrett, E. C.",
    "n": 36
   },
   {
    "id": 3869,
    "name": "Barrett, Edward C.",
    "n": 7
   }
  ],
  [
   {
    "id": 12456,
    "name": "Wilbur, J. B.",
    "n": 33
   },
   {
    "id": 12447,
    "name": "Wilbur, John B.",
    "n": 20
   }
  ],
  [
   {
    "id": 3798,
    "name": "Andrew, Chas. E.",
    "n": 32
   },
   {
    "id": 4011,
    "name": "Andrew, Charles E.",
    "n": 28
   }
  ],
  [
   {
    "id": 18165,
    "name": "Heiman, Eric E.",
    "n": 27
   },
   {
    "id": 13790,
    "name": "Heiman, E. E.",
    "n": 17
   }
  ],
  [
   {
    "id": 2235,
    "name": "Sears, W. R.",
    "n": 25
   },
   {
    "id": 7898,
    "name": "Sears, William R.",
    "n": 15
   }
  ],
  [
   {
    "id": 10785,
    "name": "Goldstein, Sydney",
    "n": 17
   },
   {
    "id": 1369,
    "name": "Goldstein, Sidney",
    "n": 9
   }
  ],
  [
   {
    "id": 9809,
    "name": "Gilles, August",
    "n": 15
   },
   {
    "id": 10271,
    "name": "Gilles, A.",
    "n": 5
   }
  ],
  [
   {
    "id": 22187,
    "name": "Horovitz, George",
    "n": 15
   },
   {
    "id": 22172,
    "name": "Horovitz, Georg",
    "n": 5
   }
  ],
  [
   {
    "id": 9067,
    "name": "Weismann, Charles",
    "n": 14
   },
   {
    "id": 9088,
    "name": "Weismann, Ch.",
    "n": 8
   }
  ],
  [
   {
    "id": 943,
    "name": "Arnstein, Bertl",
    "n": 11
   },
   {
    "id": 993,
    "name": "Arnstein, Bertha",
    "n": 6
   }
  ],
  [
   {
    "id": 11944,
    "name": "Gutehoffnungshütte, Aktiengesellschaft für Bergbau und Hüttenbetrieb",
    "n": 11
   },
   {
    "id": 11939,
    "name": "Gutehoffnungshütte, Aktienverein für Bergbau und Hüttenbetrieb",
    "n": 5
   }
  ],
  [
   {
    "id": 12044,
    "name": "Smith, B. E.",
    "n": 11
   },
   {
    "id": 12448,
    "name": "Smith, Burwell B.",
    "n": 6
   }
  ],
  [
   {
    "id": 3342,
    "name": "Friedrichs, Kurt",
    "n": 10
   },
   {
    "id": 3359,
    "name": "Friedrichs, Kurt O.",
    "n": 7
   }
  ],
  [
   {
    "id": 8949,
    "name": "Yuan, Shao Wen",
    "n": 7
   },
   {
    "id": 8966,
    "name": "Yuan, S. W.",
    "n": 6
   }
  ],
  [
   {
    "id": 11609,
    "name": "Giannini, Gabriel M.",
    "n": 7
   },
   {
    "id": 11657,
    "name": "Giannini, Gabriel",
    "n": 5
   }
  ],
  [
   {
    "id": 1827,
    "name": "Adler, Edward",
    "n": 4
   },
   {
    "id": 1833,
    "name": "Adler, Edward D.",
    "n": 4
   }
  ]
 ],
 "built_at": "2026-09-28T19:39:07",
 "database": "/Volumes/PDAI-1/pdai-collections/karman-nachlass/karman-nachlass.duckdb",
 "archive": "/Volumes/PDAI-1/KarmanArchive",
 "counting_rules": [
  "Blank pages (doc_type = 'blank') are excluded from every count.",
  "Timelines count units with a year in date_when between 1890 and 1970.",
  "Kármán correspondence: units with Kármán (ent_id 8) as sender or recipient.",
  "Topics: tags in topics.yaml `exclude` are archive boilerplate and not counted; `synonyms` are merged.",
  "Institutions: units tagged 'archival' and the boilerplate institutions are not counted.",
  "Manuscript years are read from the folder slug only; no date is inferred."
 ],
 "boilerplate_institutions": [
  "California Institute of Technology Archives",
  "Caltech Archives",
  "NASM",
  "NEH",
  "National Air and Space Museum",
  "National Endowment for the Humanities",
  "Smithsonian Institution"
 ],
 "facts": {
  "n_boxes": 157,
  "n_folders": 4215,
  "n_scans": 142505,
  "n_documents": 1066,
  "n_pages": 38172,
  "n_records": 15976,
  "n_blank": 827,
  "n_units": 15149,
  "n_dated": 8716,
  "n_undated": 6433,
  "pct_dated": 58,
  "n_karman_units": 6233,
  "n_karman_out": 2513,
  "n_karman_in": 3720,
  "n_counterparts": 1547,
  "n_persons": 14146,
  "n_institutions": 5560,
  "n_place_entities": 3513,
  "n_pdai_boxes": 38,
  "pdai_boxes": "1, 10–13 und 100–132",
  "pct_folders_pdai": 25,
  "pct_pages_pdai": 27,
  "y_first_peak": 1940,
  "n_first_peak": 821,
  "n_with_place": 7332,
  "n_cities_matched": 5923,
  "top_city_1": "Pasadena",
  "n_top_city_1": 1468,
  "top_city_2": "Aachen",
  "n_top_city_2": 619,
  "top_city_3": "New York",
  "n_top_city_3": 522,
  "n_manuscripts": 227,
  "n_ms_pages": 7019,
  "n_ms_undated": 74,
  "n_ms_dated": 153,
  "top_correspondent": "Herzfeld, H.",
  "n_top_correspondent": 217,
  "n_lang_en": 11029,
  "n_lang_de": 2815,
  "n_lang_fr": 448,
  "n_lang_hu": 270,
  "n_type_letter": 5676,
  "n_type_note": 3903,
  "n_type_report": 3347,
  "n_type_telegram": 420,
  "n_type_memo": 417,
  "n_type_enclosure": 885,
  "n_dec_1920": 1419,
  "n_dec_1930": 2061,
  "n_dec_1940": 2931,
  "n_dec_1950": 1744,
  "p_studium_units": 85,
  "p_studium_karman": 27,
  "p_studium_counterparts": 11,
  "p_studium_ms": 4,
  "p_aachen_units": 1523,
  "p_aachen_karman": 916,
  "p_aachen_counterparts": 223,
  "p_aachen_ms": 47,
  "p_pasadena_units": 3459,
  "p_pasadena_karman": 1798,
  "p_pasadena_counterparts": 582,
  "p_pasadena_ms": 31,
  "p_beratung_units": 1754,
  "p_beratung_karman": 898,
  "p_beratung_counterparts": 363,
  "p_beratung_ms": 31,
  "p_agard_units": 1892,
  "p_agard_karman": 1193,
  "p_agard_counterparts": 476,
  "p_agard_ms": 40,
  "check_aachen_year": 1914,
  "check_pasadena_year": 1932,
  "check_beratung_year": 1942,
  "check_agard_year": 1948,
  "y1928_units": 262,
  "y1928_tag1": "Aerodynamische Theorie",
  "y1928_tag1_n": 145,
  "y1928_tag2": "publication request",
  "y1928_tag2_n": 95,
  "y1928_tag3": "Patente",
  "y1928_tag3_n": 29,
  "y1940_units": 821,
  "y1940_tag1": "Windturbinen",
  "y1940_tag1_n": 274,
  "y1940_tag2": "Tacoma-Narrows-Brücke",
  "y1940_tag2_n": 162,
  "y1940_tag3": "Aerodynamik",
  "y1940_tag3_n": 48,
  "built_date": "28. September 2026",
  "n_docs_split": 415,
  "max_doc_pages": 70
 }
}