Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Demo rfc80 poc mutation data count specific gene parameter #10975

Closed
Show file tree
Hide file tree
Changes from all commits
Commits
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 @@ -27,7 +27,7 @@ public interface StudyViewRepository {

List<ClinicalData> getPatientClinicalData(StudyViewFilterContext studyViewFilterContext, List<String> attributeIds);

List<AlterationCountByGene> getMutatedGenes(StudyViewFilterContext studyViewFilterContext);
List<AlterationCountByGene> getMutatedGenes(StudyViewFilterContext studyViewFilterContext, String... hugoGeneSymbols);

List<AlterationCountByGene> getStructuralVariantGenes(StudyViewFilterContext studyViewFilterContext);
List<CopyNumberCountByGene> getCnaGenes(StudyViewFilterContext studyViewFilterContext);
Expand All @@ -42,11 +42,11 @@ public interface StudyViewRepository {

List<CaseListDataCount> getCaseListDataCountsPerStudy(StudyViewFilterContext studyViewFilterContext);

Map<String, Integer> getTotalProfiledCounts(StudyViewFilterContext studyViewFilterContext, String alterationType);
Map<String, Integer> getTotalProfiledCounts(StudyViewFilterContext studyViewFilterContext, String alterationType, String... hugoGeneSymbols);

int getFilteredSamplesCount(StudyViewFilterContext studyViewFilterContext);

Map<String, Set<String>> getMatchingGenePanelIds(StudyViewFilterContext studyViewFilterContext, String alterationType);
Map<String, Set<String>> getMatchingGenePanelIds(StudyViewFilterContext studyViewFilterContext, String alterationType, String... hugoGeneSymbols);

int getTotalProfiledCountsByAlterationType(StudyViewFilterContext studyViewFilterContext, String alterationType);

Expand All @@ -63,8 +63,6 @@ public interface StudyViewRepository {
int getTotalSampleTreatmentCount(StudyViewFilterContext studyViewFilterContext);

List<GenomicDataCountItem> getCNACounts(StudyViewFilterContext studyViewFilterContext, List<GenomicDataFilter> genomicDataFilters);

Map<String, Integer> getMutationCounts(StudyViewFilterContext studyViewFilterContext, GenomicDataFilter genomicDataFilter);

List<GenomicDataCountItem> getMutationCountsByType(StudyViewFilterContext studyViewFilterContext, List<GenomicDataFilter> genomicDataFilters);
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,15 +19,14 @@
import org.cbioportal.web.parameter.GenomicDataFilter;

import java.util.List;
import java.util.Map;


public interface StudyViewMapper {
List<Sample> getFilteredSamples(@Param("studyViewFilterHelper") StudyViewFilterHelper studyViewFilterHelper);

List<GenomicDataCount> getMolecularProfileSampleCounts(@Param("studyViewFilterHelper") StudyViewFilterHelper studyViewFilterHelper);

List<AlterationCountByGene> getMutatedGenes(StudyViewFilterHelper studyViewFilterHelper, AlterationFilterHelper alterationFilterHelper);
List<AlterationCountByGene> getMutatedGenes(StudyViewFilterHelper studyViewFilterHelper, AlterationFilterHelper alterationFilterHelper, String... hugoGeneSymbols);

List<CopyNumberCountByGene> getCnaGenes(StudyViewFilterHelper studyViewFilterHelper, AlterationFilterHelper alterationFilterHelper);

Expand All @@ -43,11 +42,11 @@ public interface StudyViewMapper {

List<ClinicalData> getPatientClinicalDataFromStudyViewFilter(StudyViewFilterHelper studyViewFilterHelper, List<String> attributeIds);

List<AlterationCountByGene> getTotalProfiledCounts(StudyViewFilterHelper studyViewFilterHelper, String alterationType);
List<AlterationCountByGene> getTotalProfiledCounts(StudyViewFilterHelper studyViewFilterHelper, String alterationType, String... hugoGeneSymbols);

int getFilteredSamplesCount(@Param("studyViewFilterHelper") StudyViewFilterHelper studyViewFilterHelper);

List<GenePanelToGene> getMatchingGenePanelIds(StudyViewFilterHelper studyViewFilterHelper, String alterationType);
List<GenePanelToGene> getMatchingGenePanelIds(StudyViewFilterHelper studyViewFilterHelper, String alterationType, String... hugoGeneSymbols);

int getTotalProfiledCountByAlterationType(StudyViewFilterHelper studyViewFilterHelper, String alterationType);

Expand All @@ -62,7 +61,5 @@ public interface StudyViewMapper {

List<GenomicDataCountItem> getCNACounts(StudyViewFilterHelper studyViewFilterHelper, List<GenomicDataFilter> genomicDataFilters);

Map<String, Integer> getMutationCounts(StudyViewFilterHelper studyViewFilterHelper, GenomicDataFilter genomicDataFilter);

List<GenomicDataCountItem> getMutationCountsByType(StudyViewFilterHelper studyViewFilterHelper, List<GenomicDataFilter> genomicDataFilters);
}
Original file line number Diff line number Diff line change
Expand Up @@ -48,11 +48,11 @@ public StudyViewMyBatisRepository(StudyViewMapper mapper) {
public List<Sample> getFilteredSamples(StudyViewFilterContext studyViewFilterContext) {
return mapper.getFilteredSamples(createStudyViewFilterHelper(studyViewFilterContext));
}

@Override
public List<AlterationCountByGene> getMutatedGenes(StudyViewFilterContext studyViewFilterContext) {
public List<AlterationCountByGene> getMutatedGenes(StudyViewFilterContext studyViewFilterContext, String... hugoGeneSymbols) {
return mapper.getMutatedGenes(createStudyViewFilterHelper(studyViewFilterContext),
AlterationFilterHelper.build(studyViewFilterContext.studyViewFilter().getAlterationFilter()));
AlterationFilterHelper.build(studyViewFilterContext.studyViewFilter().getAlterationFilter()), hugoGeneSymbols);
}

@Override
Expand Down Expand Up @@ -144,8 +144,8 @@ public List<ClinicalData> getPatientClinicalData(StudyViewFilterContext studyVie
}

@Override
public Map<String, Integer> getTotalProfiledCounts(StudyViewFilterContext studyViewFilterContext, String alterationType) {
return mapper.getTotalProfiledCounts(createStudyViewFilterHelper(studyViewFilterContext), alterationType)
public Map<String, Integer> getTotalProfiledCounts(StudyViewFilterContext studyViewFilterContext, String alterationType, String... hugoGeneSymbols) {
return mapper.getTotalProfiledCounts(createStudyViewFilterHelper(studyViewFilterContext), alterationType, hugoGeneSymbols)
.stream()
.collect(Collectors.groupingBy(AlterationCountByGene::getHugoGeneSymbol,
Collectors.mapping(AlterationCountByGene::getNumberOfProfiledCases, Collectors.summingInt(Integer::intValue))));
Expand All @@ -157,8 +157,8 @@ public int getFilteredSamplesCount(StudyViewFilterContext studyViewFilterContext
}

@Override
public Map<String, Set<String>> getMatchingGenePanelIds(StudyViewFilterContext studyViewFilterContext, String alterationType) {
return mapper.getMatchingGenePanelIds(createStudyViewFilterHelper(studyViewFilterContext), alterationType)
public Map<String, Set<String>> getMatchingGenePanelIds(StudyViewFilterContext studyViewFilterContext, String alterationType, String... hugoGeneSymbols) {
return mapper.getMatchingGenePanelIds(createStudyViewFilterHelper(studyViewFilterContext), alterationType, hugoGeneSymbols)
.stream()
.collect(Collectors.groupingBy(GenePanelToGene::getHugoGeneSymbol,
Collectors.mapping(GenePanelToGene::getGenePanelId, Collectors.toSet())));
Expand Down Expand Up @@ -218,11 +218,6 @@ public List<GenomicDataCountItem> getCNACounts(StudyViewFilterContext studyViewF

return mapper.getCNACounts(createStudyViewFilterHelper(studyViewFilterContext), genomicDataFilters);
}

public Map<String, Integer> getMutationCounts(StudyViewFilterContext studyViewFilterContext, GenomicDataFilter genomicDataFilter) {

return mapper.getMutationCounts(createStudyViewFilterHelper(studyViewFilterContext), genomicDataFilter);
}

public List<GenomicDataCountItem> getMutationCountsByType(StudyViewFilterContext studyViewFilterContext, List<GenomicDataFilter> genomicDataFilters) {

Expand Down
16 changes: 10 additions & 6 deletions src/main/java/org/cbioportal/service/AlterationCountService.java
Original file line number Diff line number Diff line change
@@ -1,14 +1,16 @@
package org.cbioportal.service;

import org.apache.commons.math3.util.Pair;
import org.cbioportal.model.*;
import org.cbioportal.model.AlterationCountByGene;
import org.cbioportal.model.AlterationCountByStructuralVariant;
import org.cbioportal.model.AlterationFilter;
import org.cbioportal.model.CopyNumberCountByGene;
import org.cbioportal.model.MolecularProfileCaseIdentifier;
import org.cbioportal.model.StudyViewFilterContext;
import org.cbioportal.model.util.Select;
import org.cbioportal.web.parameter.CategorizedClinicalDataCountFilter;
import org.cbioportal.web.parameter.CustomSampleIdentifier;
import org.cbioportal.web.parameter.SampleIdentifier;
import org.cbioportal.web.parameter.StudyViewFilter;

import java.util.List;
import java.util.Map;

public interface AlterationCountService {

Expand Down Expand Up @@ -80,8 +82,10 @@ Pair<List<CopyNumberCountByGene>, Long> getPatientCnaGeneCounts(List<MolecularPr
AlterationFilter alterationFilter);

List<AlterationCountByGene> getMutatedGenes(StudyViewFilterContext studyViewFilterContext);

Map<String, AlterationCountByGene> getMutatedGenes(StudyViewFilterContext studyViewFilterContext, String[] hugoGeneSymbols);

List<CopyNumberCountByGene> getCnaGenes(StudyViewFilterContext studyViewFilterContext);

List<AlterationCountByGene> getStructuralVariantGenes(StudyViewFilterContext studyViewFilterContext);

}
Original file line number Diff line number Diff line change
Expand Up @@ -271,10 +271,10 @@ public List<AlterationCountByGene> getStructuralVariantGenes(StudyViewFilterCont

private < T extends AlterationCountByGene> List<T> populateAlterationCounts(@NonNull List<T> alterationCounts,
@NonNull StudyViewFilterContext studyViewFilterContext,
@NonNull AlterationType alterationType) {
@NonNull AlterationType alterationType, String... hugoGeneSymbols) {
final int profiledCountWithoutGenePanelData = studyViewRepository.getTotalProfiledCountsByAlterationType(studyViewFilterContext, alterationType.toString());
var profiledCountsMap = studyViewRepository.getTotalProfiledCounts(studyViewFilterContext, alterationType.toString());
final var matchingGenePanelIdsMap = studyViewRepository.getMatchingGenePanelIds(studyViewFilterContext, alterationType.toString());
var profiledCountsMap = studyViewRepository.getTotalProfiledCounts(studyViewFilterContext, alterationType.toString(), hugoGeneSymbols);
final var matchingGenePanelIdsMap = studyViewRepository.getMatchingGenePanelIds(studyViewFilterContext, alterationType.toString(), hugoGeneSymbols);
final int sampleProfileCountWithoutGenePanelData = studyViewRepository.getSampleProfileCountWithoutPanelData(studyViewFilterContext, alterationType.toString());

alterationCounts.parallelStream()
Expand All @@ -294,6 +294,17 @@ private < T extends AlterationCountByGene> List<T> populateAlterationCounts(@Non
return alterationCounts;
}

@Override
public Map<String, AlterationCountByGene> getMutatedGenes(StudyViewFilterContext studyViewFilterContext, String[] hugoGeneSymbols) {
List<AlterationCountByGene> alterationCounts = studyViewRepository.getMutatedGenes(studyViewFilterContext, hugoGeneSymbols);
List<AlterationCountByGene> alterationCountByGenes = populateAlterationCounts(alterationCounts, studyViewFilterContext, AlterationType.MUTATION_EXTENDED, hugoGeneSymbols);
return alterationCountByGenes.stream()
.collect(Collectors.toMap(
AlterationCountByGene::getHugoGeneSymbol,
alterationCountByGene -> alterationCountByGene,
(existing, replacement) -> existing
));
}

private boolean hasGenePanelData(@NonNull Set<String> matchingGenePanelIds) {
return matchingGenePanelIds.contains(WHOLE_EXOME_SEQUENCING)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -133,15 +133,19 @@ public List<GenomicDataCountItem> getCNACountsByGeneSpecific(StudyViewFilter stu
@Override
public List<GenomicDataCountItem> getMutationCountsByGeneSpecific(StudyViewFilter studyViewFilter, List<GenomicDataFilter> genomicDataFilters) {
List<GenomicDataCountItem> genomicDataCountItemList = new ArrayList<>();
int totalCount = studyViewRepository.getFilteredSamplesCount(createContext(studyViewFilter));
String[] hugoGeneSymbols = genomicDataFilters.stream()
.map(GenomicDataFilter::getHugoGeneSymbol)
.toArray(String[]::new);
Map<String, AlterationCountByGene> alterationCountByGenes = alterationCountService.getMutatedGenes(createContext(studyViewFilter), hugoGeneSymbols);
for (GenomicDataFilter genomicDataFilter : genomicDataFilters) {
Map<String, Integer> counts = studyViewRepository.getMutationCounts(createContext(studyViewFilter), genomicDataFilter);
AlterationCountByGene filteredAlterationCount = alterationCountByGenes.getOrDefault(genomicDataFilter.getHugoGeneSymbol(), new AlterationCountByGene());
int mutatedCount = filteredAlterationCount.getNumberOfAlteredCases();
int profiledCount = filteredAlterationCount.getNumberOfProfiledCases();
List<GenomicDataCount> genomicDataCountList = new ArrayList<>();
if (counts.getOrDefault("mutatedCount", 0) > 0)
genomicDataCountList.add(new GenomicDataCount("Mutated", "MUTATED", counts.get("mutatedCount"), counts.get("mutatedCount")));
if (counts.getOrDefault("notMutatedCount", 0) > 0)
genomicDataCountList.add(new GenomicDataCount("Not Mutated", "NOT_MUTATED", counts.get("notMutatedCount"), counts.get("notMutatedCount")));
if (counts.getOrDefault("notProfiledCount", 0) > 0)
genomicDataCountList.add(new GenomicDataCount("Not Profiled", "NOT_PROFILED", counts.get("notProfiledCount"), counts.get("notProfiledCount")));
genomicDataCountList.add(new GenomicDataCount("Mutated", "MUTATED", mutatedCount, mutatedCount));
genomicDataCountList.add(new GenomicDataCount("Not Mutated", "NOT_MUTATED", profiledCount - mutatedCount, profiledCount - mutatedCount));
genomicDataCountList.add(new GenomicDataCount("Not Profiled", "NOT_PROFILED", totalCount - profiledCount, totalCount - profiledCount));
genomicDataCountItemList.add(new GenomicDataCountItem(genomicDataFilter.getHugoGeneSymbol(), "mutations", genomicDataCountList));
}
return genomicDataCountItemList;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,13 @@ public class GenomicDataFilter extends DataFilter implements Serializable {
private String hugoGeneSymbol;
private String profileType;

public GenomicDataFilter() {}

public GenomicDataFilter(String hugoGeneSymbol, String profileType) {
this.hugoGeneSymbol = hugoGeneSymbol;
this.profileType = profileType;
}

public String getHugoGeneSymbol() {
return hugoGeneSymbol;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,13 @@
FROM genomic_event_derived
<where>
variant_type = 'mutation' AND
<if test="hugoGeneSymbols != null and hugoGeneSymbols.length > 0">
hugo_gene_symbol IN
<foreach item="hugoGeneSymbol" collection="hugoGeneSymbols" open="(" separator="," close=")">
#{hugoGeneSymbol}
</foreach>
AND
</if>
<include refid="applyStudyViewFilter">
<property name="filter_type" value="'SAMPLE_ID_ONLY'"/>
</include>
Expand Down Expand Up @@ -268,28 +275,6 @@
FROM cna_sum
</select>

<!-- for /mutation-data-counts/fetch (returns GenomicDataCountItem objects) mutation counts pie chart part -->
<select id="getMutationCounts">
WITH profiled_count as (
SELECT count(distinct sgp.sample_unique_id)
FROM sample_to_gene_panel_derived sgp
JOIN gene_panel_to_gene_derived gpg ON sgp.gene_panel_id = gpg.gene_panel_id
WHERE sample_unique_id IN (<include refid="sampleUniqueIdsFromStudyViewFilter"/>)
AND gpg.gene = #{genomicDataFilter.hugoGeneSymbol}
),
mutated_count as (
SELECT count(distinct sample_unique_id)
FROM genomic_event_derived
WHERE sample_unique_id IN (<include refid="sampleUniqueIdsFromStudyViewFilter"/>)
AND hugo_gene_symbol = #{genomicDataFilter.hugoGeneSymbol}
AND variant_type = 'mutation'
)
SELECT
cast((SELECT * FROM mutated_count) as INTEGER) as mutatedCount,
cast(((SELECT * FROM profiled_count) - (SELECT * FROM mutated_count)) as INTEGER) as notMutatedCount,
cast(((SELECT * FROM (<include refid="getTotalSampleCount"/>)) - (SELECT * FROM profiled_count)) as INTEGER) as notProfiledCount
</select>

<!-- for /mutation-data-counts/fetch - (returns GenomicDataCountItem objects) mutation type counts table part-->
<select id="getMutationCountsByType" resultMap="GenomicDataCountItemResultMap">
SELECT
Expand Down Expand Up @@ -356,6 +341,12 @@
INNER JOIN gene_panel_to_gene_derived gptg on stgp.gene_panel_id = gptg.gene_panel_id
<where>
stgp.alteration_type = '${alterationType}'
<if test="hugoGeneSymbols != null and hugoGeneSymbols.length > 0">
AND gptg.gene IN
<foreach item="hugoGeneSymbol" collection="hugoGeneSymbols" open="(" separator="," close=")">
#{hugoGeneSymbol}
</foreach>
</if>
AND stgp.gene_panel_id != 'WES'
AND
<include refid="applyStudyViewFilter">
Expand Down Expand Up @@ -415,6 +406,12 @@
</include>
</where>
)
<if test="hugoGeneSymbols != null and hugoGeneSymbols.length > 0">
AND gene IN
<foreach item="hugoGeneSymbol" collection="hugoGeneSymbols" open="(" separator="," close=")">
#{hugoGeneSymbol}
</foreach>
</if>
</where>
GROUP BY gene, gene_panel_id;
</select>
Expand Down
Loading
Loading