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

org.snpeff.binseq.indexer.SequenceIndexer Maven / Gradle / Ivy

The newest version!
package org.snpeff.binseq.indexer;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Comparator;
import java.util.Iterator;

import org.snpeff.binseq.BinarySequence;
import org.snpeff.binseq.comparator.SequenceReference;
import org.snpeff.binseq.comparator.SubsequenceComparator;

/**
 * A collection of sequences that are indexed using some algorithm
 * 
 * Note: The ID is just the position in the array. That is why the array 
 * should not change the order of the elements (only append new ones or 
 * replace old ones).
 * 
 * @author pcingola
 */
public class SequenceIndexer implements Comparator, Iterable {

	ArrayList sequences;
	SubsequenceComparator subsequenceComparator;

	public SequenceIndexer(SubsequenceComparator subsequenceComparator) {
		sequences = new ArrayList();
		this.subsequenceComparator = subsequenceComparator;
	}

	/**
	 * Add a collection of sequences
	 * @param sequences
	 */
	public void add(Collection sequences) {
		this.sequences.addAll(sequences);
	}

	/**
	 * Add a sequence to this index
	 * @param sequence
	 * @return Index to this sequence (a number that can be used to retrieve this sequence)
	 */
	public int add(T sequence) {
		sequences.add(sequence);
		return sequences.size() - 1;
	}

	/**
	 * Compare two references
	 * @param reference1
	 * @param reference2
	 * @return
	 */
	@Override
	public int compare(Long reference1, Long reference2) {
		int seqIdx1 = SequenceReference.getSeqIdx(reference1);
		T seq1 = sequences.get(seqIdx1);
		int start1 = SequenceReference.getStart(reference1);

		int seqIdx2 = SequenceReference.getSeqIdx(reference2);
		T seq2 = sequences.get(seqIdx2);
		int start2 = SequenceReference.getStart(reference2);

		int comp = subsequenceComparator.compare(seq1, start1, seq2, start2);
		return comp;
	}

	/**
	 * Get sequence in entry number 'idx'
	 * @param idx
	 * @return
	 */
	public T get(int idx) {
		return sequences.get(idx);
	}

	@Override
	public Iterator iterator() {
		return sequences.iterator();
	}

	/**
	 * Number of sequences in this index
	 * @return
	 */
	public int size() {
		return sequences.size();
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy