comparison rDiff/src/tools/detect_overlapping_regions.m @ 0:0f80a5141704

version 0.3 uploaded
author vipints
date Thu, 14 Feb 2013 23:38:36 -0500
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:0f80a5141704
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