{
  "$id": "https://brw.quartzlibrary.com/download/brw-techniques.schema.json",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "Brain Read Write techniques",
  "description": "The techniques on the Brain Read Write site, as of one state of its\nresearch graph.",
  "type": "object",
  "properties": {
    "$schema": {
      "description": "This document's JSON Schema.",
      "type": "string"
    },
    "created": {
      "description": "When the newest exported graph node was created (RFC 3339).",
      "type": [
        "string",
        "null"
      ]
    },
    "graph_version": {
      "description": "Fingerprint of the graph state the dataset was built from (the site's\n`api/state.json` version).",
      "type": "string"
    },
    "homepage": {
      "type": [
        "string",
        "null"
      ]
    },
    "license": {
      "description": "The licence the dataset is published under; not chosen yet.",
      "type": [
        "string",
        "null"
      ]
    },
    "site_node": {
      "description": "Id of the graph node holding the site table.",
      "type": "string"
    },
    "techniques": {
      "description": "One per technique page on the site, in slug order.",
      "type": "array",
      "items": {
        "$ref": "#/$defs/TechniqueEntry"
      }
    },
    "title": {
      "type": "string"
    },
    "version": {
      "description": "The date of the newest exported graph node, as `YYYY.M.D`.",
      "type": [
        "string",
        "null"
      ]
    }
  },
  "required": [
    "$schema",
    "title",
    "graph_version",
    "site_node",
    "techniques"
  ],
  "$defs": {
    "Cost": {
      "description": "The technique's sourced prices, each in the currency it was published in\n(never converted).",
      "oneOf": [
        {
          "type": "object",
          "properties": {
            "items": {
              "type": "array",
              "items": {
                "$ref": "#/$defs/CostItemClaim"
              }
            },
            "state": {
              "type": "string",
              "const": "known"
            }
          },
          "required": [
            "state",
            "items"
          ]
        },
        {
          "type": "object",
          "properties": {
            "items": {
              "type": "array",
              "items": {
                "$ref": "#/$defs/CostItemClaim"
              }
            },
            "state": {
              "type": "string",
              "const": "partial"
            }
          },
          "required": [
            "state",
            "items"
          ]
        },
        {
          "type": "object",
          "properties": {
            "state": {
              "type": "string",
              "const": "unknown"
            }
          },
          "$ref": "#/$defs/UnknowableClaim",
          "required": [
            "state"
          ]
        },
        {
          "type": "object",
          "properties": {
            "state": {
              "type": "string",
              "const": "incomplete"
            }
          },
          "required": [
            "state"
          ]
        }
      ]
    },
    "CostItem": {
      "description": "A sourced price, in the currency it was published in.\n\nPrices are never converted: an exchange rate we cannot trace to a source,\non a date the listing does not carry, is exactly the kind of unsourced\nnumber this dataset avoids.",
      "type": "object",
      "properties": {
        "amount_max": {
          "type": [
            "number",
            "null"
          ],
          "format": "double"
        },
        "amount_min": {
          "type": [
            "number",
            "null"
          ],
          "format": "double"
        },
        "currency": {
          "description": "ISO 4217. May be inferred when it follows unambiguously from the\npublisher (a US university's \"$\" rate sheet is USD, a Hong Kong\nhospital's price list is HKD); the label then says what the inference\nrests on. Absent only when a symbol such as \"$\" could belong to more\nthan one currency; the label then records the symbol.",
          "type": [
            "string",
            "null"
          ]
        },
        "kind": {
          "description": "Absent when the source prices something without saying what kind of\npurchase it is (a store listing with only a product name and price).",
          "anyOf": [
            {
              "$ref": "#/$defs/CostKind"
            },
            {
              "type": "null"
            }
          ]
        },
        "label": {
          "type": "string"
        },
        "year": {
          "type": [
            "integer",
            "null"
          ],
          "format": "uint32",
          "minimum": 0
        }
      },
      "additionalProperties": false,
      "required": [
        "label"
      ]
    },
    "CostItemClaim": {
      "description": "A value, the graph node whose claim it is (the site's `/node/<id>` page\nshows its evidence), and the archived sources it derives from.",
      "type": "object",
      "properties": {
        "node": {
          "type": "string"
        },
        "sources": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/Source"
          }
        },
        "value": {
          "$ref": "#/$defs/CostItem"
        }
      },
      "required": [
        "value",
        "node",
        "sources"
      ]
    },
    "CostKind": {
      "type": "string",
      "enum": [
        "instrument",
        "build",
        "procedure",
        "session",
        "consumable",
        "service"
      ]
    },
    "Destructiveness": {
      "type": "object",
      "properties": {
        "kind": {
          "$ref": "#/$defs/DestructivenessKind"
        },
        "note": {
          "description": "What is damaged and how much, or why nothing is.",
          "type": "string"
        }
      },
      "additionalProperties": false,
      "required": [
        "kind"
      ]
    },
    "DestructivenessClaim": {
      "description": "A value, the graph node whose claim it is (the site's `/node/<id>` page\nshows its evidence), and the archived sources it derives from.",
      "type": "object",
      "properties": {
        "node": {
          "type": "string"
        },
        "sources": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/Source"
          }
        },
        "value": {
          "$ref": "#/$defs/Destructiveness"
        }
      },
      "required": [
        "value",
        "node",
        "sources"
      ]
    },
    "DestructivenessEntry": {
      "description": "One field of a technique.",
      "oneOf": [
        {
          "description": "Settled on the evidence gathered so far.",
          "type": "object",
          "properties": {
            "state": {
              "type": "string",
              "const": "known"
            }
          },
          "$ref": "#/$defs/DestructivenessClaim",
          "required": [
            "state"
          ]
        },
        {
          "description": "The best current value while evidence gathering is unfinished.",
          "type": "object",
          "properties": {
            "state": {
              "type": "string",
              "const": "partial"
            }
          },
          "$ref": "#/$defs/DestructivenessClaim",
          "required": [
            "state"
          ]
        },
        {
          "description": "Established that there is no value to be had; the value gives the\nreason.",
          "type": "object",
          "properties": {
            "state": {
              "type": "string",
              "const": "unknown"
            }
          },
          "$ref": "#/$defs/UnknowableClaim",
          "required": [
            "state"
          ]
        },
        {
          "description": "Nothing synthesized yet.",
          "type": "object",
          "properties": {
            "state": {
              "type": "string",
              "const": "incomplete"
            }
          },
          "required": [
            "state"
          ]
        }
      ]
    },
    "DestructivenessKind": {
      "oneOf": [
        {
          "description": "Nothing in the tissue under study is penetrated, lesioned, heated or\nremoved to apply the technique: it works from outside that tissue, or\nwith an agent that leaves it intact (an injected tracer or contrast\nagent, a venous cannula), within accepted exposure limits. This is\nabout the procedure, not a guarantee that long-term harm has been\nruled out.",
          "type": "string",
          "const": "non_destructive"
        },
        {
          "description": "Normal use damages tissue incidentally and locally (an electrode\ntrack, a craniotomy) without that being the point.",
          "type": "string",
          "const": "minimally_destructive"
        },
        {
          "description": "The technique lesions or ablates tissue by design.",
          "type": "string",
          "const": "destructive"
        },
        {
          "description": "The tissue must be killed, fixed or removed to apply the technique.",
          "type": "string",
          "const": "terminal"
        }
      ]
    },
    "Endpoint": {
      "description": "The quantity a resolution or field-of-view figure is the measure of.\nSpatial read: `sampling` (voxel, pitch), `point_spread` (FWHM),\n`two_source_separation`, `localisation_error`, `single_unit`.\nSpatial write: `focal_extent` (FWHM / -6 dB), `suprathreshold_extent`,\n`localisation_error`.\nTemporal read: `sample_interval`, `recoverable_timing` (finest\ndistinguishable event difference), `response_latency`,\n`acquisition_duration`.\nTemporal write: `pulse_width`, `inter_pulse_interval`, `onset_latency`,\n`effect_duration`, `session_duration`.\nField of view: `acquired_volume`, `sensing_envelope`,\n`suprathreshold_volume`, `treated_volume`, `reachable_envelope`.",
      "type": "string",
      "enum": [
        "sampling",
        "point_spread",
        "two_source_separation",
        "localisation_error",
        "single_unit",
        "focal_extent",
        "suprathreshold_extent",
        "sample_interval",
        "recoverable_timing",
        "response_latency",
        "acquisition_duration",
        "pulse_width",
        "inter_pulse_interval",
        "onset_latency",
        "effect_duration",
        "session_duration",
        "acquired_volume",
        "sensing_envelope",
        "suprathreshold_volume",
        "treated_volume",
        "reachable_envelope"
      ]
    },
    "Group": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string"
        },
        "name": {
          "description": "As the site shows it.",
          "type": "string"
        }
      },
      "required": [
        "id",
        "name"
      ]
    },
    "Measurand": {
      "description": "What a technique measures, as short category labels plus a\nsentence of qualification (e.g. that a signal is an indirect proxy).",
      "type": "object",
      "properties": {
        "measurands": {
          "description": "One label per distinct physical or estimated quantity, e.g.\n\"action potentials\", \"BOLD signal\".",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "note": {
          "type": "string"
        }
      },
      "additionalProperties": false,
      "required": [
        "measurands"
      ]
    },
    "MeasurandClaim": {
      "description": "A value, the graph node whose claim it is (the site's `/node/<id>` page\nshows its evidence), and the archived sources it derives from.",
      "type": "object",
      "properties": {
        "node": {
          "type": "string"
        },
        "sources": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/Source"
          }
        },
        "value": {
          "$ref": "#/$defs/Measurand"
        }
      },
      "required": [
        "value",
        "node",
        "sources"
      ]
    },
    "MeasurandEntry": {
      "description": "One field of a technique.",
      "oneOf": [
        {
          "description": "Settled on the evidence gathered so far.",
          "type": "object",
          "properties": {
            "state": {
              "type": "string",
              "const": "known"
            }
          },
          "$ref": "#/$defs/MeasurandClaim",
          "required": [
            "state"
          ]
        },
        {
          "description": "The best current value while evidence gathering is unfinished.",
          "type": "object",
          "properties": {
            "state": {
              "type": "string",
              "const": "partial"
            }
          },
          "$ref": "#/$defs/MeasurandClaim",
          "required": [
            "state"
          ]
        },
        {
          "description": "Established that there is no value to be had; the value gives the\nreason.",
          "type": "object",
          "properties": {
            "state": {
              "type": "string",
              "const": "unknown"
            }
          },
          "$ref": "#/$defs/UnknowableClaim",
          "required": [
            "state"
          ]
        },
        {
          "description": "Nothing synthesized yet.",
          "type": "object",
          "properties": {
            "state": {
              "type": "string",
              "const": "incomplete"
            }
          },
          "required": [
            "state"
          ]
        }
      ]
    },
    "Mode": {
      "type": "string",
      "enum": [
        "read",
        "write",
        "both"
      ]
    },
    "OperatingPoint": {
      "description": "One regime of a quantity, in the same unit as its `QuantRange`.",
      "type": "object",
      "properties": {
        "endpoint": {
          "description": "What quantity this point's figure is, when it differs from the\nheadline's or the headline has none.",
          "anyOf": [
            {
              "$ref": "#/$defs/Endpoint"
            },
            {
              "type": "null"
            }
          ]
        },
        "label": {
          "description": "The condition, e.g. \"7 T\" or \"Neuropixels 2.0\".",
          "type": "string"
        },
        "max": {
          "type": [
            "number",
            "null"
          ],
          "format": "double"
        },
        "min": {
          "type": [
            "number",
            "null"
          ],
          "format": "double"
        },
        "note": {
          "type": "string"
        }
      },
      "additionalProperties": false,
      "required": [
        "label"
      ]
    },
    "Preparation": {
      "description": "What has to be done to the subject before the technique can be applied.\nAn empty `steps` list means the described procedure needs nothing beyond\nordinary participation (screening questionnaires and sensor placement\nincluded).",
      "type": "object",
      "properties": {
        "note": {
          "type": "string"
        },
        "steps": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/PreparationStep"
          }
        }
      },
      "additionalProperties": false,
      "required": [
        "steps"
      ]
    },
    "PreparationClaim": {
      "description": "A value, the graph node whose claim it is (the site's `/node/<id>` page\nshows its evidence), and the archived sources it derives from.",
      "type": "object",
      "properties": {
        "node": {
          "type": "string"
        },
        "sources": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/Source"
          }
        },
        "value": {
          "$ref": "#/$defs/Preparation"
        }
      },
      "required": [
        "value",
        "node",
        "sources"
      ]
    },
    "PreparationEntry": {
      "description": "One field of a technique.",
      "oneOf": [
        {
          "description": "Settled on the evidence gathered so far.",
          "type": "object",
          "properties": {
            "state": {
              "type": "string",
              "const": "known"
            }
          },
          "$ref": "#/$defs/PreparationClaim",
          "required": [
            "state"
          ]
        },
        {
          "description": "The best current value while evidence gathering is unfinished.",
          "type": "object",
          "properties": {
            "state": {
              "type": "string",
              "const": "partial"
            }
          },
          "$ref": "#/$defs/PreparationClaim",
          "required": [
            "state"
          ]
        },
        {
          "description": "Established that there is no value to be had; the value gives the\nreason.",
          "type": "object",
          "properties": {
            "state": {
              "type": "string",
              "const": "unknown"
            }
          },
          "$ref": "#/$defs/UnknowableClaim",
          "required": [
            "state"
          ]
        },
        {
          "description": "Nothing synthesized yet.",
          "type": "object",
          "properties": {
            "state": {
              "type": "string",
              "const": "incomplete"
            }
          },
          "required": [
            "state"
          ]
        }
      ]
    },
    "PreparationKind": {
      "oneOf": [
        {
          "type": "string",
          "enum": [
            "surgery",
            "germline_genetic_engineering",
            "anesthesia",
            "other"
          ]
        },
        {
          "description": "Somatic genetic modification, such as a viral vector delivering an\nindicator or opsin.",
          "type": "string",
          "const": "genetic_engineering"
        },
        {
          "description": "An injected or ingested agent: contrast, radiotracer, dye.",
          "type": "string",
          "const": "contrast_agent"
        }
      ]
    },
    "PreparationStep": {
      "type": "object",
      "properties": {
        "kind": {
          "$ref": "#/$defs/PreparationKind"
        },
        "note": {
          "description": "The specific procedure, e.g. \"craniotomy and chronic probe implant\".",
          "type": "string"
        }
      },
      "additionalProperties": false,
      "required": [
        "kind",
        "note"
      ]
    },
    "Prose": {
      "description": "Short free text, at most `Prose::MAX_WORDS` words.",
      "type": "object",
      "properties": {
        "text": {
          "type": "string"
        }
      },
      "additionalProperties": false,
      "required": [
        "text"
      ]
    },
    "ProseClaim": {
      "description": "A value, the graph node whose claim it is (the site's `/node/<id>` page\nshows its evidence), and the archived sources it derives from.",
      "type": "object",
      "properties": {
        "node": {
          "type": "string"
        },
        "sources": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/Source"
          }
        },
        "value": {
          "$ref": "#/$defs/Prose"
        }
      },
      "required": [
        "value",
        "node",
        "sources"
      ]
    },
    "ProseEntry": {
      "description": "One field of a technique.",
      "oneOf": [
        {
          "description": "Settled on the evidence gathered so far.",
          "type": "object",
          "properties": {
            "state": {
              "type": "string",
              "const": "known"
            }
          },
          "$ref": "#/$defs/ProseClaim",
          "required": [
            "state"
          ]
        },
        {
          "description": "The best current value while evidence gathering is unfinished.",
          "type": "object",
          "properties": {
            "state": {
              "type": "string",
              "const": "partial"
            }
          },
          "$ref": "#/$defs/ProseClaim",
          "required": [
            "state"
          ]
        },
        {
          "description": "Established that there is no value to be had; the value gives the\nreason.",
          "type": "object",
          "properties": {
            "state": {
              "type": "string",
              "const": "unknown"
            }
          },
          "$ref": "#/$defs/UnknowableClaim",
          "required": [
            "state"
          ]
        },
        {
          "description": "Nothing synthesized yet.",
          "type": "object",
          "properties": {
            "state": {
              "type": "string",
              "const": "incomplete"
            }
          },
          "required": [
            "state"
          ]
        }
      ]
    },
    "QuantRange": {
      "description": "A practical range for a quantity, extracted from prose claims.",
      "type": "object",
      "properties": {
        "endpoint": {
          "description": "What quantity the headline `min`/`max` is, when the inputs say.",
          "anyOf": [
            {
              "$ref": "#/$defs/Endpoint"
            },
            {
              "type": "null"
            }
          ]
        },
        "max": {
          "type": [
            "number",
            "null"
          ],
          "format": "double"
        },
        "min": {
          "type": [
            "number",
            "null"
          ],
          "format": "double"
        },
        "note": {
          "description": "What the numbers refer to and any caveat, in the input's own terms.",
          "type": "string"
        },
        "operating_points": {
          "description": "Figures under named conditions (a field strength, a probe, a species)\nor at other endpoints, in the headline's unit. The headline `min`/`max`\nis the finest supported figure at the column's canonical endpoint (or\nthe best available, honestly tagged, endpoint when no canonical figure\nis supported); other figures stay here with their own endpoint tag and\nneed not fall inside the headline range.",
          "type": "array",
          "items": {
            "$ref": "#/$defs/OperatingPoint"
          }
        },
        "unit": {
          "$ref": "#/$defs/Unit"
        }
      },
      "additionalProperties": false,
      "required": [
        "unit",
        "note"
      ]
    },
    "QuantRangeClaim": {
      "description": "A value, the graph node whose claim it is (the site's `/node/<id>` page\nshows its evidence), and the archived sources it derives from.",
      "type": "object",
      "properties": {
        "node": {
          "type": "string"
        },
        "sources": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/Source"
          }
        },
        "value": {
          "$ref": "#/$defs/QuantRange"
        }
      },
      "required": [
        "value",
        "node",
        "sources"
      ]
    },
    "QuantRangeEntry": {
      "description": "One field of a technique.",
      "oneOf": [
        {
          "description": "Settled on the evidence gathered so far.",
          "type": "object",
          "properties": {
            "state": {
              "type": "string",
              "const": "known"
            }
          },
          "$ref": "#/$defs/QuantRangeClaim",
          "required": [
            "state"
          ]
        },
        {
          "description": "The best current value while evidence gathering is unfinished.",
          "type": "object",
          "properties": {
            "state": {
              "type": "string",
              "const": "partial"
            }
          },
          "$ref": "#/$defs/QuantRangeClaim",
          "required": [
            "state"
          ]
        },
        {
          "description": "Established that there is no value to be had; the value gives the\nreason.",
          "type": "object",
          "properties": {
            "state": {
              "type": "string",
              "const": "unknown"
            }
          },
          "$ref": "#/$defs/UnknowableClaim",
          "required": [
            "state"
          ]
        },
        {
          "description": "Nothing synthesized yet.",
          "type": "object",
          "properties": {
            "state": {
              "type": "string",
              "const": "incomplete"
            }
          },
          "required": [
            "state"
          ]
        }
      ]
    },
    "Source": {
      "type": "object",
      "properties": {
        "id": {
          "description": "The URL, DOI or PubMed id; for knowledge sources, the model or author\nand a content hash prefix.",
          "type": "string"
        },
        "kind": {
          "$ref": "#/$defs/SourceKind"
        },
        "node": {
          "description": "Id of the archived source node.",
          "type": "string"
        },
        "url": {
          "description": "Where the source can be read, when it has a public location.",
          "type": [
            "string",
            "null"
          ]
        }
      },
      "required": [
        "node",
        "kind",
        "id"
      ]
    },
    "SourceKind": {
      "description": "How a source is identified: a URL, DOI or PubMed id, or knowledge\nelicited from an LLM, written by an agent or by a person.",
      "type": "string",
      "enum": [
        "url",
        "doi",
        "pmid",
        "llm_knowledge",
        "agent_knowledge",
        "human_knowledge"
      ]
    },
    "Stimulation": {
      "description": "What a technique applies or directly drives to intervene in brain function.\nMeasured responses belong in `Measurand`, even for a writing technique.",
      "type": "object",
      "properties": {
        "note": {
          "type": "string"
        },
        "stimuli": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      },
      "additionalProperties": false,
      "required": [
        "stimuli"
      ]
    },
    "StimulationClaim": {
      "description": "A value, the graph node whose claim it is (the site's `/node/<id>` page\nshows its evidence), and the archived sources it derives from.",
      "type": "object",
      "properties": {
        "node": {
          "type": "string"
        },
        "sources": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/Source"
          }
        },
        "value": {
          "$ref": "#/$defs/Stimulation"
        }
      },
      "required": [
        "value",
        "node",
        "sources"
      ]
    },
    "StimulationEntry": {
      "description": "One field of a technique.",
      "oneOf": [
        {
          "description": "Settled on the evidence gathered so far.",
          "type": "object",
          "properties": {
            "state": {
              "type": "string",
              "const": "known"
            }
          },
          "$ref": "#/$defs/StimulationClaim",
          "required": [
            "state"
          ]
        },
        {
          "description": "The best current value while evidence gathering is unfinished.",
          "type": "object",
          "properties": {
            "state": {
              "type": "string",
              "const": "partial"
            }
          },
          "$ref": "#/$defs/StimulationClaim",
          "required": [
            "state"
          ]
        },
        {
          "description": "Established that there is no value to be had; the value gives the\nreason.",
          "type": "object",
          "properties": {
            "state": {
              "type": "string",
              "const": "unknown"
            }
          },
          "$ref": "#/$defs/UnknowableClaim",
          "required": [
            "state"
          ]
        },
        {
          "description": "Nothing synthesized yet.",
          "type": "object",
          "properties": {
            "state": {
              "type": "string",
              "const": "incomplete"
            }
          },
          "required": [
            "state"
          ]
        }
      ]
    },
    "TechniqueEntry": {
      "description": "A technique: its identity on the site, then the dataset fields. Every\nfield has a `state`: `known` (settled on the evidence gathered),\n`partial` (best current value while evidence gathering is unfinished),\n`unknown` (established that there is no value to be had, with the\nreason) or `incomplete` (nothing synthesized yet).",
      "type": "object",
      "properties": {
        "core": {
          "description": "Curated: among the techniques most applicable in humans, which the\nsite lists first.",
          "type": "boolean"
        },
        "cost": {
          "$ref": "#/$defs/Cost"
        },
        "description": {
          "description": "The physical principle and what is measured or changed (at most 300\nwords).",
          "$ref": "#/$defs/ProseEntry"
        },
        "destructiveness": {
          "$ref": "#/$defs/DestructivenessEntry"
        },
        "field_of_view_m3": {
          "description": "Field of view, in cubic metres: the largest volume imaged, sampled or\nreached at once.",
          "$ref": "#/$defs/QuantRangeEntry"
        },
        "field_of_view_neurons": {
          "description": "Field of view as the number of neurons covered at once.",
          "$ref": "#/$defs/QuantRangeEntry"
        },
        "group": {
          "$ref": "#/$defs/Group"
        },
        "measurand": {
          "$ref": "#/$defs/MeasurandEntry"
        },
        "mode": {
          "description": "Whether the technique reads (measures) brain activity or structure,\nwrites (stimulates, modulates or lesions), or both.",
          "$ref": "#/$defs/Mode"
        },
        "name": {
          "type": "string"
        },
        "preparation": {
          "$ref": "#/$defs/PreparationEntry"
        },
        "row_node": {
          "description": "Id of the graph node assembling the technique's row; null when there\nis none yet (every field incomplete).",
          "type": [
            "string",
            "null"
          ]
        },
        "slug": {
          "description": "Stable identifier, as in the page URL `/techniques/<slug>`.",
          "type": "string"
        },
        "spatial_resolution_m": {
          "description": "Practical spatial resolution, in metres: the finest separation\nresolved (read) or affected independently (write).",
          "$ref": "#/$defs/QuantRangeEntry"
        },
        "stimulation": {
          "$ref": "#/$defs/StimulationEntry"
        },
        "summary": {
          "description": "Plain-language summary of the technique and what it reads and writes.",
          "anyOf": [
            {
              "$ref": "#/$defs/stringClaim"
            },
            {
              "type": "null"
            }
          ]
        },
        "temporal_resolution_s": {
          "description": "Practical temporal resolution, in seconds: the finest time difference\nresolved or affected independently.",
          "$ref": "#/$defs/QuantRangeEntry"
        },
        "theoretical": {
          "$ref": "#/$defs/Theoretical"
        }
      },
      "required": [
        "slug",
        "name",
        "group",
        "mode",
        "core",
        "description",
        "spatial_resolution_m",
        "temporal_resolution_s",
        "field_of_view_m3",
        "field_of_view_neurons",
        "measurand",
        "stimulation",
        "destructiveness",
        "preparation",
        "cost",
        "theoretical"
      ]
    },
    "Theoretical": {
      "description": "What the technique could reach in principle, in the same shape as the\npractical figures.",
      "type": "object",
      "properties": {
        "description": {
          "$ref": "#/$defs/ProseEntry"
        },
        "field_of_view_m3": {
          "$ref": "#/$defs/QuantRangeEntry"
        },
        "field_of_view_neurons": {
          "$ref": "#/$defs/QuantRangeEntry"
        },
        "spatial_resolution_m": {
          "$ref": "#/$defs/QuantRangeEntry"
        },
        "temporal_resolution_s": {
          "$ref": "#/$defs/QuantRangeEntry"
        }
      },
      "required": [
        "description",
        "spatial_resolution_m",
        "temporal_resolution_s",
        "field_of_view_m3",
        "field_of_view_neurons"
      ]
    },
    "Unit": {
      "oneOf": [
        {
          "type": "string",
          "enum": [
            "m",
            "s",
            "m3",
            "neuron"
          ]
        },
        {
          "description": "A pure number, such as a ratio.",
          "type": "string",
          "const": "1"
        }
      ]
    },
    "Unknowable": {
      "description": "Why a field has no value: the claim of the node behind a\n`Field::Unknown`, established from its inputs like any other claim (the\ntechnique is non-destructive so has no Butcher's number; no public price\nexists).",
      "type": "object",
      "properties": {
        "reason": {
          "type": "string"
        }
      },
      "additionalProperties": false,
      "required": [
        "reason"
      ]
    },
    "UnknowableClaim": {
      "description": "A value, the graph node whose claim it is (the site's `/node/<id>` page\nshows its evidence), and the archived sources it derives from.",
      "type": "object",
      "properties": {
        "node": {
          "type": "string"
        },
        "sources": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/Source"
          }
        },
        "value": {
          "$ref": "#/$defs/Unknowable"
        }
      },
      "required": [
        "value",
        "node",
        "sources"
      ]
    },
    "stringClaim": {
      "description": "A value, the graph node whose claim it is (the site's `/node/<id>` page\nshows its evidence), and the archived sources it derives from.",
      "type": "object",
      "properties": {
        "node": {
          "type": "string"
        },
        "sources": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/Source"
          }
        },
        "value": {
          "type": "string"
        }
      },
      "required": [
        "value",
        "node",
        "sources"
      ]
    }
  }
}
