use of com.hartwig.hmftools.svannotation.analysis.StructuralVariantAnalyzer in project hmftools by hartwigmedical.
the class PatientReporterTest method canRunOnRunDirectory.
@Test
public void canRunOnRunDirectory() throws IOException {
final GeneModel geneModel = new GeneModel(HmfGenePanelSupplier.hmfPanelGeneMap());
final BaseReporterData baseReporterData = testBaseReporterData();
final HmfReporterData reporterData = testHmfReporterData();
final VariantAnalyzer variantAnalyzer = VariantAnalyzer.of(geneModel, reporterData.microsatelliteAnalyzer());
final StructuralVariantAnalyzer svAnalyzer = new StructuralVariantAnalyzer(new TestAnnotator(), geneModel.regions(), CosmicFusions.readFromCSV(FUSIONS_CSV));
final PatientReporter algo = ImmutablePatientReporter.of(baseReporterData, reporterData, variantAnalyzer, svAnalyzer, mockedCivicAnalyzer());
assertNotNull(algo.run(RUN_DIRECTORY, null));
}
use of com.hartwig.hmftools.svannotation.analysis.StructuralVariantAnalyzer in project hmftools by hartwigmedical.
the class LoadStructuralVariants method main.
public static void main(@NotNull final String[] args) throws ParseException, IOException, SQLException {
final Options options = createBasicOptions();
final CommandLine cmd = createCommandLine(args, options);
boolean loadFromDB = cmd.hasOption(LOAD_FROM_DB);
final String tumorSample = cmd.getOptionValue(SAMPLE);
boolean runClustering = cmd.hasOption(CLUSTER_SVS);
boolean createFilteredPON = cmd.hasOption(WRITE_FILTERED_SVS);
boolean reannotateFromVCFs = cmd.hasOption(REANNOTATE_FROM_VCFS);
final DatabaseAccess dbAccess = cmd.hasOption(DB_URL) ? databaseAccess(cmd) : null;
if (cmd.hasOption(LOG_DEBUG)) {
Configurator.setRootLevel(Level.DEBUG);
}
if (createFilteredPON) {
LOGGER.info("reading VCF files including filtered SVs");
FilteredSVWriter filteredSvWriter = new FilteredSVWriter(cmd.getOptionValue(VCF_FILE), cmd.getOptionValue(DATA_OUTPUT_PATH));
filteredSvWriter.processVcfFiles();
LOGGER.info("reads complete");
return;
}
if (reannotateFromVCFs) {
LOGGER.info("reading VCF files to re-annotate");
// for now just re-read the VCFs and write out new annotations to file
// may later on turn into update SQL once clustering does the same
SvVCFAnnotator vcfAnnotator = new SvVCFAnnotator(cmd.getOptionValue(VCF_FILE), cmd.getOptionValue(DATA_OUTPUT_PATH));
vcfAnnotator.processVcfFiles();
return;
}
StructuralVariantClustering svClusterer = null;
if (runClustering) {
LOGGER.info("will run clustering logic");
SvClusteringConfig clusteringConfig = new SvClusteringConfig();
clusteringConfig.setOutputCsvPath(cmd.getOptionValue(DATA_OUTPUT_PATH));
clusteringConfig.setBaseDistance(Integer.parseInt(cmd.getOptionValue(CLUSTER_BASE_DISTANCE, "0")));
clusteringConfig.setUseCombinedOutputFile(tumorSample.equals("*"));
clusteringConfig.setSvPONFile(cmd.getOptionValue(SV_PON_FILE, ""));
clusteringConfig.setFragileSiteFile(cmd.getOptionValue(FRAGILE_SITE_FILE, ""));
clusteringConfig.setLineElementFile(cmd.getOptionValue(LINE_ELEMENT_FILE, ""));
clusteringConfig.setExternalAnnotationsFile(cmd.getOptionValue(EXTERNAL_ANNOTATIONS, ""));
svClusterer = new StructuralVariantClustering(clusteringConfig);
}
if (createFilteredPON) {
LOGGER.info("reading VCF file including filtered SVs");
FilteredSVWriter filteredSvWriter = new FilteredSVWriter(cmd.getOptionValue(VCF_FILE), cmd.getOptionValue(DATA_OUTPUT_PATH));
filteredSvWriter.processVcfFiles();
LOGGER.info("reads complete");
return;
}
if (!loadFromDB) {
boolean skipAnnotations = cmd.hasOption(SKIP_ANNOTATIONS);
LOGGER.info("reading VCF File");
final List<StructuralVariant> variants = readFromVcf(cmd.getOptionValue(VCF_FILE), true);
LOGGER.info("enriching structural variants based on purple data");
final List<EnrichedStructuralVariant> enrichedVariantWithoutPrimaryId = enrichStructuralVariants(variants, dbAccess, tumorSample);
LOGGER.info("persisting variants to database");
dbAccess.writeStructuralVariants(tumorSample, enrichedVariantWithoutPrimaryId);
// NEVA: We read after we write to populate the primaryId field
final List<EnrichedStructuralVariant> enrichedVariants = dbAccess.readStructuralVariants(tumorSample);
LOGGER.info("initialising MqSql annotator");
final VariantAnnotator annotator = MySQLAnnotator.make("jdbc:" + cmd.getOptionValue(ENSEMBL_DB));
LOGGER.info("loading Cosmic Fusion data");
final CosmicFusionModel cosmicGeneFusions = CosmicFusions.readFromCSV(cmd.getOptionValue(FUSION_CSV));
final StructuralVariantAnalyzer analyzer = new StructuralVariantAnalyzer(annotator, HmfGenePanelSupplier.hmfPanelGeneList(), cosmicGeneFusions);
LOGGER.info("analyzing structural variants for impact via disruptions and fusions");
final StructuralVariantAnalysis analysis = analyzer.run(enrichedVariants, skipAnnotations);
if (runClustering) {
svClusterer.loadFromEnrichedSVs(tumorSample, enrichedVariants);
svClusterer.runClustering();
}
LOGGER.info("persisting annotations to database");
final StructuralVariantAnnotationDAO annotationDAO = new StructuralVariantAnnotationDAO(dbAccess.context());
annotationDAO.write(analysis);
} else {
// KODU: Below assert feels somewhat risky!?
assert runClustering;
List<String> samplesList = Lists.newArrayList();
if (tumorSample.isEmpty() || tumorSample.equals("*")) {
samplesList = getStructuralVariantSamplesList(dbAccess);
} else if (tumorSample.contains(",")) {
String[] tumorList = tumorSample.split(",");
samplesList = Arrays.stream(tumorList).collect(Collectors.toList());
} else {
samplesList.add(tumorSample);
}
int count = 0;
for (final String sample : samplesList) {
++count;
LOGGER.info("clustering for sample({}), total({})", sample, count);
List<SvClusterData> svClusterData = queryStructuralVariantData(dbAccess, sample);
svClusterer.loadFromDatabase(sample, svClusterData);
// LOGGER.info("data loaded", sample, count);
svClusterer.runClustering();
// LOGGER.info("clustering complete", sample, count);
// if(count > 10)
// break;
}
}
svClusterer.close();
LOGGER.info("run complete");
}
use of com.hartwig.hmftools.svannotation.analysis.StructuralVariantAnalyzer in project hmftools by hartwigmedical.
the class PatientReporter method analyseGenomeData.
@NotNull
private GenomeAnalysis analyseGenomeData(@NotNull final String sample, @NotNull final String runDirectory) throws IOException {
LOGGER.info(" Loading somatic snv and indels...");
final List<SomaticVariant> variants = PatientReporterHelper.loadPassedSomaticVariants(sample, runDirectory);
LOGGER.info(" " + variants.size() + " somatic passed snps, mnps and indels loaded for sample " + sample);
LOGGER.info(" Analyzing somatic snp/mnp and indels....");
final VariantAnalysis variantAnalysis = variantAnalyzer().run(variants);
LOGGER.info(" Loading purity numbers...");
final PurityContext context = PatientReporterHelper.loadPurity(runDirectory, sample);
if (context.status().equals(FittedPurityStatus.NO_TUMOR)) {
LOGGER.warn("PURPLE DID NOT DETECT A TUMOR. Proceed with utmost caution!");
}
final FittedPurity purity = context.bestFit();
final FittedPurityScore purityScore = context.score();
final List<PurpleCopyNumber> purpleCopyNumbers = PatientReporterHelper.loadPurpleCopyNumbers(runDirectory, sample);
final List<GeneCopyNumber> panelGeneCopyNumbers = PatientReporterHelper.loadPurpleGeneCopyNumbers(runDirectory, sample).stream().filter(x -> reporterData().panelGeneModel().panel().contains(x.gene())).collect(Collectors.toList());
LOGGER.info(" " + purpleCopyNumbers.size() + " purple copy number regions loaded for sample " + sample);
LOGGER.info(" Analyzing purple somatic copy numbers...");
final PurpleAnalysis purpleAnalysis = ImmutablePurpleAnalysis.builder().gender(context.gender()).status(context.status()).fittedPurity(purity).fittedScorePurity(purityScore).copyNumbers(purpleCopyNumbers).panelGeneCopyNumbers(panelGeneCopyNumbers).build();
final Path structuralVariantVCF = PatientReporterHelper.findStructuralVariantVCF(runDirectory);
LOGGER.info(" Loading structural variants...");
final List<StructuralVariant> structuralVariants = StructuralVariantFileLoader.fromFile(structuralVariantVCF.toString(), true);
LOGGER.info(" Enriching structural variants with purple data.");
final List<EnrichedStructuralVariant> enrichedStructuralVariants = purpleAnalysis.enrichStructuralVariants(structuralVariants);
LOGGER.info(" Analysing structural variants...");
final StructuralVariantAnalysis structuralVariantAnalysis = structuralVariantAnalyzer().run(enrichedStructuralVariants, false);
return ImmutableGenomeAnalysis.of(sample, variantAnalysis, purpleAnalysis, structuralVariantAnalysis);
}
use of com.hartwig.hmftools.svannotation.analysis.StructuralVariantAnalyzer in project hmftools by hartwigmedical.
the class PatientReporterApplication method buildReporter.
@NotNull
private static PatientReporter buildReporter(@NotNull final CommandLine cmd, @NotNull final HmfReporterData reporterData) throws IOException, SQLException {
final VariantAnalyzer variantAnalyzer = VariantAnalyzer.of(reporterData.panelGeneModel(), reporterData.microsatelliteAnalyzer());
final VariantAnnotator annotator;
if (cmd.hasOption(ENSEMBL_DB)) {
final String url = "jdbc:" + cmd.getOptionValue(ENSEMBL_DB);
LOGGER.info("connecting to: {}", url);
annotator = MySQLAnnotator.make(url);
} else {
annotator = NullAnnotator.make();
}
final StructuralVariantAnalyzer svAnalyzer = new StructuralVariantAnalyzer(annotator, reporterData.panelGeneModel().regions(), reporterData.cosmicFusionModel());
return ImmutablePatientReporter.of(buildBaseReporterData(cmd), reporterData, variantAnalyzer, svAnalyzer, new CivicAnalyzer());
}
Aggregations