%%
%% %CopyrightBegin%
%% 
%% Copyright Ericsson AB 2001-2011. All Rights Reserved.
%% 
%% The contents of this file are subject to the Erlang Public License,
%% Version 1.1, (the "License"); you may not use this file except in
%% compliance with the License. You should have received a copy of the
%% Erlang Public License along with this software. If not, it can be
%% retrieved online at http://www.erlang.org/.
%% 
%% Software distributed under the License is distributed on an "AS IS"
%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
%% the License for the specific language governing rights and limitations
%% under the License.
%% 
%% %CopyrightEnd%
%%

-module(pseudoknot_SUITE).

-export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1, 
	 init_per_group/2,end_per_group/2,test/1]).

suite() -> [{ct_hooks,[ts_install_cth]}].

all() -> 
    [test].

groups() -> 
    [].

init_per_suite(Config) ->
    Config.

end_per_suite(_Config) ->
    ok.

init_per_group(_GroupName, Config) ->
    Config.

end_per_group(_GroupName, Config) ->
    Config.

    
test(Config) when is_list(Config) ->
    statistics(runtime),
    R = loop(1,0),
    {_,Time} = statistics(runtime),
    io:format("\nruntime = ~p msecs\nresult = ~p\n", [Time,R]),
    true = abs(R-33.7976) < 0.0001,
    {comment,lists:flatten(io_lib:format("Time: ~w", [Time]))}.

append([H|T], Z) ->
  [H|append(T, Z)];
append([], X) ->
  X.

atan2(Y,X) when X>0.0 ->
  math:atan(Y/X);
atan2(Y,X) when Y<0.0 ->
  if
    X == 0.0 -> -1.57079632679489661923;
    true -> math:atan(Y/X) - 3.14159265358979323846
  end;
atan2(Y,X) ->
  if
    X == 0.0 -> 1.57079632679489661923;
    true -> math:atan(Y/X) + 3.14159265358979323846
  end.

% -- POINTS ------------------------------------------------------------------

%pt ::= {X, Y, Z} where X,Y,Z are floats

pt_sub({X1, Y1, Z1}, {X2, Y2, Z2}) 
    when is_float(X1), is_float(Y1), is_float(Z1),
         is_float(X2), is_float(Y2), is_float(Z2) ->
    {X1 - X2, Y1 - Y2, Z1 - Z2}.

pt_dist({X1, Y1, Z1}, {X2, Y2, Z2})
    when is_float(X1), is_float(Y1), is_float(Z1),
         is_float(X2), is_float(Y2), is_float(Z2) ->
    Dx = X1 - X2,
    Dy = Y1 - Y2,
    Dz = Z1 - Z2,
    math:sqrt(Dx * Dx + Dy * Dy + Dz * Dz).

pt_phi({X, Y, Z})
    when is_float(X), is_float(Z) ->
    B = atan2(X, Z),
    atan2(math:cos(B) * Z + math:sin(B) * X, Y).

pt_theta ({X, _, Z}) ->
    atan2(X, Z).

% -- COORDINATE TRANSFORMATIONS ----------------------------------------------

% The notation for the transformations follows "Paul, R.P. (1981) Robot
% Manipulators.  MIT Press." with the exception that our transformation
% matrices don't have the perspective terms and are the transpose of
% Paul's one.  See also "M\"antyl\"a, M. (1985) An Introduction to
% Solid Modeling, Computer Science Press" Appendix A.
%
% The components of a transformation matrix are named like this:
%
%  a  b  c
%  d  e  f
%  g  h  i
% tx ty tz
%
% The components tx, ty, and tz are the translation vector.

%tfo ::= {A,B,C,D,E,F,G,H,I,Tx,Ty,Tz} where all elements are floats

tfo_id() -> {1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0}.

% The function "tfo-apply" multiplies a transformation matrix, tfo, by a
% point vector, p.  The result is a new point.

tfo_apply ({A,B,C,D,E,F,G,H,I,Tx,Ty,Tz}, {X,Y,Z})
    when is_float(A), is_float(B), is_float(C), is_float(D), is_float(E),
         is_float(F), is_float(G), is_float(H), is_float(I), 
         is_float(Tx), is_float(Ty), is_float(Tz), is_float(X), is_float(Y), is_float(Z) ->
    {X * A + Y * D + Z * G + Tx,
     X * B + Y * E + Z * H + Ty,
     X * C + Y * F + Z * I + Tz}.

% The function "tfo-combine" multiplies two transformation matrices A and B.
% The result is a new matrix which cumulates the transformations described
% by A and B.

tfo_combine({A_a,A_b,A_c,A_d,A_e,A_f,A_g,A_h,A_i,A_tx,A_ty,A_tz},
   {B_a,B_b,B_c,B_d,B_e,B_f,B_g,B_h,B_i,B_tx,B_ty,B_tz}) 
   when is_float(A_a), is_float(A_b), is_float(A_c), is_float(A_d), is_float(A_e),
        is_float(A_f), is_float(A_g), is_float(A_h), is_float(A_i), is_float(A_tx),
        is_float(A_ty), is_float(A_tz),
        is_float(B_a), is_float(B_b), is_float(B_c), is_float(B_d), is_float(B_e),
        is_float(B_f), is_float(B_g), is_float(B_h), is_float(B_i), is_float(B_tx),
        is_float(B_ty), is_float(B_tz) ->
    {A_a * B_a + A_b * B_d + A_c * B_g,
      A_a * B_b + A_b * B_e + A_c * B_h,
      A_a * B_c + A_b * B_f + A_c * B_i,
      A_d * B_a + A_e * B_d + A_f * B_g,
      A_d * B_b + A_e * B_e + A_f * B_h,
      A_d * B_c + A_e * B_f + A_f * B_i,
      A_g * B_a + A_h * B_d + A_i * B_g,
      A_g * B_b + A_h * B_e + A_i * B_h,
      A_g * B_c + A_h * B_f + A_i * B_i,
      A_tx * B_a + A_ty * B_d + A_tz * B_g + B_tx,
      A_tx * B_b + A_ty * B_e + A_tz * B_h + B_ty,
      A_tx * B_c + A_ty * B_f + A_tz * B_i + B_tz}.

% The function "tfo-inv-ortho" computes the inverse of a homogeneous
% transformation matrix.

tfo_inv_ortho({A,B,C,D,E,F,G,H,I,Tx,Ty,Tz})
    when is_float(A), is_float(B), is_float(C), is_float(D), is_float(E), is_float(F),
         is_float(G), is_float(H), is_float(I), is_float(Tx), is_float(Ty), is_float(Tz) ->
    {A,D,G,
     B,E,H,
     C,F,I,
     -(A * Tx + B * Ty + C * Tz),
     -(D * Tx + E * Ty + F * Tz),
     -(G * Tx + H * Ty + I * Tz)}.

% Given three points p1, p2, and p3, the function "tfo-align" computes
% a transformation matrix such that point p1 gets mapped to (0,0,0), p2 gets
% mapped to the Y axis and p3 gets mapped to the YZ plane.

tfo_align({X1,Y1,Z1},{X2,Y2,Z2},{X3,Y3,Z3})
      when is_float(X1), is_float(Y1), is_float(Z1),
           is_float(X2), is_float(Y2), is_float(Z2),
           is_float(X3), is_float(Y3), is_float(Z3) ->
      X31 = X3 - X1,
      Y31 = Y3 - Y1,
      Z31 = Z3 - Z1,
      Rotpy = pt_sub({X2,Y2,Z2},{X1,Y1,Z1}),
      Phi = pt_phi(Rotpy),
      Theta = pt_theta(Rotpy),
      Sinp = math:sin(Phi),
      Sint = math:sin(Theta),
      Cosp = math:cos(Phi),
      Cost = math:cos(Theta),
      Sinpsint = Sinp * Sint,
      Sinpcost = Sinp * Cost,
      Cospsint = Cosp * Sint,
      Cospcost = Cosp * Cost,
      Rotpz = {Cost * X31 - Sint * Z31,
                Sinpsint * X31 + Cosp * Y31 + Sinpcost * Z31,
                Cospsint * X31 - Sinp * Y31 + Cospcost * Z31},
      Rho = pt_theta(Rotpz),
      Cosr = math:cos(Rho),
      Sinr = math:sin(Rho),
      X = Z1 * Sint - X1 * Cost,
      Y = -X1 * Sinpsint - Y1 * Cosp - Z1 * Sinpcost,
      Z = Y1 * Sinp - Z1 * Cospcost - X1 * Cospsint,
      {Cost * Cosr - Cospsint * Sinr,
      Sinpsint,
      Cost * Sinr + Cospsint * Cosr,
      Sinp * Sinr,
      Cosp,
      -Sinp * Cosr,
      -Sint * Cosr - Cospcost * Sinr,
      Sinpcost,
      Cospcost * Cosr - Sint * Sinr,
      X * Cosr - Z * Sinr,
      Y,
      X * Sinr + Z * Cosr}.

% -- NUCLEIC ACID CONFORMATIONS DATA BASE ------------------------------------

% Numbering of atoms follows the paper:
%
% IUPAC-IUB Joint Commission on Biochemical Nomenclature (JCBN)
% (1983) Abbreviations and Symbols for the Description of
% Conformations of Polynucleotide Chains.  Eur. J. Biochem 131,
% 9-15.

% Define part common to all 4 nucleotide types.

%nuc ::= {
%          tfo,tfo,tfo,tfo,
%          pt,pt,pt,pt,pt,pt,pt,pt,pt,pt,pt,pt,pt,
%          pt,pt,pt,pt,pt,pt,pt,pt,pt,pt,pt,pt,
%          A/C/G/U,
%          nuc_specific
%        }

%  dgf_base_tfo  ; defines the standard position for wc and wc_dumas
%  p_o3'_275_tfo ; defines the standard position for the connect function
%  p_o3'_180_tfo
%  p_o3'_60_tfo
%  p o1p o2p o5' c5' h5' h5'' c4' h4' o4' c1' h1' c2' h2'' o2' h2' c3'
%  h3' o3' n1 n3 c2 c4 c5 c6

type({_,_,_,_,_,_,_,_,_,_,
          _,_,_,_,_,_,_,_,_,_,
          _,_,_,_,_,_,_,_,_,X,
          _}) -> X.

nuc_C1_({_,_,_,_,_,_,_,_,_,_,
         _,_,_,_,X,_,_,_,_,_,
         _,_,_,_,_,_,_,_,_,_,
         _}) -> X.

nuc_C2({_,_,_,_,_,_,_,_,_,_,
        _,_,_,_,_,_,_,_,_,_,
        _,_,_,_,_,X,_,_,_,_,
        _}) -> X.

nuc_C3_({_,_,_,_,_,_,_,_,_,_,
         _,_,_,_,_,_,_,_,_,_,
         X,_,_,_,_,_,_,_,_,_,
         _}) -> X.

nuc_C4({_,_,_,_,_,_,_,_,_,_,
        _,_,_,_,_,_,_,_,_,_,
        _,_,_,_,_,_,X,_,_,_,
        _}) -> X.

nuc_C4_({_,_,_,_,_,_,_,_,_,_,
         _,X,_,_,_,_,_,_,_,_,
         _,_,_,_,_,_,_,_,_,_,
         _}) -> X.

nuc_N1({_,_,_,_,_,_,_,_,_,_,
        _,_,_,_,_,_,_,_,_,_,
        _,_,_,X,_,_,_,_,_,_,
        _}) -> X.

nuc_O3_({_,_,_,_,_,_,_,_,_,_,
         _,_,_,_,_,_,_,_,_,_,
         _,_,X,_,_,_,_,_,_,_,
         _}) -> X.

nuc_P({_,_,_,_,X,_,_,_,_,_,
       _,_,_,_,_,_,_,_,_,_,
       _,_,_,_,_,_,_,_,_,_,
       _}) -> X.

nuc_dgf_base_tfo({X,_,_,_,_,_,_,_,_,_,
                  _,_,_,_,_,_,_,_,_,_,
                  _,_,_,_,_,_,_,_,_,_,
                  _}) -> X.

nuc_p_o3__180_tfo({_,_,X,_,_,_,_,_,_,_,
                   _,_,_,_,_,_,_,_,_,_,
                   _,_,_,_,_,_,_,_,_,_,
                   _}) -> X.

nuc_p_o3__275_tfo({_,X,_,_,_,_,_,_,_,_,
                   _,_,_,_,_,_,_,_,_,_,
                   _,_,_,_,_,_,_,_,_,_,
                   _}) -> X.

nuc_p_o3__60_tfo({_,_,_,X,_,_,_,_,_,_,
                  _,_,_,_,_,_,_,_,_,_,
                  _,_,_,_,_,_,_,_,_,_,
                  _}) -> X.

rA_N9({_,_,_,_,_,_,_,_,_,_,
       _,_,_,_,_,_,_,_,_,_,
       _,_,_,_,_,_,_,_,_,a,
       {_,_,X,_,_,_,_,_}}) -> X.

rG_N9({_,_,_,_,_,_,_,_,_,_,
       _,_,_,_,_,_,_,_,_,_,
       _,_,_,_,_,_,_,_,_,g,
       {_,_,X,_,_,_,_,_,_}}) -> X.


%nuc ::= {
%          tfo,tfo,tfo,tfo,
%          pt,pt,pt,pt,pt,pt,pt,pt,pt,pt,pt,pt,pt,
%          pt,pt,pt,pt,pt,pt,pt,pt,pt,pt,pt,pt,
%          A/C/G/U,
%          nuc_specific
%        }

% Define remaining atoms for each nucleotide type.

%nuc_specific
% a {N6,N7,N9,C8,H2,H61,H62,H8}
% c {N4,O2,H41,H42,H5,H6}
% g {N2,N7,N9,C8,O6,H1,H21,H22,H8}
% u {O2,O4,H3,H5,H6}

% Database of nucleotide conformations:

rA() ->
     {
      {-0.0018,   -0.8207,    0.5714,  % dgf_base_tfo
        0.2679,   -0.5509,   -0.7904,
        0.9634,    0.1517,    0.2209,
        0.0073,    8.4030,    0.6232},
      {-0.8143,   -0.5091,   -0.2788,  % p_o3'_275_tfo
       -0.0433,   -0.4257,    0.9038,
       -0.5788,    0.7480,    0.3246,
        1.5227,    6.9114,   -7.0765},
      {0.3822,   -0.7477,    0.5430,  % p_o3'_180_tfo
        0.4552,    0.6637,    0.5935,
       -0.8042,    0.0203,    0.5941,
       -6.9472,   -4.1186,   -5.9108},
      {0.5640,    0.8007,   -0.2022,  % p_o3'_60_tfo
       -0.8247,    0.5587,   -0.0878,
        0.0426,    0.2162,    0.9754,
        6.2694,   -7.0540,    3.3316},
      {2.8930,    8.5380,   -3.3280}, % P   
      {1.6980,    7.6960,   -3.5570}, % O1P 
      {3.2260,    9.5010,   -4.4020}, % O2P 
      {4.1590,    7.6040,   -3.0340}, % O5' 
      {5.4550,    8.2120,   -2.8810}, % C5' 
      {5.4546,    8.8508,   -1.9978}, % H5' 
      {5.7588,    8.6625,   -3.8259}, % H5''
      {6.4970,    7.1480,   -2.5980}, % C4' 
      {7.4896,    7.5919,   -2.5214}, % H4' 
      {6.1630,    6.4860,   -1.3440}, % O4' 
      {6.5400,    5.1200,   -1.4190}, % C1' 
      {7.2763,    4.9681,   -0.6297}, % H1' 
      {7.1940,    4.8830,   -2.7770}, % C2' 
      {6.8667,    3.9183,   -3.1647}, % H2''
      {8.5860,    5.0910,   -2.6140}, % O2' 
      {8.9510,    4.7626,   -1.7890}, % H2' 
      {6.5720,    6.0040,   -3.6090}, % C3' 
      {5.5636,    5.7066,   -3.8966}, % H3' 
      {7.3801,    6.3562,   -4.7350}, % O3' 
      {4.7150,    0.4910,   -0.1360}, % N1  
      {6.3490,    2.1730,   -0.6020}, % N3  
      {5.9530,    0.9650,   -0.2670}, % C2  
      {5.2900,    2.9790,   -0.8260}, % C4  
      {3.9720,    2.6390,   -0.7330}, % C5  
      {3.6770,    1.3160,   -0.3660}, % C6
      a, {
      {2.4280,    0.8450,   -0.2360}, % N6  
      {3.1660,    3.7290,   -1.0360}, % N7  
      {5.3170,    4.2990,   -1.1930}, % N9  
      {4.0100,    4.6780,   -1.2990}, % C8  
      {6.6890,    0.1903,   -0.0518}, % H2  
      {1.6470,    1.4460,   -0.4040}, % H61 
      {2.2780,   -0.1080,   -0.0280}, % H62 
      {3.4421,    5.5744,   -1.5482}} % H8  
    }.

rA01() ->
     {
      {-0.0043,   -0.8175,    0.5759,  % dgf_base_tfo
        0.2617,   -0.5567,   -0.7884,
        0.9651,    0.1473,    0.2164,
        0.0359,    8.3929,    0.5532},
      {-0.8143,   -0.5091,   -0.2788,  % p_o3'_275_tfo
       -0.0433,   -0.4257,    0.9038,
       -0.5788,    0.7480,    0.3246,
        1.5227,    6.9114,   -7.0765},
      {0.3822,   -0.7477,    0.5430,  % p_o3'_180_tfo
        0.4552,    0.6637,    0.5935,
       -0.8042,    0.0203,    0.5941,
       -6.9472,   -4.1186,   -5.9108},
      {0.5640,    0.8007,   -0.2022,  % p_o3'_60_tfo
       -0.8247,    0.5587,   -0.0878,
        0.0426,    0.2162,    0.9754,
        6.2694,   -7.0540,    3.3316},
      {2.8930,    8.5380,   -3.3280}, % P   
      {1.6980,    7.6960,   -3.5570}, % O1P 
      {3.2260,    9.5010,   -4.4020}, % O2P 
      {4.1590,    7.6040,   -3.0340}, % O5' 
      {5.4352,    8.2183,   -2.7757}, % C5' 
      {5.3830,    8.7883,   -1.8481}, % H5' 
      {5.7729,    8.7436,   -3.6691}, % H5''
      {6.4830,    7.1518,   -2.5252}, % C4' 
      {7.4749,    7.5972,   -2.4482}, % H4' 
      {6.1626,    6.4620,   -1.2827}, % O4' 
      {6.5431,    5.0992,   -1.3905}, % C1' 
      {7.2871,    4.9328,   -0.6114}, % H1' 
      {7.1852,    4.8935,   -2.7592}, % C2' 
      {6.8573,    3.9363,   -3.1645}, % H2''
      {8.5780,    5.1025,   -2.6046}, % O2' 
      {8.9516,    4.7577,   -1.7902}, % H2' 
      {6.5522,    6.0300,   -3.5612}, % C3' 
      {5.5420,    5.7356,   -3.8459}, % H3' 
      {7.3487,    6.4089,   -4.6867}, % O3' 
      {4.7442,    0.4514,   -0.1390}, % N1  
      {6.3687,    2.1459,   -0.5926}, % N3  
      {5.9795,    0.9335,   -0.2657}, % C2  
      {5.3052,    2.9471,   -0.8125}, % C4  
      {3.9891,    2.5987,   -0.7230}, % C5  
      {3.7016,    1.2717,   -0.3647}, % C6
      a, {
      {2.4553,    0.7925,   -0.2390}, % N6  
      {3.1770,    3.6859,   -1.0198}, % N7  
      {5.3247,    4.2695,   -1.1710}, % N9  
      {4.0156,    4.6415,   -1.2759}, % C8  
      {6.7198,    0.1618,   -0.0547}, % H2  
      {1.6709,    1.3900,   -0.4039}, % H61 
      {2.3107,   -0.1627,   -0.0373}, % H62 
      {3.4426,    5.5361,   -1.5199}} % H8  
     }.

rA02() ->
     {
      {0.5566,    0.0449,    0.8296,  % dgf_base_tfo
        0.5125,    0.7673,   -0.3854,
       -0.6538,    0.6397,    0.4041,
       -9.1161,   -3.7679,   -2.9968},
      {-0.8143,   -0.5091,   -0.2788,  % p_o3'_275_tfo
       -0.0433,   -0.4257,    0.9038,
       -0.5788,    0.7480,    0.3246,
        1.5227,    6.9114,   -7.0765},
      {0.3822,   -0.7477,    0.5430,  % p_o3'_180_tfo
        0.4552,    0.6637,    0.5935,
       -0.8042,    0.0203,    0.5941,
       -6.9472,   -4.1186,   -5.9108},
      {0.5640,    0.8007,   -0.2022,  % p_o3'_60_tfo
       -0.8247,    0.5587,   -0.0878,
        0.0426,    0.2162,    0.9754,
        6.2694,   -7.0540,    3.3316},
      {2.8930,    8.5380,   -3.3280}, % P   
      {1.6980,    7.6960,   -3.5570}, % O1P 
      {3.2260,    9.5010,   -4.4020}, % O2P 
      {4.1590,    7.6040,   -3.0340}, % O5' 
      {4.5778,    6.6594,   -4.0364}, % C5' 
      {4.9220,    7.1963,   -4.9204}, % H5' 
      {3.7996,    5.9091,   -4.1764}, % H5''
      {5.7873,    5.8869,   -3.5482}, % C4' 
      {6.0405,    5.0875,   -4.2446}, % H4' 
      {6.9135,    6.8036,   -3.4310}, % O4' 
      {7.7293,    6.4084,   -2.3392}, % C1' 
      {8.7078,    6.1815,   -2.7624}, % H1' 
      {7.1305,    5.1418,   -1.7347}, % C2' 
      {7.2040,    5.1982,   -0.6486}, % H2''
      {7.7417,    4.0392,   -2.3813}, % O2' 
      {8.6785,    4.1443,   -2.5630}, % H2' 
      {5.6666,    5.2728,   -2.1536}, % C3' 
      {5.1747,    5.9805,   -1.4863}, % H3' 
      {4.9997,    4.0086,   -2.1973}, % O3' 
      {10.3245,    8.5459,    1.5467}, % N1  
      {9.8051,    6.9432,   -0.1497}, % N3  
      {10.5175,    7.4328,    0.8408}, % C2  
      {8.7523,    7.7422,   -0.4228}, % C4  
      {8.4257,    8.9060,    0.2099}, % C5  
      {9.2665,    9.3242,    1.2540}, % C6
      a, {
      {9.0664,   10.4462,    1.9610}, % N6  
      {7.2750,    9.4537,   -0.3428}, % N7  
      {7.7962,    7.5519,   -1.3859}, % N9  
      {6.9479,    8.6157,   -1.2771}, % C8  
      {11.4063,    6.9047,    1.1859}, % H2  
      {8.2845,   11.0341,    1.7552}, % H61 
      {9.6584,   10.6647,    2.7198}, % H62 
      {6.0430,    8.9853,   -1.7594}} % H8  
     }.

rA03() ->
     {
      {-0.5021,    0.0731,    0.8617,  % dgf_base_tfo
       -0.8112,    0.3054,   -0.4986,
       -0.2996,   -0.9494,   -0.0940,
        6.4273,   -5.1944,   -3.7807},
      {-0.8143,   -0.5091,   -0.2788,  % p_o3'_275_tfo
       -0.0433,   -0.4257,    0.9038,
       -0.5788,    0.7480,    0.3246,
        1.5227,    6.9114,   -7.0765},
      {0.3822,   -0.7477,    0.5430,  % p_o3'_180_tfo
        0.4552,    0.6637,    0.5935,
       -0.8042,    0.0203,    0.5941,
       -6.9472,   -4.1186,   -5.9108},
      {0.5640,    0.8007,   -0.2022,  % p_o3'_60_tfo
       -0.8247,    0.5587,   -0.0878,
        0.0426,    0.2162,    0.9754,
        6.2694,   -7.0540,    3.3316},
      {2.8930,    8.5380,   -3.3280}, % P   
      {1.6980,    7.6960,   -3.5570}, % O1P 
      {3.2260,    9.5010,   -4.4020}, % O2P 
      {4.1590,    7.6040,   -3.0340}, % O5' 
      {4.1214,    6.7116,   -1.9049}, % C5' 
      {3.3465,    5.9610,   -2.0607}, % H5' 
      {4.0789,    7.2928,   -0.9837}, % H5''
      {5.4170,    5.9293,   -1.8186}, % C4' 
      {5.4506,    5.3400,   -0.9023}, % H4' 
      {5.5067,    5.0417,   -2.9703}, % O4' 
      {6.8650,    4.9152,   -3.3612}, % C1' 
      {7.1090,    3.8577,   -3.2603}, % H1' 
      {7.7152,    5.7282,   -2.3894}, % C2' 
      {8.5029,    6.2356,   -2.9463}, % H2''
      {8.1036,    4.8568,   -1.3419}, % O2' 
      {8.3270,    3.9651,   -1.6184}, % H2' 
      {6.7003,    6.7565,   -1.8911}, % C3' 
      {6.5898,    7.5329,   -2.6482}, % H3' 
      {7.0505,    7.2878,   -0.6105}, % O3' 
      {9.6740,    4.7656,   -7.6614}, % N1  
      {9.0739,    4.3013,   -5.3941}, % N3  
      {9.8416,    4.2192,   -6.4581}, % C2  
      {7.9885,    5.0632,   -5.6446}, % C4  
      {7.6822,    5.6856,   -6.8194}, % C5  
      {8.5831,    5.5215,   -7.8840}, % C6
      a, {
      {8.4084,    6.0747,   -9.0933}, % N6  
      {6.4857,    6.3816,   -6.7035}, % N7  
      {6.9740,    5.3703,   -4.7760}, % N9  
      {6.1133,    6.1613,   -5.4808}, % C8  
      {10.7627,    3.6375,   -6.4220}, % H2  
      {7.6031,    6.6390,   -9.2733}, % H61 
      {9.1004,    5.9708,   -9.7893}, % H62 
      {5.1705,    6.6830,   -5.3167}} % H8  
     }.

rA04() ->
     {
      {-0.5426,   -0.8175,    0.1929,  % dgf_base_tfo
        0.8304,   -0.5567,   -0.0237,
        0.1267,    0.1473,    0.9809,
       -0.5075,    8.3929,    0.2229},
      {-0.8143,   -0.5091,   -0.2788,  % p_o3'_275_tfo
       -0.0433,   -0.4257,    0.9038,
       -0.5788,    0.7480,    0.3246,
        1.5227,    6.9114,   -7.0765},
      {0.3822,   -0.7477,    0.5430,  % p_o3'_180_tfo
        0.4552,    0.6637,    0.5935,
       -0.8042,    0.0203,    0.5941,
       -6.9472,   -4.1186,   -5.9108},
      {0.5640,    0.8007,   -0.2022,  % p_o3'_60_tfo
       -0.8247,    0.5587,   -0.0878,
        0.0426,    0.2162,    0.9754,
        6.2694,   -7.0540,    3.3316},
      {2.8930,    8.5380,   -3.3280}, % P   
      {1.6980,    7.6960,   -3.5570}, % O1P 
      {3.2260,    9.5010,   -4.4020}, % O2P 
      {4.1590,    7.6040,   -3.0340}, % O5' 
      {5.4352,    8.2183,   -2.7757}, % C5' 
      {5.3830,    8.7883,   -1.8481}, % H5' 
      {5.7729,    8.7436,   -3.6691}, % H5''
      {6.4830,    7.1518,   -2.5252}, % C4' 
      {7.4749,    7.5972,   -2.4482}, % H4' 
      {6.1626,    6.4620,   -1.2827}, % O4' 
      {6.5431,    5.0992,   -1.3905}, % C1' 
      {7.2871,    4.9328,   -0.6114}, % H1' 
      {7.1852,    4.8935,   -2.7592}, % C2' 
      {6.8573,    3.9363,   -3.1645}, % H2''
      {8.5780,    5.1025,   -2.6046}, % O2' 
      {8.9516,    4.7577,   -1.7902}, % H2' 
      {6.5522,    6.0300,   -3.5612}, % C3' 
      {5.5420,    5.7356,   -3.8459}, % H3' 
      {7.3487,    6.4089,   -4.6867}, % O3' 
      {3.6343,    2.6680,    2.0783}, % N1  
      {5.4505,    3.9805,    1.2446}, % N3  
      {4.7540,    3.3816,    2.1851}, % C2  
      {4.8805,    3.7951,    0.0354}, % C4  
      {3.7416,    3.0925,   -0.2305}, % C5  
      {3.0873,    2.4980,    0.8606}, % C6
      a, {
      {1.9600,    1.7805,    0.7462}, % N6  
      {3.4605,    3.1184,   -1.5906}, % N7  
      {5.3247,    4.2695,   -1.1710}, % N9  
      {4.4244,    3.8244,   -2.0953}, % C8  
      {5.0814,    3.4352,    3.2234}, % H2  
      {1.5423,    1.6454,   -0.1520}, % H61 
      {1.5716,    1.3398,    1.5392}, % H62 
      {4.2675,    3.8876,   -3.1721}} % H8  
     }.

rA05() ->
     {
      {-0.5891,    0.0449,    0.8068,  % dgf_base_tfo
        0.5375,    0.7673,    0.3498,
       -0.6034,    0.6397,   -0.4762,
       -0.3019,   -3.7679,   -9.5913},
      {-0.8143,   -0.5091,   -0.2788,  % p_o3'_275_tfo
       -0.0433,   -0.4257,    0.9038,
       -0.5788,    0.7480,    0.3246,
        1.5227,    6.9114,   -7.0765},
      {0.3822,   -0.7477,    0.5430,  % p_o3'_180_tfo
        0.4552,    0.6637,    0.5935,
       -0.8042,    0.0203,    0.5941,
       -6.9472,   -4.1186,   -5.9108},
      {0.5640,    0.8007,   -0.2022,  % p_o3'_60_tfo
       -0.8247,    0.5587,   -0.0878,
        0.0426,    0.2162,    0.9754,
        6.2694,   -7.0540,    3.3316},
      {2.8930,    8.5380,   -3.3280}, % P   
      {1.6980,    7.6960,   -3.5570}, % O1P 
      {3.2260,    9.5010,   -4.4020}, % O2P 
      {4.1590,    7.6040,   -3.0340}, % O5' 
      {4.5778,    6.6594,   -4.0364}, % C5' 
      {4.9220,    7.1963,   -4.9204}, % H5' 
      {3.7996,    5.9091,   -4.1764}, % H5''
      {5.7873,    5.8869,   -3.5482}, % C4' 
      {6.0405,    5.0875,   -4.2446}, % H4' 
      {6.9135,    6.8036,   -3.4310}, % O4' 
      {7.7293,    6.4084,   -2.3392}, % C1' 
      {8.7078,    6.1815,   -2.7624}, % H1' 
      {7.1305,    5.1418,   -1.7347}, % C2' 
      {7.2040,    5.1982,   -0.6486}, % H2''
      {7.7417,    4.0392,   -2.3813}, % O2' 
      {8.6785,    4.1443,   -2.5630}, % H2' 
      {5.6666,    5.2728,   -2.1536}, % C3' 
      {5.1747,    5.9805,   -1.4863}, % H3' 
      {4.9997,    4.0086,   -2.1973}, % O3' 
      {10.2594,   10.6774,   -1.0056}, % N1  
      {9.7528,    8.7080,   -2.2631}, % N3  
      {10.4471,    9.7876,   -1.9791}, % C2  
      {8.7271,    8.5575,   -1.3991}, % C4  
      {8.4100,    9.3803,   -0.3580}, % C5  
      {9.2294,   10.5030,   -0.1574}, % C6
      a, {
      {9.0349,   11.3951,    0.8250}, % N6  
      {7.2891,    8.9068,    0.3121}, % N7  
      {7.7962,    7.5519,   -1.3859}, % N9  
      {6.9702,    7.8292,   -0.3353}, % C8  
      {11.3132,   10.0537,   -2.5851}, % H2  
      {8.2741,   11.2784,    1.4629}, % H61 
      {9.6733,   12.1368,    0.9529}, % H62 
      {6.0888,    7.3990,    0.1403}} % H8  
    }.

rA06() ->
     {
      {-0.9815,    0.0731,   -0.1772,  % dgf_base_tfo
        0.1912,    0.3054,   -0.9328,
       -0.0141,   -0.9494,   -0.3137,
        5.7506,   -5.1944,    4.7470},
      {-0.8143,   -0.5091,   -0.2788,  % p_o3'_275_tfo
       -0.0433,   -0.4257,    0.9038,
       -0.5788,    0.7480,    0.3246,
        1.5227,    6.9114,   -7.0765},
      {0.3822,   -0.7477,    0.5430,  % p_o3'_180_tfo
        0.4552,    0.6637,    0.5935,
       -0.8042,    0.0203,    0.5941,
       -6.9472,   -4.1186,   -5.9108},
      {0.5640,    0.8007,   -0.2022,  % p_o3'_60_tfo
       -0.8247,    0.5587,   -0.0878,
        0.0426,    0.2162,    0.9754,
        6.2694,   -7.0540,    3.3316},
      {2.8930,    8.5380,   -3.3280}, % P   
      {1.6980,    7.6960,   -3.5570}, % O1P 
      {3.2260,    9.5010,   -4.4020}, % O2P 
      {4.1590,    7.6040,   -3.0340}, % O5' 
      {4.1214,    6.7116,   -1.9049}, % C5' 
      {3.3465,    5.9610,   -2.0607}, % H5' 
      {4.0789,    7.2928,   -0.9837}, % H5''
      {5.4170,    5.9293,   -1.8186}, % C4' 
      {5.4506,    5.3400,   -0.9023}, % H4' 
      {5.5067,    5.0417,   -2.9703}, % O4' 
      {6.8650,    4.9152,   -3.3612}, % C1' 
      {7.1090,    3.8577,   -3.2603}, % H1' 
      {7.7152,    5.7282,   -2.3894}, % C2' 
      {8.5029,    6.2356,   -2.9463}, % H2''
      {8.1036,    4.8568,   -1.3419}, % O2' 
      {8.3270,    3.9651,   -1.6184}, % H2' 
      {6.7003,    6.7565,   -1.8911}, % C3' 
      {6.5898,    7.5329,   -2.6482}, % H3' 
      {7.0505,    7.2878,   -0.6105}, % O3' 
      {6.6624,    3.5061,   -8.2986}, % N1  
      {6.5810,    3.2570,   -5.9221}, % N3  
      {6.5151,    2.8263,   -7.1625}, % C2  
      {6.8364,    4.5817,   -5.8882}, % C4  
      {7.0116,    5.4064,   -6.9609}, % C5  
      {6.9173,    4.8260,   -8.2361}, % C6
      a, {
      {7.0668,    5.5163,   -9.3763}, % N6  
      {7.2573,    6.7070,   -6.5394}, % N7  
      {6.9740,    5.3703,   -4.7760}, % N9  
      {7.2238,    6.6275,   -5.2453}, % C8  
      {6.3146,    1.7741,   -7.3641}, % H2  
      {7.2568,    6.4972,   -9.3456}, % H61 
      {7.0437,    5.0478,  -10.2446}, % H62 
      {7.4108,    7.6227,   -4.8418}} % H8  
    }.

rA07() ->
     {
      {0.2379,    0.1310,   -0.9624,  % dgf_base_tfo
       -0.5876,   -0.7696,   -0.2499,
       -0.7734,    0.6249,   -0.1061,
       30.9870,  -26.9344,   42.6416},
      {0.7529,    0.1548,    0.6397,  % p_o3'_275_tfo
        0.2952,   -0.9481,   -0.1180,
        0.5882,    0.2777,   -0.7595,
       -58.8919,  -11.3095,    6.0866},
      {-0.0239,    0.9667,   -0.2546,  % p_o3'_180_tfo
        0.9731,   -0.0359,   -0.2275,
       -0.2290,   -0.2532,   -0.9399,
        3.5401,  -29.7913,   52.2796},
      {-0.8912,   -0.4531,    0.0242,  % p_o3'_60_tfo
       -0.1183,    0.1805,   -0.9764,
        0.4380,   -0.8730,   -0.2145,
       19.9023,   54.8054,   15.2799},
      {41.8210,    8.3880,   43.5890}, % P   
      {42.5400,    8.0450,   44.8330}, % O1P 
      {42.2470,    9.6920,   42.9910}, % O2P 
      {40.2550,    8.2030,   43.7340}, % O5' 
      {39.3505,    8.4697,   42.6565}, % C5' 
      {39.1377,    7.5433,   42.1230}, % H5' 
      {39.7203,    9.3119,   42.0717}, % H5''
      {38.0405,    8.9195,   43.2869}, % C4' 
      {37.3687,    9.3036,   42.5193}, % H4' 
      {37.4319,    7.8146,   43.9387}, % O4' 
      {37.1959,    8.1354,   45.3237}, % C1' 
      {36.1788,    8.5202,   45.3970}, % H1' 
      {38.1721,    9.2328,   45.6504}, % C2' 
      {39.1555,    8.7939,   45.8188}, % H2''
      {37.7862,   10.0617,   46.7013}, % O2' 
      {37.3087,    9.6229,   47.4092}, % H2' 
      {38.1844,   10.0268,   44.3367}, % C3' 
      {39.1578,   10.5054,   44.2289}, % H3' 
      {37.0547,   10.9127,   44.3441}, % O3' 
      {34.8811,    4.2072,   47.5784}, % N1  
      {35.1084,    6.1336,   46.1818}, % N3  
      {34.4108,    5.1360,   46.7207}, % C2  
      {36.3908,    6.1224,   46.6053}, % C4  
      {36.9819,    5.2334,   47.4697}, % C5  
      {36.1786,    4.1985,   48.0035}, % C6
      a, {
      {36.6103,    3.2749,   48.8452}, % N6  
      {38.3236,    5.5522,   47.6595}, % N7  
      {37.3887,    7.0024,   46.2437}, % N9  
      {38.5055,    6.6096,   46.9057}, % C8  
      {33.3553,    5.0152,   46.4771}, % H2  
      {37.5730,    3.2804,   49.1507}, % H61 
      {35.9775,    2.5638,   49.1828}, % H62 
      {39.5461,    6.9184,   47.0041}} % H8  
    }.

rA08() ->
     {
      {0.1084,   -0.0895,   -0.9901,  % dgf_base_tfo
        0.9789,   -0.1638,    0.1220,
       -0.1731,   -0.9824,    0.0698,
       -2.9039,   47.2655,   33.0094},
      {0.7529,    0.1548,    0.6397,  % p_o3'_275_tfo
        0.2952,   -0.9481,   -0.1180,
        0.5882,    0.2777,   -0.7595,
       -58.8919,  -11.3095,    6.0866},
      {-0.0239,    0.9667,   -0.2546,  % p_o3'_180_tfo
        0.9731,   -0.0359,   -0.2275,
       -0.2290,   -0.2532,   -0.9399,
        3.5401,  -29.7913,   52.2796},
      {-0.8912,   -0.4531,    0.0242,  % p_o3'_60_tfo
       -0.1183,    0.1805,   -0.9764,
        0.4380,   -0.8730,   -0.2145,
       19.9023,   54.8054,   15.2799},
      {41.8210,    8.3880,   43.5890}, % P   
      {42.5400,    8.0450,   44.8330}, % O1P 
      {42.2470,    9.6920,   42.9910}, % O2P 
      {40.2550,    8.2030,   43.7340}, % O5' 
      {39.4850,    8.9301,   44.6977}, % C5' 
      {39.0638,    9.8199,   44.2296}, % H5' 
      {40.0757,    9.0713,   45.6029}, % H5''
      {38.3102,    8.0414,   45.0789}, % C4' 
      {37.7842,    8.4637,   45.9351}, % H4' 
      {37.4200,    7.9453,   43.9769}, % O4' 
      {37.2249,    6.5609,   43.6273}, % C1' 
      {36.3360,    6.2168,   44.1561}, % H1' 
      {38.4347,    5.8414,   44.1590}, % C2' 
      {39.2688,    5.9974,   43.4749}, % H2''
      {38.2344,    4.4907,   44.4348}, % O2' 
      {37.6374,    4.0386,   43.8341}, % H2' 
      {38.6926,    6.6079,   45.4637}, % C3' 
      {39.7585,    6.5640,   45.6877}, % H3' 
      {37.8238,    6.0705,   46.4723}, % O3' 
      {33.9162,    6.2598,   39.7758}, % N1  
      {34.6709,    6.5759,   42.0215}, % N3  
      {33.7257,    6.5186,   41.0858}, % C2  
      {35.8935,    6.3324,   41.5018}, % C4  
      {36.2105,    6.0601,   40.1932}, % C5  
      {35.1538,    6.0151,   39.2537}, % C6
      a, {
      {35.3088,    5.7642,   37.9649}, % N6  
      {37.5818,    5.8677,   40.0507}, % N7  
      {37.0932,    6.3197,   42.1810}, % N9  
      {38.0509,    6.0354,   41.2635}, % C8  
      {32.6830,    6.6898,   41.3532}, % H2  
      {36.2305,    5.5855,   37.5925}, % H61 
      {34.5056,    5.7512,   37.3528}, % H62 
      {39.1318,    5.8993,   41.2285}} % H8  
    }.

rA09() ->
     {
      {0.8467,    0.4166,   -0.3311,  % dgf_base_tfo
       -0.3962,    0.9089,    0.1303,
        0.3552,    0.0209,    0.9346,
       -42.7319,  -26.6223,  -29.8163},
      {0.7529,    0.1548,    0.6397,  % p_o3'_275_tfo
        0.2952,   -0.9481,   -0.1180,
        0.5882,    0.2777,   -0.7595,
       -58.8919,  -11.3095,    6.0866},
      {-0.0239,    0.9667,   -0.2546,  % p_o3'_180_tfo
        0.9731,   -0.0359,   -0.2275,
       -0.2290,   -0.2532,   -0.9399,
        3.5401,  -29.7913,   52.2796},
      {-0.8912,   -0.4531,    0.0242,  % p_o3'_60_tfo
       -0.1183,    0.1805,   -0.9764,
        0.4380,   -0.8730,   -0.2145,
       19.9023,   54.8054,   15.2799},
      {41.8210,    8.3880,   43.5890}, % P   
      {42.5400,    8.0450,   44.8330}, % O1P 
      {42.2470,    9.6920,   42.9910}, % O2P 
      {40.2550,    8.2030,   43.7340}, % O5' 
      {39.3505,    8.4697,   42.6565}, % C5' 
      {39.1377,    7.5433,   42.1230}, % H5' 
      {39.7203,    9.3119,   42.0717}, % H5''
      {38.0405,    8.9195,   43.2869}, % C4' 
      {37.6479,    8.1347,   43.9335}, % H4' 
      {38.2691,   10.0933,   44.0524}, % O4' 
      {37.3999,   11.1488,   43.5973}, % C1' 
      {36.5061,   11.1221,   44.2206}, % H1' 
      {37.0364,   10.7838,   42.1836}, % C2' 
      {37.8636,   11.0489,   41.5252}, % H2''
      {35.8275,   11.3133,   41.7379}, % O2' 
      {35.6214,   12.1896,   42.0714}, % H2' 
      {36.9316,    9.2556,   42.2837}, % C3' 
      {37.1778,    8.8260,   41.3127}, % H3' 
      {35.6285,    8.9334,   42.7926}, % O3' 
      {38.1482,   15.2833,   46.4641}, % N1  
      {37.3641,   13.0968,   45.9007}, % N3  
      {37.5032,   14.1288,   46.7300}, % C2  
      {37.9570,   13.3377,   44.7113}, % C4  
      {38.6397,   14.4660,   44.3267}, % C5  
      {38.7473,   15.5229,   45.2609}, % C6
      a, {
      {39.3720,   16.6649,   45.0297}, % N6  
      {39.1079,   14.3351,   43.0223}, % N7  
      {38.0132,   12.4868,   43.6280}, % N9  
      {38.7058,   13.1402,   42.6620}, % C8  
      {37.0731,   14.0857,   47.7306}, % H2  
      {39.8113,   16.8281,   44.1350}, % H61 
      {39.4100,   17.3741,   45.7478}, % H62 
      {39.0412,   12.9660,   41.6397}} % H8  
    }.

rA10() ->
     {
      {0.7063,    0.6317,   -0.3196,  % dgf_base_tfo
       -0.0403,   -0.4149,   -0.9090,
       -0.7068,    0.6549,   -0.2676,
        6.4402,  -52.1496,   30.8246},
      {0.7529,    0.1548,    0.6397,  % p_o3'_275_tfo
        0.2952,   -0.9481,   -0.1180,
        0.5882,    0.2777,   -0.7595,
       -58.8919,  -11.3095,    6.0866},
      {-0.0239,    0.9667,   -0.2546,  % p_o3'_180_tfo
        0.9731,   -0.0359,   -0.2275,
       -0.2290,   -0.2532,   -0.9399,
        3.5401,  -29.7913,   52.2796},
      {-0.8912,   -0.4531,    0.0242,  % p_o3'_60_tfo
       -0.1183,    0.1805,   -0.9764,
        0.4380,   -0.8730,   -0.2145,
       19.9023,   54.8054,   15.2799},
      {41.8210,    8.3880,   43.5890}, % P   
      {42.5400,    8.0450,   44.8330}, % O1P 
      {42.2470,    9.6920,   42.9910}, % O2P 
      {40.2550,    8.2030,   43.7340}, % O5' 
      {39.4850,    8.9301,   44.6977}, % C5' 
      {39.0638,    9.8199,   44.2296}, % H5' 
      {40.0757,    9.0713,   45.6029}, % H5''
      {38.3102,    8.0414,   45.0789}, % C4' 
      {37.7099,    7.8166,   44.1973}, % H4' 
      {38.8012,    6.8321,   45.6380}, % O4' 
      {38.2431,    6.6413,   46.9529}, % C1' 
      {37.3505,    6.0262,   46.8385}, % H1' 
      {37.8484,    8.0156,   47.4214}, % C2' 
      {38.7381,    8.5406,   47.7690}, % H2''
      {36.8286,    8.0368,   48.3701}, % O2' 
      {36.8392,    7.3063,   48.9929}, % H2' 
      {37.3576,    8.6512,   46.1132}, % C3' 
      {37.5207,    9.7275,   46.1671}, % H3' 
      {35.9985,    8.2392,   45.9032}, % O3' 
      {39.9117,    2.2278,   48.8527}, % N1  
      {38.6207,    3.6941,   47.4757}, % N3  
      {38.9872,    2.4888,   47.9057}, % C2  
      {39.2961,    4.6720,   48.1174}, % C4  
      {40.2546,    4.5307,   49.0912}, % C5  
      {40.5932,    3.2189,   49.4985}, % C6
      a, {
      {41.4938,    2.9317,   50.4229}, % N6  
      {40.7195,    5.7755,   49.5060}, % N7  
      {39.1730,    6.0305,   47.9170}, % N9  
      {40.0413,    6.6250,   48.7728}, % C8  
      {38.5257,    1.5960,   47.4838}, % H2  
      {41.9907,    3.6753,   50.8921}, % H61 
      {41.6848,    1.9687,   50.6599}, % H62 
      {40.3571,    7.6321,   49.0452}} % H8  
    }.

rAs() -> [rA01(),rA02(),rA03(),rA04(),rA05(),rA06(),rA07(),
          rA08(),rA09(),rA10()].

rC() ->
     {
      {-0.0359,   -0.8071,    0.5894,  % dgf_base_tfo
       -0.2669,    0.5761,    0.7726,
       -0.9631,   -0.1296,   -0.2361,
        0.1584,    8.3434,    0.5434},
      {-0.8313,   -0.4738,   -0.2906,  % p_o3'_275_tfo
        0.0649,    0.4366,   -0.8973,
        0.5521,   -0.7648,   -0.3322,
        1.6833,    6.8060,   -7.0011},
      {0.3445,   -0.7630,    0.5470,  % p_o3'_180_tfo
       -0.4628,   -0.6450,   -0.6082,
        0.8168,   -0.0436,   -0.5753,
       -6.8179,   -3.9778,   -5.9887},
      {0.5855,    0.7931,   -0.1682,  % p_o3'_60_tfo
        0.8103,   -0.5790,    0.0906,
       -0.0255,   -0.1894,   -0.9816,
        6.1203,   -7.1051,    3.1984},
      {2.6760,   -8.4960,    3.2880}, % P   
      {1.4950,   -7.6230,    3.4770}, % O1P 
      {2.9490,   -9.4640,    4.3740}, % O2P 
      {3.9730,   -7.5950,    3.0340}, % O5' 
      {5.2430,   -8.2420,    2.8260}, % C5' 
      {5.1974,   -8.8497,    1.9223}, % H5' 
      {5.5548,   -8.7348,    3.7469}, % H5''
      {6.3140,   -7.2060,    2.5510}, % C4' 
      {7.2954,   -7.6762,    2.4898}, % H4' 
      {6.0140,   -6.5420,    1.2890}, % O4' 
      {6.4190,   -5.1840,    1.3620}, % C1' 
      {7.1608,   -5.0495,    0.5747}, % H1' 
      {7.0760,   -4.9560,    2.7270}, % C2' 
      {6.7770,   -3.9803,    3.1099}, % H2''
      {8.4500,   -5.1930,    2.5810}, % O2' 
      {8.8309,   -4.8755,    1.7590}, % H2' 
      {6.4060,   -6.0590,    3.5580}, % C3' 
      {5.4021,   -5.7313,    3.8281}, % H3' 
      {7.1570,   -6.4240,    4.7070}, % O3' 
      {5.2170,   -4.3260,    1.1690}, % N1  
      {4.2960,   -2.2560,    0.6290}, % N3  
      {5.4330,   -3.0200,    0.7990}, % C2  
      {2.9930,   -2.6780,    0.7940}, % C4  
      {2.8670,   -4.0630,    1.1830}, % C5  
      {3.9570,   -4.8300,    1.3550}, % C6
      c, {
      {2.0187,   -1.8047,    0.5874}, % N4  
      {6.5470,   -2.5560,    0.6290}, % O2  
      {1.0684,   -2.1236,    0.7109}, % H41 
      {2.2344,   -0.8560,    0.3162}, % H42 
      {1.8797,   -4.4972,    1.3404}, % H5  
      {3.8479,   -5.8742,    1.6480}} % H6  
    }.

rC01() ->
     {
      {-0.0137,   -0.8012,    0.5983,  % dgf_base_tfo
       -0.2523,    0.5817,    0.7733,
       -0.9675,   -0.1404,   -0.2101,
        0.2031,    8.3874,    0.4228},
      {-0.8313,   -0.4738,   -0.2906,  % p_o3'_275_tfo
        0.0649,    0.4366,   -0.8973,
        0.5521,   -0.7648,   -0.3322,
        1.6833,    6.8060,   -7.0011},
      {0.3445,   -0.7630,    0.5470,  % p_o3'_180_tfo
       -0.4628,   -0.6450,   -0.6082,
        0.8168,   -0.0436,   -0.5753,
       -6.8179,   -3.9778,   -5.9887},
      {0.5855,    0.7931,   -0.1682,  % p_o3'_60_tfo
        0.8103,   -0.5790,    0.0906,
       -0.0255,   -0.1894,   -0.9816,
        6.1203,   -7.1051,    3.1984},
      {2.6760,   -8.4960,    3.2880}, % P   
      {1.4950,   -7.6230,    3.4770}, % O1P 
      {2.9490,   -9.4640,    4.3740}, % O2P 
      {3.9730,   -7.5950,    3.0340}, % O5' 
      {5.2416,   -8.2422,    2.8181}, % C5' 
      {5.2050,   -8.8128,    1.8901}, % H5' 
      {5.5368,   -8.7738,    3.7227}, % H5''
      {6.3232,   -7.2037,    2.6002}, % C4' 
      {7.3048,   -7.6757,    2.5577}, % H4' 
      {6.0635,   -6.5092,    1.3456}, % O4' 
      {6.4697,   -5.1547,    1.4629}, % C1' 
      {7.2354,   -5.0043,    0.7018}, % H1' 
      {7.0856,   -4.9610,    2.8521}, % C2' 
      {6.7777,   -3.9935,    3.2487}, % H2''
      {8.4627,   -5.1992,    2.7423}, % O2' 
      {8.8693,   -4.8638,    1.9399}, % H2' 
      {6.3877,   -6.0809,    3.6362}, % C3' 
      {5.3770,   -5.7562,    3.8834}, % H3' 
      {7.1024,   -6.4754,    4.7985}, % O3' 
      {5.2764,   -4.2883,    1.2538}, % N1  
      {4.3777,   -2.2062,    0.7229}, % N3  
      {5.5069,   -2.9779,    0.9088}, % C2  
      {3.0693,   -2.6246,    0.8500}, % C4  
      {2.9279,   -4.0146,    1.2149}, % C5  
      {4.0101,   -4.7892,    1.4017}, % C6
      c, {
      {2.1040,   -1.7437,    0.6331}, % N4  
      {6.6267,   -2.5166,    0.7728}, % O2  
      {1.1496,   -2.0600,    0.7287}, % H41 
      {2.3303,   -0.7921,    0.3815}, % H42 
      {1.9353,   -4.4465,    1.3419}, % H5  
      {3.8895,   -5.8371,    1.6762}} % H6  
    }.

rC02() ->
     {
      {0.5141,    0.0246,    0.8574,  % dgf_base_tfo
       -0.5547,   -0.7529,    0.3542,
        0.6542,   -0.6577,   -0.3734,
       -9.1111,   -3.4598,   -3.2939},
      {-0.8313,   -0.4738,   -0.2906,  % p_o3'_275_tfo
        0.0649,    0.4366,   -0.8973,
        0.5521,   -0.7648,   -0.3322,
        1.6833,    6.8060,   -7.0011},
      {0.3445,   -0.7630,    0.5470,  % p_o3'_180_tfo
       -0.4628,   -0.6450,   -0.6082,
        0.8168,   -0.0436,   -0.5753,
       -6.8179,   -3.9778,   -5.9887},
      {0.5855,    0.7931,   -0.1682,  % p_o3'_60_tfo
        0.8103,   -0.5790,    0.0906,
       -0.0255,   -0.1894,   -0.9816,
        6.1203,   -7.1051,    3.1984},
      {2.6760,   -8.4960,    3.2880}, % P   
      {1.4950,   -7.6230,    3.4770}, % O1P 
      {2.9490,   -9.4640,    4.3740}, % O2P 
      {3.9730,   -7.5950,    3.0340}, % O5' 
      {4.3825,   -6.6585,    4.0489}, % C5' 
      {4.6841,   -7.2019,    4.9443}, % H5' 
      {3.6189,   -5.8889,    4.1625}, % H5''
      {5.6255,   -5.9175,    3.5998}, % C4' 
      {5.8732,   -5.1228,    4.3034}, % H4' 
      {6.7337,   -6.8605,    3.5222}, % O4' 
      {7.5932,   -6.4923,    2.4548}, % C1' 
      {8.5661,   -6.2983,    2.9064}, % H1' 
      {7.0527,   -5.2012,    1.8322}, % C2' 
      {7.1627,   -5.2525,    0.7490}, % H2''
      {7.6666,   -4.1249,    2.4880}, % O2' 
      {8.5944,   -4.2543,    2.6981}, % H2' 
      {5.5661,   -5.3029,    2.2009}, % C3' 
      {5.0841,   -6.0018,    1.5172}, % H3' 
      {4.9062,   -4.0452,    2.2042}, % O3' 
      {7.6298,   -7.6136,    1.4752}, % N1  
      {8.6945,   -8.7046,   -0.2857}, % N3  
      {8.6943,   -7.6514,    0.6066}, % C2  
      {7.7426,   -9.6987,   -0.3801}, % C4  
      {6.6642,   -9.5742,    0.5722}, % C5  
      {6.6391,   -8.5592,    1.4526}, % C6
      c, {
      {7.9033,  -10.6371,   -1.3010}, % N4  
      {9.5840,   -6.8186,    0.6136}, % O2  
      {7.2009,  -11.3604,   -1.3619}, % H41 
      {8.7058,  -10.6168,   -1.9140}, % H42 
      {5.8585,  -10.3083,    0.5822}, % H5  
      {5.8197,   -8.4773,    2.1667}} % H6  
    }.

rC03() ->
     {
      {-0.4993,    0.0476,    0.8651,  % dgf_base_tfo
        0.8078,   -0.3353,    0.4847,
        0.3132,    0.9409,    0.1290,
        6.2989,   -5.2303,   -3.8577},
      {-0.8313,   -0.4738,   -0.2906,  % p_o3'_275_tfo
        0.0649,    0.4366,   -0.8973,
        0.5521,   -0.7648,   -0.3322,
        1.6833,    6.8060,   -7.0011},
      {0.3445,   -0.7630,    0.5470,  % p_o3'_180_tfo
       -0.4628,   -0.6450,   -0.6082,
        0.8168,   -0.0436,   -0.5753,
       -6.8179,   -3.9778,   -5.9887},
      {0.5855,    0.7931,   -0.1682,  % p_o3'_60_tfo
        0.8103,   -0.5790,    0.0906,
       -0.0255,   -0.1894,   -0.9816,
        6.1203,   -7.1051,    3.1984},
      {2.6760,   -8.4960,    3.2880}, % P   
      {1.4950,   -7.6230,    3.4770}, % O1P 
      {2.9490,   -9.4640,    4.3740}, % O2P 
      {3.9730,   -7.5950,    3.0340}, % O5' 
      {3.9938,   -6.7042,    1.9023}, % C5' 
      {3.2332,   -5.9343,    2.0319}, % H5' 
      {3.9666,   -7.2863,    0.9812}, % H5''
      {5.3098,   -5.9546,    1.8564}, % C4' 
      {5.3863,   -5.3702,    0.9395}, % H4' 
      {5.3851,   -5.0642,    3.0076}, % O4' 
      {6.7315,   -4.9724,    3.4462}, % C1' 
      {7.0033,   -3.9202,    3.3619}, % H1' 
      {7.5997,   -5.8018,    2.4948}, % C2' 
      {8.3627,   -6.3254,    3.0707}, % H2''
      {8.0410,   -4.9501,    1.4724}, % O2' 
      {8.2781,   -4.0644,    1.7570}, % H2' 
      {6.5701,   -6.8129,    1.9714}, % C3' 
      {6.4186,   -7.5809,    2.7299}, % H3' 
      {6.9357,   -7.3841,    0.7235}, % O3' 
      {6.8024,   -5.4718,    4.8475}, % N1  
      {7.9218,   -5.5700,    6.8877}, % N3  
      {7.8908,   -5.0886,    5.5944}, % C2  
      {6.9789,   -6.3827,    7.4823}, % C4  
      {5.8742,   -6.7319,    6.6202}, % C5  
      {5.8182,   -6.2769,    5.3570}, % C6
      c, {
      {7.1702,   -6.7511,    8.7402}, % N4  
      {8.7747,   -4.3728,    5.1568}, % O2  
      {6.4741,   -7.3461,    9.1662}, % H41 
      {7.9889,   -6.4396,    9.2429}, % H42 
      {5.0736,   -7.3713,    6.9922}, % H5  
      {4.9784,   -6.5473,    4.7170}} % H6  
    }.

rC04() ->
     {
      {-0.5669,   -0.8012,    0.1918,  % dgf_base_tfo
       -0.8129,    0.5817,    0.0273,
       -0.1334,   -0.1404,   -0.9811,
       -0.3279,    8.3874,    0.3355},
      {-0.8313,   -0.4738,   -0.2906,  % p_o3'_275_tfo
        0.0649,    0.4366,   -0.8973,
        0.5521,   -0.7648,   -0.3322,
        1.6833,    6.8060,   -7.0011},
      {0.3445,   -0.7630,    0.5470,  % p_o3'_180_tfo
       -0.4628,   -0.6450,   -0.6082,
        0.8168,   -0.0436,   -0.5753,
       -6.8179,   -3.9778,   -5.9887},
      {0.5855,    0.7931,   -0.1682,  % p_o3'_60_tfo
        0.8103,   -0.5790,    0.0906,
       -0.0255,   -0.1894,   -0.9816,
        6.1203,   -7.1051,    3.1984},
      {2.6760,   -8.4960,    3.2880}, % P   
      {1.4950,   -7.6230,    3.4770}, % O1P 
      {2.9490,   -9.4640,    4.3740}, % O2P 
      {3.9730,   -7.5950,    3.0340}, % O5' 
      {5.2416,   -8.2422,    2.8181}, % C5' 
      {5.2050,   -8.8128,    1.8901}, % H5' 
      {5.5368,   -8.7738,    3.7227}, % H5''
      {6.3232,   -7.2037,    2.6002}, % C4' 
      {7.3048,   -7.6757,    2.5577}, % H4' 
      {6.0635,   -6.5092,    1.3456}, % O4' 
      {6.4697,   -5.1547,    1.4629}, % C1' 
      {7.2354,   -5.0043,    0.7018}, % H1' 
      {7.0856,   -4.9610,    2.8521}, % C2' 
      {6.7777,   -3.9935,    3.2487}, % H2''
      {8.4627,   -5.1992,    2.7423}, % O2' 
      {8.8693,   -4.8638,    1.9399}, % H2' 
      {6.3877,   -6.0809,    3.6362}, % C3' 
      {5.3770,   -5.7562,    3.8834}, % H3' 
      {7.1024,   -6.4754,    4.7985}, % O3' 
      {5.2764,   -4.2883,    1.2538}, % N1  
      {3.8961,   -3.0896,   -0.1893}, % N3  
      {5.0095,   -3.8907,   -0.0346}, % C2  
      {3.0480,   -2.6632,    0.8116}, % C4  
      {3.4093,   -3.1310,    2.1292}, % C5  
      {4.4878,   -3.9124,    2.3088}, % C6
      c, {
      {2.0216,   -1.8941,    0.4804}, % N4  
      {5.7005,   -4.2164,   -0.9842}, % O2  
      {1.4067,   -1.5873,    1.2205}, % H41 
      {1.8721,   -1.6319,   -0.4835}, % H42 
      {2.8048,   -2.8507,    2.9918}, % H5  
      {4.7491,   -4.2593,    3.3085}} % H6  
    }.

rC05() ->
     {
      {-0.6298,    0.0246,    0.7763,  % dgf_base_tfo
       -0.5226,   -0.7529,   -0.4001,
        0.5746,   -0.6577,    0.4870,
       -0.0208,   -3.4598,   -9.6882},
      {-0.8313,   -0.4738,   -0.2906,  % p_o3'_275_tfo
        0.0649,    0.4366,   -0.8973,
        0.5521,   -0.7648,   -0.3322,
        1.6833,    6.8060,   -7.0011},
      {0.3445,   -0.7630,    0.5470,  % p_o3'_180_tfo
       -0.4628,   -0.6450,   -0.6082,
        0.8168,   -0.0436,   -0.5753,
       -6.8179,   -3.9778,   -5.9887},
      {0.5855,    0.7931,   -0.1682,  % p_o3'_60_tfo
        0.8103,   -0.5790,    0.0906,
       -0.0255,   -0.1894,   -0.9816,
        6.1203,   -7.1051,    3.1984},
      {2.6760,   -8.4960,    3.2880}, % P   
      {1.4950,   -7.6230,    3.4770}, % O1P 
      {2.9490,   -9.4640,    4.3740}, % O2P 
      {3.9730,   -7.5950,    3.0340}, % O5' 
      {4.3825,   -6.6585,    4.0489}, % C5' 
      {4.6841,   -7.2019,    4.9443}, % H5' 
      {3.6189,   -5.8889,    4.1625}, % H5''
      {5.6255,   -5.9175,    3.5998}, % C4' 
      {5.8732,   -5.1228,    4.3034}, % H4' 
      {6.7337,   -6.8605,    3.5222}, % O4' 
      {7.5932,   -6.4923,    2.4548}, % C1' 
      {8.5661,   -6.2983,    2.9064}, % H1' 
      {7.0527,   -5.2012,    1.8322}, % C2' 
      {7.1627,   -5.2525,    0.7490}, % H2''
      {7.6666,   -4.1249,    2.4880}, % O2' 
      {8.5944,   -4.2543,    2.6981}, % H2' 
      {5.5661,   -5.3029,    2.2009}, % C3' 
      {5.0841,   -6.0018,    1.5172}, % H3' 
      {4.9062,   -4.0452,    2.2042}, % O3' 
      {7.6298,   -7.6136,    1.4752}, % N1  
      {8.5977,   -9.5977,    0.7329}, % N3  
      {8.5951,   -8.5745,    1.6594}, % C2  
      {7.7372,   -9.7371,   -0.3364}, % C4  
      {6.7596,   -8.6801,   -0.4476}, % C5  
      {6.7338,   -7.6721,    0.4408}, % C6
      c, {
      {7.8849,  -10.7881,   -1.1289}, % N4  
      {9.3993,   -8.5377,    2.5743}, % O2  
      {7.2499,  -10.8809,   -1.9088}, % H41 
      {8.6122,  -11.4649,   -0.9468}, % H42 
      {6.0317,   -8.6941,   -1.2588}, % H5  
      {5.9901,   -6.8809,    0.3459}} % H6  
    }.

rC06() ->
     {
      {-0.9837,    0.0476,   -0.1733,  % dgf_base_tfo
       -0.1792,   -0.3353,    0.9249,
       -0.0141,    0.9409,    0.3384,
        5.7793,   -5.2303,    4.5997},
      {-0.8313,   -0.4738,   -0.2906,  % p_o3'_275_tfo
        0.0649,    0.4366,   -0.8973,
        0.5521,   -0.7648,   -0.3322,
        1.6833,    6.8060,   -7.0011},
      {0.3445,   -0.7630,    0.5470,  % p_o3'_180_tfo
       -0.4628,   -0.6450,   -0.6082,
        0.8168,   -0.0436,   -0.5753,
       -6.8179,   -3.9778,   -5.9887},
      {0.5855,    0.7931,   -0.1682,  % p_o3'_60_tfo
        0.8103,   -0.5790,    0.0906,
       -0.0255,   -0.1894,   -0.9816,
        6.1203,   -7.1051,    3.1984},
      {2.6760,   -8.4960,    3.2880}, % P   
      {1.4950,   -7.6230,    3.4770}, % O1P 
      {2.9490,   -9.4640,    4.3740}, % O2P 
      {3.9730,   -7.5950,    3.0340}, % O5' 
      {3.9938,   -6.7042,    1.9023}, % C5' 
      {3.2332,   -5.9343,    2.0319}, % H5' 
      {3.9666,   -7.2863,    0.9812}, % H5''
      {5.3098,   -5.9546,    1.8564}, % C4' 
      {5.3863,   -5.3702,    0.9395}, % H4' 
      {5.3851,   -5.0642,    3.0076}, % O4' 
      {6.7315,   -4.9724,    3.4462}, % C1' 
      {7.0033,   -3.9202,    3.3619}, % H1' 
      {7.5997,   -5.8018,    2.4948}, % C2' 
      {8.3627,   -6.3254,    3.0707}, % H2''
      {8.0410,   -4.9501,    1.4724}, % O2' 
      {8.2781,   -4.0644,    1.7570}, % H2' 
      {6.5701,   -6.8129,    1.9714}, % C3' 
      {6.4186,   -7.5809,    2.7299}, % H3' 
      {6.9357,   -7.3841,    0.7235}, % O3' 
      {6.8024,   -5.4718,    4.8475}, % N1  
      {6.6920,   -5.0495,    7.1354}, % N3  
      {6.6201,   -4.5500,    5.8506}, % C2  
      {6.9254,   -6.3614,    7.4926}, % C4  
      {7.1046,   -7.2543,    6.3718}, % C5  
      {7.0391,   -6.7951,    5.1106}, % C6
      c, {
      {6.9614,   -6.6648,    8.7815}, % N4  
      {6.4083,   -3.3696,    5.6340}, % O2  
      {7.1329,   -7.6280,    9.0324}, % H41 
      {6.8204,   -5.9469,    9.4777}, % H42 
      {7.2954,   -8.3135,    6.5440}, % H5  
      {7.1753,   -7.4798,    4.2735}} % H6  
    }.

rC07() ->
     {
      {0.0033,    0.2720,   -0.9623,  % dgf_base_tfo
        0.3013,   -0.9179,   -0.2584,
       -0.9535,   -0.2891,   -0.0850,
       43.0403,   13.7233,   34.5710},
      {0.9187,    0.2887,    0.2694,  % p_o3'_275_tfo
        0.0302,   -0.7316,    0.6811,
        0.3938,   -0.6176,   -0.6808,
       -48.4330,   26.3254,   13.6383},
      {-0.1504,    0.7744,   -0.6145,  % p_o3'_180_tfo
        0.7581,    0.4893,    0.4311,
        0.6345,   -0.4010,   -0.6607,
       -31.9784,  -13.4285,   44.9650},
      {-0.6236,   -0.7810,   -0.0337,  % p_o3'_60_tfo
       -0.6890,    0.5694,   -0.4484,
        0.3694,   -0.2564,   -0.8932,
       12.1105,   30.8774,   46.0946},
      {33.3400,   11.0980,   46.1750}, % P   
      {34.5130,   10.2320,   46.4660}, % O1P 
      {33.4130,   12.3960,   46.9340}, % O2P 
      {31.9810,   10.3390,   46.4820}, % O5' 
      {30.8152,   11.1619,   46.2003}, % C5' 
      {30.4519,   10.9454,   45.1957}, % H5' 
      {31.0379,   12.2016,   46.4400}, % H5''
      {29.7081,   10.7448,   47.1428}, % C4' 
      {28.8710,   11.4416,   47.0982}, % H4' 
      {29.2550,    9.4394,   46.8162}, % O4' 
      {29.3907,    8.5625,   47.9460}, % C1' 
      {28.4416,    8.5669,   48.4819}, % H1' 
      {30.4468,    9.2031,   48.7952}, % C2' 
      {31.4222,    8.9651,   48.3709}, % H2''
      {30.3701,    8.9157,   50.1624}, % O2' 
      {30.0652,    8.0304,   50.3740}, % H2' 
      {30.1622,   10.6879,   48.6120}, % C3' 
      {31.0952,   11.2399,   48.7254}, % H3' 
      {29.1076,   11.1535,   49.4702}, % O3' 
      {29.7883,    7.2209,   47.5235}, % N1  
      {29.1825,    5.0438,   46.8275}, % N3  
      {28.8008,    6.2912,   47.2263}, % C2  
      {30.4888,    4.6890,   46.7186}, % C4  
      {31.5034,    5.6405,   47.0249}, % C5  
      {31.1091,    6.8691,   47.4156}, % C6
      c, {
      {30.8109,    3.4584,   46.3336}, % N4  
      {27.6171,    6.5989,   47.3189}, % O2  
      {31.7923,    3.2301,   46.2638}, % H41 
      {30.0880,    2.7857,   46.1215}, % H42 
      {32.5542,    5.3634,   46.9395}, % H5  
      {31.8523,    7.6279,   47.6603}} % H6  
    }.

rC08() ->
     {
      {0.0797,   -0.6026,   -0.7941,  % dgf_base_tfo
        0.7939,    0.5201,   -0.3150,
        0.6028,   -0.6054,    0.5198,
       -36.8341,   41.5293,    1.6628},
      {0.9187,    0.2887,    0.2694,  % p_o3'_275_tfo
        0.0302,   -0.7316,    0.6811,
        0.3938,   -0.6176,   -0.6808,
       -48.4330,   26.3254,   13.6383},
      {-0.1504,    0.7744,   -0.6145,  % p_o3'_180_tfo
        0.7581,    0.4893,    0.4311,
        0.6345,   -0.4010,   -0.6607,
       -31.9784,  -13.4285,   44.9650},
      {-0.6236,   -0.7810,   -0.0337,  % p_o3'_60_tfo
       -0.6890,    0.5694,   -0.4484,
        0.3694,   -0.2564,   -0.8932,
       12.1105,   30.8774,   46.0946},
      {33.3400,   11.0980,   46.1750}, % P   
      {34.5130,   10.2320,   46.4660}, % O1P 
      {33.4130,   12.3960,   46.9340}, % O2P 
      {31.9810,   10.3390,   46.4820}, % O5' 
      {31.8779,    9.9369,   47.8760}, % C5' 
      {31.3239,   10.6931,   48.4322}, % H5' 
      {32.8647,    9.6624,   48.2489}, % H5''
      {31.0429,    8.6773,   47.9401}, % C4' 
      {31.0779,    8.2331,   48.9349}, % H4' 
      {29.6956,    8.9669,   47.5983}, % O4' 
      {29.2784,    8.1700,   46.4782}, % C1' 
      {28.8006,    7.2731,   46.8722}, % H1' 
      {30.5544,    7.7940,   45.7875}, % C2' 
      {30.8837,    8.6410,   45.1856}, % H2''
      {30.5100,    6.6007,   45.0582}, % O2' 
      {29.6694,    6.4168,   44.6326}, % H2' 
      {31.5146,    7.5954,   46.9527}, % C3' 
      {32.5255,    7.8261,   46.6166}, % H3' 
      {31.3876,    6.2951,   47.5516}, % O3' 
      {28.3976,    8.9302,   45.5933}, % N1  
      {26.2155,    9.6135,   44.9910}, % N3  
      {27.0281,    8.8961,   45.8192}, % C2  
      {26.7044,   10.3489,   43.9595}, % C4  
      {28.1088,   10.3837,   43.7247}, % C5  
      {28.8978,    9.6708,   44.5535}, % C6
      c, {
      {25.8715,   11.0249,   43.1749}, % N4  
      {26.5733,    8.2371,   46.7484}, % O2  
      {26.2707,   11.5609,   42.4177}, % H41 
      {24.8760,   10.9939,   43.3427}, % H42 
      {28.5089,   10.9722,   42.8990}, % H5  
      {29.9782,    9.6687,   44.4097}} % H6  
    }.

rC09() ->
     {
      {0.8727,    0.4760,   -0.1091,  % dgf_base_tfo
       -0.4188,    0.6148,   -0.6682,
       -0.2510,    0.6289,    0.7359,
       -8.1687,  -52.0761,  -25.0726},
      {0.9187,    0.2887,    0.2694,  % p_o3'_275_tfo
        0.0302,   -0.7316,    0.6811,
        0.3938,   -0.6176,   -0.6808,
       -48.4330,   26.3254,   13.6383},
      {-0.1504,    0.7744,   -0.6145,  % p_o3'_180_tfo
        0.7581,    0.4893,    0.4311,
        0.6345,   -0.4010,   -0.6607,
       -31.9784,  -13.4285,   44.9650},
      {-0.6236,   -0.7810,   -0.0337,  % p_o3'_60_tfo
       -0.6890,    0.5694,   -0.4484,
        0.3694,   -0.2564,   -0.8932,
       12.1105,   30.8774,   46.0946},
      {33.3400,   11.0980,   46.1750}, % P   
      {34.5130,   10.2320,   46.4660}, % O1P 
      {33.4130,   12.3960,   46.9340}, % O2P 
      {31.9810,   10.3390,   46.4820}, % O5' 
      {30.8152,   11.1619,   46.2003}, % C5' 
      {30.4519,   10.9454,   45.1957}, % H5' 
      {31.0379,   12.2016,   46.4400}, % H5''
      {29.7081,   10.7448,   47.1428}, % C4' 
      {29.4506,    9.6945,   47.0059}, % H4' 
      {30.1045,   10.9634,   48.4885}, % O4' 
      {29.1794,   11.8418,   49.1490}, % C1' 
      {28.4388,   11.2210,   49.6533}, % H1' 
      {28.5211,   12.6008,   48.0367}, % C2' 
      {29.1947,   13.3949,   47.7147}, % H2''
      {27.2316,   13.0683,   48.3134}, % O2' 
      {27.0851,   13.3391,   49.2227}, % H2' 
      {28.4131,   11.5507,   46.9391}, % C3' 
      {28.4451,   12.0512,   45.9713}, % H3' 
      {27.2707,   10.6955,   47.1097}, % O3' 
      {29.8751,   12.7405,   50.0682}, % N1  
      {30.7172,   13.1841,   52.2328}, % N3  
      {30.0617,   12.3404,   51.3847}, % C2  
      {31.1834,   14.3941,   51.8297}, % C4  
      {30.9913,   14.8074,   50.4803}, % C5  
      {30.3434,   13.9610,   49.6548}, % C6
      c, {
      {31.8090,   15.1847,   52.6957}, % N4  
      {29.6470,   11.2494,   51.7616}, % O2  
      {32.1422,   16.0774,   52.3606}, % H41 
      {31.9392,   14.8893,   53.6527}, % H42 
      {31.3632,   15.7771,   50.1491}, % H5  
      {30.1742,   14.2374,   48.6141}} % H6  
    }.

rC10() ->
     {
      {0.1549,    0.8710,   -0.4663,  % dgf_base_tfo
        0.6768,   -0.4374,   -0.5921,
       -0.7197,   -0.2239,   -0.6572,
       25.2447,  -14.1920,   50.3201},
      {0.9187,    0.2887,    0.2694,  % p_o3'_275_tfo
        0.0302,   -0.7316,    0.6811,
        0.3938,   -0.6176,   -0.6808,
       -48.4330,   26.3254,   13.6383},
      {-0.1504,    0.7744,   -0.6145,  % p_o3'_180_tfo
        0.7581,    0.4893,    0.4311,
        0.6345,   -0.4010,   -0.6607,
       -31.9784,  -13.4285,   44.9650},
      {-0.6236,   -0.7810,   -0.0337,  % p_o3'_60_tfo
       -0.6890,    0.5694,   -0.4484,
        0.3694,   -0.2564,   -0.8932,
       12.1105,   30.8774,   46.0946},
      {33.3400,   11.0980,   46.1750}, % P   
      {34.5130,   10.2320,   46.4660}, % O1P 
      {33.4130,   12.3960,   46.9340}, % O2P 
      {31.9810,   10.3390,   46.4820}, % O5' 
      {31.8779,    9.9369,   47.8760}, % C5' 
      {31.3239,   10.6931,   48.4322}, % H5' 
      {32.8647,    9.6624,   48.2489}, % H5''
      {31.0429,    8.6773,   47.9401}, % C4' 
      {30.0440,    8.8473,   47.5383}, % H4' 
      {31.6749,    7.6351,   47.2119}, % O4' 
      {31.9159,    6.5022,   48.0616}, % C1' 
      {31.0691,    5.8243,   47.9544}, % H1' 
      {31.9300,    7.0685,   49.4493}, % C2' 
      {32.9024,    7.5288,   49.6245}, % H2''
      {31.5672,    6.1750,   50.4632}, % O2' 
      {31.8416,    5.2663,   50.3200}, % H2' 
      {30.8618,    8.1514,   49.3749}, % C3' 
      {31.1122,    8.9396,   50.0850}, % H3' 
      {29.5351,    7.6245,   49.5409}, % O3' 
      {33.1890,    5.8629,   47.7343}, % N1  
      {34.4004,    4.2636,   46.4828}, % N3  
      {33.2062,    4.8497,   46.7851}, % C2  
      {35.5600,    4.6374,   47.0822}, % C4  
      {35.5444,    5.6751,   48.0577}, % C5  
      {34.3565,    6.2450,   48.3432}, % C6
      c, {
      {36.6977,    4.0305,   46.7598}, % N4  
      {32.1661,    4.5034,   46.2348}, % O2  
      {37.5405,    4.3347,   47.2259}, % H41 
      {36.7033,    3.2923,   46.0706}, % H42 
      {36.4713,    5.9811,   48.5428}, % H5  
      {34.2986,    7.0426,   49.0839}} % H6  
    }.

rCs() -> [rC01(),rC02(),rC03(),rC04(),rC05(),rC06(),rC07(),
          rC08(),rC09(),rC10()].

rG() ->
     {
      {-0.0018,   -0.8207,    0.5714,  % dgf_base_tfo
        0.2679,   -0.5509,   -0.7904,
        0.9634,    0.1517,    0.2209,
        0.0073,    8.4030,    0.6232},
      {-0.8143,   -0.5091,   -0.2788,  % p_o3'_275_tfo
       -0.0433,   -0.4257,    0.9038,
       -0.5788,    0.7480,    0.3246,
        1.5227,    6.9114,   -7.0765},
      {0.3822,   -0.7477,    0.5430,  % p_o3'_180_tfo
        0.4552,    0.6637,    0.5935,
       -0.8042,    0.0203,    0.5941,
       -6.9472,   -4.1186,   -5.9108},
      {0.5640,    0.8007,   -0.2022,  % p_o3'_60_tfo
       -0.8247,    0.5587,   -0.0878,
        0.0426,    0.2162,    0.9754,
        6.2694,   -7.0540,    3.3316},
      {2.8930,    8.5380,   -3.3280}, % P   
      {1.6980,    7.6960,   -3.5570}, % O1P 
      {3.2260,    9.5010,   -4.4020}, % O2P 
      {4.1590,    7.6040,   -3.0340}, % O5' 
      {5.4550,    8.2120,   -2.8810}, % C5' 
      {5.4546,    8.8508,   -1.9978}, % H5' 
      {5.7588,    8.6625,   -3.8259}, % H5''
      {6.4970,    7.1480,   -2.5980}, % C4' 
      {7.4896,    7.5919,   -2.5214}, % H4' 
      {6.1630,    6.4860,   -1.3440}, % O4' 
      {6.5400,    5.1200,   -1.4190}, % C1' 
      {7.2763,    4.9681,   -0.6297}, % H1' 
      {7.1940,    4.8830,   -2.7770}, % C2' 
      {6.8667,    3.9183,   -3.1647}, % H2''
      {8.5860,    5.0910,   -2.6140}, % O2' 
      {8.9510,    4.7626,   -1.7890}, % H2' 
      {6.5720,    6.0040,   -3.6090}, % C3' 
      {5.5636,    5.7066,   -3.8966}, % H3' 
      {7.3801,    6.3562,   -4.7350}, % O3' 
      {4.7150,    0.4910,   -0.1360}, % N1  
      {6.3490,    2.1730,   -0.6020}, % N3  
      {5.9530,    0.9650,   -0.2670}, % C2  
      {5.2900,    2.9790,   -0.8260}, % C4  
      {3.9720,    2.6390,   -0.7330}, % C5  
      {3.6770,    1.3160,   -0.3660}, % C6
      g, {
      {6.8426,    0.0056,   -0.0019}, % N2  
      {3.1660,    3.7290,   -1.0360}, % N7  
      {5.3170,    4.2990,   -1.1930}, % N9  
      {4.0100,    4.6780,   -1.2990}, % C8  
      {2.4280,    0.8450,   -0.2360}, % O6  
      {4.6151,   -0.4677,    0.1305}, % H1  
      {6.6463,   -0.9463,    0.2729}, % H21 
      {7.8170,    0.2642,   -0.0640}, % H22 
      {3.4421,    5.5744,   -1.5482}} % H8  
    }.

% rG01() ->
%      {
%       {-0.0043,   -0.8175,    0.5759,  % dgf_base_tfo
%         0.2617,   -0.5567,   -0.7884,
%         0.9651,    0.1473,    0.2164,
%         0.0359,    8.3929,    0.5532},
%       {-0.8143,   -0.5091,   -0.2788,  % p_o3'_275_tfo
%        -0.0433,   -0.4257,    0.9038,
%        -0.5788,    0.7480,    0.3246,
%         1.5227,    6.9114,   -7.0765},
%       {0.3822,   -0.7477,    0.5430,  % p_o3'_180_tfo
%         0.4552,    0.6637,    0.5935,
%        -0.8042,    0.0203,    0.5941,
%        -6.9472,   -4.1186,   -5.9108},
%       {0.5640,    0.8007,   -0.2022,  % p_o3'_60_tfo
%        -0.8247,    0.5587,   -0.0878,
%         0.0426,    0.2162,    0.9754,
%         6.2694,   -7.0540,    3.3316},
%       {2.8930,    8.5380,   -3.3280}, % P   
%       {1.6980,    7.6960,   -3.5570}, % O1P 
%       {3.2260,    9.5010,   -4.4020}, % O2P 
%       {4.1590,    7.6040,   -3.0340}, % O5' 
%       {5.4352,    8.2183,   -2.7757}, % C5' 
%       {5.3830,    8.7883,   -1.8481}, % H5' 
%       {5.7729,    8.7436,   -3.6691}, % H5''
%       {6.4830,    7.1518,   -2.5252}, % C4' 
%       {7.4749,    7.5972,   -2.4482}, % H4' 
%       {6.1626,    6.4620,   -1.2827}, % O4' 
%       {6.5431,    5.0992,   -1.3905}, % C1' 
%       {7.2871,    4.9328,   -0.6114}, % H1' 
%       {7.1852,    4.8935,   -2.7592}, % C2' 
%       {6.8573,    3.9363,   -3.1645}, % H2''
%       {8.5780,    5.1025,   -2.6046}, % O2' 
%       {8.9516,    4.7577,   -1.7902}, % H2' 
%       {6.5522,    6.0300,   -3.5612}, % C3' 
%       {5.5420,    5.7356,   -3.8459}, % H3' 
%       {7.3487,    6.4089,   -4.6867}, % O3' 
%       {4.7442,    0.4514,   -0.1390}, % N1  
%       {6.3687,    2.1459,   -0.5926}, % N3  
%       {5.9795,    0.9335,   -0.2657}, % C2  
%       {5.3052,    2.9471,   -0.8125}, % C4  
%       {3.9891,    2.5987,   -0.7230}, % C5  
%       {3.7016,    1.2717,   -0.3647}, % C6
%       g, {
%       {6.8745,   -0.0224,   -0.0058}, % N2  
%       {3.1770,    3.6859,   -1.0198}, % N7  
%       {5.3247,    4.2695,   -1.1710}, % N9  
%       {4.0156,    4.6415,   -1.2759}, % C8  
%       {2.4553,    0.7925,   -0.2390}, % O6  
%       {4.6497,   -0.5095,    0.1212}, % H1  
%       {6.6836,   -0.9771,    0.2627}, % H21 
%       {7.8474,    0.2424,   -0.0653}, % H22 
%       {3.4426,    5.5361,   -1.5199}} % H8  
%     }.

% rG02() ->
%      {
%       {0.5566,    0.0449,    0.8296,  % dgf_base_tfo
%         0.5125,    0.7673,   -0.3854,
%        -0.6538,    0.6397,    0.4041,
%        -9.1161,   -3.7679,   -2.9968},
%       {-0.8143,   -0.5091,   -0.2788,  % p_o3'_275_tfo
%        -0.0433,   -0.4257,    0.9038,
%        -0.5788,    0.7480,    0.3246,
%         1.5227,    6.9114,   -7.0765},
%       {0.3822,   -0.7477,    0.5430,  % p_o3'_180_tfo
%         0.4552,    0.6637,    0.5935,
%        -0.8042,    0.0203,    0.5941,
%        -6.9472,   -4.1186,   -5.9108},
%       {0.5640,    0.8007,   -0.2022,  % p_o3'_60_tfo
%        -0.8247,    0.5587,   -0.0878,
%         0.0426,    0.2162,    0.9754,
%         6.2694,   -7.0540,    3.3316},
%       {2.8930,    8.5380,   -3.3280}, % P   
%       {1.6980,    7.6960,   -3.5570}, % O1P 
%       {3.2260,    9.5010,   -4.4020}, % O2P 
%       {4.1590,    7.6040,   -3.0340}, % O5' 
%       {4.5778,    6.6594,   -4.0364}, % C5' 
%       {4.9220,    7.1963,   -4.9204}, % H5' 
%       {3.7996,    5.9091,   -4.1764}, % H5''
%       {5.7873,    5.8869,   -3.5482}, % C4' 
%       {6.0405,    5.0875,   -4.2446}, % H4' 
%       {6.9135,    6.8036,   -3.4310}, % O4' 
%       {7.7293,    6.4084,   -2.3392}, % C1' 
%       {8.7078,    6.1815,   -2.7624}, % H1' 
%       {7.1305,    5.1418,   -1.7347}, % C2' 
%       {7.2040,    5.1982,   -0.6486}, % H2''
%       {7.7417,    4.0392,   -2.3813}, % O2' 
%       {8.6785,    4.1443,   -2.5630}, % H2' 
%       {5.6666,    5.2728,   -2.1536}, % C3' 
%       {5.1747,    5.9805,   -1.4863}, % H3' 
%       {4.9997,    4.0086,   -2.1973}, % O3' 
%       {10.3245,    8.5459,    1.5467}, % N1  
%       {9.8051,    6.9432,   -0.1497}, % N3  
%       {10.5175,    7.4328,    0.8408}, % C2  
%       {8.7523,    7.7422,   -0.4228}, % C4  
%       {8.4257,    8.9060,    0.2099}, % C5  
%       {9.2665,    9.3242,    1.2540}, % C6
%       g, {
%       {11.6077,    6.7966,    1.2752}, % N2  
%       {7.2750,    9.4537,   -0.3428}, % N7  
%       {7.7962,    7.5519,   -1.3859}, % N9  
%       {6.9479,    8.6157,   -1.2771}, % C8  
%       {9.0664,   10.4462,    1.9610}, % O6  
%       {10.9838,    8.7524,    2.2697}, % H1  
%       {12.2274,    7.0896,    2.0170}, % H21 
%       {11.8502,    5.9398,    0.7984}, % H22 
%       {6.0430,    8.9853,   -1.7594}} % H8  
%     }.

% rG03() ->
%      {
%       {-0.5021,    0.0731,    0.8617,  % dgf_base_tfo
%        -0.8112,    0.3054,   -0.4986,
%        -0.2996,   -0.9494,   -0.0940,
%         6.4273,   -5.1944,   -3.7807},
%       {-0.8143,   -0.5091,   -0.2788,  % p_o3'_275_tfo
%        -0.0433,   -0.4257,    0.9038,
%        -0.5788,    0.7480,    0.3246,
%         1.5227,    6.9114,   -7.0765},
%       {0.3822,   -0.7477,    0.5430,  % p_o3'_180_tfo
%         0.4552,    0.6637,    0.5935,
%        -0.8042,    0.0203,    0.5941,
%        -6.9472,   -4.1186,   -5.9108},
%       {0.5640,    0.8007,   -0.2022,  % p_o3'_60_tfo
%        -0.8247,    0.5587,   -0.0878,
%         0.0426,    0.2162,    0.9754,
%         6.2694,   -7.0540,    3.3316},
%       {2.8930,    8.5380,   -3.3280}, % P   
%       {1.6980,    7.6960,   -3.5570}, % O1P 
%       {3.2260,    9.5010,   -4.4020}, % O2P 
%       {4.1590,    7.6040,   -3.0340}, % O5' 
%       {4.1214,    6.7116,   -1.9049}, % C5' 
%       {3.3465,    5.9610,   -2.0607}, % H5' 
%       {4.0789,    7.2928,   -0.9837}, % H5''
%       {5.4170,    5.9293,   -1.8186}, % C4' 
%       {5.4506,    5.3400,   -0.9023}, % H4' 
%       {5.5067,    5.0417,   -2.9703}, % O4' 
%       {6.8650,    4.9152,   -3.3612}, % C1' 
%       {7.1090,    3.8577,   -3.2603}, % H1' 
%       {7.7152,    5.7282,   -2.3894}, % C2' 
%       {8.5029,    6.2356,   -2.9463}, % H2''
%       {8.1036,    4.8568,   -1.3419}, % O2' 
%       {8.3270,    3.9651,   -1.6184}, % H2' 
%       {6.7003,    6.7565,   -1.8911}, % C3' 
%       {6.5898,    7.5329,   -2.6482}, % H3' 
%       {7.0505,    7.2878,   -0.6105}, % O3' 
%       {9.6740,    4.7656,   -7.6614}, % N1  
%       {9.0739,    4.3013,   -5.3941}, % N3  
%       {9.8416,    4.2192,   -6.4581}, % C2  
%       {7.9885,    5.0632,   -5.6446}, % C4  
%       {7.6822,    5.6856,   -6.8194}, % C5  
%       {8.5831,    5.5215,   -7.8840}, % C6
%       g, {
%       {10.9733,    3.5117,   -6.4286}, % N2  
%       {6.4857,    6.3816,   -6.7035}, % N7  
%       {6.9740,    5.3703,   -4.7760}, % N9  
%       {6.1133,    6.1613,   -5.4808}, % C8  
%       {8.4084,    6.0747,   -9.0933}, % O6  
%       {10.3759,    4.5855,   -8.3504}, % H1  
%       {11.6254,    3.3761,   -7.1879}, % H21 
%       {11.1917,    3.0460,   -5.5593}, % H22 
%       {5.1705,    6.6830,   -5.3167}} % H8  
%     }.

% rG04() ->
%      {
%       {-0.5426,   -0.8175,    0.1929,  % dgf_base_tfo
%         0.8304,   -0.5567,   -0.0237,
%         0.1267,    0.1473,    0.9809,
%        -0.5075,    8.3929,    0.2229},
%       {-0.8143,   -0.5091,   -0.2788,  % p_o3'_275_tfo
%        -0.0433,   -0.4257,    0.9038,
%        -0.5788,    0.7480,    0.3246,
%         1.5227,    6.9114,   -7.0765},
%       {0.3822,   -0.7477,    0.5430,  % p_o3'_180_tfo
%         0.4552,    0.6637,    0.5935,
%        -0.8042,    0.0203,    0.5941,
%        -6.9472,   -4.1186,   -5.9108},
%       {0.5640,    0.8007,   -0.2022,  % p_o3'_60_tfo
%        -0.8247,    0.5587,   -0.0878,
%         0.0426,    0.2162,    0.9754,
%         6.2694,   -7.0540,    3.3316},
%       {2.8930,    8.5380,   -3.3280}, % P   
%       {1.6980,    7.6960,   -3.5570}, % O1P 
%       {3.2260,    9.5010,   -4.4020}, % O2P 
%       {4.1590,    7.6040,   -3.0340}, % O5' 
%       {5.4352,    8.2183,   -2.7757}, % C5' 
%       {5.3830,    8.7883,   -1.8481}, % H5' 
%       {5.7729,    8.7436,   -3.6691}, % H5''
%       {6.4830,    7.1518,   -2.5252}, % C4' 
%       {7.4749,    7.5972,   -2.4482}, % H4' 
%       {6.1626,    6.4620,   -1.2827}, % O4' 
%       {6.5431,    5.0992,   -1.3905}, % C1' 
%       {7.2871,    4.9328,   -0.6114}, % H1' 
%       {7.1852,    4.8935,   -2.7592}, % C2' 
%       {6.8573,    3.9363,   -3.1645}, % H2''
%       {8.5780,    5.1025,   -2.6046}, % O2' 
%       {8.9516,    4.7577,   -1.7902}, % H2' 
%       {6.5522,    6.0300,   -3.5612}, % C3' 
%       {5.5420,    5.7356,   -3.8459}, % H3' 
%       {7.3487,    6.4089,   -4.6867}, % O3' 
%       {3.6343,    2.6680,    2.0783}, % N1  
%       {5.4505,    3.9805,    1.2446}, % N3  
%       {4.7540,    3.3816,    2.1851}, % C2  
%       {4.8805,    3.7951,    0.0354}, % C4  
%       {3.7416,    3.0925,   -0.2305}, % C5  
%       {3.0873,    2.4980,    0.8606}, % C6
%       g, {
%       {5.1433,    3.4373,    3.4609}, % N2  
%       {3.4605,    3.1184,   -1.5906}, % N7  
%       {5.3247,    4.2695,   -1.1710}, % N9  
%       {4.4244,    3.8244,   -2.0953}, % C8  
%       {1.9600,    1.7805,    0.7462}, % O6  
%       {3.2489,    2.2879,    2.9191}, % H1  
%       {4.6785,    3.0243,    4.2568}, % H21 
%       {5.9823,    3.9654,    3.6539}, % H22 
%       {4.2675,    3.8876,   -3.1721}} % H8  
%     }.

% rG05() ->
%      {
%       {-0.5891,    0.0449,    0.8068,  % dgf_base_tfo
%         0.5375,    0.7673,    0.3498,
%        -0.6034,    0.6397,   -0.4762,
%        -0.3019,   -3.7679,   -9.5913},
%       {-0.8143,   -0.5091,   -0.2788,  % p_o3'_275_tfo
%        -0.0433,   -0.4257,    0.9038,
%        -0.5788,    0.7480,    0.3246,
%         1.5227,    6.9114,   -7.0765},
%       {0.3822,   -0.7477,    0.5430,  % p_o3'_180_tfo
%         0.4552,    0.6637,    0.5935,
%        -0.8042,    0.0203,    0.5941,
%        -6.9472,   -4.1186,   -5.9108},
%       {0.5640,    0.8007,   -0.2022,  % p_o3'_60_tfo
%        -0.8247,    0.5587,   -0.0878,
%         0.0426,    0.2162,    0.9754,
%         6.2694,   -7.0540,    3.3316},
%       {2.8930,    8.5380,   -3.3280}, % P   
%       {1.6980,    7.6960,   -3.5570}, % O1P 
%       {3.2260,    9.5010,   -4.4020}, % O2P 
%       {4.1590,    7.6040,   -3.0340}, % O5' 
%       {4.5778,    6.6594,   -4.0364}, % C5' 
%       {4.9220,    7.1963,   -4.9204}, % H5' 
%       {3.7996,    5.9091,   -4.1764}, % H5''
%       {5.7873,    5.8869,   -3.5482}, % C4' 
%       {6.0405,    5.0875,   -4.2446}, % H4' 
%       {6.9135,    6.8036,   -3.4310}, % O4' 
%       {7.7293,    6.4084,   -2.3392}, % C1' 
%       {8.7078,    6.1815,   -2.7624}, % H1' 
%       {7.1305,    5.1418,   -1.7347}, % C2' 
%       {7.2040,    5.1982,   -0.6486}, % H2''
%       {7.7417,    4.0392,   -2.3813}, % O2' 
%       {8.6785,    4.1443,   -2.5630}, % H2' 
%       {5.6666,    5.2728,   -2.1536}, % C3' 
%       {5.1747,    5.9805,   -1.4863}, % H3' 
%       {4.9997,    4.0086,   -2.1973}, % O3' 
%       {10.2594,   10.6774,   -1.0056}, % N1  
%       {9.7528,    8.7080,   -2.2631}, % N3  
%       {10.4471,    9.7876,   -1.9791}, % C2  
%       {8.7271,    8.5575,   -1.3991}, % C4  
%       {8.4100,    9.3803,   -0.3580}, % C5  
%       {9.2294,   10.5030,   -0.1574}, % C6
%       g, {
%       {11.5110,   10.1256,   -2.7114}, % N2  
%       {7.2891,    8.9068,    0.3121}, % N7  
%       {7.7962,    7.5519,   -1.3859}, % N9  
%       {6.9702,    7.8292,   -0.3353}, % C8  
%       {9.0349,   11.3951,    0.8250}, % O6  
%       {10.9013,   11.4422,   -0.9512}, % H1  
%       {12.1031,   10.9341,   -2.5861}, % H21 
%       {11.7369,    9.5180,   -3.4859}, % H22 
%       {6.0888,    7.3990,    0.1403}} % H8  
%     }.

% rG06() ->
%      {
%       {-0.9815,    0.0731,   -0.1772,  % dgf_base_tfo
%         0.1912,    0.3054,   -0.9328,
%        -0.0141,   -0.9494,   -0.3137,
%         5.7506,   -5.1944,    4.7470},
%       {-0.8143,   -0.5091,   -0.2788,  % p_o3'_275_tfo
%        -0.0433,   -0.4257,    0.9038,
%        -0.5788,    0.7480,    0.3246,
%         1.5227,    6.9114,   -7.0765},
%       {0.3822,   -0.7477,    0.5430,  % p_o3'_180_tfo
%         0.4552,    0.6637,    0.5935,
%        -0.8042,    0.0203,    0.5941,
%        -6.9472,   -4.1186,   -5.9108},
%       {0.5640,    0.8007,   -0.2022,  % p_o3'_60_tfo
%        -0.8247,    0.5587,   -0.0878,
%         0.0426,    0.2162,    0.9754,
%         6.2694,   -7.0540,    3.3316},
%       {2.8930,    8.5380,   -3.3280}, % P   
%       {1.6980,    7.6960,   -3.5570}, % O1P 
%       {3.2260,    9.5010,   -4.4020}, % O2P 
%       {4.1590,    7.6040,   -3.0340}, % O5' 
%       {4.1214,    6.7116,   -1.9049}, % C5' 
%       {3.3465,    5.9610,   -2.0607}, % H5' 
%       {4.0789,    7.2928,   -0.9837}, % H5''
%       {5.4170,    5.9293,   -1.8186}, % C4' 
%       {5.4506,    5.3400,   -0.9023}, % H4' 
%       {5.5067,    5.0417,   -2.9703}, % O4' 
%       {6.8650,    4.9152,   -3.3612}, % C1' 
%       {7.1090,    3.8577,   -3.2603}, % H1' 
%       {7.7152,    5.7282,   -2.3894}, % C2' 
%       {8.5029,    6.2356,   -2.9463}, % H2''
%       {8.1036,    4.8568,   -1.3419}, % O2' 
%       {8.3270,    3.9651,   -1.6184}, % H2' 
%       {6.7003,    6.7565,   -1.8911}, % C3' 
%       {6.5898,    7.5329,   -2.6482}, % H3' 
%       {7.0505,    7.2878,   -0.6105}, % O3' 
%       {6.6624,    3.5061,   -8.2986}, % N1  
%       {6.5810,    3.2570,   -5.9221}, % N3  
%       {6.5151,    2.8263,   -7.1625}, % C2  
%       {6.8364,    4.5817,   -5.8882}, % C4  
%       {7.0116,    5.4064,   -6.9609}, % C5  
%       {6.9173,    4.8260,   -8.2361}, % C6
%       g, {
%       {6.2717,    1.5402,   -7.4250}, % N2  
%       {7.2573,    6.7070,   -6.5394}, % N7  
%       {6.9740,    5.3703,   -4.7760}, % N9  
%       {7.2238,    6.6275,   -5.2453}, % C8  
%       {7.0668,    5.5163,   -9.3763}, % O6  
%       {6.5754,    2.9964,   -9.1545}, % H1  
%       {6.1908,    1.1105,   -8.3354}, % H21 
%       {6.1346,    0.9352,   -6.6280}, % H22 
%       {7.4108,    7.6227,   -4.8418}} % H8  
%     }.

% rG07() ->
%      {
%       {0.0894,   -0.6059,    0.7905,  % dgf_base_tfo
%        -0.6810,    0.5420,    0.4924,
%        -0.7268,   -0.5824,   -0.3642,
%        34.1424,   45.9610,  -11.8600},
%       {-0.8644,   -0.4956,   -0.0851,  % p_o3'_275_tfo
%        -0.0427,    0.2409,   -0.9696,
%         0.5010,   -0.8345,   -0.2294,
%         4.0167,   54.5377,   12.4779},
%       {0.3706,   -0.6167,    0.6945,  % p_o3'_180_tfo
%        -0.2867,   -0.7872,   -0.5460,
%         0.8834,    0.0032,   -0.4686,
%        -52.9020,   18.6313,   -0.6709},
%       {0.4155,    0.9025,   -0.1137,  % p_o3'_60_tfo
%         0.9040,   -0.4236,   -0.0582,
%        -0.1007,   -0.0786,   -0.9918,
%        -7.6624,  -25.2080,   49.5181},
%       {31.3810,    0.1400,   47.5810}, % P   
%       {29.9860,    0.6630,   47.6290}, % O1P 
%       {31.7210,   -0.6460,   48.8090}, % O2P 
%       {32.4940,    1.2540,   47.2740}, % O5' 
%       {33.8709,    0.7918,   47.2113}, % C5' 
%       {34.1386,    0.5870,   46.1747}, % H5' 
%       {34.0186,   -0.0095,   47.9353}, % H5''
%       {34.7297,    1.9687,   47.6685}, % C4' 
%       {35.7723,    1.6845,   47.8113}, % H4' 
%       {34.6455,    2.9768,   46.6660}, % O4' 
%       {34.1690,    4.1829,   47.2627}, % C1' 
%       {35.0437,    4.7633,   47.5560}, % H1' 
%       {33.4145,    3.7532,   48.4954}, % C2' 
%       {32.4340,    3.3797,   48.2001}, % H2''
%       {33.3209,    4.6953,   49.5217}, % O2' 
%       {33.2374,    5.6059,   49.2295}, % H2' 
%       {34.2724,    2.5970,   48.9773}, % C3' 
%       {33.6373,    1.8935,   49.5157}, % H3' 
%       {35.3453,    3.1884,   49.7285}, % O3' 
%       {34.0511,    7.8930,   43.7791}, % N1  
%       {34.9937,    6.3369,   45.3199}, % N3  
%       {35.0882,    7.3126,   44.4200}, % C2  
%       {33.7190,    5.9650,   45.5374}, % C4  
%       {32.5845,    6.4770,   44.9458}, % C5  
%       {32.7430,    7.5179,   43.9914}, % C6
%       g, {
%       {36.3030,    7.7827,   44.1036}, % N2  
%       {31.4499,    5.8335,   45.4368}, % N7  
%       {33.2760,    4.9817,   46.4043}, % N9  
%       {31.9235,    4.9639,   46.2934}, % C8  
%       {31.8602,    8.1000,   43.3695}, % O6  
%       {34.2623,    8.6223,   43.1283}, % H1  
%       {36.5188,    8.5081,   43.4347}, % H21 
%       {37.0888,    7.3524,   44.5699}, % H22 
%       {31.0815,    4.4201,   46.7218}} % H8  
%     }.

% rG08() ->
%      {
%       {0.2224,    0.6335,    0.7411,  % dgf_base_tfo
%        -0.3644,   -0.6510,    0.6659,
%         0.9043,   -0.4181,    0.0861,
%        -47.6824,   -0.5823,  -31.7554},
%       {-0.8644,   -0.4956,   -0.0851,  % p_o3'_275_tfo
%        -0.0427,    0.2409,   -0.9696,
%         0.5010,   -0.8345,   -0.2294,
%         4.0167,   54.5377,   12.4779},
%       {0.3706,   -0.6167,    0.6945,  % p_o3'_180_tfo
%        -0.2867,   -0.7872,   -0.5460,
%         0.8834,    0.0032,   -0.4686,
%        -52.9020,   18.6313,   -0.6709},
%       {0.4155,    0.9025,   -0.1137,  % p_o3'_60_tfo
%         0.9040,   -0.4236,   -0.0582,
%        -0.1007,   -0.0786,   -0.9918,
%        -7.6624,  -25.2080,   49.5181},
%       {31.3810,    0.1400,   47.5810}, % P   
%       {29.9860,    0.6630,   47.6290}, % O1P 
%       {31.7210,   -0.6460,   48.8090}, % O2P 
%       {32.4940,    1.2540,   47.2740}, % O5' 
%       {32.5924,    2.3488,   48.2255}, % C5' 
%       {33.3674,    2.1246,   48.9584}, % H5' 
%       {31.5994,    2.5917,   48.6037}, % H5''
%       {33.0722,    3.5577,   47.4258}, % C4' 
%       {33.0310,    4.4778,   48.0089}, % H4' 
%       {34.4173,    3.3055,   47.0316}, % O4' 
%       {34.5056,    3.3910,   45.6094}, % C1' 
%       {34.7881,    4.4152,   45.3663}, % H1' 
%       {33.1122,    3.1198,   45.1010}, % C2' 
%       {32.9230,    2.0469,   45.1369}, % H2''
%       {32.7946,    3.6590,   43.8529}, % O2' 
%       {33.5170,    3.6707,   43.2207}, % H2' 
%       {32.2730,    3.8173,   46.1566}, % C3' 
%       {31.3094,    3.3123,   46.2244}, % H3' 
%       {32.2391,    5.2039,   45.7807}, % O3' 
%       {39.3337,    2.7157,   44.1441}, % N1  
%       {37.4430,    3.8242,   45.0824}, % N3  
%       {38.7276,    3.7646,   44.7403}, % C2  
%       {36.7791,    2.6963,   44.7704}, % C4  
%       {37.2860,    1.5653,   44.1678}, % C5  
%       {38.6647,    1.5552,   43.8235}, % C6
%       g, {
%       {39.5123,    4.8216,   44.9936}, % N2  
%       {36.2829,    0.6110,   44.0078}, % N7  
%       {35.4394,    2.4314,   44.9931}, % N9  
%       {35.2180,    1.1815,   44.5128}, % C8  
%       {39.2907,    0.6514,   43.2796}, % O6  
%       {40.3076,    2.8048,   43.9352}, % H1  
%       {40.4994,    4.9066,   44.7977}, % H21 
%       {39.0738,    5.6108,   45.4464}, % H22 
%       {34.3856,    0.4842,   44.4185}} % H8  
%     }.

% rG09() ->
%      {
%       {-0.9699,   -0.1688,   -0.1753,  % dgf_base_tfo
%        -0.1050,   -0.3598,    0.9271,
%        -0.2196,    0.9176,    0.3312,
%        45.6217,  -38.9484,  -12.3208},
%       {-0.8644,   -0.4956,   -0.0851,  % p_o3'_275_tfo
%        -0.0427,    0.2409,   -0.9696,
%         0.5010,   -0.8345,   -0.2294,
%         4.0167,   54.5377,   12.4779},
%       {0.3706,   -0.6167,    0.6945,  % p_o3'_180_tfo
%        -0.2867,   -0.7872,   -0.5460,
%         0.8834,    0.0032,   -0.4686,
%        -52.9020,   18.6313,   -0.6709},
%       {0.4155,    0.9025,   -0.1137,  % p_o3'_60_tfo
%         0.9040,   -0.4236,   -0.0582,
%        -0.1007,   -0.0786,   -0.9918,
%        -7.6624,  -25.2080,   49.5181},
%       {31.3810,    0.1400,   47.5810}, % P   
%       {29.9860,    0.6630,   47.6290}, % O1P 
%       {31.7210,   -0.6460,   48.8090}, % O2P 
%       {32.4940,    1.2540,   47.2740}, % O5' 
%       {33.8709,    0.7918,   47.2113}, % C5' 
%       {34.1386,    0.5870,   46.1747}, % H5' 
%       {34.0186,   -0.0095,   47.9353}, % H5''
%       {34.7297,    1.9687,   47.6685}, % C4' 
%       {34.5880,    2.8482,   47.0404}, % H4' 
%       {34.3575,    2.2770,   49.0081}, % O4' 
%       {35.5157,    2.1993,   49.8389}, % C1' 
%       {35.9424,    3.2010,   49.8893}, % H1' 
%       {36.4701,    1.2820,   49.1169}, % C2' 
%       {36.1545,    0.2498,   49.2683}, % H2''
%       {37.8262,    1.4547,   49.4008}, % O2' 
%       {38.0227,    1.6945,   50.3094}, % H2' 
%       {36.2242,    1.6797,   47.6725}, % C3' 
%       {36.4297,    0.8197,   47.0351}, % H3' 
%       {37.0289,    2.8480,   47.4426}, % O3' 
%       {34.3005,    3.5042,   54.6070}, % N1  
%       {34.7693,    3.7936,   52.2874}, % N3  
%       {34.4484,    4.2541,   53.4939}, % C2  
%       {34.9354,    2.4584,   52.2785}, % C4  
%       {34.8092,    1.5915,   53.3422}, % C5  
%       {34.4646,    2.1367,   54.6085}, % C6
%       g, {
%       {34.2514,    5.5708,   53.6503}, % N2  
%       {35.0641,    0.2835,   52.9337}, % N7  
%       {35.2669,    1.6690,   51.1915}, % N9  
%       {35.3288,    0.3954,   51.6563}, % C8  
%       {34.3151,    1.5317,   55.6650}, % O6  
%       {34.0623,    3.9797,   55.4539}, % H1  
%       {33.9950,    6.0502,   54.5016}, % H21 
%       {34.3512,    6.1432,   52.8242}, % H22 
%       {35.5414,   -0.6006,   51.2679}} % H8  
%     }.

% rG10() ->
%      {
%       {-0.0980,   -0.9723,    0.2122,  % dgf_base_tfo
%        -0.9731,    0.1383,    0.1841,
%        -0.2083,   -0.1885,   -0.9597,
%        17.8469,   38.8265,   37.0475},
%       {-0.8644,   -0.4956,   -0.0851,  % p_o3'_275_tfo
%        -0.0427,    0.2409,   -0.9696,
%         0.5010,   -0.8345,   -0.2294,
%         4.0167,   54.5377,   12.4779},
%       {0.3706,   -0.6167,    0.6945,  % p_o3'_180_tfo
%        -0.2867,   -0.7872,   -0.5460,
%         0.8834,    0.0032,   -0.4686,
%        -52.9020,   18.6313,   -0.6709},
%       {0.4155,    0.9025,   -0.1137,  % p_o3'_60_tfo
%         0.9040,   -0.4236,   -0.0582,
%        -0.1007,   -0.0786,   -0.9918,
%        -7.6624,  -25.2080,   49.5181},
%       {31.3810,    0.1400,   47.5810}, % P   
%       {29.9860,    0.6630,   47.6290}, % O1P 
%       {31.7210,   -0.6460,   48.8090}, % O2P 
%       {32.4940,    1.2540,   47.2740}, % O5' 
%       {32.5924,    2.3488,   48.2255}, % C5' 
%       {33.3674,    2.1246,   48.9584}, % H5' 
%       {31.5994,    2.5917,   48.6037}, % H5''
%       {33.0722,    3.5577,   47.4258}, % C4' 
%       {34.0333,    3.3761,   46.9447}, % H4' 
%       {32.0890,    3.8338,   46.4332}, % O4' 
%       {31.6377,    5.1787,   46.5914}, % C1' 
%       {32.2499,    5.8016,   45.9392}, % H1' 
%       {31.9167,    5.5319,   48.0305}, % C2' 
%       {31.1507,    5.0820,   48.6621}, % H2''
%       {32.0865,    6.8890,   48.3114}, % O2' 
%       {31.5363,    7.4819,   47.7942}, % H2' 
%       {33.2398,    4.8224,   48.2563}, % C3' 
%       {33.3166,    4.5570,   49.3108}, % H3' 
%       {34.2528,    5.7056,   47.7476}, % O3' 
%       {28.2782,    6.3049,   42.9364}, % N1  
%       {30.4001,    5.8547,   43.9258}, % N3  
%       {29.6195,    6.1568,   42.8913}, % C2  
%       {29.7005,    5.7006,   45.0649}, % C4  
%       {28.3383,    5.8221,   45.2343}, % C5  
%       {27.5519,    6.1461,   44.0958}, % C6
%       g, {
%       {30.1838,    6.3385,   41.6890}, % N2  
%       {27.9936,    5.5926,   46.5651}, % N7  
%       {30.2046,    5.3825,   46.3136}, % N9  
%       {29.1371,    5.3398,   47.1506}, % C8  
%       {26.3361,    6.3024,   44.0495}, % O6  
%       {27.8122,    6.5394,   42.0833}, % H1  
%       {29.7125,    6.5595,   40.8235}, % H21 
%       {31.1859,    6.2231,   41.6389}, % H22 
%       {28.9406,    5.1504,   48.2059}} % H8  
%     }.

% rGs() -> [rG01(),rG02(),rG03(),rG04(),rG05(),rG06(),rG07(),
%           rG08(),rG09(),rG10()].

rU() ->
     {
      {-0.0359,   -0.8071,    0.5894,  % dgf_base_tfo
       -0.2669,    0.5761,    0.7726,
       -0.9631,   -0.1296,   -0.2361,
        0.1584,    8.3434,    0.5434},
      {-0.8313,   -0.4738,   -0.2906,  % p_o3'_275_tfo
        0.0649,    0.4366,   -0.8973,
        0.5521,   -0.7648,   -0.3322,
        1.6833,    6.8060,   -7.0011},
      {0.3445,   -0.7630,    0.5470,  % p_o3'_180_tfo
       -0.4628,   -0.6450,   -0.6082,
        0.8168,   -0.0436,   -0.5753,
       -6.8179,   -3.9778,   -5.9887},
      {0.5855,    0.7931,   -0.1682,  % p_o3'_60_tfo
        0.8103,   -0.5790,    0.0906,
       -0.0255,   -0.1894,   -0.9816,
        6.1203,   -7.1051,    3.1984},
      {2.6760,   -8.4960,    3.2880}, % P   
      {1.4950,   -7.6230,    3.4770}, % O1P 
      {2.9490,   -9.4640,    4.3740}, % O2P 
      {3.9730,   -7.5950,    3.0340}, % O5' 
      {5.2430,   -8.2420,    2.8260}, % C5' 
      {5.1974,   -8.8497,    1.9223}, % H5' 
      {5.5548,   -8.7348,    3.7469}, % H5''
      {6.3140,   -7.2060,    2.5510}, % C4' 
      {7.2954,   -7.6762,    2.4898}, % H4' 
      {6.0140,   -6.5420,    1.2890}, % O4' 
      {6.4190,   -5.1840,    1.3620}, % C1' 
      {7.1608,   -5.0495,    0.5747}, % H1' 
      {7.0760,   -4.9560,    2.7270}, % C2' 
      {6.7770,   -3.9803,    3.1099}, % H2''
      {8.4500,   -5.1930,    2.5810}, % O2' 
      {8.8309,   -4.8755,    1.7590}, % H2' 
      {6.4060,   -6.0590,    3.5580}, % C3' 
      {5.4021,   -5.7313,    3.8281}, % H3' 
      {7.1570,   -6.4240,    4.7070}, % O3' 
      {5.2170,   -4.3260,    1.1690}, % N1  
      {4.2960,   -2.2560,    0.6290}, % N3  
      {5.4330,   -3.0200,    0.7990}, % C2  
      {2.9930,   -2.6780,    0.7940}, % C4  
      {2.8670,   -4.0630,    1.1830}, % C5  
      {3.9570,   -4.8300,    1.3550}, % C6
      u, {
      {6.5470,   -2.5560,    0.6290}, % O2  
      {2.0540,   -1.9000,    0.6130}, % O4  
      {4.4300,   -1.3020,    0.3600}, % H3  
      {1.9590,   -4.4570,    1.3250}, % H5  
      {3.8460,   -5.7860,    1.6240}} % H6  
    }.

rU01() ->
     {
      {-0.0137,   -0.8012,    0.5983,  % dgf_base_tfo
       -0.2523,    0.5817,    0.7733,
       -0.9675,   -0.1404,   -0.2101,
        0.2031,    8.3874,    0.4228},
      {-0.8313,   -0.4738,   -0.2906,  % p_o3'_275_tfo
        0.0649,    0.4366,   -0.8973,
        0.5521,   -0.7648,   -0.3322,
        1.6833,    6.8060,   -7.0011},
      {0.3445,   -0.7630,    0.5470,  % p_o3'_180_tfo
       -0.4628,   -0.6450,   -0.6082,
        0.8168,   -0.0436,   -0.5753,
       -6.8179,   -3.9778,   -5.9887},
      {0.5855,    0.7931,   -0.1682,  % p_o3'_60_tfo
        0.8103,   -0.5790,    0.0906,
       -0.0255,   -0.1894,   -0.9816,
        6.1203,   -7.1051,    3.1984},
      {2.6760,   -8.4960,    3.2880}, % P   
      {1.4950,   -7.6230,    3.4770}, % O1P 
      {2.9490,   -9.4640,    4.3740}, % O2P 
      {3.9730,   -7.5950,    3.0340}, % O5' 
      {5.2416,   -8.2422,    2.8181}, % C5' 
      {5.2050,   -8.8128,    1.8901}, % H5' 
      {5.5368,   -8.7738,    3.7227}, % H5''
      {6.3232,   -7.2037,    2.6002}, % C4' 
      {7.3048,   -7.6757,    2.5577}, % H4' 
      {6.0635,   -6.5092,    1.3456}, % O4' 
      {6.4697,   -5.1547,    1.4629}, % C1' 
      {7.2354,   -5.0043,    0.7018}, % H1' 
      {7.0856,   -4.9610,    2.8521}, % C2' 
      {6.7777,   -3.9935,    3.2487}, % H2''
      {8.4627,   -5.1992,    2.7423}, % O2' 
      {8.8693,   -4.8638,    1.9399}, % H2' 
      {6.3877,   -6.0809,    3.6362}, % C3' 
      {5.3770,   -5.7562,    3.8834}, % H3' 
      {7.1024,   -6.4754,    4.7985}, % O3' 
      {5.2764,   -4.2883,    1.2538}, % N1  
      {4.3777,   -2.2062,    0.7229}, % N3  
      {5.5069,   -2.9779,    0.9088}, % C2  
      {3.0693,   -2.6246,    0.8500}, % C4  
      {2.9279,   -4.0146,    1.2149}, % C5  
      {4.0101,   -4.7892,    1.4017}, % C6
      u, {
      {6.6267,   -2.5166,    0.7728}, % O2  
      {2.1383,   -1.8396,    0.6581}, % O4  
      {4.5223,   -1.2489,    0.4716}, % H3  
      {2.0151,   -4.4065,    1.3290}, % H5  
      {3.8886,   -5.7486,    1.6535}} % H6  
    }.

rU02() ->
     {
      {0.5141,    0.0246,    0.8574,  % dgf_base_tfo
       -0.5547,   -0.7529,    0.3542,
        0.6542,   -0.6577,   -0.3734,
       -9.1111,   -3.4598,   -3.2939},
      {-0.8313,   -0.4738,   -0.2906,  % p_o3'_275_tfo
        0.0649,    0.4366,   -0.8973,
        0.5521,   -0.7648,   -0.3322,
        1.6833,    6.8060,   -7.0011},
      {0.3445,   -0.7630,    0.5470,  % p_o3'_180_tfo
       -0.4628,   -0.6450,   -0.6082,
        0.8168,   -0.0436,   -0.5753,
       -6.8179,   -3.9778,   -5.9887},
      {0.5855,    0.7931,   -0.1682,  % p_o3'_60_tfo
        0.8103,   -0.5790,    0.0906,
       -0.0255,   -0.1894,   -0.9816,
        6.1203,   -7.1051,    3.1984},
      {2.6760,   -8.4960,    3.2880}, % P   
      {1.4950,   -7.6230,    3.4770}, % O1P 
      {2.9490,   -9.4640,    4.3740}, % O2P 
      {3.9730,   -7.5950,    3.0340}, % O5' 
      {4.3825,   -6.6585,    4.0489}, % C5' 
      {4.6841,   -7.2019,    4.9443}, % H5' 
      {3.6189,   -5.8889,    4.1625}, % H5''
      {5.6255,   -5.9175,    3.5998}, % C4' 
      {5.8732,   -5.1228,    4.3034}, % H4' 
      {6.7337,   -6.8605,    3.5222}, % O4' 
      {7.5932,   -6.4923,    2.4548}, % C1' 
      {8.5661,   -6.2983,    2.9064}, % H1' 
      {7.0527,   -5.2012,    1.8322}, % C2' 
      {7.1627,   -5.2525,    0.7490}, % H2''
      {7.6666,   -4.1249,    2.4880}, % O2' 
      {8.5944,   -4.2543,    2.6981}, % H2' 
      {5.5661,   -5.3029,    2.2009}, % C3' 
      {5.0841,   -6.0018,    1.5172}, % H3' 
      {4.9062,   -4.0452,    2.2042}, % O3' 
      {7.6298,   -7.6136,    1.4752}, % N1  
      {8.6945,   -8.7046,   -0.2857}, % N3  
      {8.6943,   -7.6514,    0.6066}, % C2  
      {7.7426,   -9.6987,   -0.3801}, % C4  
      {6.6642,   -9.5742,    0.5722}, % C5  
      {6.6391,   -8.5592,    1.4526}, % C6
      u, {
      {9.5840,   -6.8186,    0.6136}, % O2  
      {7.8505,  -10.5925,   -1.2223}, % O4  
      {9.4601,   -8.7514,   -0.9277}, % H3  
      {5.9281,  -10.2509,    0.5782}, % H5  
      {5.8831,   -8.4931,    2.1028}} % H6  
    }.

rU03() ->
     {
      {-0.4993,    0.0476,    0.8651,  % dgf_base_tfo
        0.8078,   -0.3353,    0.4847,
        0.3132,    0.9409,    0.1290,
        6.2989,   -5.2303,   -3.8577},
      {-0.8313,   -0.4738,   -0.2906,  % p_o3'_275_tfo
        0.0649,    0.4366,   -0.8973,
        0.5521,   -0.7648,   -0.3322,
        1.6833,    6.8060,   -7.0011},
      {0.3445,   -0.7630,    0.5470,  % p_o3'_180_tfo
       -0.4628,   -0.6450,   -0.6082,
        0.8168,   -0.0436,   -0.5753,
       -6.8179,   -3.9778,   -5.9887},
      {0.5855,    0.7931,   -0.1682,  % p_o3'_60_tfo
        0.8103,   -0.5790,    0.0906,
       -0.0255,   -0.1894,   -0.9816,
        6.1203,   -7.1051,    3.1984},
      {2.6760,   -8.4960,    3.2880}, % P   
      {1.4950,   -7.6230,    3.4770}, % O1P 
      {2.9490,   -9.4640,    4.3740}, % O2P 
      {3.9730,   -7.5950,    3.0340}, % O5' 
      {3.9938,   -6.7042,    1.9023}, % C5' 
      {3.2332,   -5.9343,    2.0319}, % H5' 
      {3.9666,   -7.2863,    0.9812}, % H5''
      {5.3098,   -5.9546,    1.8564}, % C4' 
      {5.3863,   -5.3702,    0.9395}, % H4' 
      {5.3851,   -5.0642,    3.0076}, % O4' 
      {6.7315,   -4.9724,    3.4462}, % C1' 
      {7.0033,   -3.9202,    3.3619}, % H1' 
      {7.5997,   -5.8018,    2.4948}, % C2' 
      {8.3627,   -6.3254,    3.0707}, % H2''
      {8.0410,   -4.9501,    1.4724}, % O2' 
      {8.2781,   -4.0644,    1.7570}, % H2' 
      {6.5701,   -6.8129,    1.9714}, % C3' 
      {6.4186,   -7.5809,    2.7299}, % H3' 
      {6.9357,   -7.3841,    0.7235}, % O3' 
      {6.8024,   -5.4718,    4.8475}, % N1  
      {7.9218,   -5.5700,    6.8877}, % N3  
      {7.8908,   -5.0886,    5.5944}, % C2  
      {6.9789,   -6.3827,    7.4823}, % C4  
      {5.8742,   -6.7319,    6.6202}, % C5  
      {5.8182,   -6.2769,    5.3570}, % C6
      u, {
      {8.7747,   -4.3728,    5.1568}, % O2  
      {7.1154,   -6.7509,    8.6509}, % O4  
      {8.7055,   -5.3037,    7.4491}, % H3  
      {5.1416,   -7.3178,    6.9665}, % H5  
      {5.0441,   -6.5310,    4.7784}} % H6  
    }.

rU04() ->
     {
      {-0.5669,   -0.8012,    0.1918,  % dgf_base_tfo
       -0.8129,    0.5817,    0.0273,
       -0.1334,   -0.1404,   -0.9811,
       -0.3279,    8.3874,    0.3355},
      {-0.8313,   -0.4738,   -0.2906,  % p_o3'_275_tfo
        0.0649,    0.4366,   -0.8973,
        0.5521,   -0.7648,   -0.3322,
        1.6833,    6.8060,   -7.0011},
      {0.3445,   -0.7630,    0.5470,  % p_o3'_180_tfo
       -0.4628,   -0.6450,   -0.6082,
        0.8168,   -0.0436,   -0.5753,
       -6.8179,   -3.9778,   -5.9887},
      {0.5855,    0.7931,   -0.1682,  % p_o3'_60_tfo
        0.8103,   -0.5790,    0.0906,
       -0.0255,   -0.1894,   -0.9816,
        6.1203,   -7.1051,    3.1984},
      {2.6760,   -8.4960,    3.2880}, % P   
      {1.4950,   -7.6230,    3.4770}, % O1P 
      {2.9490,   -9.4640,    4.3740}, % O2P 
      {3.9730,   -7.5950,    3.0340}, % O5' 
      {5.2416,   -8.2422,    2.8181}, % C5' 
      {5.2050,   -8.8128,    1.8901}, % H5' 
      {5.5368,   -8.7738,    3.7227}, % H5''
      {6.3232,   -7.2037,    2.6002}, % C4' 
      {7.3048,   -7.6757,    2.5577}, % H4' 
      {6.0635,   -6.5092,    1.3456}, % O4' 
      {6.4697,   -5.1547,    1.4629}, % C1' 
      {7.2354,   -5.0043,    0.7018}, % H1' 
      {7.0856,   -4.9610,    2.8521}, % C2' 
      {6.7777,   -3.9935,    3.2487}, % H2''
      {8.4627,   -5.1992,    2.7423}, % O2' 
      {8.8693,   -4.8638,    1.9399}, % H2' 
      {6.3877,   -6.0809,    3.6362}, % C3' 
      {5.3770,   -5.7562,    3.8834}, % H3' 
      {7.1024,   -6.4754,    4.7985}, % O3' 
      {5.2764,   -4.2883,    1.2538}, % N1  
      {3.8961,   -3.0896,   -0.1893}, % N3  
      {5.0095,   -3.8907,   -0.0346}, % C2  
      {3.0480,   -2.6632,    0.8116}, % C4  
      {3.4093,   -3.1310,    2.1292}, % C5  
      {4.4878,   -3.9124,    2.3088}, % C6
      u, {
      {5.7005,   -4.2164,   -0.9842}, % O2  
      {2.0800,   -1.9458,    0.5503}, % O4  
      {3.6834,   -2.7882,   -1.1190}, % H3  
      {2.8508,   -2.8721,    2.9172}, % H5  
      {4.7188,   -4.2247,    3.2295}} % H6  
    }.

rU05() ->
     {
      {-0.6298,    0.0246,    0.7763,  % dgf_base_tfo
       -0.5226,   -0.7529,   -0.4001,
        0.5746,   -0.6577,    0.4870,
       -0.0208,   -3.4598,   -9.6882},
      {-0.8313,   -0.4738,   -0.2906,  % p_o3'_275_tfo
        0.0649,    0.4366,   -0.8973,
        0.5521,   -0.7648,   -0.3322,
        1.6833,    6.8060,   -7.0011},
      {0.3445,   -0.7630,    0.5470,  % p_o3'_180_tfo
       -0.4628,   -0.6450,   -0.6082,
        0.8168,   -0.0436,   -0.5753,
       -6.8179,   -3.9778,   -5.9887},
      {0.5855,    0.7931,   -0.1682,  % p_o3'_60_tfo
        0.8103,   -0.5790,    0.0906,
       -0.0255,   -0.1894,   -0.9816,
        6.1203,   -7.1051,    3.1984},
      {2.6760,   -8.4960,    3.2880}, % P   
      {1.4950,   -7.6230,    3.4770}, % O1P 
      {2.9490,   -9.4640,    4.3740}, % O2P 
      {3.9730,   -7.5950,    3.0340}, % O5' 
      {4.3825,   -6.6585,    4.0489}, % C5' 
      {4.6841,   -7.2019,    4.9443}, % H5' 
      {3.6189,   -5.8889,    4.1625}, % H5''
      {5.6255,   -5.9175,    3.5998}, % C4' 
      {5.8732,   -5.1228,    4.3034}, % H4' 
      {6.7337,   -6.8605,    3.5222}, % O4' 
      {7.5932,   -6.4923,    2.4548}, % C1' 
      {8.5661,   -6.2983,    2.9064}, % H1' 
      {7.0527,   -5.2012,    1.8322}, % C2' 
      {7.1627,   -5.2525,    0.7490}, % H2''
      {7.6666,   -4.1249,    2.4880}, % O2' 
      {8.5944,   -4.2543,    2.6981}, % H2' 
      {5.5661,   -5.3029,    2.2009}, % C3' 
      {5.0841,   -6.0018,    1.5172}, % H3' 
      {4.9062,   -4.0452,    2.2042}, % O3' 
      {7.6298,   -7.6136,    1.4752}, % N1  
      {8.5977,   -9.5977,    0.7329}, % N3  
      {8.5951,   -8.5745,    1.6594}, % C2  
      {7.7372,   -9.7371,   -0.3364}, % C4  
      {6.7596,   -8.6801,   -0.4476}, % C5  
      {6.7338,   -7.6721,    0.4408}, % C6
      u, {
      {9.3993,   -8.5377,    2.5743}, % O2  
      {7.8374,  -10.6990,   -1.1008}, % O4  
      {9.2924,  -10.3081,    0.8477}, % H3  
      {6.0932,   -8.6982,   -1.1929}, % H5  
      {6.0481,   -6.9515,    0.3446}} % H6  
    }.

rU06() ->
     {
      {-0.9837,    0.0476,   -0.1733,  % dgf_base_tfo
       -0.1792,   -0.3353,    0.9249,
       -0.0141,    0.9409,    0.3384,
        5.7793,   -5.2303,    4.5997},
      {-0.8313,   -0.4738,   -0.2906,  % p_o3'_275_tfo
        0.0649,    0.4366,   -0.8973,
        0.5521,   -0.7648,   -0.3322,
        1.6833,    6.8060,   -7.0011},
      {0.3445,   -0.7630,    0.5470,  % p_o3'_180_tfo
       -0.4628,   -0.6450,   -0.6082,
        0.8168,   -0.0436,   -0.5753,
       -6.8179,   -3.9778,   -5.9887},
      {0.5855,    0.7931,   -0.1682,  % p_o3'_60_tfo
        0.8103,   -0.5790,    0.0906,
       -0.0255,   -0.1894,   -0.9816,
        6.1203,   -7.1051,    3.1984},
      {2.6760,   -8.4960,    3.2880}, % P   
      {1.4950,   -7.6230,    3.4770}, % O1P 
      {2.9490,   -9.4640,    4.3740}, % O2P 
      {3.9730,   -7.5950,    3.0340}, % O5' 
      {3.9938,   -6.7042,    1.9023}, % C5' 
      {3.2332,   -5.9343,    2.0319}, % H5' 
      {3.9666,   -7.2863,    0.9812}, % H5''
      {5.3098,   -5.9546,    1.8564}, % C4' 
      {5.3863,   -5.3702,    0.9395}, % H4' 
      {5.3851,   -5.0642,    3.0076}, % O4' 
      {6.7315,   -4.9724,    3.4462}, % C1' 
      {7.0033,   -3.9202,    3.3619}, % H1' 
      {7.5997,   -5.8018,    2.4948}, % C2' 
      {8.3627,   -6.3254,    3.0707}, % H2''
      {8.0410,   -4.9501,    1.4724}, % O2' 
      {8.2781,   -4.0644,    1.7570}, % H2' 
      {6.5701,   -6.8129,    1.9714}, % C3' 
      {6.4186,   -7.5809,    2.7299}, % H3' 
      {6.9357,   -7.3841,    0.7235}, % O3' 
      {6.8024,   -5.4718,    4.8475}, % N1  
      {6.6920,   -5.0495,    7.1354}, % N3  
      {6.6201,   -4.5500,    5.8506}, % C2  
      {6.9254,   -6.3614,    7.4926}, % C4  
      {7.1046,   -7.2543,    6.3718}, % C5  
      {7.0391,   -6.7951,    5.1106}, % C6
      u, {
      {6.4083,   -3.3696,    5.6340}, % O2  
      {6.9679,   -6.6901,    8.6800}, % O4  
      {6.5626,   -4.3957,    7.8812}, % H3  
      {7.2781,   -8.2254,    6.5350}, % H5  
      {7.1657,   -7.4312,    4.3503}} % H6  
    }.

rU07() ->
     {
      {-0.9434,    0.3172,    0.0971,  % dgf_base_tfo
        0.2294,    0.4125,    0.8816,
        0.2396,    0.8539,   -0.4619,
        8.3625,  -52.7147,    1.3745},
      {0.2765,   -0.1121,   -0.9545,  % p_o3'_275_tfo
       -0.8297,    0.4733,   -0.2959,
        0.4850,    0.8737,    0.0379,
       -14.7774,  -45.2464,   21.9088},
      {0.1063,   -0.6334,   -0.7665,  % p_o3'_180_tfo
       -0.5932,   -0.6591,    0.4624,
       -0.7980,    0.4055,   -0.4458,
       43.7634,    4.3296,   28.4890},
      {0.7136,   -0.5032,   -0.4873,  % p_o3'_60_tfo
        0.6803,    0.3317,    0.6536,
       -0.1673,   -0.7979,    0.5791,
       -17.1858,   41.4390,  -27.0751},
      {21.3880,   15.0780,   45.5770}, % P   
      {21.9980,   14.5500,   46.8210}, % O1P 
      {21.1450,   14.0270,   44.5420}, % O2P 
      {22.1250,   16.3600,   44.9460}, % O5' 
      {21.5037,   16.8594,   43.7323}, % C5' 
      {20.8147,   17.6663,   43.9823}, % H5' 
      {21.1086,   16.0230,   43.1557}, % H5''
      {22.5654,   17.4874,   42.8616}, % C4' 
      {22.1584,   17.7243,   41.8785}, % H4' 
      {23.0557,   18.6826,   43.4751}, % O4' 
      {24.4788,   18.6151,   43.6455}, % C1' 
      {24.9355,   19.0840,   42.7739}, % H1' 
      {24.7958,   17.1427,   43.6474}, % C2' 
      {24.5652,   16.7400,   44.6336}, % H2''
      {26.1041,   16.8773,   43.2455}, % O2' 
      {26.7516,   17.5328,   43.5149}, % H2' 
      {23.8109,   16.5979,   42.6377}, % C3' 
      {23.5756,   15.5686,   42.9084}, % H3' 
      {24.2890,   16.7447,   41.2729}, % O3' 
      {24.9420,   19.2174,   44.8923}, % N1  
      {25.2655,   20.5636,   44.8883}, % N3  
      {25.1663,   21.2219,   43.8561}, % C2  
      {25.6911,   21.1219,   46.0494}, % C4  
      {25.8051,   20.4068,   47.2048}, % C5  
      {26.2093,   20.9962,   48.2534}, % C6
      u, {
      {25.4692,   19.0221,   47.2053}, % O2  
      {25.0502,   18.4827,   46.0370}, % O4  
      {25.9599,   22.1772,   46.0966}, % H3  
      {25.5545,   18.4409,   48.1234}, % H5  
      {24.7854,   17.4265,   45.9883}} % H6  
    }.

rU08() ->
     {
      {-0.0080,   -0.7928,    0.6094,  % dgf_base_tfo
       -0.7512,    0.4071,    0.5197,
       -0.6601,   -0.4536,   -0.5988,
       44.1482,   30.7036,    2.1088},
      {0.2765,   -0.1121,   -0.9545,  % p_o3'_275_tfo
       -0.8297,    0.4733,   -0.2959,
        0.4850,    0.8737,    0.0379,
       -14.7774,  -45.2464,   21.9088},
      {0.1063,   -0.6334,   -0.7665,  % p_o3'_180_tfo
       -0.5932,   -0.6591,    0.4624,
       -0.7980,    0.4055,   -0.4458,
       43.7634,    4.3296,   28.4890},
      {0.7136,   -0.5032,   -0.4873,  % p_o3'_60_tfo
        0.6803,    0.3317,    0.6536,
       -0.1673,   -0.7979,    0.5791,
       -17.1858,   41.4390,  -27.0751},
      {21.3880,   15.0780,   45.5770}, % P   
      {21.9980,   14.5500,   46.8210}, % O1P 
      {21.1450,   14.0270,   44.5420}, % O2P 
      {22.1250,   16.3600,   44.9460}, % O5' 
      {23.5096,   16.1227,   44.5783}, % C5' 
      {23.5649,   15.8588,   43.5222}, % H5' 
      {23.9621,   15.4341,   45.2919}, % H5''
      {24.2805,   17.4138,   44.7151}, % C4' 
      {25.3492,   17.2309,   44.6030}, % H4' 
      {23.8497,   18.3471,   43.7208}, % O4' 
      {23.4090,   19.5681,   44.3321}, % C1' 
      {24.2595,   20.2496,   44.3524}, % H1' 
      {23.0418,   19.1813,   45.7407}, % C2' 
      {22.0532,   18.7224,   45.7273}, % H2''
      {23.1307,   20.2521,   46.6291}, % O2' 
      {22.8888,   21.1051,   46.2611}, % H2' 
      {24.0799,   18.1326,   46.0700}, % C3' 
      {23.6490,   17.4370,   46.7900}, % H3' 
      {25.3329,   18.7227,   46.5109}, % O3' 
      {22.2515,   20.1624,   43.6698}, % N1  
      {22.4760,   21.0609,   42.6406}, % N3  
      {23.6229,   21.3462,   42.3061}, % C2  
      {21.3986,   21.6081,   42.0236}, % C4  
      {20.1189,   21.3012,   42.3804}, % C5  
      {19.1599,   21.8516,   41.7578}, % C6
      u, {
      {19.8919,   20.3745,   43.4387}, % O2  
      {20.9790,   19.8423,   44.0440}, % O4  
      {21.5235,   22.3222,   41.2097}, % H3  
      {18.8732,   20.1200,   43.7312}, % H5  
      {20.8545,   19.1313,   44.8608}} % H6  
    }.

rU09() ->
     {
      {-0.0317,    0.1374,    0.9900,  % dgf_base_tfo
       -0.3422,   -0.9321,    0.1184,
        0.9391,   -0.3351,    0.0765,
       -32.1929,   25.8198,  -28.5088},
      {0.2765,   -0.1121,   -0.9545,  % p_o3'_275_tfo
       -0.8297,    0.4733,   -0.2959,
        0.4850,    0.8737,    0.0379,
       -14.7774,  -45.2464,   21.9088},
      {0.1063,   -0.6334,   -0.7665,  % p_o3'_180_tfo
       -0.5932,   -0.6591,    0.4624,
       -0.7980,    0.4055,   -0.4458,
       43.7634,    4.3296,   28.4890},
      {0.7136,   -0.5032,   -0.4873,  % p_o3'_60_tfo
        0.6803,    0.3317,    0.6536,
       -0.1673,   -0.7979,    0.5791,
       -17.1858,   41.4390,  -27.0751},
      {21.3880,   15.0780,   45.5770}, % P   
      {21.9980,   14.5500,   46.8210}, % O1P 
      {21.1450,   14.0270,   44.5420}, % O2P 
      {22.1250,   16.3600,   44.9460}, % O5' 
      {21.5037,   16.8594,   43.7323}, % C5' 
      {20.8147,   17.6663,   43.9823}, % H5' 
      {21.1086,   16.0230,   43.1557}, % H5''
      {22.5654,   17.4874,   42.8616}, % C4' 
      {23.0565,   18.3036,   43.3915}, % H4' 
      {23.5375,   16.5054,   42.4925}, % O4' 
      {23.6574,   16.4257,   41.0649}, % C1' 
      {24.4701,   17.0882,   40.7671}, % H1' 
      {22.3525,   16.9643,   40.5396}, % C2' 
      {21.5993,   16.1799,   40.6133}, % H2''
      {22.4693,   17.4849,   39.2515}, % O2' 
      {23.0899,   17.0235,   38.6827}, % H2' 
      {22.0341,   18.0633,   41.5279}, % C3' 
      {20.9509,   18.1709,   41.5846}, % H3' 
      {22.7249,   19.3020,   41.2100}, % O3' 
      {23.8580,   15.0648,   40.5757}, % N1  
      {25.1556,   14.5982,   40.4523}, % N3  
      {26.1047,   15.3210,   40.7448}, % C2  
      {25.3391,   13.3315,   40.0020}, % C4  
      {24.2974,   12.5148,   39.6749}, % C5  
      {24.5450,   11.3410,   39.2610}, % C6
      u, {
      {22.9633,   12.9979,   39.8053}, % O2  
      {22.8009,   14.2648,   40.2524}, % O4  
      {26.3414,   12.9194,   39.8855}, % H3  
      {22.1227,   12.3533,   39.5486}, % H5  
      {21.7989,   14.6788,   40.3650}} % H6  
    }.

rU10() ->
     {
      {-0.9674,    0.1021,   -0.2318,  % dgf_base_tfo
       -0.2514,   -0.2766,    0.9275,
        0.0306,    0.9555,    0.2933,
       27.8571,  -42.1305,  -24.4563},
      {0.2765,   -0.1121,   -0.9545,  % p_o3'_275_tfo
       -0.8297,    0.4733,   -0.2959,
        0.4850,    0.8737,    0.0379,
       -14.7774,  -45.2464,   21.9088},
      {0.1063,   -0.6334,   -0.7665,  % p_o3'_180_tfo
       -0.5932,   -0.6591,    0.4624,
       -0.7980,    0.4055,   -0.4458,
       43.7634,    4.3296,   28.4890},
      {0.7136,   -0.5032,   -0.4873,  % p_o3'_60_tfo
        0.6803,    0.3317,    0.6536,
       -0.1673,   -0.7979,    0.5791,
       -17.1858,   41.4390,  -27.0751},
      {21.3880,   15.0780,   45.5770}, % P   
      {21.9980,   14.5500,   46.8210}, % O1P 
      {21.1450,   14.0270,   44.5420}, % O2P 
      {22.1250,   16.3600,   44.9460}, % O5' 
      {23.5096,   16.1227,   44.5783}, % C5' 
      {23.5649,   15.8588,   43.5222}, % H5' 
      {23.9621,   15.4341,   45.2919}, % H5''
      {24.2805,   17.4138,   44.7151}, % C4' 
      {23.8509,   18.1819,   44.0720}, % H4' 
      {24.2506,   17.8583,   46.0741}, % O4' 
      {25.5830,   18.0320,   46.5775}, % C1' 
      {25.8569,   19.0761,   46.4256}, % H1' 
      {26.4410,   17.1555,   45.7033}, % C2' 
      {26.3459,   16.1253,   46.0462}, % H2''
      {27.7649,   17.5888,   45.6478}, % O2' 
      {28.1004,   17.9719,   46.4616}, % H2' 
      {25.7796,   17.2997,   44.3513}, % C3' 
      {25.9478,   16.3824,   43.7871}, % H3' 
      {26.2154,   18.4984,   43.6541}, % O3' 
      {25.7321,   17.6281,   47.9726}, % N1  
      {25.5136,   18.5779,   48.9560}, % N3  
      {25.2079,   19.7276,   48.6503}, % C2  
      {25.6482,   18.1987,   50.2518}, % C4  
      {25.9847,   16.9266,   50.6092}, % C5  
      {26.0918,   16.6439,   51.8416}, % C6
      u, {
      {26.2067,   15.9515,   49.5943}, % O2  
      {26.0713,   16.3497,   48.3080}, % O4  
      {25.4890,   18.9105,   51.0618}, % H3  
      {26.4742,   14.9310,   49.8682}, % H5  
      {26.2346,   15.6394,   47.4975}} % H6  
    }.

rUs() -> [rU01(),rU02(),rU03(),rU04(),rU05(),rU06(),rU07(),
          rU08(),rU09(),rU10()].

rG_() ->
     {
      {-0.2067,   -0.0264,    0.9780,  % dgf_base_tfo
        0.9770,   -0.0586,    0.2049,
        0.0519,    0.9979,    0.0379,
        1.0331,  -46.8078,  -36.4742},
      {-0.8644,   -0.4956,   -0.0851,  % p_o3'_275_tfo
       -0.0427,    0.2409,   -0.9696,
        0.5010,   -0.8345,   -0.2294,
        4.0167,   54.5377,   12.4779},
      {0.3706,   -0.6167,    0.6945,  % p_o3'_180_tfo
       -0.2867,   -0.7872,   -0.5460,
        0.8834,    0.0032,   -0.4686,
       -52.9020,   18.6313,   -0.6709},
      {0.4155,    0.9025,   -0.1137,  % p_o3'_60_tfo
        0.9040,   -0.4236,   -0.0582,
       -0.1007,   -0.0786,   -0.9918,
       -7.6624,  -25.2080,   49.5181},
      {31.3810,    0.1400,   47.5810}, % P   
      {29.9860,    0.6630,   47.6290}, % O1P 
      {31.7210,   -0.6460,   48.8090}, % O2P 
      {32.4940,    1.2540,   47.2740}, % O5' 
      {32.1610,    2.2370,   46.2560}, % C5' 
      {31.2986,    2.8190,   46.5812}, % H5' 
      {32.0980,    1.7468,   45.2845}, % H5''
      {33.3476,    3.1959,   46.1947}, % C4' 
      {33.2668,    3.8958,   45.3630}, % H4' 
      {33.3799,    3.9183,   47.4216}, % O4' 
      {34.6515,    3.7222,   48.0398}, % C1' 
      {35.2947,    4.5412,   47.7180}, % H1' 
      {35.1756,    2.4228,   47.4827}, % C2' 
      {34.6778,    1.5937,   47.9856}, % H2''
      {36.5631,    2.2672,   47.4798}, % O2' 
      {37.0163,    2.6579,   48.2305}, % H2' 
      {34.6953,    2.5043,   46.0448}, % C3' 
      {34.5444,    1.4917,   45.6706}, % H3' 
      {35.6679,    3.3009,   45.3487}, % O3' 
      {37.4804,    4.0914,   52.2559}, % N1  
      {36.9670,    4.1312,   49.9281}, % N3  
      {37.8045,    4.2519,   50.9550}, % C2  
      {35.7171,    3.8264,   50.3222}, % C4  
      {35.2668,    3.6420,   51.6115}, % C5  
      {36.2037,    3.7829,   52.6706}, % C6
      g, {
      {39.0869,    4.5552,   50.7092}, % N2  
      {33.9075,    3.3338,   51.6102}, % N7  
      {34.6126,    3.6358,   49.5108}, % N9  
      {33.5805,    3.3442,   50.3425}, % C8  
      {35.9958,    3.6512,   53.8724}, % O6  
      {38.2106,    4.2053,   52.9295}, % H1  
      {39.8218,    4.6863,   51.3896}, % H21 
      {39.3420,    4.6857,   49.7407}, % H22 
      {32.5194,    3.1070,   50.2664}} % H8  
    }.

rU_() ->
     {
      {-0.0109,    0.5907,    0.8068,  % dgf_base_tfo
        0.2217,   -0.7853,    0.5780,
        0.9751,    0.1852,   -0.1224,
       -1.4225,  -11.0956,   -2.5217},
      {-0.8313,   -0.4738,   -0.2906,  % p_o3'_275_tfo
        0.0649,    0.4366,   -0.8973,
        0.5521,   -0.7648,   -0.3322,
        1.6833,    6.8060,   -7.0011},
      {0.3445,   -0.7630,    0.5470,  % p_o3'_180_tfo
       -0.4628,   -0.6450,   -0.6082,
        0.8168,   -0.0436,   -0.5753,
       -6.8179,   -3.9778,   -5.9887},
      {0.5855,    0.7931,   -0.1682,  % p_o3'_60_tfo
        0.8103,   -0.5790,    0.0906,
       -0.0255,   -0.1894,   -0.9816,
        6.1203,   -7.1051,    3.1984},
      {2.6760,   -8.4960,    3.2880}, % P   
      {1.4950,   -7.6230,    3.4770}, % O1P 
      {2.9490,   -9.4640,    4.3740}, % O2P 
      {3.9730,   -7.5950,    3.0340}, % O5' 
      {5.2430,   -8.2420,    2.8260}, % C5' 
      {5.1974,   -8.8497,    1.9223}, % H5' 
      {5.5548,   -8.7348,    3.7469}, % H5''
      {6.3140,   -7.2060,    2.5510}, % C4' 
      {5.8744,   -6.2116,    2.4731}, % H4' 
      {7.2798,   -7.2260,    3.6420}, % O4' 
      {8.5733,   -6.9410,    3.1329}, % C1' 
      {8.9047,   -6.0374,    3.6446}, % H1' 
      {8.4429,   -6.6596,    1.6327}, % C2' 
      {9.2880,   -7.1071,    1.1096}, % H2''
      {8.2502,   -5.2799,    1.4754}, % O2' 
      {8.7676,   -4.7284,    2.0667}, % H2' 
      {7.1642,   -7.4416,    1.3021}, % C3' 
      {7.4125,   -8.5002,    1.2260}, % H3' 
      {6.5160,   -6.9772,    0.1267}, % O3' 
      {9.4531,   -8.1107,    3.4087}, % N1  
      {11.5931,   -9.0015,    3.6357}, % N3  
      {10.8101,   -7.8950,    3.3748}, % C2  
      {11.1439,  -10.2744,    3.9206}, % C4  
      {9.7056,  -10.4026,    3.9332}, % C5  
      {8.9192,   -9.3419,    3.6833}, % C6
      u, {
      {11.3013,   -6.8063,    3.1326}, % O2  
      {11.9431,  -11.1876,    4.1375}, % O4  
      {12.5840,   -8.8673,    3.6158}, % H3  
      {9.2891,  -11.2898,    4.1313}, % H5  
      {7.9263,   -9.4537,    3.6977}} % H6  
     }.


% -- PARTIAL INSTANTIATIONS --------------------------------------------------

%var ::= {Int, Tfo, Nuc}

absolute_pos({_I,T,_N}, P) -> tfo_apply(T,P).

atom_pos(Atom, {I,T,N}) ->
    absolute_pos({I,T,N}, p_apply(Atom, N)).

get_var(Id,[{Id,T,N}|_]) -> {Id,T,N};
get_var(Id,[_|Lst]) -> get_var(Id,Lst).

% make_relative_nuc(T,
%      {
%         Dgf_base_tfo,P_o3__275_tfo,P_o3__180_tfo,P_o3__60_tfo,
%         P,O1p,O2p,O5_,C5_,H5_,H5__,C4_,H4_,O4_,C1_,H1_,C2_,H2__,O2_,H2_,
%         C3_,H3_,O3_,N1,N3,C2,C4,C5,C6,
%       a, {N6,N7,N9,C8,H2,H61,H62,H8}
%      }) ->
%     {
%       Dgf_base_tfo, P_o3__275_tfo, P_o3__180_tfo, P_o3__60_tfo,
%       tfo_apply(T, P),
%       tfo_apply(T, O1p),
%       tfo_apply(T, O2p),
%       tfo_apply(T, O5_),
%       tfo_apply(T, C5_),
%       tfo_apply(T, H5_),
%       tfo_apply(T, H5__),
%       tfo_apply(T, C4_),
%       tfo_apply(T, H4_),
%       tfo_apply(T, O4_),
%       tfo_apply(T, C1_),
%       tfo_apply(T, H1_),
%       tfo_apply(T, C2_),
%       tfo_apply(T, H2__),
%       tfo_apply(T, O2_),
%       tfo_apply(T, H2_),
%       tfo_apply(T, C3_),
%       tfo_apply(T, H3_),
%       tfo_apply(T, O3_),
%       tfo_apply(T, N1),
%       tfo_apply(T, N3),
%       tfo_apply(T, C2),
%       tfo_apply(T, C4),
%       tfo_apply(T, C5),
%       tfo_apply(T, C6),
%       a, {
%       tfo_apply(T, N6),
%       tfo_apply(T, N7),
%       tfo_apply(T, N9),
%       tfo_apply(T, C8),
%       tfo_apply(T, H2),
%       tfo_apply(T, H61),
%       tfo_apply(T, H62),
%       tfo_apply(T, H8)}
%      };

% make_relative_nuc(T,
%     {
%         Dgf_base_tfo,P_o3__275_tfo,P_o3__180_tfo,P_o3__60_tfo,
%         P,O1p,O2p,O5_,C5_,H5_,H5__,C4_,H4_,O4_,C1_,H1_,C2_,H2__,O2_,H2_,
%         C3_,H3_,O3_,N1,N3,C2,C4,C5,C6,
%      c, {N4,O2,H41,H42,H5,H6}
%     }) ->
%     {
%       Dgf_base_tfo, P_o3__275_tfo, P_o3__180_tfo, P_o3__60_tfo,
%       tfo_apply(T, P),
%       tfo_apply(T, O1p),
%       tfo_apply(T, O2p),
%       tfo_apply(T, O5_),
%       tfo_apply(T, C5_),
%       tfo_apply(T, H5_),
%       tfo_apply(T, H5__),
%       tfo_apply(T, C4_),
%       tfo_apply(T, H4_),
%       tfo_apply(T, O4_),
%       tfo_apply(T, C1_),
%       tfo_apply(T, H1_),
%       tfo_apply(T, C2_),
%       tfo_apply(T, H2__),
%       tfo_apply(T, O2_),
%       tfo_apply(T, H2_),
%       tfo_apply(T, C3_),
%       tfo_apply(T, H3_),
%       tfo_apply(T, O3_),
%       tfo_apply(T, N1),
%       tfo_apply(T, N3),
%       tfo_apply(T, C2),
%       tfo_apply(T, C4),
%       tfo_apply(T, C5),
%       tfo_apply(T, C6),
%       c, {
%       tfo_apply(T, N4),
%       tfo_apply(T, O2),
%       tfo_apply(T, H41),
%       tfo_apply(T, H42),
%       tfo_apply(T, H5),
%       tfo_apply(T, H6)}
%      };

% make_relative_nuc(T,
%      {
%         Dgf_base_tfo,P_o3__275_tfo,P_o3__180_tfo,P_o3__60_tfo,
%         P,O1p,O2p,O5_,C5_,H5_,H5__,C4_,H4_,O4_,C1_,H1_,C2_,H2__,O2_,H2_,
%         C3_,H3_,O3_,N1,N3,C2,C4,C5,C6,
%       g, {N2,N7,N9,C8,O6,H1,H21,H22,H8}
%       }) ->
%     {
%       Dgf_base_tfo, P_o3__275_tfo, P_o3__180_tfo, P_o3__60_tfo,
%       tfo_apply(T, P),
%       tfo_apply(T, O1p),
%       tfo_apply(T, O2p),
%       tfo_apply(T, O5_),
%       tfo_apply(T, C5_),
%       tfo_apply(T, H5_),
%       tfo_apply(T, H5__),
%       tfo_apply(T, C4_),
%       tfo_apply(T, H4_),
%       tfo_apply(T, O4_),
%       tfo_apply(T, C1_),
%       tfo_apply(T, H1_),
%       tfo_apply(T, C2_),
%       tfo_apply(T, H2__),
%       tfo_apply(T, O2_),
%       tfo_apply(T, H2_),
%       tfo_apply(T, C3_),
%       tfo_apply(T, H3_),
%       tfo_apply(T, O3_),
%       tfo_apply(T, N1),
%       tfo_apply(T, N3),
%       tfo_apply(T, C2),
%       tfo_apply(T, C4),
%       tfo_apply(T, C5),
%       tfo_apply(T, C6),
%       g, {
%       tfo_apply(T, N2),
%       tfo_apply(T, N7),
%       tfo_apply(T, N9),
%       tfo_apply(T, C8),
%       tfo_apply(T, O6),
%       tfo_apply(T, H1),
%       tfo_apply(T, H21),
%       tfo_apply(T, H22),
%       tfo_apply(T, H8)}
%     };

% make_relative_nuc(T,
%      {
%         Dgf_base_tfo,P_o3__275_tfo,P_o3__180_tfo,P_o3__60_tfo,
%         P,O1p,O2p,O5_,C5_,H5_,H5__,C4_,H4_,O4_,C1_,H1_,C2_,H2__,O2_,H2_,
%         C3_,H3_,O3_,N1,N3,C2,C4,C5,C6,
%       u, {O2,O4,H3,H5,H6}
%       }) ->
%     {
%       Dgf_base_tfo, P_o3__275_tfo, P_o3__180_tfo, P_o3__60_tfo,
%       tfo_apply(T, P),
%       tfo_apply(T, O1p),
%       tfo_apply(T, O2p),
%       tfo_apply(T, O5_),
%       tfo_apply(T, C5_),
%       tfo_apply(T, H5_),
%       tfo_apply(T, H5__),
%       tfo_apply(T, C4_),
%       tfo_apply(T, H4_),
%       tfo_apply(T, O4_),
%       tfo_apply(T, C1_),
%       tfo_apply(T, H1_),
%       tfo_apply(T, C2_),
%       tfo_apply(T, H2__),
%       tfo_apply(T, O2_),
%       tfo_apply(T, H2_),
%       tfo_apply(T, C3_),
%       tfo_apply(T, H3_),
%       tfo_apply(T, O3_),
%       tfo_apply(T, N1),
%       tfo_apply(T, N3),
%       tfo_apply(T, C2),
%       tfo_apply(T, C4),
%       tfo_apply(T, C5),
%       tfo_apply(T, C6),
%       u, {
%       tfo_apply(T, O2),
%       tfo_apply(T, O4),
%       tfo_apply(T, H3),
%       tfo_apply(T, H5),
%       tfo_apply(T, H6)}
%      }.

% -- SEARCH ------------------------------------------------------------------

% Sequential backtracking algorithm

search(Partial_inst,[],_) ->
    [Partial_inst];
search(Partial_inst,[{F,Arg0,Arg1}|T],Constraint) ->
    try_assignments(p_apply(F, Arg0,Arg1,Partial_inst),
                    Constraint, 
                    Partial_inst,
                    T);
search(Partial_inst,[{F,Arg0,Arg1,Arg2}|T],Constraint) ->
    try_assignments(p_apply(F, Arg0,Arg1,Arg2,Partial_inst),
                    Constraint, 
                    Partial_inst,
                    T).

try_assignments([],_,_,_) -> [];
try_assignments([V|Vs], Constraint, Partial_inst,T) ->
    case p_apply(Constraint, V, Partial_inst) of
        true -> append(search([V|Partial_inst],T,Constraint),
                       try_assignments(Vs, Constraint, Partial_inst,T));
        _ -> try_assignments(Vs, Constraint, Partial_inst,T)
    end.


% -- DOMAINS -----------------------------------------------------------------

% Primary structure:   strand A CUGCCACGUCUG, strand B CAGACGUGGCAG
%
% Secondary structure: strand A CUGCCACGUCUG
%                               ||||||
%                               GACGGUGCAGAC strand B
%
% Tertiary structure:
%
%    5' end of strand A C1----G12 3' end of strand B
%                     U2-------A11
%                    G3-------C10
%                    C4-----G9
%                     C5---G8
%                        A6
%                      G6-C7
%                     C5----G8
%                    A4-------U9
%                    G3--------C10
%                     A2-------U11
%   5' end of strand B C1----G12 3' end of strand A
%
% "helix", "stacked" and "connected" describe the spatial relationship
% between two consecutive nucleotides. E.g. the nucleotides C1 and U2
% from the strand A.
%
% "wc" (stands for Watson-Crick and is a type of base-pairing),
% and "wc-dumas" describe the spatial relationship between 
% nucleotides from two chains that are growing in opposite directions.
% E.g. the nucleotides C1 from strand A and G12 from strand B.

% Dynamic Domains

% Given,
%   "ref" a nucleotide which is already positioned,
%   "nuc" the nucleotide to be placed,
%   and "tfo" a transformation matrix which expresses the desired
%   relationship between "ref" and "nuc",
% the function "dgf-base" computes the transformation matrix that
% places the nucleotide "nuc" in the given relationship to "ref".

dgf_base(Tfo, V, Nuc) ->
    {_I,_T,N} = V,
    tfo_combine(nuc_dgf_base_tfo(Nuc),
                tfo_combine(Tfo,tfo_inv_ortho(process_type(type(N),V)))).

process_type(a,V) ->
    tfo_align(atom_pos(nuc_C1_, V),atom_pos(rA_N9, V),atom_pos(nuc_C4, V));
process_type(c,V) ->
    tfo_align(atom_pos(nuc_C1_, V),atom_pos(nuc_N1, V),atom_pos(nuc_C2, V));
process_type(g,V) ->
    tfo_align(atom_pos(nuc_C1_, V),atom_pos(rG_N9, V),atom_pos(nuc_C4, V));
process_type(_,V) ->
    tfo_align(atom_pos(nuc_C1_, V),atom_pos(nuc_N1, V),atom_pos(nuc_C2, V)).


% Placement of first nucleotide.

reference(Nuc,I,_) -> 
    [{I,tfo_id(),Nuc}].

% The transformation matrix for wc is from:
%
% Chandrasekaran R. et al (1989) A Re-Examination of the Crystal
% Structure of A-DNA Using Fiber Diffraction Data. J. Biomol.
% Struct. & Dynamics 6(6):1189-1202.

wc_tfo() ->
  {
      -1.0000,   0.0028,  -0.0019,
       0.0028,   0.3468,  -0.9379,
      -0.0019,  -0.9379,  -0.3468,
      -0.0080,   6.0730,   8.7208
   }.

wc(Nuc,I,J,Partial_inst) ->
    [{I,dgf_base(wc_tfo(),get_var(J,Partial_inst),Nuc),Nuc}].

wc_dumas_tfo() ->
  {
      -0.9737,  -0.1834,   0.1352,
      -0.1779,   0.2417,  -0.9539,
       0.1422,  -0.9529,  -0.2679,
       0.4837,   6.2649,   8.0285
   }.
         
wc_dumas(Nuc,I,J,Partial_inst) ->
    [{I,dgf_base(wc_dumas_tfo(),get_var(J,Partial_inst),Nuc),Nuc}].

helix5__tfo() ->
  {
       0.9886,  -0.0961,   0.1156,
       0.1424,   0.8452,  -0.5152,
      -0.0482,   0.5258,   0.8492,
      -3.8737,   0.5480,   3.8024
  }.

helix5_(Nuc,I,J,Partial_inst) ->
    [{I,dgf_base(helix5__tfo(),get_var(J,Partial_inst),Nuc),Nuc}].

helix3__tfo() ->
  {
       0.9886,   0.1424,  -0.0482,
      -0.0961,   0.8452,   0.5258,
       0.1156,  -0.5152,   0.8492,
       3.4426,   2.0474,  -3.7042
   }.

helix3_(Nuc,I,J,Partial_inst) ->
    [{I,dgf_base(helix3__tfo(),get_var(J,Partial_inst),Nuc),Nuc}].

g37_a38_tfo() ->
  {
       0.9991,   0.0164,  -0.0387,
      -0.0375,   0.7616,  -0.6470,
       0.0189,   0.6478,   0.7615,
      -3.3018,   0.9975,   2.5585
   }.

g37_a38(Nuc,I,J,Partial_inst) ->
    {I,dgf_base(g37_a38_tfo(),get_var(J,Partial_inst),Nuc),Nuc}.

stacked5_(Nuc,I,J,Partial_inst) ->
    [g37_a38(Nuc,I,J,Partial_inst) | helix5_(Nuc,I,J,Partial_inst)].

a38_g37_tfo() ->
  {
       0.9991,  -0.0375,   0.0189,
       0.0164,   0.7616,   0.6478, 
      -0.0387,  -0.6470,   0.7615,
       3.3819,   0.7718,  -2.5321
   }.

a38_g37(Nuc,I,J,Partial_inst) ->
    {I,dgf_base(a38_g37_tfo(),get_var(J,Partial_inst),Nuc),Nuc}.
   
stacked3_(Nuc,I,J,Partial_inst) ->
    [a38_g37(Nuc,I,J,Partial_inst) | helix3_(Nuc,I,J,Partial_inst)].

p_o3_(Nucs,I,J,Partial_inst) ->
    generate([],Nucs,I,J,Partial_inst).


generate(Domains,[],_,_,_) -> 
    Domains;
generate(Domains,[N|Ns],I,J,Partial_inst) ->
    Ref = get_var(J,Partial_inst),
    Align = tfo_inv_ortho(tfo_align(atom_pos(nuc_O3_,Ref),
                                    atom_pos(nuc_C3_,Ref),
                                    atom_pos(nuc_C4_,Ref))),
    generate([{I,tfo_combine(nuc_p_o3__60_tfo(N),Align),N},
              {I,tfo_combine(nuc_p_o3__180_tfo(N),Align),N},
              {I,tfo_combine(nuc_p_o3__275_tfo(N),Align),N} | Domains],
             Ns,I,J,Partial_inst).


% -- PROBLEM STATEMENT -------------------------------------------------------

% Define anticodon problem -- Science 253:1255 Figure 3a, 3b and 3c

% anticodon_domains() ->
%     [
%      {reference, rC(), 27},
%      {helix5_, rC(), 28, 27},
%      {helix5_, rA(), 29, 28},
%      {helix5_, rG(), 30, 29},
%      {helix5_, rA(), 31, 30},
%      {wc, rU(), 39, 31},
%      {helix5_, rC(), 40, 39},
%      {helix5_, rU(), 41, 40},
%      {helix5_, rG(), 42, 41},
%      {helix5_, rG(), 43, 42},
%      {stacked3_, rA(), 38, 39},
%      {stacked3_, rG(), 37, 38},
%      {stacked3_, rA(), 36, 37},
%      {stacked3_, rA(), 35, 36},
%      {stacked3_, rG(), 34, 35}, %<-. Distance
%      {p_o3_, rCs(), 32, 31},    %  | Constraint
%      {p_o3_, rUs(), 33, 32}     %<-' 3.0 Angstroms
%     ].

% Anticodon constraint

anticodon_constraint({33,T,N},Partial_inst) ->
    check0(dist(34,{33,T,N},Partial_inst));
anticodon_constraint(_,_) -> true.

check0(Dist) when is_float(Dist), Dist =< 3.0 -> true;
check0(_) -> false.

dist(J,V,Partial_inst) ->
    pt_dist(atom_pos(nuc_P, get_var(J,Partial_inst)), 
                   atom_pos(nuc_O3_,V)).

% anticodon() -> search([], anticodon_domains(), anticodon_constraint).

% Define pseudoknot problem -- Science 253:1255 Figure 4a and 4b
pseudoknot_domains() ->
    [
     {reference, rA(), 23},
     {wc_dumas, rU(), 8, 23},
     {helix3_, rG(), 22, 23},
     {wc_dumas, rC(), 9, 22},
     {helix3_, rG(), 21, 22},
     {wc_dumas, rC(), 10, 21},
     {helix3_, rC(), 20, 21},
     {wc_dumas, rG(), 11, 20},
     {helix3_, rU_(), 19, 20}, %<-.
     {wc_dumas, rA(), 12, 19}, %  | Distance
%                              %  | Constraint
% Helix 1                      %  | 4.0 Angstroms
     {helix3_, rC(), 3, 19},   %  |
     {wc_dumas, rG(), 13, 3},  %  |
     {helix3_, rC(), 2, 3},    %  |
     {wc_dumas, rG(), 14, 2},  %  |
     {helix3_, rC(), 1, 2},    %  |
     {wc_dumas, rG_(), 15, 1}, %  |
%                              %  |
% L2 LOOP                      %  |
     {p_o3_, rUs(), 16, 15},   %  |
     {p_o3_, rCs(), 17, 16},   %  |
     {p_o3_, rAs(), 18, 17},   %<-'
%
% L1 LOOP
     {helix3_, rU(), 7, 8},   %<-.
     {p_o3_, rCs(), 4, 3},    %  | Constraint
     {stacked5_, rU(), 5, 4}, %  | 4.5 Angstroms
     {stacked5_, rC(), 6, 5}  %<-'
    ].
  
% Pseudoknot constraint

pseudoknot_constraint({18,T,N}, Partial_inst) ->
    check1(dist(19, {18,T,N}, Partial_inst));
pseudoknot_constraint({6,T,N}, Partial_inst) ->
    check2(dist(7, {6,T,N}, Partial_inst));
pseudoknot_constraint(_,_) -> true.

check1(Dist) when is_float(Dist), Dist =< 4.0 -> true;
check1(_) -> false.

check2(Dist) when is_float(Dist), Dist =< 4.5 -> true;
check2(_) -> false.

pseudoknot() -> search([], pseudoknot_domains(), pseudoknot_constraint).

% -- TESTING -----------------------------------------------------------------

list_of_atoms(N) ->
    append(list_of_common_atoms(N),list_of_specific_atoms(N)).

list_of_common_atoms
 ({
        _,_,_,_,
        P,O1p,O2p,O5_,C5_,H5_,H5__,C4_,H4_,O4_,C1_,H1_,C2_,H2__,O2_,H2_,
        C3_,H3_,O3_,N1,N3,C2,C4,C5,C6,
        _,_
  }) ->
    [P,O1p,O2p,O5_,C5_,H5_,H5__,C4_,H4_,O4_,C1_,H1_,C2_,H2__,O2_,H2_,
        C3_,H3_,O3_,N1,N3,C2,C4,C5,C6].

list_of_specific_atoms({_,_,_,_,_,_,_,_,_,_,
                        _,_,_,_,_,_,_,_,_,_,
                        _,_,_,_,_,_,_,_,_,a,
                        {N6,N7,N9,C8,H2,H61,H62,H8}}) ->
    [N6,N7,N9,C8,H2,H61,H62,H8];
list_of_specific_atoms({_,_,_,_,_,_,_,_,_,_,
                        _,_,_,_,_,_,_,_,_,_,
                        _,_,_,_,_,_,_,_,_,c,
                        {N4,O2,H41,H42,H5,H6}}) ->
    [N4,O2,H41,H42,H5,H6];
list_of_specific_atoms({_,_,_,_,_,_,_,_,_,_,
                        _,_,_,_,_,_,_,_,_,_,
                        _,_,_,_,_,_,_,_,_,g,
                        {N2,N7,N9,C8,O6,H1,H21,H22,H8}}) ->
    [N2,N7,N9,C8,O6,H1,H21,H22,H8];
list_of_specific_atoms({_,_,_,_,_,_,_,_,_,_,
                        _,_,_,_,_,_,_,_,_,_,
                        _,_,_,_,_,_,_,_,_,u,
                        {O2,O4,H3,H5,H6}}) ->
    [O2,O4,H3,H5,H6].

var_most_distant_atom(V) ->
    {_,_,N} = V,
    maximum(map(distance,V,list_of_atoms(N))).

distance(V,P) ->
    {X,Y,Z} = absolute_pos(V,P),
    distance(X,Y,Z).

distance(X,Y,Z) when is_float(X), is_float(Y), is_float(Z) ->
    math:sqrt(X * X + Y * Y + Z * Z).

sol_most_distant_atom(S) ->
    maximum(map(var_most_distant_atom,S)).

most_distant_atom(Sols) ->
    maximum(map(sol_most_distant_atom, Sols)).

maximum([H|T]) ->
    max1(T,H).

max1([H|T],M) when is_float(H), is_float(M), H > M ->
    max1(T,H);
max1([_|T],M) ->
    max1(T,M);
max1([],M) -> M.

map(_Func,[]) -> [];
map(Func,[H|T]) -> 
    [p_apply(Func,H) | map(Func, T)].

map(_Func,_Arg,[]) -> [];
map(Func,Arg,[H|T]) -> 
    [p_apply(Func,Arg,H) | map(Func,Arg,T)].

% p_apply implements higher order functions
p_apply(sol_most_distant_atom, S) -> sol_most_distant_atom(S);
p_apply(var_most_distant_atom, V) -> var_most_distant_atom(V);
p_apply(nuc_C1_, X) -> nuc_C1_(X);
p_apply(nuc_C2, X) -> nuc_C2(X);
p_apply(nuc_C3_, X) -> nuc_C3_(X);
p_apply(nuc_C4, X) -> nuc_C4(X);
p_apply(nuc_C4_, X) -> nuc_C4_(X);
p_apply(nuc_N1, X) -> nuc_N1(X);
p_apply(nuc_O3_, X) -> nuc_O3_(X);
p_apply(nuc_P, X) -> nuc_P(X);
p_apply(nuc_dgf_base_tfo, X) -> nuc_dgf_base_tfo(X);
p_apply(nuc_p_o3__180_tfo, X) -> nuc_p_o3__180_tfo(X);
p_apply(nuc_p_o3__275_tfo, X) -> nuc_p_o3__275_tfo(X);
p_apply(nuc_p_o3__60_tfo, X) -> nuc_p_o3__60_tfo(X);
p_apply(rA_N9, X) -> rA_N9(X);
p_apply(rG_N9, X) -> rG_N9(X).

p_apply(anticodon_constraint, V, P) -> anticodon_constraint(V, P);
p_apply(pseudoknot_constraint, V, P) -> pseudoknot_constraint(V, P);
p_apply(distance, V, P) -> distance(V, P).

p_apply(reference, A1, A2, A3) -> reference(A1, A2, A3).

p_apply(helix5_, A1, A2, A3, A4) -> helix5_(A1, A2, A3, A4);
p_apply(wc, A1, A2, A3, A4) -> wc(A1, A2, A3, A4);
p_apply(stacked3_, A1, A2, A3, A4) -> stacked3_(A1, A2, A3, A4);
p_apply(p_o3_, A1, A2, A3, A4) -> p_o3_(A1, A2, A3, A4);
p_apply(wc_dumas, A1, A2, A3, A4) -> wc_dumas(A1, A2, A3, A4);
p_apply(helix3_, A1, A2, A3, A4) -> helix3_(A1, A2, A3, A4);
p_apply(stacked5_, A1, A2, A3, A4) -> stacked5_(A1, A2, A3, A4).

loop(0,R) -> R;
loop(N,_) -> loop(N-1,most_distant_atom(pseudoknot())).