/*
* Copyright (C) 2010-2011 "Bio4j"
*
* This file is part of Bio4j
*
* Bio4j is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 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 Affero General Public License for more details.
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>
*/
package com.bio4j.neo4jdb.programs;
import com.bio4j.neo4jdb.model.nodes.TaxonNode;
import com.bio4j.neo4jdb.model.nodes.ProteinNode;
import com.bio4j.neo4jdb.model.nodes.KeywordNode;
import com.bio4j.neo4jdb.model.nodes.InterproNode;
import com.bio4j.neo4jdb.model.nodes.OrganismNode;
import com.bio4j.neo4jdb.model.nodes.GoTermNode;
import com.bio4j.neo4jdb.model.nodes.citation.ArticleNode;
import com.bio4j.neo4jdb.model.nodes.citation.SubmissionNode;
import com.bio4j.neo4jdb.model.relationships.TaxonParentRel;
import com.bio4j.neo4jdb.model.relationships.protein.ProteinGoRel;
import com.bio4j.neo4jdb.model.relationships.protein.ProteinInterproRel;
import com.bio4j.neo4jdb.model.relationships.protein.ProteinKeywordRel;
import com.bio4j.neo4jdb.model.relationships.uniref.UniRef90MemberRel;
import com.bio4j.neo4jdb.model.util.Bio4jManager;
import com.bio4j.neo4jdb.model.util.NodeRetriever;
import java.io.IOException;
import java.util.Iterator;
import java.util.logging.FileHandler;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.logging.SimpleFormatter;
import org.neo4j.graphdb.Direction;
import org.neo4j.graphdb.Node;
import org.neo4j.graphdb.Relationship;
/**
* Test program
* @author Pablo Pareja Tobes <ppareja@era7.com>
*/
public class GetProteinData {
private static final Logger logger = Logger.getLogger("GetProteinData");
private static FileHandler fh;
public static void main(String[] args) throws IOException {
if (args.length != 2) {
System.out.println("This program expects the following parameters: \n"
+ "1. Bio4j DB folder \n"
+ "2. Protein accession");
} else {
// This block configures the logger with handler and formatter
fh = new FileHandler("GetProteinData" + args[0].split("\\.")[0] + ".log", false);
SimpleFormatter formatter = new SimpleFormatter();
fh.setFormatter(formatter);
logger.addHandler(fh);
logger.setLevel(Level.ALL);
System.out.println("creating manager...");
String accessionSt = args[1];
Bio4jManager manager = new Bio4jManager(args[0]);
try {
NodeRetriever nodeRetriever = new NodeRetriever(manager);
ProteinNode protein = nodeRetriever.getProteinNodeByAccession(accessionSt);
if (protein != null) {
System.out.println("protein.getNode().getId() = " + protein.getNode().getId());
System.out.println("gene names:");
for (String string : protein.getGeneNames()) {
System.out.println(string);
}
System.out.println("Getting Uniref 90 information...");
Iterator<Relationship> uniref90RepresentantIterator = protein.getNode().getRelationships(new UniRef90MemberRel(null), Direction.OUTGOING).iterator();
if (uniref90RepresentantIterator.hasNext()) {
System.out.println("The protein is representant of a Uniref 90 cluster");
System.out.println("the members of this cluster are:");
while (uniref90RepresentantIterator.hasNext()) {
ProteinNode tempProt = new ProteinNode(uniref90RepresentantIterator.next().getEndNode());
System.out.println(tempProt.getAccession());
}
} else {
Iterator<Relationship> uniref90memberIterator = protein.getNode().getRelationships(new UniRef90MemberRel(null), Direction.INCOMING).iterator();
if (uniref90memberIterator.hasNext()) {
System.out.println("The protein is member of the cluster: ");
ProteinNode tempProt = new ProteinNode(uniref90memberIterator.next().getStartNode());
System.out.println(tempProt.getAccession());
}
}
System.out.println("Getting keywords...");
Iterator<Relationship> relIt = protein.getNode().getRelationships(new ProteinKeywordRel(null), Direction.OUTGOING).iterator();
while (relIt.hasNext()) {
KeywordNode keyword = new KeywordNode(relIt.next().getEndNode());
System.out.println("keyword.getId() = " + keyword.getId());
System.out.println("keyword.getName() = " + keyword.getName());
}
System.out.println("Getting interpro...");
relIt = protein.getNode().getRelationships(new ProteinInterproRel(null), Direction.OUTGOING).iterator();
while (relIt.hasNext()) {
InterproNode interpro = new InterproNode(relIt.next().getEndNode());
System.out.println(interpro);
}
System.out.println("Getting go annotations...");
relIt = protein.getNode().getRelationships(new ProteinGoRel(null), Direction.OUTGOING).iterator();
while (relIt.hasNext()) {
ProteinGoRel goRel = new ProteinGoRel(relIt.next());
String evidence = goRel.getEvidence();
GoTermNode term = new GoTermNode(goRel.getRelationship().getEndNode());
System.out.println(term);
System.out.println("evidence = " + evidence);
}
OrganismNode organism = protein.getOrganism();
System.out.println("organism.getScientificName() = " + organism.getScientificName());
System.out.println("organism.getCommonName() = " + organism.getCommonName());
System.out.println("organism.getSynonymName() = " + organism.getSynonymName());
System.out.println("organism.getNcbiTaxonomyId() = " + organism.getNcbiTaxonomyId());
System.out.println("Protein dataset: " + protein.getDataset().getName());
System.out.println("Getting lineage...");
Node currentNode = organism.getNode();
Iterator<Relationship> iterator = null;
iterator = currentNode.getRelationships(new TaxonParentRel(null), Direction.INCOMING).iterator();
while (iterator.hasNext()) {
Relationship rel = iterator.next();
TaxonNode taxon = new TaxonNode(rel.getStartNode());
System.out.print(taxon.getName() + " --> ");
currentNode = taxon.getNode();
iterator = currentNode.getRelationships(new TaxonParentRel(null), Direction.INCOMING).iterator();
}
System.out.println("Getting citations...");
System.out.println("Article citations:");
for (ArticleNode article : protein.getArticleCitations()) {
System.out.println(article);
}
System.out.println("Submission citations:");
for (SubmissionNode submission : protein.getSubmissionCitations()) {
System.out.println(submission);
}
System.out.println("DONE!! :)");
} else {
System.out.println("node is null.... :(");
}
//txn.success();
} catch (Exception e) {
logger.log(Level.SEVERE, e.getMessage());
StackTraceElement[] trace = e.getStackTrace();
for (StackTraceElement stackTraceElement : trace) {
logger.log(Level.SEVERE, stackTraceElement.toString());
}
} finally {
try {
//txn.finish();
manager.shutDown();
} catch (Exception e) {
logger.log(Level.SEVERE, e.getMessage());
StackTraceElement[] trace = e.getStackTrace();
for (StackTraceElement stackTraceElement : trace) {
logger.log(Level.SEVERE, stackTraceElement.toString());
}
}
}
}
}
}