Hi.
Could you recommend me a Java API to handle BED files?
For now I simply need to know if a given locus is in one of the features described by a BED file.
Thanks
Hi.
Could you recommend me a Java API to handle BED files?
For now I simply need to know if a given locus is in one of the features described by a BED file.
Thanks
you could use the tabix interface for java (requires the picard library) to quickly find the records in a given range:
then
or you can add your layer of abstraction by declaring a bunch of java classes :-)
public interface BedRecord { public String getChromosome(); (...) }
and
public abstract class AbstractBedRecord implements BedRecord
{
@Override
public abstract String getChromosome();
(...)
}
and
public abstract class DefaultBedRecord extends AbstractBedRecord
{
@Override
public String getChromosome() { ... }
(...)
}
and
public interface BedRecordFactory
{
public BedRecord parse(String line);
(...)
}
and
public class DefaultBedRecordFactory implements BedRecordFactory
{
@Override
public BedRecord parse(String line) { ... }
(...)
}
you know, all those java things :-) ....
or you could put your records in a database, using a bin index
etc...
See my code. I am not sure if this is intended to work this way but you can play with that at least.
import htsjdk.tribble.bed.BEDCodec;
import htsjdk.tribble.bed.BEDFeature;
import htsjdk.tribble.bed.BEDCodec.StartOffset;
import htsjdk.tribble.readers.AsciiLineReader;
import htsjdk.tribble.readers.LineIteratorImpl;
List<BEDFeature> allFeatures;
int x;
HashMap<String, List<BEDFeature>> chrToBF;
public AmpliconDesign(File ampliconsBed) throws IOException
{
chrToBF = new HashMap<String, List<BEDFeature>>();
allFeatures = new ArrayList<BEDFeature>();
InputStream is = new java.io.FileInputStream(ampliconsBed);
AsciiLineReader lr = new AsciiLineReader(is);
LineIteratorImpl li = new LineIteratorImpl(lr);
BEDCodec bc = new BEDCodec(StartOffset.ZERO);
while(!bc.isDone(li))
{
BEDFeature bf = bc.decode(li);
if(bf != null)
{
allFeatures.add(bf);
if(chrToBF.containsKey(bf.getChr()))
{
chrToBF.get(bf.getChr()).add(bf);
}else
{
List<BEDFeature> a = new ArrayList<BEDFeature>();
a.add(bf);
chrToBF.put(bf.getChr(), a);
}
}
}
this.x = allFeatures.size();
}
Use of this site constitutes acceptance of our User Agreement and Privacy Policy.