getAffectedGeneInfo()

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;
    }