{
    "$schema": "https://json-schema.org/draft/2020-12/schema",
    "$id": "https://download.lammps.org/json/molecule-schema.json",
    "title": "JSON schema for LAMMPS 'molecule' files and objects",
    "description": "Version 0.1; last updated 2025-06-12",
    "type": "object",
    "properties": {
        "application": {
            "type": "string",
            "const": "LAMMPS"
        },
        "format": {
            "type": "string",
            "const": "molecule"
        },
        "revision": {
            "type": "integer",
            "minimum": 1,
            "maximum": 1
        },
        "title": {"type": "string"},
        "schema": {"type": "string"},
        "units": {
            "enum": ["lj", "real", "metal", "si", "cgs", "electron", "micro", "nano" ]
        },
        "com": {"type": "array",
                "items": { "type": "number"},
                "minItems": 3,
                "maxItems": 3
        },
        "masstotal": {"type": "number"},
        "inertia": {"type": "array",
                    "items": { "type": "number"},
                    "minItems": 6,
                    "maxItems": 6
                   },
        "coords": {
            "type": "object",
            "properties": {
                "format": {
                    "type": "array",
                    "const": ["atom-id", "x", "y", "z"]
                },
                "data": {
                    "type": "array",
                    "items": {
                        "type": "array",
                        "prefixItems": [
                            {"type": "integer"},
                            {"type": "number"},
                            {"type": "number"},
                            {"type": "number"}
                        ],
                        "items": false
                    }
                }
            },
            "required": ["format", "data"]
        },
        "types": {
            "type": "object",
            "properties": {
                "format": {
                    "type": "array",
                    "const": ["atom-id", "type"]
                },
                "data": {
                    "type": "array",
                    "items": {
                        "type": "array",
                        "prefixItems": [
                            {"type": "number"},
                            {"type": ["number", "string"]}
                        ],
                        "items": false
                    }
                }
            },
            "required": ["format", "data"]
        },
        "molecules": {
            "type": "object",
            "properties": {
                "format": {
                    "type": "array",
                    "const": ["atom-id", "molecule-id"]
                },
                "data": {
                    "type": "array",
                    "items": {
                        "type": "array",
                        "items": {
                            "type": "integer"
                        },
                        "minItems": 2,
                        "maxItems": 2
                    }
                }
            },
            "required": ["format", "data"]
        },
        "fragments": {
            "type": "object",
            "properties": {
                "format": {
                    "type": "array",
                    "const": ["fragment-id", "atom-id-list"]
                },
                "data": {
                    "type": "array",
                    "items": {
                        "type": ["string", "array"],
                        "minItems": 2,
                        "maxItems": 2
                    }
                }
            },
            "required": ["format", "data"]
        },
        "charges": {
            "type": "object",
            "properties": {
                "format": {
                    "type": "array",
                    "const": ["atom-id", "charge"]
                },
                "data": {
                    "type": "array",
                    "items": {
                        "type": "array",
                        "prefixItems": [
                            {"type": "integer"},
                            {"type": "number"}
                        ],
                        "items": false
                    }
                }
            },
            "required": ["format", "data"]
        },
        "dipoles": {
            "type": "object",
            "properties": {
                "format": {
                    "type": "array",
                    "const": ["atom-id", "mux", "muy", "muz"]
                },
                "data": {
                    "type": "array",
                    "items": {
                        "type": "array",
                        "prefixItems": [
                            {"type": "integer"},
                            {"type": "number"},
                            {"type": "number"},
                            {"type": "number"}
                        ],
                        "items": false
                    }
                }
            },
            "required": ["format", "data"]
        },
        "diameters": {
            "type": "object",
            "properties": {
                "format": {
                    "type": "array",
                    "const": ["atom-id", "diameter"]
                },
                "data": {
                    "type": "array",
                    "items": {
                        "type": "array",
                        "prefixItems": [
                            {"type": "integer"},
                            {"type": "number"}
                        ],
                        "items": false
                    }
                }
            },
            "required": ["format", "data"]
        },
        "masses": {
            "type": "object",
            "properties": {
                "format": {
                    "type": "array",
                    "const": ["atom-id", "mass"]
                },
                "data": {
                    "type": "array",
                    "items": {
                        "type": "array",
                        "prefixItems": [
                            {"type": "integer"},
                            {"type": "number"}
                        ],
                        "items": false
                    }
                }
            },
            "required": ["format", "data"]
        },
        "bonds": {
            "type": "object",
            "properties": {
                "format": {
                    "type": "array",
                    "const": ["bond-type", "atom1", "atom2"]
                },
                "data": {
                    "type": "array",
                    "items": {
                        "type": "array",
                        "prefixItems": [
                            {"type": ["integer", "string"]},
                            {"type": "integer"},
                            {"type": "integer"}
                        ],
                        "items": false
                    }
                }
            },
            "required": ["format", "data"]
        },
        "angles": {
            "type": "object",
            "properties": {
                "format": {
                    "type": "array",
                    "const": ["angle-type", "atom1", "atom2", "atom3"]
                },
                "data": {
                    "type": "array",
                    "items": {
                        "type": "array",
                        "prefixItems": [
                            {"type": ["integer", "string"]},
                            {"type": "integer"},
                            {"type": "integer"},
                            {"type": "integer"}
                        ],
                        "items": false
                    }
                }
            },
            "required": ["format", "data"]
        },
        "dihedrals": {
            "type": "object",
            "properties": {
                "format": {
                    "type": "array",
                    "const": ["dihedral-type", "atom1", "atom2", "atom3", "atom4"]
                },
                "data": {
                    "type": "array",
                    "items": {
                        "type": "array",
                        "prefixItems": [
                            {"type": ["integer", "string"]},
                            {"type": "integer"},
                            {"type": "integer"},
                            {"type": "integer"},
                            {"type": "integer"}
                        ],
                        "items": false
                    }
                }
            },
            "required": ["format", "data"]
        },
        "impropers": {
            "type": "object",
            "properties": {
                "format": {
                    "type": "array",
                    "const": ["improper-type", "atom1", "atom2", "atom3", "atom4"]
                },
                "data": {
                    "type": "array",
                    "items": {
                        "type": "array",
                        "prefixItems": [
                            {"type": ["integer", "string"]},
                            {"type": "integer"},
                            {"type": "integer"},
                            {"type": "integer"},
                            {"type": "integer"}
                        ],
                        "items": false
                    }
                }
            },
            "required": ["format", "data"]
        },
        "special": {
            "type": "object",
            "properties": {
                "counts" : {
                    "type": "object",
                    "properties": {
                        "format": {
                            "type": "array",
                            "const": ["atom-id", "n12", "n13", "n14"]
                        },
                        "data": {
                            "type": "array",
                            "items": {
                                "type": "array",
                                "items": {
                                    "type": "integer"
                                },
                                "minItems": 4,
                                "maxItems": 4
                            }
                        }
                    },
                    "required": ["format", "data"]
                },
                "bonds" : {
                    "type": "object",
                    "properties": {
                        "format": {
                            "type": "array",
                            "const": ["atom-id", "atom-id-list"]
                        },
                        "data": {
                            "type": "array",
                            "items": {
                                "type": ["integer", "array"],
                                "minItems": 1
                            }
                        }
                    },
                    "required": ["format", "data"]
                }
            },
            "required": ["counts", "bonds"]
        },

        "shake": {
            "type": "object",
            "properties": {
                "flags" : {
                    "type": "object",
                    "properties": {
                        "format": {
                            "type": "array",
                            "const": ["atom-id", "flag"]
                        },
                        "data": {
                            "type": "array",
                            "items": {
                                "type": "array",
                                "items": {
                                    "type": "integer"
                                },
                                "minItems": 2,
                                "maxItems": 2
                            }
                        }
                    },
                    "required": ["format", "data"]
                },
                "atoms" : {
                    "type": "object",
                    "properties": {
                        "format": {
                            "type": "array",
                            "const": ["atom-id", "atom-id-list"]
                        },
                        "data": {
                            "type": "array",
                            "items": {
                                "type": ["integer", "array"],
                                "minItems": 1
                            }
                        }
                    },
                    "required": ["format", "data"]
                },
                "types" : {
                    "type": "object",
                    "properties": {
                        "format": {
                            "type": "array",
                            "const": ["atom-id", "type-list"]
                        },
                        "data": {
                            "type": "array",
                            "items": {
                                "type": ["integer", "array"],
                                "minItems": 1
                            }
                        }
                    },
                    "required": ["format", "data"]
                }
            },
            "required": ["flags", "atoms", "types"]
        },
        "body": {
            "type": "object",
            "properties": {
                "integers": {
                    "type": "array",
                    "items": {"type": "integer"},
                    "minItems" : 1
                },
                "doubles": {
                    "type": "array",
                    "items": {"type": "number"},
                    "minItems" : 1
                }
            },
            "required": ["integers", "doubles"]
        }
    },
    "required": ["application", "format", "revision", "types"]
}
