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 }