/*
*
* created: Wed Aug 3 2004
*
* This file is part of Artemis
*
* Copyright(C) 2000 Genome Research Limited
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or(at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*
*/
package uk.ac.sanger.artemis.editor;
import uk.ac.sanger.artemis.Options;
import uk.ac.sanger.artemis.util.StringVector;
import javax.swing.*;
import javax.swing.border.Border;
import java.util.StringTokenizer;
import java.io.StringReader;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.awt.*;
import java.net.URL;
import java.net.MalformedURLException;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.util.Vector;
import java.util.Enumeration;
import java.util.Hashtable;
public class DataCollectionPane extends JScrollPane
implements FastaListener
{
/** */
private static final long serialVersionUID = 1L;
private FastaTextPane fastaTextPane;
private Annotation ann;
private JDesktopPane desktop;
private DataViewInternalFrame dataView;
protected static String srs_url = getSrsSite();
private static org.apache.log4j.Logger logger4j =
org.apache.log4j.Logger.getLogger(FastaTextPane.class);
/**
*
* @param fastaTextPane fasta/blast display.
* @param ann annotation display.
* @param desktop desktop pane.
*
*/
public DataCollectionPane(FastaTextPane fastaTextPane,
Annotation ann, JDesktopPane desktop,
DataViewInternalFrame dataView)
{
super();
this.fastaTextPane = fastaTextPane;
this.ann = ann;
this.desktop = desktop;
this.dataView = dataView;
// getSrsSite();
Box bdown = Box.createVerticalBox();
ScrollPanel scrollPanel = new ScrollPanel();
scrollPanel.add(bdown);
Vector hitInfoCollection = fastaTextPane.getHitCollection();
Hashtable goHash = getIDHash(hitInfoCollection);
getGoHash("/nfs/disk222/yeastpub/analysis/pathogen/GO/go.flat",goHash);
setResultLines(bdown,hitInfoCollection,goHash);
setViewportView(scrollPanel);
setPreferredSize(new Dimension(500,300));
}
public static String getSrsSite()
{
StringVector srs = Options.getOptions().getOptionValues("srs_url");
if(srs != null)
srs_url = (String)srs.elementAt(0);
else
srs_url = "http://srs.ebi.ac.uk/srsbin/cgi-bin/";
return srs_url;
}
/**
*
* fasta/blast results changed.
*
*/
public void update()
{
Box bdown = Box.createVerticalBox();
ScrollPanel scrollPanel = new ScrollPanel();
scrollPanel.add(bdown);
Vector hitInfoCollection = fastaTextPane.getHitCollection();
Hashtable goHash = getIDHash(hitInfoCollection);
getGoHash("/nfs/disk222/yeastpub/analysis/pathogen/GO/go.flat",goHash);
setResultLines(bdown,hitInfoCollection,goHash);
setViewportView(scrollPanel);
}
/**
*
* @param bdown vertical Box containing all one line results.
* @param hitInfoCollection Collection of HitInfo from results.
* @param goHash Hash of GO ID's with description.
*
*/
private void setResultLines(Box bdown, Vector hitInfoCollection,
Hashtable goHash)
{
final Vector orthoCheckBox = new Vector();
Enumeration hitEnum = hitInfoCollection.elements();
while(hitEnum.hasMoreElements())
{
Box bacross = Box.createHorizontalBox();
final HitInfo hit = (HitInfo)hitEnum.nextElement();
// ortholog / paralog
final JCheckBox orthoBox = new JCheckBox("ORTH");
orthoBox.setFont(BigPane.font_sm);
final JCheckBox paraBox = new JCheckBox("PARA");
paraBox.setFont(BigPane.font_sm);
orthoBox.setMargin(new Insets(1,1,1,1));
paraBox.setMargin(new Insets(1,1,1,1));
orthoBox.setActionCommand(hit.getAcc());
orthoCheckBox.add(orthoBox);
bacross.add(orthoBox);
orthoBox.setFont(BigPane.font);
orthoBox.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
Enumeration checkEnum = orthoCheckBox.elements();
while(checkEnum.hasMoreElements())
{
JCheckBox cb = (JCheckBox)checkEnum.nextElement();
if( cb.isSelected() &&
!cb.getActionCommand().equals(orthoBox.getActionCommand()))
{
cb.setSelected(false);
ann.delete(cb.getActionCommand(),true);
}
}
if(orthoBox.isSelected())
{
if(paraBox.isSelected())
{
paraBox.setSelected(false);
ann.delete(hit.getAcc(),false);
}
try
{
setAnnotation(hit,ann,fastaTextPane.getFormat(),true);
}
catch(NullPointerException npe)
{
JOptionPane.showMessageDialog(DataCollectionPane.this,
"There may be a probelem retrieving "+hit.getAcc()+
"\nfrom SRS",
"Connection Error to SRS?",
JOptionPane.WARNING_MESSAGE);
}
}
else
ann.delete(hit.getAcc(),true);
ann.deleteNote();
if(BigPane.addNote.isSelected())
dataView.updateNote();
}
});
bacross.add(paraBox);
paraBox.setFont(BigPane.font);
paraBox.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
if(paraBox.isSelected())
{
if(orthoBox.isSelected())
{
orthoBox.setSelected(false);
ann.delete(hit.getAcc(),true);
}
try
{
setAnnotation(hit,ann,fastaTextPane.getFormat(),false);
}
catch(NullPointerException npe)
{
JOptionPane.showMessageDialog(DataCollectionPane.this,
"There may be a probelem retrieving "+hit.getAcc()+
"\nfrom SRS",
"Connection Error to SRS?",
JOptionPane.WARNING_MESSAGE);
}
}
else
ann.delete(hit.getAcc(),false);
ann.deleteNote();
if(BigPane.addNote.isSelected())
dataView.updateNote();
}
});
// go to alignment
MouseOverButton butt = new MouseOverButton();
butt.setPreferredSize(new Dimension(12,12));
butt.setBorderPainted(false);
butt.setToolTipText("Go to alignment");
butt.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
fastaTextPane.show(hit);
}
});
bacross.add(butt);
bacross.add(Box.createHorizontalStrut(2));
// SRS entry
MouseOverButton srsRetrieve = new MouseOverButton(hit);
srsRetrieve.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
getSRSEntry(hit,desktop);
}
});
srsRetrieve.setForeground(Color.blue);
srsRetrieve.setToolTipText("");
srsRetrieve.setFont(BigPane.font);
srsRetrieve.setMargin(new Insets(1,1,1,1));
srsRetrieve.setBorderPainted(false);
bacross.add(srsRetrieve);
//
// String org = hit.getOrganism();
// if(org != null)
// {
// JLabel orgLabel = new JLabel(org);
// orgLabel.setFont(BigPane.font);
// orgLabel.setForeground(Color.green);
// bacross.add(orgLabel);
// }
// heading
String head = hit.getHeader();
if(head.startsWith(hit.getID()))
head = head.substring(hit.getID().length());
JLabel hiLabel = new JLabel(head);
hiLabel.setFont(BigPane.font);
hiLabel.setForeground(Color.black);
// hiLabel.setForeground(Color.red);
// align button
// final JButton selectButt = new JButton("ALIGN");
// selectButt.setMargin(new Insets(1,1,1,1));
// selectButt.addActionListener(new ActionListener()
// {
// public void actionPerformed(ActionEvent e)
// {
// fastaTextPane.show(hit);
// }
// });
// selectButt.setFont(BigPane.font);
// retrieve srs entry
// JButton srsButt = new JButton("->SRS");
// srsButt.setMargin(new Insets(1,1,1,1));
// srsButt.addActionListener(new ActionListener()
// {
// public void actionPerformed(ActionEvent e)
// {
// getSRSEntry(hit,desktop);
// }
// });
// srsButt.setFont(BigPane.font);
bacross.add(hiLabel);
// bacross.add(selectButt);
// bacross.add(srsButt);
bacross.add(Box.createHorizontalGlue());
bdown.add(bacross);
// go entry
Vector gov = hit.getGO();
if(gov != null)
{
Enumeration gov_enum = gov.elements();
while(gov_enum.hasMoreElements())
{
final String go_id = ((String)gov_enum.nextElement()).trim();
bacross = Box.createHorizontalBox();
final String goLine = (String)goHash.get(go_id);
final JCheckBox goBox = new JCheckBox();
goBox.setSelected(false);
goBox.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
if(goBox.isSelected())
{
String go_term = hit.getGoAssociation(go_id);
if(go_term == null)
{
go_term = setGoAnnotation(ann,hit,go_id,goLine);
// hit.setGoAssociation(go_id,go_term);
}
else
ann.insert(go_term,false);
}
else
{
// possibly 2 line to delete
ann.deleteGo(hit.getAcc(),go_id);
ann.deleteGo(hit.getAcc(),go_id);
}
}
});
goBox.setMargin(new Insets(0,1,0,1));
MouseOverButton goButton = new MouseOverButton("GO:"+go_id);
goButton.setFont(BigPane.font);
goButton.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
String go_cmd = "http://www.godatabase.org/cgi-bin/amigo/go.cgi?query=GO%3A"+go_id;
BrowserControl.displayURL(go_cmd);
if(BigPane.srsTabPane.isSelected())
{
try
{
setUpSRSFrame(new URL(go_cmd),go_id,desktop);
}
catch(java.net.ConnectException connect)
{
JOptionPane.showMessageDialog(DataCollectionPane.this,
"Cannot retrieve "+go_id+
"\nConnection failed to:\n"+go_cmd,
"Connection Error",
JOptionPane.WARNING_MESSAGE);
}
catch(Exception exp)
{
exp.printStackTrace();
}
}
}
});
goButton.setForeground(Color.blue);
goButton.setMargin(new Insets(1,1,1,1));
goButton.setBorderPainted(false);
bacross.add(Box.createHorizontalStrut(10));
bacross.add(goBox);
bacross.add(goButton);
goButton.setMargin(new Insets(0,1,0,1));
JLabel goLabel = new JLabel(goLine);
goLabel.setFont(BigPane.font);
bacross.add(goLabel);
bdown.add(bacross);
bacross.add(Box.createHorizontalGlue());
}
}
}
}
/**
*
* @param hit HitInfo for a single hit.
* @param desktop desktop pane.
*
*/
private void getSRSEntry(HitInfo hit, JDesktopPane desktop)
{
String srscmd = "/wgetz?-e+";
if(hit.getID() != null)
{
String search = hit.getID();
srscmd = srscmd.concat("[{uniprot}-ID:"+search+"*]");
if(hit.getAcc() != null)
srscmd = srscmd.concat("|[{uniprot}-AccNumber:"+hit.getAcc()+"*]");
if(srs_url.indexOf("ebi.ac.uk") > -1)
srscmd = srscmd + "+-vn+2";
if(BigPane.srsBrowser.isSelected())
BrowserControl.displayURL(srs_url+srscmd);
try
{
URL url = new URL(srs_url+srscmd);
if(BigPane.srsTabPane.isSelected())
setUpSRSFrame(url,search,desktop);
if(BigPane.srsWin.isSelected())
{
int hgt = (2*desktop.getHeight())/3;
Annotation edPane = new Annotation(url);
JScrollPane jsp = new JScrollPane(edPane);
JInternalFrame jif = new JInternalFrame("SRS "+search,
true, //resizable
true, //closable
true, //maximizable
true);//iconifiable);
JMenuBar menuBar = new JMenuBar();
menuBar.add(new CommonMenu(jif));
jif.setJMenuBar(menuBar);
jif.getContentPane().add(jsp);
jif.setLocation(0,0);
jif.setSize(800,hgt);
jif.setVisible(true);
desktop.add(jif);
}
}
catch(java.net.ConnectException connect)
{
JOptionPane.showMessageDialog(DataCollectionPane.this,
"Cannot retrieve "+search+
"\nConnection failed to:\n"+srs_url+srscmd,
"Connection Error",
JOptionPane.WARNING_MESSAGE);
}
catch(Exception exp)
{
exp.printStackTrace();
}
}
else
JOptionPane.showMessageDialog(DataCollectionPane.this,
"No ID to retrieve SRS entry!", "Missing ID",
JOptionPane.INFORMATION_MESSAGE);
}
/**
*
* @param url URL to be displayed.
* @param name URL name.
* @param desktop desktop pane.
*
*/
protected static void setUpSRSFrame(URL url, String name, JDesktopPane desktop)
throws IOException
{
if(BigPane.srsFrame == null)
{
BigPane.setUpSRSFrame((2*desktop.getHeight())/3,desktop);
Border loweredbevel = BorderFactory.createLoweredBevelBorder();
Border raisedbevel = BorderFactory.createRaisedBevelBorder();
Border compound = BorderFactory.createCompoundBorder(raisedbevel,loweredbevel);
JTextField statusField = new JTextField();
statusField.setBorder(compound);
statusField.setEditable(false);
BigPane.srsFrame.getContentPane().add(statusField, BorderLayout.SOUTH);
}
Annotation edPane = new Annotation(url);
JScrollPane jsp = new JScrollPane(edPane);
JTabbedPane jtab = (JTabbedPane)BigPane.srsFrame.getContentPane().getComponent(0);
jtab.insertTab(name, null,jsp,null,0);
BigPane.srsFrame.setVisible(true);
}
/*private HitInfo findHitInfo(String acc)
{
Enumeration hitEnum = fastaTextPane.getHitCollection().elements();
while(hitEnum.hasMoreElements())
{
HitInfo hit = (HitInfo)hitEnum.nextElement();
if(acc.equals(hit.getID()))
return hit;
}
return null;
}*/
/**
*
* @param hit HitInfo for a single hit.
* @param ortholog true if ortholog is selected.
*
*/
private static void getzCall(HitInfo hit, boolean ortholog)
{
final String env[] = { "PATH=/usr/local/pubseq/bin/" };
if(hit.getOrganism() == null ||
hit.getDescription() == null)
{
String res = null;
if(FastaTextPane.isRemoteMfetch())
{
String cmd =
"mfetch -f \"org des gen\" -d uniprot -i \"acc:"+hit.getID()+"\"" ;
uk.ac.sanger.artemis.j2ssh.SshPSUClient ssh =
new uk.ac.sanger.artemis.j2ssh.SshPSUClient(cmd);
ssh.run();
res = ssh.getStdOut();
}
else if(!FastaTextPane.getMfetchExecutable().exists())
{
try
{
final String queryURL = DataCollectionPane.srs_url+
"/wgetz?-f+acc%20org%20description%20gen+"+
"[uniprot:"+hit.getAcc()+"]|[uniprot:"+hit.getID()+"]";
logger4j.debug(queryURL);
URL wgetz = new URL(queryURL);
InputStream in = wgetz.openStream();
BufferedReader strbuff = new BufferedReader(new InputStreamReader(in));
StringBuffer resBuff = new StringBuffer();
String line;
while((line = strbuff.readLine()) != null)
resBuff.append(line);
strbuff.close();
in.close();
res = resBuff.toString();
res = FastaTextPane.insertNewline(res, "OS ");
res = FastaTextPane.insertNewline(res, "DE ");
res = FastaTextPane.insertNewline(res, "GN ");
res = FastaTextPane.insertNewline(res, "AC ");
}
catch(MalformedURLException e) {System.err.println(e);}
catch(IOException e) {System.err.println(e);}
}
else
{
String cmd[] = { "mfetch", "-f", "org des gen",
"-d", "uniprot", "-i", "acc:"+hit.getID() };
ExternalApplication app = new ExternalApplication(cmd,
env,null);
res = app.getProcessStdout();
}
StringTokenizer tok = new StringTokenizer(res,"\n");
while(tok.hasMoreTokens())
{
String token = tok.nextToken();
String tokenline = token.substring(3).trim();
if(tokenline.equals(""))
continue;
if(token.startsWith("OS "))
hit.setOrganism(tokenline);
else if(token.startsWith("DE "))
hit.appendDescription(tokenline);
else if(token.startsWith("GN "))
{
StringTokenizer tokGN = new StringTokenizer(tokenline,";");
while(tokGN.hasMoreTokens())
{
token = tokGN.nextToken();
if(token.startsWith("Name="))
hit.setGeneName(tokenline.substring(5));
// else
// hit.appendDescription(token);
}
}
}
}
if(hit.getEMBL() == null)
{
File fgetz = new File("/usr/local/pubseq/bin/getz");
String res = FastaTextPane.getUniprotLinkToDatabase(fgetz,
FastaTextPane.getMfetchExecutable().exists(), hit, env, "embl");
int ind1 = res.indexOf("ID ");
if(ind1 > -1)
{
StringTokenizer tok = new StringTokenizer(res);
tok.nextToken();
hit.setEMBL(tok.nextToken());
}
}
}
/**
*
* Sets the GO annotation for a given ID, first by querying
* Amigo and if not successful querying SRS.
* @param ann annotation display
* @param id database id
* @param go_id GO id
* @return annotation
*
*/
private String setGoAnnotation(Annotation ann, HitInfo hit,
String go_id, String goLine)
{
String go_ann = new String("/GO=\"GOid=GO:"+go_id+
"; with="+hit.getDB()+":"+hit.getAcc()+
"; "+goLine+"\"");
String prog = DataCollectionPane.class.getResource("/etc/go_associations.pl").getPath();
String cmd[] = { prog, "-assoc", hit.getAcc() };
ExternalApplication app = new ExternalApplication(cmd,
null,null);
String res = app.getProcessStdout();
boolean found = false;
try
{
String line;
BufferedReader buffRead = new BufferedReader(new StringReader(res));
while((line = buffRead.readLine()) != null)
{
int ind1 = line.indexOf("GO:");
int ind2 = line.indexOf(" ",ind1);
if(ind1 > -1 && ind2 > -1)
{
String this_go_id = line.substring(ind1+3,ind2).trim();
// see http://intweb.sanger.ac.uk/help/wiki/html/Intweb/PSUEukaryoticQualifiers.html
int ref = line.indexOf("db_xref=");
String db_xref = null;
if(ref > -1)
{
db_xref = line.substring(ref);
line = line.substring(0,ref);
}
// build GO line
StringBuffer goBuff = new StringBuffer();
if(line.startsWith("/GO_component"))
goBuff.append("/GO=\"aspect=component; ");
else if(line.startsWith("/GO_process"))
goBuff.append("/GO=\"aspect=process; ");
else
goBuff.append("/GO=\"aspect=function; ");
goBuff.append("GOid=GO:"+this_go_id+"; ");
ind1 = line.indexOf("(");
ind2 = line.indexOf(")")+1;
if(ind1 > -1 && ind2 > -1)
goBuff.append("term="+line.substring(ind1,ind2)+"; ");
ind1 = ind2+1;
ind2 = line.indexOf(";",ind1);
if(ind1 > -1 && ind2 > -1)
goBuff.append("evidence="+line.substring(ind1,ind2)+"; ");
if(db_xref != null)
goBuff.append(db_xref+" ");
goBuff.append("with="+hit.getDB()+":"+hit.getAcc()+"; ");
if(go_id.equals(this_go_id))
go_ann = line + "\"
" + goBuff.toString() +"\"";
hit.setGoAssociation(this_go_id,line + "\"
" + goBuff.toString() +"\"");
found = true;
}
}
}
catch(IOException ioe) { ioe.printStackTrace(); }
if(!found) // try SRS
{
String env[] = { "PATH=/usr/local/pubseq/bin/" };
String cmd2[] = { "getz", "-f", "dbxref", "[uniprot:"+hit.getAcc()+"]" };
app = new ExternalApplication(cmd2,env,null);
res = app.getProcessStdout();
try
{
String line;
BufferedReader buffRead = new BufferedReader(new StringReader(res));
while((line = buffRead.readLine()) != null)
{
int ind1 = line.indexOf("GO:");
int ind2 = line.indexOf(";",ind1);
if(ind1 > -1 && ind2 > -1)
{
String this_go_id = line.substring(ind1+3,ind2).trim();
line = line.substring(3).trim();
String aspect = null;
String term = null;
String evidence = null;
ind1 = -1;
ind2 = -1;
if((ind1 = line.indexOf(" F:"))> -1)
{
aspect = "function";
ind2 = line.indexOf(";",ind1+4);
}
else if((ind1 = line.indexOf(" P:"))> -1)
{
aspect = "process";
ind2 = line.indexOf(";",ind1+4);
}
else if((ind1 = line.indexOf(" C:"))> -1)
{
aspect = "component";
ind2 = line.indexOf(";",ind1+4);
}
if(ind1 > -1 && ind2 > -1)
term = line.substring(ind1+3,ind2);
if(ind2 > -1)
evidence = line.substring(ind2+1).trim();
StringBuffer goBuff = new StringBuffer();
goBuff.append("/GO_"+aspect);
goBuff.append("=\"GO:"+this_go_id+"; ");
goBuff.append(evidence+"; ");
goBuff.append(hit.getDB()+":"+hit.getAcc()+";\"
");
goBuff.append("/GO=\"aspect="+aspect+"; ");
goBuff.append("GOid=GO:"+this_go_id+"; ");
goBuff.append("term="+term+"; ");
goBuff.append("evidence="+evidence+"; ");
goBuff.append("db_xref= ;");
goBuff.append("with="+hit.getDB()+":"+hit.getAcc()+";\"");
if(go_id.equals(this_go_id))
go_ann = goBuff.toString();
hit.setGoAssociation(this_go_id,goBuff.toString());
found = true;
// break;
}
}
}
catch(IOException ioe) { ioe.printStackTrace(); }
}
ann.insert(go_ann,false);
return go_ann;
}
/**
*
* @param hit HitInfo for a single hit.
* @param ann annotation display.
* @param resultFormat format of the results (blastp/fasta).
* @param ortholog true if ortholog selected.
*
*/
private void setAnnotation(HitInfo hit, Annotation ann,
String resultFormat, boolean ortholog)
{
getzCall(hit,ortholog);
// gene name for orthologs
StringBuffer orthoText = new StringBuffer();
if(ortholog)
{
//String geneName = hit.getGeneName();
if(hit.getGeneName() != null &&
!hit.getGeneName().equals(""))
orthoText.append("
\n/gene=\""+hit.getGeneName()+"\"");
if(hit.getEC_number() != null)
orthoText.append("
\n/EC_number=\""+hit.getEC_number()+"\"");
String product = hit.getDescription();
if(product != null && !product.equals(""))
{
if(product.endsWith(".") ||
product.endsWith(";"))
product = product.substring(0,product.length()-1);
int ind;
if((product.startsWith("RecName:") ||
product.startsWith("SubName:") ||
product.startsWith("AltName:")) &&
(ind = product.indexOf("="))>0)
product = product.substring(ind+1);
orthoText.append("\n
\n/product=\""+product.toLowerCase()+"\"");
}
}
// System.out.println("ID "+hit.getID()+"\nOS "+hit.getOrganism()+
// "\nDE "+hit.getDescription()+"\nGN "+hit.getGeneName());
StringBuffer buff = new StringBuffer();
if(hit.getDB() != null)
buff.append(" with="+hit.getDB()+":"+hit.getAcc());
else
buff.append(" with=UniProt:"+hit.getAcc());
if(hit.getEMBL() != null &&
!hit.getEMBL().equals(""))
buff.append(" (EMBL:"+hit.getEMBL()+")");
buff.append(";");
if(hit.getOrganism() != null &&
!hit.getOrganism().equals(""))
buff.append(" "+hit.getOrganism()+";");
if(hit.getGeneName() != null &&
!hit.getGeneName().equals(""))
buff.append(" "+hit.getGeneName()+";");
if(hit.getDescription() != null)
buff.append(" "+hit.getDescription()+";");
if(hit.getLength() != null)
buff.append(" length=" + hit.getLength()+";");
if(hit.getIdentity() != null)
buff.append(" id " + hit.getIdentity()+";");
if(hit.getUngapped() != null)
buff.append(" ungapped id " + hit.getUngapped()+";");
if(hit.getEValue() != null)
buff.append(" E()=" + hit.getEValue()+";");
if(hit.getOverlap() != null)
buff.append(" "+hit.getOverlap()+";");
if(hit.getQueryRange() != null)
buff.append(" query " + hit.getQueryRange()+";");
if(hit.getSubjectRange() != null)
buff.append(" subject " + hit.getSubjectRange());
buff.append("\"");
ann.insert("\n/similarity=\""+resultFormat+";"+
buff.toString()+orthoText.toString(), ortholog);
}
/**
*
* @param hitInfoCollection Collection of HitInfo.
*
*/
private Hashtable getIDHash(Vector hitInfoCollection)
{
Hashtable goHash = new Hashtable();
Enumeration hitEnum = hitInfoCollection.elements();
while(hitEnum.hasMoreElements())
{
HitInfo hit = (HitInfo)hitEnum.nextElement();
Vector gov = hit.getGO();
if(gov != null)
{
Enumeration gov_enum = gov.elements();
while(gov_enum.hasMoreElements())
{
String id = ((String)gov_enum.nextElement()).trim();
goHash.put(id,"");
}
}
}
return goHash;
}
/**
*
* @param filename name of the file containing the GO id and
* description.
* @param goHash Hashtable of GO id's and description.
*
*/
protected void getGoHash(String filename, Hashtable goHash)
{
try
{
String line = null;
BufferedReader buffRead = new BufferedReader(new FileReader(filename));
while((line = buffRead.readLine()) != null)
{
StringTokenizer tok = new StringTokenizer(line,"\t");
String ID = tok.nextToken().substring(3);
String desc = tok.nextToken();
if(tok.hasMoreTokens())
desc = desc.concat("; "+tok.nextToken());
if(goHash.containsKey(ID))
goHash.put(ID,desc);
}
}
catch(FileNotFoundException fnf) { }
catch(IOException ioe) { ioe.printStackTrace(); }
}
}