Skip to content
Snippets Groups Projects
sketch.py 1.78 KiB
Newer Older
rlapar's avatar
rlapar committed
from BCBio import GFF
from Bio.Seq import Seq
from Bio.SeqRecord import SeqRecord
from Bio.SeqFeature import SeqFeature, FeatureLocation

rlapar's avatar
rlapar committed
from gt.core import *
from gt.extended import *
from gt.annotationsketch import *
from gt.annotationsketch.custom_track import CustomTrack
from gt.core.gtrange import Range
import sys

style = {}

rlapar's avatar
rlapar committed
def geneToGFF(gene):
    #insert gene
    rec = SeqRecord(gene['Sequence'], gene['ID'])
    qualifiers = {'ID': gene['ID']}
    features = []
    features.append(SeqFeature(FeatureLocation(0, len(gene['Sequence'])), type='gene', strand=1, qualifiers=qualifiers))
    features[0].sub_features = []

    #insert LTR finder results
    for transposon in gene['LTR_finder']:
        features[0].sub_features.append(SeqFeature(FeatureLocation(transposon['Location'][0], transposon['Location'][1]), 
            type='LTR_finder_TE', strand=1))        
rlapar's avatar
rlapar committed

rlapar's avatar
rlapar committed
    rec.features = features
    #possible other formats as well
    with open('data/' + gene['ID'] + '.gff', 'w+') as out_handle:
        gff = GFF.write([rec], out_handle)
rlapar's avatar
rlapar committed

rlapar's avatar
rlapar committed
def visualize(gene):
    geneToGFF(gene)

    #Style
rlapar's avatar
rlapar committed
    style = Style()
rlapar's avatar
rlapar committed
    style.load_file('gt.style')

    #Feature index
    feature_index = FeatureIndexMemory()
rlapar's avatar
rlapar committed

rlapar's avatar
rlapar committed
    #add gff file
    feature_index.add_gff3file('data/' + gene['ID'] + '.gff')
rlapar's avatar
rlapar committed

rlapar's avatar
rlapar committed
    #create diagram for first sequence ID
    seqid = feature_index.get_first_seqid()
    range = feature_index.get_range_for_seqid(seqid)
    diagram = Diagram.from_index(feature_index, seqid, range, style)

    #create layout
rlapar's avatar
rlapar committed
    layout = Layout(diagram, 600, style)
    height = layout.get_height()
rlapar's avatar
rlapar committed

    #create canvas
rlapar's avatar
rlapar committed
    canvas = CanvasCairoFile(style, 600, height)
rlapar's avatar
rlapar committed

    #sketch layout on canvas
rlapar's avatar
rlapar committed
    layout.sketch(canvas)

rlapar's avatar
rlapar committed
    #write to file
    pngfile = 'data/' + gene['ID'] + '.png'
rlapar's avatar
rlapar committed
    canvas.to_file(pngfile)