差分
このページの2つのバージョン間の差分を表示します。
— | 練習問題の解答例_2 [2019/07/15 02:46] (現在) – 作成 - 外部編集 127.0.0.1 | ||
---|---|---|---|
行 1: | 行 1: | ||
+ | 解答例 | ||
+ | ちなみにDRR017220.fastqに対してsimilarity 0.95以上でクラスタリングした結果は371個のOTUが出来ます。 | ||
+ | |||
+ | <code java> | ||
+ | package clustering; | ||
+ | |||
+ | import java.io.BufferedReader; | ||
+ | import java.io.File; | ||
+ | import java.io.FileReader; | ||
+ | import java.io.StringReader; | ||
+ | import java.util.ArrayList; | ||
+ | |||
+ | import neobio.alignment.BasicScoringScheme; | ||
+ | import neobio.alignment.PairwiseAlignment; | ||
+ | import neobio.alignment.ScoringScheme; | ||
+ | import neobio.alignment.SmithWaterman; | ||
+ | |||
+ | public class Test { | ||
+ | |||
+ | public static double getsim(String seq1, String seq2){ | ||
+ | double result=0; | ||
+ | SmithWaterman sw = new SmithWaterman(); | ||
+ | |||
+ | int n=0; | ||
+ | try { | ||
+ | StringReader str1 = new StringReader(seq1); | ||
+ | StringReader str2 = new StringReader(seq2); | ||
+ | ScoringScheme arg3 = new BasicScoringScheme(1, | ||
+ | sw.setScoringScheme(arg3); | ||
+ | sw.loadSequences(str1, | ||
+ | PairwiseAlignment arg4; | ||
+ | arg4 = sw.getPairwiseAlignment(); | ||
+ | String match=arg4.getScoreTagLine(); | ||
+ | for(int i=0; | ||
+ | if(match.substring(i, | ||
+ | n++; | ||
+ | } | ||
+ | } | ||
+ | result=n/ | ||
+ | } catch (Exception e) { | ||
+ | e.printStackTrace(); | ||
+ | } | ||
+ | return result; | ||
+ | } | ||
+ | |||
+ | public static void main(String[] args) { | ||
+ | // TODO 自動生成されたメソッド・スタブ | ||
+ | |||
+ | |||
+ | ArrayList< | ||
+ | ArrayList< | ||
+ | int n=0; | ||
+ | File file = new File(" | ||
+ | try { | ||
+ | BufferedReader br = new BufferedReader(new FileReader(file)); | ||
+ | String str = br.readLine(); | ||
+ | while(str != null){ | ||
+ | n++; | ||
+ | if(n%4==1){ | ||
+ | arrayName.add(str); | ||
+ | }else if(n%4==2){ | ||
+ | arraySeq.add(str); | ||
+ | } | ||
+ | |||
+ | str = br.readLine(); | ||
+ | } | ||
+ | br.close(); | ||
+ | } catch (Exception e) { | ||
+ | // TODO 自動生成された catch ブロック | ||
+ | e.printStackTrace(); | ||
+ | } | ||
+ | System.out.println(arraySeq.size()+" | ||
+ | |||
+ | |||
+ | // | ||
+ | System.out.println(arraySeq.get(0)); | ||
+ | |||
+ | for(int i=1; | ||
+ | if(getsim(arraySeq.get(0), | ||
+ | System.out.println(arrayName.get(i)+": | ||
+ | } | ||
+ | } | ||
+ | |||
+ | |||
+ | // | ||
+ | int otu=0; // OTUの数を保存する変数 | ||
+ | boolean[] clusteredFlag = new boolean[arraySeq.size()]; | ||
+ | for(int j=0; j< | ||
+ | int matchCnt = 0; // 1つのOTU内のリード数をカウント | ||
+ | if(clusteredFlag[j]==false){ | ||
+ | matchCnt++; | ||
+ | otu++; | ||
+ | clusteredFlag[j]=true; | ||
+ | ArrayList< | ||
+ | ArrayList< | ||
+ | for(int i=j+1; i< | ||
+ | if(clusteredFlag[i]==false){ | ||
+ | if(getsim(arraySeq.get(j), | ||
+ | matchSeq.add(arraySeq.get(i)); | ||
+ | matchName.add(arrayName.get(i)); | ||
+ | matchCnt++; | ||
+ | clusteredFlag[i]=true; | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | System.out.println(" | ||
+ | for(int i=0; i< | ||
+ | System.out.print(matchName.get(i)+" | ||
+ | } | ||
+ | System.out.println(matchCnt+" | ||
+ | } | ||
+ | } | ||
+ | |||
+ | } | ||
+ | |||
+ | } | ||
+ | </ |