As of v1.3.3-2015sep03, DSSR outputs the reference frame of any base or base-pair (bp). With an explicit list of such reference frames, one can better understand how the 3DNA/DSSR bp parameters are calculated. Moreover, third-party bioinformatics tools can take advantage of the frames for further exploration of nucleic acid structures, including visualization.
Let’s use the G1–C72
bp (detailed below) in the yeast phenylalanine tRNA (1ehz) as an example:
1 A.G1 A.C72 G-C WC 19-XIX cWW cW-W
The standard base reference frame for A.G1
is:
{ rsmd: 0.008, origin: [53.757, 41.868, 52.93], x_axis: [-0.259, -0.25, -0.933], y_axis: [-0.543, 0.837, -0.073], z_axis: [0.799, 0.488, -0.352] }
And the one for A.C72
is:
{ rsmd: 0.006, origin: [53.779, 42.132, 52.224], x_axis: [-0.402, -0.311, -0.861], y_axis: [0.451, -0.886, 0.109], z_axis: [-0.797, -0.345, 0.497] }
The G1–C72
bp reference frame is:
{ rsmd: null, origin: [53.768, 42, 52.577], x_axis: [-0.331, -0.283, -0.9], y_axis: [-0.497, 0.863, -0.089], z_axis: [0.802, 0.418, -0.427] }
The beauty of the DSSR JSON output is that the above information can be extracted on the fly. For example, the following commands extract the above frames:
x3dna-dssr -i=1ehz.pdb --json | jq '.ntParams[] | select(.nt_id=="A.G1") | .frame' x3dna-dssr -i=1ehz.pdb --json | jq '.ntParams[] | select(.nt_id=="A.C72") | .frame' x3dna-dssr -i=1ehz.pdb --json --more | jq .pairs[0].frame
Note that in JSON, the array is 0-indexed, so the first bp (G1–C72
) has an index of 0
. In addition to jq, I also used underscore to pretty-print the frames.