
umcg.genetica.collections.intervaltree.PerChrIntervalTree Maven / Gradle / Ivy
package umcg.genetica.collections.intervaltree;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import org.apache.log4j.Logger;
import umcg.genetica.variantAnnotator.GenomicRange;
/**
*
* @author Patrick Deelen
*/
public class PerChrIntervalTree {
private final Class classE;
private final HashMap> perChrIntervalTree;
private static final Logger LOGGER = Logger.getLogger(PerChrIntervalTree.class);
public PerChrIntervalTree(Class classE) {
this.classE = classE;
this.perChrIntervalTree = new HashMap>();
}
public void addChrElements(String chr, List elements) throws Exception {
if (perChrIntervalTree.containsKey(chr)) {
throw new Exception("Cannot create " + chr + " interval tree. Already exisits. Appending not possible");
}
perChrIntervalTree.put(chr, new IntervalTree(elements, classE));
}
public List searchPosition(String chr, int pos) {
IntervalTree chrIntervalTree = perChrIntervalTree.get(chr);
if (chrIntervalTree == null) {
return Collections.emptyList();
}
return chrIntervalTree.getElementsOverlappingQuery(pos);
}
public int size() {
int size = 0;
for (IntervalTree chrIntervalTree : perChrIntervalTree.values()) {
size += chrIntervalTree.size();
}
return size;
}
/**
* Elements must be grouped per chromosome
*
* @param elements
* @return
*/
public static PerChrIntervalTree createFromChrGroupedIterable(Iterable elements, Class classT) throws Exception {
PerChrIntervalTree perChrIntervalTree = new PerChrIntervalTree(classT);
ArrayList currentChrElements = null;
String currentChr = "-1";
for (T element : elements) {
if (!element.getSeqname().equals(currentChr)) {
if (currentChrElements != null) {
perChrIntervalTree.addChrElements(currentChr, currentChrElements);
}
currentChrElements = new ArrayList();
currentChr = element.getSeqname();
}
currentChrElements.add(element);
}
if (currentChrElements != null) {
perChrIntervalTree.addChrElements(currentChr, currentChrElements);
}
return perChrIntervalTree;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy