001/* 002 * BioJava development code 003 * 004 * This code may be freely distributed and modified under the 005 * terms of the GNU Lesser General Public Licence. This should 006 * be distributed with the code. If you do not have a copy, 007 * see: 008 * 009 * http://www.gnu.org/copyleft/lesser.html 010 * 011 * Copyright for this code is held jointly by the individual 012 * authors. These should be listed in @author doc comments. 013 * 014 * For more information on the BioJava project and its aims, 015 * or to join the biojava-l mailing list, visit the home page 016 * at: 017 * 018 * http://www.biojava.org/ 019 * 020 */ 021package org.biojava.nbio.genome.parsers.twobit; 022 023import java.io.File; 024 025/** A facade that makes it easier to work with a 2bit file. 026 * 027 * Created by yana on 3/27/17. 028 */ 029public class TwoBitFacade { 030 031 private TwoBitParser twoBitParser = null; 032 033 034 /** 035 * Reads a genome from a locally stored .2bit file. 036 * 037 * @param file the File to a .2bit file. 038 */ 039 public TwoBitFacade(File file) throws Exception { 040 twoBitParser = new TwoBitParser(file); 041 } 042 043 /** 044 * Closes .2bit file twoBitParser. 045 */ 046 public void close() throws Exception { 047 if (twoBitParser != null) 048 twoBitParser.close(); 049 050 } 051 052 /** Sets a chromosome for TwoBitParser. 053 * 054 * @param chr The chromosome name (e.g. chr21) 055 */ 056 public void setChromosome(String chr) throws Exception { 057 if ( twoBitParser == null){ 058 059 } 060 twoBitParser.close(); 061 String[] names = twoBitParser.getSequenceNames(); 062 for(int i=0;i<names.length;i++) { 063 if ( names[i].equalsIgnoreCase(chr) ) { 064 twoBitParser.setCurrentSequence(names[i]); 065 break; 066 } 067 } 068 } 069 070 /** Extract a sequence from a chromosome, using chromosomal coordinates 071 * 072 * @param chromosomeName 073 * @param start 074 * @param end 075 * @return the DNASequence from the requested coordinates. 076 * @throws Exception 077 */ 078 public String getSequence(String chromosomeName, int start, int end) throws Exception { 079 twoBitParser.close(); 080 twoBitParser.setCurrentSequence(chromosomeName); 081 return twoBitParser.loadFragment(start,end-start); 082 } 083}