+++ /dev/null
-/**
- * File written by Raphael Champeimont
- * UMR 7238 Genomique des Microorganismes
- */
-package fr.orsay.lri.varna.models.templates;
-
-import java.io.BufferedReader;
-import java.io.BufferedWriter;
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.FileReader;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.List;
-
-import fr.orsay.lri.varna.exceptions.ExceptionExportFailed;
-import fr.orsay.lri.varna.exceptions.ExceptionFileFormatOrSyntax;
-import fr.orsay.lri.varna.exceptions.ExceptionLoadingFailed;
-import fr.orsay.lri.varna.exceptions.ExceptionNAViewAlgorithm;
-import fr.orsay.lri.varna.exceptions.ExceptionPermissionDenied;
-import fr.orsay.lri.varna.exceptions.ExceptionUnmatchedClosingParentheses;
-import fr.orsay.lri.varna.exceptions.ExceptionXmlLoading;
-import fr.orsay.lri.varna.factories.RNAFactory;
-import fr.orsay.lri.varna.models.VARNAConfig;
-import fr.orsay.lri.varna.models.rna.RNA;
-
-
-public class BatchBenchmark {
- private VARNAConfig conf = new VARNAConfig();
-
- final boolean DEFAULT_STRAIGHT_BULGES = false;
-
- public static RNA loadRNA(File file) throws ExceptionFileFormatOrSyntax, ExceptionUnmatchedClosingParentheses, FileNotFoundException, ExceptionExportFailed, ExceptionPermissionDenied, ExceptionLoadingFailed {
- Collection<RNA> rnas = RNAFactory.loadSecStr(file.getPath());
- if (rnas.isEmpty()) {
- throw new ExceptionFileFormatOrSyntax(
- "No RNA could be parsed from that source.");
- }
- return rnas.iterator().next();
- }
-
- public void benchmarkRNA(File templatePath, File rnaPath, BufferedWriter outbuf) throws ExceptionXmlLoading, RNATemplateDrawingAlgorithmException, ExceptionFileFormatOrSyntax, ExceptionUnmatchedClosingParentheses, ExceptionExportFailed, ExceptionPermissionDenied, ExceptionLoadingFailed, ExceptionNAViewAlgorithm, IOException {
- // load template
- RNATemplate template = RNATemplate.fromXMLFile(templatePath);
-
- // load RNA
- RNA rna = loadRNA(rnaPath);
-
- for (int algo=0; algo<=100; algo++) {
- String algoname = "";
-
- // draw RNA
- switch (algo) {
- //case 0:
- // rna.drawRNALine(conf);
- // algoname = "Linear";
- // break;
- //case 1:
- // rna.drawRNACircle(conf);
- // algoname = "Circular";
- // break;
- case 2:
- rna.drawRNARadiate(conf);
- algoname = "Radiate";
- break;
- case 3:
- rna.drawRNANAView(conf);
- algoname = "NAView";
- break;
- case 10:
- algoname = "Template/noadj";
- rna.drawRNATemplate(template, conf, DrawRNATemplateMethod.NOADJUST, DrawRNATemplateCurveMethod.EXACTLY_AS_IN_TEMPLATE, DEFAULT_STRAIGHT_BULGES);
- break;
- case 11:
- algoname = "Template/noadj/ellipses";
- rna.drawRNATemplate(template, conf, DrawRNATemplateMethod.NOADJUST, DrawRNATemplateCurveMethod.ALWAYS_REPLACE_BY_ELLIPSES, DEFAULT_STRAIGHT_BULGES);
- break;
- case 12:
- algoname = "Template/noadj/smart";
- rna.drawRNATemplate(template, conf, DrawRNATemplateMethod.NOADJUST, DrawRNATemplateCurveMethod.SMART, DEFAULT_STRAIGHT_BULGES);
- break;
- /*
- case 5:
- algoname = "Template/maxfactor";
- rna.drawRNATemplate(template, conf, DrawRNATemplateMethod.MAXSCALINGFACTOR, DrawRNATemplateCurveMethod.EXACTLY_AS_IN_TEMPLATE, DEFAULT_STRAIGHT_BULGES);
- break;
- */
- case 6:
- algoname = "Template/mininter";
- rna.drawRNATemplate(template, conf, DrawRNATemplateMethod.NOINTERSECT, DrawRNATemplateCurveMethod.EXACTLY_AS_IN_TEMPLATE, DEFAULT_STRAIGHT_BULGES);
- break;
- case 30:
- algoname = "Template/translate";
- rna.drawRNATemplate(template, conf, DrawRNATemplateMethod.HELIXTRANSLATE, DrawRNATemplateCurveMethod.EXACTLY_AS_IN_TEMPLATE, DEFAULT_STRAIGHT_BULGES);
- break;
- case 31:
- algoname = "Template/translate/ellipses";
- rna.drawRNATemplate(template, conf, DrawRNATemplateMethod.HELIXTRANSLATE, DrawRNATemplateCurveMethod.ALWAYS_REPLACE_BY_ELLIPSES, DEFAULT_STRAIGHT_BULGES);
- break;
- case 32:
- algoname = "Template/translate/smart";
- rna.drawRNATemplate(template, conf, DrawRNATemplateMethod.HELIXTRANSLATE, DrawRNATemplateCurveMethod.SMART, DEFAULT_STRAIGHT_BULGES);
- break;
- default:
- continue;
- }
-
- // benchmark
- Benchmark benchmark = new Benchmark(rna);
-
- // print results
- outbuf.write(
- removeExt(rnaPath.getName())
- + "\t" + algoname
- + "\t" + benchmark.backboneCrossings
- // averageUnpairedDistance % -> best is 100
- + "\t" + (benchmark.averageUnpairedDistance / benchmark.targetConsecutiveBaseDistance *100)
- + "\t" + benchmark.tooNearConsecutiveBases
- + "\t" + benchmark.tooFarConsecutiveBases
- + "\n");
- }
-
- }
-
- public void runBenchmark(List<File> templates, List<File> rnas, File outfile) throws Exception {
- if (templates.size() != rnas.size()) {
- throw new Error("templates and rnas list size differ");
- }
-
- BufferedWriter outbuf = new BufferedWriter(new FileWriter(outfile));
-
- outbuf.write("RNA\tAlgorithm\tBackbone crossings\tAverage unpaired distance %\tToo near\tToo far\n");
-
- for (int i=0; i<templates.size(); i++) {
- System.out.println("Benchmarking for RNA " + removeExt(rnas.get(i).getName()));
- benchmarkRNA(templates.get(i), rnas.get(i), outbuf);
- }
-
- outbuf.close();
-
- System.out.println("******* Benchmark finished. *******");
- }
-
- public void runExamples() throws Exception {
- File templatesDir = new File("templates");
- File root = new File(templatesDir, "examples");
- File outfile = new File(new File(templatesDir, "benchmark"), "benchmark.txt");
-
- String seqlist[] = {"RNase P E Coli.ct", "RNase P Synechocystis-PCC6803.ct", "RNase P M Musculus.ct"};
-
- List<File> templates = new ArrayList<File>();
- List<File> rnas = new ArrayList<File>();
-
- for (String seq: seqlist) {
- templates.add(new File(root, "RNase P E Coli.xml"));
- rnas.add(new File(root, seq));
- }
-
- runBenchmark(templates, rnas, outfile);
- }
-
- public static void readFASTA(File file, List<String> seqnames, List<String> sequences) throws IOException {
- BufferedReader buf = new BufferedReader(new FileReader(file));
- String line = buf.readLine();
- while (line != null) {
- if (line.length() != 0) {
- if (line.charAt(0) == '>') {
- String id = line.substring(1); // remove the >
- seqnames.add(id);
- sequences.add("");
- } else {
- sequences.set(sequences.size()-1, sequences.get(sequences.size()-1) + line);
- }
- }
- line = buf.readLine();
- }
- buf.close();
- }
-
-
- /**
- * We assume given directory contains a alignemnt.fasta file,
- * of which the first sequence is the consensus structure,
- * and the other sequences are aligned nucleotides.
- * The principle is to convert it to a set of secondary structure,
- * using the following rule:
- * - keep the same nucleotides as in original sequence
- * - keep base pairs where both bases of the pair are non-gaps in our sequence
- */
- public void benchmarkAllDir(File rootdir) throws Exception {
- File seqdir = new File(rootdir, "sequences");
- File templateFile = new File(rootdir, "template.xml");
- File sequenceFiles[] = seqdir.listFiles();
- Arrays.sort(sequenceFiles);
-
- List<File> templates = new ArrayList<File>();
- List<File> rnas = new ArrayList<File>();
- for (File seq: sequenceFiles) {
- if (!seq.getPath().endsWith(".dbn")) continue;
- rnas.add(seq);
- templates.add(templateFile);
- }
-
- File outfile = new File(rootdir, "benchmark.txt");
- runBenchmark(templates, rnas, outfile);
-
- }
-
-
- public static void main(String[] args) throws Exception {
- File templatesDir = new File("templates");
- if (args.length < 1) {
- System.out.println("Command-line argument required: RNA");
- System.out.println("Example: RNaseP_bact_a");
- System.exit(1);
- }
- //new BatchBenchmark().runExamples();
- for (String arg: args) {
- new BatchBenchmark().benchmarkAllDir(new File(templatesDir, arg));
- }
- }
-
- /**
- * Return the given file path without the (last) extension.
- */
- public static String removeExt(String path) {
- return path.substring(0, path.lastIndexOf('.'));
- }
-
- public static File removeExt(File path) {
- return new File(removeExt(path.getPath()));
- }
-}