
org.snpeff.snpEffect.VariantEffects Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of SnpEff Show documentation
Show all versions of SnpEff Show documentation
Variant annotation and effect prediction package.
The newest version!
package org.snpeff.snpEffect;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import org.snpeff.interval.Marker;
import org.snpeff.interval.Transcript;
import org.snpeff.interval.Variant;
import org.snpeff.snpEffect.VariantEffect.EffectImpact;
import org.snpeff.snpEffect.VariantEffect.ErrorWarningType;
import org.snpeff.util.Gpr;
/**
* A sorted collection of variant effects
*
* @author pcingola
*/
public class VariantEffects implements Iterable {
public static boolean debug = false;
List effects;
public VariantEffects() {
effects = new ArrayList();
}
/**
* Add an effect
*/
public void add(Variant variant, Marker marker, EffectType effectType, EffectImpact effectImpact, String message) {
VariantEffect effNew = new VariantEffect(variant);
effNew.set(marker, effectType, effectImpact, message);
add(effNew);
}
/**
* Add an effect
*/
public void add(Variant variant, Marker marker, EffectType effectType, String message) {
add(variant, marker, effectType, effectType.effectImpact(), message);
}
/**
* Add an effect
*/
public void add(VariantEffect variantEffect) {
effects.add(variantEffect);
}
/**
* Add: If possible, only add an effect type (otherwise add the full effect)
*/
public void addEffectType(Variant variant, Marker marker, EffectType effectType) {
if (canAddType(variant, marker)) {
get().addEffect(effectType);
} else add(variant, marker, effectType, effectType.effectImpact(), "");
}
public void addErrorWarning(Variant variant, ErrorWarningType errwarn) {
VariantEffect veff = get();
if (veff != null) veff.addErrorWarningInfo(errwarn);
else {
if (debug) Gpr.debug("Could not get latest " + VariantEffect.class.getSimpleName());
veff = new VariantEffect(variant);
veff.addErrorMessage(errwarn);
add(veff);
}
}
/**
* Can we add an effectType to the previous variatnEffect?
* @return true if transcript IDs and variant's genotypes match (i.e. we can add effectType)
*/
boolean canAddType(Variant variant, Marker marker) {
VariantEffect veff = get();
if (veff == null || veff.getVariant() == null) return false;
// Do genotypes match?
String gt = veff.getVariant().getGenotype();
String vgt = variant.getGenotype();
if (((vgt != null) ^ (gt != null)) // One null and one non-null?
|| ((vgt != null) && (gt != null) && !variant.getGenotype().equals(variant.getGenotype())) // Both non-null, but different?
) return false;
// Do transcripts match?
Transcript trMarker = (Transcript) marker.findParent(Transcript.class);
Transcript tr = veff.getTranscript();
if (tr == null || trMarker == null) return false;
return tr.getId().equals(trMarker.getId());
}
/**
* Get (or create) the latest ChangeEffect
*/
public VariantEffect get() {
if (effects.isEmpty()) return null;
return effects.get(effects.size() - 1);
}
public VariantEffect get(int index) {
return effects.get(index);
}
public boolean hasMarker() {
VariantEffect veff = get();
if (veff == null) return false;
return veff.getMarker() != null;
}
public boolean isEmpty() {
return effects.isEmpty();
}
@Override
public Iterator iterator() {
return effects.iterator();
}
public void setMarker(Marker marker) {
VariantEffect veff = get();
if (veff != null) veff.setMarker(marker);
else Gpr.debug("Could not get latest VariantEffect");
}
public int size() {
return effects.size();
}
public void sort() {
Collections.sort(effects);
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("Effects; " + size() + "\n");
for (VariantEffect eff : this)
sb.append(Gpr.prependEachLine("\t", eff.toStr()) + "\n");
return sb.toString();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy