import mathutils
import math

class RotTable:
    """Represents the rotation table"""

    __ORIGINAL_ROT_TABLE = {\
        "AA": [35.62 , 7.2 , -154 ,      0.06 ,  0.6   , 0],\
        "AC": [34.4  , 1.1 ,  143 ,      1.3  ,  5     , 0],\
        "AG": [27.7  , 8.4 ,    2 ,      1.5  ,  3     , 0],\
        "AT": [31.5  , 2.6 ,    0 ,      1.1  ,  2     , 0],\
        "CA": [34.5  , 3.5 ,  -64 ,      0.9  , 34     , 0],\
        "CC": [33.67 , 2.1 ,  -57 ,      0.07 ,  2.1   , 0],\
        "CG": [29.8  , 6.7 ,    0 ,      1.1  ,  1.5   , 0],\
        "CT": [27.7  , 8.4 ,   -2 ,      1.5  ,  3     , 0],\
        "GA": [36.9  , 5.3 ,  120 ,      0.9  ,  6     , 0],\
        "GC": [40    , 5   ,  180 ,      1.2  ,  1.275 , 0],\
        "GG": [33.67 , 2.1 ,   57 ,      0.07 ,  2.1   , 0],\
        "GT": [34.4  , 1.1 , -143 ,      1.3  ,  5     , 0],\
        "TA": [36    , 0.9 ,    0 ,      1.1  ,  2     , 0],\
        "TC": [36.9  , 5.3 , -120 ,      0.9  ,  6     , 0],\
        "TG": [34.5  , 3.5 ,   64 ,      0.9  , 34     , 0],\
        "TT": [35.62 , 7.2 ,  154 ,      0.06 ,  0.6   , 0]\
        }

    def __init__(self):
        self.__Rot_Table = {}
        for dinucleotide in RotTable.__ORIGINAL_ROT_TABLE:
            self.__Rot_Table[dinucleotide] = RotTable.__ORIGINAL_ROT_TABLE[dinucleotide][:3]



    ###################
    # WRITING METHODS #
    ###################


    ###################
    # READING METHODS #
    ###################

    def getTwist(self, dinucleotide):
        return RotTable.__ORIGINAL_ROT_TABLE[dinucleotide][0]

    def getWedge(self, dinucleotide):
        return RotTable.__ORIGINAL_ROT_TABLE[dinucleotide][1]

    def getDirection(self, dinucleotide):
        return RotTable.__ORIGINAL_ROT_TABLE[dinucleotide][2]

    ###################