Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
41 commits
Select commit Hold shift + click to select a range
ad30f46
Esvee: removed private method only
charlesshale Jun 19, 2026
238af7a
Esvee: removed redundant code
charlesshale Jun 22, 2026
17c222e
Esvee: removed private method
charlesshale Jun 22, 2026
bdf6af9
Merge branch 'master' of https://github.com/hartwigmedical/hmftools
charlesshale Jun 22, 2026
6720c4d
Merge branch 'master' of https://github.com/hartwigmedical/hmftools
charlesshale Jun 23, 2026
dff3459
Merge branch 'master' of https://github.com/hartwigmedical/hmftools
charlesshale Jun 26, 2026
18d9387
Merge branch 'master' of https://github.com/hartwigmedical/hmftools
charlesshale Jun 29, 2026
2eb5549
Merge branch 'master' of https://github.com/hartwigmedical/hmftools
charlesshale Jun 30, 2026
2a704c5
Merge branch 'master' of https://github.com/hartwigmedical/hmftools
charlesshale Jul 2, 2026
65d4ad6
Merge branch 'master' of https://github.com/hartwigmedical/hmftools
charlesshale Jul 2, 2026
0ddfcf8
Merge branch 'master' of https://github.com/hartwigmedical/hmftools
charlesshale Jul 13, 2026
1056453
Merge branch 'master' of https://github.com/hartwigmedical/hmftools
charlesshale Jul 15, 2026
eab6c69
Merge branch 'master' of https://github.com/hartwigmedical/hmftools
charlesshale Jul 15, 2026
82aa9a4
Merge branch 'master' of https://github.com/hartwigmedical/hmftools
charlesshale Jul 16, 2026
d526cba
Merge branch 'master' of https://github.com/hartwigmedical/hmftools
charlesshale Jul 23, 2026
a33829e
Merge branch 'master' of https://github.com/hartwigmedical/hmftools
charlesshale Jul 26, 2026
b130e20
Purple: clean-up only
charlesshale Jul 28, 2026
5c1ae6a
Purple: resegmentation calc penalty
charlesshale Aug 4, 2026
ffd8f6c
Purple: added resegmentation routine
charlesshale Aug 7, 2026
e902948
Purple: added resegmentation tests
charlesshale Aug 8, 2026
22a6e32
Linx: disruption drivers use likelihood 1 if undisrupted copies < 0.5
charlesshale Aug 11, 2026
b12e8ce
Purple: minor refactors to resegmentation
charlesshale Aug 14, 2026
8ee1244
Purple: reseg set merged regions field use baf and depth weights
charlesshale Aug 14, 2026
864c66a
Purple: reseg blend final diploid regions
charlesshale Aug 15, 2026
394dce2
Purple: reseg fixed aggregate diploid region obs tumor ratio and BAF
charlesshale Aug 17, 2026
b3075cf
Purple: reseg handle null primary peak
charlesshale Aug 17, 2026
78c573b
Purple: reseg minor change to blending
charlesshale Aug 19, 2026
0875abf
Purple: reseg do gc norm before calculating penalty
charlesshale Aug 19, 2026
439ebc6
Linx: fixed max del and dup length getters
charlesshale Aug 20, 2026
0733912
Linx: fixed another ref to long dup cut-off length in clustering
charlesshale Aug 20, 2026
d6724ac
Linx: code clean-up only
charlesshale Aug 20, 2026
068e1a1
Linx: version to 2.4
charlesshale Aug 20, 2026
8eab3fa
Purple: resegmentation on by default for non-panel, fixed minor reseg…
charlesshale Aug 25, 2026
7b85c18
Purple:
charlesshale Aug 26, 2026
4f6eb7f
Purple: reseg minor fix for handling skipped regions
charlesshale Aug 27, 2026
9331a15
Common: Ensembl cache data files now expect ref genome version in name
charlesshale Aug 26, 2026
c8e7479
Common: ensembl data file loading checks for old filename
charlesshale Aug 31, 2026
7a365fa
Purple, Linx, BamMetrics: check driver gene names against Ensembl
charlesshale Sep 2, 2026
49187ba
Sage: check driver gene names against Ensembl
charlesshale Sep 2, 2026
aa2ac49
Merge branch 'master' into AUS419-purple-ffpe
charlesshale Sep 15, 2026
5b01091
Linx: use constant for disruption reportabililty test, minor logging …
charlesshale Sep 15, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import static com.hartwig.hmftools.bamtools.common.CommonUtils.BT_LOGGER;
import static com.hartwig.hmftools.common.driver.panel.DriverGenePanelConfig.DRIVER_GENE_PANEL;
import static com.hartwig.hmftools.common.driver.panel.DriverGeneRegions.buildDriverGeneRegions;
import static com.hartwig.hmftools.common.driver.panel.DriverGeneRegions.findInvalidDriverGenes;
import static com.hartwig.hmftools.common.ensemblcache.EnsemblDataCache.ENSEMBL_DATA_DIR;
import static com.hartwig.hmftools.common.metrics.GeneDepthFile.generateExonCoverageFilename;
import static com.hartwig.hmftools.common.metrics.GeneDepthFile.generateGeneCoverageFilename;
Expand All @@ -24,6 +25,7 @@
import com.google.common.collect.Maps;
import com.hartwig.hmftools.common.driver.panel.DriverGene;
import com.hartwig.hmftools.common.driver.panel.DriverGenePanelConfig;
import com.hartwig.hmftools.common.driver.panel.DriverGeneRegions;
import com.hartwig.hmftools.common.ensemblcache.EnsemblDataCache;
import com.hartwig.hmftools.common.gene.GeneRegion;
import com.hartwig.hmftools.common.region.ChrBaseRegion;
Expand Down Expand Up @@ -57,6 +59,14 @@ public GeneCoverage(final ConfigBuilder configBuilder)

List<DriverGene> driverGenes = DriverGenePanelConfig.loadDriverGenes(configBuilder);

List<DriverGene> invalidDriverGenes = findInvalidDriverGenes(driverGenes, ensemblDataCache);
if(!invalidDriverGenes.isEmpty())
{
BT_LOGGER.error("Invalid non-Ensembl gene names: {}",
invalidDriverGenes.stream().map( x -> x.gene()).collect(Collectors.joining(";")));
System.exit(1);
}

List<String> coverageGenes = driverGenes.stream().map(x -> x.gene()).collect(Collectors.toList());

Map<String,List<GeneRegion>> chrGeneRegions = buildDriverGeneRegions(ensemblDataCache, coverageGenes);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,6 @@
package com.hartwig.hmftools.geneutils.ensembl;

import static com.hartwig.hmftools.common.ensemblcache.EnsemblDataLoader.ENSEMBL_DELIM;
import static com.hartwig.hmftools.common.ensemblcache.EnsemblDataLoader.ENSEMBL_GENE_DATA_FILE;
import static com.hartwig.hmftools.common.ensemblcache.EnsemblDataLoader.ENSEMBL_PROTEIN_FEATURE_DATA_FILE;
import static com.hartwig.hmftools.common.ensemblcache.EnsemblDataLoader.ENSEMBL_TRANS_EXON_DATA_FILE;
import static com.hartwig.hmftools.common.gene.TranscriptUtils.codingBaseLength;
import static com.hartwig.hmftools.common.genome.refgenome.RefGenomeVersion.V38;
import static com.hartwig.hmftools.common.genome.region.Strand.POS_STRAND;
import static com.hartwig.hmftools.common.utils.file.FileWriterUtils.createBufferedWriter;
Expand All @@ -25,7 +21,6 @@
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;

import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
Expand Down Expand Up @@ -64,9 +59,6 @@ public class EnsemblDAO
// reference transcripts are loaded only to evaluate difference between Ensembl versions and v37 vs v38
private final Map<String,List<TranscriptData>> mReferenceTranscriptMap; // keyed by geneId

private static final int COORD_SYSTEM_V37 = 2;
private static final int COORD_SYSTEM_V38 = 4;

// not in HGNC but retained
private static final List<GeneData> GENE_DATA_OVERRIDES = Lists.newArrayList(
new GeneData("ENSG00000258414", "AL121790.1","14", POS_STRAND,
Expand Down Expand Up @@ -248,9 +240,9 @@ public void writeDataCacheFiles(final String outputDir)
if (!outputFilename.endsWith(File.separator))
outputFilename += File.separator;

writeGeneData(outputFilename + ENSEMBL_GENE_DATA_FILE);
writeTranscriptExonData(outputFilename + ENSEMBL_TRANS_EXON_DATA_FILE);
writeTranscriptProteinData(outputFilename + ENSEMBL_PROTEIN_FEATURE_DATA_FILE);
writeGeneData(outputFilename + EnsemblDataLoader.ensemblGeneDataFile(mRefGenomeVersion));
writeTranscriptExonData(outputFilename + EnsemblDataLoader.ensemblTransExonDataFile(mRefGenomeVersion));
writeTranscriptProteinData(outputFilename + EnsemblDataLoader.ensemblProteinDataFile(mRefGenomeVersion));
}

private void writeGeneData(final String outputFile)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package com.hartwig.hmftools.geneutils.ensembl;

import static com.hartwig.hmftools.common.ensemblcache.EnsemblDataLoader.ENSEMBL_TRANS_SPLICE_DATA_FILE;
import static com.hartwig.hmftools.common.fusion.FusionCommon.DEFAULT_PRE_GENE_PROMOTOR_DISTANCE;
import static com.hartwig.hmftools.common.fusion.FusionCommon.NEG_STRAND;
import static com.hartwig.hmftools.common.fusion.FusionCommon.POS_STRAND;
Expand All @@ -21,6 +20,7 @@

import com.google.common.collect.Lists;
import com.hartwig.hmftools.common.ensemblcache.EnsemblDataCache;
import com.hartwig.hmftools.common.ensemblcache.EnsemblDataLoader;
import com.hartwig.hmftools.common.gene.GeneData;
import com.hartwig.hmftools.common.gene.ExonData;
import com.hartwig.hmftools.common.gene.TranscriptData;
Expand Down Expand Up @@ -63,19 +63,20 @@ public static void writeEnsemblDataFiles(final ConfigBuilder configBuilder)
geneTransCache.load(false);

createTranscriptPreGenePositionData(
geneTransCache.getChrGeneDataMap(), geneTransCache.getTranscriptDataMap(), DEFAULT_PRE_GENE_PROMOTOR_DISTANCE, outputDir);
geneTransCache.getChrGeneDataMap(), geneTransCache.getTranscriptDataMap(),
DEFAULT_PRE_GENE_PROMOTOR_DISTANCE, refGenomeVersion, outputDir);

GU_LOGGER.info("Ensembl data cache complete");
}

private static void createTranscriptPreGenePositionData(
final Map<String, List<GeneData>> chrGeneDataMap, final Map<String, List<TranscriptData>> transcriptDataMap,
int preGenePromotorDistance, final String outputDir)
int preGenePromotorDistance, final RefGenomeVersion refGenomeVersion, final String outputDir)
{
// generate a cache file of the nearest upstream splice acceptor from another gene for each transcript
try
{
String outputFile = outputDir + ENSEMBL_TRANS_SPLICE_DATA_FILE;
String outputFile = outputDir + EnsemblDataLoader.ensemblSpliceDataFile(refGenomeVersion);

BufferedWriter writer = createBufferedWriter(outputFile, false);

Expand All @@ -85,13 +86,13 @@ private static void createTranscriptPreGenePositionData(
// for each gene, collect up any gene which overlaps it or is within the specified distance upstream from it
for(Map.Entry<String, List<GeneData>> entry : chrGeneDataMap.entrySet())
{
final String chromosome = entry.getKey();
String chromosome = entry.getKey();

GU_LOGGER.debug("calculating pre-gene positions for chromosome({})", chromosome);

final List<GeneData> geneList = entry.getValue();
List<GeneData> geneList = entry.getValue();

for(final GeneData gene : geneList)
for(GeneData gene : geneList)
{
List<String> proximateGenes = Lists.newArrayList();

Expand All @@ -109,7 +110,7 @@ private static void createTranscriptPreGenePositionData(
geneRangeEnd = gene.GeneEnd + preGenePromotorDistance;
}

for(final GeneData otherGene : geneList)
for(GeneData otherGene : geneList)
{
if(otherGene.Strand != gene.Strand)
continue;
Expand All @@ -127,12 +128,12 @@ private static void createTranscriptPreGenePositionData(
continue;

// now set the preceding splice acceptor position for each transcript in this gene
final List<TranscriptData> transDataList = transcriptDataMap.get(gene.GeneId);
List<TranscriptData> transDataList = transcriptDataMap.get(gene.GeneId);

if(transDataList == null || transDataList.isEmpty())
continue;

for(final TranscriptData transData : transDataList)
for(TranscriptData transData : transDataList)
{
long transStartPos = gene.Strand == POS_STRAND ? transData.TransStart : transData.TransEnd;

Expand Down Expand Up @@ -167,14 +168,14 @@ private static long findFirstSpliceAcceptor(
{
long closestPosition = -1;

for(final String geneId : proximateGenes)
for(String geneId : proximateGenes)
{
final List<TranscriptData> transDataList = transDataMap.get(geneId);
List<TranscriptData> transDataList = transDataMap.get(geneId);

if(transDataList == null)
continue;

for(final TranscriptData transData : transDataList)
for(TranscriptData transData : transDataList)
{
if(transId == transData.TransId)
continue;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
import static java.lang.Math.min;

import static com.hartwig.hmftools.common.ensemblcache.EnsemblDataCache.addEnsemblDir;
import static com.hartwig.hmftools.common.ensemblcache.EnsemblDataLoader.ENSEMBL_TRANS_AMINO_ACIDS_FILE;
import static com.hartwig.hmftools.common.fusion.FusionCommon.POS_STRAND;
import static com.hartwig.hmftools.common.gene.TranscriptUtils.calcCodingStartPositionAdjustment;
import static com.hartwig.hmftools.common.genome.refgenome.RefGenomeSource.REF_GENOME;
Expand All @@ -27,6 +26,7 @@
import com.hartwig.hmftools.common.codon.Codons;
import com.hartwig.hmftools.common.codon.Nucleotides;
import com.hartwig.hmftools.common.ensemblcache.EnsemblDataCache;
import com.hartwig.hmftools.common.ensemblcache.EnsemblDataLoader;
import com.hartwig.hmftools.common.gene.ExonData;
import com.hartwig.hmftools.common.gene.GeneData;
import com.hartwig.hmftools.common.gene.TranscriptAminoAcids;
Expand Down Expand Up @@ -67,7 +67,7 @@ public ProteomeWriter(final ConfigBuilder configBuilder)

mRefGenome = loadRefGenome(configBuilder.getValue(REF_GENOME));

mWriter = initialiseWriter(parseOutputDir(configBuilder));
mWriter = initialiseWriter(parseOutputDir(configBuilder), mRefGenomeVersion);
}

public void run()
Expand Down Expand Up @@ -178,11 +178,11 @@ private void processTranscript(final GeneData geneData, final TranscriptData tra
writeData(geneData.GeneId, geneData.GeneName, transData.TransName, transData.IsCanonical, aminoAcids);
}

private static BufferedWriter initialiseWriter(final String outputDir)
private static BufferedWriter initialiseWriter(final String outputDir, final RefGenomeVersion refGenomeVersion)
{
try
{
String filename = outputDir + ENSEMBL_TRANS_AMINO_ACIDS_FILE;
String filename = outputDir + EnsemblDataLoader.ensemblAminoAcidDataFile(refGenomeVersion);
BufferedWriter writer = createBufferedWriter(filename, false);

writer.write(TranscriptAminoAcids.csvHeader());
Expand Down
18 changes: 0 additions & 18 deletions health-checker/Dockerfile

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,11 @@

public final class DriverGeneRegions
{
public static List<DriverGene> findInvalidDriverGenes(final List<DriverGene> driverGenes, final EnsemblDataCache ensemblDataCache)
{
return driverGenes.stream().filter(x -> ensemblDataCache.getGeneDataByName(x.gene()) == null).collect(Collectors.toList());
}

public static Map<String,List<GeneRegion>> buildDriverGeneRegions(
final EnsemblDataCache ensemblDataCache, final List<String> driverGenes)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -405,17 +405,23 @@ public boolean load(boolean delayTranscriptLoading)
if(!delayTranscriptLoading)
{
if(!EnsemblDataLoader.loadTranscriptData(
mDataPath, mTranscriptByGeneIdMap, mRestrictedGeneIdList, mRequireExons, mCanonicalTranscriptsOnly,
mDataPath, mRefGenomeVersion, mTranscriptByGeneIdMap, mRestrictedGeneIdList, mRequireExons, mCanonicalTranscriptsOnly,
mRequireNonEnsemblTranscripts, Collections.emptyList()))
{
return false;
}

if(mRequireProteinDomains && !loadTranscriptProteinData(mDataPath, mEnsemblProteinDataMap, Sets.newHashSet()))
return false;
if(mRequireProteinDomains)
{
if(!loadTranscriptProteinData(mDataPath, mRefGenomeVersion, mEnsemblProteinDataMap, Sets.newHashSet()))
return false;
}

if(mRequireSplicePositions && !loadTranscriptSpliceAcceptorData(mDataPath, mTransSpliceAcceptorPosDataMap, Sets.newHashSet()))
return false;
if(mRequireSplicePositions)
{
if(!loadTranscriptSpliceAcceptorData(mDataPath, mRefGenomeVersion, mTransSpliceAcceptorPosDataMap, Sets.newHashSet()))
return false;
}
}

return true;
Expand All @@ -429,7 +435,7 @@ public boolean loadTranscriptData(final List<String> restrictedGeneIds)
public boolean loadTranscriptData(final List<String> restrictedGeneIds, final List<String> nonCanonicalTrans)
{
if(!EnsemblDataLoader.loadTranscriptData(
mDataPath, mTranscriptByGeneIdMap, restrictedGeneIds, mRequireExons, mCanonicalTranscriptsOnly,
mDataPath, mRefGenomeVersion, mTranscriptByGeneIdMap, restrictedGeneIds, mRequireExons, mCanonicalTranscriptsOnly,
mRequireNonEnsemblTranscripts, nonCanonicalTrans))
{
return false;
Expand All @@ -442,10 +448,10 @@ public boolean loadTranscriptData(final List<String> restrictedGeneIds, final Li
transDataList.forEach(x -> uniqueTransIds.add(x.TransId));
}

if(mRequireProteinDomains && !loadTranscriptProteinData(mDataPath, mEnsemblProteinDataMap, uniqueTransIds))
if(mRequireProteinDomains && !loadTranscriptProteinData(mDataPath, mRefGenomeVersion, mEnsemblProteinDataMap, uniqueTransIds))
return false;

if(mRequireSplicePositions && !loadTranscriptSpliceAcceptorData(mDataPath, mTransSpliceAcceptorPosDataMap, uniqueTransIds))
if(mRequireSplicePositions && !loadTranscriptSpliceAcceptorData(mDataPath, mRefGenomeVersion, mTransSpliceAcceptorPosDataMap, uniqueTransIds))
return false;

return true;
Expand Down
Loading