jpayne@68
|
1 package prok;
|
jpayne@68
|
2
|
jpayne@68
|
3 import java.util.ArrayList;
|
jpayne@68
|
4 import java.util.Arrays;
|
jpayne@68
|
5
|
jpayne@68
|
6 import dna.AminoAcid;
|
jpayne@68
|
7 import gff.GffLine;
|
jpayne@68
|
8 import stream.Read;
|
jpayne@68
|
9 import structures.IntList;
|
jpayne@68
|
10
|
jpayne@68
|
11 /**
|
jpayne@68
|
12 * Tracks information about a scaffold for AnalyzeGenes.
|
jpayne@68
|
13 * @author Brian Bushnell
|
jpayne@68
|
14 * @date Sep 24, 2018
|
jpayne@68
|
15 *
|
jpayne@68
|
16 */
|
jpayne@68
|
17 class ScafData {
|
jpayne@68
|
18
|
jpayne@68
|
19 /*--------------------------------------------------------------*/
|
jpayne@68
|
20 /*---------------- Initialization ----------------*/
|
jpayne@68
|
21 /*--------------------------------------------------------------*/
|
jpayne@68
|
22
|
jpayne@68
|
23 ScafData(Read r){
|
jpayne@68
|
24 this(r.id, r.bases, new byte[r.length()]);
|
jpayne@68
|
25 }
|
jpayne@68
|
26
|
jpayne@68
|
27 ScafData(String name_, byte[] bases_, byte[] frames_){
|
jpayne@68
|
28 name=name_;
|
jpayne@68
|
29 bases=bases_;
|
jpayne@68
|
30 frames=frames_;
|
jpayne@68
|
31 cdsLines[0]=new ArrayList<GffLine>();
|
jpayne@68
|
32 cdsLines[1]=new ArrayList<GffLine>();
|
jpayne@68
|
33 rnaLines[0]=new ArrayList<GffLine>();
|
jpayne@68
|
34 rnaLines[1]=new ArrayList<GffLine>();
|
jpayne@68
|
35 }
|
jpayne@68
|
36
|
jpayne@68
|
37 /*--------------------------------------------------------------*/
|
jpayne@68
|
38 /*---------------- Methods ----------------*/
|
jpayne@68
|
39 /*--------------------------------------------------------------*/
|
jpayne@68
|
40
|
jpayne@68
|
41 void clear(){
|
jpayne@68
|
42 Arrays.fill(frames, (byte)0);
|
jpayne@68
|
43 starts.clear();
|
jpayne@68
|
44 stops.clear();
|
jpayne@68
|
45 }
|
jpayne@68
|
46
|
jpayne@68
|
47 void reverseComplement(){
|
jpayne@68
|
48 AminoAcid.reverseComplementBasesInPlace(bases);
|
jpayne@68
|
49 strand=1^strand;
|
jpayne@68
|
50 }
|
jpayne@68
|
51
|
jpayne@68
|
52 void addCDS(GffLine gline){
|
jpayne@68
|
53 assert(gline.strand>=0) : gline+"\n"+gline.strand;
|
jpayne@68
|
54 cdsLines[gline.strand].add(gline);
|
jpayne@68
|
55 }
|
jpayne@68
|
56
|
jpayne@68
|
57 void addRNA(GffLine gline){
|
jpayne@68
|
58 assert(gline.strand>=0) : gline+"\n"+gline.strand;
|
jpayne@68
|
59 rnaLines[gline.strand].add(gline);
|
jpayne@68
|
60 }
|
jpayne@68
|
61
|
jpayne@68
|
62 byte[] fetch(int start, int stop){
|
jpayne@68
|
63 assert(start>=0 && stop<bases.length);
|
jpayne@68
|
64 assert(start<stop);
|
jpayne@68
|
65 return Arrays.copyOfRange(bases, start, stop+1);
|
jpayne@68
|
66 }
|
jpayne@68
|
67
|
jpayne@68
|
68 int strand(){return strand;}
|
jpayne@68
|
69
|
jpayne@68
|
70 public int length() {return bases==null ? 0 : bases.length;}
|
jpayne@68
|
71
|
jpayne@68
|
72 /*--------------------------------------------------------------*/
|
jpayne@68
|
73 /*---------------- Fields ----------------*/
|
jpayne@68
|
74 /*--------------------------------------------------------------*/
|
jpayne@68
|
75
|
jpayne@68
|
76 final String name;
|
jpayne@68
|
77 final byte[] bases;
|
jpayne@68
|
78 final byte[] frames;
|
jpayne@68
|
79 final IntList starts=new IntList(8);
|
jpayne@68
|
80 final IntList stops=new IntList(8);
|
jpayne@68
|
81 private int strand=0;
|
jpayne@68
|
82
|
jpayne@68
|
83 /** gLines[strand] holds the GffLines for that strand */
|
jpayne@68
|
84 @SuppressWarnings("unchecked")
|
jpayne@68
|
85 ArrayList<GffLine>[] cdsLines=new ArrayList[2];
|
jpayne@68
|
86 @SuppressWarnings("unchecked")
|
jpayne@68
|
87 ArrayList<GffLine>[] rnaLines=new ArrayList[2];
|
jpayne@68
|
88 }
|