private void writeDatasets() throws IOException { for (TDFDataset dataset : datasetCache.values()) { long position = bytesWritten; BufferedByteWriter buffer = new BufferedByteWriter(); dataset.write(buffer); write(buffer.getBytes()); int nBytes = (int) (bytesWritten - position); datasetIndex.put(dataset.getName(), new IndexEntry(position, nBytes)); } }
public TDFDataset createDataset(String name, TDFDataset.DataType dataType, int tileWidth, int nTiles) { if (datasetCache.containsKey(name)) { throw new RuntimeException("Dataset: " + name + " already exists"); } TDFDataset ds = new TDFDataset(name, dataType, tileWidth, nTiles); datasetCache.put(name, ds); return ds; }
public TDFDataset(String name, ByteBuffer byteBuffer, TDFReader reader) throws IOException { super(name); this.reader = reader; fill(byteBuffer); }
public TDFTile readTile(TDFDataset ds, int tileNumber) { try { if (tileNumber >= ds.tilePositions.length) { // TODO - return empty tile return null; } long position = ds.tilePositions[tileNumber]; if (position < 0) { // Indicates empty tile // TODO -- return an empty tile? return null; } int nBytes = ds.tileSizes[tileNumber]; byte[] buffer = readBytes(position, nBytes); if (compressed) { buffer = CompressionUtils.decompress(buffer); } return TileFactory.createTile(buffer, trackNames.length); } catch (IOException ex) { String tileName = ds.getName() + "[" + tileNumber + "]"; log.error("Error reading data tile: " + tileName, ex); throw new RuntimeException("System error occured while reading tile: " + tileName); } }
int rangeEnd = r.getTo() + 1; int usefulStep = Math.max(1, r.getLength() / NOTIONAL_SCREEN_WIDTH); // No need for more points than we have pixels. List<TDFTile> tiles = ds.getTiles(r.getFrom(), rangeEnd); for (TDFTile t : tiles) { for (int i = 0; i < t.getSize() && nextPos <= rangeEnd; i++) {
public void write(BufferedByteWriter dos) throws IOException { writeAttributes(dos); writeString(dos, dataType.toString()); dos.putFloat(tileWidth); // dos.writeFloat(binWidth); dos.putInt(tilePositions.length); for (int i = 0; i < tilePositions.length; i++) { dos.putLong(tilePositions[i]); dos.putInt(tileSizes[i]); } }
if(chrDataset == null) continue; List<TDFTile> chrTiles = chrDataset.getTiles(); chrDataset.clearCache(); // Don't cache these for (TDFTile t : chrTiles) { int[] chrStart = t.getStart();
public List<TDFTile> getTiles() { List<TDFTile> tiles = new ArrayList<TDFTile>(); for (int t = 0; t < nTiles; t++) { TDFTile tile = getTile(t); if (tile != null) { tiles.add(tile); } } return tiles; }
private void fill(ByteBuffer byteBuffer) throws IOException { // Attributes readAttributes(byteBuffer); String typeString = StringUtils.readString(byteBuffer); dataType = TDFDataset.DataType.valueOf(typeString); // TODO -- change tileWidth to int ? tileWidth = (int) byteBuffer.getFloat(); nTiles = byteBuffer.getInt(); tilePositions = new long[nTiles]; tileSizes = new int[nTiles]; for (int i = 0; i < nTiles; i++) { tilePositions[i] = byteBuffer.getLong(); tileSizes[i] = byteBuffer.getInt(); } }
public TDFTile readTile(TDFDataset ds, int tileNumber) { try { if (tileNumber >= ds.tilePositions.length) { // TODO - return empty tile return null; } long position = ds.tilePositions[tileNumber]; if (position < 0) { // Indicates empty tile // TODO -- return an empty tile? return null; } int nBytes = ds.tileSizes[tileNumber]; //fis.seek(position); //byte[] buffer = new byte[nBytes]; //readFully(buffer); byte[] buffer = readBytes(position, nBytes); if (compressed) { buffer = compressionUtils.decompress(buffer); } return TileFactory.createTile(buffer, trackNames.length); } catch (IOException ex) { String tileName = ds.getName() + "[" + tileNumber + "]"; log.error("Error reading data tile: " + tileName, ex); throw new RuntimeException("System error occured while reading tile: " + tileName); } }
TDFDataset ds = reader.getDataset(querySeq, zoom, windowFunction); if (ds != null) { tiles = ds.getTiles(startLocation, endLocation);
public void write(BufferedByteWriter dos) throws IOException { writeAttributes(dos); writeString(dos, dataType.toString()); dos.putFloat(tileWidth); // dos.writeFloat(binWidth); dos.putInt(tilePositions.length); for (int i = 0; i < tilePositions.length; i++) { dos.putLong(tilePositions[i]); dos.putInt(tileSizes[i]); } }
public List<TDFTile> getTiles(int startLocation, int endLocation) { List<TDFTile> tiles = new ArrayList(); int startTile = (int) (startLocation / tileWidth); int endTile = (int) (endLocation / tileWidth); for (int t = startTile; t <= endTile; t++) { TDFTile tile = getTile(t); if (tile != null && tile.getSize() > 0) { tiles.add(tile); } } return tiles; }
private void fill(ByteBuffer byteBuffer) throws IOException { // Attributes readAttributes(byteBuffer); String typeString = StringUtils.readString(byteBuffer); dataType = TDFDataset.DataType.valueOf(typeString); // TODO -- change tileWidth to int ? tileWidth = (int) byteBuffer.getFloat(); nTiles = byteBuffer.getInt(); tilePositions = new long[nTiles]; tileSizes = new int[nTiles]; for (int i = 0; i < nTiles; i++) { tilePositions[i] = byteBuffer.getLong(); tileSizes[i] = byteBuffer.getInt(); } }
synchronized TDFTile getTile(int t) { String key = getName() + "_" + t; TDFTile tile = null; if (!cache.containsKey(key)) { tile = reader.readTile(this, t); cache.put(key, tile); } else { tile = cache.get(key); } return tile; }
private List<LocusScore> getWGRawScores() { List<LocusScore> scores = new ArrayList(10000); for (String chr : genome.getAllChromosomeNames()) { Chromosome c = genome.getChromosome(chr); String dsName = "/" + chr + "/raw"; TDFDataset rawDataset = reader.getDataset(dsName); if (rawDataset != null) { List<TDFTile> rawTiles = rawDataset.getTiles(0, c.getLength()); if (rawTiles.size() > 0) { for (TDFTile rawTile : rawTiles) { // Tile of raw data if (rawTile != null && rawTile.getSize() > 0) { for (int i = 0; i < rawTile.getSize(); i++) { int s = genome.getGenomeCoordinate(chr, rawTile.getStartPosition(i)); int e = genome.getGenomeCoordinate(chr, Math.max(s, rawTile.getEndPosition(i) - 1)); float v = rawTile.getValue(trackNumber, i); if (!Float.isNaN(v)) { v *= normalizationFactor; } scores.add(new BasicScore(s, e, v)); } } } } } } return scores; }
private void writeDatasets() throws IOException { for (TDFDataset dataset : datasetCache.values()) { long position = bytesWritten; BufferedByteWriter buffer = new BufferedByteWriter(); dataset.write(buffer); write(buffer.getBytes()); int nBytes = (int) (bytesWritten - position); datasetIndex.put(dataset.getName(), new IndexEntry(position, nBytes)); } }
public List<TDFTile> getTiles(int startLocation, int endLocation) { List<TDFTile> tiles = new ArrayList(); int startTile = (int) (startLocation / tileWidth); int endTile = (int) (endLocation / tileWidth); for (int t = startTile; t <= endTile; t++) { TDFTile tile = getTile(t); if (tile != null && tile.getSize() > 0) { tiles.add(tile); } } return tiles; }
public TDFDataset createDataset(String name, TDFDataset.DataType dataType, int tileWidth, int nTiles) { if (datasetCache.containsKey(name)) { throw new RuntimeException("Dataset: " + name + " already exists"); } TDFDataset ds = new TDFDataset(name, dataType, tileWidth, nTiles); datasetCache.put(name, ds); return ds; }
public TDFDataset(String name, ByteBuffer byteBuffer, TDFReader reader) throws IOException { super(name); this.reader = reader; fill(byteBuffer); }