use of com.hartwig.hmftools.common.variant.PurityAdjustedSomaticVariant in project hmftools by hartwigmedical.
the class CopyNumberCharts method variants.
@NotNull
private static CategoryTableXYDataset variants(@NotNull final List<PurityAdjustedSomaticVariant> variants) {
int maxPloidy = 6;
int maxBuckets = maxPloidy * 10;
double[][] buckets = new double[MAX_COPY_NUMBER_SERIES + 1][maxBuckets];
for (final PurityAdjustedSomaticVariant variant : variants) {
double value = variant.adjustedVAF() * variant.adjustedCopyNumber();
int series = (int) Math.max(0, Math.min(MAX_COPY_NUMBER_SERIES, Math.round(variant.adjustedCopyNumber())));
int column = Math.min(maxBuckets - 1, Math.max(0, (int) Math.round(value / 0.1)));
buckets[series][column] += 1;
}
CategoryTableXYDataset result = new CategoryTableXYDataset();
for (int i = 0; i <= MAX_COPY_NUMBER_SERIES; i++) {
String seriesName = "CN" + i + (i == MAX_COPY_NUMBER_SERIES ? "+" : "");
for (int j = 0; j < maxBuckets; j++) {
if (!Doubles.isZero(buckets[i][j])) {
result.add(j * 0.1, buckets[i][j], seriesName);
}
}
}
return result;
}
use of com.hartwig.hmftools.common.variant.PurityAdjustedSomaticVariant in project hmftools by hartwigmedical.
the class LoadSomaticVariants method main.
public static void main(@NotNull final String[] args) throws ParseException, IOException, SQLException {
final Options options = createBasicOptions();
final CommandLine cmd = createCommandLine(args, options);
final String vcfFileLocation = cmd.getOptionValue(VCF_FILE);
final String highConfidenceBed = cmd.getOptionValue(HIGH_CONFIDENCE_BED);
final String fastaFileLocation = cmd.getOptionValue(REF_GENOME);
final String sample = cmd.getOptionValue(SAMPLE);
final DatabaseAccess dbAccess = databaseAccess(cmd);
final CompoundFilter filter = new CompoundFilter(true);
if (cmd.hasOption(PASS_FILTER)) {
filter.add(new PassingVariantFilter());
}
if (cmd.hasOption(SOMATIC_FILTER)) {
filter.add(new SomaticFilter());
}
LOGGER.info("Reading somatic VCF File");
final List<SomaticVariant> variants = SomaticVariantFactory.filteredInstance(filter).fromVCFFile(sample, vcfFileLocation);
LOGGER.info("Reading high confidence bed file");
final Multimap<String, GenomeRegion> highConfidenceRegions = BEDFileLoader.fromBedFile(highConfidenceBed);
LOGGER.info("Loading indexed fasta reference file");
IndexedFastaSequenceFile indexedFastaSequenceFile = new IndexedFastaSequenceFile(new File(fastaFileLocation));
LOGGER.info("Querying purple database");
final PurityContext purityContext = dbAccess.readPurityContext(sample);
if (purityContext == null) {
LOGGER.warn("Unable to retrieve purple data. Enrichment may be incomplete.");
}
final PurityAdjuster purityAdjuster = purityContext == null ? new PurityAdjuster(Gender.FEMALE, 1, 1) : new PurityAdjuster(purityContext.gender(), purityContext.bestFit().purity(), purityContext.bestFit().normFactor());
final Multimap<String, PurpleCopyNumber> copyNumbers = Multimaps.index(dbAccess.readCopynumbers(sample), PurpleCopyNumber::chromosome);
final Multimap<String, FittedRegion> copyNumberRegions = Multimaps.index(dbAccess.readCopyNumberRegions(sample), FittedRegion::chromosome);
LOGGER.info("Incorporating purple purity");
final PurityAdjustedSomaticVariantFactory purityAdjustmentFactory = new PurityAdjustedSomaticVariantFactory(purityAdjuster, copyNumbers, copyNumberRegions);
final List<PurityAdjustedSomaticVariant> purityAdjustedVariants = purityAdjustmentFactory.create(variants);
final double clonalPloidy = ClonalityCutoffKernel.clonalCutoff(purityAdjustedVariants);
LOGGER.info("Enriching variants");
final EnrichedSomaticVariantFactory enrichedSomaticVariantFactory = new EnrichedSomaticVariantFactory(highConfidenceRegions, indexedFastaSequenceFile, new ClonalityFactory(purityAdjuster, clonalPloidy), CanonicalTranscriptFactory.create(HmfGenePanelSupplier.allGeneList()));
final List<EnrichedSomaticVariant> enrichedVariants = enrichedSomaticVariantFactory.enrich(purityAdjustedVariants);
LOGGER.info("Persisting variants to database");
dbAccess.writeSomaticVariants(sample, enrichedVariants);
LOGGER.info("Complete");
}
use of com.hartwig.hmftools.common.variant.PurityAdjustedSomaticVariant in project hmftools by hartwigmedical.
the class GeneCopyNumberFactory method geneCopyNumbers.
@NotNull
public static List<GeneCopyNumber> geneCopyNumbers(@NotNull final List<HmfGenomeRegion> genes, @NotNull final List<PurpleCopyNumber> somaticCopyNumbers, @NotNull final List<PurpleCopyNumber> germlineDeletions, @NotNull final List<PurityAdjustedSomaticVariant> enrichedSomatics) {
final ListMultimap<String, PurityAdjustedSomaticVariant> variantMap = Multimaps.index(enrichedSomatics, SomaticVariant::gene);
final List<GeneCopyNumber> result = Lists.newArrayList();
for (HmfGenomeRegion gene : genes) {
final List<PurityAdjustedSomaticVariant> variants = variantMap.containsKey(gene.gene()) ? variantMap.get(gene.gene()) : Collections.EMPTY_LIST;
final GeneCopyNumberBuilder builder = new GeneCopyNumberBuilder(gene);
RegionZipper.zip(somaticCopyNumbers, gene.exome(), builder);
RegionZipper.zip(germlineDeletions, gene.exome(), builder);
variants.forEach(builder::somatic);
GeneCopyNumber geneCopyNumber = builder.build();
if (geneCopyNumber.totalRegions() > 0) {
result.add(geneCopyNumber);
}
}
return result;
}
Aggregations