{
 "about": {
  "generatedBy": "pipeline/sequence-toolkit/reference.py",
  "scriptSha256": "1bc66633d1a780a7f255b02743e9258652769ed35b770f193c5d74e0070410d6",
  "recordedOn": "2026-10-06",
  "python": "3.11.15",
  "oracle": "Expasy ProtParam, https://web.expasy.org/protparam/ (form action https://web.expasy.org/cgi-bin/protparam/protparam)",
  "oracleLicence": "Behavioural reference; ProtParam terms 'To be checked' (Expasy Terms of Use read 2026-10-06 place no further restriction than each resource's own terms)",
  "rule": "No value in this file comes from the Drybench engine under test.",
  "fixture": "22 proteins and peptides for MW, pI (Bjellqvist) and epsilon-280 (brief section 4.3 (1); P21 and P22 added by the CSO ruling of 6 October 2026)",
  "ruling": "CSO ruling, 6 October 2026 (item 5)",
  "tolerance": {
   "molecularWeight": "within 0.01 Da of ProtParam's printed value, on every case",
   "theoreticalPI": "within 0.01 of ProtParam's printed value, on every case; bisection over pH 0-14; no case may return a bound of the search range (pIMustNotEqual on the cases outside Biopython's 4.05-12)",
   "extinction": "exact (integer coefficients)"
  },
  "cTerminalPk": "ProtParam applies a C-terminal pK of 3.55 whatever the last residue, where the published Bjellqvist table gives 4.55 for Asp and 4.75 for Glu. The 3.55 reading reproduces ProtParam's printed pI at two decimals on 22 of 22 cases; the cases that separate the two readings at two decimals are P08, P21, P22 (crossCheck.cTerminalPk). P21 and P22 are peptides designed for this check, ending in Asp and Glu.",
  "massTable": "ProtParam's average residue table, as the Protein app uses (chip id protparam-average). The CSO recommends it for Protein and Sequence alike (6 October 2026); the CEO decides. If CIAAW 2021 is chosen instead, both apps switch together and the 0.01 Da gate against ProtParam no longer holds.",
  "cardLimit": "pK set fitted between pH 4.5 and 7.3; Expasy warns that the pI of highly basic proteins may be poorly predicted (Expasy Compute pI/Mw documentation, read 6 October 2026)",
  "fields": "numberOfAminoAcids, molecularWeight (Da, as printed, a string to keep its decimals), theoreticalPI (as printed), extinctionCystines and extinctionReduced (M-1 cm-1 at 280 nm in water) with abs01* (Abs 0.1% = 1 g/L); extinctionSingle when ProtParam prints one value (no Cys); notVisibleByUV when there is no Trp, Tyr or Cys",
  "inputs": "Sequences are submitted as raw one-letter sequences, never as accessions, so the values belong to exactly the sequence in input.sequence",
  "protparamReached": "22 of 22 cases have a saved ProtParam response",
  "sources": "UniProtKB entries are CC BY 4.0 (UniProt Consortium); attribution: UniProt Consortium, UniProt: the Universal Protein Knowledgebase, release as recorded per case"
 },
 "cases": [
  {
   "id": "P01",
   "input": {
    "label": "Human preproinsulin (signal, B chain, C peptide, A chain)",
    "sequence": "MALWMRLLPLLALLALWGPDPAAAFVNQHLCGSHLVEALYLVCGERGFFYTPKTRREAEDLQVGQVELGGGPGAGSLQPLALEGSLQKRGIVEQCCTSICSLYQLENYCN",
    "length": 110,
    "nTerminal": "M",
    "cTerminal": "N",
    "counts": {
     "W": 2,
     "Y": 4,
     "C": 6
    },
    "covers": [
     "N-terminal Met",
     "6 Cys",
     "teaching example (insulin)"
    ],
    "source": {
     "database": "UniProtKB",
     "accession": "P01308",
     "entry": "INS_HUMAN",
     "range": [
      1,
      110
     ],
     "release": "2026_03",
     "releaseDate": "02-September-2026",
     "retrieved": "2026-10-06T02:24:17Z",
     "licence": "CC BY 4.0 (UniProt Consortium)"
    }
   },
   "expected": {
    "numberOfAminoAcids": 110,
    "molecularWeight": "11980.91",
    "theoreticalPI": "5.22",
    "extinctionCystines": 17335,
    "abs01Cystines": "1.447",
    "extinctionReduced": 16960,
    "abs01Reduced": "1.416",
    "formula": "C535H841N143O153S8"
   },
   "protparam": {
    "file": "pipeline/sequence-toolkit/protparam/P01.html",
    "retrieved": "2026-10-06T02:25:01Z",
    "sha256": "b144982e50e956e67237efe8fe7e803f4fa1a6dcb1707ce7ed48601b300bf075",
    "status": "saved response"
   },
   "crossCheck": {
    "earlierProtParamRetrieval": {
     "file": "src/lib/seq/fixtures/protparam.json",
     "accession": "P01308",
     "source": "ExPASy ProtParam (web.expasy.org/cgi-bin/protparam/protparam_bis.cgi), whole UniProtKB sequence, retrieved 2026-10-05; sequences from rest.uniprot.org FASTA the same day",
     "pI": 5.22,
     "mw": 11980.91,
     "ext": [
      17335,
      16960
     ],
     "agrees": true
    },
    "cTerminalPk": {
     "cTerminalPkPublished": 3.55,
     "pIWithPublishedCTerminalPk": 5.218570709228516,
     "pIWithCTerminalPk355": 5.218570709228516,
     "separatesAtTwoDecimals": false,
     "protparamPrintedEquals": [
      "3.55",
      "published"
     ],
     "call": "Bio.SeqUtils.IsoelectricPoint.IsoelectricPoint(seq).pi(pH=7.0, min_=0.0, max_=14.0), as published and with neg_pKs['Cterm'] = 3.55"
    },
    "biopythonProtParam": {
     "molecularWeight": 11980.786599999992,
     "isoelectricPoint": 5.218581199645995,
     "isoelectricPointAtSearchBound": false,
     "extinctionReduced": 16960,
     "extinctionCystines": 17335,
     "oracleVersion": "1.88",
     "note": "Biopython ProteinAnalysis: average residue masses from Bio.Data.IUPACData; pI by its IsoelectricPoint module (Bjellqvist pK set with the published C-terminal pK of 4.55 for Asp and 4.75 for Glu), which bisects only between pH 4.05 and 12 by default, so a pI outside that range comes back as the bound (isoelectricPointAtSearchBound); epsilon = 5500 W + 1490 Y (+ 125 per cystine). A second oracle, not the expected value."
    }
   },
   "method": {
    "mw": "average mass, ProtParam's residue table (chip id protparam-average)",
    "pI": "Bjellqvist pK set as ProtParam applies it (C-terminal pK 3.55 for every residue), bisection over pH 0-14",
    "epsilon": "pace-1995 (ProtParam: Trp 5500, Tyr 1490, cystine 125; two values)"
   },
   "oracle": "Expasy ProtParam (web form)",
   "oracleVersion": "web service; page and response saved and dated",
   "recordedOn": "2026-10-06",
   "source": "pipeline/sequence-toolkit/reference.py (protein), parsed from pipeline/sequence-toolkit/protparam/P01.html"
  },
  {
   "id": "P02",
   "input": {
    "label": "Aequorea victoria green fluorescent protein",
    "sequence": "MSKGEELFTGVVPILVELDGDVNGHKFSVSGEGEGDATYGKLTLKFICTTGKLPVPWPTLVTTFSYGVQCFSRYPDHMKQHDFFKSAMPEGYVQERTIFFKDDGNYKTRAEVKFEGDTLVNRIELKGIDFKEDGNILGHKLEYNYNSHNVYIMADKQKNGIKVNFKIRHNIEDGSVQLADHYQQNTPIGDGPVLLPDNHYLSTQSALSKDPNEKRDHMVLLEFVTAAGITHGMDELYK",
    "length": 238,
    "nTerminal": "M",
    "cTerminal": "K",
    "counts": {
     "W": 1,
     "Y": 11,
     "C": 2
    },
    "covers": [
     "N-terminal Met",
     "teaching example (GFP)"
    ],
    "source": {
     "database": "UniProtKB",
     "accession": "P42212",
     "entry": "GFP_AEQVI",
     "range": [
      1,
      238
     ],
     "release": "2026_03",
     "releaseDate": "02-September-2026",
     "retrieved": "2026-10-06T02:24:24Z",
     "licence": "CC BY 4.0 (UniProt Consortium)"
    }
   },
   "expected": {
    "numberOfAminoAcids": 238,
    "molecularWeight": "26886.32",
    "theoreticalPI": "5.67",
    "extinctionCystines": 22015,
    "abs01Cystines": "0.819",
    "extinctionReduced": 21890,
    "abs01Reduced": "0.814",
    "formula": "C1205H1848N318O365S8"
   },
   "protparam": {
    "file": "pipeline/sequence-toolkit/protparam/P02.html",
    "retrieved": "2026-10-06T02:25:24Z",
    "sha256": "42bf1ef94cab3d93b7afa7a9f79f81d5c49c4716f6bc969302335f7e74272057",
    "status": "saved response"
   },
   "crossCheck": {
    "earlierProtParamRetrieval": null,
    "cTerminalPk": {
     "cTerminalPkPublished": 3.55,
     "pIWithPublishedCTerminalPk": 5.670490264892578,
     "pIWithCTerminalPk355": 5.670490264892578,
     "separatesAtTwoDecimals": false,
     "protparamPrintedEquals": [
      "3.55",
      "published"
     ],
     "call": "Bio.SeqUtils.IsoelectricPoint.IsoelectricPoint(seq).pi(pH=7.0, min_=0.0, max_=14.0), as published and with neg_pKs['Cterm'] = 3.55"
    },
    "biopythonProtParam": {
     "molecularWeight": 26885.994600000016,
     "isoelectricPoint": 5.6704511642456055,
     "isoelectricPointAtSearchBound": false,
     "extinctionReduced": 21890,
     "extinctionCystines": 22015,
     "oracleVersion": "1.88",
     "note": "Biopython ProteinAnalysis: average residue masses from Bio.Data.IUPACData; pI by its IsoelectricPoint module (Bjellqvist pK set with the published C-terminal pK of 4.55 for Asp and 4.75 for Glu), which bisects only between pH 4.05 and 12 by default, so a pI outside that range comes back as the bound (isoelectricPointAtSearchBound); epsilon = 5500 W + 1490 Y (+ 125 per cystine). A second oracle, not the expected value."
    }
   },
   "method": {
    "mw": "average mass, ProtParam's residue table (chip id protparam-average)",
    "pI": "Bjellqvist pK set as ProtParam applies it (C-terminal pK 3.55 for every residue), bisection over pH 0-14",
    "epsilon": "pace-1995 (ProtParam: Trp 5500, Tyr 1490, cystine 125; two values)"
   },
   "oracle": "Expasy ProtParam (web form)",
   "oracleVersion": "web service; page and response saved and dated",
   "recordedOn": "2026-10-06",
   "source": "pipeline/sequence-toolkit/reference.py (protein), parsed from pipeline/sequence-toolkit/protparam/P02.html"
  },
  {
   "id": "P03",
   "input": {
    "label": "Human ubiquitin (first unit of polyubiquitin-C)",
    "sequence": "MQIFVKTLTGKTITLEVEPSDTIENVKAKIQDKEGIPPDQQRLIFAGKQLEDGRTLSDYNIQKESTLHLVLRLRGG",
    "length": 76,
    "nTerminal": "M",
    "cTerminal": "G",
    "counts": {
     "W": 0,
     "Y": 1,
     "C": 0
    },
    "covers": [
     "no Trp",
     "no Cys (one epsilon value)",
     "N-terminal Met"
    ],
    "source": {
     "database": "UniProtKB",
     "accession": "P0CG48",
     "entry": "UBC_HUMAN",
     "range": [
      1,
      76
     ],
     "release": "2026_03",
     "releaseDate": "02-September-2026",
     "retrieved": "2026-10-06T02:24:23Z",
     "licence": "CC BY 4.0 (UniProt Consortium)"
    }
   },
   "expected": {
    "numberOfAminoAcids": 76,
    "molecularWeight": "8564.84",
    "theoreticalPI": "6.56",
    "extinctionSingle": 1490,
    "abs01Single": "0.174",
    "noTrpWarning": "This protein does not contain any Trp residues. Experience shows that this could result in more than 10% error in the computed extinction coefficient.",
    "formula": "C378H629N105O118S1"
   },
   "protparam": {
    "file": "pipeline/sequence-toolkit/protparam/P03.html",
    "retrieved": "2026-10-06T02:25:28Z",
    "sha256": "218baf89ea6daf2b8a9126a0f7000f79b1b3ca4d219adc355c62d13bb98b0144",
    "status": "saved response"
   },
   "crossCheck": {
    "earlierProtParamRetrieval": null,
    "cTerminalPk": {
     "cTerminalPkPublished": 3.55,
     "pIWithPublishedCTerminalPk": 6.561618804931641,
     "pIWithCTerminalPk355": 6.561618804931641,
     "separatesAtTwoDecimals": false,
     "protparamPrintedEquals": [
      "3.55",
      "published"
     ],
     "call": "Bio.SeqUtils.IsoelectricPoint.IsoelectricPoint(seq).pi(pH=7.0, min_=0.0, max_=14.0), as published and with neg_pKs['Cterm'] = 3.55"
    },
    "biopythonProtParam": {
     "molecularWeight": 8564.735699999997,
     "isoelectricPoint": 6.56157283782959,
     "isoelectricPointAtSearchBound": false,
     "extinctionReduced": 1490,
     "extinctionCystines": 1490,
     "oracleVersion": "1.88",
     "note": "Biopython ProteinAnalysis: average residue masses from Bio.Data.IUPACData; pI by its IsoelectricPoint module (Bjellqvist pK set with the published C-terminal pK of 4.55 for Asp and 4.75 for Glu), which bisects only between pH 4.05 and 12 by default, so a pI outside that range comes back as the bound (isoelectricPointAtSearchBound); epsilon = 5500 W + 1490 Y (+ 125 per cystine). A second oracle, not the expected value."
    }
   },
   "method": {
    "mw": "average mass, ProtParam's residue table (chip id protparam-average)",
    "pI": "Bjellqvist pK set as ProtParam applies it (C-terminal pK 3.55 for every residue), bisection over pH 0-14",
    "epsilon": "pace-1995 (ProtParam: Trp 5500, Tyr 1490, cystine 125; two values)"
   },
   "oracle": "Expasy ProtParam (web form)",
   "oracleVersion": "web service; page and response saved and dated",
   "recordedOn": "2026-10-06",
   "source": "pipeline/sequence-toolkit/reference.py (protein), parsed from pipeline/sequence-toolkit/protparam/P03.html"
  },
  {
   "id": "P04",
   "input": {
    "label": "Hen egg-white lysozyme C, mature chain",
    "sequence": "KVFGRCELAAAMKRHGLDNYRGYSLGNWVCAAKFESNFNTQATNRNTDGSTDYGILQINSRWWCNDGRTPGSRNLCNIPCSALLSSDITASVNCAKKIVSDGNGMNAWVAWRNRCKGTDVQAWIRGCRL",
    "length": 129,
    "nTerminal": "K",
    "cTerminal": "L",
    "counts": {
     "W": 6,
     "Y": 3,
     "C": 8
    },
    "covers": [
     "Cys-rich (8 Cys, 4 cystines)",
     "basic",
     "N-terminal Lys"
    ],
    "source": {
     "database": "UniProtKB",
     "accession": "P00698",
     "entry": "LYSC_CHICK",
     "range": [
      19,
      147
     ],
     "release": "2026_03",
     "releaseDate": "02-September-2026",
     "retrieved": "2026-10-06T02:24:14Z",
     "licence": "CC BY 4.0 (UniProt Consortium)"
    }
   },
   "expected": {
    "numberOfAminoAcids": 129,
    "molecularWeight": "14313.14",
    "theoreticalPI": "9.32",
    "extinctionCystines": 37970,
    "abs01Cystines": "2.653",
    "extinctionReduced": 37470,
    "abs01Reduced": "2.618",
    "formula": "C613H959N193O185S10"
   },
   "protparam": {
    "file": "pipeline/sequence-toolkit/protparam/P04.html",
    "retrieved": "2026-10-06T02:25:32Z",
    "sha256": "086e43d04936bdfc0cd4896ae9774f45dff00d25fd97c0af834b95395608804f",
    "status": "saved response"
   },
   "crossCheck": {
    "earlierProtParamRetrieval": null,
    "cTerminalPk": {
     "cTerminalPkPublished": 3.55,
     "pIWithPublishedCTerminalPk": 9.32376480102539,
     "pIWithCTerminalPk355": 9.32376480102539,
     "separatesAtTwoDecimals": false,
     "protparamPrintedEquals": [
      "3.55",
      "published"
     ],
     "call": "Bio.SeqUtils.IsoelectricPoint.IsoelectricPoint(seq).pi(pH=7.0, min_=0.0, max_=14.0), as published and with neg_pKs['Cterm'] = 3.55"
    },
    "biopythonProtParam": {
     "molecularWeight": 14313.003999999983,
     "isoelectricPoint": 9.323756217956543,
     "isoelectricPointAtSearchBound": false,
     "extinctionReduced": 37470,
     "extinctionCystines": 37970,
     "oracleVersion": "1.88",
     "note": "Biopython ProteinAnalysis: average residue masses from Bio.Data.IUPACData; pI by its IsoelectricPoint module (Bjellqvist pK set with the published C-terminal pK of 4.55 for Asp and 4.75 for Glu), which bisects only between pH 4.05 and 12 by default, so a pI outside that range comes back as the bound (isoelectricPointAtSearchBound); epsilon = 5500 W + 1490 Y (+ 125 per cystine). A second oracle, not the expected value."
    }
   },
   "method": {
    "mw": "average mass, ProtParam's residue table (chip id protparam-average)",
    "pI": "Bjellqvist pK set as ProtParam applies it (C-terminal pK 3.55 for every residue), bisection over pH 0-14",
    "epsilon": "pace-1995 (ProtParam: Trp 5500, Tyr 1490, cystine 125; two values)"
   },
   "oracle": "Expasy ProtParam (web form)",
   "oracleVersion": "web service; page and response saved and dated",
   "recordedOn": "2026-10-06",
   "source": "pipeline/sequence-toolkit/reference.py (protein), parsed from pipeline/sequence-toolkit/protparam/P04.html"
  },
  {
   "id": "P05",
   "input": {
    "label": "Bovine serum albumin, mature chain",
    "sequence": "DTHKSEIAHRFKDLGEEHFKGLVLIAFSQYLQQCPFDEHVKLVNELTEFAKTCVADESHAGCEKSLHTLFGDELCKVASLRETYGDMADCCEKQEPERNECFLSHKDDSPDLPKLKPDPNTLCDEFKADEKKFWGKYLYEIARRHPYFYAPELLYYANKYNGVFQECCQAEDKGACLLPKIETMREKVLASSARQRLRCASIQKFGERALKAWSVARLSQKFPKAEFVEVTKLVTDLTKVHKECCHGDLLECADDRADLAKYICDNQDTISSKLKECCDKPLLEKSHCIAEVEKDAIPENLPPLTADFAEDKDVCKNYQEAKDAFLGSFLYEYSRRHPEYAVSVLLRLAKEYEATLEECCAKDDPHACYSTVFDKLKHLVDEPQNLIKQNCDQFEKLGEYGFQNALIVRYTRKVPQVSTPTLVEVSRSLGKVGTRCCTKPESERMPCTEDYLSLILNRLCVLHEKTPVSEKVTKCCTESLVNRRPCFSALTPDETYVPKAFDEKLFTFHADICTLPDTEKQIKKQTALVELLKHKPKATEEQLKTVMENFVAFVDKCCAADDKEACFAVEGPKLVVSTQTALA",
    "length": 583,
    "nTerminal": "D",
    "cTerminal": "A",
    "counts": {
     "W": 2,
     "Y": 20,
     "C": 35
    },
    "covers": [
     "Cys-rich (35 Cys, odd count)",
     "N-terminal Asp"
    ],
    "source": {
     "database": "UniProtKB",
     "accession": "P02769",
     "entry": "ALBU_BOVIN",
     "range": [
      25,
      607
     ],
     "release": "2026_03",
     "releaseDate": "02-September-2026",
     "retrieved": "2026-10-06T02:24:19Z",
     "licence": "CC BY 4.0 (UniProt Consortium)"
    }
   },
   "expected": {
    "numberOfAminoAcids": 583,
    "molecularWeight": "66432.96",
    "theoreticalPI": "5.60",
    "extinctionCystines": 42925,
    "abs01Cystines": "0.646",
    "extinctionReduced": 40800,
    "abs01Reduced": "0.614",
    "formula": "C2934H4615N781O897S39"
   },
   "protparam": {
    "file": "pipeline/sequence-toolkit/protparam/P05.html",
    "retrieved": "2026-10-06T02:25:36Z",
    "sha256": "7adb92fd48ab48320795aaa23289d633dc8c02e6f427346ab4ff2fba598cca76",
    "status": "saved response"
   },
   "crossCheck": {
    "earlierProtParamRetrieval": null,
    "cTerminalPk": {
     "cTerminalPkPublished": 3.55,
     "pIWithPublishedCTerminalPk": 5.598659515380859,
     "pIWithCTerminalPk355": 5.598659515380859,
     "separatesAtTwoDecimals": false,
     "protparamPrintedEquals": [
      "3.55",
      "published"
     ],
     "call": "Bio.SeqUtils.IsoelectricPoint.IsoelectricPoint(seq).pi(pH=7.0, min_=0.0, max_=14.0), as published and with neg_pKs['Cterm'] = 3.55"
    },
    "biopythonProtParam": {
     "molecularWeight": 66432.26130000017,
     "isoelectricPoint": 5.598663520812988,
     "isoelectricPointAtSearchBound": false,
     "extinctionReduced": 40800,
     "extinctionCystines": 42925,
     "oracleVersion": "1.88",
     "note": "Biopython ProteinAnalysis: average residue masses from Bio.Data.IUPACData; pI by its IsoelectricPoint module (Bjellqvist pK set with the published C-terminal pK of 4.55 for Asp and 4.75 for Glu), which bisects only between pH 4.05 and 12 by default, so a pI outside that range comes back as the bound (isoelectricPointAtSearchBound); epsilon = 5500 W + 1490 Y (+ 125 per cystine). A second oracle, not the expected value."
    }
   },
   "method": {
    "mw": "average mass, ProtParam's residue table (chip id protparam-average)",
    "pI": "Bjellqvist pK set as ProtParam applies it (C-terminal pK 3.55 for every residue), bisection over pH 0-14",
    "epsilon": "pace-1995 (ProtParam: Trp 5500, Tyr 1490, cystine 125; two values)"
   },
   "oracle": "Expasy ProtParam (web form)",
   "oracleVersion": "web service; page and response saved and dated",
   "recordedOn": "2026-10-06",
   "source": "pipeline/sequence-toolkit/reference.py (protein), parsed from pipeline/sequence-toolkit/protparam/P05.html"
  },
  {
   "id": "P06",
   "input": {
    "label": "Human metallothionein-2",
    "sequence": "MDPNCSCAAGDSCTCAGSCKCKECKCTSCKKSCCSCCPVGCAKCAQGCICKGASDKCSCCA",
    "length": 61,
    "nTerminal": "M",
    "cTerminal": "A",
    "counts": {
     "W": 0,
     "Y": 0,
     "C": 20
    },
    "covers": [
     "Cys-rich (20 Cys)",
     "no Trp or Tyr (epsilon from cystines only)",
     "N-terminal Met"
    ],
    "source": {
     "database": "UniProtKB",
     "accession": "P02795",
     "entry": "MT2_HUMAN",
     "range": [
      1,
      61
     ],
     "release": "2026_03",
     "releaseDate": "02-September-2026",
     "retrieved": "2026-10-06T02:24:19Z",
     "licence": "CC BY 4.0 (UniProt Consortium)"
    }
   },
   "expected": {
    "numberOfAminoAcids": 61,
    "molecularWeight": "6042.16",
    "theoreticalPI": "8.23",
    "extinctionCystines": 1250,
    "abs01Cystines": "0.207",
    "extinctionReduced": 0,
    "abs01Reduced": "0.000",
    "noTrpWarning": "This protein does not contain any Trp residues. Experience shows that this could result in more than 10% error in the computed extinction coefficient.",
    "formula": "C223H381N71O82S21"
   },
   "protparam": {
    "file": "pipeline/sequence-toolkit/protparam/P06.html",
    "retrieved": "2026-10-06T02:25:40Z",
    "sha256": "450773c4dcc8e2735d5e076950c6ff7efb65256b43ab2a9be8595d2f5efa8169",
    "status": "saved response"
   },
   "crossCheck": {
    "earlierProtParamRetrieval": null,
    "cTerminalPk": {
     "cTerminalPkPublished": 3.55,
     "pIWithPublishedCTerminalPk": 8.23305892944336,
     "pIWithCTerminalPk355": 8.23305892944336,
     "separatesAtTwoDecimals": false,
     "protparamPrintedEquals": [
      "3.55",
      "published"
     ],
     "call": "Bio.SeqUtils.IsoelectricPoint.IsoelectricPoint(seq).pi(pH=7.0, min_=0.0, max_=14.0), as published and with neg_pKs['Cterm'] = 3.55"
    },
    "biopythonProtParam": {
     "molecularWeight": 6042.202700000002,
     "isoelectricPoint": 8.233080101013183,
     "isoelectricPointAtSearchBound": false,
     "extinctionReduced": 0,
     "extinctionCystines": 1250,
     "oracleVersion": "1.88",
     "note": "Biopython ProteinAnalysis: average residue masses from Bio.Data.IUPACData; pI by its IsoelectricPoint module (Bjellqvist pK set with the published C-terminal pK of 4.55 for Asp and 4.75 for Glu), which bisects only between pH 4.05 and 12 by default, so a pI outside that range comes back as the bound (isoelectricPointAtSearchBound); epsilon = 5500 W + 1490 Y (+ 125 per cystine). A second oracle, not the expected value."
    }
   },
   "method": {
    "mw": "average mass, ProtParam's residue table (chip id protparam-average)",
    "pI": "Bjellqvist pK set as ProtParam applies it (C-terminal pK 3.55 for every residue), bisection over pH 0-14",
    "epsilon": "pace-1995 (ProtParam: Trp 5500, Tyr 1490, cystine 125; two values)"
   },
   "oracle": "Expasy ProtParam (web form)",
   "oracleVersion": "web service; page and response saved and dated",
   "recordedOn": "2026-10-06",
   "source": "pipeline/sequence-toolkit/reference.py (protein), parsed from pipeline/sequence-toolkit/protparam/P06.html"
  },
  {
   "id": "P07",
   "input": {
    "label": "Human thymosin beta-4, mature chain",
    "sequence": "SDKPDMAEIEKFDKSKLKKTETQEKNPLPSKETIEQEKQAGES",
    "length": 43,
    "nTerminal": "S",
    "cTerminal": "S",
    "counts": {
     "W": 0,
     "Y": 0,
     "C": 0
    },
    "covers": [
     "no Trp, Tyr or Cys",
     "N-terminal Ser"
    ],
    "source": {
     "database": "UniProtKB",
     "accession": "P62328",
     "entry": "TYB4_HUMAN",
     "range": [
      2,
      44
     ],
     "release": "2026_03",
     "releaseDate": "02-September-2026",
     "retrieved": "2026-10-06T02:24:26Z",
     "licence": "CC BY 4.0 (UniProt Consortium)"
    }
   },
   "expected": {
    "numberOfAminoAcids": 43,
    "molecularWeight": "4921.46",
    "theoreticalPI": "5.02",
    "notVisibleByUV": true,
    "message": "As there are no Trp, Tyr or Cys in the region considered, your protein should not be visible by UV spectrophotometry.",
    "formula": "C210H348N56O77S1"
   },
   "protparam": {
    "file": "pipeline/sequence-toolkit/protparam/P07.html",
    "retrieved": "2026-10-06T02:25:43Z",
    "sha256": "9536fddeb80f4b699d3284a6e8ea9eea8c153f8665bc364feddab98fb752bd70",
    "status": "saved response"
   },
   "crossCheck": {
    "earlierProtParamRetrieval": null,
    "cTerminalPk": {
     "cTerminalPkPublished": 3.55,
     "pIWithPublishedCTerminalPk": 5.021984100341797,
     "pIWithCTerminalPk355": 5.021984100341797,
     "separatesAtTwoDecimals": false,
     "protparamPrintedEquals": [
      "3.55",
      "published"
     ],
     "call": "Bio.SeqUtils.IsoelectricPoint.IsoelectricPoint(seq).pi(pH=7.0, min_=0.0, max_=14.0), as published and with neg_pKs['Cterm'] = 3.55"
    },
    "biopythonProtParam": {
     "molecularWeight": 4921.404200000001,
     "isoelectricPoint": 5.021975135803221,
     "isoelectricPointAtSearchBound": false,
     "extinctionReduced": 0,
     "extinctionCystines": 0,
     "oracleVersion": "1.88",
     "note": "Biopython ProteinAnalysis: average residue masses from Bio.Data.IUPACData; pI by its IsoelectricPoint module (Bjellqvist pK set with the published C-terminal pK of 4.55 for Asp and 4.75 for Glu), which bisects only between pH 4.05 and 12 by default, so a pI outside that range comes back as the bound (isoelectricPointAtSearchBound); epsilon = 5500 W + 1490 Y (+ 125 per cystine). A second oracle, not the expected value."
    }
   },
   "method": {
    "mw": "average mass, ProtParam's residue table (chip id protparam-average)",
    "pI": "Bjellqvist pK set as ProtParam applies it (C-terminal pK 3.55 for every residue), bisection over pH 0-14",
    "epsilon": "pace-1995 (ProtParam: Trp 5500, Tyr 1490, cystine 125; two values)"
   },
   "oracle": "Expasy ProtParam (web form)",
   "oracleVersion": "web service; page and response saved and dated",
   "recordedOn": "2026-10-06",
   "source": "pipeline/sequence-toolkit/reference.py (protein), parsed from pipeline/sequence-toolkit/protparam/P07.html"
  },
  {
   "id": "P08",
   "input": {
    "label": "Human prothymosin alpha, N-terminally processed chain",
    "sequence": "SDAAVDTSSEITTKDLKEKKEVVEEAENGRDAPANGNAENEENGEQEADNEVDEEEEEGGEEEEEEEEGDGEEEDGDEDEEAESATGKRAAEDDEDDDVDTKKQKTDEDD",
    "length": 110,
    "nTerminal": "S",
    "cTerminal": "D",
    "counts": {
     "W": 0,
     "Y": 0,
     "C": 0
    },
    "covers": [
     "no Trp, Tyr or Cys",
     "N-terminal Ser",
     "C-terminal Asp",
     "very acidic"
    ],
    "source": {
     "database": "UniProtKB",
     "accession": "P06454",
     "entry": "PTMA_HUMAN",
     "range": [
      2,
      111
     ],
     "release": "2026_03",
     "releaseDate": "02-September-2026",
     "retrieved": "2026-10-06T02:24:21Z",
     "licence": "CC BY 4.0 (UniProt Consortium)"
    }
   },
   "expected": {
    "numberOfAminoAcids": 110,
    "molecularWeight": "12071.77",
    "theoreticalPI": "3.66",
    "notVisibleByUV": true,
    "message": "As there are no Trp, Tyr or Cys in the region considered, your protein should not be visible by UV spectrophotometry.",
    "formula": "C474H732N132O237",
    "pIMustNotEqual": [
     0.0,
     4.05,
     12.0,
     14.0
    ],
    "pINote": "ProtParam's pI 3.66 lies outside Biopython's default bisection range 4.05-12.0, which returns its bound (4.05); the engine bisects over pH 0-14 and must not return a bound of either range"
   },
   "protparam": {
    "file": "pipeline/sequence-toolkit/protparam/P08.html",
    "retrieved": "2026-10-06T02:25:47Z",
    "sha256": "8d2bac153cfac3a7d6745c8b62250d312971ae8e18066375abf8705f06f236ef",
    "status": "saved response"
   },
   "crossCheck": {
    "earlierProtParamRetrieval": null,
    "cTerminalPk": {
     "cTerminalPkPublished": 4.55,
     "pIWithPublishedCTerminalPk": 3.6860389709472656,
     "pIWithCTerminalPk355": 3.662700653076172,
     "separatesAtTwoDecimals": true,
     "protparamPrintedEquals": [
      "3.55"
     ],
     "call": "Bio.SeqUtils.IsoelectricPoint.IsoelectricPoint(seq).pi(pH=7.0, min_=0.0, max_=14.0), as published and with neg_pKs['Cterm'] = 3.55"
    },
    "biopythonProtParam": {
     "molecularWeight": 12071.62629999999,
     "isoelectricPoint": 4.0500284194946286,
     "isoelectricPointAtSearchBound": true,
     "extinctionReduced": 0,
     "extinctionCystines": 0,
     "oracleVersion": "1.88",
     "note": "Biopython ProteinAnalysis: average residue masses from Bio.Data.IUPACData; pI by its IsoelectricPoint module (Bjellqvist pK set with the published C-terminal pK of 4.55 for Asp and 4.75 for Glu), which bisects only between pH 4.05 and 12 by default, so a pI outside that range comes back as the bound (isoelectricPointAtSearchBound); epsilon = 5500 W + 1490 Y (+ 125 per cystine). A second oracle, not the expected value."
    }
   },
   "method": {
    "mw": "average mass, ProtParam's residue table (chip id protparam-average)",
    "pI": "Bjellqvist pK set as ProtParam applies it (C-terminal pK 3.55 for every residue), bisection over pH 0-14",
    "epsilon": "pace-1995 (ProtParam: Trp 5500, Tyr 1490, cystine 125; two values)"
   },
   "oracle": "Expasy ProtParam (web form)",
   "oracleVersion": "web service; page and response saved and dated",
   "recordedOn": "2026-10-06",
   "source": "pipeline/sequence-toolkit/reference.py (protein), parsed from pipeline/sequence-toolkit/protparam/P08.html"
  },
  {
   "id": "P09",
   "input": {
    "label": "Human macrophage migration inhibitory factor, mature chain",
    "sequence": "PMFIVNTNVPRASVPDGFLSELTQQLAQATGKPPQYIAVHVVPDQLMAFGGSSEPCALCSLHSIGKIGGAQNRSYSKLLCGLLAERLRISPDRVYINYYDMNAANVGWNNSTFA",
    "length": 114,
    "nTerminal": "P",
    "cTerminal": "A",
    "counts": {
     "W": 1,
     "Y": 5,
     "C": 3
    },
    "covers": [
     "N-terminal Pro"
    ],
    "source": {
     "database": "UniProtKB",
     "accession": "P14174",
     "entry": "MIF_HUMAN",
     "range": [
      2,
      115
     ],
     "release": "2026_03",
     "releaseDate": "02-September-2026",
     "retrieved": "2026-10-06T02:24:23Z",
     "licence": "CC BY 4.0 (UniProt Consortium)"
    }
   },
   "expected": {
    "numberOfAminoAcids": 114,
    "molecularWeight": "12345.11",
    "theoreticalPI": "8.24",
    "extinctionCystines": 13075,
    "abs01Cystines": "1.059",
    "extinctionReduced": 12950,
    "abs01Reduced": "1.049",
    "formula": "C548H857N151O162S6"
   },
   "protparam": {
    "file": "pipeline/sequence-toolkit/protparam/P09.html",
    "retrieved": "2026-10-06T02:25:51Z",
    "sha256": "4d1f8bb3f2685b6c4728479bacf7fb4126a748dce09a5698befb8625f79a441b",
    "status": "saved response"
   },
   "crossCheck": {
    "earlierProtParamRetrieval": null,
    "cTerminalPk": {
     "cTerminalPkPublished": 3.55,
     "pIWithPublishedCTerminalPk": 8.239253997802734,
     "pIWithCTerminalPk355": 8.239253997802734,
     "separatesAtTwoDecimals": false,
     "protparamPrintedEquals": [
      "3.55",
      "published"
     ],
     "call": "Bio.SeqUtils.IsoelectricPoint.IsoelectricPoint(seq).pi(pH=7.0, min_=0.0, max_=14.0), as published and with neg_pKs['Cterm'] = 3.55"
    },
    "biopythonProtParam": {
     "molecularWeight": 12344.970699999985,
     "isoelectricPoint": 8.239269065856934,
     "isoelectricPointAtSearchBound": false,
     "extinctionReduced": 12950,
     "extinctionCystines": 13075,
     "oracleVersion": "1.88",
     "note": "Biopython ProteinAnalysis: average residue masses from Bio.Data.IUPACData; pI by its IsoelectricPoint module (Bjellqvist pK set with the published C-terminal pK of 4.55 for Asp and 4.75 for Glu), which bisects only between pH 4.05 and 12 by default, so a pI outside that range comes back as the bound (isoelectricPointAtSearchBound); epsilon = 5500 W + 1490 Y (+ 125 per cystine). A second oracle, not the expected value."
    }
   },
   "method": {
    "mw": "average mass, ProtParam's residue table (chip id protparam-average)",
    "pI": "Bjellqvist pK set as ProtParam applies it (C-terminal pK 3.55 for every residue), bisection over pH 0-14",
    "epsilon": "pace-1995 (ProtParam: Trp 5500, Tyr 1490, cystine 125; two values)"
   },
   "oracle": "Expasy ProtParam (web form)",
   "oracleVersion": "web service; page and response saved and dated",
   "recordedOn": "2026-10-06",
   "source": "pipeline/sequence-toolkit/reference.py (protein), parsed from pipeline/sequence-toolkit/protparam/P09.html"
  },
  {
   "id": "P10",
   "input": {
    "label": "Human hemoglobin subunit alpha, mature chain",
    "sequence": "VLSPADKTNVKAAWGKVGAHAGEYGAEALERMFLSFPTTKTYFPHFDLSHGSAQVKGHGKKVADALTNAVAHVDDMPNALSALSDLHAHKLRVDPVNFKLLSHCLLVTLAAHLPAEFTPAVHASLDKFLASVSTVLTSKYR",
    "length": 141,
    "nTerminal": "V",
    "cTerminal": "R",
    "counts": {
     "W": 1,
     "Y": 3,
     "C": 1
    },
    "covers": [
     "N-terminal Val",
     "1 Cys"
    ],
    "source": {
     "database": "UniProtKB",
     "accession": "P69905",
     "entry": "HBA_HUMAN",
     "range": [
      2,
      142
     ],
     "release": "2026_03",
     "releaseDate": "02-September-2026",
     "retrieved": "2026-10-06T02:24:27Z",
     "licence": "CC BY 4.0 (UniProt Consortium)"
    }
   },
   "expected": {
    "numberOfAminoAcids": 141,
    "molecularWeight": "15126.36",
    "theoreticalPI": "8.73",
    "extinctionCystines": 9970,
    "abs01Cystines": "0.659",
    "extinctionReduced": 9970,
    "abs01Reduced": "0.659",
    "formula": "C685H1071N187O194S3"
   },
   "protparam": {
    "file": "pipeline/sequence-toolkit/protparam/P10.html",
    "retrieved": "2026-10-06T02:25:55Z",
    "sha256": "629105f70d100535ea477b83fbfe517474c3b375a7153359d2760506935197ed",
    "status": "saved response"
   },
   "crossCheck": {
    "earlierProtParamRetrieval": null,
    "cTerminalPk": {
     "cTerminalPkPublished": 3.55,
     "pIWithPublishedCTerminalPk": 8.731067657470703,
     "pIWithCTerminalPk355": 8.731067657470703,
     "separatesAtTwoDecimals": false,
     "protparamPrintedEquals": [
      "3.55",
      "published"
     ],
     "call": "Bio.SeqUtils.IsoelectricPoint.IsoelectricPoint(seq).pi(pH=7.0, min_=0.0, max_=14.0), as published and with neg_pKs['Cterm'] = 3.55"
    },
    "biopythonProtParam": {
     "molecularWeight": 15126.163099999983,
     "isoelectricPoint": 8.73109836578369,
     "isoelectricPointAtSearchBound": false,
     "extinctionReduced": 9970,
     "extinctionCystines": 9970,
     "oracleVersion": "1.88",
     "note": "Biopython ProteinAnalysis: average residue masses from Bio.Data.IUPACData; pI by its IsoelectricPoint module (Bjellqvist pK set with the published C-terminal pK of 4.55 for Asp and 4.75 for Glu), which bisects only between pH 4.05 and 12 by default, so a pI outside that range comes back as the bound (isoelectricPointAtSearchBound); epsilon = 5500 W + 1490 Y (+ 125 per cystine). A second oracle, not the expected value."
    }
   },
   "method": {
    "mw": "average mass, ProtParam's residue table (chip id protparam-average)",
    "pI": "Bjellqvist pK set as ProtParam applies it (C-terminal pK 3.55 for every residue), bisection over pH 0-14",
    "epsilon": "pace-1995 (ProtParam: Trp 5500, Tyr 1490, cystine 125; two values)"
   },
   "oracle": "Expasy ProtParam (web form)",
   "oracleVersion": "web service; page and response saved and dated",
   "recordedOn": "2026-10-06",
   "source": "pipeline/sequence-toolkit/reference.py (protein), parsed from pipeline/sequence-toolkit/protparam/P10.html"
  },
  {
   "id": "P11",
   "input": {
    "label": "Human myoglobin, mature chain",
    "sequence": "GLSDGEWQLVLNVWGKVEADIPGHGQEVLIRLFKGHPETLEKFDKFKHLKSEDEMKASEDLKKHGATVLTALGGILKKKGHHEAEIKPLAQSHATKHKIPVKYLEFISECIIQVLQSKHPGDFGADAQGAMNKALELFRKDMASNYKELGFQG",
    "length": 153,
    "nTerminal": "G",
    "cTerminal": "G",
    "counts": {
     "W": 2,
     "Y": 2,
     "C": 1
    },
    "covers": [
     "N-terminal Gly",
     "1 Cys"
    ],
    "source": {
     "database": "UniProtKB",
     "accession": "P02144",
     "entry": "MYG_HUMAN",
     "range": [
      2,
      154
     ],
     "release": "2026_03",
     "releaseDate": "02-September-2026",
     "retrieved": "2026-10-06T02:24:18Z",
     "licence": "CC BY 4.0 (UniProt Consortium)"
    }
   },
   "expected": {
    "numberOfAminoAcids": 153,
    "molecularWeight": "17052.61",
    "theoreticalPI": "7.29",
    "extinctionCystines": 13980,
    "abs01Cystines": "0.820",
    "extinctionReduced": 13980,
    "abs01Reduced": "0.820",
    "formula": "C769H1215N209O221S4"
   },
   "protparam": {
    "file": "pipeline/sequence-toolkit/protparam/P11.html",
    "retrieved": "2026-10-06T02:25:59Z",
    "sha256": "05266d2ba13926a1a531cdb1d7da66b27e37279dda387a9aa2294989094765d0",
    "status": "saved response"
   },
   "crossCheck": {
    "earlierProtParamRetrieval": null,
    "cTerminalPk": {
     "cTerminalPkPublished": 3.55,
     "pIWithPublishedCTerminalPk": 7.291088104248047,
     "pIWithCTerminalPk355": 7.291088104248047,
     "separatesAtTwoDecimals": false,
     "protparamPrintedEquals": [
      "3.55",
      "published"
     ],
     "call": "Bio.SeqUtils.IsoelectricPoint.IsoelectricPoint(seq).pi(pH=7.0, min_=0.0, max_=14.0), as published and with neg_pKs['Cterm'] = 3.55"
    },
    "biopythonProtParam": {
     "molecularWeight": 17052.401499999978,
     "isoelectricPoint": 7.291101264953612,
     "isoelectricPointAtSearchBound": false,
     "extinctionReduced": 13980,
     "extinctionCystines": 13980,
     "oracleVersion": "1.88",
     "note": "Biopython ProteinAnalysis: average residue masses from Bio.Data.IUPACData; pI by its IsoelectricPoint module (Bjellqvist pK set with the published C-terminal pK of 4.55 for Asp and 4.75 for Glu), which bisects only between pH 4.05 and 12 by default, so a pI outside that range comes back as the bound (isoelectricPointAtSearchBound); epsilon = 5500 W + 1490 Y (+ 125 per cystine). A second oracle, not the expected value."
    }
   },
   "method": {
    "mw": "average mass, ProtParam's residue table (chip id protparam-average)",
    "pI": "Bjellqvist pK set as ProtParam applies it (C-terminal pK 3.55 for every residue), bisection over pH 0-14",
    "epsilon": "pace-1995 (ProtParam: Trp 5500, Tyr 1490, cystine 125; two values)"
   },
   "oracle": "Expasy ProtParam (web form)",
   "oracleVersion": "web service; page and response saved and dated",
   "recordedOn": "2026-10-06",
   "source": "pipeline/sequence-toolkit/reference.py (protein), parsed from pipeline/sequence-toolkit/protparam/P11.html"
  },
  {
   "id": "P12",
   "input": {
    "label": "Human cytochrome c, mature chain",
    "sequence": "GDVEKGKKIFIMKCSQCHTVEKGGKHKTGPNLHGLFGRKTGQAPGYSYTAANKNKGIIWGEDTLMEYLENPKKYIPGTKMIFVGIKKKEERADLIAYLKKATNE",
    "length": 104,
    "nTerminal": "G",
    "cTerminal": "E",
    "counts": {
     "W": 1,
     "Y": 5,
     "C": 2
    },
    "covers": [
     "C-terminal Glu",
     "basic"
    ],
    "source": {
     "database": "UniProtKB",
     "accession": "P99999",
     "entry": "CYC_HUMAN",
     "range": [
      2,
      105
     ],
     "release": "2026_03",
     "releaseDate": "02-September-2026",
     "retrieved": "2026-10-06T02:24:27Z",
     "licence": "CC BY 4.0 (UniProt Consortium)"
    }
   },
   "expected": {
    "numberOfAminoAcids": 104,
    "molecularWeight": "11617.53",
    "theoreticalPI": "9.59",
    "extinctionCystines": 13075,
    "abs01Cystines": "1.125",
    "extinctionReduced": 12950,
    "abs01Reduced": "1.115",
    "formula": "C521H836N142O148S5"
   },
   "protparam": {
    "file": "pipeline/sequence-toolkit/protparam/P12.html",
    "retrieved": "2026-10-06T02:26:03Z",
    "sha256": "5c461111334c829ce5bb38b32728f377bfadb48a81c325e7cba5f5c859552906",
    "status": "saved response"
   },
   "crossCheck": {
    "earlierProtParamRetrieval": null,
    "cTerminalPk": {
     "cTerminalPkPublished": 4.75,
     "pIWithPublishedCTerminalPk": 9.587215423583984,
     "pIWithCTerminalPk355": 9.587215423583984,
     "separatesAtTwoDecimals": false,
     "protparamPrintedEquals": [
      "3.55",
      "published"
     ],
     "call": "Bio.SeqUtils.IsoelectricPoint.IsoelectricPoint(seq).pi(pH=7.0, min_=0.0, max_=14.0), as published and with neg_pKs['Cterm'] = 3.55"
    },
    "biopythonProtParam": {
     "molecularWeight": 11617.399099999991,
     "isoelectricPoint": 9.58723850250244,
     "isoelectricPointAtSearchBound": false,
     "extinctionReduced": 12950,
     "extinctionCystines": 13075,
     "oracleVersion": "1.88",
     "note": "Biopython ProteinAnalysis: average residue masses from Bio.Data.IUPACData; pI by its IsoelectricPoint module (Bjellqvist pK set with the published C-terminal pK of 4.55 for Asp and 4.75 for Glu), which bisects only between pH 4.05 and 12 by default, so a pI outside that range comes back as the bound (isoelectricPointAtSearchBound); epsilon = 5500 W + 1490 Y (+ 125 per cystine). A second oracle, not the expected value."
    }
   },
   "method": {
    "mw": "average mass, ProtParam's residue table (chip id protparam-average)",
    "pI": "Bjellqvist pK set as ProtParam applies it (C-terminal pK 3.55 for every residue), bisection over pH 0-14",
    "epsilon": "pace-1995 (ProtParam: Trp 5500, Tyr 1490, cystine 125; two values)"
   },
   "oracle": "Expasy ProtParam (web form)",
   "oracleVersion": "web service; page and response saved and dated",
   "recordedOn": "2026-10-06",
   "source": "pipeline/sequence-toolkit/reference.py (protein), parsed from pipeline/sequence-toolkit/protparam/P12.html"
  },
  {
   "id": "P13",
   "input": {
    "label": "His6-TEV-EGFR kinase domain (696-1022) L858R construct, before TEV cleavage",
    "sequence": "MGSSHHHHHHSSGENLYFQSGEAPNQALLRILKETEFKKIKVLGSGAFGTVYKGLWIPEGEKVKIPVAIKELREATSPKANKEILDEAYVMASVDNPHVCRLLGICLTSTVQLITQLMPFGCLLDYVREHKDNIGSQYLLNWCVQIAKGMNYLEDRRLVHRDLAARNVLVKTPQHVKITDFGRAKLLGAEEKEYHAEGGKVPIKWMALESILHRIYTHQSDVWSYGVTVWELMTFGSKPYDGIPASEISSILEKGERLPQPPICTIDVYMIMVKCWMIDADSRPKFRELIIEFSKMARDPQRYLVIQGDERMHLPSPTDSNFYRALMDEEDMDDVVDADEYLIPQQG",
    "length": 347,
    "nTerminal": "M",
    "cTerminal": "G",
    "counts": {
     "W": 6,
     "Y": 14,
     "C": 6
    },
    "covers": [
     "His6-TEV construct before cleavage",
     "N-terminal Met",
     "J2 case (p.L858R)"
    ],
    "source": {
     "designed": true,
     "construct": "MGSSHHHHHHSSGENLYFQ (His6 tag and TEV site ENLYFQ) | S (P1' residue left after cleavage) | EGFR 696-1022 L858R",
     "cleavage": "TEV protease cuts between Q and S of ENLYFQ|S; the product after cleavage starts with S",
     "state": "before cleavage",
     "insert": {
      "database": "UniProtKB",
      "accession": "P00533",
      "entry": "EGFR_HUMAN",
      "range": [
       696,
       1022
      ],
      "mutation": "p.L858R (precursor numbering)",
      "release": "2026_03",
      "releaseDate": "02-September-2026",
      "retrieved": "2026-10-06T02:24:13Z",
      "licence": "CC BY 4.0 (UniProt Consortium)"
     },
     "note": "Designed for this fixture: a common His6-TEV arrangement, not a specific commercial vector. EGFR 696-1022 is a kinase-domain construct used in the literature (judgement)."
    }
   },
   "expected": {
    "numberOfAminoAcids": 347,
    "molecularWeight": "39598.59",
    "theoreticalPI": "5.97",
    "extinctionCystines": 54235,
    "abs01Cystines": "1.370",
    "extinctionReduced": 53860,
    "abs01Reduced": "1.360",
    "formula": "C1772H2779N477O514S19"
   },
   "protparam": {
    "file": "pipeline/sequence-toolkit/protparam/P13.html",
    "retrieved": "2026-10-06T02:26:07Z",
    "sha256": "3a645c4145585808d4ea50dab988907e5d36aff349086577c57d90ca4faf38ac",
    "status": "saved response"
   },
   "crossCheck": {
    "earlierProtParamRetrieval": null,
    "cTerminalPk": {
     "cTerminalPkPublished": 3.55,
     "pIWithPublishedCTerminalPk": 5.972927093505859,
     "pIWithCTerminalPk355": 5.972927093505859,
     "separatesAtTwoDecimals": false,
     "protparamPrintedEquals": [
      "3.55",
      "published"
     ],
     "call": "Bio.SeqUtils.IsoelectricPoint.IsoelectricPoint(seq).pi(pH=7.0, min_=0.0, max_=14.0), as published and with neg_pKs['Cterm'] = 3.55"
    },
    "biopythonProtParam": {
     "molecularWeight": 39598.143500000064,
     "isoelectricPoint": 5.972891426086425,
     "isoelectricPointAtSearchBound": false,
     "extinctionReduced": 53860,
     "extinctionCystines": 54235,
     "oracleVersion": "1.88",
     "note": "Biopython ProteinAnalysis: average residue masses from Bio.Data.IUPACData; pI by its IsoelectricPoint module (Bjellqvist pK set with the published C-terminal pK of 4.55 for Asp and 4.75 for Glu), which bisects only between pH 4.05 and 12 by default, so a pI outside that range comes back as the bound (isoelectricPointAtSearchBound); epsilon = 5500 W + 1490 Y (+ 125 per cystine). A second oracle, not the expected value."
    }
   },
   "method": {
    "mw": "average mass, ProtParam's residue table (chip id protparam-average)",
    "pI": "Bjellqvist pK set as ProtParam applies it (C-terminal pK 3.55 for every residue), bisection over pH 0-14",
    "epsilon": "pace-1995 (ProtParam: Trp 5500, Tyr 1490, cystine 125; two values)"
   },
   "oracle": "Expasy ProtParam (web form)",
   "oracleVersion": "web service; page and response saved and dated",
   "recordedOn": "2026-10-06",
   "source": "pipeline/sequence-toolkit/reference.py (protein), parsed from pipeline/sequence-toolkit/protparam/P13.html"
  },
  {
   "id": "P14",
   "input": {
    "label": "EGFR kinase domain (696-1022) L858R after TEV cleavage",
    "sequence": "SGEAPNQALLRILKETEFKKIKVLGSGAFGTVYKGLWIPEGEKVKIPVAIKELREATSPKANKEILDEAYVMASVDNPHVCRLLGICLTSTVQLITQLMPFGCLLDYVREHKDNIGSQYLLNWCVQIAKGMNYLEDRRLVHRDLAARNVLVKTPQHVKITDFGRAKLLGAEEKEYHAEGGKVPIKWMALESILHRIYTHQSDVWSYGVTVWELMTFGSKPYDGIPASEISSILEKGERLPQPPICTIDVYMIMVKCWMIDADSRPKFRELIIEFSKMARDPQRYLVIQGDERMHLPSPTDSNFYRALMDEEDMDDVVDADEYLIPQQG",
    "length": 328,
    "nTerminal": "S",
    "cTerminal": "G",
    "counts": {
     "W": 6,
     "Y": 13,
     "C": 6
    },
    "covers": [
     "His6-TEV construct after cleavage",
     "N-terminal Ser",
     "J2 case (p.L858R)"
    ],
    "source": {
     "designed": true,
     "construct": "MGSSHHHHHHSSGENLYFQ (His6 tag and TEV site ENLYFQ) | S (P1' residue left after cleavage) | EGFR 696-1022 L858R",
     "cleavage": "TEV protease cuts between Q and S of ENLYFQ|S; the product after cleavage starts with S",
     "state": "after cleavage",
     "insert": {
      "database": "UniProtKB",
      "accession": "P00533",
      "entry": "EGFR_HUMAN",
      "range": [
       696,
       1022
      ],
      "mutation": "p.L858R (precursor numbering)",
      "release": "2026_03",
      "releaseDate": "02-September-2026",
      "retrieved": "2026-10-06T02:24:13Z",
      "licence": "CC BY 4.0 (UniProt Consortium)"
     },
     "note": "Designed for this fixture: a common His6-TEV arrangement, not a specific commercial vector. EGFR 696-1022 is a kinase-domain construct used in the literature (judgement)."
    }
   },
   "expected": {
    "numberOfAminoAcids": 328,
    "molecularWeight": "37387.27",
    "theoreticalPI": "5.70",
    "extinctionCystines": 52745,
    "abs01Cystines": "1.411",
    "extinctionReduced": 52370,
    "abs01Reduced": "1.401",
    "formula": "C1677H2652N444O486S18"
   },
   "protparam": {
    "file": "pipeline/sequence-toolkit/protparam/P14.html",
    "retrieved": "2026-10-06T02:26:11Z",
    "sha256": "55a3a045ad4bec656adec7531dcf0b85e16aa6f8bc0cfc1f4dcccd58c5541523",
    "status": "saved response"
   },
   "crossCheck": {
    "earlierProtParamRetrieval": null,
    "cTerminalPk": {
     "cTerminalPkPublished": 3.55,
     "pIWithPublishedCTerminalPk": 5.704456329345703,
     "pIWithCTerminalPk355": 5.704456329345703,
     "separatesAtTwoDecimals": false,
     "protparamPrintedEquals": [
      "3.55",
      "published"
     ],
     "call": "Bio.SeqUtils.IsoelectricPoint.IsoelectricPoint(seq).pi(pH=7.0, min_=0.0, max_=14.0), as published and with neg_pKs['Cterm'] = 3.55"
    },
    "biopythonProtParam": {
     "molecularWeight": 37386.84950000008,
     "isoelectricPoint": 5.704440879821779,
     "isoelectricPointAtSearchBound": false,
     "extinctionReduced": 52370,
     "extinctionCystines": 52745,
     "oracleVersion": "1.88",
     "note": "Biopython ProteinAnalysis: average residue masses from Bio.Data.IUPACData; pI by its IsoelectricPoint module (Bjellqvist pK set with the published C-terminal pK of 4.55 for Asp and 4.75 for Glu), which bisects only between pH 4.05 and 12 by default, so a pI outside that range comes back as the bound (isoelectricPointAtSearchBound); epsilon = 5500 W + 1490 Y (+ 125 per cystine). A second oracle, not the expected value."
    }
   },
   "method": {
    "mw": "average mass, ProtParam's residue table (chip id protparam-average)",
    "pI": "Bjellqvist pK set as ProtParam applies it (C-terminal pK 3.55 for every residue), bisection over pH 0-14",
    "epsilon": "pace-1995 (ProtParam: Trp 5500, Tyr 1490, cystine 125; two values)"
   },
   "oracle": "Expasy ProtParam (web form)",
   "oracleVersion": "web service; page and response saved and dated",
   "recordedOn": "2026-10-06",
   "source": "pipeline/sequence-toolkit/reference.py (protein), parsed from pipeline/sequence-toolkit/protparam/P14.html"
  },
  {
   "id": "P15",
   "input": {
    "label": "Human chromodomain-helicase-DNA-binding protein 3 (2,000 residues)",
    "sequence": "MKAADTVILWARSKNDQLRISFPPGLCWGDRMPDKDDIRLLPSALGVKKRKRGPKKQKENKPGKPRKRKKRDSEEEFGSERDEYREKSESGGSEYGTGPGRKRRRKHREKKEKKTKRRKKGEGDGGQKQVEQKSSATLLLTWGLEDVEHVFSEEDYHTLTNYKAFSQFMRPLIAKKNPKIPMSKMMTILGAKWREFSANNPFKGSAAAVAAAAAAAAAAVAEQVSAAVSSATPIAPSGPPALPPPPAADIQPPPIRRAKTKEGKGPGHKRRSKSPRVPDGRKKLRGKKMAPLKIKLGLLGGKRKKGGSYVFQSDEGPEPEAEESDLDSGSVHSASGRPDGPVRTKKLKRGRPGRKKKKVLGCPAVAGEEEVDGYETDHQDYCEVCQQGGEIILCDTCPRAYHLVCLDPELDRAPEGKWSCPHCEKEGVQWEAKEEEEEYEEEGEEEGEKEEEDDHMEYCRVCKDGGELLCCDACISSYHIHCLNPPLPDIPNGEWLCPRCTCPVLKGRVQKILHWRWGEPPVAVPAPQQADGNPDVPPPRPLQGRSEREFFVKWVGLSYWHCSWAKELQLEIFHLVMYRNYQRKNDMDEPPPLDYGSGEDDGKSDKRKVKDPHYAEMEEKYYRFGIKPEWMTVHRIINHSVDKKGNYHYLVKWRDLPYDQSTWEEDEMNIPEYEEHKQSYWRHRELIMGEDPAQPRKYKKKKKELQGDGPPSSPTNDPTVKYETQPRFITATGGTLHMYQLEGLNWLRFSWAQGTDTILADEMGLGKTIQTIVFLYSLYKEGHTKGPFLVSAPLSTIINWEREFQMWAPKFYVVTYTGDKDSRAIIRENEFSFEDNAIKGGKKAFKMKREAQVKFHVLLTSYELITIDQAALGSIRWACLVVDEAHRLKNNQSKFFRVLNGYKIDHKLLLTGTPLQNNLEELFHLLNFLTPERFNNLEGFLEEFADISKEDQIKKLHDLLGPHMLRRLKADVFKNMPAKTELIVRVELSPMQKKYYKYILTRNFEALNSRGGGNQVSLLNIMMDLKKCCNHPYLFPVAAMESPKLPSGAYEGGALIKSSGKLMLLQKMLRKLKEQGHRVLIFSQMTKMLDLLEDFLDYEGYKYERIDGGITGALRQEAIDRFNAPGAQQFCFLLSTRAGGLGINLATADTVIIFDSDWNPHNDIQAFSRAHRIGQANKVMIYRFVTRASVEERITQVAKRKMMLTHLVVRPGLGSKAGSMSKQELDDILKFGTEELFKDENEGENKEEDSSVIHYDNEAIARLLDRNQDATEDTDVQNMNEYLSSFKVAQYVVREEDKIEEIEREIIKQEENVDPDYWEKLLRHHYEQQQEDLARNLGKGKRVRKQVNYNDAAQEDQDNQSEYSVGSEEEDEDFDERPEGRRQSKRQLRNEKDKPLPPLLARVGGNIEVLGFNTRQRKAFLNAVMRWGMPPQDAFTTQWLVRDLRGKTEKEFKAYVSLFMRHLCEPGADGSETFADGVPREGLSRQQVLTRIGVMSLVKKKVQEFEHINGRWSMPELMPDPSADSKRSSRASSPTKTSPTTPEASATNSPCTSKPATPAPSEKGEGIRTPLEKEEAENQEEKPEKNSRIGEKMETEADAPSPAPSLGERLEPRKIPLEDEVPGVPGEMEPEPGYRGDREKSATESTPGERGEEKPLDGQEHRERPEGETGDLGKREDVKGDRELRPGPRDEPRSNGRREEKTEKPRFMFNIADGGFTELHTLWQNEERAAISSGKLNEIWHRRHDYWLLAGIVLHGYARWQDIQNDAQFAIINEPFKTEANKGNFLEMKNKFLARRFKLLEQALVIEEQLRRAAYLNLSQEPAHPAMALHARFAEAECLAESHQHLSKESLAGNKPANAVLHKVLNQLEELLSDMKADVTRLPATLSRIPPIAARLQMSERSILSRLASKGTEPHPTPAYPPGPYATPPGYGAAFSAAPVGALAAAGANYSQMPAGSFITAATNGPPVLVKKEKEMVGALVSDGLDRKEPRAGEVICIDD",
    "length": 2000,
    "nTerminal": "M",
    "cTerminal": "D",
    "counts": {
     "W": 30,
     "Y": 57,
     "C": 27
    },
    "covers": [
     "2,000-residue protein",
     "N-terminal Met",
     "C-terminal Asp"
    ],
    "source": {
     "database": "UniProtKB",
     "accession": "Q12873",
     "entry": "CHD3_HUMAN",
     "range": [
      1,
      2000
     ],
     "release": "2026_03",
     "releaseDate": "02-September-2026",
     "retrieved": "2026-10-06T02:24:28Z",
     "licence": "CC BY 4.0 (UniProt Consortium)"
    }
   },
   "expected": {
    "numberOfAminoAcids": 2000,
    "molecularWeight": "226591.68",
    "theoreticalPI": "6.92",
    "extinctionCystines": 251555,
    "abs01Cystines": "1.110",
    "extinctionReduced": 249930,
    "abs01Reduced": "1.103",
    "formula": "C9982H15745N2861O3022S75"
   },
   "protparam": {
    "file": "pipeline/sequence-toolkit/protparam/P15.html",
    "retrieved": "2026-10-06T02:26:14Z",
    "sha256": "e470bd1fb21e93f00f25f34ac274f69c7005599213c1490e478a3cda181516c7",
    "status": "saved response"
   },
   "crossCheck": {
    "earlierProtParamRetrieval": null,
    "cTerminalPk": {
     "cTerminalPkPublished": 4.55,
     "pIWithPublishedCTerminalPk": 6.921306610107422,
     "pIWithCTerminalPk355": 6.921039581298828,
     "separatesAtTwoDecimals": false,
     "protparamPrintedEquals": [
      "3.55",
      "published"
     ],
     "call": "Bio.SeqUtils.IsoelectricPoint.IsoelectricPoint(seq).pi(pH=7.0, min_=0.0, max_=14.0), as published and with neg_pKs['Cterm'] = 3.55"
    },
    "biopythonProtParam": {
     "molecularWeight": 226589.03619999962,
     "isoelectricPoint": 6.921306800842285,
     "isoelectricPointAtSearchBound": false,
     "extinctionReduced": 249930,
     "extinctionCystines": 251555,
     "oracleVersion": "1.88",
     "note": "Biopython ProteinAnalysis: average residue masses from Bio.Data.IUPACData; pI by its IsoelectricPoint module (Bjellqvist pK set with the published C-terminal pK of 4.55 for Asp and 4.75 for Glu), which bisects only between pH 4.05 and 12 by default, so a pI outside that range comes back as the bound (isoelectricPointAtSearchBound); epsilon = 5500 W + 1490 Y (+ 125 per cystine). A second oracle, not the expected value."
    }
   },
   "method": {
    "mw": "average mass, ProtParam's residue table (chip id protparam-average)",
    "pI": "Bjellqvist pK set as ProtParam applies it (C-terminal pK 3.55 for every residue), bisection over pH 0-14",
    "epsilon": "pace-1995 (ProtParam: Trp 5500, Tyr 1490, cystine 125; two values)"
   },
   "oracle": "Expasy ProtParam (web form)",
   "oracleVersion": "web service; page and response saved and dated",
   "recordedOn": "2026-10-06",
   "source": "pipeline/sequence-toolkit/reference.py (protein), parsed from pipeline/sequence-toolkit/protparam/P15.html"
  },
  {
   "id": "P16",
   "input": {
    "label": "Human sperm protamine P1, mature chain",
    "sequence": "ARYRCCRSQSRSRYYRQRQRSRRRRRRSCQTRRRAMRCCRPRYRPRCRRH",
    "length": 50,
    "nTerminal": "A",
    "cTerminal": "H",
    "counts": {
     "W": 0,
     "Y": 4,
     "C": 6
    },
    "covers": [
     "very basic (Arg-rich)",
     "N-terminal Ala"
    ],
    "source": {
     "database": "UniProtKB",
     "accession": "P04553",
     "entry": "HSP1_HUMAN",
     "range": [
      2,
      51
     ],
     "release": "2026_03",
     "releaseDate": "02-September-2026",
     "retrieved": "2026-10-06T02:24:20Z",
     "licence": "CC BY 4.0 (UniProt Consortium)"
    }
   },
   "expected": {
    "numberOfAminoAcids": 50,
    "molecularWeight": "6691.80",
    "theoreticalPI": "12.08",
    "extinctionCystines": 6335,
    "abs01Cystines": "0.947",
    "extinctionReduced": 5960,
    "abs01Reduced": "0.891",
    "noTrpWarning": "This protein does not contain any Trp residues. Experience shows that this could result in more than 10% error in the computed extinction coefficient.",
    "formula": "C264H460N128O65S7",
    "pIMustNotEqual": [
     0.0,
     4.05,
     12.0,
     14.0
    ],
    "pINote": "ProtParam's pI 12.08 lies outside Biopython's default bisection range 4.05-12.0, which returns its bound (12.00); the engine bisects over pH 0-14 and must not return a bound of either range"
   },
   "protparam": {
    "file": "pipeline/sequence-toolkit/protparam/P16.html",
    "retrieved": "2026-10-06T02:26:18Z",
    "sha256": "22ef8aa0e804c517406627d56b7d858dc0fdb6b1fd832ffa221e9e0fe13230e4",
    "status": "saved response"
   },
   "crossCheck": {
    "earlierProtParamRetrieval": null,
    "cTerminalPk": {
     "cTerminalPkPublished": 3.55,
     "pIWithPublishedCTerminalPk": 12.075336456298828,
     "pIWithCTerminalPk355": 12.075336456298828,
     "separatesAtTwoDecimals": false,
     "protparamPrintedEquals": [
      "3.55",
      "published"
     ],
     "call": "Bio.SeqUtils.IsoelectricPoint.IsoelectricPoint(seq).pi(pH=7.0, min_=0.0, max_=14.0), as published and with neg_pKs['Cterm'] = 3.55"
    },
    "biopythonProtParam": {
     "molecularWeight": 6691.751,
     "isoelectricPoint": 11.999967765808105,
     "isoelectricPointAtSearchBound": true,
     "extinctionReduced": 5960,
     "extinctionCystines": 6335,
     "oracleVersion": "1.88",
     "note": "Biopython ProteinAnalysis: average residue masses from Bio.Data.IUPACData; pI by its IsoelectricPoint module (Bjellqvist pK set with the published C-terminal pK of 4.55 for Asp and 4.75 for Glu), which bisects only between pH 4.05 and 12 by default, so a pI outside that range comes back as the bound (isoelectricPointAtSearchBound); epsilon = 5500 W + 1490 Y (+ 125 per cystine). A second oracle, not the expected value."
    }
   },
   "method": {
    "mw": "average mass, ProtParam's residue table (chip id protparam-average)",
    "pI": "Bjellqvist pK set as ProtParam applies it (C-terminal pK 3.55 for every residue), bisection over pH 0-14",
    "epsilon": "pace-1995 (ProtParam: Trp 5500, Tyr 1490, cystine 125; two values)"
   },
   "oracle": "Expasy ProtParam (web form)",
   "oracleVersion": "web service; page and response saved and dated",
   "recordedOn": "2026-10-06",
   "source": "pipeline/sequence-toolkit/reference.py (protein), parsed from pipeline/sequence-toolkit/protparam/P16.html"
  },
  {
   "id": "P17",
   "input": {
    "label": "Human epidermal growth factor (mature EGF chain)",
    "sequence": "NSDSECPLSHDGYCLHDGVCMYIEALDKYACNCVVGYIGERCQYRDLKWWELR",
    "length": 53,
    "nTerminal": "N",
    "cTerminal": "R",
    "counts": {
     "W": 2,
     "Y": 5,
     "C": 6
    },
    "covers": [
     "Cys-rich small domain (6 Cys)",
     "N-terminal Asn"
    ],
    "source": {
     "database": "UniProtKB",
     "accession": "P01133",
     "entry": "EGF_HUMAN",
     "range": [
      971,
      1023
     ],
     "release": "2026_03",
     "releaseDate": "02-September-2026",
     "retrieved": "2026-10-06T02:24:16Z",
     "licence": "CC BY 4.0 (UniProt Consortium)"
    }
   },
   "expected": {
    "numberOfAminoAcids": 53,
    "molecularWeight": "6222.01",
    "theoreticalPI": "4.78",
    "extinctionCystines": 18825,
    "abs01Cystines": "3.026",
    "extinctionReduced": 18450,
    "abs01Reduced": "2.965",
    "formula": "C270H401N73O83S7"
   },
   "protparam": {
    "file": "pipeline/sequence-toolkit/protparam/P17.html",
    "retrieved": "2026-10-06T02:26:22Z",
    "sha256": "3372b61062f2a8eea3403a56cbbbbe03e2478b9ef781d7d15f4c40762a8d06b1",
    "status": "saved response"
   },
   "crossCheck": {
    "earlierProtParamRetrieval": null,
    "cTerminalPk": {
     "cTerminalPkPublished": 3.55,
     "pIWithPublishedCTerminalPk": 4.778507232666016,
     "pIWithCTerminalPk355": 4.778507232666016,
     "separatesAtTwoDecimals": false,
     "protparamPrintedEquals": [
      "3.55",
      "published"
     ],
     "call": "Bio.SeqUtils.IsoelectricPoint.IsoelectricPoint(seq).pi(pH=7.0, min_=0.0, max_=14.0), as published and with neg_pKs['Cterm'] = 3.55"
    },
    "biopythonProtParam": {
     "molecularWeight": 6221.9664999999995,
     "isoelectricPoint": 4.778533744812012,
     "isoelectricPointAtSearchBound": false,
     "extinctionReduced": 18450,
     "extinctionCystines": 18825,
     "oracleVersion": "1.88",
     "note": "Biopython ProteinAnalysis: average residue masses from Bio.Data.IUPACData; pI by its IsoelectricPoint module (Bjellqvist pK set with the published C-terminal pK of 4.55 for Asp and 4.75 for Glu), which bisects only between pH 4.05 and 12 by default, so a pI outside that range comes back as the bound (isoelectricPointAtSearchBound); epsilon = 5500 W + 1490 Y (+ 125 per cystine). A second oracle, not the expected value."
    }
   },
   "method": {
    "mw": "average mass, ProtParam's residue table (chip id protparam-average)",
    "pI": "Bjellqvist pK set as ProtParam applies it (C-terminal pK 3.55 for every residue), bisection over pH 0-14",
    "epsilon": "pace-1995 (ProtParam: Trp 5500, Tyr 1490, cystine 125; two values)"
   },
   "oracle": "Expasy ProtParam (web form)",
   "oracleVersion": "web service; page and response saved and dated",
   "recordedOn": "2026-10-06",
   "source": "pipeline/sequence-toolkit/reference.py (protein), parsed from pipeline/sequence-toolkit/protparam/P17.html"
  },
  {
   "id": "P18",
   "input": {
    "label": "Human alpha-1-antitrypsin, mature chain",
    "sequence": "EDPQGDAAQKTDTSHHDQDHPTFNKITPNLAEFAFSLYRQLAHQSNSTNIFFSPVSIATAFAMLSLGTKADTHDEILEGLNFNLTEIPEAQIHEGFQELLRTLNQPDSQLQLTTGNGLFLSEGLKLVDKFLEDVKKLYHSEAFTVNFGDTEEAKKQINDYVEKGTQGKIVDLVKELDRDTVFALVNYIFFKGKWERPFEVKDTEEEDFHVDQVTTVKVPMMKRLGMFNIQHCKKLSSWVLLMKYLGNATAIFFLPDEGKLQHLENELTHDIITKFLENEDRRSASLHLPKLSITGTYDLKSVLGQLGITKVFSNGADLSGVTEEAPLKLSKAVHKAVLTIDEKGTEAAGAMFLEAIPMSIPPEVKFNKPFVFLMIEQNTKSPLFMGKVVNPTQK",
    "length": 394,
    "nTerminal": "E",
    "cTerminal": "K",
    "counts": {
     "W": 2,
     "Y": 6,
     "C": 1
    },
    "covers": [
     "N-terminal Glu"
    ],
    "source": {
     "database": "UniProtKB",
     "accession": "P01009",
     "entry": "A1AT_HUMAN",
     "range": [
      25,
      418
     ],
     "release": "2026_03",
     "releaseDate": "02-September-2026",
     "retrieved": "2026-10-06T02:24:15Z",
     "licence": "CC BY 4.0 (UniProt Consortium)"
    }
   },
   "expected": {
    "numberOfAminoAcids": 394,
    "molecularWeight": "44324.55",
    "theoreticalPI": "5.37",
    "extinctionCystines": 19940,
    "abs01Cystines": "0.450",
    "extinctionReduced": 19940,
    "abs01Reduced": "0.450",
    "formula": "C2001H3130N514O601S10"
   },
   "protparam": {
    "file": "pipeline/sequence-toolkit/protparam/P18.html",
    "retrieved": "2026-10-06T02:26:26Z",
    "sha256": "f9aa79d7b5eefeac68a7ce0b66aa7cd87832f50369c415c4409ca95ef7f6590b",
    "status": "saved response"
   },
   "crossCheck": {
    "earlierProtParamRetrieval": null,
    "cTerminalPk": {
     "cTerminalPkPublished": 3.55,
     "pIWithPublishedCTerminalPk": 5.368427276611328,
     "pIWithCTerminalPk355": 5.368427276611328,
     "separatesAtTwoDecimals": false,
     "protparamPrintedEquals": [
      "3.55",
      "published"
     ],
     "call": "Bio.SeqUtils.IsoelectricPoint.IsoelectricPoint(seq).pi(pH=7.0, min_=0.0, max_=14.0), as published and with neg_pKs['Cterm'] = 3.55"
    },
    "biopythonProtParam": {
     "molecularWeight": 44323.99070000004,
     "isoelectricPoint": 5.36840877532959,
     "isoelectricPointAtSearchBound": false,
     "extinctionReduced": 19940,
     "extinctionCystines": 19940,
     "oracleVersion": "1.88",
     "note": "Biopython ProteinAnalysis: average residue masses from Bio.Data.IUPACData; pI by its IsoelectricPoint module (Bjellqvist pK set with the published C-terminal pK of 4.55 for Asp and 4.75 for Glu), which bisects only between pH 4.05 and 12 by default, so a pI outside that range comes back as the bound (isoelectricPointAtSearchBound); epsilon = 5500 W + 1490 Y (+ 125 per cystine). A second oracle, not the expected value."
    }
   },
   "method": {
    "mw": "average mass, ProtParam's residue table (chip id protparam-average)",
    "pI": "Bjellqvist pK set as ProtParam applies it (C-terminal pK 3.55 for every residue), bisection over pH 0-14",
    "epsilon": "pace-1995 (ProtParam: Trp 5500, Tyr 1490, cystine 125; two values)"
   },
   "oracle": "Expasy ProtParam (web form)",
   "oracleVersion": "web service; page and response saved and dated",
   "recordedOn": "2026-10-06",
   "source": "pipeline/sequence-toolkit/reference.py (protein), parsed from pipeline/sequence-toolkit/protparam/P18.html"
  },
  {
   "id": "P19",
   "input": {
    "label": "Human granulocyte colony-stimulating factor, mature chain",
    "sequence": "TPLGPASSLPQSFLLKCLEQVRKIQGDGAALQEKLVSECATYKLCHPEELVLLGHSLGIPWAPLSSCPSQALQLAGCLSQLHSGLFLYQGLLQALEGISPELGPTLDTLQLDVADFATTIWQQMEELGMAPALQPTQGAMPAFASAFQRRAGGVLVASHLQSFLEVSYRVLRHLAQP",
    "length": 177,
    "nTerminal": "T",
    "cTerminal": "P",
    "counts": {
     "W": 2,
     "Y": 3,
     "C": 5
    },
    "covers": [
     "N-terminal Thr",
     "odd Cys count (5)"
    ],
    "source": {
     "database": "UniProtKB",
     "accession": "P09919",
     "entry": "CSF3_HUMAN",
     "range": [
      31,
      207
     ],
     "release": "2026_03",
     "releaseDate": "02-September-2026",
     "retrieved": "2026-10-06T02:24:22Z",
     "licence": "CC BY 4.0 (UniProt Consortium)"
    }
   },
   "expected": {
    "numberOfAminoAcids": 177,
    "molecularWeight": "18986.98",
    "theoreticalPI": "5.43",
    "extinctionCystines": 15720,
    "abs01Cystines": "0.828",
    "extinctionReduced": 15470,
    "abs01Reduced": "0.815",
    "formula": "C853H1355N225O248S8"
   },
   "protparam": {
    "file": "pipeline/sequence-toolkit/protparam/P19.html",
    "retrieved": "2026-10-06T02:26:30Z",
    "sha256": "de228fc8e4864afe7208b5c0fcf626fea74130980b99823d21b3bc40558c7765",
    "status": "saved response"
   },
   "crossCheck": {
    "earlierProtParamRetrieval": null,
    "cTerminalPk": {
     "cTerminalPkPublished": 3.55,
     "pIWithPublishedCTerminalPk": 5.425678253173828,
     "pIWithCTerminalPk355": 5.425678253173828,
     "separatesAtTwoDecimals": false,
     "protparamPrintedEquals": [
      "3.55",
      "published"
     ],
     "call": "Bio.SeqUtils.IsoelectricPoint.IsoelectricPoint(seq).pi(pH=7.0, min_=0.0, max_=14.0), as published and with neg_pKs['Cterm'] = 3.55"
    },
    "biopythonProtParam": {
     "molecularWeight": 18986.76209999998,
     "isoelectricPoint": 5.425702476501464,
     "isoelectricPointAtSearchBound": false,
     "extinctionReduced": 15470,
     "extinctionCystines": 15720,
     "oracleVersion": "1.88",
     "note": "Biopython ProteinAnalysis: average residue masses from Bio.Data.IUPACData; pI by its IsoelectricPoint module (Bjellqvist pK set with the published C-terminal pK of 4.55 for Asp and 4.75 for Glu), which bisects only between pH 4.05 and 12 by default, so a pI outside that range comes back as the bound (isoelectricPointAtSearchBound); epsilon = 5500 W + 1490 Y (+ 125 per cystine). A second oracle, not the expected value."
    }
   },
   "method": {
    "mw": "average mass, ProtParam's residue table (chip id protparam-average)",
    "pI": "Bjellqvist pK set as ProtParam applies it (C-terminal pK 3.55 for every residue), bisection over pH 0-14",
    "epsilon": "pace-1995 (ProtParam: Trp 5500, Tyr 1490, cystine 125; two values)"
   },
   "oracle": "Expasy ProtParam (web form)",
   "oracleVersion": "web service; page and response saved and dated",
   "recordedOn": "2026-10-06",
   "source": "pipeline/sequence-toolkit/reference.py (protein), parsed from pipeline/sequence-toolkit/protparam/P19.html"
  },
  {
   "id": "P20",
   "input": {
    "label": "Bovine pancreatic ribonuclease A, mature chain",
    "sequence": "KETAAAKFERQHMDSSTSAASSSNYCNQMMKSRNLTKDRCKPVNTFVHESLADVQAVCSQKNVACKNGQTNCYQSYSTMSITDCRETGSSKYPNCAYKTTQANKHIIVACEGNPYVPVHFDASV",
    "length": 124,
    "nTerminal": "K",
    "cTerminal": "V",
    "counts": {
     "W": 0,
     "Y": 6,
     "C": 8
    },
    "covers": [
     "no Trp",
     "Tyr and cystines only"
    ],
    "source": {
     "database": "UniProtKB",
     "accession": "P61823",
     "entry": "RNAS1_BOVIN",
     "range": [
      27,
      150
     ],
     "release": "2026_03",
     "releaseDate": "02-September-2026",
     "retrieved": "2026-10-06T02:24:25Z",
     "licence": "CC BY 4.0 (UniProt Consortium)"
    }
   },
   "expected": {
    "numberOfAminoAcids": 124,
    "molecularWeight": "13690.29",
    "theoreticalPI": "8.64",
    "extinctionCystines": 9440,
    "abs01Cystines": "0.690",
    "extinctionReduced": 8940,
    "abs01Reduced": "0.653",
    "noTrpWarning": "This protein does not contain any Trp residues. Experience shows that this could result in more than 10% error in the computed extinction coefficient.",
    "formula": "C575H909N171O193S12"
   },
   "protparam": {
    "file": "pipeline/sequence-toolkit/protparam/P20.html",
    "retrieved": "2026-10-06T02:26:34Z",
    "sha256": "806a88047ac7e4e827ac8896ed989116f1d8beeba9c04cc133fdff5fdff3d086",
    "status": "saved response"
   },
   "crossCheck": {
    "earlierProtParamRetrieval": null,
    "cTerminalPk": {
     "cTerminalPkPublished": 3.55,
     "pIWithPublishedCTerminalPk": 8.635417938232422,
     "pIWithCTerminalPk355": 8.635417938232422,
     "separatesAtTwoDecimals": false,
     "protparamPrintedEquals": [
      "3.55",
      "published"
     ],
     "call": "Bio.SeqUtils.IsoelectricPoint.IsoelectricPoint(seq).pi(pH=7.0, min_=0.0, max_=14.0), as published and with neg_pKs['Cterm'] = 3.55"
    },
    "biopythonProtParam": {
     "molecularWeight": 13690.178499999987,
     "isoelectricPoint": 8.635427284240723,
     "isoelectricPointAtSearchBound": false,
     "extinctionReduced": 8940,
     "extinctionCystines": 9440,
     "oracleVersion": "1.88",
     "note": "Biopython ProteinAnalysis: average residue masses from Bio.Data.IUPACData; pI by its IsoelectricPoint module (Bjellqvist pK set with the published C-terminal pK of 4.55 for Asp and 4.75 for Glu), which bisects only between pH 4.05 and 12 by default, so a pI outside that range comes back as the bound (isoelectricPointAtSearchBound); epsilon = 5500 W + 1490 Y (+ 125 per cystine). A second oracle, not the expected value."
    }
   },
   "method": {
    "mw": "average mass, ProtParam's residue table (chip id protparam-average)",
    "pI": "Bjellqvist pK set as ProtParam applies it (C-terminal pK 3.55 for every residue), bisection over pH 0-14",
    "epsilon": "pace-1995 (ProtParam: Trp 5500, Tyr 1490, cystine 125; two values)"
   },
   "oracle": "Expasy ProtParam (web form)",
   "oracleVersion": "web service; page and response saved and dated",
   "recordedOn": "2026-10-06",
   "source": "pipeline/sequence-toolkit/reference.py (protein), parsed from pipeline/sequence-toolkit/protparam/P20.html"
  },
  {
   "id": "P21",
   "input": {
    "label": "Designed peptide ending in Asp",
    "sequence": "AGSGSGSGSD",
    "length": 10,
    "nTerminal": "A",
    "cTerminal": "D",
    "counts": {
     "W": 0,
     "Y": 0,
     "C": 0
    },
    "covers": [
     "C-terminal Asp",
     "separates a C-terminal pK of 3.55 from 4.55",
     "N-terminal Ala",
     "no Trp, Tyr or Cys"
    ],
    "source": {
     "designed": true,
     "note": "Designed for this fixture (CSO ruling, 6 October 2026): a Gly-Ser peptide whose only charged groups are the two termini and the last residue's side chain, so the C-terminal pK moves the pI by about half a unit"
    }
   },
   "expected": {
    "numberOfAminoAcids": 10,
    "molecularWeight": "780.70",
    "theoreticalPI": "3.80",
    "notVisibleByUV": true,
    "message": "As there are no Trp, Tyr or Cys in the region considered, your protein should not be visible by UV spectrophotometry.",
    "formula": "C27H44N10O17"
   },
   "protparam": {
    "file": "pipeline/sequence-toolkit/protparam/P21.html",
    "retrieved": "2026-10-06T03:54:16Z",
    "sha256": "c6fc7653519a6ccc62220334edf25f0ff9aac72460ebabd218200f4e6f220664",
    "status": "saved response"
   },
   "crossCheck": {
    "earlierProtParamRetrieval": null,
    "cTerminalPk": {
     "cTerminalPkPublished": 4.55,
     "pIWithPublishedCTerminalPk": 4.299510955810547,
     "pIWithCTerminalPk355": 3.799846649169922,
     "separatesAtTwoDecimals": true,
     "protparamPrintedEquals": [
      "3.55"
     ],
     "call": "Bio.SeqUtils.IsoelectricPoint.IsoelectricPoint(seq).pi(pH=7.0, min_=0.0, max_=14.0), as published and with neg_pKs['Cterm'] = 3.55"
    },
    "biopythonProtParam": {
     "molecularWeight": 780.695,
     "isoelectricPoint": 4.299494743347168,
     "isoelectricPointAtSearchBound": false,
     "extinctionReduced": 0,
     "extinctionCystines": 0,
     "oracleVersion": "1.88",
     "note": "Biopython ProteinAnalysis: average residue masses from Bio.Data.IUPACData; pI by its IsoelectricPoint module (Bjellqvist pK set with the published C-terminal pK of 4.55 for Asp and 4.75 for Glu), which bisects only between pH 4.05 and 12 by default, so a pI outside that range comes back as the bound (isoelectricPointAtSearchBound); epsilon = 5500 W + 1490 Y (+ 125 per cystine). A second oracle, not the expected value."
    }
   },
   "method": {
    "mw": "average mass, ProtParam's residue table (chip id protparam-average)",
    "pI": "Bjellqvist pK set as ProtParam applies it (C-terminal pK 3.55 for every residue), bisection over pH 0-14",
    "epsilon": "pace-1995 (ProtParam: Trp 5500, Tyr 1490, cystine 125; two values)"
   },
   "oracle": "Expasy ProtParam (web form)",
   "oracleVersion": "web service; page and response saved and dated",
   "recordedOn": "2026-10-06",
   "source": "pipeline/sequence-toolkit/reference.py (protein), parsed from pipeline/sequence-toolkit/protparam/P21.html"
  },
  {
   "id": "P22",
   "input": {
    "label": "Designed peptide ending in Glu",
    "sequence": "AGSGSGSGSE",
    "length": 10,
    "nTerminal": "A",
    "cTerminal": "E",
    "counts": {
     "W": 0,
     "Y": 0,
     "C": 0
    },
    "covers": [
     "C-terminal Glu",
     "separates a C-terminal pK of 3.55 from 4.75",
     "N-terminal Ala",
     "no Trp, Tyr or Cys"
    ],
    "source": {
     "designed": true,
     "note": "Designed for this fixture (CSO ruling, 6 October 2026): a Gly-Ser peptide whose only charged groups are the two termini and the last residue's side chain, so the C-terminal pK moves the pI by about half a unit"
    }
   },
   "expected": {
    "numberOfAminoAcids": 10,
    "molecularWeight": "794.73",
    "theoreticalPI": "4.00",
    "notVisibleByUV": true,
    "message": "As there are no Trp, Tyr or Cys in the region considered, your protein should not be visible by UV spectrophotometry.",
    "formula": "C28H46N10O17"
   },
   "protparam": {
    "file": "pipeline/sequence-toolkit/protparam/P22.html",
    "retrieved": "2026-10-06T03:54:20Z",
    "sha256": "3265d1bfb2a820f9036a2b8e97586e70af03a3fa1f86d38e64efcd06e72538a1",
    "status": "saved response"
   },
   "crossCheck": {
    "earlierProtParamRetrieval": null,
    "cTerminalPk": {
     "cTerminalPkPublished": 4.75,
     "pIWithPublishedCTerminalPk": 4.599063873291016,
     "pIWithCTerminalPk355": 3.9996910095214844,
     "separatesAtTwoDecimals": true,
     "protparamPrintedEquals": [
      "3.55"
     ],
     "call": "Bio.SeqUtils.IsoelectricPoint.IsoelectricPoint(seq).pi(pH=7.0, min_=0.0, max_=14.0), as published and with neg_pKs['Cterm'] = 3.55"
    },
    "biopythonProtParam": {
     "molecularWeight": 794.7216000000001,
     "isoelectricPoint": 4.599093055725096,
     "isoelectricPointAtSearchBound": false,
     "extinctionReduced": 0,
     "extinctionCystines": 0,
     "oracleVersion": "1.88",
     "note": "Biopython ProteinAnalysis: average residue masses from Bio.Data.IUPACData; pI by its IsoelectricPoint module (Bjellqvist pK set with the published C-terminal pK of 4.55 for Asp and 4.75 for Glu), which bisects only between pH 4.05 and 12 by default, so a pI outside that range comes back as the bound (isoelectricPointAtSearchBound); epsilon = 5500 W + 1490 Y (+ 125 per cystine). A second oracle, not the expected value."
    }
   },
   "method": {
    "mw": "average mass, ProtParam's residue table (chip id protparam-average)",
    "pI": "Bjellqvist pK set as ProtParam applies it (C-terminal pK 3.55 for every residue), bisection over pH 0-14",
    "epsilon": "pace-1995 (ProtParam: Trp 5500, Tyr 1490, cystine 125; two values)"
   },
   "oracle": "Expasy ProtParam (web form)",
   "oracleVersion": "web service; page and response saved and dated",
   "recordedOn": "2026-10-06",
   "source": "pipeline/sequence-toolkit/reference.py (protein), parsed from pipeline/sequence-toolkit/protparam/P22.html"
  }
 ]
}
