org.biojava.nbio.genome.parsers.twobit.SimpleTwoBitFileProvider Maven / Gradle / Ivy
package org.biojava.nbio.genome.parsers.twobit;
import org.biojava.nbio.core.util.FileDownloadUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
/**
* Created by yana on 4/4/17.
*/
public class SimpleTwoBitFileProvider {
private static final Logger logger = LoggerFactory.getLogger(SimpleTwoBitFileProvider.class);
public static synchronized void downloadIfNoTwoBitFileExists(File twoBitFileLocalLocation, String genomeAssembly) throws IOException {
if ( ! twoBitFileLocalLocation.exists() ) {
// download to a temporary file
File tmp = File.createTempFile(genomeAssembly,".2bit");
URL twoBitFileURL = getTwoBitURL(genomeAssembly);
logger.info("downloading " + twoBitFileURL + " to " + tmp.getAbsolutePath());
// 2bit files are large and take a while to download
FileDownloadUtils.downloadFile(twoBitFileURL, tmp);
// check the parent directory exists
Path p = Paths.get(twoBitFileLocalLocation.getAbsolutePath());
Path dir = p.getParent();
if (! Files.exists(dir)) {
Files.createDirectories(dir);
}
logger.info("renaming " + tmp.getAbsolutePath() +" to " + twoBitFileLocalLocation.getAbsolutePath());
// after the download rename
tmp.renameTo(twoBitFileLocalLocation);
}
}
public static URL getTwoBitURL(String genomeAssembly) throws MalformedURLException {
String url="";
if (genomeAssembly.equals("hg19") || genomeAssembly.equals("hg37") ) {
url = "http://cdn.rcsb.org/gene/hg37/hg19.2bit";
}
else if (genomeAssembly.equals("hg38")) {
url = "http://cdn.rcsb.org/gene/hg38/hg38.2bit";
}
return new URL(url);
}
public static void main(String[] args){
try {
downloadIfNoTwoBitFileExists(new File("/Users/yana/spark/2bit/hg38.2bit"),"hg38");
} catch (IOException e) {
e.printStackTrace();
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy