/*
* The MIT License (MIT)
*
* Copyright (c) 2007-2015 Broad Institute
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
package org.broad.igv.variant;
import htsjdk.tribble.Feature;
import java.util.Collection;
import java.util.List;
import java.util.Map;
/**
* Represents a variant call on a collection of samples.
*
* @author jrobinso
* @date Jan 20, 2011
*/
public interface Variant extends Feature {
/**
* @return the identifier for this variant. This is the "ID" attribute in VCF files, and is typically a
* dbSnp id. This method can return null, which means that no ID has been assigned. There is not
*/
String getID();
/**
* @return the type of this variant as a String. Any String value is legal, typical values from VCF files include
* NO_VARIATION, SNP, MNP, INDEL, SYMBOLIC, MIXED
*/
String getType();
/**
* @return return true if the variant has been marked as filtered
*/
boolean isFiltered();
/**
* =
*
* @return the phred scale quality score of this variant.
*/
double getPhredScaledQual();
/**
* @return the map of all attributes. This cannot be null, if there are no attributes return an empty map.
*/
Map<String, Object> getAttributes();
/**
* Return the string value of an attribute. Can be null.
*
* @param key
* @return the attribute for the given key
*/
String getAttributeAsString(String key);
/**
* @return The reference sequence for this variant
*/
String getReference();
/**
* Return the list of alternate alleles for this variant. This should not return null.
*
* @return
*/
List<Allele> getAlternateAlleles();
/**
* Return the allele frequency for this variant, possibly from an annotation as opposed to the actual
* sample genotypes associated with this variant.
*/
double[] getAlleleFreqs();
/**
* Return the allele fraction for this variant. The allele fraction is similiar to allele frequency,
* but is based on the specific samples in this VCF as opposed to an annotation.
* <p/>
* A value of -1 indicates unknown
*/
// double getAlleleFraction();
/**
* Return the list of sample names associated with this variant.
*
* @return
*/
Collection<String> getSampleNames();
/**
* Return the genotype for the given sample
*
* @param sample
* @return
*/
Genotype getGenotype(String sample);
/**
* @return the list of filters applied to this variant. Should not return null, return an empty collection if no filters.
*/
Collection<String> getFilters();
// /**
// * @return the count of genotypes for this variant called as homozygous variant
// */
// public int getHomVarCount();
//
// /**
// * @return the count of genotypes for this variant called as heterozygous variant
// */
// public int getHetCount();
//
// /**
// * @return the count of genotypes for this variant called as homozygous reference
// */
// public int getHomRefCount();
//
// /**
// * @return the count of genotypes for this variant that are no-calls
// */
// public int getNoCallCount();
double getMethlationRate();
double getCoveredSampleFraction();
String getPositionString();
int[] getAlleleCounts();
double getAlternateAlleleFrequency();
int getTotalAlleleCount();
double getAlleleFraction();
}