package GeneticCode::Tables;
BEGIN{ push(@INC, $ENV{LOCAL_PERL_MODULES}); }
use Carp;
use warnings;
use strict;

my $init01 = {
    TTG=>"M", 
    CTG=>"M", 
    ATG=>"M"
};
my $table01 = {
    TTT=>"F", TCT=>"S", TAT=>"Y", TGT=>"C",
    TTC=>"F", TCC=>"S", TAC=>"Y", TGC=>"C",
    TTA=>"L", TCA=>"S", TAA=>"*", TGA=>"*", 
    TTG=>"L", TCG=>"S", TAG=>"*", TGG=>"W",
    TTN=>"X", TCN=>"S", TAN=>"X", TGN=>"X", 

    CTT=>"L", CCT=>"P", CAT=>"H", CGT=>"R",
    CTC=>"L", CCC=>"P", CAC=>"H", CGC=>"R", 
    CTA=>"L", CCA=>"P", CAA=>"Q", CGA=>"R", 
    CTG=>"L", CCG=>"P", CAG=>"Q", CGG=>"R", 
    CTN=>"L", CCN=>"P", CAN=>"X", CGN=>"R", 

    ATT=>"I", ACT=>"T", AAT=>"N", AGT=>"S", 
    ATC=>"I", ACC=>"T", AAC=>"N", AGC=>"S", 
    ATA=>"I", ACA=>"T", AAA=>"K", AGA=>"R", 
    ATG=>"M", ACG=>"T", AAG=>"K", AGG=>"R", 
    ATN=>"X", ACN=>"T", AAN=>"X", AGN=>"X", 
    
    GTT=>"V", GCT=>"A", GAT=>"D", GGT=>"G", 
    GTC=>"V", GCC=>"A", GAC=>"D", GGC=>"G", 
    GTA=>"V", GCA=>"A", GAA=>"E", GGA=>"G", 
    GTG=>"V", GCG=>"A", GAG=>"E", GGG=>"G", 
    GTN=>"V", GCN=>"A", GAN=>"X", GGN=>"G"
};

my $init11 = {
    TTG=>"M", 
    CTG=>"M", 
    ATT=>"M", 
    ATC=>"M", 
    ATA=>"M", 
    ATG=>"M", 
    GTG=>"M"
};
my $table11 = {
    TTT=>"F", TCT=>"S", TAT=>"Y", TGT=>"C", 
    TTC=>"F", TCC=>"S", TAC=>"Y", TGC=>"C", 
    TTA=>"L", TCA=>"S", TAA=>"*", TGA=>"*", 
    TTG=>"L", TCG=>"S", TAG=>"*", TGG=>"W", 
    TTN=>"X", TCN=>"S", TAN=>"X", TGN=>"X", 
    TNT=>"X", TNC=>"X", TNA=>"X", TNG=>"X", 
    NTT=>"X", NTC=>"X", NTA=>"X", NTG=>"X", 
    
    CTT=>"L", CCT=>"P", CAT=>"H", CGT=>"R", 
    CTC=>"L", CCC=>"P", CAC=>"H", CGC=>"R", 
    CTA=>"L", CCA=>"P", CAA=>"Q", CGA=>"R", 
    CTG=>"L", CCG=>"P", CAG=>"Q", CGG=>"R", 
    CTN=>"L", CCN=>"P", CAN=>"X", CGN=>"R", 
    CNT=>"X", CNC=>"X", CNA=>"X", CNG=>"X", 
    NCT=>"X", NCC=>"X", NCA=>"X", NCG=>"X", 

    ATT=>"I", ACT=>"T", AAT=>"N", AGT=>"S", 
    ATC=>"I", ACC=>"T", AAC=>"N", AGC=>"S", 
    ATA=>"I", ACA=>"T", AAA=>"K", AGA=>"R", 
    ATG=>"M", ACG=>"T", AAG=>"K", AGG=>"R", 
    ATN=>"X", ACN=>"T", AAN=>"X", AGN=>"X", 
    ANT=>"X", ANC=>"X", ANA=>"X", ANG=>"X", 
    NAT=>"X", NAC=>"X", NAA=>"X", NAG=>"X", 
    
    GTT=>"V", GCT=>"A", GAT=>"D", GGT=>"G", 
    GTC=>"V", GCC=>"A", GAC=>"D", GGC=>"G", 
    GTA=>"V", GCA=>"A", GAA=>"E", GGA=>"G", 
    GTG=>"V", GCG=>"A", GAG=>"E", GGG=>"G", 
    GTN=>"V", GCN=>"A", GAN=>"X", GGN=>"G", 
    GNT=>"X", GNC=>"X", GNA=>"X", GNG=>"X", 
    NGT=>"X", NGC=>"X", NGA=>"X", NGG=>"X", 
    
    NNT=>"X", NNC=>"X", NNA=>"X", NNG=>"X", 
    NTN=>"X", NCN=>"X", NAN=>"X", NGN=>"X", 
    TNN=>"X", CNN=>"X", ANN=>"X", GNN=>"X", 
    NNN=>"X"
};

###################################################
sub getTable {
    my $id = shift or croak "Genetic code ID is not specified.";
    return $table01 if $id == 1;
    return $table11 if $id == 11;
}

###################################################
sub getInitCodons {
    my $id = shift or croak "Genetic code ID is not specified.";
    return $init01 if $id == 1;
    return $init11 if $id == 11;
}

1;
