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