diff NGSrich_0.5.5/src/middlewares/GeneExtractor.java @ 0:89ad0a9cca52 default tip

Uploaded
author pfrommolt
date Mon, 21 Nov 2011 08:12:19 -0500
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/NGSrich_0.5.5/src/middlewares/GeneExtractor.java	Mon Nov 21 08:12:19 2011 -0500
@@ -0,0 +1,68 @@
+package middlewares;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.util.Scanner;
+
+import datastructures.AVLTree;
+import datastructures.AnnotationLine;
+import datastructures.TargetLine;
+
+/**
+ * 
+ * Generate a AVL-Tree for fast extraction of genes (logarithmic time).
+ * 
+ * @author Ali Abdallah
+ * @version 0.4.5, 14.07.2011
+ * @since jdk 1.6.0
+ * 
+ */
+
+public class GeneExtractor {
+
+	/**
+	 * The path of the genome annotation file.
+	 */
+	String genomeAnnotation;
+
+	/**
+	 * The avl tree representing the genome annotation file.
+	 */
+	AVLTree genesTree;
+	
+	/**
+	 * The scanner scanning the genome file.
+	 */
+	Scanner s;
+
+	/**
+	 * Constructs the avl-tree based on the genome annotation file.
+	 * @param genomeAnnotation the genome annotation file.
+	 */
+	public GeneExtractor(String genomeAnnotation) {
+		genesTree = new AVLTree();
+		this.genomeAnnotation = genomeAnnotation;
+		try {
+			s = new Scanner(new File(genomeAnnotation));
+		} catch (FileNotFoundException e) {
+			e.printStackTrace();
+		}
+		while (s.hasNextLine()) {
+			genesTree.insert(new AnnotationLine(s.nextLine()));
+		}
+		s.close();
+	}
+
+	/**
+	 * Search the tree for a gene overlapping the specified target.
+	 * 
+	 * @param tl the target line of the current target.
+	 * @return the gene overlapping the specified target, if it exists and 
+	 * "unknown" otherwise.
+	 */
+	public String extractGene(TargetLine tl) {
+		AnnotationLine a = 
+			(AnnotationLine) genesTree.find(new AnnotationLine
+							("*", tl.chrom(), "dummy", tl.start(), tl.end()));
+		return ((a != null) ? a.gene() : "unknown");
+	}
+}