美文网首页
2018-11-20

2018-11-20

作者: 少年英雄小猪熊 | 来源:发表于2018-11-20 22:39 被阅读0次

    今天继续看pipeline,单独试blastn那个部分,发现需要把sampling_random.sh里的fastq-sample前面的./去掉,这样就生成了有内容的sample.fa。
    运行起来独立出来的blastn代码是下面结果,见2018-11-20(附)

    代码是这样

    import java.io.*;
    import java.util.*;
    import java.text.*; 
    
    /* Running BLAST for genome sequences*/
    
    
    public class BInterface
    {
        
        static String file;
        static HashMap organisms;
        static HashMap dico;
        static int number;
        static int [] tab_num;
        static String [] tab_gi;
        static String [] tab_name;
        static String path;
    
        static String res="";
    
        public static void main(String [] args) throws IOException {
                file="sample.fa";   // file = sample.fa
                number=5; // m1=5
                path="results/"; // path = results_11_07_2018_03:17:26/
            
                tab_num=new int[number];
                tab_gi=new String[number];
                tab_name=new String[number];
                organisms = new HashMap();
                dico=new HashMap();
                System.out.println("before try in main");
            try{
                System.out.println("before init() in try of main");
                init();
                System.out.println("after init() in try of main and enter run()");
                run();
                System.out.println("after run() in try of main");
            }
            catch(IOException ioe) {
                ioe.printStackTrace();
            }
    
        }
    
        public static void init() throws IOException{
    
    //      BufferedReader in = new BufferedReader(new FileReader("external_scripts/dict_genomes.txt"));
            System.out.println("before./external_scripts/dict_genomes.txt");
            BufferedReader in = new BufferedReader(new FileReader(".//external_scripts/dict_genomes.txt"));
            System.out.println("after./external_scripts/dict_genomes.txt");
            String l="";
            while((l = in.readLine()) != null) {
                String [] seq=l.split(";");
                dico.put(seq[0],seq[1]);
                            System.out.println("seq[0]="+seq[0]+";seq[1]="+seq[1]);
            }
            in.close();
    
    
        }
    
    
        public static void run(){
    
            try {
        
            Runtime runtime = Runtime.getRuntime();
            final Process process;
                    System.out.println("before runtime.exec in run()");
    //      process= runtime.exec( "blastn -query "+file+" -db BLAST_db/ncbi.fa -num_threads 40 -outfmt 5 -evalue 1e-5 -num_alignments 10");
            process= runtime.exec( "blastn -query "+file+" -db nt -outfmt 5 -evalue 1e-5 -num_alignments 10 -remote");
            System.out.println("after runtime.exec in run()");
    
            Thread thread=new Thread() {
            public void run() {
                try {
                
                                    System.out.println("new reader");
                    BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
                                    System.out.println("new genomeList.txt and genomeList.html");
                    PrintWriter out=new PrintWriter(new FileWriter(path+"genomeList.txt"));
                    PrintWriter out2=new PrintWriter(new FileWriter(path+"genomeList.html"));
                                    System.out.println("");
                    out2.println("<!DOCTYPE html>");
                    out2.println("<html>");
                        out2.println("<head>");
                        out2.println(" <meta charset=\"utf-8\" />");
                        out2.println("  <title>Genome List</title>");
                    out2.println(" </head>");
                    out2.println("  <body>");
                        out2.println("<h1> Genome list</h1>");
                    out2.println("<ul>");
                    
                                    System.out.println("before try in run()");
                    String l = "";
                    try {
    
                    
                        while((l = reader.readLine()) != null) {
                            System.out.println("*******************");
                                                    System.out.println("l="+l);
                            if((l.indexOf("<Hit_def>")!=-1)&&(!l.equals(""))){
                                String temp=l.substring(l.indexOf("|")+1,l.lastIndexOf("|")+1);
                                String gi=temp.substring(0,temp.indexOf("|"));
                            
                                String name="";
                                if(l.lastIndexOf("chromosome")!=-1){
                                    name=l.substring(l.lastIndexOf("|")+2,l.lastIndexOf("chromosome")-1);
                                                                    System.out.println("1name="+name);
                                }else{
    
                                    if(l.lastIndexOf(",")!=-1){
                                        name=l.substring(l.lastIndexOf("|")+2,l.lastIndexOf(","));
                                    }else{
                                        name=l.substring(l.lastIndexOf("|")+2,l.length()-10);
                                    }
                                                                    System.out.println("2name="+name);
                                }
    
                                name=name.replaceAll(" ","-");
                                name=name.replaceAll("/","-");
                                                            System.out.println("3name="+name);
                                if(organisms.get(gi)==null){
                                    organisms.put(gi,new Couple2(name));
                                }else{
                                    Couple2 c=(Couple2)organisms.get(gi);
                                    c.addNb();
                                    organisms.put(gi,c);
                                }   
    
                                                
    
    
                            
                            
                            
                            }
                        }
    
                        int nb_reads=organisms.size();
    
                        Set cles = organisms.keySet();
                        Iterator it = cles.iterator();
                        while (it.hasNext()){
                            String cle = (String)it.next();                     
                            update(cle,(Couple2)organisms.get(cle));
                        }
    
                        for(int i=tab_num.length-1;i>=0;i--){
                            if(tab_gi[i]!=null){
                        
                                String acc=(String)dico.get(tab_gi[i]);
                                res=res+acc+",";
                                String name=tab_name[i]+":"+acc;
                                out.println(acc+";"+name+";genome");
                                out2.println("<li>accession:<a target=_blank href=\"http://www.ncbi.nlm.nih.gov/nuccore/"+acc+"\"> "+acc+"</a> - "+name+" - "+tab_num[i]+" read matches </li>");
                            }   
                        }
                
                    
                    
                    } finally {
                        process.getInputStream().close();
                        reader.close();
                        out.close();
                        out2.println("</ul>");
                        out2.println(" </body> ");
                        out2.println("</html>");
                        out2.close();
                                            System.out.println("before res in run()");
                                            System.out.println("1res="+res);
                        res=res.substring(0,res.length()-1);
                                            System.out.println("2res="+res);
                    
                    }
                } catch(IOException ioe) {
                    ioe.printStackTrace();
                }
            }
        };
            System.out.println("before thread.start()");
        thread.start();
            System.out.println("after thread.start()");
            System.out.println("before thread.join()");
        thread.join();
            System.out.println("after thread.join()");
    
        Thread t2=new Thread() {
            public void run() {
                try {
                    BufferedReader reader2 = new BufferedReader(new InputStreamReader(process.getErrorStream()));
                    String line = "";
                    try {
                        while((line = reader2.readLine()) != null) {
                            System.out.println(line);
                        }
                    } finally {
                        reader2.close();
                    
                    }
                } catch(IOException ioe) {
                    ioe.printStackTrace();
                }
            }
        };
    
            System.out.println("before t2.start()");
        t2.start();
            System.out.println("after t2.start()");
            System.out.println("before t2.join()");
        t2.join();
            System.out.println("after t2.join()");
    
            System.out.println("before process.waitFor()");
        process.waitFor();
            System.out.println("after process.waitFor()");
            System.out.println("before process.getOutputStream().close();process.getErrorStream().close();");
        process.getOutputStream().close(); 
        process.getErrorStream().close();
            System.out.println("after process.getOutputStream().close();process.getErrorStream().close();");
        
        }catch (InterruptedException e) {
            System.out.println("Thread was interrupted");
            }
    
         catch (IOException e) {
            System.out.println("ERREUR BInterface");
        } 
    
        }
    
        static void update(String gi,Couple2 c){
            int n=c.nb;
                    
                    System.out.println("# update gi="+gi+";c.nb="+n);
            int i=0;
            while(i<number){
                if(n>tab_num[i]){
                    /* permutation */
                    int tmp_n=tab_num[i];
                    String tmp_gi=tab_gi[i];
                    String tmp_name=tab_name[i];
                    tab_num[i]=n;
                    tab_gi[i]=gi;
                    tab_name[i]=c.name;
                    if(i!=0){
                        tab_num[i-1]=tmp_n;
                        tab_gi[i-1]=tmp_gi;
                        tab_name[i-1]=tmp_name;
                    }
                }else{return;}  
                i++;
            }
    
        }
    
    }
    

    String gi=temp.substring(0,temp.indexOf("|"));
    

    这句会报错字符串参数错误 java.lang.StringIndexOutOfBoundsException: String index out of range: -1
    但是终端不显示,该try就在这结束了,然后终端看见的是finally里的res的错误。
    因为readline的时候根本没取到要取的值,也就是temp是"",是空,所以temp.substring(0,-1)报错,temp要取的值根本不在if语句里那一行。

    相关文章

      网友评论

          本文标题:2018-11-20

          本文链接:https://www.haomeiwen.com/subject/hluxqqtx.html