Mercurial > repos > pfrommolt > ngsrich
comparison NGSrich_0.5.5/src/_main/NGSrichEvaluate.java @ 0:89ad0a9cca52 default tip
Uploaded
| author | pfrommolt |
|---|---|
| date | Mon, 21 Nov 2011 08:12:19 -0500 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| -1:000000000000 | 0:89ad0a9cca52 |
|---|---|
| 1 package _main; | |
| 2 | |
| 3 import java.io.BufferedInputStream; | |
| 4 import java.io.File; | |
| 5 import java.io.FileInputStream; | |
| 6 import java.io.FileWriter; | |
| 7 import java.io.IOException; | |
| 8 import java.sql.Time; | |
| 9 import java.util.Properties; | |
| 10 import middlewares.Misc; | |
| 11 import exceptions.ChromosomeMismatchException; | |
| 12 import exceptions.FileFormatException; | |
| 13 | |
| 14 /** | |
| 15 * This is the Main-class of the evaluation part of the software. This class | |
| 16 * uses the Enrichment-class to process the phases (the parts) of the pipeline. | |
| 17 * | |
| 18 * @author Ali Abdallah | |
| 19 */ | |
| 20 | |
| 21 public class NGSrichEvaluate { | |
| 22 | |
| 23 /** | |
| 24 * An array of arguments containing the following option elements in the | |
| 25 * following order: | |
| 26 * -r <readsFile> (-a|-g) <annotation> -t <target> [-s <sName>] | |
| 27 * [-T <tmpDir>][-o <outDir>][-p <poor> -h <high>][-no_details] | |
| 28 * | |
| 29 * Required: | |
| 30 * <readsFile> Path to read alignment file in SAM or BAM format. | |
| 31 * <annotation> UCSC genome version name. | |
| 32 * <target> Path to target file in BED format. | |
| 33 * | |
| 34 * Optional: | |
| 35 * <sName> Sample name [default: prefix of <readsFile>]. | |
| 36 * <tmpDir> Temporary directory [default: '/tmp']. | |
| 37 * <outDir> Output directory [default: '<pathToReadsFile>/enrichment']. | |
| 38 * <poor> Cutoff for poor coverage [default: 2]. | |
| 39 * <high> Cutoff for high coverage [default: 200]. | |
| 40 */ | |
| 41 String[] args; | |
| 42 | |
| 43 public NGSrichEvaluate(String[] args) { | |
| 44 this.args = args; | |
| 45 } | |
| 46 | |
| 47 public void evaluate() throws IOException, FileFormatException, | |
| 48 InterruptedException { | |
| 49 /** | |
| 50 * Ordered List of Parameter (left/right): readFName genomeFName | |
| 51 * targetFName tmpDir outDir | |
| 52 * | |
| 53 */ | |
| 54 | |
| 55 int alen = args.length; | |
| 56 String[] params = new String[10]; | |
| 57 | |
| 58 String usagestr = | |
| 59 "\nUsage: java NGSrich evaluate -r <readsFile> " | |
| 60 + "-u <genome-name> -t <target> [(-a|-g) " | |
| 61 + "<annotation>] [-s <sName>] [-T <tmpDir>] " | |
| 62 + "[-o <outDir>] [-p <poor> -h <high>][--no-details>]\n\n\tRequired:\n\t" | |
| 63 + "<readsFile>\tPath to read alignment file in SAM or BAM format." | |
| 64 + "\n\t<genome-name>\tUCSC genome version name.\n\t<target>\tPath " | |
| 65 + "to target file in BED format.\n\n\tOptional:\n\t<sName>\t\t" | |
| 66 + "Sample name [default: prefix of <readsFile>].\n\t<annotation>\t\t" | |
| 67 + "path of the annotation file [default: the genome is " | |
| 68 + "downloaded based on the genome version name].\n\t<tmpDir>\t" | |
| 69 + "Temporary directory [default: '/tmp'].\n\t<outDir>\tOutput " | |
| 70 + "directory [default: '<pathToReadsFile>/enrichment'].\n\t" | |
| 71 + "<poor>\t\tCutoff for poor coverage [default: 2].\n\t<high>" | |
| 72 + "\t\tCutoff for high coverage [default: 200]. \n\t--no-details\tto repress the computation of the" + | |
| 73 " evaluation details\n"; | |
| 74 | |
| 75 if (alen == 0) { | |
| 76 System.out.println(usagestr); | |
| 77 System.exit(0); | |
| 78 } | |
| 79 | |
| 80 boolean t = false, o = false, h = false, po = false, sname = false, u = false, r = false, g = false, | |
| 81 a = false, T = false; | |
| 82 params[9] = "1"; | |
| 83 for (int i = 0; i < alen; i = i + 2) { | |
| 84 if ((args[i].length() == 2 && args[i].charAt(0) == '-') || args[i].equals("--no-details")) { | |
| 85 char flag = (args[i].length()==2)?args[i].charAt(1):args[i].charAt(2); | |
| 86 switch (flag) { | |
| 87 case 'r': params[0] = args[i + 1];r = true;break; | |
| 88 case 'g': params[1] = args[i + 1];g = true;break; | |
| 89 case 'a': params[1] = args[i + 1];a = true;break; | |
| 90 case 't': params[2] = args[i + 1];t = true;break; | |
| 91 case 'T': params[3] = args[i + 1];T = true;break; | |
| 92 case 'o': params[4] = args[i + 1];o = true;break; | |
| 93 case 'p': params[5] = args[i + 1];po = true;break; | |
| 94 case 'h': params[6] = args[i + 1];h = true;break; | |
| 95 // Added by PF 2011-07-12 | |
| 96 case 's': params[7] = args[i + 1];sname = true;break; | |
| 97 case 'u': params[8] = args[i+1]; u = true;break; | |
| 98 case 'n': params[9]="0";break; | |
| 99 } | |
| 100 } else { | |
| 101 System.out.println(usagestr); | |
| 102 System.exit(0); | |
| 103 } | |
| 104 } | |
| 105 | |
| 106 boolean required = r && t && u; | |
| 107 | |
| 108 if(!required){ | |
| 109 System.out.println("Some required arguments are missing.\n"); | |
| 110 System.out.println(usagestr); | |
| 111 System.exit(0); | |
| 112 } | |
| 113 | |
| 114 String default_properties_file = createDefaultPropertiesFile(); | |
| 115 Properties p = new Properties(); | |
| 116 BufferedInputStream stream = | |
| 117 new BufferedInputStream( | |
| 118 new FileInputStream(default_properties_file)); | |
| 119 | |
| 120 p.load(stream); | |
| 121 stream.close(); | |
| 122 if (!T)params[3] = p.getProperty("tmpDir"); | |
| 123 if (!o) { | |
| 124 String oPath = p.getProperty("outDirPath"); | |
| 125 if (oPath.equals(""))oPath = Misc.path(params[0]); | |
| 126 params[4] = oPath + Misc.slash(oPath) + p.getProperty("outDir"); | |
| 127 new File(params[4]).mkdir(); | |
| 128 } | |
| 129 if (!po)params[5] = p.getProperty("poor"); | |
| 130 if (!h)params[6] = p.getProperty("high"); | |
| 131 if (!sname)params[7] = "none"; | |
| 132 if (!(a||g))params[1] = "none"; | |
| 133 | |
| 134 Enrichment ngs = new Enrichment(params); | |
| 135 // Convert BAM to SAM if necessary. | |
| 136 String infile = params[0]; | |
| 137 if (infile.endsWith(".bam")) { | |
| 138 System.out.println("======================0======================"); | |
| 139 System.out.println("\n>>> Found BAM file: converting to SAM\n"); | |
| 140 infile = ngs.bam2sam(); | |
| 141 } | |
| 142 ngs.readFileName = infile; | |
| 143 | |
| 144 // File timeReport = | |
| 145 // new File(params[3] + Misc.slash(params[3])+"TimeReport.txt"); | |
| 146 // FileWriter trWriter = new FileWriter(timeReport); | |
| 147 | |
| 148 // Reduce the files. | |
| 149 System.out.println("======================1======================"); | |
| 150 System.out.println(">>> STEP 1: reducing files\n"); | |
| 151 try { | |
| 152 long start = System.currentTimeMillis(); | |
| 153 ngs.reduceFiles(); | |
| 154 long rtime = System.currentTimeMillis() - start; | |
| 155 Time time = new Time(rtime); | |
| 156 //trWriter.write("Reducing files took: " + time + "\n"); | |
| 157 | |
| 158 } catch (ChromosomeMismatchException e) { | |
| 159 e.printStackTrace(); | |
| 160 } | |
| 161 | |
| 162 // Compute the target coverage files. | |
| 163 System.out.println("\n======================2======================"); | |
| 164 System.out.println(">>> STEP 2: computing target coverage data\n"); | |
| 165 long start = System.currentTimeMillis(); | |
| 166 ngs.computeTargetCoverageFiles(); | |
| 167 long rtime = System.currentTimeMillis() - start; | |
| 168 Time time = new Time(rtime); | |
| 169 // trWriter.write("Computing target coverage data took: " + time + "\n"); | |
| 170 | |
| 171 // Evaluate enrichment. | |
| 172 System.out.println("\n======================3======================"); | |
| 173 System.out.println(">>> STEP 3: evaluating enrichment files\n"); | |
| 174 start = System.currentTimeMillis(); | |
| 175 ngs.evaluate(); | |
| 176 rtime = System.currentTimeMillis() - start; | |
| 177 time = new Time(rtime); | |
| 178 //trWriter.write("Evaluating enrichment files took: " + time + "\n"); | |
| 179 Thread.sleep(10000); | |
| 180 | |
| 181 // Compute the target wiggle files. | |
| 182 System.out.println("\n======================4======================"); | |
| 183 System.out.println(">>> STEP 4: computing targets wiggle data\n"); | |
| 184 start = System.currentTimeMillis(); | |
| 185 ngs.computeWiggleFile(); | |
| 186 rtime = System.currentTimeMillis() - start; | |
| 187 time = new Time(rtime); | |
| 188 //trWriter.write("Computing targets wiggle data took: " + time + "\n"); | |
| 189 | |
| 190 // Compute the overall wiggle files. | |
| 191 System.out.println("\n======================5======================"); | |
| 192 System.out.println(">>> STEP 5: computing overall wiggle data\n"); | |
| 193 ngs.computeOverallWiggleFile(); | |
| 194 start = System.currentTimeMillis(); | |
| 195 ngs.computeOverallWiggleFile(); | |
| 196 rtime = System.currentTimeMillis() - start; | |
| 197 time = new Time(rtime); | |
| 198 //trWriter.write("Computing targets wiggle data took: " + time + "\n"); | |
| 199 System.out.println("\n============================================="); | |
| 200 //trWriter.close(); | |
| 201 } | |
| 202 | |
| 203 private String createDefaultPropertiesFile() throws IOException { | |
| 204 String default_properties_file = | |
| 205 Misc.binDir()+Misc.slash(Misc.binDir())+"DEFAULT.properties"; | |
| 206 if(!new File(default_properties_file).exists()){ | |
| 207 String default_str = | |
| 208 "! Path of the temporary directory.\n" + | |
| 209 "tmpDir: /tmp\n" + | |
| 210 "! Path of the father directory of the output directory. " + | |
| 211 "When empty the output directory is placed in the directory " + | |
| 212 "containing the reads alignment file.\n" + | |
| 213 "outDirPath:\n" + | |
| 214 "! Name of the output directory (not the path).\n" + | |
| 215 "outDir: enrichment\n" + | |
| 216 "! Define poorly covered genes.\n" + | |
| 217 "poor: 2\n" + | |
| 218 "! Defines highly covered genes.\n" + | |
| 219 "high: 200"; | |
| 220 FileWriter properties_writer = | |
| 221 new FileWriter(default_properties_file); | |
| 222 properties_writer.write(default_str); | |
| 223 properties_writer.close(); | |
| 224 } | |
| 225 return default_properties_file; | |
| 226 } | |
| 227 } |
