package picard.fingerprint;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
import picard.util.TestNGUtil;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
/**
* Created by farjoun on 5/29/15.
*/
public class HaplotypeProbabilityOfNormalGivenTumorTest {
private final double maf = 0.4;
private final Snp snp = new Snp("test", "chr1", 1, (byte) 'A', (byte) 'C', maf, Collections.singletonList("dummy"));
private final HaplotypeBlock hb = new HaplotypeBlock(maf);
@DataProvider(name = "testGetLikelihoodsData")
public Iterator<Object[]> testGetLikelihoodsData() {
final List<Object[]> testData = new ArrayList<>();
//make sure that giving 0 pLoH doesn't change the underlying likelihoods:
testData.add(new Object[]{0.0, new double[]{1, 0, 0}, new double[]{1, 0, 0}});
testData.add(new Object[]{0.0, new double[]{0, 1, 0}, new double[]{0, 1, 0}});
testData.add(new Object[]{0.0, new double[]{0, 0, 1}, new double[]{0, 0, 1}});
testData.add(new Object[]{0.0, new double[]{0, 0.4, 0.6}, new double[]{0, 0.4, 0.6}});
testData.add(new Object[]{0.0, new double[]{0.3, 0.7, 0}, new double[]{0.3, 0.7, 0}});
final double pLoh = 0.1;
//see that non zero pLoH changes the likelihood of a HET site as expected:
testData.add(new Object[]{pLoh, new double[]{0, 1, 0}, new double[]{0, 1 - pLoh, 0}});
//HOMs will change a little
testData.add(new Object[]{pLoh, new double[]{1, 0, 0}, new double[]{1, pLoh/2, 0}});
testData.add(new Object[]{pLoh, new double[]{0, 0, 1}, new double[]{0, pLoh/2, 1}});
testData.add(new Object[]{pLoh, new double[]{.3, 0, .7}, new double[]{.3, pLoh/2, .7}});
// check that the calculation is linear
testData.add(new Object[]{pLoh, new double[]{0, 0.5, 0.5}, new double[]{0, 0.5 * (1 - pLoh/2), 0.5}});
testData.add(new Object[]{pLoh, new double[]{0.5, 0.5, 0}, new double[]{0.5, 0.5 * (1 - pLoh/2), 0}});
return testData.iterator();
}
@Test(dataProvider = "testGetLikelihoodsData")
public void testGetLikelihoods(final double pLoH, final double[] tumorLikelihood, final double[] normalLikelihood) throws Exception {
final HaplotypeProbabilities hp = new HaplotypeProbabilitiesFromGenotype(snp, hb, tumorLikelihood[0], tumorLikelihood[1], tumorLikelihood[2]);
final HaplotypeProbabilities hpTumor = new HaplotypeProbabilityOfNormalGivenTumor(hp, pLoH);
TestNGUtil.assertEqualDoubleArrays(hpTumor.getLikelihoods(), normalLikelihood, 0.0001);
}
}