public BlastResult performTBlastn(File pssm, File db) { Runtime rt = Runtime.getRuntime(); BlastResult result = null; try { String db_path = db.getAbsolutePath(); // db_path = db_path.substring(0, db_path.lastIndexOf('.')-1); String commandline = tblastn_exec_path + " -in_pssm " + pssm.getAbsolutePath() + " -db " + db_path + " -outfmt 6"; Process pr = rt.exec(commandline); BufferedReader in = new BufferedReader(new InputStreamReader(pr.getInputStream())); String line = null; double minEvalue = 0.01; while ((line = in.readLine()) != null) { BlastResult r = new BlastResult(); r.parse(line); if (r.getEvalue() < minEvalue) { result = r; minEvalue = r.getEvalue(); } } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return result; }
/** * @param args * @throws IOException */ public static void main(String[] args) throws IOException { MassiveTblastnPicorna mbxp = new MassiveTblastnPicorna(); List<String> subjectGI = mbxp.getSubjectGI( new File("/home/javier/Dropbox/Posdoc/PICORNAVIRIDAE/separateByProt/queriesGI")); Map<String, String> genomes = mbxp.loadGenomes( subjectGI, new File("/home/javier/Dropbox/Posdoc/PICORNAVIRIDAE/PICORNAVIRIDAE.fas")); File tmp_fasta = new File("/home/javier/Dropbox/Posdoc/PICORNAVIRIDAE/separateByProt/tmp.fas"); File tmp_db = new File("/home/javier/Dropbox/Posdoc/PICORNAVIRIDAE/separateByProt/tmp"); PrintStream out = new PrintStream( "/home/javier/Dropbox/Posdoc/PICORNAVIRIDAE/separateByProt/tblastn.results"); List<File> pssms = new ArrayList<File>(); for (int i = 1; i < 12; i++) { String number = String.format("%02d", i); pssms.add( new File( "/home/javier/Dropbox/Posdoc/PICORNAVIRIDAE/separateByProt/ORF" + number + ".pssm")); } for (String string : subjectGI) { // Iterate over each genome String genome_sequence = genomes.get(string); mbxp.exportTmpFasta(genome_sequence, string, tmp_fasta); mbxp.makeblastdb(tmp_fasta, tmp_db); for (int i = 0; i < 11; i++) { // Iterate over each protein File orf_pssm = pssms.get(i); BlastResult result = mbxp.performTBlastn(orf_pssm, tmp_db); if (result != null) { String out_seq; int beginIndex = Math.min(result.getSubjectStart(), result.getSubjectEnd()); int endIndex = Math.max(result.getSubjectStart(), result.getSubjectEnd()); out_seq = genome_sequence.substring(beginIndex - 1, endIndex); if (result.getSubjectStart() > result.getSubjectEnd()) { out_seq = Complementary.reverseComplementary(out_seq); } out.println(">" + string + "|ORF" + String.format("%02d", i + 1)); out.println(out_seq); } } System.out.println("Genome " + string + " Done."); } out.close(); }