File: Scaffold.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 (140 lines) | stat: -rwxr-xr-x 3,465 bytes parent folder | download | duplicates (2)
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
135
136
137
138
139
140
package dna;

import shared.LineParser1;
import shared.LineParserS1;

/**
 * @author Brian Bushnell
 * @date Jan 4, 2013
 *
 */
public class Scaffold implements Comparable<Scaffold> {
	
	public Scaffold(String name_, String assembly_, int length_){
		name=name_;
		assembly=assembly_;
		length=length_;
	}
	
	/** Assumes SAM format 
	 * e.g.<br> @SQ	SN:scaffold_0	LN:1785514	AS:build 9 */
	@Deprecated
	public Scaffold(String[] split) {
		assert(split.length>2 && split[0].equals("@SQ"));
		for(String s : split){
			if(s.equals("@SQ")){
				//Do nothing
			}else if(s.startsWith("SN:")){
				assert(name==null);
				name=new String(s.substring(3)); //Data.forceIntern(s.substring(3));
			}else if(s.startsWith("LN:")){
				length=Integer.parseInt(s.substring(3));
			}else if(s.startsWith("AS:")){
				assembly=Data.forceIntern(s.substring(3));
			}
		}
		assert(length>-1);
		assert(name!=null);
	}
	
	/** Should be faster. Assumes SAM format.
	 * e.g.<br> @SQ	SN:scaffold_0	LN:1785514	AS:build 9 */
	public Scaffold(LineParser1 lp) {
		assert(lp.startsWith("@SQ"));
		for(int i=1, terms=lp.terms(); i<terms; i++){
			if(lp.termStartsWith("SN:", i)){
				assert(name==null);
				lp.incrementA(3);
				name=lp.parseStringFromCurrentField();
				name=Data.forceIntern(name);
			}else if(lp.termStartsWith("LN:", i)){
				assert(length<=0);
				lp.incrementA(3);
				length=lp.parseIntFromCurrentField();
			}else if(lp.termStartsWith("AS:", i)){
				assert(assembly==null);
				lp.incrementA(3);
				assembly=lp.parseStringFromCurrentField();
			}
		}
		assert(length>-1);
		assert(name!=null);
	}
	
	/** Should be faster. Assumes SAM format.
	 * e.g.<br> @SQ	SN:scaffold_0	LN:1785514	AS:build 9 */
	public Scaffold(LineParserS1 lp) {
		assert(lp.startsWith("@SQ"));
		for(int i=1; i<lp.terms(); i++){
			if(lp.termStartsWith("SN:", i)){
				assert(name==null);
				lp.incrementA(3);
				name=lp.parseStringFromCurrentField(); 
				name=Data.forceIntern(name);
			}else if(lp.termStartsWith("LN:", i)){
				assert(length<=0);
				lp.incrementA(3);
				length=lp.parseIntFromCurrentField();
			}else if(lp.termStartsWith("AS:", i)){
				assert(assembly==null);
				lp.incrementA(3);
				assembly=lp.parseStringFromCurrentField();
			}
		}
		assert(length>-1);
		assert(name!=null);
	}
	
	public Scaffold(String name_, int length_) {
		name=name_;
		length=length_;
	}
	
	@Override
	public int hashCode(){
		return name.hashCode();
	}
	
	@Override
	public int compareTo(Scaffold other){
		return name.compareTo(other.name);
	}
	
	@Override
	public String toString(){
		return "@SQ\tSN:"+name+"\tLN:"+length+(assembly==null ? "" : "\tAS:"+assembly);
	}
	
	public static String name(LineParser1 lp) {
		assert(lp.startsWith("@SQ"));
		for(int i=1; i<lp.terms(); i++){
			if(lp.termStartsWith("SN:", i)){
				lp.incrementA(3);
				String name=lp.parseStringFromCurrentField(); 
				return name;
			}
		}
		assert(false);
		return null;
	}
	
	public String name;
	public String assembly;
	public int length=-1;
	public long basehits=0;
	public long readhits=0;
	/** For calculating FPKM */
	public long fraghits=0;
	public long readhitsMinus=0;
	
	/** {A,C,G,T,N} */
	public long[] basecount;
	public float gc;
	
	/** For attaching things */
	public Object obj0;
	
	/** For attaching things for strand1 */
	public Object obj1;
	
}