File: blocksOverlap.cpp

package info (click to toggle)
rna-star 2.7.8a%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 3,076 kB
  • sloc: cpp: 20,429; awk: 483; ansic: 470; makefile: 181; sh: 31
file content (41 lines) | stat: -rw-r--r-- 1,330 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include "blocksOverlap.h"

uint blocksOverlap(Transcript &t1, Transcript &t2) {//calculate overlap between blocks of two transcripts

    uint i1=0, i2=0, nOverlap=0;
    while (i1<t1.nExons && i2<t2.nExons) {//scan through all exons
        uint rs1=t1.exons[i1][EX_R];
        uint rs2=t2.exons[i2][EX_R];
        uint re1=t1.exons[i1][EX_R]+t1.exons[i1][EX_L];//1st base after the end
        uint re2=t2.exons[i2][EX_R]+t2.exons[i2][EX_L];
        uint gs1=t1.exons[i1][EX_G];
        uint gs2=t2.exons[i2][EX_G];

        if (rs1>=re2) {//t1 block is on the right to t2, no hope of overlap
            i2++;
        } else if (rs2>=re1) {//t2 block is on the right to t1, no hope of overlap
            i1++;
        } else if (gs1-rs1 != gs2-rs2) {//no overlap
            if (re1>=re2) i2++;//1 is on the right of 2
            if (re2>=re1) i1++;//2 is on the right of 1
        } else {//overlap
            nOverlap += min(re1,re2) - max(rs1,rs2);
            if (re1>=re2) i2++;//1 is on the right of 2
            if (re2>=re1) i1++;//2 is on the right of 1
        };
    };

    //debug
//     uint nO1=0;
//     for (uint ir=0;ir<t1.Lread;ir++) {
//         if (t1.gMap[ir]==t2.gMap[ir] && t1.gMap[ir]>0) nO1++;
//     };
//
//     if (nOverlap!=nO1) {
//         exit(255);
//     };
//

    return nOverlap;
};