{
  "artifacts": [
    {
      "bytes": 751,
      "id": "README.md",
      "kind": "source",
      "license": "unspecified",
      "path": "README.md",
      "sha256": "c1cbae437908056e90d44a0745faa9e9a579ffba2bbfee11a54b93b192a6c04e",
      "source_path": "README.md"
    },
    {
      "bytes": 358,
      "id": "reproduce.py",
      "kind": "source",
      "license": "unspecified",
      "path": "reproduce.py",
      "sha256": "809cd09c33d8bad1a4762a36bebf495f8b8fb28d3ca25f2847faab4740d3ae18",
      "source_path": "reproduce.py"
    },
    {
      "bytes": 3701,
      "id": "src/experiment.py",
      "kind": "source",
      "license": "unspecified",
      "path": "src/experiment.py",
      "sha256": "e6fd7a7f94eeac2447c846b0154b763bbd457457983e9b460d46565fc947c2c6",
      "source_path": "experiment.py"
    },
    {
      "bytes": 724,
      "id": "src/generate.py",
      "kind": "source",
      "license": "unspecified",
      "path": "src/generate.py",
      "sha256": "c2cfcbbe3da7b7ebaccb357f9c2dc8a101b1a110408403f8cc8af5955c189123",
      "source_path": "generate.py"
    },
    {
      "bytes": 3049,
      "id": "src/generate_figures.py",
      "kind": "source",
      "license": "unspecified",
      "path": "src/generate_figures.py",
      "sha256": "b1c21d94057ad0e8c8482b352957a0bff66ff39f5aacc1a0ab39de1bf63e472e",
      "source_path": "generate_figures.py"
    },
    {
      "bytes": 987,
      "id": "tests/test_experiment.py",
      "kind": "source",
      "license": "unspecified",
      "path": "tests/test_experiment.py",
      "sha256": "40e9425ac7c32724034756555edff2b6ce2ba1307c55efba1a9b89de2dcce6ab",
      "source_path": "test_experiment.py"
    },
    {
      "bytes": 619,
      "data_type": "synthetic",
      "id": "data/synthetic.csv",
      "kind": "dataset",
      "license": "unspecified",
      "path": "data/synthetic.csv",
      "sha256": "3d584971e07b96743544a4d9fbbcfab62fa8a4f400f4d6f6d791e6d521d0a013",
      "source_path": "synthetic.csv"
    },
    {
      "bytes": 766,
      "data_type": "synthetic",
      "id": "data/results.json",
      "kind": "source",
      "license": "unspecified",
      "path": "data/results.json",
      "sha256": "adcdd1b28630a25c86923ab39308348a2e4573ba7382f7f19f0bd91fdf44b427",
      "source_path": "results.json"
    },
    {
      "bytes": 1399,
      "data_type": "synthetic",
      "id": "figures/gnss-dop-geometry.svg",
      "kind": "image",
      "license": "unspecified",
      "path": "figures/gnss-dop-geometry.svg",
      "sha256": "67346dc8d63592c9b3ece2f15a78649dbff45387128f560a377bbeca9b149c55",
      "source_path": "gnss-dop-geometry.svg"
    },
    {
      "bytes": 994,
      "data_type": "synthetic",
      "id": "figures/gnss-dual-frequency.svg",
      "kind": "image",
      "license": "unspecified",
      "path": "figures/gnss-dual-frequency.svg",
      "sha256": "5779a86b59f9b5b0b639c145cba381336408d3f6e91d09cac11b9a303a943aff",
      "source_path": "gnss-dual-frequency.svg"
    },
    {
      "bytes": 990,
      "data_type": "synthetic",
      "id": "figures/gnss-pseudorange.svg",
      "kind": "image",
      "license": "unspecified",
      "path": "figures/gnss-pseudorange.svg",
      "sha256": "5d7cf55207bf31b8e86aa807ee956730b770a6d37f9fd7b713afcd2d47d21c33",
      "source_path": "gnss-pseudorange.svg"
    }
  ],
  "environment": {
    "hardware": "CPU only; no physical receiver",
    "python": "3.10+ standard library"
  },
  "experiments": {
    "gnss": {
      "cases": [
        {
          "expected_metrics": {
            "hdop": 1.731980002947755,
            "residual_rms_m": 1.862645149230957e-09
          },
          "failure_condition": "Synthetic educational case, not receiver accuracy",
          "id": "single_frequency",
          "parameters": {}
        },
        {
          "expected_metrics": {
            "hdop": 149548.3842350424,
            "residual_rms_m": 0.0
          },
          "failure_condition": "Intentionally poor synthetic geometry; not receiver accuracy",
          "id": "dop_geometry",
          "parameters": {}
        },
        {
          "expected_metrics": {
            "iono_free_m": 0.0,
            "iono_l1_m": 1.9484693701439366,
            "iono_l2_m": 3.209020804328722
          },
          "failure_condition": "First-order ionosphere-only coefficient demonstration; not a full receiver model",
          "id": "dual_frequency",
          "parameters": {
            "frequencies_hz": [
              1575420000.0,
              1227600000.0
            ]
          }
        },
        {
          "expected_metrics": {
            "common_error_removed_m": 1.25,
            "differenced_error_m": 0.08
          },
          "failure_condition": "Idealized common-error subtraction; not RTK ambiguity resolution",
          "id": "rtk_baseline",
          "parameters": {}
        }
      ],
      "comparison": {
        "atol": 2e-07,
        "rtol": 1e-08
      },
      "content_id": "sensor-gnss",
      "data_type": "synthetic",
      "fixed_parameters": {
        "coordinates": "Cartesian metres"
      },
      "metrics": {
        "differenced_error_m": "m",
        "hdop": "dimensionless",
        "iono_delay_m": "m",
        "residual_rms_m": "m"
      },
      "parameters": {},
      "seed": {
        "policy": "Fixed satellite/receiver values",
        "value": null
      },
      "source_ids": [
        "src/experiment.py"
      ],
      "technology_unit": "gnss-least-squares"
    }
  },
  "id": "duskcoil-gnss-lab",
  "license": "unspecified",
  "limitations": [
    "Synthetic only; no NMEA, measured data, ambiguity fixing, geodetic datum or hardware."
  ],
  "schema_version": 1,
  "version": "1.0.0"
}
