Trying to run blastp in a java program, says that the directory cannot be found
1
0
Entering edit mode
10.2 years ago

I am trying to run the program here: http://dasan.sejong.ac.kr/~wikim/notice.html

In one of the .java files, it makes a call to the blastp function in the NCBI blast+ package.

 public ArrayList runBlast(String query, String subject) {
    ArrayList scoreList = new ArrayList();
    Runtime rt = Runtime.getRuntime();   
    subject = ParaNames.Species+subject;
    try { 
    Process proc = rt.exec(new String[] **{"~/Downloads/ncbi-blast-2.2.30+/bin/blastp", "-query", query, "-subject", subject, "-num_threads", "4", "-matrix", matrix, "-outfmt", "10 qseqid sseqid score"})**;
       InputStream is = proc.getInputStream();
       InputStream es = proc.getErrorStream();
       BufferedReader reader = new BufferedReader(new InputStreamReader(is));   
       BufferedReader readerError = new BufferedReader(new InputStreamReader(es));
       String line; 
       while ((line = reader.readLine()) != null) {
        scoreList.add(line);  
       }
       if (proc.waitFor() != 0) {
         System.err.println("Process exited with (normal termination: 0) "+proc.exitValue());
         System.err.println("Error: "+readerError.readLine());
       }
       is.close(); is = null;
       es.close(); es = null;
       reader.close(); reader = null;
       readerError.close(); readerError = null;
       proc.destroy(); proc = null;
    } 
    catch (InterruptedException e) {   
         System.err.println("Error: "+e.getMessage());   
    }
    catch (IOException ioe) {
    System.err.println("Failed to execute: "+ioe.getMessage());
    }

    return scoreList;
  }

I have downloaded ncbi-blast-2.2.30+ and it is in the Downloads folder.

When I run this however, I am getting the following error:

May 20, 2015 1:40:33 PM ReMark.RecursiveClustering <init>
INFO: Trying to run BLAST now - this may take several hours ... or days!
May 20, 2015 1:40:33 PM ReMark.RecursiveClustering <init>
INFO: Starting ortholog detection...................................
Failed to execute: Cannot run program "~/Downloads/ncbi-blast-2.2.30+/bin/blast": error=2, No such file or directory
Failed to execute: Cannot run program "~/Downloads/ncbi-blast-2.2.30+/bin/blast": error=2, No such file or directory
Failed to execute: Cannot run program "~/Downloads/ncbi-blast-2.2.30+/bin/blast": error=2, No such file or directory
Failed to execute: Cannot run program "~/Downloads/ncbi-blast-2.2.30+/bin/blast": error=2, No such file or directory
Failed to execute: Cannot run program "~/Downloads/ncbi-blast-2.2.30+/bin/blast": error=2, No such file or directory

Could someone explain what I need to do to fix this? I can provide any other information you need. Thank you very much.

software-error blast sequence • 3.4k views
ADD COMMENT
1
Entering edit mode

Looks like it is looking for blast executable instead of blastp.Does that program requires legacy blast (non-plus version)?

ADD REPLY
0
Entering edit mode

I don't think so, because originally it just said blastp where it is currently written ~/Downloads/ncbi-blast-2.2.30+/bin/blastp

ADD REPLY
1
Entering edit mode
10.2 years ago

First it the code reads "blastp", while the error message reads "blast". Next, it is very strange that the path is hard-linked into the code. Are you sure that the blastp binary is there and is compiled for macos? I would also recommend to substitute ~/ with /user/... Just do cd ~/Downloads/ncbi-blast-2.2.30+/bin/ and type pwd to get the full path.

ADD COMMENT
0
Entering edit mode

Ah, thank you. I tried this but now I am getting a new error, for which I believe you need to see the whole Java file in order to figure out.

It is now saying the following:

May 20, 2015 2:08:01 PM ReMark.RecursiveClustering <init>
INFO: Trying to run BLAST now - this may take several hours ... or days!
May 20, 2015 2:08:01 PM ReMark.RecursiveClustering <init>
INFO: Starting ortholog detection...................................
Wrong typing! Try again!

How do I attach .java files here?

ADD REPLY
1
Entering edit mode

Generally one puts open-source projects to a public repository. You can put the code in question to gist (https://gist.github.com/) and link it in the post here.

PS. Although the better way may be to write Sunshin Kim (the author)

ADD REPLY
0
Entering edit mode

Here is the file:

package ReMark;
import java.io.*;
import java.util.*;
/**
* <p>Title: RecursiveClustering.java</p>
* <p>Description:
* RecursiveClustering is an algorithm which finds orthologous genes and those paralogous genes which arose
* --most likely by duplication--after some speciation event.
* Such protein-coding genes are called in-paralogs, as opposed to out-paralogs
* (which arose prior to the species split).
* ReMark (with varying capitalization) may refer to the program which utilizes the ReMark algorithm
* as well as the derived database; this database lists orthologous clusters of genes.
* </p>
*
* <p>Copyright: Copyright (c) 2010</p>
* @author Kangseok Kim
* @version 1.0
*/
public class RecursiveClustering {
int row = 0;
int col = 0;
int num = 0;
String matrix = new String();
Vector rowV = new Vector();
Vector colV = new Vector();
Vector scoreV = new Vector();
Vector rowVbetween2genomes = new Vector();
Vector colVbetween2genomes = new Vector();
Vector scoreVbetween2genomes = new Vector();
Vector rowVector = new Vector();
Vector colVector = new Vector();
double[][] scoreMatrix = new double[ParaNames.MatrixSize][ParaNames.MatrixSize];
private static java.util.logging.Logger logger = java.util.logging.Logger.getLogger(RecursiveClustering.class.getName());
// #1
public RecursiveClustering(ArrayList genomeList) {
matrix = getMatrixNumber();
logger.info("Trying to run BLAST now - this may take several hours ... or days!");
logger.info("Starting ortholog detection...................................\n");
long setSearchTime = System.currentTimeMillis();
readGenomes(genomeList);
readBlasted(genomeList);
generateScoreMatrix();
long finishTime = System.currentTimeMillis();
System.out.println("\nBLAST searches + SCORE MATRIX generations took ["+((finishTime-setSearchTime)/(1000))/60+"] minutes");
logger.info("..........................................................done");
deleteFile();
deleteFiles();
}
// #2
public RecursiveClustering(ArrayList oldRunGenomeList, ArrayList runGenomeList, int m) {
System.out.println("\nRunning with pre-calculated BLAST results...........\n");
logger.info("Starting ortholog detection...................................\n");
long setSearchTime = System.currentTimeMillis();
readGenomes(oldRunGenomeList, runGenomeList);
readBlasted(runGenomeList);
generateScoreMatrix();
long finishTime = System.currentTimeMillis();
System.out.println("\nSCORE MATRIX generations took ["+((finishTime-setSearchTime)/(1000))/60+"] minutes");
logger.info("..........................................................done");
}
// #3
public RecursiveClustering(ArrayList oldRunGenomeList, ArrayList genomeList) {
System.out.println("\nRunning with pre-calculated BLAST results ...........\n");
matrix = getMatrixNumber();
logger.info("Trying to run BLAST now - this may take several hours ... or days!");
logger.info("Starting ortholog detection...................................\n");
long setSearchTime = System.currentTimeMillis();
readGenomes(oldRunGenomeList, genomeList);
readBlasted(genomeList);
generateScoreMatrix();
long finishTime = System.currentTimeMillis();
System.out.println("\nBLAST searches + SCORE MATRIX generations took ["+((finishTime-setSearchTime)/(1000))/60+"] minutes");
logger.info("..........................................................done");
deleteFile();
deleteFiles();
}
// Read genome (Genes) files
public void readGenomes(ArrayList genomeList) {
Hashtable tmp1 = new Hashtable();
Hashtable tmp2 = new Hashtable();
for (int i=0; i<genomeList.size(); ++i) {
Vector queryV = (Vector)getQuerySequence((String)genomeList.get(i));
for (int k=i; k<genomeList.size(); ++k) {
for (int j=0; j<queryV.size(); ++j) {
writeQuery((String)queryV.elementAt(j));
// gene =======> subject
ArrayList scoreList = (ArrayList)runBlast(ParaNames.Query, (String)genomeList.get(k));
tmp1 = (Hashtable)getBestScore(scoreList);
Enumeration enum1 = tmp1.keys();
while (enum1.hasMoreElements()) {
String seqNum1 = (String)enum1.nextElement();
double bestScore1 = (Double)tmp1.get(seqNum1);
String subjectSequence = getSubjectSequence((String)genomeList.get(k), Integer.parseInt(seqNum1));
//System.out.println("subjectID: "+seqNum1+" best score: "+bestScore1);//+" subjectSequence => "+subjectSequence);
//System.out.println("subjectID: ["+getGeneID(subjectSequence)+"]");
writeQuery(subjectSequence);
// gene <======= subject
scoreList = (ArrayList)runBlast(ParaNames.Query, (String)genomeList.get(i));
tmp2 = (Hashtable)getBestScore(scoreList);
Enumeration enum2 = tmp2.keys();
while (enum2.hasMoreElements()) {
String seqNum2 = (String)enum2.nextElement();
double bestScore2 = (Double)tmp2.get(seqNum2);
if ((j+1) == Integer.parseInt(seqNum2)) {
double average = (bestScore1+bestScore2)/2;
//System.out.println("queryID:["+getGeneID((String)queryV.elementAt(j))+"] "+" subjectID:["+getGeneID(subjectSequence)+"] "+" average:["+average+"]");
String gID = ((String)genomeList.get(i))+"_"+getGeneID((String)queryV.elementAt(j));
String sID = ((String)genomeList.get(k))+"_"+getGeneID(subjectSequence);
//rowV.addElement(gID);
//colV.addElement(sID);
//scoreV.addElement(average);
rowVbetween2genomes.addElement(gID);
colVbetween2genomes.addElement(sID);
scoreVbetween2genomes.addElement(average);
}
} // end of while(enum2.hasMoreElements())
} // end of while (enum1.hasMoreElements())
} // end of for (int j=0; j<queryV.size(); ++j)
writeBlastResults((String)genomeList.get(i), (String)genomeList.get(k)); // write blast results to a file
System.out.println("Done..... ortholog detection between ["+(String)genomeList.get(i)+"] genome and ["+(String)genomeList.get(k)+"] genome");
} // end of for (int k=i; k<genomeList.size(); ++k)
} // end of for (int i=0; i<genomeList.size(); ++i)
}
// Read genome (Genes) files
public void readGenomes(ArrayList oldRunGenomeList, ArrayList genomeList) {
Hashtable tmp1 = new Hashtable();
Hashtable tmp2 = new Hashtable();
for (int i=0; i<genomeList.size(); ++i) {
Vector queryV = (Vector)getQuerySequence((String)genomeList.get(i));
for (int k=i; k<genomeList.size(); ++k) {
if (oldRunGenomeList.contains(genomeList.get(i)+"_"+genomeList.get(k))) {
System.out.println("Done (Blasted)...... ortholog detection between ["+(String)genomeList.get(i)+"] genome and ["+(String)genomeList.get(k)+"] genome");
}
else if (oldRunGenomeList.contains(genomeList.get(k)+"_"+genomeList.get(i))) {
System.out.println("Done (Blasted)...... ortholog detection between ["+(String)genomeList.get(k)+"] genome and ["+(String)genomeList.get(i)+"] genome");
}
else {
for (int j=0; j<queryV.size(); ++j) {
writeQuery((String)queryV.elementAt(j));
// gene =======> subject
ArrayList scoreList = (ArrayList)runBlast(ParaNames.Query, (String)genomeList.get(k));
tmp1 = (Hashtable)getBestScore(scoreList);
Enumeration enum1 = tmp1.keys();
while (enum1.hasMoreElements()) {
String seqNum1 = (String)enum1.nextElement();
double bestScore1 = (Double)tmp1.get(seqNum1);
String subjectSequence = getSubjectSequence((String)genomeList.get(k), Integer.parseInt(seqNum1));
//System.out.println("subjectID: "+seqNum1+" best score: "+bestScore1);//+" subjectSequence => "+subjectSequence);
//System.out.println("subjectID: ["+getGeneID(subjectSequence)+"]");
writeQuery(subjectSequence);
// gene <======= subject
scoreList = (ArrayList)runBlast(ParaNames.Query, (String)genomeList.get(i));
tmp2 = (Hashtable)getBestScore(scoreList);
Enumeration enum2 = tmp2.keys();
while (enum2.hasMoreElements()) {
String seqNum2 = (String)enum2.nextElement();
double bestScore2 = (Double)tmp2.get(seqNum2);
if ((j+1) == Integer.parseInt(seqNum2)) {
double average = (bestScore1+bestScore2)/2;
//System.out.println("queryID:["+getGeneID((String)queryV.elementAt(j))+"] "+" subjectID:["+getGeneID(subjectSequence)+"] "+" average:["+average+"]");
String gID = ((String)genomeList.get(i))+"_"+getGeneID((String)queryV.elementAt(j));
String sID = ((String)genomeList.get(k))+"_"+getGeneID(subjectSequence);
//rowV.addElement(gID);
//colV.addElement(sID);
//scoreV.addElement(average);
rowVbetween2genomes.addElement(gID);
colVbetween2genomes.addElement(sID);
scoreVbetween2genomes.addElement(average);
}
} // end of while(enum2.hasMoreElements())
} // end of while (enum1.hasMoreElements())
} // end of for (int j=0; j<queryV.size(); ++j)
writeBlastResults((String)genomeList.get(i), (String)genomeList.get(k)); // write blast results to a file
System.out.println("Done................ ortholog detection between ["+(String)genomeList.get(i)+"] genome and ["+(String)genomeList.get(k)+"] genome");
} // else
} // end of for (int k=i; k<genomeList.size(); ++k)
} // end of for (int i=0; i<genomeList.size(); ++i)
}
public Vector getQuerySequence(String genome) {
String gene = "";
String geneSequence = "";
Vector geneSequenceV = new Vector();
try {
BufferedReader in = new BufferedReader(new FileReader(ParaNames.Species+genome));
while ((gene=in.readLine()) != null) {
if (gene.indexOf(">") > -1) {
if (geneSequence != "") {
geneSequenceV.addElement(geneSequence);
geneSequence = "";
}
}
geneSequence += (gene+"\n");
}
geneSequenceV.addElement(geneSequence);
in.close(); in = null;
}
catch (IOException ioe) {
System.err.println("Could not open file "+ParaNames.Species+genome);
ioe.printStackTrace();
//throw ioe;
}
return geneSequenceV;
}
public void generateScoreMatrix() {
for (int i=0; i<rowV.size(); ++i) {
//System.out.println("===== "+(i+1)+"th =====");
getMatrixes((String)rowV.elementAt(i));
//scoreV.setElementAt(1.0, 0);
//getMatrixes4((String)colV.elementAt(i));
writeScoreMatrix();
// Initialize
for (int r=0; r<rowVector.size(); ++r)
for (int c=0; c<colVector.size(); ++c)
scoreMatrix[r][c] = 0.0;
rowVector = new Vector();
colVector = new Vector();
}
writeNumMatrix();
}
public void getMatrixes(String searchID) {
for (int i=0; i<rowV.size(); ++i) {
if (searchID.equals((String)rowV.elementAt(i)) && ((Double)scoreV.elementAt(i)) != 0.0) {
//System.out.println("1; "+(String)rowV.elementAt(i)+" "+(String)colV.elementAt(i));
generateMatrix((String)rowV.elementAt(i), (String)colV.elementAt(i), (Double)scoreV.elementAt(i));
scoreV.setElementAt(0.0, i);
getMatrixes2((String)colV.elementAt(i));
getMatrixes((String)colV.elementAt(i));
}
}
}
public void getMatrixes2(String searchID) {
for (int i=0; i<colV.size(); ++i) {
if (searchID.equals((String)colV.elementAt(i)) && ((Double)scoreV.elementAt(i)) != 0.0) {
//System.out.println("2; "+(String)rowV.elementAt(i)+" "+(String)colV.elementAt(i));
generateMatrix((String)rowV.elementAt(i), (String)colV.elementAt(i), (Double)scoreV.elementAt(i));
scoreV.setElementAt(0.0, i);
getMatrixes3((String)rowV.elementAt(i));
getMatrixes2((String)rowV.elementAt(i));
}
}
}
public void getMatrixes3(String searchID) {
for (int i=0; i<rowV.size(); ++i) {
if (searchID.equals((String)rowV.elementAt(i)) && ((Double)scoreV.elementAt(i)) != 0.0) {
//System.out.println("3; "+(String)rowV.elementAt(i)+" "+(String)colV.elementAt(i));
generateMatrix((String)rowV.elementAt(i), (String)colV.elementAt(i), (Double)scoreV.elementAt(i));
scoreV.setElementAt(0.0, i);
getMatrixes3((String)colV.elementAt(i));
}
}
}
public void getMatrixes4(String searchID) {
for (int i=0; i<colV.size(); ++i) {
if (searchID.equals((String)colV.elementAt(i)) && ((Double)scoreV.elementAt(i)) != 0.0) {
//System.out.println("4; "+(String)rowV.elementAt(i)+" "+(String)colV.elementAt(i));
generateMatrix((String)rowV.elementAt(i), (String)colV.elementAt(i), (Double)scoreV.elementAt(i));
scoreV.setElementAt(0.0, i);
getMatrixes5((String)rowV.elementAt(i));
getMatrixes4((String)rowV.elementAt(i));
}
}
}
public void getMatrixes5(String searchID) {
for (int i=0; i<colV.size(); ++i) {
if (searchID.equals((String)rowV.elementAt(i)) && ((Double)scoreV.elementAt(i)) != 0.0) {
//System.out.println("5; "+(String)rowV.elementAt(i)+" "+(String)colV.elementAt(i));
generateMatrix((String)rowV.elementAt(i), (String)colV.elementAt(i), (Double)scoreV.elementAt(i));
scoreV.setElementAt(0.0, i);
getMatrixes6((String)colV.elementAt(i));
getMatrixes5((String)colV.elementAt(i));
}
}
}
public void getMatrixes6(String searchID) {
for (int i=0; i<rowV.size(); ++i) {
if (searchID.equals((String)colV.elementAt(i)) && ((Double)scoreV.elementAt(i)) != 0.0) {
//System.out.println("6; "+(String)rowV.elementAt(i)+" "+(String)colV.elementAt(i));
generateMatrix((String)rowV.elementAt(i), (String)colV.elementAt(i), (Double)scoreV.elementAt(i));
scoreV.setElementAt(0.0, i);
getMatrixes6((String)rowV.elementAt(i));
}
}
}
public void generateMatrix(String rid, String cid, double score) {
if (!rowVector.contains(rid)) {
row = rowVector.size();
rowVector.addElement(rid);
}
else
row = rowVector.indexOf(rid);
if (!colVector.contains(rid))
colVector.addElement(rid);
if (!colVector.contains(cid)) {
col = colVector.size();
colVector.addElement(cid);
}
else
col = colVector.indexOf(cid);
if (!rowVector.contains(cid))
rowVector.addElement(cid);
scoreMatrix[row][col] = score;
scoreMatrix[col][row] = score;
}
public String getGeneID(String seq) {
int geneIDstart = seq.indexOf("|");
int geneIDend = seq.indexOf("|", geneIDstart+1);
String geneID = seq.substring(geneIDstart+1, geneIDend);
return geneID;
}
public ArrayList runBlast(String query, String subject) {
ArrayList scoreList = new ArrayList();
Runtime rt = Runtime.getRuntime();
subject = ParaNames.Species+subject;
try {
Process proc = rt.exec(new String[] {"/Users/guest/Downloads/ncbi-blast-2.2.30+/bin/blastp", "-query", query, "-subject", subject, "-num_threads", "4", "-matrix", matrix, "-outfmt", "10 qseqid sseqid score"});
InputStream is = proc.getInputStream();
InputStream es = proc.getErrorStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
BufferedReader readerError = new BufferedReader(new InputStreamReader(es));
String line;
while ((line = reader.readLine()) != null) {
scoreList.add(line);
}
if (proc.waitFor() != 0) {
System.err.println("Process exited with (normal termination: 0) "+proc.exitValue());
System.err.println("Error: "+readerError.readLine());
}
is.close(); is = null;
es.close(); es = null;
reader.close(); reader = null;
readerError.close(); readerError = null;
proc.destroy(); proc = null;
}
catch (InterruptedException e) {
System.err.println("Error: "+e.getMessage());
}
catch (IOException ioe) {
System.err.println("Failed to execute: "+ioe.getMessage());
}
return scoreList;
}
public Hashtable getBestScore(ArrayList scoreList) {
double bestScore = -1.0;
Hashtable tmp = new Hashtable();
Hashtable geneIDs2bestScore = new Hashtable();
for (int i=0; i<scoreList.size(); ++i) {
String result = (String)scoreList.get(i);
// read subjectID
int subjectIDstart = result.indexOf(",");
int subjectIDend = result.indexOf(",", subjectIDstart+1);
String subjectID = result.substring(subjectIDstart+1, subjectIDend);
int subjectSeqNumStart = subjectID.indexOf("_");
String seqNum = subjectID.substring(subjectSeqNumStart+1, subjectID.length());
// read score
double score = Double.parseDouble(result.substring(subjectIDend+1, result.length()));
if (score >= bestScore) {
bestScore = score;
tmp.put(seqNum, score);
}
}
Enumeration enumeration = tmp.keys();
while (enumeration.hasMoreElements()) {
String seqNum2 = (String)enumeration.nextElement();
double bestScore2 = (Double)tmp.get(seqNum2);
if (bestScore == bestScore2) // && bestScore != -1.0)
geneIDs2bestScore.put(seqNum2, bestScore);
}
return geneIDs2bestScore;
}
public String getSubjectSequence(String genome, int seqNum) {
int cnt = 0;
String gene = "";
String subjectSequence = "";
try {
BufferedReader in = new BufferedReader(new FileReader(ParaNames.Species+genome));
while ((gene=in.readLine()) != null) {
if (gene.indexOf(">") > -1) {
++cnt;
if (cnt == seqNum)
subjectSequence += (gene+"\n");
}
else {
if (cnt == seqNum)
subjectSequence += (gene+"\n");
}
if (cnt > seqNum)
break;
}
in.close(); in = null;
}
catch (IOException ioe) {
System.err.println("Could not open file "+ParaNames.Species+genome);
ioe.printStackTrace();
//throw ioe;
}
return subjectSequence;
}
public void writeQuery(String query) {
try {
PrintWriter pw = new PrintWriter(new FileOutputStream(ParaNames.Query));
pw.write(query);
pw.close(); pw = null;
}
catch (IOException ioe) {
ioe.printStackTrace();
}
}
public void writeNumMatrix() {
try {
PrintWriter pw = new PrintWriter(new FileOutputStream(ParaNames.NumMatrices));
pw.write(Integer.toString(num));
pw.write("\n");
pw.close(); pw = null;
}
catch (IOException ioe) {
ioe.printStackTrace();
}
}
public void writeScoreMatrix() {
if (rowVector.size() > 2) {
++num;
try {
PrintWriter pw = new PrintWriter(new FileOutputStream(ParaNames.ScoreMatrices+num));
for (int i=1; i<=colVector.size(); ++i)
pw.write(" "+Integer.toString(i));
pw.write("\n");
for (int i=0; i<rowVector.size(); ++i) {
pw.write((String)rowVector.elementAt(i)+" ");
for (int j=0; j<colVector.size(); ++j)
pw.write(Double.toString((Double)scoreMatrix[i][j])+" ");
pw.write("\n");
}
pw.close(); pw = null;
}
catch (IOException ioe) {
ioe.printStackTrace();
}
}
}
public void readBlasted(ArrayList gList) {
String list = new String();
String eGenomeList = new String();
File folder = new File(ParaNames.Blasted);
ArrayList oldRunList = new ArrayList();
File[] listOfFiles = folder.listFiles();
for (int i=0; i<listOfFiles.length; i++) {
if (listOfFiles[i].isFile()) {
String fName = ((String)listOfFiles[i].getName()).trim();
StringTokenizer st = new StringTokenizer(fName, "_");
if (((String)st.nextToken()).equals("rowlist")) {
String f_Genome = st.nextToken();
String s_Genome = st.nextToken();
oldRunList.add(f_Genome+"_"+s_Genome);
//System.out.println(f_Genome+"_"+s_Genome);
}
}
}
try {
for (int i=0; i<gList.size(); ++i)
for (int j=i; j<gList.size(); ++j) {
if (oldRunList.contains(gList.get(i)+"_"+gList.get(j))) {
eGenomeList = gList.get(i)+"_"+gList.get(j);
}
else if (oldRunList.contains(gList.get(j)+"_"+gList.get(i))) {
eGenomeList = gList.get(j)+"_"+gList.get(i);
}
BufferedReader in = new BufferedReader(new FileReader(ParaNames.Rows+"_"+eGenomeList));
while ((list = in.readLine()) != null) {
rowV.addElement(list);
}
//System.out.println("row vector size : " + rowV.size());
//System.out.println(ParaNames.Rows+"_"+eGenomeList);
in = new BufferedReader(new FileReader(ParaNames.Cols+"_"+eGenomeList));
while ((list = in.readLine()) != null) {
colV.addElement(list);
}
//System.out.println("col vector size : " + colV.size());
in = new BufferedReader(new FileReader(ParaNames.Scores+"_"+eGenomeList));
while ((list = in.readLine()) != null) {
scoreV.addElement(Double.parseDouble(list));
}
//System.out.println("score vector size : " + scoreV.size());
in.close(); in = null;
//StringTokenizer st = new StringTokenizer(eGenomeList, "_");
//System.out.println("Done..... ortholog detection between ["+st.nextToken()+"] genome and ["+st.nextToken()+"] genome");
}
}
catch (IOException ioe) {
//System.err.println("Could not open file "+ParaNames.Rows+"_"+eGenomeList);
//System.err.println("Could not open file "+ParaNames.Cols+"_"+eGenomeList);
//System.err.println("Could not open file "+ParaNames.Scores+"_"+eGenomeList);
ioe.printStackTrace();
//throw ioe;
}
}
public void writeBlastResults(String genomeName1, String genomeName2) {
try {
PrintWriter pw = new PrintWriter(new FileOutputStream(ParaNames.Rows+"_"+genomeName1+"_"+genomeName2));
for (int i=0; i<rowVbetween2genomes.size(); ++i)
pw.write((String)rowVbetween2genomes.elementAt(i)+"\n");
pw.close(); pw = null;
pw = new PrintWriter(new FileOutputStream(ParaNames.Cols+"_"+genomeName1+"_"+genomeName2));
for (int i=0; i<colVbetween2genomes.size(); ++i)
pw.write((String)colVbetween2genomes.elementAt(i)+"\n");
pw.close(); pw = null;
pw = new PrintWriter(new FileOutputStream(ParaNames.Scores+"_"+genomeName1+"_"+genomeName2));
for (int i=0; i<scoreVbetween2genomes.size(); ++i)
pw.write(Double.toString((Double)scoreVbetween2genomes.elementAt(i))+"\n");
pw.close(); pw = null;
rowVbetween2genomes = new Vector();
colVbetween2genomes = new Vector();
scoreVbetween2genomes = new Vector();
}
catch (IOException ioe) {
ioe.printStackTrace();
}
}
public String getMatrixNumber() {
String matrix_number = "BLOSUM62"; // Assign initial (default) value of MATRIX_NUMBER
System.out.print("\n>>>>> Enter a matrix number:\n1. BLOSUM45\n2. BLOSUM62\n3. BLOSUM80\n\n");
System.out.flush();
try {
BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));
matrix_number = (stdin.readLine()).trim();
if (matrix_number.equals(null) || matrix_number.equals(""))
matrix_number = "BLOSUM62";
else if (matrix_number.equals("1") || matrix_number.equalsIgnoreCase("BLOSUM45"))
matrix_number = "BLOSUM45";
else if (matrix_number.equals("2") || matrix_number.equalsIgnoreCase("BLOSUM62"))
matrix_number = "BLOSUM62";
else if (matrix_number.equals("3") || matrix_number.equalsIgnoreCase("BLOSUM80"))
matrix_number = "BLOSUM80";
else {
System.out.println("Wrong typing! Try again!");
System.exit(0);
}
System.out.println("\nMatrix number is : "+ matrix_number+"\n");
}
catch (IOException ioe) {
//ioe.printStackTrace();
}
return matrix_number;
}
public void deleteFile() {
File f = new File(ParaNames.Query);
if (!f.exists())
throw new IllegalArgumentException("Delete: no such file: " + ParaNames.Query);
boolean success = f.delete();
if (!success)
throw new IllegalArgumentException("Delete: deletion failed");
f = null;
}
public void deleteFiles() {
File f;
for (int i=num+1; ; ++i) {
f = new File(ParaNames.ScoreMatrices+i);
if (!f.exists())
break; //throw new IllegalArgumentException("Delete: no such file: " + ParaNames.ScoreMatrices+num);
boolean success = f.delete();
if (!success)
throw new IllegalArgumentException("Delete: deletion failed");
f = null;
}
}
public static void main(String[] args) {
int cnt = 0;
String list = new String();
try {
System.out.println("\n>>> Select genomes to detect orthologs: (e.g. 1 2 3 TESTTEST 4 5 or 1-5)");
File folder = new File(ParaNames.Species);
ArrayList allGenomeList = new ArrayList();
File[] listOfFiles = folder.listFiles();
for (int i=0; i<listOfFiles.length; i++) {
if (listOfFiles[i].isFile()) {
allGenomeList.add(((String)listOfFiles[i].getName()).trim());
System.out.println(Integer.toString(++cnt)+". "+listOfFiles[i].getName());
}
}
System.out.print("\n");
System.out.flush();
BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));
String genome_list = (stdin.readLine()).trim();
String gName = "";
ArrayList runGenomeList = new ArrayList();
System.out.print("\nSelected genomes: ");
// read range
int idx = genome_list.indexOf("-");
if (idx != -1) {
int first = Integer.parseInt((genome_list.substring(0, idx)).trim());
int last = Integer.parseInt((genome_list.substring(idx+1, genome_list.length())).trim());
if (last > allGenomeList.size() || first > allGenomeList.size()) {
System.out.println("\nWrong typing! Try again!\n");
System.exit(0);
}
if (first > last) {
int tmp = first;
first = last;
last = tmp;
}
for (int i=first-1; i<last; ++i) {
gName = (String)allGenomeList.get(i);
runGenomeList.add(gName);
System.out.print(gName+" ");
}
}
else {
//System.out.print("\nSelected genomes are: ");
//ArrayList runGenomeList = new ArrayList();
StringTokenizer st = new StringTokenizer(genome_list);
while (st.hasMoreTokens()) {
int i = Integer.parseInt(st.nextToken())-1;
if (i >= allGenomeList.size()) {
System.out.println(Integer.toString(i+1)+"th...\nWrong number! Try again!");
System.exit(0);
}
gName = (String)allGenomeList.get(i);
runGenomeList.add(gName);
System.out.print(gName+" ");
}
}
System.out.print("\n");
if (runGenomeList.size() == 0) {
System.out.println("Wrong typing! Try again!");
System.exit(0);
}
if (runGenomeList.size() == 1) {
System.out.println(">>>>> Just ONE genome selected! Continue? (Y or N)");
stdin = new BufferedReader(new InputStreamReader(System.in));
if (((String)stdin.readLine()).equalsIgnoreCase("Y"));
else {
System.out.println("\nOkay, quiting.......");
System.exit(0);
}
}
folder = new File(ParaNames.Blasted);
ArrayList oldRunList = new ArrayList();
listOfFiles = folder.listFiles();
for (int i=0; i<listOfFiles.length; i++) {
if (listOfFiles[i].isFile()) {
String fName = ((String)listOfFiles[i].getName()).trim();
StringTokenizer st = new StringTokenizer(fName, "_");
if (((String)st.nextToken()).equals("rowlist")) {
String f_Genome = st.nextToken();
String s_Genome = st.nextToken();
oldRunList.add(f_Genome+"_"+s_Genome);
//System.out.println(f_Genome+"_"+s_Genome);
}
}
}
System.out.print("\n");
System.out.flush();
boolean existing = true;
for (int i=0; i<runGenomeList.size(); ++i) {
for (int j=i; j<runGenomeList.size(); ++j) {
if (!oldRunList.contains(runGenomeList.get(i)+"_"+runGenomeList.get(j)) && !oldRunList.contains(runGenomeList.get(j)+"_"+runGenomeList.get(i))) {
existing = false;
break;
}
}
}
String default_run = "1"; // Assign initial (default) run value
RecursiveClustering recursiveClustering;
// #1
if (oldRunList.size()==0) {
System.out.print("\n>>>>> Enter a number:\n1. [ RUN ] ortholog detection\n2. [ Exit ] ortholog detection.......\n\n");
System.out.flush();
default_run = stdin.readLine();
if (default_run.equals(null) || default_run.equals(""))
default_run = "1";
else if (default_run.equals("1"))
recursiveClustering = new RecursiveClustering(runGenomeList); // #1
else if (default_run.equals("2")) {
System.out.println("Okay, quiting.......\n");
System.exit(0);
}
else {
System.out.println("Wrong typing! Try again!\n");
System.exit(0);
}
}
else {
// #2
if (existing) {
/*
System.out.print("=> [ Genomes ] which have [ pre-calculated blast results ]: ");
for (int i=0; i<runGenomeList.size(); ++i) {
System.out.print(runGenomeList.get(i)+" ");
}
*/
System.out.print("\n\n>>>>> Enter a number:\n1. [ RUN ] ortholog detection [ Using ] pre-calculated blast results [ for efficiency ]\n2. [ RUN ] ortholog detection [ Not Using ] pre-calculated blast results\n3. [ Exit ] ortholog detection.......\n\n");
System.out.flush();
default_run = stdin.readLine();
if (default_run.equals(null) || default_run.equals(""))
default_run = "1";
else if (default_run.equals("1"))
recursiveClustering = new RecursiveClustering(oldRunList, runGenomeList, 1); // #2
else if (default_run.equals("2"))
recursiveClustering = new RecursiveClustering(runGenomeList); // #1
else if (default_run.equals("3")) {
System.out.println("Okay, quiting.......\n");
System.exit(0);
}
else {
System.out.println("Wrong typing! Try again!\n");
System.exit(0);
}
}
else {
// #3
System.out.print("\n>>>>> Enter a number:\n1. [ RUN ] ortholog detection [ with only ] selected genomes [ Using ] pre-calculated blast results [ for efficiency ]\n2. [ RUN ] ortholog detection [ with only ] selected genomes [ Not Using ] pre-calculated blast results\n3. [ RUN ] ortholog detection [ among ] selected genomes and other existing genomes wtih pre-calculated blast results\n4. [ Exit ] ortholog detection.......\n\n");
System.out.flush();
default_run = stdin.readLine();
if (default_run.equals(null) || default_run.equals(""))
default_run = "1";
else if (default_run.equals("1"))
recursiveClustering = new RecursiveClustering(oldRunList, runGenomeList); // #3
else if (default_run.equals("2"))
recursiveClustering = new RecursiveClustering(runGenomeList); // #1
else if (default_run.equals("3"))
recursiveClustering = new RecursiveClustering(oldRunList, allGenomeList); // #3
else if (default_run.equals("4")) {
System.out.println("Okay, quiting.......");
System.exit(0);
}
else {
System.out.println("Wrong typing! Try again!\n");
System.exit(0);
}
}
}
}
catch (IOException ioe) {
System.err.println("Could not open directory "+ParaNames.Species);
System.err.println("Could not open directory "+ParaNames.Blasted);
//ioe.printStackTrace();
}
catch (NumberFormatException numForEx) {
System.out.println("\nWrong typing! Try again!\n");
System.exit(0);
}
}
}

I tried emailing a while back, but I haven't received a response yet.

Here is my input:

zimings-mac-pro:Linux guest$ bash runRecursiveClustering.sh

>>> Select genomes to detect orthologs: (e.g. 1 2 3 TESTTEST 4 5 or 1-5)

1. AAE
2. CAC
3. ECO
4. ECU
5. HIN
6. LLA
7. SCE
8. SPO
9. SPY
10. SYN
11. TMA
12. YPE

1-3

Selected genomes: AAE CAC ECO

>>>>> Enter a number:

1. [ RUN ] ortholog detection [ Using ] pre-calculated blast results [ for efficiency ]
2. [ RUN ] ortholog detection [ Not Using ] pre-calculated blast results
3. [ Exit ] ortholog detection.......

2

>>>>> Enter a matrix number:

1. BLOSUM45
2. BLOSUM62
3. BLOSUM80

1

Matrix number is : BLOSUM45
May 20, 2015 2:16:48 PM ReMark.RecursiveClustering <init>
INFO: Trying to run BLAST now - this may take several hours ... or days!
May 20, 2015 2:16:48 PM ReMark.RecursiveClustering <init>
INFO: Starting ortholog detection...................................
Wrong typing! Try again!
ADD REPLY
0
Entering edit mode

Sorry, but it looks like it is some problem with CLI IO which will be really difficult to figure out from the code you've provided. PS Moving this to answer as it seems that the problem with BLAST executable path is fixed

ADD REPLY

Login before adding your answer.

Traffic: 1251 users visited in the last hour
Help About
FAQ
Access RSS
API
Stats

Use of this site constitutes acceptance of our User Agreement and Privacy Policy.

Powered by the version 2.3.6