0
|
1 function [new_genes]=detect_overlapping_regions(genes);
|
|
2 % this function determines regions in a gene which overlapp with
|
|
3 % other genes. Those regons are then saved in the field "non_unique_regions"
|
|
4
|
|
5 CHROMOSOMES={};
|
|
6 COUNTER=1;
|
|
7 for i=1:size(genes,2)
|
|
8 CHROMOSOMES{COUNTER}=genes(i).chr;
|
|
9 COUNTER=COUNTER+1;
|
|
10 end
|
|
11 CHROMOSOMES=unique(CHROMOSOMES);
|
|
12
|
|
13
|
|
14 INFO=zeros(size(genes,2),4);
|
|
15 for i=1:size(genes,2)
|
|
16 CHR_VAL=0;
|
|
17 for chr= 1:length(CHROMOSOMES)
|
|
18 if strcmp(genes(i).chr,CHROMOSOMES(chr))
|
|
19 CHR_VAL=chr;
|
|
20 end
|
|
21 end
|
|
22 INFO(i,:)=[i,genes(i).start,genes(i).stop, CHR_VAL];
|
|
23 end
|
|
24
|
|
25 COUNTER=1;
|
|
26 new_genes=genes;
|
|
27 for chr= 1:length(CHROMOSOMES)
|
|
28 GENES_ON_CHR=INFO(INFO(:,4)==chr,:);
|
|
29 [TEMP,POS]=sort(GENES_ON_CHR(:,2));
|
|
30 GENES_ON_CHR=GENES_ON_CHR(POS,:);
|
|
31 STARTS=GENES_ON_CHR(:,2);
|
|
32 STOPS=GENES_ON_CHR(:,3);
|
|
33 for i=1:(size(GENES_ON_CHR,1))
|
|
34 MIN_START=find(STOPS>=STARTS(i),1,'first');
|
|
35 MAX_STOP=find(STARTS<=STOPS(i),1,'last');
|
|
36 if MIN_START==i
|
|
37 MIN_START=[];
|
|
38 end
|
|
39 if MAX_STOP==i
|
|
40 MAX_STOP=[];
|
|
41 end
|
|
42 EXONS=[];
|
|
43 if not (isempty(MIN_START))
|
|
44 for CURR=MIN_START:(i-1)
|
|
45 if(not(isempty(genes(GENES_ON_CHR(CURR,1)).transcripts)))
|
|
46 for tra=1:size(genes(GENES_ON_CHR(CURR,1)).transcripts,2)
|
|
47 if(not(isempty(genes(GENES_ON_CHR(CURR,1)).exons)))
|
|
48 EXONS=[EXONS;genes(GENES_ON_CHR(CURR,1)).exons{tra}];
|
|
49 else
|
|
50 EXONS=[EXONS;genes(GENES_ON_CHR(CURR,1)).start,genes(GENES_ON_CHR(CURR,1)).stop];
|
|
51 end
|
|
52 end
|
|
53 else
|
|
54 EXONS=[EXONS;genes(GENES_ON_CHR(CURR,1)).start,genes(GENES_ON_CHR(CURR,1)).stop];
|
|
55 end
|
|
56 end
|
|
57 end
|
|
58 if not (isempty(MAX_STOP))
|
|
59 for CURR=(i+1):MAX_STOP
|
|
60 if(not(isempty(genes(GENES_ON_CHR(CURR,1)).transcripts)))
|
|
61 for tra=1:size(genes(GENES_ON_CHR(CURR,1)).transcripts,2)
|
|
62 if(not(isempty(genes(GENES_ON_CHR(CURR,1)).exons)))
|
|
63 EXONS=[EXONS;genes(GENES_ON_CHR(CURR,1)).exons{tra}];
|
|
64 else
|
|
65 EXONS=[EXONS;genes(GENES_ON_CHR(CURR,1)).start,genes(GENES_ON_CHR(CURR,1)).stop];
|
|
66 end
|
|
67 end
|
|
68 else
|
|
69 EXONS=[EXONS;genes(GENES_ON_CHR(CURR,1)).start,genes(GENES_ON_CHR(CURR,1)).stop];
|
|
70 end
|
|
71
|
|
72 end
|
|
73 end
|
|
74 if not (isempty([MAX_STOP,MIN_START]))
|
|
75 EXONS=EXONS(EXONS(:,2)>=STARTS(i),:);
|
|
76 EXONS=EXONS(EXONS(:,1)<=STOPS(i),:);
|
|
77 new_genes(GENES_ON_CHR(i,1)).non_unique_regions=EXONS;
|
|
78 else
|
|
79 new_genes(GENES_ON_CHR(i,1)).non_unique_regions=[];
|
|
80 end
|
|
81 end
|
|
82 COUNTER=COUNTER+1;
|
|
83 end
|