@Override public List<GenericContinuousRecord> getRecords(String ref, RangeAdapter range, Resolution resolution, RecordFilterAdapter filt) throws IOException, InterruptedException { List<GenericContinuousRecord> result = new ArrayList<GenericContinuousRecord>(); try { BigWigIterator wigIterator = bbReader.getBigWigIterator(ref, range.getFrom(), ref, range.getTo(), false); int nextPos = range.getFrom(); int rangeEnd = range.getTo(); while (wigIterator.hasNext()) { WigItem wig = wigIterator.next(); int datumStart = wig.getStartBase(); int datumEnd = wig.getEndBase(); float value = wig.getWigValue(); while (nextPos < datumStart && nextPos <= rangeEnd) { result.add(GenericContinuousRecord.valueOf(ref, nextPos, Float.NaN)); nextPos++; } while (nextPos < datumEnd && nextPos <= rangeEnd) { result.add(GenericContinuousRecord.valueOf(ref, nextPos, value)); nextPos++; } if (Thread.interrupted()) { throw new InterruptedException(); } } } catch (RuntimeException ignored) { // If BigWig reader has no data in the given range, it throws a RuntimeException. Really? Who does that? } return result; }
private static String initRegionFromBigWig(String bigWigFile) throws IOException{ BBFileReader reader= new BBFileReader(bigWigFile); if(! reader.isBigWigFile()){ System.err.println("File " + bigWigFile + " is not bigWig."); throw new RuntimeException(); } String region= reader.getChromosomeNames().get(0); // Just get chrom to start with for(String chrom : reader.getChromosomeNames()){ BigWigIterator iter = reader.getBigWigIterator(chrom, 0, chrom, Integer.MAX_VALUE, false); if(iter.hasNext()){ WigItem x = iter.next(); region= x.getChromosome() + ":" + (x.getStartBase() + 1); reader.close(); return region; } } reader.close(); return region; }
WigItem wigItem = bwIterator.next();
@Test public void canReadBigWigFromRemote() throws IOException{ // String urlStr= "http://hgdownload.cse.ucsc.edu/goldenPath/hg19/encodeDCC/wgEncodeHaibTfbs/wgEncodeHaibTfbsA549Atf3V0422111Etoh02RawRep1.bigWig"; String urlStr= "http://hgdownload.cse.ucsc.edu/goldenPath/hg19/encodeDCC/wgEncodeHaibTfbs/wgEncodeHaibTfbsA549Cebpbsc150V0422111RawRep1.bigWig"; BBFileReader reader=new BBFileReader(urlStr); System.out.println(reader.getChromosomeNames()); BigWigIterator iter = reader.getBigWigIterator("chr1", 1000000, "chr1", 2000000, true); while(iter.hasNext()){ System.out.println(iter.next().getStartBase()); } System.out.println("NEW"); iter = reader.getBigWigIterator("chr10", 1000000, "chr10", 2000000, true); while(iter.hasNext()){ System.out.println(iter.next().getStartBase()); } reader.close(); }
/** Populate object using bigWig data * @throws IOException * @throws InvalidGenomicCoordsException */ private void bigWigToScores(BBFileReader reader) throws InvalidGenomicCoordsException, IOException{ // List of length equal to screen size. Each inner map contains info about the screen locus List<ScreenWiggleLocusInfo> screenWigLocInfoList= new ArrayList<ScreenWiggleLocusInfo>(); for(int i= 0; i < getGc().getUserWindowSize(); i++){ screenWigLocInfoList.add(new ScreenWiggleLocusInfo()); } BigWigIterator iter = reader.getBigWigIterator(getGc().getChrom(), getGc().getFrom(), getGc().getChrom(), getGc().getTo(), false); while(iter.hasNext()){ WigItem bw = iter.next(); for(int i= bw.getStartBase(); i <= bw.getEndBase(); i++){ int idx= Utils.getIndexOfclosestValue(i, this.getGc().getMapping()); // Where should this position be mapped on screen? screenWigLocInfoList.get(idx).increment(bw.getWigValue()); } } List<Float> screenScores= new ArrayList<Float>(); for(ScreenWiggleLocusInfo x : screenWigLocInfoList){ screenScores.add((float)x.getMeanScore()); } this.setScreenScores(screenScores); }
int length, chunkStart, chunkEnd; while (bigWigIterator.hasNext()) { wItem = bigWigIterator.next(); chunkStart = (Math.max(region.getStart(), wItem.getStartBase()) - region.getStart()) / windowSize; chunkEnd = (Math.min(region.getEnd(), wItem.getEndBase()) - region.getStart() - 1) / windowSize;
/** * Query by a given region. * * @param region Region target * @return Array of floating values for that region * @throws IOException */ public float[] query(Region region) throws IOException { BigWigIterator bigWigIterator = iterator(region); float[] values = new float[region.getEnd() - region.getStart() + 1]; while (bigWigIterator.hasNext()) { WigItem wigItem = bigWigIterator.next(); for (int i = wigItem.getStartBase(), j = wigItem.getStartBase() - region.getStart(); i <= wigItem.getEndBase(); i++, j++) { values[j] = wigItem.getWigValue(); } } return values; }
BigWigIterator iter = reader.getBigWigIterator(chr, 0, chr, Integer.MAX_VALUE, false); while (iter.hasNext()) { WigItem item = iter.next(); values[nValues++] = item.getWigValue(); if (nValues >= 10000) break;