if (currentInterval != null && currentInterval.contains(chr, start, end)) {
return currentInterval.tile;
}
// TODO -- fetch data directly in arrays to avoid creation of multiple "WigItem" objects?
IntArrayList startsList = new IntArrayList(100000);
IntArrayList endsList = new IntArrayList(100000);
FloatArrayList valuesList = new FloatArrayList(100000);
String chrAlias = chrNameMap.containsKey(chr) ? chrNameMap.get(chr) : chr;
Iterator<WigItem> iter = reader.getBigWigIterator(chrAlias, start, chrAlias, end, false);
while (iter.hasNext()) {
WigItem wi = iter.next();
startsList.add(wi.getStartBase());
endsList.add(wi.getEndBase());
valuesList.add(wi.getWigValue());
}
DataTile tile = new DataTile(startsList.toArray(), endsList.toArray(), valuesList.toArray(), null);
currentInterval = new RawDataInterval(chr, start, end, tile);
return tile;
}