All Downloads are FREE. Search and download functionalities are using the official Maven repository.

umcg.genetica.collections.intervaltree.PerChrIntervalTree Maven / Gradle / Ivy

There is a newer version: 1.0.7
Show newest version
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