본문 바로가기
컴퓨터/Java

[java] 자바 생물정보학 - fastq, fastq.gz 읽기

by HanJoohyun 2018. 1. 3.
반응형




안녕하세요 한주현입니다.


오늘은 java로 fastq.gz 을 읽는 방법에 대해 알아보겠습니다.

 



 

 JAVA로 fastq.gz 읽기


JAVA로 fastq.gz 읽기

 

아래는 fastq.gz 파일을 읽는 소스코드입니다.

 

그냥 읽기만 하면 재미가 없으니 ㅎㅎ..

 

조건을 몇 개 설정해봅시다.

 

- 조건

1) fastq.gz 은 paired 되어있다.

2) 각 read의 naming은 sample_1.fastq.gz, sample_2.fastq.gz 으로 한다.

3) 각 read 별 fastq에서 평균 read length를 계산한다.

 

 

여러분들도 한 번 코드작성을 해보시기를 추천드립니다 ㅎㅎ;

여러모로 배울점들이 생기게 됩니다

 

 

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
import java.io.*;
import java.util.zip.*;
 
class calcLength {
  public static void main(String[] args) throws IOException {
    if(args.length != 1) {
      System.out.println("#usage: java calcLength SampleName");
      System.exit(1);
    }
    String fq1 = args[0]+"_1.fastq.gz";
    String fq2 = args[0]+"_2.fastq.gz";
 
    GzipReader gzReader = new GzipReader();
    String readAverage_fq1 = gzReader.readGzip(fq1);
    String readAverage_fq2 = gzReader.readGzip(fq2);
    System.out.println("Read1: "+readAverage_fq1+"\nRead2: "+readAverage_fq2);
  }
 
}
 
class GzipReader {
  private long lineNum = 0;
  private long lengthSum = 0;
  private String s;
  private String result;
  public String readGzip(String fq) throws IOException {
    BufferedReader in = new BufferedReader(new InputStreamReader(new GZIPInputStream(new FileInputStream(fq))));
    while((s = in.readLine()) != null) {
      if(lineNum % 4 == 1) {
        lengthSum += s.trim().length();
      }
      lineNum += 1;
    }
    return String.valueOf(lengthSum / (double)(lineNum/4));
  }
}
cs

 

 


 


실행

  7Gbp (70억 염기쌍) 의 fastq.gz 파일을 실행한 결과입니다.


1
2
3
4
5
6
7
$ time java calcLength sample
Read1: 144.41828094280308
Read2: 144.44187587501781
 
real    2m39.691s
user    2m34.084s
sys     0m10.525s
cs


 

 

 

오늘은 java로 fastq.gz 파일을 읽는 방법에 대해 알아봤습니다.

 

여러분들께 도움이 되셨음 좋겠습니다 ㅎㅎ

 

그럼 다음시간에 만나요~



반응형

댓글