in client/client/app/shared/components/ngbVariantDetails/ngbVariantVisualizer/ngbVariantVisualizer.service.js [419:491]
getAffectedGeneInfo(breakpoint, gene) {
if (gene) {
if (gene.attributes && gene.attributes.hasOwnProperty('gene_symbol')) {
gene.name = gene.attributes.gene_symbol;
}
else if (gene.attributes && gene.attributes.hasOwnProperty('gene_name')) {
gene.name = gene.attributes.gene_name;
}
else if (gene.attributes && gene.attributes.hasOwnProperty('gene_id')) {
gene.name = gene.attributes.gene_id;
}
else {
gene.name = gene.name || '';
}
if (gene.transcripts && gene.transcripts.length) {
for (let i = 0; i < gene.transcripts.length; i++) {
gene.transcripts[i].gene = gene;
gene.transcripts[i].index = i;
for (let j = 0; j < gene.transcripts[i].exon.length; j++) {
gene.transcripts[i].exon[j].geneName = gene.name;
}
}
for (let i = 0; i < gene.transcripts.length; i++) {
this.recoverCanonicalTranscript(gene.transcripts[i], gene.strand);
}
let protein_coding = gene.transcripts.filter(t => t.bioType && t.bioType === 'protein_coding');
let other = gene.transcripts.filter(t => !t.bioType || t.bioType !== 'protein_coding');
protein_coding = Sorting.quickSort(protein_coding, false, x => x.exonSize);
other = Sorting.quickSort(other, false, x => x.exonSize);
gene.transcripts = [...protein_coding, ...other];
if (!gene.selectedTranscript) {
for (let i = 0; i < gene.transcripts.length; i++) {
const transcript = gene.transcripts[i];
if (transcript.domain && transcript.domain.length) {
gene.selectedTranscript = transcript;
break;
}
}
if (!gene.selectedTranscript) {
gene.selectedTranscript = gene.transcripts[0];
}
}
this.buildTranscriptExonsPositions(gene.transcripts);
gene.consensusExons = gene.selectedTranscript.canonicalCds;
gene.totalExonsLength = gene.consensusExons.reduce((a, b) => (a instanceof Object ? (a.end - a.start) : a) + (b.end - b.start), 0);
if (!breakpoint.relativePositions) {
breakpoint.relativePositions = {};
}
let relativePositionIsSet = false;
for (let i = 0; i < gene.consensusExons.length; i++) {
const exon = gene.consensusExons[i];
if (exon.end + gene.startIndex > breakpoint.position) {
if (exon.start + gene.startIndex > breakpoint.position) {
breakpoint.relativePositions[gene.name] = exon.relativePosition.start;
}
else {
breakpoint.relativePositions[gene.name] = breakpoint.position - gene.startIndex - exon.start + exon.relativePosition.start;
}
relativePositionIsSet = true;
break;
}
}
if (!relativePositionIsSet && gene.consensusExons && gene.consensusExons.length > 0) {
breakpoint.relativePositions[gene.name] = gene.consensusExons[gene.consensusExons.length - 1].relativePosition.end;
}
}
else {
gene.empty = true;
}
return gene;
}
return null;
}