X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fext%2Fensembl%2FEnsemblGene.java;h=32b7c7c3ab880a19df80f8743e1ab75dfd13d8fd;hb=58c1349375691d2285976352f6947a835e745c7c;hp=365c1c24fbc91e429fb08313a8e8487573de541c;hpb=9317cd655af4803461acc71581ecbdc0a6677069;p=jalview.git diff --git a/src/jalview/ext/ensembl/EnsemblGene.java b/src/jalview/ext/ensembl/EnsemblGene.java index 365c1c2..32b7c7c 100644 --- a/src/jalview/ext/ensembl/EnsemblGene.java +++ b/src/jalview/ext/ensembl/EnsemblGene.java @@ -23,6 +23,7 @@ package jalview.ext.ensembl; import jalview.api.FeatureColourI; import jalview.api.FeatureSettingsModelI; import jalview.datamodel.AlignmentI; +import jalview.datamodel.GeneLoci; import jalview.datamodel.Sequence; import jalview.datamodel.SequenceFeature; import jalview.datamodel.SequenceI; @@ -401,6 +402,8 @@ public class EnsemblGene extends EnsemblSeqProxy cdna.transferFeatures(gene.getFeatures().getPositionalFeatures(), transcript.getDatasetSequence(), mapping, parentId); + mapTranscriptToChromosome(transcript, gene, mapping); + /* * fetch and save cross-references */ @@ -415,6 +418,51 @@ public class EnsemblGene extends EnsemblSeqProxy } /** + * If the gene has a mapping to chromosome coordinates, derive the transcript + * chromosome regions and save on the transcript sequence + * + * @param transcript + * @param gene + * @param mapping + * the mapping from gene to transcript positions + */ + protected void mapTranscriptToChromosome(Sequence transcript, + SequenceI gene, MapList mapping) + { + GeneLoci loci = ((Sequence) gene).getGeneLoci(); + if (loci == null) + { + return; + } + + /* + * patch to ensure gene to chromosome mapping is complete + * (in case created before gene length was known) + */ + MapList geneMapping = loci.getMapping(); + if (geneMapping.getFromRanges().get(0)[1] == 0) + { + geneMapping.getFromRanges().get(0)[0] = gene.getStart(); + geneMapping.getFromRanges().get(0)[1] = gene.getEnd(); + } + + List exons = mapping.getFromRanges(); + List transcriptLoci = new ArrayList<>(); + + for (int[] exon : exons) { + transcriptLoci.add(geneMapping.locateInTo(exon[0], exon[1])); + } + + List transcriptRange = Arrays.asList(new int[] { + transcript.getStart(), transcript.getEnd() }); + MapList mapList = new MapList(transcriptRange, transcriptLoci, 1, 1); + GeneLoci gl = new GeneLoci(loci.getSpecies(), loci.getReference(), + loci.getChromosome(), mapList, loci.isForwardStrand()); + + transcript.setGeneLoci(gl); + } + + /** * Returns the 'transcript_id' property of the sequence feature (or null) * * @param feature