diff --git a/mutalyzer/__init__.py b/mutalyzer/__init__.py index 08757422e50400b160a48f978ed518b6807d9d4e..6eed649405013f50e9f3b5ca85b45bdcb89c69f1 100644 --- a/mutalyzer/__init__.py +++ b/mutalyzer/__init__.py @@ -22,7 +22,7 @@ import os RELEASE = False -__version_info__ = ('2', '0', 'beta-12', 'dev') +__version_info__ = ('2', '0', 'beta-12', 'browser-link-branch', 'dev') __date__ = '30 Sep 2011' diff --git a/mutalyzer/mapping.py b/mutalyzer/mapping.py index afc5b837d5de2c95dbecdf76cda037da772549ac..ac02d555e1ef689a258ed8da5eb13d1a710dc7db 100644 --- a/mutalyzer/mapping.py +++ b/mutalyzer/mapping.py @@ -446,6 +446,34 @@ class Converter(object) : return "%s:%s" % (chromAcc, var_in_g) #c2chrom + def positions_to_chromosomal_region(self, reference, version, positions): + """ + Convert c. positions to chromosomal region. + """ + #if not parseTree.RefSeqAcc: #In case of LRG for example + # self.__output.addMessage(__file__, 4, "EONLYGB", + # "Currently we only support GenBank Records") + # return None + + #if parseTree.RefType != 'c': + # return None + + self._FieldsFromDb(reference, version) + + mapper = self.makeCrossmap() + if not mapper: + return None + + g = [] + + for position in positions: + main = mapper.main2int(position.MainSgn + position.Main) + offset = mapper.offset2int(position.OffSgn + position.Offset) + g.append(mapper.x2g(main, offset)) + + return self.dbFields['chromosome'], min(g), max(g) + #coding_to_chromosomal + def correctChrVariant(self, variant) : """ @arg variant: diff --git a/mutalyzer/templates/check.html b/mutalyzer/templates/check.html index c04c888c8220fa34e506257ad8cceaae737adc68..1eaab372d902f4ffb961fbb8be47f0de70aef800 100644 --- a/mutalyzer/templates/check.html +++ b/mutalyzer/templates/check.html @@ -48,6 +48,7 @@ </div> </div> </div> <!-- not:visualisation --> + <a tal:condition = "browserLink" tal:attributes = "href browserLink"><br>View region in UCSC Genome Browser</a> </div> <!-- form area --> <br> <div tal:condition = "lastpost"> @@ -264,8 +265,6 @@ <a tal:content = "reference" tal:attributes = "href string:Reference/${reference}"></a> <br> - <a tal:condition = "browserLink" tal:attributes = "href browserLink">UCSC Genome Browser</a> - <br> <br> </div> <!-- interactive --> </div> <!-- reference --> diff --git a/mutalyzer/variantchecker.py b/mutalyzer/variantchecker.py index 9adb288902b70bb551b377eff6aae658c4e5c5fa..005a55466392da5d30e18c556aac83fd50384b00 100644 --- a/mutalyzer/variantchecker.py +++ b/mutalyzer/variantchecker.py @@ -22,6 +22,7 @@ from Bio.Alphabet import IUPAC from mutalyzer import util from mutalyzer.grammar import Grammar from mutalyzer.mutator import Mutator +from mutalyzer.mapping import Converter from mutalyzer import Retriever from mutalyzer import GenRecord from mutalyzer import Db @@ -979,6 +980,8 @@ def process_raw_variant(mutator, variant, record, transcript, output): # Coding positioning. first, last = _coding_to_genomic(first_location, last_location, transcript, output) + output.addOutput('rawCodingLocations', first_location) + output.addOutput('rawCodingLocations', last_location) else: # Genomic positioning. first, last = _genomic_to_genomic(first_location, last_location) @@ -1545,6 +1548,14 @@ def check_variant(description, config, output): output.addOutput('original', str(mutator.orig)) output.addOutput('mutated', str(mutator.mutated)) + # Chromosomal region + locations = output.getOutput('rawCodingLocations') + if locations: + converter = Converter('hg19', config, output) + region = converter.positions_to_chromosomal_region(parsed_description.RefSeqAcc, parsed_description.Version, set(locations)) + if region: + output.addOutput('chromosomalRegion', region) + # Protein. for gene in record.record.geneList: for transcript in gene.transcriptList: diff --git a/mutalyzer/website.py b/mutalyzer/website.py index ce81b1f56ddd93e7ee740b6f92876d60fc3c7212..e0cadd77a95464dfd011b5133d05bd841d12ba29 100644 --- a/mutalyzer/website.py +++ b/mutalyzer/website.py @@ -727,21 +727,14 @@ class Check: # Create a link to the UCSC Genome Browser # This is an ugly proof of concept. + # NM_003002.2:c.274G>T + # http://genome.ucsc.edu/cgi-bin/hgTracks?db=hg19&position=chr11:111959695 browser_link = None if output.getIndexedOutput('organism', 0) == 'Homo sapiens': - converter = Converter('hg19', config, output) - variant = converter.c2chrom(str(name)) - if variant: - import re - match = re.match('NC_(\d+)\.\d+:g.(\d+)_?(\d*)[^_\d]', variant) - if match: - # Todo: convert NC_0000XX to chr1...chrY - chromosome, start, stop = match.groups() - if stop: - position = 'chr%i:%i-%i' % (int(chromosome), int(start), int(stop)) - else: - position = 'chr%i:%i' % (int(chromosome), int(start)) - browser_link = 'http://genome.ucsc.edu/cgi-bin/hgTracks?db=hg19&position=%s' % position + region = output.getIndexedOutput('chromosomalRegion', 0) + if region: + chromosome, first, last = region + browser_link = 'http://genome.ucsc.edu/cgi-bin/hgTracks?db=hg19&position=%s:%i-%i' % (chromosome, first - 10, last + 10) # Todo: Generate the fancy HTML views for the proteins here instead # of in mutalyzer/variantchecker.py.