File: GeneSet.java

package info (click to toggle)
bbmap 39.20%2Bdfsg-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 26,024 kB
  • sloc: java: 312,743; sh: 18,099; python: 5,247; ansic: 2,074; perl: 96; makefile: 39; xml: 38
file content (134 lines) | stat: -rwxr-xr-x 3,523 bytes parent folder | download | duplicates (4)
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
package dna;
import java.util.ArrayList;

import shared.Shared;
import shared.Tools;


public class GeneSet implements Comparable<GeneSet>{
	
	public static void main(String[] args){
		Data.getGeneIDTable();
	}
	
	public GeneSet(String n, ArrayList<Gene> g){
		name=n;
		id=g.get(0).id;
		genes=g;
		chrom=g.get(0).chromosome;
		transcripts=genes.size();
		assert(transcripts>0);

		byte st=-1;
		
		boolean pse=true, unt=true;
		
		for(int i=0; i<transcripts; i++){
			Gene gene=g.get(i);
			
			assert(gene.id==id) : g;
			
			pse=(pse&&gene.pseudo);
			unt=(unt&&gene.untranslated);
			minStart=min((int)gene.txStart, minStart);
			maxEnd=max((int)gene.txStop, maxEnd);
			//				assert(st==-1 || st==gene.strand) : g;
			if(st==-1){st=gene.strand;}
			else if(st!=gene.strand){st=(byte) Tools.find("?", Shared.strandCodes);}
		}
		
		pseudo=pse;
		untranslated=unt;
		
		for(Gene gene : g){
			assert(pseudo==gene.pseudo || (!pseudo && gene.pseudo)) : g;
			assert(untranslated==gene.untranslated || (!untranslated && gene.untranslated)) : g;
//			assert(untranslated==gene.untranslated) : g;
		}
		
		strand=st;
	}
	
	@Override
	public String toString(){
		StringBuilder sb=new StringBuilder();
		sb.append(name);
		while(sb.length()<10){sb.append(' ');}
		sb.append('\t');
		sb.append(padFront(transcripts+"",2)+" transcript"+(transcripts==1 ? " " : "s"));

		sb.append("\tchr"+chrom+" ("+minStart+" - "+maxEnd+"), '"+Shared.strandCodes[strand]+"'");

		return sb.toString();
	}

	private static final String padFront(String num, int width){
		String r=num;
		while(r.length()<width){r=" "+r;}
		return r;
	}

	private static final String padBack(String num, int width){
		String r=num;
		while(r.length()<width){r=r+" ";}
		return r;
	}

	public final String name;
	public final int id;
	public final byte chrom;
	public final byte strand;
	public final ArrayList<Gene> genes;
	public final int transcripts;
	
	/** True if all transcripts are untranslated */
	public final boolean untranslated;
	/** True if all transcripts are psuedogenes */
	public final boolean pseudo;

	public int minStart=Integer.MAX_VALUE;
	public int maxEnd=0;
	

	public boolean intersects(int point){
		return point>=minStart && point<=maxEnd;
	}
	public boolean intersects(int point1, int point2){
		return point2>=minStart && point1<=maxEnd;
	}


	@Override
	public int compareTo(GeneSet other) {
		if(chrom!=other.chrom){
			return chrom>other.chrom ? 1 : -1;
		}
		int x=minStart<other.minStart ? -1 : minStart>other.minStart ? 1 : 0;
		if(x!=0){return x;}
		return x=name.compareTo(other.name);
	}
	
	@Override
	public boolean equals(Object other){
		return equals((GeneSet)other);
	}
	
	public boolean equals(GeneSet other){
		return compareTo(other)==0;
	}
	
	@Override
	public int hashCode(){
		return Integer.rotateLeft(name.hashCode(), 5)^chrom;
	}
	
	private static final int min(int x, int y){return x<y ? x : y;}
	private static final int max(int x, int y){return x>y ? x : y;}
	private static final byte min(byte x, byte y){return x<y ? x : y;}
	private static final byte max(byte x, byte y){return x>y ? x : y;}
	private static final long min(long x, long y){return x<y ? x : y;}
	private static final long max(long x, long y){return x>y ? x : y;}
	private static final float min(float x, float y){return x<y ? x : y;}
	private static final float max(float x, float y){return x>y ? x : y;}

}