Mercurial > repos > timpalpant > java_genomics_toolkit
comparison src/edu/unc/genomics/nucleosomes/Phasogram.java @ 2:e16016635b2a
Uploaded
author | timpalpant |
---|---|
date | Mon, 13 Feb 2012 22:12:06 -0500 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
1:a54db233ee3d | 2:e16016635b2a |
---|---|
1 package edu.unc.genomics.nucleosomes; | |
2 | |
3 import java.io.BufferedWriter; | |
4 import java.io.IOException; | |
5 import java.nio.charset.Charset; | |
6 import java.nio.file.Files; | |
7 import java.nio.file.Path; | |
8 | |
9 import org.apache.log4j.Logger; | |
10 | |
11 import com.beust.jcommander.Parameter; | |
12 | |
13 import edu.unc.genomics.CommandLineTool; | |
14 import edu.unc.genomics.CommandLineToolException; | |
15 import edu.unc.genomics.io.WigFile; | |
16 import edu.unc.genomics.io.WigFileException; | |
17 | |
18 public class Phasogram extends CommandLineTool { | |
19 | |
20 private static final Logger log = Logger.getLogger(Phasogram.class); | |
21 | |
22 @Parameter(names = {"-i", "--input"}, description = "Input wig file (read counts)", required = true) | |
23 public WigFile inputFile; | |
24 @Parameter(names = {"-m", "--max"}, description = "Maximum phase shift", required = true) | |
25 public int maxPhase; | |
26 @Parameter(names = {"-o", "--output"}, description = "Output file (histogram)", required = true) | |
27 public Path outputFile; | |
28 | |
29 public void run() throws IOException { | |
30 long[] phaseCounts = new long[maxPhase+1]; | |
31 | |
32 // Process each chromosome in the assembly | |
33 for (String chr : inputFile.chromosomes()) { | |
34 log.debug("Processing chromosome " + chr); | |
35 | |
36 int start = inputFile.getChrStart(chr); | |
37 while (start < inputFile.getChrStop(chr)) { | |
38 int stop = start + DEFAULT_CHUNK_SIZE - 1; | |
39 | |
40 try { | |
41 float[] data = WigFile.flattenData(inputFile.query(chr, start, stop), start, stop); | |
42 for (int i = 0; i < data.length-maxPhase; i++) { | |
43 for (int j = 0; j <= maxPhase; j++) { | |
44 phaseCounts[j] += data[i]; | |
45 } | |
46 } | |
47 | |
48 } catch (WigFileException e) { | |
49 log.fatal("Error querying data from Wig file!"); | |
50 e.printStackTrace(); | |
51 throw new CommandLineToolException("Error querying data from Wig file!"); | |
52 } | |
53 | |
54 // Process the next chunk | |
55 start = stop - maxPhase + 1; | |
56 } | |
57 } | |
58 | |
59 log.debug("Writing output to disk"); | |
60 try (BufferedWriter writer = Files.newBufferedWriter(outputFile, Charset.defaultCharset())) { | |
61 for (int i = 0; i < phaseCounts.length; i++) { | |
62 writer.write(i+"\t"+phaseCounts[i]); | |
63 writer.newLine(); | |
64 } | |
65 } | |
66 } | |
67 | |
68 public static void main(String[] args) { | |
69 new Phasogram().instanceMain(args); | |
70 } | |
71 } |