Samtools tview as a library to display the BAM
I've forked samtools and modified the code of tview to use it as a library to display the alignments. The original code is an inreractive interface using the ncurses library. I've modified the original code and changed the structure of the C 'struct tview' with a few callbacks to make it more object-oriented:
(...) typedef struct AbstractTview { int mrow, mcol; (...) khash_t(kh_rg) *rg_hash; /* callbacks */ void (*my_destroy)(struct AbstractTview* ); void (*my_mvprintw)(struct AbstractTview* ,int,int,const char*,...); void (*my_mvaddch)(struct AbstractTview*,int,int,int); void (*my_attron)(struct AbstractTview*,int); void (*my_attroff)(struct AbstractTview*,int); void (*my_clear)(struct AbstractTview*); int (*my_colorpair)(struct AbstractTview*,int); int (*my_drawaln)(struct AbstractTview*,int,int); int (*my_loop)(struct AbstractTview*); int (*my_underline)(struct AbstractTview*); } tview_t;With those callbacks, there is a strong separation between the 'view' and the 'model'. Tview can now be used as a library and it's now easy to create any kind of view you need by extending the 'struct tview_t'. I've created two new interfaces: one for HTML:
samtools tview -d H examples/sorted.bam -p seq1:20
seq1:20
21 31 41 51 61 71 81 NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN ATGTGTGGTTTAACTCGTCCATGGCCCAGCATTAGGGAGCTGTGGACCCTGCAGCCTGGCTGTGGGGGCCGCAGTGGSTG ATGTGTGGTTTAACTCGTACATGGCCCAGCATTAGGGAGCTGTGGACCCCG GCCTGGCTGTGGGGGCACCAGCCGCTG ATGTGTGGTTTAACTCGTACATGGCCCAGCATTAGGGAGCTGTGGACCCCG GCCTGGCTGTGGGGGCACCAGCCGCTG ATGTGTGGTTTAACTCGTACATGGCCCAGCATTAGGGAGCTGTGGACCCCG GCCTGGCTGTGGGGGCACCAGCCGCTG ATGTGTGGTTTAACTCGTCCATGGCCCAGCATTAGGGCGCTGTGGACCCTGC CTGTGGGGGCCGCAGTGGCTG ATGTGTGGTTTAACTCGT GCCCAGCATTAGGGAGCTGTGGACCCTGCAGCCTG CTGTGGGGGCCGCAGTGGCTG ATGTGTGGTTTAACTCGT GCCCAGCATTAGGGAGCTGTGGACCCTGCAGCCTG CTGTGGGGGCCGCAGTGGGTG ATGTGTGGTTTAACTCGTCC GCCCAGCATTAGGGAGCTGTGGACCCTGCAGCCTG CTGTGGGGGCCGCAGTGGCTG ATGTGTGGTTTAACTCGTCC CATTAGGGAGCTGTGGACCCTGCAGCCTGGCTGTTG GGCTG ATGTGTGGTTTAACTCGTCC CATTAGGGAGCTGTGGACCCTGCAGCCTGGCTGTTG GGCTG TTTTTTGTTTTAACTCTTCTCT CATTAGGGAGCTGTGGACCCTGCAGCCTGGCTGTTG GGCTG TTTTTTGTTTTAACTCTTCTCT ATTAGGGAGCTGTGGACCCTGCAGCCTGGCTGGGG TTTTTTGTTTTAACTCTTCTCT ATTAGGGAGCTGTGGACCCTGCAGCCTGGCTGGGG ATGTGTGGTTTAACTCGTCCATGG ATTAGGGAGCTGTGGACCCTGCAGCCTGGCTGGGG ATGTGTGGTTTAACTCGTCCATGG TTAGGGAGCTGTGGACCCTGCAGCCTGGCTGTGGG ATGTGTGGTTTAACTCGTCCATGG TTAGGGAGCTGTGGACCCTGCAGCCTGGCTGTGGG ATGTGTGGTTTAACTCGTCCCTGGCCCA TTAGGGAGCTGTGGACCCTGCAGCCTGGCTGTGGG ATGTGTGGTTTAACTCGTCCATGGCCCAG TAGGGAGCTGTGGACCCTGCAGCCTGGCTGTGGGGG ATGTGTGGTTTAACTCGTCCCTGGCCCA TAGGGAGCTGTGGACCCTGCAGCCTGGCTGTGGGGG ATGTGTGGTTTAACTCGTCCATGGCCCAG TAGGGAGCTGTGGACCCTGCAGCCTGGCTGTGGGGG ATGTGTGGTTTAACTCGTCCCTGGCCCA CTGTGGACCCTGCAGCCTGGCTGTGGGGGGCGCCG ATGTGTGGTTTAACTCGTCCATGGCCCAG CTGTGGACCCTGCAGCCTGGCTGTGGGGGGCGCCG ATGTGTGGTTTAACTCGTCCATTGCCCAGC CTGTGGACCCTGCAGCCTGGCTGTGGGGGGCGCCG ATGTGTGGTTTAACTCGTCCATTGCCCAGC TGTGGACCCTGCAGCCTGGCTGTGGGGGCCGCAGTG ATGTGTGGTTTAACTCGTCCATTGCCCAGC TGTGGACCCTGCAGCCTGGCTGGGGGGGGCGCAGT atgtgtggtttaactcgtccatggcccagcatt TGTGGACCCTGCAGCCTGGCTGTGGGGGCCGCAGTG atgtgtggtttaactcgtccatggcccagcatt TGTGGACCCTGCAGCCTGGCTGGGGGGGGCGCAGT atgtgtggtttaactcgtccatggcccagcatt TGTGGACCCTGCAGCCTGGCTGTGGGGGCCGCAGTG GTGTGGTTTAACTCGTCCATGGCCCAGCATTTGGG TGTGGACCCTGCAGCCTGGCTGGGGGGGGCGCAGT GTGTGGTTTAACTCGTCCATGGCCCAGCATTAGGG GTGGACCCTGCAGCCTGGCTGGGGGGGGCACGGGG GTGTGGTTTAACTCGTCCATGGCCCAGCATTTGGG GTGGACCCTGCAGCCTGGCTGTGGGGGCCGCAGTG GTGTGGTTTAACTCGTCCATGGCCCAGCATTAGGG GTGGACCCTGCAGCCTGGCTGGGGGGGGCACGGGG GTGTGGTTTAACTCGTCCATGGCCCAGCATTTGGG GTGGACCCTGCAGCCTGGCTGTGGGGGCCGCAGTG GTGTGGTTTAACTCGTCCATGGCCCAGCATTAGGG GTGGACCCTGCAGCCTGGCTGGGGGGGGCACGGGG GTGGTTTAACTCGTCCATGGCCCAGCATTAGGGAGC GTGGACCCTGCAGCCTGGCTGTGGGGGCCGCAGTG GTGGTTTAACTCGTCCATGGCCCAGCATTAGGGAGC GGACCCTGCAGCCTGGCTGTGGGGGCCGCTGTGGG GTGGTTTAACTCGTCCATGGCCCAGCATTAGGGAGC GGACCCTGCAGCCTGGCTGTGGGGGCCGCTGTGGG TTTAACTCGTCCATGGCCCAGCATTAGGGATCTGT CCTGCAGCCTGGCTGTGGGGGCCGCAGCGGGTG TTTAACTCGTCCATGGCCCAGCATTAGGGATCTGT CCTGCAGCCTGGCTGTGGGGGCCGCAGCGGGTG TTTAACTCGTCCATGGCCCAGCATTAGGGATCTGT CCTGCAGCCTGGCTGTGGGGGCCGCAGCGGGTG TTAACTCGTCCATGGCCCAGCATTAGGGAGCTGTG GCAGCCTGGCTGTGGGGGCCGCAGTGGCTG TTAACTCGTCCATGGCCCAGCATTAGGGAGCTGTG GCAGCCTGGCTGTGGGGGCCGCAGTGGCTG TTAACTCGTCCATGGCCCAGCATTAGGGAGCTGTG GCAGCCTGGCTGTGGGGGCCGCAGTGGCTG AACTCGTCCATGGCCCAGCATTAGGGAGCTGTGGA CTGTGGGGGCCGCAGTGGGTG AACTCGTCCATGGCCCAGCATTAGGGAGCTGTGGA CTGTGGGGGCCGCAGTGGCTG AACTCGTCCATGGCCCAGCATTAGGGAGCTGTGGA CTGTGGGGGCCGCAGTGGCTG TCCATGGCCCAGCATTAGGGCGCTGTGGACCCTGC CTGTGGGGGCCGCAGTGGGTG TCCATGGCCCAGCATTAGGGCGCTGTGGACCCTGC CTGTGGGGGCCGCAGTGGCTG GGACCCTGCAGCCTGGCTGTGGGGGCCGCTGTGGG TGTGGGGGCCGCAGTGGCTG TGTGGGGGCCGCAGTGGCTG TGTGGGGGCCGCAGTGGCTG
And another one for TEXT (with colors on a terminal):
samtools tview -d t examples/sorted.bam -p seq1:23
31 41 51 61 71 81 91
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
TGTGGTTTAACTCGTCCATGGCCCAGCATTAGGGAGCTGTGGACCCTGCAGCCTGGCTGTGGGGGCCGCAGTGGSTGAGG
TGTGGTTTAACTCGTACATGGCCCAGCATTAGGGAGCTGTGGACCCCG GCCTGGCTGTGGGGGCACCAGCCGCTGCGG
TGTGGTTTAACTCGTACATGGCCCAGCATTAGGGAGCTGTGGACCCCG GCCTGGCTGTGGGGGCACCAGCCGCTGCGG
TGTGGTTTAACTCGTACATGGCCCAGCATTAGGGAGCTGTGGACCCCG GCCTGGCTGTGGGGGCACCAGCCGCTGCGG
TGTGGTTTAACTCGTCCATGGCCCAGCATTAGGGCGCTGTGGACCCTGC CTGTGGGGGCCGCAGTGGCTGAGG
TGTGGTTTAACTCGT GCCCAGCATTAGGGAGCTGTGGACCCTGCAGCCTG CTGTGGGGGCCGCAGTGGCTGAGG
TGTGGTTTAACTCGT GCCCAGCATTAGGGAGCTGTGGACCCTGCAGCCTG CTGTGGGGGCCGCAGTGGGTGAGG
TGTGGTTTAACTCGTCC GCCCAGCATTAGGGAGCTGTGGACCCTGCAGCCTG CTGTGGGGGCCGCAGTGGCTGAGG
TGTGGTTTAACTCGTCC CATTAGGGAGCTGTGGACCCTGCAGCCTGGCTGTTG GGCTGAGG
TGTGGTTTAACTCGTCC CATTAGGGAGCTGTGGACCCTGCAGCCTGGCTGTTG GGCTGAGG
TTTGTTTTAACTCTTCTCT CATTAGGGAGCTGTGGACCCTGCAGCCTGGCTGTTG GGCTGAGG
TTTGTTTTAACTCTTCTCT ATTAGGGAGCTGTGGACCCTGCAGCCTGGCTGGGG AGG
TTTGTTTTAACTCTTCTCT ATTAGGGAGCTGTGGACCCTGCAGCCTGGCTGGGG AGG
TGTGGTTTAACTCGTCCATGG ATTAGGGAGCTGTGGACCCTGCAGCCTGGCTGGGG AGG
The code is available on github:
That's it,
Pierre
3 comments:
Awesome work! I'm trying to use tview to visualize alignments in a webpage. But I am having trouble as I am using BEDtoBam converted files, which 1) does not show the 2nd line of the viewer and 2) generates the alignments with the "." annotation.
Is there a way to go around this and how do i default the "." toggle on/off for exporting into HTML format?
@alvin: my code has been merged into 'samtools.0.1.19 tview'
Hi Pierre,
I am aware of that and I am using version 0.1.19. I am very glad that they decided to merge your code as it is very useful. Hence I would like to know more about using it but as I am still a beginner in programming, pardon my questions.
I am wondering how would the options such as toggle work in exporting it in html and how I could tweak it.
Thank you
Post a Comment