Skip to main content

Project description

This is an application to analyze base pairing patterns of DNA/RNA 3D structures to find and classify tetrads and quadruplexes. ElTetrado assigns tetrads to one of the ONZ classes (O, N, Z) alongside with the directionality of the tetrad (+/-) determined by the bonds between bases and their non-canonical interactions. The interactions follow Leontis/Westhof classification (Leontis et al. 2001). Watson-Crick (W) edge of first base in the tetrad structure exposed to the Hoogsteen (H) edge of the next nucleobase from the same tetrad sets the tetrad directionality, clockwise (+) or anticlockwise (-). For more details, please refer to Zok et al. (2020) and Popenda et al. (2020)

Installation

This project uses uv for dependency management.

To install the package, run:

uv sync --locked

Dependencies

The project is written in Python 3.12+ and requires mmcif, orjson, NumPy and rnapolis.

Visualization is created by R 3.6+ script which uses R4RNA (Lai et al. 2012) library. The dependency will be automatically installed if not present.

Base pairs and stacking interactions are identified by RNApolis.

Usage

ElTetrado is a command line application, which requires to be provided with --input and a path to a PDB or PDBx/mmCIF file.

By default, ElTetrado outputs textual results on the standard output. A JSON version of the output can be obtained with --output switch followed by a path where the file is supposed to be created.

ElTetrado prepares visualization of the whole structure and of each N4-helices, quadruplexes and tetrads. This can be supplemented with canonical base pairs visualization when --complete-2d is set. All color settings are located in the first several lines of the quadraw.R file, you can easily change them without knowledge of R language. If you want ElTetrado to not visualize anything, pass --no-image switch to it.

usage: eltetrado [-h] [-i INPUT] [-o OUTPUT]
                 [--g4composer-output G4COMPOSER_OUTPUT] [-m MODEL]
                 [--no-reorder] [--complete-2d] [--image DIR]
                 [-e [EXTERNAL_FILES ...]]
                 [--tool {fr3d,dssr,rnaview,bpnet,maxit,barnaba,mc-annotate,dnatco}]
                 [-v]

options:
  -h, --help            show this help message and exit
  -i, --input INPUT     path to input PDB or PDBx/mmCIF file
  -o, --output OUTPUT   (optional) path for output JSON file
  --g4composer-output G4COMPOSER_OUTPUT
                        (optional) path for g4composer plain-text export;
                        requires exactly one unimolecular quadruplex and
                        exports the full involved chain
  -m, --model MODEL     (optional) model number to process
  --no-reorder          chains of bi- and tetramolecular quadruplexes should
                        be reordered to be able to have them classified; when
                        this is set, chains will be processed in original
                        order, which for bi-/tetramolecular means that they
                        will likely be misclassified; use with care!
  --complete-2d         when set, the visualization will also show canonical
                        base pairs to provide context for the quadruplex
  --image DIR           directory where visualization files (PDF) will be
                        saved; if omitted, no images are generated
  -e, --external-files [EXTERNAL_FILES ...]
                        path(s) to external tool output file(s); if omitted
                        ElTetrado will compute interactions itself
  --tool {fr3d,dssr,rnaview,bpnet,maxit,barnaba,mc-annotate,dnatco}
                        name of the external tool that produced the files
                        (auto-detected when not provided)
  -v, --version         show program's version number and exit

Chains reorder

ElTetrado keeps a global and unique 5’-3’ index for every nucleotide which is independent from residue numbers. For example, if a structure has chain M with 60 nucleotides and chain N with 15 nucleotides, then ElTetrado will keep index between 0 and 74 which uniquely identifies every nucleotide. Initially, ElTetrado assigns this indices according to the order of chains in the input file. Therefore, if M preceded N then nucleotides in M will be indexed from 0 to 59 and in N from 60 to 74. Otherwise, nucleotides in N will be indexed from 0 to 14 and in M from 15 to 74.

When --no-reorder is present, this initial assignment is used. Otherwise, ElTetrado exhaustively checks all permutations of chains’ orders. Every permutation check induces recalculation of the global and unique 5’-3’ index and in effect it changes ONZ classification of tetrads.

ElTetrado keeps a table of tetrad classification scores according to these rules:

  • Type preference: O > N > Z
  • Direction preference: + > -

The table keeps low values for preferred classes i.e. O+ is 0, O- is 1 and so on up to Z- with score 5. For every permutation of chain orders, ElTetrado computes sum of scores for tetrads classification induced by 5’-3’ indexing. We select permutation with the minimum value.

g4composer export

The g4composer exporter uses the same structural analysis as the main ElTetrado output, but it applies g4composer-specific conventions at export time:

  • Only a single unimolecular quadruplex with at least two tetrads is supported.
  • The exported residue span covers the whole chain containing the quadruplex, including 5’ and 3’ flanking single strands.
  • Tetrad letters (A, B, C, …) still follow tetrad 5’ order.
  • Path columns are numbered so that 1 is always the tract containing the 5’-most nucleotide of tetrad A. Core ElTetrado path columns are numbered anticlockwise after that anchor, but g4composer path columns are numbered clockwise. This affects only the exported g4composer path, not ElTetrado’s internal topology model or JSON path.
  • orient is exported from ElTetrado tetrad polarities: clockwise -> +, anticlockwise -> -.
  • rise and twist are exported between consecutive build-order tetrads. Both are measured against a single, quadruplex-wide reference axis so that signs are comparable across the whole build order, even when it reverses ElTetrado’s internal (discovery-order) stack of adjacent tetrad pairs. The axis is built by chain-aligning each tetrad’s plane normal to its discovery-order neighbour, averaging the aligned normals, and orienting the result along the net displacement from the first to the last tetrad in discovery order.
  • rise is the projection of the centroid-to-centroid displacement onto that shared axis. twist is the best-fit signed rotation of the four tract-matched C1' atoms around the same axis. Missing C1' atoms yield an undefined twist.

Example g4composer export:

name        6tc8
sequence    gggatgggacacaggggacggg
structure   ^^...^^^.....^^^^..^^^
chi         S....S.......S.....S..
sugar       SSSSSSSSSSSSSSSSSSSSSS
orient      A+;B-;C+
rise        3.4;-6.8
twist       19;-46
path        A1;B1;B4;A4;C4;C1;B2;A2;C2;B3;A3;C3

Examples

2HY9: Human telomere DNA quadruplex structure in K+ solution hybrid-1 form

$ curl ftp://ftp.wwpdb.org/pub/pdb/data/structures/divided/mmCIF/my/2hy9.cif.gz | gzip -d > 2hy9.cif
$ uv run --locked eltetrado --input 2hy9.cif --output 2hy9.json

Chain order: 1
n4-helix with 3 tetrads
  Oh* V 9a -(pll) quadruplex with 3 tetrads
    Handedness: right
    Tetrad polarities: clockwise, anticlockwise, anticlockwise
    1.DG4 1.DG22 1.DG18 1.DG10 cWH cWH cWH cWH O- Vb planarity=0.06
      direction=hybrid rise=3.15 twist=18.78
    1.DG5 1.DG23 1.DG17 1.DG11 cHW cHW cHW cHW O+ Va planarity=0.05
      direction=hybrid rise=3.08 twist=27.86
    1.DG6 1.DG24 1.DG16 1.DG12 cHW cHW cHW cHW O+ Va planarity=0.05

    Tracts:
      1.DG4, 1.DG5, 1.DG6
      1.DG10, 1.DG11, 1.DG12
      1.DG18, 1.DG17, 1.DG16
      1.DG22, 1.DG23, 1.DG24

    Path:
      A1, B1, C1, A2, B2, C2, C3, B3, A3, A4, B4, C4

    Loops:
      propeller- 1.DT7, 1.DT8, 1.DA9
      lateral- 1.DT13, 1.DT14, 1.DA15
      lateral- 1.DT19, 1.DT20, 1.DA21

AAAGGGTTAGGGTTAGGGTTAGGGAA
...(([...{)]...[[}...)]]..
...([{...)((...))(...)]}..

Click to see the output JSON

{
  "metals": [],
  "nucleotides": [
    {
      "index": 1,
      "chain": "1",
      "number": 1,
      "icode": null,
      "molecule": "DNA",
      "fullName": "1.DA1",
      "shortName": "A",
      "chi": 22.30828283085781,
      "glycosidicBond": "syn",
      "sugarPucker": "North"
    },
    {
      "index": 2,
      "chain": "1",
      "number": 2,
      "icode": null,
      "molecule": "DNA",
      "fullName": "1.DA2",
      "shortName": "A",
      "chi": -123.05454402191421,
      "glycosidicBond": "anti",
      "sugarPucker": "North"
    },
    {
      "index": 3,
      "chain": "1",
      "number": 3,
      "icode": null,
      "molecule": "DNA",
      "fullName": "1.DA3",
      "shortName": "A",
      "chi": -94.96579955603106,
      "glycosidicBond": "anti",
      "sugarPucker": "North"
    },
    {
      "index": 4,
      "chain": "1",
      "number": 4,
      "icode": null,
      "molecule": "DNA",
      "fullName": "1.DG4",
      "shortName": "G",
      "chi": 79.28363721639316,
      "glycosidicBond": "syn",
      "sugarPucker": "North"
    },
    {
      "index": 5,
      "chain": "1",
      "number": 5,
      "icode": null,
      "molecule": "DNA",
      "fullName": "1.DG5",
      "shortName": "G",
      "chi": -126.01709201555563,
      "glycosidicBond": "anti",
      "sugarPucker": "North"
    },
    {
      "index": 6,
      "chain": "1",
      "number": 6,
      "icode": null,
      "molecule": "DNA",
      "fullName": "1.DG6",
      "shortName": "G",
      "chi": -127.26656202302102,
      "glycosidicBond": "anti",
      "sugarPucker": "South"
    },
    {
      "index": 7,
      "chain": "1",
      "number": 7,
      "icode": null,
      "molecule": "DNA",
      "fullName": "1.DT7",
      "shortName": "T",
      "chi": -63.10830751967371,
      "glycosidicBond": "anti",
      "sugarPucker": "South"
    },
    {
      "index": 8,
      "chain": "1",
      "number": 8,
      "icode": null,
      "molecule": "DNA",
      "fullName": "1.DT8",
      "shortName": "T",
      "chi": -138.79520345559828,
      "glycosidicBond": "anti",
      "sugarPucker": "North"
    },
    {
      "index": 9,
      "chain": "1",
      "number": 9,
      "icode": null,
      "molecule": "DNA",
      "fullName": "1.DA9",
      "shortName": "A",
      "chi": -148.83990757408878,
      "glycosidicBond": "anti",
      "sugarPucker": "North"
    },
    {
      "index": 10,
      "chain": "1",
      "number": 10,
      "icode": null,
      "molecule": "DNA",
      "fullName": "1.DG10",
      "shortName": "G",
      "chi": 58.77875250191579,
      "glycosidicBond": "syn",
      "sugarPucker": "North"
    },
    {
      "index": 11,
      "chain": "1",
      "number": 11,
      "icode": null,
      "molecule": "DNA",
      "fullName": "1.DG11",
      "shortName": "G",
      "chi": -123.85746807924986,
      "glycosidicBond": "anti",
      "sugarPucker": "North"
    },
    {
      "index": 12,
      "chain": "1",
      "number": 12,
      "icode": null,
      "molecule": "DNA",
      "fullName": "1.DG12",
      "shortName": "G",
      "chi": -84.36679807284759,
      "glycosidicBond": "anti",
      "sugarPucker": "South"
    },
    {
      "index": 13,
      "chain": "1",
      "number": 13,
      "icode": null,
      "molecule": "DNA",
      "fullName": "1.DT13",
      "shortName": "T",
      "chi": -30.819029132834157,
      "glycosidicBond": "anti",
      "sugarPucker": "North"
    },
    {
      "index": 14,
      "chain": "1",
      "number": 14,
      "icode": null,
      "molecule": "DNA",
      "fullName": "1.DT14",
      "shortName": "T",
      "chi": -168.51776782812965,
      "glycosidicBond": "anti",
      "sugarPucker": "North"
    },
    {
      "index": 15,
      "chain": "1",
      "number": 15,
      "icode": null,
      "molecule": "DNA",
      "fullName": "1.DA15",
      "shortName": "A",
      "chi": -105.72881577106517,
      "glycosidicBond": "anti",
      "sugarPucker": "South"
    },
    {
      "index": 16,
      "chain": "1",
      "number": 16,
      "icode": null,
      "molecule": "DNA",
      "fullName": "1.DG16",
      "shortName": "G",
      "chi": 74.3227942181243,
      "glycosidicBond": "syn",
      "sugarPucker": "South"
    },
    {
      "index": 17,
      "chain": "1",
      "number": 17,
      "icode": null,
      "molecule": "DNA",
      "fullName": "1.DG17",
      "shortName": "G",
      "chi": 81.08424926936044,
      "glycosidicBond": "syn",
      "sugarPucker": "South"
    },
    {
      "index": 18,
      "chain": "1",
      "number": 18,
      "icode": null,
      "molecule": "DNA",
      "fullName": "1.DG18",
      "shortName": "G",
      "chi": -122.90397217111551,
      "glycosidicBond": "anti",
      "sugarPucker": "North"
    },
    {
      "index": 19,
      "chain": "1",
      "number": 19,
      "icode": null,
      "molecule": "DNA",
      "fullName": "1.DT19",
      "shortName": "T",
      "chi": -102.98239337113938,
      "glycosidicBond": "anti",
      "sugarPucker": "South"
    },
    {
      "index": 20,
      "chain": "1",
      "number": 20,
      "icode": null,
      "molecule": "DNA",
      "fullName": "1.DT20",
      "shortName": "T",
      "chi": -112.15146018497148,
      "glycosidicBond": "anti",
      "sugarPucker": "North"
    },
    {
      "index": 21,
      "chain": "1",
      "number": 21,
      "icode": null,
      "molecule": "DNA",
      "fullName": "1.DA21",
      "shortName": "A",
      "chi": -89.07113063649612,
      "glycosidicBond": "anti",
      "sugarPucker": "North"
    },
    {
      "index": 22,
      "chain": "1",
      "number": 22,
      "icode": null,
      "molecule": "DNA",
      "fullName": "1.DG22",
      "shortName": "G",
      "chi": 83.44318693001902,
      "glycosidicBond": "syn",
      "sugarPucker": "South"
    },
    {
      "index": 23,
      "chain": "1",
      "number": 23,
      "icode": null,
      "molecule": "DNA",
      "fullName": "1.DG23",
      "shortName": "G",
      "chi": -115.41210237198395,
      "glycosidicBond": "anti",
      "sugarPucker": "North"
    },
    {
      "index": 24,
      "chain": "1",
      "number": 24,
      "icode": null,
      "molecule": "DNA",
      "fullName": "1.DG24",
      "shortName": "G",
      "chi": -111.14845782593532,
      "glycosidicBond": "anti",
      "sugarPucker": "North"
    },
    {
      "index": 25,
      "chain": "1",
      "number": 25,
      "icode": null,
      "molecule": "DNA",
      "fullName": "1.DA25",
      "shortName": "A",
      "chi": -58.323530637551954,
      "glycosidicBond": "anti",
      "sugarPucker": "South"
    },
    {
      "index": 26,
      "chain": "1",
      "number": 26,
      "icode": null,
      "molecule": "DNA",
      "fullName": "1.DA26",
      "shortName": "A",
      "chi": -90.84065243137135,
      "glycosidicBond": "anti",
      "sugarPucker": "North"
    }
  ],
  "basePairs": [
    {
      "nt1": "1.DA3",
      "nt2": "1.DA21",
      "lw": "cHW",
      "inTetrad": false,
      "canonical": false
    },
    {
      "nt1": "1.DG4",
      "nt2": "1.DG10",
      "lw": "cHW",
      "inTetrad": true,
      "canonical": false
    },
    {
      "nt1": "1.DG4",
      "nt2": "1.DG22",
      "lw": "cWH",
      "inTetrad": true,
      "canonical": false
    },
    {
      "nt1": "1.DG5",
      "nt2": "1.DG11",
      "lw": "cWH",
      "inTetrad": true,
      "canonical": false
    },
    {
      "nt1": "1.DG5",
      "nt2": "1.DG23",
      "lw": "cHW",
      "inTetrad": true,
      "canonical": false
    },
    {
      "nt1": "1.DG6",
      "nt2": "1.DG12",
      "lw": "cWH",
      "inTetrad": true,
      "canonical": false
    },
    {
      "nt1": "1.DG6",
      "nt2": "1.DG24",
      "lw": "cHW",
      "inTetrad": true,
      "canonical": false
    },
    {
      "nt1": "1.DG10",
      "nt2": "1.DG18",
      "lw": "cHW",
      "inTetrad": true,
      "canonical": false
    },
    {
      "nt1": "1.DG11",
      "nt2": "1.DG17",
      "lw": "cWH",
      "inTetrad": true,
      "canonical": false
    },
    {
      "nt1": "1.DG12",
      "nt2": "1.DG16",
      "lw": "cWH",
      "inTetrad": true,
      "canonical": false
    },
    {
      "nt1": "1.DT14",
      "nt2": "1.DA25",
      "lw": "tWW",
      "inTetrad": false,
      "canonical": false
    },
    {
      "nt1": "1.DG16",
      "nt2": "1.DG24",
      "lw": "cWH",
      "inTetrad": true,
      "canonical": false
    },
    {
      "nt1": "1.DG17",
      "nt2": "1.DG23",
      "lw": "cWH",
      "inTetrad": true,
      "canonical": false
    },
    {
      "nt1": "1.DG18",
      "nt2": "1.DG22",
      "lw": "cHW",
      "inTetrad": true,
      "canonical": false
    }
  ],
  "helices": [
    {
      "quadruplexes": [
        {
          "tetrads": [
            {
              "id": "1.DG4-1.DG22-1.DG18-1.DG10",
              "nt1": "1.DG4",
              "nt2": "1.DG22",
              "nt3": "1.DG18",
              "nt4": "1.DG10",
              "onz": "O-",
              "gbaClassification": "Vb",
              "planarityDeviation": 0.06027201827666498,
              "ionsChannel": [],
              "ionsOutside": []
            },
            {
              "id": "1.DG5-1.DG23-1.DG17-1.DG11",
              "nt1": "1.DG5",
              "nt2": "1.DG23",
              "nt3": "1.DG17",
              "nt4": "1.DG11",
              "onz": "O+",
              "gbaClassification": "Va",
              "planarityDeviation": 0.05012803856522407,
              "ionsChannel": [],
              "ionsOutside": []
            },
            {
              "id": "1.DG6-1.DG24-1.DG16-1.DG12",
              "nt1": "1.DG6",
              "nt2": "1.DG24",
              "nt3": "1.DG16",
              "nt4": "1.DG12",
              "onz": "O+",
              "gbaClassification": "Va",
              "planarityDeviation": 0.05469205291187412,
              "ionsChannel": [],
              "ionsOutside": []
            }
          ],
          "onzm": "Oh*",
          "handedness": "right",
          "tetradPolarities": ["clockwise", "anticlockwise", "anticlockwise"],
          "strandPolarities": [
            ["plus", "plus", "plus"],
            ["plus", "plus", "plus"],
            ["minus", "minus", "minus"],
            ["plus", "plus", "plus"]
          ],
          "loopClassification": {
            "classification": "9a",
            "loopProgression": "-(pll)"
          },
          "gbaClassification": ["V"],
          "tracts": [
            ["1.DG4", "1.DG5", "1.DG6"],
            ["1.DG10", "1.DG11", "1.DG12"],
            ["1.DG18", "1.DG17", "1.DG16"],
            ["1.DG22", "1.DG23", "1.DG24"]
          ],
          "path": ["A1", "B1", "C1", "A2", "B2", "C2", "C3", "B3", "A3", "A4", "B4", "C4"],
          "bulges": [],
          "loops": [
            {
              "type": "propeller-",
              "nucleotides": ["1.DT7", "1.DT8", "1.DA9"]
            },
            {
              "type": "lateral-",
              "nucleotides": ["1.DT13", "1.DT14", "1.DA15"]
            },
            {
              "type": "lateral-",
              "nucleotides": ["1.DT19", "1.DT20", "1.DA21"]
            }
          ]
        }
      ],
      "tetradPairs": [
        {
          "tetrad1": "1.DG4-1.DG22-1.DG18-1.DG10",
          "tetrad2": "1.DG5-1.DG23-1.DG17-1.DG11",
          "direction": "hybrid",
          "rise": 3.150278534585139,
          "twist": 18.779470679029647
        },
        {
          "tetrad1": "1.DG5-1.DG23-1.DG17-1.DG11",
          "tetrad2": "1.DG6-1.DG24-1.DG16-1.DG12",
          "direction": "hybrid",
          "rise": 3.0769001101988023,
          "twist": 27.8635274108319
        }
      ]
    }
  ],
  "dotBracket": {
    "sequence": "AAAGGGTTAGGGTTAGGGTTAGGGAA",
    "line1": "...(([...{)]...[[}...)]]..",
    "line2": "...([{...)((...))(...)]}.."
  },
  "quadruplexDotBracket": {
    "sequence": "AAAGGGTTAGGGTTAGGGTTAGGGAA",
    "structure": "...qRS...Qrs...SRq...Qrs..",
    "chi": "saasaaaaasaaaaassaaaasaaaa",
    "sugar": "NNNNNSSNNNNSNNSSSNSNNSNNSN",
    "loop": "......ppp...lll...lll....."
  }
}

4RJ1: Structural variations and solvent structure of UGGGGU quadruplexes stabilized by Sr2+ ions

$ curl https://www.ebi.ac.uk/pdbe/static/entry/download/4rj1-assembly-1.cif.gz | gzip -d > 4rj1-1.cif
$ uv run --locked eltetrado --input 4rj1-1.cif --output 4rj1-1.json

Chain order: A AB AA AC B BC BA BB
n4-helix with 10 tetrads
  Op* VIII n/a quadruplex with 5 tetrads
    Handedness: right
    Tetrad polarities: anticlockwise, clockwise, clockwise, clockwise, clockwise
    A.U1006 AC.U1006 AA.U1006 AB.U1006 cWH cWH cWH cWH O- VIIIa planarity=0.34  ions_outside=A.U1006: [SR] AA.U1006: [SR] AB.U1006: [SR] AC.U1006: [SR]
      direction=parallel rise=3.35 twist=-39.96
    A.G1005 AC.G1005 AA.G1005 AB.G1005 cHW cHW cHW cHW O+ VIIIa planarity=0.23
      direction=parallel rise=3.41 twist=25.9
    A.G1004 AC.G1004 AA.G1004 AB.G1004 cHW cHW cHW cHW O+ VIIIa planarity=0.11 ions_channel=SR
      direction=parallel rise=3.31 twist=35.81
    A.G1003 AC.G1003 AA.G1003 AB.G1003 cHW cHW cHW cHW O+ VIIIa planarity=0.15 ions_channel=SR
      direction=parallel rise=3.33 twist=27.12
    A.G1002 AC.G1002 AA.G1002 AB.G1002 cHW cHW cHW cHW O+ VIIIa planarity=0.16  ions_outside=AB.G1002: [CA] AC.G1002: [CA] AA.G1002: [CA] A.G1002: [CA]

    Tracts:
      A.U1006, A.G1005, A.G1004, A.G1003, A.G1002
      AC.U1006, AC.G1005, AC.G1004, AC.G1003, AC.G1002
      AA.U1006, AA.G1005, AA.G1004, AA.G1003, AA.G1002
      AB.U1006, AB.G1005, AB.G1004, AB.G1003, AB.G1002

    Path:
      A1, B1, C1, D1, E1, A4, B4, C4, D4, E4, A3, B3, C3, D3, E3, A2, B2, C2, D2, E2

  Op* VIII n/a quadruplex with 5 tetrads
    Handedness: right
    Tetrad polarities: anticlockwise, anticlockwise, anticlockwise, anticlockwise, clockwise
    B.G2002 BC.G2002 BA.G2002 BB.G2002 cWH cWH cWH cWH O+ VIIIa planarity=0.19
      direction=parallel rise=3.4 twist=27.41
    B.G2003 BC.G2003 BA.G2003 BB.G2003 cWH cWH cWH cWH O+ VIIIa planarity=0.16 ions_channel=SR ions_outside=B.G2003: [CA] BA.G2003: [CA] BB.G2003: [CA] BC.G2003: [CA]
      direction=parallel rise=3.29 twist=35.04
    B.G2004 BC.G2004 BA.G2004 BB.G2004 cWH cWH cWH cWH O+ VIIIa planarity=0.06 ions_channel=SR
      direction=parallel rise=3.35 twist=25.15
    B.G2005 BC.G2005 BA.G2005 BB.G2005 cWH cWH cWH cWH O+ VIIIa planarity=0.22
      direction=parallel rise=6.89 twist=-43.41
    B.U2006 BC.U2006 BA.U2006 BB.U2006 cHW cHW cHW cHW O- VIIIa planarity=0.5 ions_channel=NA,NA

    Tracts:
      B.G2002, B.G2003, B.G2004, B.G2005, B.U2006
      BC.G2002, BC.G2003, BC.G2004, BC.G2005, BC.U2006
      BA.G2002, BA.G2003, BA.G2004, BA.G2005, BA.U2006
      BB.G2002, BB.G2003, BB.G2004, BB.G2005, BB.U2006

    Path:
      A1, B1, C1, D1, E1, A2, B2, C2, D2, E2, A3, B3, C3, D3, E3, A4, B4, C4, D4, E4

UGGGG-UUGGGG-UUGGGG-UUGGGG-UUGGGG-UUGGGG-UUGGGG-UUGGGGU
.([{<-A.)]}>-(.[{<A-).]}>a-a.([{<-A.)]}>-(.[{<A-).]}>aa
.([{<-(.[{<A-).]}>a-A.)]}>-a.([{<-(.[{<A-).]}>a-A.)]}>a

Click to see the output JSON

{
  "metals": [
    {
      "symbol": "Sr",
      "count": 8
    },
    {
      "symbol": "Na",
      "count": 2
    },
    {
      "symbol": "Ca",
      "count": 8
    }
  ],
  "nucleotides": [
    {
      "index": 1,
      "chain": "A",
      "number": 1001,
      "icode": null,
      "molecule": "RNA",
      "fullName": "A.U1001",
      "shortName": "U",
      "chi": -141.92671313255752,
      "glycosidicBond": "anti",
      "sugarPucker": "North"
    },
    {
      "index": 2,
      "chain": "A",
      "number": 1002,
      "icode": null,
      "molecule": "RNA",
      "fullName": "A.G1002",
      "shortName": "G",
      "chi": -165.93034671112116,
      "glycosidicBond": "anti",
      "sugarPucker": "North"
    },
    {
      "index": 3,
      "chain": "A",
      "number": 1003,
      "icode": null,
      "molecule": "RNA",
      "fullName": "A.G1003",
      "shortName": "G",
      "chi": -121.5652426033226,
      "glycosidicBond": "anti",
      "sugarPucker": "South"
    },
    {
      "index": 4,
      "chain": "A",
      "number": 1004,
      "icode": null,
      "molecule": "RNA",
      "fullName": "A.G1004",
      "shortName": "G",
      "chi": -156.00957673923344,
      "glycosidicBond": "anti",
      "sugarPucker": "North"
    },
    {
      "index": 5,
      "chain": "A",
      "number": 1005,
      "icode": null,
      "molecule": "RNA",
      "fullName": "A.G1005",
      "shortName": "G",
      "chi": -148.10051684016415,
      "glycosidicBond": "anti",
      "sugarPucker": "North"
    },
    {
      "index": 6,
      "chain": "A",
      "number": 1006,
      "icode": null,
      "molecule": "RNA",
      "fullName": "A.U1006",
      "shortName": "U",
      "chi": -137.28005568139983,
      "glycosidicBond": "anti",
      "sugarPucker": "South"
    },
    {
      "index": 13,
      "chain": "AA",
      "number": 1001,
      "icode": null,
      "molecule": "RNA",
      "fullName": "AA.U1001",
      "shortName": "U",
      "chi": -141.9267131325575,
      "glycosidicBond": "anti",
      "sugarPucker": "North"
    },
    {
      "index": 14,
      "chain": "AA",
      "number": 1002,
      "icode": null,
      "molecule": "RNA",
      "fullName": "AA.G1002",
      "shortName": "G",
      "chi": -165.93034671112113,
      "glycosidicBond": "anti",
      "sugarPucker": "North"
    },
    {
      "index": 15,
      "chain": "AA",
      "number": 1003,
      "icode": null,
      "molecule": "RNA",
      "fullName": "AA.G1003",
      "shortName": "G",
      "chi": -121.56524260332266,
      "glycosidicBond": "anti",
      "sugarPucker": "South"
    },
    {
      "index": 16,
      "chain": "AA",
      "number": 1004,
      "icode": null,
      "molecule": "RNA",
      "fullName": "AA.G1004",
      "shortName": "G",
      "chi": -156.0095767392335,
      "glycosidicBond": "anti",
      "sugarPucker": "North"
    },
    {
      "index": 17,
      "chain": "AA",
      "number": 1005,
      "icode": null,
      "molecule": "RNA",
      "fullName": "AA.G1005",
      "shortName": "G",
      "chi": -148.10051684016406,
      "glycosidicBond": "anti",
      "sugarPucker": "North"
    },
    {
      "index": 18,
      "chain": "AA",
      "number": 1006,
      "icode": null,
      "molecule": "RNA",
      "fullName": "AA.U1006",
      "shortName": "U",
      "chi": -137.2800556813998,
      "glycosidicBond": "anti",
      "sugarPucker": "South"
    },
    {
      "index": 7,
      "chain": "AB",
      "number": 1001,
      "icode": null,
      "molecule": "RNA",
      "fullName": "AB.U1001",
      "shortName": "U",
      "chi": -141.92671313255744,
      "glycosidicBond": "anti",
      "sugarPucker": "North"
    },
    {
      "index": 8,
      "chain": "AB",
      "number": 1002,
      "icode": null,
      "molecule": "RNA",
      "fullName": "AB.G1002",
      "shortName": "G",
      "chi": -165.93034671112113,
      "glycosidicBond": "anti",
      "sugarPucker": "North"
    },
    {
      "index": 9,
      "chain": "AB",
      "number": 1003,
      "icode": null,
      "molecule": "RNA",
      "fullName": "AB.G1003",
      "shortName": "G",
      "chi": -121.56524260332263,
      "glycosidicBond": "anti",
      "sugarPucker": "South"
    },
    {
      "index": 10,
      "chain": "AB",
      "number": 1004,
      "icode": null,
      "molecule": "RNA",
      "fullName": "AB.G1004",
      "shortName": "G",
      "chi": -156.00957673923347,
      "glycosidicBond": "anti",
      "sugarPucker": "North"
    },
    {
      "index": 11,
      "chain": "AB",
      "number": 1005,
      "icode": null,
      "molecule": "RNA",
      "fullName": "AB.G1005",
      "shortName": "G",
      "chi": -148.10051684016406,
      "glycosidicBond": "anti",
      "sugarPucker": "North"
    },
    {
      "index": 12,
      "chain": "AB",
      "number": 1006,
      "icode": null,
      "molecule": "RNA",
      "fullName": "AB.U1006",
      "shortName": "U",
      "chi": -137.28005568139977,
      "glycosidicBond": "anti",
      "sugarPucker": "South"
    },
    {
      "index": 19,
      "chain": "AC",
      "number": 1001,
      "icode": null,
      "molecule": "RNA",
      "fullName": "AC.U1001",
      "shortName": "U",
      "chi": -141.92671313255747,
      "glycosidicBond": "anti",
      "sugarPucker": "North"
    },
    {
      "index": 20,
      "chain": "AC",
      "number": 1002,
      "icode": null,
      "molecule": "RNA",
      "fullName": "AC.G1002",
      "shortName": "G",
      "chi": -165.93034671112116,
      "glycosidicBond": "anti",
      "sugarPucker": "North"
    },
    {
      "index": 21,
      "chain": "AC",
      "number": 1003,
      "icode": null,
      "molecule": "RNA",
      "fullName": "AC.G1003",
      "shortName": "G",
      "chi": -121.56524260332263,
      "glycosidicBond": "anti",
      "sugarPucker": "South"
    },
    {
      "index": 22,
      "chain": "AC",
      "number": 1004,
      "icode": null,
      "molecule": "RNA",
      "fullName": "AC.G1004",
      "shortName": "G",
      "chi": -156.00957673923352,
      "glycosidicBond": "anti",
      "sugarPucker": "North"
    },
    {
      "index": 23,
      "chain": "AC",
      "number": 1005,
      "icode": null,
      "molecule": "RNA",
      "fullName": "AC.G1005",
      "shortName": "G",
      "chi": -148.1005168401641,
      "glycosidicBond": "anti",
      "sugarPucker": "North"
    },
    {
      "index": 24,
      "chain": "AC",
      "number": 1006,
      "icode": null,
      "molecule": "RNA",
      "fullName": "AC.U1006",
      "shortName": "U",
      "chi": -137.28005568139986,
      "glycosidicBond": "anti",
      "sugarPucker": "South"
    },
    {
      "index": 25,
      "chain": "B",
      "number": 2001,
      "icode": null,
      "molecule": "RNA",
      "fullName": "B.U2001",
      "shortName": "U",
      "chi": -146.4615316869476,
      "glycosidicBond": "anti",
      "sugarPucker": "North"
    },
    {
      "index": 26,
      "chain": "B",
      "number": 2002,
      "icode": null,
      "molecule": "RNA",
      "fullName": "B.G2002",
      "shortName": "G",
      "chi": -170.79660912745996,
      "glycosidicBond": "anti",
      "sugarPucker": "North"
    },
    {
      "index": 27,
      "chain": "B",
      "number": 2003,
      "icode": null,
      "molecule": "RNA",
      "fullName": "B.G2003",
      "shortName": "G",
      "chi": -117.68718110874113,
      "glycosidicBond": "anti",
      "sugarPucker": "South"
    },
    {
      "index": 28,
      "chain": "B",
      "number": 2004,
      "icode": null,
      "molecule": "RNA",
      "fullName": "B.G2004",
      "shortName": "G",
      "chi": -153.88587375071324,
      "glycosidicBond": "anti",
      "sugarPucker": "North"
    },
    {
      "index": 29,
      "chain": "B",
      "number": 2005,
      "icode": null,
      "molecule": "RNA",
      "fullName": "B.G2005",
      "shortName": "G",
      "chi": -148.85199128456694,
      "glycosidicBond": "anti",
      "sugarPucker": "North"
    },
    {
      "index": 30,
      "chain": "B",
      "number": 2006,
      "icode": null,
      "molecule": "RNA",
      "fullName": "B.U2006",
      "shortName": "U",
      "chi": -159.43730655241544,
      "glycosidicBond": "anti",
      "sugarPucker": "North"
    },
    {
      "index": 37,
      "chain": "BA",
      "number": 2001,
      "icode": null,
      "molecule": "RNA",
      "fullName": "BA.U2001",
      "shortName": "U",
      "chi": -146.46153168694764,
      "glycosidicBond": "anti",
      "sugarPucker": "North"
    },
    {
      "index": 38,
      "chain": "BA",
      "number": 2002,
      "icode": null,
      "molecule": "RNA",
      "fullName": "BA.G2002",
      "shortName": "G",
      "chi": -170.7966091274599,
      "glycosidicBond": "anti",
      "sugarPucker": "North"
    },
    {
      "index": 39,
      "chain": "BA",
      "number": 2003,
      "icode": null,
      "molecule": "RNA",
      "fullName": "BA.G2003",
      "shortName": "G",
      "chi": -117.68718110874113,
      "glycosidicBond": "anti",
      "sugarPucker": "South"
    },
    {
      "index": 40,
      "chain": "BA",
      "number": 2004,
      "icode": null,
      "molecule": "RNA",
      "fullName": "BA.G2004",
      "shortName": "G",
      "chi": -153.88587375071322,
      "glycosidicBond": "anti",
      "sugarPucker": "North"
    },
    {
      "index": 41,
      "chain": "BA",
      "number": 2005,
      "icode": null,
      "molecule": "RNA",
      "fullName": "BA.G2005",
      "shortName": "G",
      "chi": -148.851991284567,
      "glycosidicBond": "anti",
      "sugarPucker": "North"
    },
    {
      "index": 42,
      "chain": "BA",
      "number": 2006,
      "icode": null,
      "molecule": "RNA",
      "fullName": "BA.U2006",
      "shortName": "U",
      "chi": -159.43730655241544,
      "glycosidicBond": "anti",
      "sugarPucker": "North"
    },
    {
      "index": 43,
      "chain": "BB",
      "number": 2001,
      "icode": null,
      "molecule": "RNA",
      "fullName": "BB.U2001",
      "shortName": "U",
      "chi": -146.4615316869476,
      "glycosidicBond": "anti",
      "sugarPucker": "North"
    },
    {
      "index": 44,
      "chain": "BB",
      "number": 2002,
      "icode": null,
      "molecule": "RNA",
      "fullName": "BB.G2002",
      "shortName": "G",
      "chi": -170.79660912745993,
      "glycosidicBond": "anti",
      "sugarPucker": "North"
    },
    {
      "index": 45,
      "chain": "BB",
      "number": 2003,
      "icode": null,
      "molecule": "RNA",
      "fullName": "BB.G2003",
      "shortName": "G",
      "chi": -117.68718110874106,
      "glycosidicBond": "anti",
      "sugarPucker": "South"
    },
    {
      "index": 46,
      "chain": "BB",
      "number": 2004,
      "icode": null,
      "molecule": "RNA",
      "fullName": "BB.G2004",
      "shortName": "G",
      "chi": -153.8858737507132,
      "glycosidicBond": "anti",
      "sugarPucker": "North"
    },
    {
      "index": 47,
      "chain": "BB",
      "number": 2005,
      "icode": null,
      "molecule": "RNA",
      "fullName": "BB.G2005",
      "shortName": "G",
      "chi": -148.85199128456696,
      "glycosidicBond": "anti",
      "sugarPucker": "North"
    },
    {
      "index": 48,
      "chain": "BB",
      "number": 2006,
      "icode": null,
      "molecule": "RNA",
      "fullName": "BB.U2006",
      "shortName": "U",
      "chi": -159.43730655241544,
      "glycosidicBond": "anti",
      "sugarPucker": "North"
    },
    {
      "index": 31,
      "chain": "BC",
      "number": 2001,
      "icode": null,
      "molecule": "RNA",
      "fullName": "BC.U2001",
      "shortName": "U",
      "chi": -146.4615316869476,
      "glycosidicBond": "anti",
      "sugarPucker": "North"
    },
    {
      "index": 32,
      "chain": "BC",
      "number": 2002,
      "icode": null,
      "molecule": "RNA",
      "fullName": "BC.G2002",
      "shortName": "G",
      "chi": -170.79660912745993,
      "glycosidicBond": "anti",
      "sugarPucker": "North"
    },
    {
      "index": 33,
      "chain": "BC",
      "number": 2003,
      "icode": null,
      "molecule": "RNA",
      "fullName": "BC.G2003",
      "shortName": "G",
      "chi": -117.68718110874121,
      "glycosidicBond": "anti",
      "sugarPucker": "South"
    },
    {
      "index": 34,
      "chain": "BC",
      "number": 2004,
      "icode": null,
      "molecule": "RNA",
      "fullName": "BC.G2004",
      "shortName": "G",
      "chi": -153.88587375071322,
      "glycosidicBond": "anti",
      "sugarPucker": "North"
    },
    {
      "index": 35,
      "chain": "BC",
      "number": 2005,
      "icode": null,
      "molecule": "RNA",
      "fullName": "BC.G2005",
      "shortName": "G",
      "chi": -148.85199128456694,
      "glycosidicBond": "anti",
      "sugarPucker": "North"
    },
    {
      "index": 36,
      "chain": "BC",
      "number": 2006,
      "icode": null,
      "molecule": "RNA",
      "fullName": "BC.U2006",
      "shortName": "U",
      "chi": -159.43730655241544,
      "glycosidicBond": "anti",
      "sugarPucker": "North"
    }
  ],
  "basePairs": [
    {
      "nt1": "A.G1002",
      "nt2": "AB.G1002",
      "lw": "cWH",
      "inTetrad": true,
      "canonical": false
    },
    {
      "nt1": "A.G1002",
      "nt2": "AC.G1002",
      "lw": "cHW",
      "inTetrad": true,
      "canonical": false
    },
    {
      "nt1": "A.G1003",
      "nt2": "AB.G1003",
      "lw": "cWH",
      "inTetrad": true,
      "canonical": false
    },
    {
      "nt1": "A.G1003",
      "nt2": "AC.G1003",
      "lw": "cHW",
      "inTetrad": true,
      "canonical": false
    },
    {
      "nt1": "A.G1003",
      "nt2": "AC.G1004",
      "lw": "cSS",
      "inTetrad": false,
      "canonical": false
    },
    {
      "nt1": "A.G1004",
      "nt2": "AB.G1003",
      "lw": "cSS",
      "inTetrad": false,
      "canonical": false
    },
    {
      "nt1": "A.G1004",
      "nt2": "AB.G1004",
      "lw": "cWH",
      "inTetrad": true,
      "canonical": false
    },
    {
      "nt1": "A.G1004",
      "nt2": "AC.G1004",
      "lw": "cHW",
      "inTetrad": true,
      "canonical": false
    },
    {
      "nt1": "A.G1005",
      "nt2": "AB.G1005",
      "lw": "cWH",
      "inTetrad": true,
      "canonical": false
    },
    {
      "nt1": "A.G1005",
      "nt2": "AC.G1005",
      "lw": "cHW",
      "inTetrad": true,
      "canonical": false
    },
    {
      "nt1": "A.U1006",
      "nt2": "AB.U1006",
      "lw": "cHW",
      "inTetrad": true,
      "canonical": false
    },
    {
      "nt1": "A.U1006",
      "nt2": "AC.U1006",
      "lw": "cWH",
      "inTetrad": true,
      "canonical": false
    },
    {
      "nt1": "AB.G1002",
      "nt2": "AA.G1002",
      "lw": "cWH",
      "inTetrad": true,
      "canonical": false
    },
    {
      "nt1": "AA.G1002",
      "nt2": "AC.G1002",
      "lw": "cWH",
      "inTetrad": true,
      "canonical": false
    },
    {
      "nt1": "AB.G1003",
      "nt2": "AA.G1003",
      "lw": "cWH",
      "inTetrad": true,
      "canonical": false
    },
    {
      "nt1": "AB.G1004",
      "nt2": "AA.G1003",
      "lw": "cSS",
      "inTetrad": false,
      "canonical": false
    },
    {
      "nt1": "AA.G1003",
      "nt2": "AC.G1003",
      "lw": "cWH",
      "inTetrad": true,
      "canonical": false
    },
    {
      "nt1": "AB.G1004",
      "nt2": "AA.G1004",
      "lw": "cWH",
      "inTetrad": true,
      "canonical": false
    },
    {
      "nt1": "AA.G1004",
      "nt2": "AC.G1003",
      "lw": "cSS",
      "inTetrad": false,
      "canonical": false
    },
    {
      "nt1": "AA.G1004",
      "nt2": "AC.G1004",
      "lw": "cWH",
      "inTetrad": true,
      "canonical": false
    },
    {
      "nt1": "AB.G1005",
      "nt2": "AA.G1005",
      "lw": "cWH",
      "inTetrad": true,
      "canonical": false
    },
    {
      "nt1": "AA.G1005",
      "nt2": "AC.G1005",
      "lw": "cWH",
      "inTetrad": true,
      "canonical": false
    },
    {
      "nt1": "AB.U1006",
      "nt2": "AA.U1006",
      "lw": "cHW",
      "inTetrad": true,
      "canonical": false
    },
    {
      "nt1": "AA.U1006",
      "nt2": "AC.U1006",
      "lw": "cHW",
      "inTetrad": true,
      "canonical": false
    },
    {
      "nt1": "B.G2002",
      "nt2": "BB.G2002",
      "lw": "cHW",
      "inTetrad": true,
      "canonical": false
    },
    {
      "nt1": "B.G2002",
      "nt2": "BC.G2002",
      "lw": "cWH",
      "inTetrad": true,
      "canonical": false
    },
    {
      "nt1": "B.G2003",
      "nt2": "BB.G2003",
      "lw": "cHW",
      "inTetrad": true,
      "canonical": false
    },
    {
      "nt1": "B.G2003",
      "nt2": "BC.G2003",
      "lw": "cWH",
      "inTetrad": true,
      "canonical": false
    },
    {
      "nt1": "B.G2004",
      "nt2": "BB.G2004",
      "lw": "cHW",
      "inTetrad": true,
      "canonical": false
    },
    {
      "nt1": "B.G2004",
      "nt2": "BC.G2004",
      "lw": "cWH",
      "inTetrad": true,
      "canonical": false
    },
    {
      "nt1": "B.G2005",
      "nt2": "BB.G2005",
      "lw": "cHW",
      "inTetrad": true,
      "canonical": false
    },
    {
      "nt1": "B.G2005",
      "nt2": "BC.G2005",
      "lw": "cWH",
      "inTetrad": true,
      "canonical": false
    },
    {
      "nt1": "B.U2006",
      "nt2": "BB.U2006",
      "lw": "cWH",
      "inTetrad": true,
      "canonical": false
    },
    {
      "nt1": "B.U2006",
      "nt2": "BC.U2006",
      "lw": "cHW",
      "inTetrad": true,
      "canonical": false
    },
    {
      "nt1": "BA.G2002",
      "nt2": "BB.G2002",
      "lw": "cWH",
      "inTetrad": true,
      "canonical": false
    },
    {
      "nt1": "BC.G2002",
      "nt2": "BA.G2002",
      "lw": "cWH",
      "inTetrad": true,
      "canonical": false
    },
    {
      "nt1": "BA.G2003",
      "nt2": "BB.G2003",
      "lw": "cWH",
      "inTetrad": true,
      "canonical": false
    },
    {
      "nt1": "BC.G2003",
      "nt2": "BA.G2003",
      "lw": "cWH",
      "inTetrad": true,
      "canonical": false
    },
    {
      "nt1": "BC.G2004",
      "nt2": "BA.G2003",
      "lw": "cSS",
      "inTetrad": false,
      "canonical": false
    },
    {
      "nt1": "BA.G2004",
      "nt2": "BB.G2004",
      "lw": "cWH",
      "inTetrad": true,
      "canonical": false
    },
    {
      "nt1": "BC.G2004",
      "nt2": "BA.G2004",
      "lw": "cWH",
      "inTetrad": true,
      "canonical": false
    },
    {
      "nt1": "BA.G2005",
      "nt2": "BB.G2005",
      "lw": "cWH",
      "inTetrad": true,
      "canonical": false
    },
    {
      "nt1": "BC.G2005",
      "nt2": "BA.G2005",
      "lw": "cWH",
      "inTetrad": true,
      "canonical": false
    },
    {
      "nt1": "BA.U2006",
      "nt2": "BB.U2006",
      "lw": "cHW",
      "inTetrad": true,
      "canonical": false
    },
    {
      "nt1": "BC.U2006",
      "nt2": "BA.U2006",
      "lw": "cHW",
      "inTetrad": true,
      "canonical": false
    }
  ],
  "helices": [
    {
      "quadruplexes": [
        {
          "tetrads": [
            {
              "id": "A.U1006-AC.U1006-AA.U1006-AB.U1006",
              "nt1": "A.U1006",
              "nt2": "AC.U1006",
              "nt3": "AA.U1006",
              "nt4": "AB.U1006",
              "onz": "O-",
              "gbaClassification": "VIIIa",
              "planarityDeviation": 0.34191400600150934,
              "ionsChannel": [],
              "ionsOutside": [
                {
                  "nt": "A.U1006",
                  "ion": "Sr"
                },
                {
                  "nt": "AA.U1006",
                  "ion": "Sr"
                },
                {
                  "nt": "AB.U1006",
                  "ion": "Sr"
                },
                {
                  "nt": "AC.U1006",
                  "ion": "Sr"
                }
              ]
            },
            {
              "id": "A.G1005-AC.G1005-AA.G1005-AB.G1005",
              "nt1": "A.G1005",
              "nt2": "AC.G1005",
              "nt3": "AA.G1005",
              "nt4": "AB.G1005",
              "onz": "O+",
              "gbaClassification": "VIIIa",
              "planarityDeviation": 0.22931709613221674,
              "ionsChannel": [],
              "ionsOutside": []
            },
            {
              "id": "A.G1004-AC.G1004-AA.G1004-AB.G1004",
              "nt1": "A.G1004",
              "nt2": "AC.G1004",
              "nt3": "AA.G1004",
              "nt4": "AB.G1004",
              "onz": "O+",
              "gbaClassification": "VIIIa",
              "planarityDeviation": 0.11204500276508543,
              "ionsChannel": ["Sr"],
              "ionsOutside": []
            },
            {
              "id": "A.G1003-AC.G1003-AA.G1003-AB.G1003",
              "nt1": "A.G1003",
              "nt2": "AC.G1003",
              "nt3": "AA.G1003",
              "nt4": "AB.G1003",
              "onz": "O+",
              "gbaClassification": "VIIIa",
              "planarityDeviation": 0.14900890205810532,
              "ionsChannel": ["Sr"],
              "ionsOutside": []
            },
            {
              "id": "A.G1002-AC.G1002-AA.G1002-AB.G1002",
              "nt1": "A.G1002",
              "nt2": "AC.G1002",
              "nt3": "AA.G1002",
              "nt4": "AB.G1002",
              "onz": "O+",
              "gbaClassification": "VIIIa",
              "planarityDeviation": 0.157182265102682,
              "ionsChannel": [],
              "ionsOutside": [
                {
                  "nt": "AB.G1002",
                  "ion": "Ca"
                },
                {
                  "nt": "AC.G1002",
                  "ion": "Ca"
                },
                {
                  "nt": "AA.G1002",
                  "ion": "Ca"
                },
                {
                  "nt": "A.G1002",
                  "ion": "Ca"
                }
              ]
            }
          ],
          "onzm": "Op*",
          "handedness": "right",
          "tetradPolarities": ["anticlockwise", "clockwise", "clockwise", "clockwise", "clockwise"],
          "strandPolarities": [
            ["minus", "plus", "plus", "plus", "plus"],
            ["minus", "plus", "plus", "plus", "plus"],
            ["minus", "plus", "plus", "plus", "plus"],
            ["minus", "plus", "plus", "plus", "plus"]
          ],
          "loopClassification": null,
          "gbaClassification": ["VIII"],
          "tracts": [
            ["A.U1006", "A.G1005", "A.G1004", "A.G1003", "A.G1002"],
            ["AC.U1006", "AC.G1005", "AC.G1004", "AC.G1003", "AC.G1002"],
            ["AA.U1006", "AA.G1005", "AA.G1004", "AA.G1003", "AA.G1002"],
            ["AB.U1006", "AB.G1005", "AB.G1004", "AB.G1003", "AB.G1002"]
          ],
          "path": ["A1", "B1", "C1", "D1", "E1", "A4", "B4", "C4", "D4", "E4", "A3", "B3", "C3", "D3", "E3", "A2", "B2", "C2", "D2", "E2"],
          "bulges": [],
          "loops": []
        },
        {
          "tetrads": [
            {
              "id": "B.G2002-BC.G2002-BA.G2002-BB.G2002",
              "nt1": "B.G2002",
              "nt2": "BC.G2002",
              "nt3": "BA.G2002",
              "nt4": "BB.G2002",
              "onz": "O+",
              "gbaClassification": "VIIIa",
              "planarityDeviation": 0.1941232461884563,
              "ionsChannel": [],
              "ionsOutside": []
            },
            {
              "id": "B.G2003-BC.G2003-BA.G2003-BB.G2003",
              "nt1": "B.G2003",
              "nt2": "BC.G2003",
              "nt3": "BA.G2003",
              "nt4": "BB.G2003",
              "onz": "O+",
              "gbaClassification": "VIIIa",
              "planarityDeviation": 0.15566413303664228,
              "ionsChannel": ["Sr"],
              "ionsOutside": [
                {
                  "nt": "B.G2003",
                  "ion": "Ca"
                },
                {
                  "nt": "BA.G2003",
                  "ion": "Ca"
                },
                {
                  "nt": "BB.G2003",
                  "ion": "Ca"
                },
                {
                  "nt": "BC.G2003",
                  "ion": "Ca"
                }
              ]
            },
            {
              "id": "B.G2004-BC.G2004-BA.G2004-BB.G2004",
              "nt1": "B.G2004",
              "nt2": "BC.G2004",
              "nt3": "BA.G2004",
              "nt4": "BB.G2004",
              "onz": "O+",
              "gbaClassification": "VIIIa",
              "planarityDeviation": 0.06292564154330361,
              "ionsChannel": ["Sr"],
              "ionsOutside": []
            },
            {
              "id": "B.G2005-BC.G2005-BA.G2005-BB.G2005",
              "nt1": "B.G2005",
              "nt2": "BC.G2005",
              "nt3": "BA.G2005",
              "nt4": "BB.G2005",
              "onz": "O+",
              "gbaClassification": "VIIIa",
              "planarityDeviation": 0.22228215261667064,
              "ionsChannel": [],
              "ionsOutside": []
            },
            {
              "id": "B.U2006-BC.U2006-BA.U2006-BB.U2006",
              "nt1": "B.U2006",
              "nt2": "BC.U2006",
              "nt3": "BA.U2006",
              "nt4": "BB.U2006",
              "onz": "O-",
              "gbaClassification": "VIIIa",
              "planarityDeviation": 0.5029635765888024,
              "ionsChannel": ["Na", "Na"],
              "ionsOutside": []
            }
          ],
          "onzm": "Op*",
          "handedness": "right",
          "tetradPolarities": ["anticlockwise", "anticlockwise", "anticlockwise", "anticlockwise", "clockwise"],
          "strandPolarities": [
            ["plus", "plus", "plus", "plus", "minus"],
            ["plus", "plus", "plus", "plus", "minus"],
            ["plus", "plus", "plus", "plus", "minus"],
            ["plus", "plus", "plus", "plus", "minus"]
          ],
          "loopClassification": null,
          "gbaClassification": ["VIII"],
          "tracts": [
            ["B.G2002", "B.G2003", "B.G2004", "B.G2005", "B.U2006"],
            ["BC.G2002", "BC.G2003", "BC.G2004", "BC.G2005", "BC.U2006"],
            ["BA.G2002", "BA.G2003", "BA.G2004", "BA.G2005", "BA.U2006"],
            ["BB.G2002", "BB.G2003", "BB.G2004", "BB.G2005", "BB.U2006"]
          ],
          "path": ["A1", "B1", "C1", "D1", "E1", "A2", "B2", "C2", "D2", "E2", "A3", "B3", "C3", "D3", "E3", "A4", "B4", "C4", "D4", "E4"],
          "bulges": [],
          "loops": []
        }
      ],
      "tetradPairs": [
        {
          "tetrad1": "A.U1006-AC.U1006-AA.U1006-AB.U1006",
          "tetrad2": "A.G1005-AC.G1005-AA.G1005-AB.G1005",
          "direction": "parallel",
          "rise": 3.3539318181818345,
          "twist": -39.962531742191715
        },
        {
          "tetrad1": "A.G1005-AC.G1005-AA.G1005-AB.G1005",
          "tetrad2": "A.G1004-AC.G1004-AA.G1004-AB.G1004",
          "direction": "parallel",
          "rise": 3.412909090909082,
          "twist": 25.896144446319223
        },
        {
          "tetrad1": "A.G1004-AC.G1004-AA.G1004-AB.G1004",
          "tetrad2": "A.G1003-AC.G1003-AA.G1003-AB.G1003",
          "direction": "parallel",
          "rise": 3.3061818181818126,
          "twist": 35.81115298630442
        },
        {
          "tetrad1": "A.G1003-AC.G1003-AA.G1003-AB.G1003",
          "tetrad2": "A.G1002-AC.G1002-AA.G1002-AB.G1002",
          "direction": "parallel",
          "rise": 3.3308181818181843,
          "twist": 27.115159719868057
        },
        {
          "tetrad1": "A.G1002-AC.G1002-AA.G1002-AB.G1002",
          "tetrad2": "B.G2002-BC.G2002-BA.G2002-BB.G2002",
          "direction": "parallel",
          "rise": 3.349181818181819,
          "twist": -28.99318031267558
        },
        {
          "tetrad1": "B.G2002-BC.G2002-BA.G2002-BB.G2002",
          "tetrad2": "B.G2003-BC.G2003-BA.G2003-BB.G2003",
          "direction": "parallel",
          "rise": 3.3993636363636277,
          "twist": 27.410084968596863
        },
        {
          "tetrad1": "B.G2003-BC.G2003-BA.G2003-BB.G2003",
          "tetrad2": "B.G2004-BC.G2004-BA.G2004-BB.G2004",
          "direction": "parallel",
          "rise": 3.289363636363646,
          "twist": 35.04072146975963
        },
        {
          "tetrad1": "B.G2004-BC.G2004-BA.G2004-BB.G2004",
          "tetrad2": "B.G2005-BC.G2005-BA.G2005-BB.G2005",
          "direction": "parallel",
          "rise": 3.346909090909092,
          "twist": 25.14999794993814
        },
        {
          "tetrad1": "B.G2005-BC.G2005-BA.G2005-BB.G2005",
          "tetrad2": "B.U2006-BC.U2006-BA.U2006-BB.U2006",
          "direction": "parallel",
          "rise": 6.888965909090907,
          "twist": -43.406094922623346
        }
      ]
    }
  ],
  "dotBracket": {
    "sequence": "UGGGG-UUGGGG-UUGGGG-UUGGGG-UUGGGG-UUGGGG-UUGGGG-UUGGGGU",
    "line1": ".([{<-A.)]}>-(.[{<A-).]}>a-a.([{<-A.)]}>-(.[{<A-).]}>aa",
    "line2": ".([{<-(.[{<A-).]}>a-A.)]}>-a.([{<-(.[{<A-).]}>a-A.)]}>a"
  },
  "quadruplexDotBracket": {
    "sequence": "UGGGGU-UGGGGU-UGGGGU-UGGGGU-UGGGGU-UGGGGU-UGGGGU-UGGGGU",
    "structure": ".QRSTu-.qrstU-.QRSTu-.qrstU-.VWXYz-.vwxyZ-.VWXYz-.vwxyZ",
    "chi": "aaaaaa-aaaaaa-aaaaaa-aaaaaa-aaaaaa-aaaaaa-aaaaaa-aaaaaa",
    "sugar": "NNSNNS-NNSNNS-NNSNNS-NNSNNS-NNSNNN-NNSNNN-NNSNNN-NNSNNN",
    "loop": "......-......-......-......-......-......-......-......"
  }
}

G4 fold scoring

The src/eltetrado/score_folds.py script scores candidate G4-folding JSON files (as produced by eltetrado --output) against a reference JSON file with correct values.

Usage

uv run python src/eltetrado/score_folds.py reference.json cand1.json cand2.json \
    [--csv results.csv] [--filter-valid] [--sort {score,file}] [--desc]

Candidates can also be piped via stdin, which is useful when evaluating hundreds of files:

find candidates/ -name '*.json' | \
    uv run python src/eltetrado/score_folds.py reference.json - \
    --csv results.csv --filter-valid
sort -t, -k3 -nr results.csv   # rank valid folds by score

A self-test (the reference scored against itself must yield valid=True, score=100):

uv run python src/eltetrado/score_folds.py reference.json reference.json

How the score is computed

Validity gate

A candidate is valid only if the multiset of tetrad nucleotide sets — every {nt1, nt2, nt3, nt4} as an order-insensitive set, across all quadruplexes in all helices — is exactly identical to the reference. Invalid folds are capped at a small baseline score (proportional to how close the quadruplex count is to the reference).

Per-quadruplex score

Reference and candidate quadruplexes are matched 1-1 greedily by tetrad Jaccard overlap. Each matched pair is scored with weighted checks:

Check Weight
tetrads multiset match 10
gbaClassification per tetrad 8
onz per tetrad 8
planarityDeviation (numeric similarity) 6
handedness 6
loopClassification (classification + loopProgression) 6
tetradPolarities 5
strandPolarities 5
tracts (sets of ordered tracts) 6
path (order-sensitive) 5
quadruplex-level gbaClassification 5
loops (multiset) 6
bulges (multiset) 4
onzm 4
tetradPairs direction 4
tetradPairs rise/twist (numeric, half/half) 6

Numeric checks (planarity deviation, rise, twist) contribute their 0..1 similarity instead of a boolean pass/fail.

Aggregation

Quadruplex scores are averaged, weighted by the number of tetrads in each reference quadruplex. Dot brackets contribute the remainder: both dotBracket and quadruplexDotBracket must match exactly to earn those points. A perfect match yields exactly 100.0.

CSV output

One row per candidate, with columns for validity, score and every individual check (per-quadruplex metrics are prefixed q0_, q1_, …). Filter and rank, e.g.:

# valid folds only, best first
uv run python src/eltetrado/score_folds.py ref.json $(ls cands/*.json) \
    --csv results.csv --filter-valid

Funding

This research was supported by the National Science Centre, Poland [2016/23/B/ST6/03931, 2019/35/B/ST6/03074] and Mloda Kadra project [09/91/SBAD/0684] from Poznan University of Technology, and carried out in the European Centre for Bioinformatics and Genomics (Poland). The authors also acknowledge partial support by the statutory funds of Poznan University of Technology, Polish Ministry of Science and Higher Education, and the Institute of Bioorganic Chemistry, PAS within intramural financing program.

Bibliography

  1. Topology-Based Classification of Tetrads and Quadruplex Structures. M. Popenda, J. Miskiewicz, J. Sarzynska, T. Zok, M. Szachniuk. Bioinformatics. 2020. 36(4):1129–1134. doi:10.1093/bioinformatics/btz738

  2. ElTetrado: A Tool for Identification and Classification of Tetrads and Quadruplexes. T. Zok, M. Popenda, M. Szachniuk. BMC Bioinformatics. 2020. 21(1):40. doi:10.1186/s12859-020-3385-1

  3. R-Chie : A Web Server and R Package for Visualizing RNA Secondary Structures. D. Lai, J.R. Proctor, J.Y.A. Zhu, I.M. Meyer. Nucleic Acids Research. 2012. 40(12):e95. doi:10/f99845

  4. Geometric Nomenclature and Classification of RNA Base Pairs. N.B. Leontis, E. Westhof. RNA. 2001. 7(4):499–512. doi:10.1017/s1355838201002515

Metadata

Release files for eltetrado 1.10.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for eltetrado 1.10.3
File Size Uploaded
eltetrado-1.10.3.tar.gz 62.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for eltetrado 1.10.3
File Interpreter ABI Platform
eltetrado-1.10.3-py3-none-any.whl Python 3 none any Details

Total release size: 118.8 kB

Release files / eltetrado-1.10.3.tar.gz

Download URL eltetrado-1.10.3.tar.gz
Size 62.9 kB
Tags Source
SHA-256 checksum
How to use checksums
d71d9edb1f19b033087a6d2bbc42c525c8a90c848e1692a3283b84ec1fe2d746
BLAKE2b-256 checksum
How to use checksums
6858db1a30b234c97eaeb92ff1af3aa40bfdd8bf5f1df17290d5291c5672e4cf
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.9.30 {"installer":{"name":"uv","version":"0.9.30","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / eltetrado-1.10.3-py3-none-any.whl

Download URL eltetrado-1.10.3-py3-none-any.whl
Size 55.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
9f6897ef3f0fc277856598d03e67a2fe4e7f75777e10198d320c54129d2c1a68
BLAKE2b-256 checksum
How to use checksums
a6937499ded6bae13e65e90597cdd24dddeb68b7f08611ba1ff4fb73ebdd4371
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.9.30 {"installer":{"name":"uv","version":"0.9.30","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release history Release notifications | RSS feed

This release

1.10.3 This release

2 release files

1.9.9

2 release files

1.9.8

2 release files

1.9.7

2 release files

1.9.6

2 release files

1.9.5

2 release files

1.9.4

2 release files

1.9.3

2 release files

1.9.2

2 release files

1.9.1

2 release files

1.9.0

2 release files

1.8.1

2 release files

1.8.0

2 release files

1.7.2

2 release files

1.7.1

2 release files

1.7.0

2 release files

1.6.0

2 release files

1.5.20

2 release files

1.5.19

2 release files

1.5.18

2 release files

1.5.17

2 release files

1.5.16

2 release files

1.5.15

2 release files

1.5.12

2 release files

1.5.11

2 release files

1.5.10

1 release file

1.5.9

2 release files

1.5.8

2 release files

1.5.7

2 release files

1.5.6

2 release files

1.5.5

2 release files

1.5.4

2 release files

1.5.3

2 release files

1.5.2

2 release files

1.5.1

2 release files

1.5.0

2 release files

1.4.7

2 release files

1.4.6

2 release files

1.4.5

2 release files

1.4.4

2 release files

1.4.3

2 release files

1.4.2

2 release files

1.4.1

2 release files

1.4.0

2 release files

1.3.5

2 release files

1.3.4

2 release files

1.3.3

2 release files

1.3.2

2 release files

1.3.1

2 release files

1.3.0

2 release files

1.2.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page