Mercurial > repos > timpalpant > java_genomics_toolkit
comparison java-genomics-toolkit/src/edu/unc/genomics/wigmath/Multiply.java @ 0:1daf3026d231
Upload alpha version
author | timpalpant |
---|---|
date | Mon, 13 Feb 2012 21:55:55 -0500 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:1daf3026d231 |
---|---|
1 package edu.unc.genomics.wigmath; | |
2 | |
3 import java.io.IOException; | |
4 import java.nio.file.Paths; | |
5 import java.util.ArrayList; | |
6 import java.util.Arrays; | |
7 import java.util.Iterator; | |
8 import java.util.List; | |
9 | |
10 import org.apache.log4j.Logger; | |
11 import org.broad.igv.bbfile.WigItem; | |
12 | |
13 import com.beust.jcommander.Parameter; | |
14 | |
15 import edu.unc.genomics.io.WigFile; | |
16 import edu.unc.genomics.io.WigFileException; | |
17 | |
18 public class Multiply extends WigMathTool { | |
19 | |
20 private static final Logger log = Logger.getLogger(Multiply.class); | |
21 | |
22 @Parameter(description = "Input files", required = true) | |
23 public List<String> inputFiles = new ArrayList<String>(); | |
24 | |
25 @Override | |
26 public void setup() { | |
27 log.debug("Initializing input files"); | |
28 for (String inputFile : inputFiles) { | |
29 try { | |
30 addInputFile(WigFile.autodetect(Paths.get(inputFile))); | |
31 } catch (IOException | WigFileException e) { | |
32 log.error("Error initializing input Wig file: " + inputFile); | |
33 e.printStackTrace(); | |
34 System.exit(-1); | |
35 } | |
36 } | |
37 log.debug("Initialized " + inputs.size() + " input files"); | |
38 } | |
39 | |
40 @Override | |
41 public float[] compute(String chr, int start, int stop) throws IOException, WigFileException { | |
42 log.debug("Computing sum for chunk "+chr+":"+start+"-"+stop); | |
43 | |
44 int length = stop - start + 1; | |
45 float[] product = new float[length]; | |
46 Arrays.fill(product, 1); | |
47 | |
48 for (WigFile wig : inputs) { | |
49 Iterator<WigItem> data = wig.query(chr, start, stop); | |
50 while (data.hasNext()) { | |
51 WigItem item = data.next(); | |
52 for (int i = item.getStartBase(); i <= item.getEndBase(); i++) { | |
53 if (i-start >= 0 && i-start < product.length) { | |
54 product[i-start] *= item.getWigValue(); | |
55 } | |
56 } | |
57 } | |
58 } | |
59 | |
60 return product; | |
61 } | |
62 | |
63 | |
64 /** | |
65 * @param args | |
66 * @throws WigFileException | |
67 * @throws IOException | |
68 */ | |
69 public static void main(String[] args) throws IOException, WigFileException { | |
70 new Multiply().instanceMain(args); | |
71 } | |
72 | |
73 } |