/*
* Created on Jan 11, 2007
*
* TODO
*
* To change the template for this generated file go to
* Window - Preferences - Java - Code Style - Code Templates
*/
package org.seqcode.gsebricks.verbs.assignment;
import java.util.*;
import org.seqcode.genome.location.Region;
import org.seqcode.gsebricks.verbs.*;
public class OverlappingRegionExpander<X extends Region> implements Expander<Region,X> {
private HashMap<String,Set<X>> regions;
public OverlappingRegionExpander(Collection<X> regs) {
regions = new HashMap<String,Set<X>>();
for(X r : regs) {
if(!regions.containsKey(r.getChrom())) {
regions.put(r.getChrom(), new HashSet<X>());
}
regions.get(r.getChrom()).add(r);
}
}
public void addRegion(X r) {
String chrom = r.getChrom();
if(!regions.containsKey(chrom)) { regions.put(chrom, new HashSet<X>()); }
regions.get(chrom).add(r);
}
public Iterator<X> execute(Region a) {
LinkedList<X> overlaps = new LinkedList<X>();
if(regions.containsKey(a.getChrom())) {
for(X r : regions.get(a.getChrom())) {
if(a.overlaps(r)) {
overlaps.addLast(r);
}
}
}
return overlaps.iterator();
}
}