{
 "about": {
  "generatedBy": "pipeline/sequence-toolkit/msa/msa_reference.py",
  "scriptSha256": "4adbbce159afb8497b8c2d645ac67d91af42631b50511901d7e6b57ba1ac699c",
  "recordedOn": "2026-11-07",
  "versions": {
   "python": "3.13.16",
   "mafft": "v7.505 (2022/Apr/10)",
   "mafftPackage": "Debian mafft 7.505-1 (the core, without extensions)"
  },
  "mafftLicence": "MAFFT's BSD-style licence (Kazutaka Katoh), read from the package's copyright file on 7 November 2026; an offline comparison only, never shipped, never the gate.",
  "method": "dna-msa-v1: progressive multiple alignment of DNA, a 6-mer guide-tree heuristic, UPGMA with the input-order tie rule, profile-profile global alignment under cross-pair sum-of-pairs with the quasi-natural affine approximation, no iteration, refinement or band.",
  "scoring": {
   "match": 2,
   "mismatch": -3,
   "ambiguous": 0,
   "gapOpen": 5,
   "gapExtend": 2,
   "k": 6
  },
  "caps": {
   "sequences": 50,
   "length": 20000,
   "mergeCells": 10000000,
   "jobCells": 500000000
  },
  "tolerance": "Exact: the rows (every aligned letter and gap), the merge order, each merge's optimum and cells, the column count, the natural sum-of-pairs and the column summary; every refusal exact; the rows of the same set in each order of measurements.orders exact, since the method is deterministic. MAFFT's figures are recorded, never compared.",
  "fields": {
   "rows": "the aligned rows in input order",
   "merges": "UPGMA's merges as [first, second] cluster names, each a cluster's smallest input index; the first is the profile aligned as i",
   "mergeScores": "each merge's optimum under the profile objective the engine maximises (cross pairs, quasi-natural affine gaps)",
   "sumOfPairs": "the finished alignment under the natural sum-of-pairs objective, by this script's separate scorer",
   "columnSummary": "per column: the most common symbol (a gap counted as one), null on a tie, its count, and the gaps",
   "floatingPointMerges": "present only where floating-point UPGMA merges differently"
  }
 },
 "cases": [
  {
   "id": "MSA-1",
   "what": "Two sequences, one gap of two: the set reproduces the pairwise aligner's global alignment column for column (forced, part 1)",
   "input": {
    "sequences": [
     {
      "name": "a",
      "residues": "ACGTACGTTAGCATGCAAGT"
     },
     {
      "name": "b",
      "residues": "ACGTACGTGCATGCAAGT"
     }
    ]
   },
   "expected": {
    "rows": [
     "ACGTACGTTAGCATGCAAGT",
     "ACGTACGT--GCATGCAAGT"
    ],
    "merges": [
     [
      0,
      1
     ]
    ],
    "mergeScores": [
     29
    ],
    "mergeCells": [
     360
    ],
    "columns": 20,
    "sumOfPairs": 29,
    "columnSummary": [
     {
      "top": "A",
      "count": 2,
      "gaps": 0
     },
     {
      "top": "C",
      "count": 2,
      "gaps": 0
     },
     {
      "top": "G",
      "count": 2,
      "gaps": 0
     },
     {
      "top": "T",
      "count": 2,
      "gaps": 0
     },
     {
      "top": "A",
      "count": 2,
      "gaps": 0
     },
     {
      "top": "C",
      "count": 2,
      "gaps": 0
     },
     {
      "top": "G",
      "count": 2,
      "gaps": 0
     },
     {
      "top": "T",
      "count": 2,
      "gaps": 0
     },
     {
      "top": null,
      "count": 1,
      "gaps": 1
     },
     {
      "top": null,
      "count": 1,
      "gaps": 1
     },
     {
      "top": "G",
      "count": 2,
      "gaps": 0
     },
     {
      "top": "C",
      "count": 2,
      "gaps": 0
     },
     {
      "top": "A",
      "count": 2,
      "gaps": 0
     },
     {
      "top": "T",
      "count": 2,
      "gaps": 0
     },
     {
      "top": "G",
      "count": 2,
      "gaps": 0
     },
     {
      "top": "C",
      "count": 2,
      "gaps": 0
     },
     {
      "top": "A",
      "count": 2,
      "gaps": 0
     },
     {
      "top": "A",
      "count": 2,
      "gaps": 0
     },
     {
      "top": "G",
      "count": 2,
      "gaps": 0
     },
     {
      "top": "T",
      "count": 2,
      "gaps": 0
     }
    ]
   },
   "forced": "pairwise"
  },
  {
   "id": "MSA-1b",
   "what": "Two sequences, a deletion in a run of four T: the tie order places it as the pairwise aligner does (forced, part 1)",
   "input": {
    "sequences": [
     {
      "name": "a",
      "residues": "GACGTTTTGCAGCA"
     },
     {
      "name": "b",
      "residues": "GACGTTTGCAGCA"
     }
    ]
   },
   "expected": {
    "rows": [
     "GACGTTTTGCAGCA",
     "GACG-TTTGCAGCA"
    ],
    "merges": [
     [
      0,
      1
     ]
    ],
    "mergeScores": [
     21
    ],
    "mergeCells": [
     182
    ],
    "columns": 14,
    "sumOfPairs": 21,
    "columnSummary": [
     {
      "top": "G",
      "count": 2,
      "gaps": 0
     },
     {
      "top": "A",
      "count": 2,
      "gaps": 0
     },
     {
      "top": "C",
      "count": 2,
      "gaps": 0
     },
     {
      "top": "G",
      "count": 2,
      "gaps": 0
     },
     {
      "top": null,
      "count": 1,
      "gaps": 1
     },
     {
      "top": "T",
      "count": 2,
      "gaps": 0
     },
     {
      "top": "T",
      "count": 2,
      "gaps": 0
     },
     {
      "top": "T",
      "count": 2,
      "gaps": 0
     },
     {
      "top": "G",
      "count": 2,
      "gaps": 0
     },
     {
      "top": "C",
      "count": 2,
      "gaps": 0
     },
     {
      "top": "A",
      "count": 2,
      "gaps": 0
     },
     {
      "top": "G",
      "count": 2,
      "gaps": 0
     },
     {
      "top": "C",
      "count": 2,
      "gaps": 0
     },
     {
      "top": "A",
      "count": 2,
      "gaps": 0
     }
    ]
   },
   "forced": "pairwise"
  },
  {
   "id": "MSA-2",
   "what": "Four identical sequences: a gapless stack (forced, part 1)",
   "input": {
    "sequences": [
     {
      "name": "s1",
      "residues": "GATTACAGATTACACCGGTT"
     },
     {
      "name": "s2",
      "residues": "GATTACAGATTACACCGGTT"
     },
     {
      "name": "s3",
      "residues": "GATTACAGATTACACCGGTT"
     },
     {
      "name": "s4",
      "residues": "GATTACAGATTACACCGGTT"
     }
    ]
   },
   "expected": {
    "rows": [
     "GATTACAGATTACACCGGTT",
     "GATTACAGATTACACCGGTT",
     "GATTACAGATTACACCGGTT",
     "GATTACAGATTACACCGGTT"
    ],
    "merges": [
     [
      0,
      1
     ],
     [
      0,
      2
     ],
     [
      0,
      3
     ]
    ],
    "mergeScores": [
     40,
     80,
     120
    ],
    "mergeCells": [
     400,
     400,
     400
    ],
    "columns": 20,
    "sumOfPairs": 240,
    "columnSummary": [
     {
      "top": "G",
      "count": 4,
      "gaps": 0
     },
     {
      "top": "A",
      "count": 4,
      "gaps": 0
     },
     {
      "top": "T",
      "count": 4,
      "gaps": 0
     },
     {
      "top": "T",
      "count": 4,
      "gaps": 0
     },
     {
      "top": "A",
      "count": 4,
      "gaps": 0
     },
     {
      "top": "C",
      "count": 4,
      "gaps": 0
     },
     {
      "top": "A",
      "count": 4,
      "gaps": 0
     },
     {
      "top": "G",
      "count": 4,
      "gaps": 0
     },
     {
      "top": "A",
      "count": 4,
      "gaps": 0
     },
     {
      "top": "T",
      "count": 4,
      "gaps": 0
     },
     {
      "top": "T",
      "count": 4,
      "gaps": 0
     },
     {
      "top": "A",
      "count": 4,
      "gaps": 0
     },
     {
      "top": "C",
      "count": 4,
      "gaps": 0
     },
     {
      "top": "A",
      "count": 4,
      "gaps": 0
     },
     {
      "top": "C",
      "count": 4,
      "gaps": 0
     },
     {
      "top": "C",
      "count": 4,
      "gaps": 0
     },
     {
      "top": "G",
      "count": 4,
      "gaps": 0
     },
     {
      "top": "G",
      "count": 4,
      "gaps": 0
     },
     {
      "top": "T",
      "count": 4,
      "gaps": 0
     },
     {
      "top": "T",
      "count": 4,
      "gaps": 0
     }
    ]
   },
   "forced": "gapless"
  },
  {
   "id": "MSA-3",
   "what": "Five sequences with substitutions only, no indels: a gapless stack in input order (forced, part 1)",
   "input": {
    "sequences": [
     {
      "name": "s1",
      "residues": "ATGACCATGATTACGCCAAGCTTGCATGCC"
     },
     {
      "name": "s2",
      "residues": "ATGACCATGATTTCGCCAAGCTTGCATGCC"
     },
     {
      "name": "s3",
      "residues": "ATGACCATGATTACGCCAAGATTGCATGCC"
     },
     {
      "name": "s4",
      "residues": "ATGACGATGATTACGCCAAGCTTGCTTGCC"
     },
     {
      "name": "s5",
      "residues": "ATGACCATGATTACGCCAAGCTTGCATGAC"
     }
    ]
   },
   "expected": {
    "rows": [
     "ATGACCATGATTACGCCAAGCTTGCATGCC",
     "ATGACCATGATTTCGCCAAGCTTGCATGCC",
     "ATGACCATGATTACGCCAAGATTGCATGCC",
     "ATGACGATGATTACGCCAAGCTTGCTTGCC",
     "ATGACCATGATTACGCCAAGCTTGCATGAC"
    ],
    "merges": [
     [
      0,
      4
     ],
     [
      0,
      1
     ],
     [
      0,
      2
     ],
     [
      0,
      3
     ]
    ],
    "mergeScores": [
     55,
     105,
     155,
     185
    ],
    "mergeCells": [
     900,
     900,
     900,
     900
    ],
    "columns": 30,
    "sumOfPairs": 500,
    "columnSummary": [
     {
      "top": "A",
      "count": 5,
      "gaps": 0
     },
     {
      "top": "T",
      "count": 5,
      "gaps": 0
     },
     {
      "top": "G",
      "count": 5,
      "gaps": 0
     },
     {
      "top": "A",
      "count": 5,
      "gaps": 0
     },
     {
      "top": "C",
      "count": 5,
      "gaps": 0
     },
     {
      "top": "C",
      "count": 4,
      "gaps": 0
     },
     {
      "top": "A",
      "count": 5,
      "gaps": 0
     },
     {
      "top": "T",
      "count": 5,
      "gaps": 0
     },
     {
      "top": "G",
      "count": 5,
      "gaps": 0
     },
     {
      "top": "A",
      "count": 5,
      "gaps": 0
     },
     {
      "top": "T",
      "count": 5,
      "gaps": 0
     },
     {
      "top": "T",
      "count": 5,
      "gaps": 0
     },
     {
      "top": "A",
      "count": 4,
      "gaps": 0
     },
     {
      "top": "C",
      "count": 5,
      "gaps": 0
     },
     {
      "top": "G",
      "count": 5,
      "gaps": 0
     },
     {
      "top": "C",
      "count": 5,
      "gaps": 0
     },
     {
      "top": "C",
      "count": 5,
      "gaps": 0
     },
     {
      "top": "A",
      "count": 5,
      "gaps": 0
     },
     {
      "top": "A",
      "count": 5,
      "gaps": 0
     },
     {
      "top": "G",
      "count": 5,
      "gaps": 0
     },
     {
      "top": "C",
      "count": 4,
      "gaps": 0
     },
     {
      "top": "T",
      "count": 5,
      "gaps": 0
     },
     {
      "top": "T",
      "count": 5,
      "gaps": 0
     },
     {
      "top": "G",
      "count": 5,
      "gaps": 0
     },
     {
      "top": "C",
      "count": 5,
      "gaps": 0
     },
     {
      "top": "A",
      "count": 4,
      "gaps": 0
     },
     {
      "top": "T",
      "count": 5,
      "gaps": 0
     },
     {
      "top": "G",
      "count": 5,
      "gaps": 0
     },
     {
      "top": "C",
      "count": 4,
      "gaps": 0
     },
     {
      "top": "C",
      "count": 5,
      "gaps": 0
     }
    ]
   },
   "forced": "gapless"
  },
  {
   "id": "MSA-4",
   "what": "A duplicate in a set with a deletion: the duplicate's row is its twin's (forced, part 1)",
   "input": {
    "sequences": [
     {
      "name": "s1",
      "residues": "ATGACCATGATTACGCCAAGCTTGCATGCCTGCAGGTCGA"
     },
     {
      "name": "s2",
      "residues": "ATGACCATGATTACGCCATTGCATGCCTGCAGGTCGA"
     },
     {
      "name": "s3",
      "residues": "ATGACCATGATTACGCCAAGCTTGCATGCCTGCAGGTCGA"
     },
     {
      "name": "s4",
      "residues": "ATGACCATGATTACGCCAAGCTTGCATGCCGGCAGGTCGA"
     }
    ]
   },
   "expected": {
    "rows": [
     "ATGACCATGATTACGCCAAGCTTGCATGCCTGCAGGTCGA",
     "ATGACCATGATTACGCCA---TTGCATGCCTGCAGGTCGA",
     "ATGACCATGATTACGCCAAGCTTGCATGCCTGCAGGTCGA",
     "ATGACCATGATTACGCCAAGCTTGCATGCCGGCAGGTCGA"
    ],
    "merges": [
     [
      0,
      2
     ],
     [
      0,
      1
     ],
     [
      0,
      3
     ]
    ],
    "mergeScores": [
     80,
     130,
     219
    ],
    "mergeCells": [
     1600,
     1480,
     1600
    ],
    "columns": 40,
    "sumOfPairs": 420,
    "columnSummary": [
     {
      "top": "A",
      "count": 4,
      "gaps": 0
     },
     {
      "top": "T",
      "count": 4,
      "gaps": 0
     },
     {
      "top": "G",
      "count": 4,
      "gaps": 0
     },
     {
      "top": "A",
      "count": 4,
      "gaps": 0
     },
     {
      "top": "C",
      "count": 4,
      "gaps": 0
     },
     {
      "top": "C",
      "count": 4,
      "gaps": 0
     },
     {
      "top": "A",
      "count": 4,
      "gaps": 0
     },
     {
      "top": "T",
      "count": 4,
      "gaps": 0
     },
     {
      "top": "G",
      "count": 4,
      "gaps": 0
     },
     {
      "top": "A",
      "count": 4,
      "gaps": 0
     },
     {
      "top": "T",
      "count": 4,
      "gaps": 0
     },
     {
      "top": "T",
      "count": 4,
      "gaps": 0
     },
     {
      "top": "A",
      "count": 4,
      "gaps": 0
     },
     {
      "top": "C",
      "count": 4,
      "gaps": 0
     },
     {
      "top": "G",
      "count": 4,
      "gaps": 0
     },
     {
      "top": "C",
      "count": 4,
      "gaps": 0
     },
     {
      "top": "C",
      "count": 4,
      "gaps": 0
     },
     {
      "top": "A",
      "count": 4,
      "gaps": 0
     },
     {
      "top": "A",
      "count": 3,
      "gaps": 1
     },
     {
      "top": "G",
      "count": 3,
      "gaps": 1
     },
     {
      "top": "C",
      "count": 3,
      "gaps": 1
     },
     {
      "top": "T",
      "count": 4,
      "gaps": 0
     },
     {
      "top": "T",
      "count": 4,
      "gaps": 0
     },
     {
      "top": "G",
      "count": 4,
      "gaps": 0
     },
     {
      "top": "C",
      "count": 4,
      "gaps": 0
     },
     {
      "top": "A",
      "count": 4,
      "gaps": 0
     },
     {
      "top": "T",
      "count": 4,
      "gaps": 0
     },
     {
      "top": "G",
      "count": 4,
      "gaps": 0
     },
     {
      "top": "C",
      "count": 4,
      "gaps": 0
     },
     {
      "top": "C",
      "count": 4,
      "gaps": 0
     },
     {
      "top": "T",
      "count": 3,
      "gaps": 0
     },
     {
      "top": "G",
      "count": 4,
      "gaps": 0
     },
     {
      "top": "C",
      "count": 4,
      "gaps": 0
     },
     {
      "top": "A",
      "count": 4,
      "gaps": 0
     },
     {
      "top": "G",
      "count": 4,
      "gaps": 0
     },
     {
      "top": "G",
      "count": 4,
      "gaps": 0
     },
     {
      "top": "T",
      "count": 4,
      "gaps": 0
     },
     {
      "top": "C",
      "count": 4,
      "gaps": 0
     },
     {
      "top": "G",
      "count": 4,
      "gaps": 0
     },
     {
      "top": "A",
      "count": 4,
      "gaps": 0
     }
    ]
   },
   "forced": "twin"
  },
  {
   "id": "MSA-5",
   "what": "One gap: four sequences, one with a three-base deletion, aligned with the gap in that row only",
   "input": {
    "sequences": [
     {
      "name": "s1",
      "residues": "ATGACCATGATTACGCCAAGCTTGCATGCCTGCAGGTCGA"
     },
     {
      "name": "s2",
      "residues": "ATGACCATGATTACAAGCTTGCATGCCTGCAGGTCGA"
     },
     {
      "name": "s3",
      "residues": "ATGACCATGATTACGCCAAGCTTGCATGCCTGCAGGTCGA"
     },
     {
      "name": "s4",
      "residues": "ATGACCATGATTACGCCAAGCTTGCATGCCTGCAGGTCGA"
     }
    ]
   },
   "expected": {
    "rows": [
     "ATGACCATGATTACGCCAAGCTTGCATGCCTGCAGGTCGA",
     "ATGACCATGATTA---CAAGCTTGCATGCCTGCAGGTCGA",
     "ATGACCATGATTACGCCAAGCTTGCATGCCTGCAGGTCGA",
     "ATGACCATGATTACGCCAAGCTTGCATGCCTGCAGGTCGA"
    ],
    "merges": [
     [
      0,
      2
     ],
     [
      0,
      3
     ],
     [
      0,
      1
     ]
    ],
    "mergeScores": [
     80,
     160,
     195
    ],
    "mergeCells": [
     1600,
     1600,
     1480
    ],
    "columns": 40,
    "sumOfPairs": 435,
    "columnSummary": [
     {
      "top": "A",
      "count": 4,
      "gaps": 0
     },
     {
      "top": "T",
      "count": 4,
      "gaps": 0
     },
     {
      "top": "G",
      "count": 4,
      "gaps": 0
     },
     {
      "top": "A",
      "count": 4,
      "gaps": 0
     },
     {
      "top": "C",
      "count": 4,
      "gaps": 0
     },
     {
      "top": "C",
      "count": 4,
      "gaps": 0
     },
     {
      "top": "A",
      "count": 4,
      "gaps": 0
     },
     {
      "top": "T",
      "count": 4,
      "gaps": 0
     },
     {
      "top": "G",
      "count": 4,
      "gaps": 0
     },
     {
      "top": "A",
      "count": 4,
      "gaps": 0
     },
     {
      "top": "T",
      "count": 4,
      "gaps": 0
     },
     {
      "top": "T",
      "count": 4,
      "gaps": 0
     },
     {
      "top": "A",
      "count": 4,
      "gaps": 0
     },
     {
      "top": "C",
      "count": 3,
      "gaps": 1
     },
     {
      "top": "G",
      "count": 3,
      "gaps": 1
     },
     {
      "top": "C",
      "count": 3,
      "gaps": 1
     },
     {
      "top": "C",
      "count": 4,
      "gaps": 0
     },
     {
      "top": "A",
      "count": 4,
      "gaps": 0
     },
     {
      "top": "A",
      "count": 4,
      "gaps": 0
     },
     {
      "top": "G",
      "count": 4,
      "gaps": 0
     },
     {
      "top": "C",
      "count": 4,
      "gaps": 0
     },
     {
      "top": "T",
      "count": 4,
      "gaps": 0
     },
     {
      "top": "T",
      "count": 4,
      "gaps": 0
     },
     {
      "top": "G",
      "count": 4,
      "gaps": 0
     },
     {
      "top": "C",
      "count": 4,
      "gaps": 0
     },
     {
      "top": "A",
      "count": 4,
      "gaps": 0
     },
     {
      "top": "T",
      "count": 4,
      "gaps": 0
     },
     {
      "top": "G",
      "count": 4,
      "gaps": 0
     },
     {
      "top": "C",
      "count": 4,
      "gaps": 0
     },
     {
      "top": "C",
      "count": 4,
      "gaps": 0
     },
     {
      "top": "T",
      "count": 4,
      "gaps": 0
     },
     {
      "top": "G",
      "count": 4,
      "gaps": 0
     },
     {
      "top": "C",
      "count": 4,
      "gaps": 0
     },
     {
      "top": "A",
      "count": 4,
      "gaps": 0
     },
     {
      "top": "G",
      "count": 4,
      "gaps": 0
     },
     {
      "top": "G",
      "count": 4,
      "gaps": 0
     },
     {
      "top": "T",
      "count": 4,
      "gaps": 0
     },
     {
      "top": "C",
      "count": 4,
      "gaps": 0
     },
     {
      "top": "G",
      "count": 4,
      "gaps": 0
     },
     {
      "top": "A",
      "count": 4,
      "gaps": 0
     }
    ]
   },
   "measurements": {
    "note": "Measurements, never tolerances (the CSO's basis, parts 2 to 4): MAFFT's alignment and ours under one objective, their agreement, and the same set in three orders.",
    "mafft": {
     "options": [
      "--auto",
      "--nuc",
      "--preservecase",
      "--quiet"
     ],
     "rows": [
      "ATGACCATGATTACGCCAAGCTTGCATGCCTGCAGGTCGA",
      "ATGACCATGATTA---CAAGCTTGCATGCCTGCAGGTCGA",
      "ATGACCATGATTACGCCAAGCTTGCATGCCTGCAGGTCGA",
      "ATGACCATGATTACGCCAAGCTTGCATGCCTGCAGGTCGA"
     ],
     "sumOfPairs": 435,
     "agreement": {
      "columnsIdentical": 40,
      "columnsOurs": 40,
      "columnsTheirs": 40,
      "columnFraction": 1.0,
      "residuePairsShared": 231,
      "residuePairsOurs": 231,
      "residuePairFraction": 1.0
     }
    },
    "orders": [
     {
      "order": "given",
      "permutation": [
       0,
       1,
       2,
       3
      ],
      "rows": [
       "ATGACCATGATTACGCCAAGCTTGCATGCCTGCAGGTCGA",
       "ATGACCATGATTA---CAAGCTTGCATGCCTGCAGGTCGA",
       "ATGACCATGATTACGCCAAGCTTGCATGCCTGCAGGTCGA",
       "ATGACCATGATTACGCCAAGCTTGCATGCCTGCAGGTCGA"
      ],
      "sameAlignment": true,
      "sumOfPairs": 435
     },
     {
      "order": "reversed",
      "permutation": [
       3,
       2,
       1,
       0
      ],
      "rows": [
       "ATGACCATGATTACGCCAAGCTTGCATGCCTGCAGGTCGA",
       "ATGACCATGATTACGCCAAGCTTGCATGCCTGCAGGTCGA",
       "ATGACCATGATTA---CAAGCTTGCATGCCTGCAGGTCGA",
       "ATGACCATGATTACGCCAAGCTTGCATGCCTGCAGGTCGA"
      ],
      "sameAlignment": true,
      "sumOfPairs": 435
     },
     {
      "order": "shuffled",
      "permutation": [
       1,
       0,
       3,
       2
      ],
      "rows": [
       "ATGACCATGATTA---CAAGCTTGCATGCCTGCAGGTCGA",
       "ATGACCATGATTACGCCAAGCTTGCATGCCTGCAGGTCGA",
       "ATGACCATGATTACGCCAAGCTTGCATGCCTGCAGGTCGA",
       "ATGACCATGATTACGCCAAGCTTGCATGCCTGCAGGTCGA"
      ],
      "sameAlignment": true,
      "sumOfPairs": 435
     }
    ]
   }
  },
  {
   "id": "MSA-6",
   "what": "Divergent: six homologues of about 40 bases with substitutions, an insertion and two deletions",
   "input": {
    "sequences": [
     {
      "name": "s1",
      "residues": "ATGACCATGATTACGCCAAGCTTGCATGCCTGCAGGTCGA"
     },
     {
      "name": "s2",
      "residues": "ATGACCAGGATTACGCCAAGCTTTTGCATGCCTGCAGGTCGA"
     },
     {
      "name": "s3",
      "residues": "ATGATGATTACGCCAAGCTTGCATGCCTGCCGGTCGA"
     },
     {
      "name": "s4",
      "residues": "ATGACCATGATTACGACAAGCTTGCATGTGCAGGTCGA"
     },
     {
      "name": "s5",
      "residues": "TTGACCATGATCACGCCAAGCTTGCATGCCTGCAGGAAGA"
     },
     {
      "name": "s6",
      "residues": "ATGACCATGATTACGCCAAGGCGCTTGCATGCCTTCAGGTCGA"
     }
    ]
   },
   "expected": {
    "rows": [
     "ATGACCATGATTACGCCAA-GC--TTGCATGCCTGCAGGTCGA",
     "ATGACCAGGATTACGCCAA-GCTTTTGCATGCCTGCAGGTCGA",
     "ATG---ATGATTACGCCAA-GC--TTGCATGCCTGCCGGTCGA",
     "ATGACCATGATTACGACAA-GC--TTGCATG--TGCAGGTCGA",
     "TTGACCATGATCACGCCAA-GC--TTGCATGCCTGCAGGAAGA",
     "ATGACCATGATTACGCCAAGGCGCTTGCATGCCTTCAGGTCGA"
    ],
    "merges": [
     [
      0,
      1
     ],
     [
      0,
      2
     ],
     [
      0,
      5
     ],
     [
      0,
      4
     ],
     [
      0,
      3
     ]
    ],
    "mergeScores": [
     68,
     108,
     188,
     200,
     260
    ],
    "mergeCells": [
     1680,
     1554,
     1806,
     1720,
     1634
    ],
    "columns": 43,
    "sumOfPairs": 783,
    "columnSummary": [
     {
      "top": "A",
      "count": 5,
      "gaps": 0
     },
     {
      "top": "T",
      "count": 6,
      "gaps": 0
     },
     {
      "top": "G",
      "count": 6,
      "gaps": 0
     },
     {
      "top": "A",
      "count": 5,
      "gaps": 1
     },
     {
      "top": "C",
      "count": 5,
      "gaps": 1
     },
     {
      "top": "C",
      "count": 5,
      "gaps": 1
     },
     {
      "top": "A",
      "count": 6,
      "gaps": 0
     },
     {
      "top": "T",
      "count": 5,
      "gaps": 0
     },
     {
      "top": "G",
      "count": 6,
      "gaps": 0
     },
     {
      "top": "A",
      "count": 6,
      "gaps": 0
     },
     {
      "top": "T",
      "count": 6,
      "gaps": 0
     },
     {
      "top": "T",
      "count": 5,
      "gaps": 0
     },
     {
      "top": "A",
      "count": 6,
      "gaps": 0
     },
     {
      "top": "C",
      "count": 6,
      "gaps": 0
     },
     {
      "top": "G",
      "count": 6,
      "gaps": 0
     },
     {
      "top": "C",
      "count": 5,
      "gaps": 0
     },
     {
      "top": "C",
      "count": 6,
      "gaps": 0
     },
     {
      "top": "A",
      "count": 6,
      "gaps": 0
     },
     {
      "top": "A",
      "count": 6,
      "gaps": 0
     },
     {
      "top": "-",
      "count": 5,
      "gaps": 5
     },
     {
      "top": "G",
      "count": 6,
      "gaps": 0
     },
     {
      "top": "C",
      "count": 6,
      "gaps": 0
     },
     {
      "top": "-",
      "count": 4,
      "gaps": 4
     },
     {
      "top": "-",
      "count": 4,
      "gaps": 4
     },
     {
      "top": "T",
      "count": 6,
      "gaps": 0
     },
     {
      "top": "T",
      "count": 6,
      "gaps": 0
     },
     {
      "top": "G",
      "count": 6,
      "gaps": 0
     },
     {
      "top": "C",
      "count": 6,
      "gaps": 0
     },
     {
      "top": "A",
      "count": 6,
      "gaps": 0
     },
     {
      "top": "T",
      "count": 6,
      "gaps": 0
     },
     {
      "top": "G",
      "count": 6,
      "gaps": 0
     },
     {
      "top": "C",
      "count": 5,
      "gaps": 1
     },
     {
      "top": "C",
      "count": 5,
      "gaps": 1
     },
     {
      "top": "T",
      "count": 6,
      "gaps": 0
     },
     {
      "top": "G",
      "count": 5,
      "gaps": 0
     },
     {
      "top": "C",
      "count": 6,
      "gaps": 0
     },
     {
      "top": "A",
      "count": 5,
      "gaps": 0
     },
     {
      "top": "G",
      "count": 6,
      "gaps": 0
     },
     {
      "top": "G",
      "count": 6,
      "gaps": 0
     },
     {
      "top": "T",
      "count": 5,
      "gaps": 0
     },
     {
      "top": "C",
      "count": 5,
      "gaps": 0
     },
     {
      "top": "G",
      "count": 6,
      "gaps": 0
     },
     {
      "top": "A",
      "count": 6,
      "gaps": 0
     }
    ]
   },
   "measurements": {
    "note": "Measurements, never tolerances (the CSO's basis, parts 2 to 4): MAFFT's alignment and ours under one objective, their agreement, and the same set in three orders.",
    "mafft": {
     "options": [
      "--auto",
      "--nuc",
      "--preservecase",
      "--quiet"
     ],
     "rows": [
      "ATGACCATGATTACGCCAAGC---TTGCATGCCTGCAGGTCGA",
      "ATGACCAGGATTACGCCAAGC-TTTTGCATGCCTGCAGGTCGA",
      "---ATGATGATTACGCCAAGC---TTGCATGCCTGCCGGTCGA",
      "ATGACCATGATTACGACAAGC---TTGCATG--TGCAGGTCGA",
      "TTGACCATGATCACGCCAAGC---TTGCATGCCTGCAGGAAGA",
      "ATGACCATGATTACGCCAAGGCGCTTGCATGCCTTCAGGTCGA"
     ],
     "sumOfPairs": 725,
     "agreement": {
      "columnsIdentical": 34,
      "columnsOurs": 43,
      "columnsTheirs": 43,
      "columnFraction": 0.790698,
      "residuePairsShared": 552,
      "residuePairsOurs": 577,
      "residuePairFraction": 0.956672
     }
    },
    "orders": [
     {
      "order": "given",
      "permutation": [
       0,
       1,
       2,
       3,
       4,
       5
      ],
      "rows": [
       "ATGACCATGATTACGCCAA-GC--TTGCATGCCTGCAGGTCGA",
       "ATGACCAGGATTACGCCAA-GCTTTTGCATGCCTGCAGGTCGA",
       "ATG---ATGATTACGCCAA-GC--TTGCATGCCTGCCGGTCGA",
       "ATGACCATGATTACGACAA-GC--TTGCATG--TGCAGGTCGA",
       "TTGACCATGATCACGCCAA-GC--TTGCATGCCTGCAGGAAGA",
       "ATGACCATGATTACGCCAAGGCGCTTGCATGCCTTCAGGTCGA"
      ],
      "sameAlignment": true,
      "sumOfPairs": 783
     },
     {
      "order": "reversed",
      "permutation": [
       5,
       4,
       3,
       2,
       1,
       0
      ],
      "rows": [
       "ATGACCATGATTACGCCAAGGCGCTTGCATGCCTTCAGGTCGA",
       "TTGACCATGATCACGCCAA-GC--TTGCATGCCTGCAGGAAGA",
       "ATGACCATGATTACGACAA-GC--TTGCATG--TGCAGGTCGA",
       "ATG---ATGATTACGCCAA-GC--TTGCATGCCTGCCGGTCGA",
       "ATGACCAGGATTACGCCAA-GCTTTTGCATGCCTGCAGGTCGA",
       "ATGACCATGATTACGCCAA-GC--TTGCATGCCTGCAGGTCGA"
      ],
      "sameAlignment": true,
      "sumOfPairs": 783
     },
     {
      "order": "shuffled",
      "permutation": [
       2,
       1,
       0,
       5,
       4,
       3
      ],
      "rows": [
       "ATG---ATGATTACGCCAA-GC--TTGCATGCCTGCCGGTCGA",
       "ATGACCAGGATTACGCCAA-GCTTTTGCATGCCTGCAGGTCGA",
       "ATGACCATGATTACGCCAA-GC--TTGCATGCCTGCAGGTCGA",
       "ATGACCATGATTACGCCAAGGCGCTTGCATGCCTTCAGGTCGA",
       "TTGACCATGATCACGCCAA-GC--TTGCATGCCTGCAGGAAGA",
       "ATGACCATGATTACGACAA-GC--TTGCATG--TGCAGGTCGA"
      ],
      "sameAlignment": true,
      "sumOfPairs": 783
     }
    ]
   }
  },
  {
   "id": "MSA-7",
   "what": "A UPGMA tie that floating point breaks: two pairs at an exactly equal mean distance (with one of them a cluster), resolved by the tie rule; floating-point means merge the other pair",
   "input": {
    "sequences": [
     {
      "name": "s1",
      "residues": "TCGATTTGAGACACAG"
     },
     {
      "name": "s2",
      "residues": "TAGATTTCAGACCCAC"
     },
     {
      "name": "s3",
      "residues": "TAGATCTCAGACACAG"
     },
     {
      "name": "s4",
      "residues": "TAGATTTCAGACACAG"
     },
     {
      "name": "s5",
      "residues": "TGGATTTCAGACACCG"
     }
    ]
   },
   "expected": {
    "rows": [
     "TCGATTTGAGACACAG",
     "TAGATTTCAGACCCAC",
     "TAGATCTCAGACACAG",
     "TAGATTTCAGACACAG",
     "TGGATTTCAGACACCG"
    ],
    "merges": [
     [
      1,
      3
     ],
     [
      1,
      4
     ],
     [
      0,
      2
     ],
     [
      0,
      1
     ]
    ],
    "mergeScores": [
     22,
     34,
     17,
     112
    ],
    "mergeCells": [
     256,
     256,
     256,
     256
    ],
    "columns": 16,
    "sumOfPairs": 185,
    "columnSummary": [
     {
      "top": "T",
      "count": 5,
      "gaps": 0
     },
     {
      "top": "A",
      "count": 3,
      "gaps": 0
     },
     {
      "top": "G",
      "count": 5,
      "gaps": 0
     },
     {
      "top": "A",
      "count": 5,
      "gaps": 0
     },
     {
      "top": "T",
      "count": 5,
      "gaps": 0
     },
     {
      "top": "T",
      "count": 4,
      "gaps": 0
     },
     {
      "top": "T",
      "count": 5,
      "gaps": 0
     },
     {
      "top": "C",
      "count": 4,
      "gaps": 0
     },
     {
      "top": "A",
      "count": 5,
      "gaps": 0
     },
     {
      "top": "G",
      "count": 5,
      "gaps": 0
     },
     {
      "top": "A",
      "count": 5,
      "gaps": 0
     },
     {
      "top": "C",
      "count": 5,
      "gaps": 0
     },
     {
      "top": "A",
      "count": 4,
      "gaps": 0
     },
     {
      "top": "C",
      "count": 5,
      "gaps": 0
     },
     {
      "top": "A",
      "count": 4,
      "gaps": 0
     },
     {
      "top": "G",
      "count": 4,
      "gaps": 0
     }
    ]
   },
   "floatingPointMerges": [
    [
     1,
     3
    ],
    [
     1,
     4
    ],
    [
     1,
     2
    ],
    [
     0,
     1
    ]
   ]
  },
  {
   "id": "MSA-8",
   "what": "A sequence with no word of six bases (shorter than six): d = 1 to every other, so it joins last",
   "input": {
    "sequences": [
     {
      "name": "s1",
      "residues": "ACGGTACCAGTTGCA"
     },
     {
      "name": "s2",
      "residues": "ACGGTACAGTTGCA"
     },
     {
      "name": "short",
      "residues": "ACGTA"
     }
    ]
   },
   "expected": {
    "rows": [
     "ACGGTACCAGTTGCA",
     "ACGGTA-CAGTTGCA",
     "AC-GTA---------"
    ],
    "merges": [
     [
      0,
      1
     ],
     [
      0,
      2
     ]
    ],
    "mergeScores": [
     23,
     -27
    ],
    "mergeCells": [
     210,
     75
    ],
    "columns": 15,
    "sumOfPairs": -7,
    "columnSummary": [
     {
      "top": "A",
      "count": 3,
      "gaps": 0
     },
     {
      "top": "C",
      "count": 3,
      "gaps": 0
     },
     {
      "top": "G",
      "count": 2,
      "gaps": 1
     },
     {
      "top": "G",
      "count": 3,
      "gaps": 0
     },
     {
      "top": "T",
      "count": 3,
      "gaps": 0
     },
     {
      "top": "A",
      "count": 3,
      "gaps": 0
     },
     {
      "top": "-",
      "count": 2,
      "gaps": 2
     },
     {
      "top": "C",
      "count": 2,
      "gaps": 1
     },
     {
      "top": "A",
      "count": 2,
      "gaps": 1
     },
     {
      "top": "G",
      "count": 2,
      "gaps": 1
     },
     {
      "top": "T",
      "count": 2,
      "gaps": 1
     },
     {
      "top": "T",
      "count": 2,
      "gaps": 1
     },
     {
      "top": "G",
      "count": 2,
      "gaps": 1
     },
     {
      "top": "C",
      "count": 2,
      "gaps": 1
     },
     {
      "top": "A",
      "count": 2,
      "gaps": 1
     }
    ]
   }
  },
  {
   "id": "MSA-9",
   "what": "Ambiguity codes: R and N score 0 against any letter, and words holding them are skipped",
   "input": {
    "sequences": [
     {
      "name": "s1",
      "residues": "ACGTRACGTTGCANCGT"
     },
     {
      "name": "s2",
      "residues": "ACGTAACGTTGCAGCGT"
     },
     {
      "name": "s3",
      "residues": "ACGTGACGTGCAGCGT"
     }
    ]
   },
   "expected": {
    "rows": [
     "ACGTRACGTTGCANCGT",
     "ACGTAACGTTGCAGCGT",
     "ACGTGACG-TGCAGCGT"
    ],
    "merges": [
     [
      0,
      1
     ],
     [
      0,
      2
     ]
    ],
    "mergeScores": [
     30,
     45
    ],
    "mergeCells": [
     289,
     272
    ],
    "columns": 17,
    "sumOfPairs": 75,
    "columnSummary": [
     {
      "top": "A",
      "count": 3,
      "gaps": 0
     },
     {
      "top": "C",
      "count": 3,
      "gaps": 0
     },
     {
      "top": "G",
      "count": 3,
      "gaps": 0
     },
     {
      "top": "T",
      "count": 3,
      "gaps": 0
     },
     {
      "top": null,
      "count": 1,
      "gaps": 0
     },
     {
      "top": "A",
      "count": 3,
      "gaps": 0
     },
     {
      "top": "C",
      "count": 3,
      "gaps": 0
     },
     {
      "top": "G",
      "count": 3,
      "gaps": 0
     },
     {
      "top": "T",
      "count": 2,
      "gaps": 1
     },
     {
      "top": "T",
      "count": 3,
      "gaps": 0
     },
     {
      "top": "G",
      "count": 3,
      "gaps": 0
     },
     {
      "top": "C",
      "count": 3,
      "gaps": 0
     },
     {
      "top": "A",
      "count": 3,
      "gaps": 0
     },
     {
      "top": "G",
      "count": 2,
      "gaps": 0
     },
     {
      "top": "C",
      "count": 3,
      "gaps": 0
     },
     {
      "top": "G",
      "count": 3,
      "gaps": 0
     },
     {
      "top": "T",
      "count": 3,
      "gaps": 0
     }
    ]
   }
  },
  {
   "id": "MSA-10",
   "what": "Eight clones of a 50-base design, each with one change of its own: substitutions, an insertion and two deletions",
   "input": {
    "sequences": [
     {
      "name": "design",
      "residues": "ATGACCATGATTACGCCAAGCTTGCATGCCTGCAGGTCGAACTCTAGAGG"
     },
     {
      "name": "clone-1",
      "residues": "ATGACTATGATTACGCCAAGCTTGCATGCCTGCAGGTCGAACTCTAGAGG"
     },
     {
      "name": "clone-2",
      "residues": "ATGACCATGATTCGCCAAGCTTGCATGCCTGCAGGTCGAACTCTAGAGG"
     },
     {
      "name": "clone-3",
      "residues": "ATGACCATGATTACGCCAAACTTGCATGCCTGCAGGTCGAACTCTAGAGG"
     },
     {
      "name": "clone-4",
      "residues": "ATGACCATGATTACGCCAAGCTTGCACATGCCTGCAGGTCGAACTCTAGAGG"
     },
     {
      "name": "clone-5",
      "residues": "ATGACCATGATTACGCCAAGCTTGCATGCCTTCAGGTCGAACTCTAGAGG"
     },
     {
      "name": "clone-6",
      "residues": "ATGACCATGATTACGCCAAGCTTGCATGCCTGCAGGTCGAACTCAGAGG"
     },
     {
      "name": "clone-7",
      "residues": "ATCACCATGATTACGCCAAGCTTGCATGCCTGCAGGTCGAACTCTAGAGG"
     }
    ]
   },
   "expected": {
    "rows": [
     "ATGACCATGATTACGCCAAGCTTG--CATGCCTGCAGGTCGAACTCTAGAGG",
     "ATGACTATGATTACGCCAAGCTTG--CATGCCTGCAGGTCGAACTCTAGAGG",
     "ATGACCATGATT-CGCCAAGCTTG--CATGCCTGCAGGTCGAACTCTAGAGG",
     "ATGACCATGATTACGCCAAACTTG--CATGCCTGCAGGTCGAACTCTAGAGG",
     "ATGACCATGATTACGCCAAGCTTGCACATGCCTGCAGGTCGAACTCTAGAGG",
     "ATGACCATGATTACGCCAAGCTTG--CATGCCTTCAGGTCGAACTCTAGAGG",
     "ATGACCATGATTACGCCAAGCTTG--CATGCCTGCAGGTCGAACTC-AGAGG",
     "ATCACCATGATTACGCCAAGCTTG--CATGCCTGCAGGTCGAACTCTAGAGG"
    ],
    "merges": [
     [
      0,
      4
     ],
     [
      0,
      7
     ],
     [
      0,
      1
     ],
     [
      0,
      2
     ],
     [
      0,
      6
     ],
     [
      0,
      3
     ],
     [
      0,
      5
     ]
    ],
    "mergeScores": [
     93,
     183,
     273,
     355,
     446,
     549,
     639
    ],
    "mergeCells": [
     2600,
     2600,
     2600,
     2548,
     2548,
     2600,
     2600
    ],
    "columns": 52,
    "sumOfPairs": 2513,
    "columnSummary": [
     {
      "top": "A",
      "count": 8,
      "gaps": 0
     },
     {
      "top": "T",
      "count": 8,
      "gaps": 0
     },
     {
      "top": "G",
      "count": 7,
      "gaps": 0
     },
     {
      "top": "A",
      "count": 8,
      "gaps": 0
     },
     {
      "top": "C",
      "count": 8,
      "gaps": 0
     },
     {
      "top": "C",
      "count": 7,
      "gaps": 0
     },
     {
      "top": "A",
      "count": 8,
      "gaps": 0
     },
     {
      "top": "T",
      "count": 8,
      "gaps": 0
     },
     {
      "top": "G",
      "count": 8,
      "gaps": 0
     },
     {
      "top": "A",
      "count": 8,
      "gaps": 0
     },
     {
      "top": "T",
      "count": 8,
      "gaps": 0
     },
     {
      "top": "T",
      "count": 8,
      "gaps": 0
     },
     {
      "top": "A",
      "count": 7,
      "gaps": 1
     },
     {
      "top": "C",
      "count": 8,
      "gaps": 0
     },
     {
      "top": "G",
      "count": 8,
      "gaps": 0
     },
     {
      "top": "C",
      "count": 8,
      "gaps": 0
     },
     {
      "top": "C",
      "count": 8,
      "gaps": 0
     },
     {
      "top": "A",
      "count": 8,
      "gaps": 0
     },
     {
      "top": "A",
      "count": 8,
      "gaps": 0
     },
     {
      "top": "G",
      "count": 7,
      "gaps": 0
     },
     {
      "top": "C",
      "count": 8,
      "gaps": 0
     },
     {
      "top": "T",
      "count": 8,
      "gaps": 0
     },
     {
      "top": "T",
      "count": 8,
      "gaps": 0
     },
     {
      "top": "G",
      "count": 8,
      "gaps": 0
     },
     {
      "top": "-",
      "count": 7,
      "gaps": 7
     },
     {
      "top": "-",
      "count": 7,
      "gaps": 7
     },
     {
      "top": "C",
      "count": 8,
      "gaps": 0
     },
     {
      "top": "A",
      "count": 8,
      "gaps": 0
     },
     {
      "top": "T",
      "count": 8,
      "gaps": 0
     },
     {
      "top": "G",
      "count": 8,
      "gaps": 0
     },
     {
      "top": "C",
      "count": 8,
      "gaps": 0
     },
     {
      "top": "C",
      "count": 8,
      "gaps": 0
     },
     {
      "top": "T",
      "count": 8,
      "gaps": 0
     },
     {
      "top": "G",
      "count": 7,
      "gaps": 0
     },
     {
      "top": "C",
      "count": 8,
      "gaps": 0
     },
     {
      "top": "A",
      "count": 8,
      "gaps": 0
     },
     {
      "top": "G",
      "count": 8,
      "gaps": 0
     },
     {
      "top": "G",
      "count": 8,
      "gaps": 0
     },
     {
      "top": "T",
      "count": 8,
      "gaps": 0
     },
     {
      "top": "C",
      "count": 8,
      "gaps": 0
     },
     {
      "top": "G",
      "count": 8,
      "gaps": 0
     },
     {
      "top": "A",
      "count": 8,
      "gaps": 0
     },
     {
      "top": "A",
      "count": 8,
      "gaps": 0
     },
     {
      "top": "C",
      "count": 8,
      "gaps": 0
     },
     {
      "top": "T",
      "count": 8,
      "gaps": 0
     },
     {
      "top": "C",
      "count": 8,
      "gaps": 0
     },
     {
      "top": "T",
      "count": 7,
      "gaps": 1
     },
     {
      "top": "A",
      "count": 8,
      "gaps": 0
     },
     {
      "top": "G",
      "count": 8,
      "gaps": 0
     },
     {
      "top": "A",
      "count": 8,
      "gaps": 0
     },
     {
      "top": "G",
      "count": 8,
      "gaps": 0
     },
     {
      "top": "G",
      "count": 8,
      "gaps": 0
     }
    ]
   },
   "measurements": {
    "note": "Measurements, never tolerances (the CSO's basis, parts 2 to 4): MAFFT's alignment and ours under one objective, their agreement, and the same set in three orders.",
    "mafft": {
     "options": [
      "--auto",
      "--nuc",
      "--preservecase",
      "--quiet"
     ],
     "rows": [
      "ATGACCATGATTACGCCAAGCTTG--CATGCCTGCAGGTCGAACTCTAGAGG",
      "ATGACTATGATTACGCCAAGCTTG--CATGCCTGCAGGTCGAACTCTAGAGG",
      "ATGACCATGATT-CGCCAAGCTTG--CATGCCTGCAGGTCGAACTCTAGAGG",
      "ATGACCATGATTACGCCAAACTTG--CATGCCTGCAGGTCGAACTCTAGAGG",
      "ATGACCATGATTACGCCAAGCTTGCACATGCCTGCAGGTCGAACTCTAGAGG",
      "ATGACCATGATTACGCCAAGCTTG--CATGCCTTCAGGTCGAACTCTAGAGG",
      "ATGACCATGATTACGCCAAGCTTG--CATGCCTGCAGGTCGAACTCAGAGG-",
      "ATCACCATGATTACGCCAAGCTTG--CATGCCTGCAGGTCGAACTCTAGAGG"
     ],
     "sumOfPairs": 2373,
     "agreement": {
      "columnsIdentical": 46,
      "columnsOurs": 52,
      "columnsTheirs": 52,
      "columnFraction": 0.884615,
      "residuePairsShared": 1351,
      "residuePairsOurs": 1386,
      "residuePairFraction": 0.974747
     }
    },
    "orders": [
     {
      "order": "given",
      "permutation": [
       0,
       1,
       2,
       3,
       4,
       5,
       6,
       7
      ],
      "rows": [
       "ATGACCATGATTACGCCAAGCTTG--CATGCCTGCAGGTCGAACTCTAGAGG",
       "ATGACTATGATTACGCCAAGCTTG--CATGCCTGCAGGTCGAACTCTAGAGG",
       "ATGACCATGATT-CGCCAAGCTTG--CATGCCTGCAGGTCGAACTCTAGAGG",
       "ATGACCATGATTACGCCAAACTTG--CATGCCTGCAGGTCGAACTCTAGAGG",
       "ATGACCATGATTACGCCAAGCTTGCACATGCCTGCAGGTCGAACTCTAGAGG",
       "ATGACCATGATTACGCCAAGCTTG--CATGCCTTCAGGTCGAACTCTAGAGG",
       "ATGACCATGATTACGCCAAGCTTG--CATGCCTGCAGGTCGAACTC-AGAGG",
       "ATCACCATGATTACGCCAAGCTTG--CATGCCTGCAGGTCGAACTCTAGAGG"
      ],
      "sameAlignment": true,
      "sumOfPairs": 2513
     },
     {
      "order": "reversed",
      "permutation": [
       7,
       6,
       5,
       4,
       3,
       2,
       1,
       0
      ],
      "rows": [
       "ATCACCATGATTACGCCAAGCTTG--CATGCCTGCAGGTCGAACTCTAGAGG",
       "ATGACCATGATTACGCCAAGCTTG--CATGCCTGCAGGTCGAACTC-AGAGG",
       "ATGACCATGATTACGCCAAGCTTG--CATGCCTTCAGGTCGAACTCTAGAGG",
       "ATGACCATGATTACGCCAAGCTTGCACATGCCTGCAGGTCGAACTCTAGAGG",
       "ATGACCATGATTACGCCAAACTTG--CATGCCTGCAGGTCGAACTCTAGAGG",
       "ATGACCATGATT-CGCCAAGCTTG--CATGCCTGCAGGTCGAACTCTAGAGG",
       "ATGACTATGATTACGCCAAGCTTG--CATGCCTGCAGGTCGAACTCTAGAGG",
       "ATGACCATGATTACGCCAAGCTTG--CATGCCTGCAGGTCGAACTCTAGAGG"
      ],
      "sameAlignment": true,
      "sumOfPairs": 2513
     },
     {
      "order": "shuffled",
      "permutation": [
       1,
       4,
       7,
       2,
       5,
       0,
       3,
       6
      ],
      "rows": [
       "ATGACTATGATTACGCCAAGCTTG--CATGCCTGCAGGTCGAACTCTAGAGG",
       "ATGACCATGATTACGCCAAGCTTGCACATGCCTGCAGGTCGAACTCTAGAGG",
       "ATCACCATGATTACGCCAAGCTTG--CATGCCTGCAGGTCGAACTCTAGAGG",
       "ATGACCATGATT-CGCCAAGCTTG--CATGCCTGCAGGTCGAACTCTAGAGG",
       "ATGACCATGATTACGCCAAGCTTG--CATGCCTTCAGGTCGAACTCTAGAGG",
       "ATGACCATGATTACGCCAAGCTTG--CATGCCTGCAGGTCGAACTCTAGAGG",
       "ATGACCATGATTACGCCAAACTTG--CATGCCTGCAGGTCGAACTCTAGAGG",
       "ATGACCATGATTACGCCAAGCTTG--CATGCCTGCAGGTCGAACTC-AGAGG"
      ],
      "sameAlignment": true,
      "sumOfPairs": 2513
     }
    ]
   }
  },
  {
   "id": "MSA-11",
   "what": "Order dependence: four short homologues whose alignment changes when the same set is given in reverse (part 4); the order given is the one the result states and pins",
   "input": {
    "sequences": [
     {
      "name": "s1",
      "residues": "GGTACGCCCGACCATTAT"
     },
     {
      "name": "s2",
      "residues": "GGTACGCCCGACCATGCTAT"
     },
     {
      "name": "s3",
      "residues": "GGTACTCCCGACCATTAT"
     },
     {
      "name": "s4",
      "residues": "GGTACGCCCGACCATCT"
     }
    ]
   },
   "expected": {
    "rows": [
     "GGTACGCCCGACCAT--TAT",
     "GGTACGCCCGACCATGCTAT",
     "GGTACTCCCGACCAT--TAT",
     "GGTACGCCCGACCA---TCT"
    ],
    "merges": [
     [
      0,
      3
     ],
     [
      0,
      1
     ],
     [
      0,
      2
     ]
    ],
    "mergeScores": [
     24,
     51,
     79
    ],
    "mergeCells": [
     306,
     360,
     360
    ],
    "columns": 20,
    "sumOfPairs": 147,
    "columnSummary": [
     {
      "top": "G",
      "count": 4,
      "gaps": 0
     },
     {
      "top": "G",
      "count": 4,
      "gaps": 0
     },
     {
      "top": "T",
      "count": 4,
      "gaps": 0
     },
     {
      "top": "A",
      "count": 4,
      "gaps": 0
     },
     {
      "top": "C",
      "count": 4,
      "gaps": 0
     },
     {
      "top": "G",
      "count": 3,
      "gaps": 0
     },
     {
      "top": "C",
      "count": 4,
      "gaps": 0
     },
     {
      "top": "C",
      "count": 4,
      "gaps": 0
     },
     {
      "top": "C",
      "count": 4,
      "gaps": 0
     },
     {
      "top": "G",
      "count": 4,
      "gaps": 0
     },
     {
      "top": "A",
      "count": 4,
      "gaps": 0
     },
     {
      "top": "C",
      "count": 4,
      "gaps": 0
     },
     {
      "top": "C",
      "count": 4,
      "gaps": 0
     },
     {
      "top": "A",
      "count": 4,
      "gaps": 0
     },
     {
      "top": "T",
      "count": 3,
      "gaps": 1
     },
     {
      "top": "-",
      "count": 3,
      "gaps": 3
     },
     {
      "top": "-",
      "count": 3,
      "gaps": 3
     },
     {
      "top": "T",
      "count": 4,
      "gaps": 0
     },
     {
      "top": "A",
      "count": 3,
      "gaps": 0
     },
     {
      "top": "T",
      "count": 4,
      "gaps": 0
     }
    ]
   },
   "measurements": {
    "note": "Measurements, never tolerances (the CSO's basis, parts 2 to 4): MAFFT's alignment and ours under one objective, their agreement, and the same set in three orders.",
    "mafft": {
     "options": [
      "--auto",
      "--nuc",
      "--preservecase",
      "--quiet"
     ],
     "rows": [
      "GGTACGCCCGACCAT--TAT",
      "GGTACGCCCGACCATGCTAT",
      "GGTACTCCCGACCAT--TAT",
      "GGTACGCCCGACCAT---CT"
     ],
     "sumOfPairs": 147,
     "agreement": {
      "columnsIdentical": 18,
      "columnsOurs": 20,
      "columnsTheirs": 20,
      "columnFraction": 0.9,
      "residuePairsShared": 102,
      "residuePairsOurs": 105,
      "residuePairFraction": 0.971429
     }
    },
    "orders": [
     {
      "order": "given",
      "permutation": [
       0,
       1,
       2,
       3
      ],
      "rows": [
       "GGTACGCCCGACCAT--TAT",
       "GGTACGCCCGACCATGCTAT",
       "GGTACTCCCGACCAT--TAT",
       "GGTACGCCCGACCA---TCT"
      ],
      "sameAlignment": true,
      "sumOfPairs": 147
     },
     {
      "order": "reversed",
      "permutation": [
       3,
       2,
       1,
       0
      ],
      "rows": [
       "GGTACGCCCGACCAT-C--T",
       "GGTACTCCCGACCAT--TAT",
       "GGTACGCCCGACCATGCTAT",
       "GGTACGCCCGACCAT--TAT"
      ],
      "sameAlignment": false,
      "sumOfPairs": 141
     },
     {
      "order": "shuffled",
      "permutation": [
       1,
       0,
       3,
       2
      ],
      "rows": [
       "GGTACGCCCGACCATGCTAT",
       "GGTACGCCCGACCAT--TAT",
       "GGTACGCCCGACCAT-C--T",
       "GGTACTCCCGACCAT--TAT"
      ],
      "sameAlignment": false,
      "sumOfPairs": 141
     }
    ]
   }
  }
 ],
 "refusals": [
  {
   "id": "MSA-R1",
   "what": "One sequence: a multiple alignment needs at least two",
   "input": {
    "sequences": [
     {
      "name": "only",
      "residues": "ACGTACGT"
     }
    ]
   },
   "expected": {
    "refused": {
     "kind": "too-few",
     "count": 1
    }
   }
  },
  {
   "id": "MSA-R2",
   "what": "Fifty-one sequences: over the cap of 50",
   "input": {
    "sequences": [
     {
      "name": "s0",
      "residues": "ACGTACGTAC"
     },
     {
      "name": "s1",
      "residues": "ACGTACGTAC"
     },
     {
      "name": "s2",
      "residues": "ACGTACGTAC"
     },
     {
      "name": "s3",
      "residues": "ACGTACGTAC"
     },
     {
      "name": "s4",
      "residues": "ACGTACGTAC"
     },
     {
      "name": "s5",
      "residues": "ACGTACGTAC"
     },
     {
      "name": "s6",
      "residues": "ACGTACGTAC"
     },
     {
      "name": "s7",
      "residues": "ACGTACGTAC"
     },
     {
      "name": "s8",
      "residues": "ACGTACGTAC"
     },
     {
      "name": "s9",
      "residues": "ACGTACGTAC"
     },
     {
      "name": "s10",
      "residues": "ACGTACGTAC"
     },
     {
      "name": "s11",
      "residues": "ACGTACGTAC"
     },
     {
      "name": "s12",
      "residues": "ACGTACGTAC"
     },
     {
      "name": "s13",
      "residues": "ACGTACGTAC"
     },
     {
      "name": "s14",
      "residues": "ACGTACGTAC"
     },
     {
      "name": "s15",
      "residues": "ACGTACGTAC"
     },
     {
      "name": "s16",
      "residues": "ACGTACGTAC"
     },
     {
      "name": "s17",
      "residues": "ACGTACGTAC"
     },
     {
      "name": "s18",
      "residues": "ACGTACGTAC"
     },
     {
      "name": "s19",
      "residues": "ACGTACGTAC"
     },
     {
      "name": "s20",
      "residues": "ACGTACGTAC"
     },
     {
      "name": "s21",
      "residues": "ACGTACGTAC"
     },
     {
      "name": "s22",
      "residues": "ACGTACGTAC"
     },
     {
      "name": "s23",
      "residues": "ACGTACGTAC"
     },
     {
      "name": "s24",
      "residues": "ACGTACGTAC"
     },
     {
      "name": "s25",
      "residues": "ACGTACGTAC"
     },
     {
      "name": "s26",
      "residues": "ACGTACGTAC"
     },
     {
      "name": "s27",
      "residues": "ACGTACGTAC"
     },
     {
      "name": "s28",
      "residues": "ACGTACGTAC"
     },
     {
      "name": "s29",
      "residues": "ACGTACGTAC"
     },
     {
      "name": "s30",
      "residues": "ACGTACGTAC"
     },
     {
      "name": "s31",
      "residues": "ACGTACGTAC"
     },
     {
      "name": "s32",
      "residues": "ACGTACGTAC"
     },
     {
      "name": "s33",
      "residues": "ACGTACGTAC"
     },
     {
      "name": "s34",
      "residues": "ACGTACGTAC"
     },
     {
      "name": "s35",
      "residues": "ACGTACGTAC"
     },
     {
      "name": "s36",
      "residues": "ACGTACGTAC"
     },
     {
      "name": "s37",
      "residues": "ACGTACGTAC"
     },
     {
      "name": "s38",
      "residues": "ACGTACGTAC"
     },
     {
      "name": "s39",
      "residues": "ACGTACGTAC"
     },
     {
      "name": "s40",
      "residues": "ACGTACGTAC"
     },
     {
      "name": "s41",
      "residues": "ACGTACGTAC"
     },
     {
      "name": "s42",
      "residues": "ACGTACGTAC"
     },
     {
      "name": "s43",
      "residues": "ACGTACGTAC"
     },
     {
      "name": "s44",
      "residues": "ACGTACGTAC"
     },
     {
      "name": "s45",
      "residues": "ACGTACGTAC"
     },
     {
      "name": "s46",
      "residues": "ACGTACGTAC"
     },
     {
      "name": "s47",
      "residues": "ACGTACGTAC"
     },
     {
      "name": "s48",
      "residues": "ACGTACGTAC"
     },
     {
      "name": "s49",
      "residues": "ACGTACGTAC"
     },
     {
      "name": "s50",
      "residues": "ACGTACGTAC"
     }
    ]
   },
   "expected": {
    "refused": {
     "kind": "count-cap",
     "count": 51,
     "cap": 50
    }
   }
  },
  {
   "id": "MSA-R3",
   "what": "An empty sequence, refused with its index",
   "input": {
    "sequences": [
     {
      "name": "s1",
      "residues": "ACGT"
     },
     {
      "name": "s2",
      "residues": ""
     }
    ]
   },
   "expected": {
    "refused": {
     "kind": "empty",
     "index": 1
    }
   }
  },
  {
   "id": "MSA-R4",
   "what": "A sequence of 20,001 bases: over the cap of 20,000",
   "input": {
    "sequences": [
     {
      "name": "s1",
      "residues": "ACGT"
     },
     {
      "name": "long",
      "residues": {
       "repeat": "ACGTTGCA",
       "length": 20001
      }
     }
    ]
   },
   "expected": {
    "refused": {
     "kind": "length-cap",
     "index": 1,
     "length": 20001,
     "cap": 20000
    }
   }
  },
  {
   "id": "MSA-R5",
   "what": "U in DNA, refused with its position",
   "input": {
    "sequences": [
     {
      "name": "s1",
      "residues": "ACGT"
     },
     {
      "name": "s2",
      "residues": "ACGU"
     }
    ]
   },
   "expected": {
    "refused": {
     "kind": "u-in-dna",
     "index": 1,
     "position": 4
    }
   }
  },
  {
   "id": "MSA-R6",
   "what": "A gap character in the input: the input is unaligned, so a dash is a letter not taken",
   "input": {
    "sequences": [
     {
      "name": "s1",
      "residues": "ACGT"
     },
     {
      "name": "s2",
      "residues": "AC-GT"
     }
    ]
   },
   "expected": {
    "refused": {
     "kind": "letter",
     "index": 1,
     "letter": "-",
     "position": 3
    }
   }
  },
  {
   "id": "MSA-R7",
   "what": "Two sequences of 3,200 bases: their merge needs 10,240,000 cells, over 10,000,000, so it is refused, not banded",
   "input": {
    "sequences": [
     {
      "name": "s1",
      "residues": {
       "repeat": "ACGTTGCA",
       "length": 3200
      }
     },
     {
      "name": "s2",
      "residues": {
       "repeat": "ACGTTGCA",
       "length": 3200
      }
     }
    ]
   },
   "expected": {
    "refused": {
     "kind": "merge-cap",
     "merge": 1,
     "cells": 10240000,
     "cap": 10000000
    }
   }
  }
 ]
}
