From ccdb8ebde9549aeeff6b414f7cdb32136d2c395c Mon Sep 17 00:00:00 2001 From: haynescd Date: Tue, 18 Jul 2023 00:01:52 -0400 Subject: [PATCH] Fix GeneFilters --- .../mybatiscolumnstore/StudyViewMapper.xml | 24 +++--- .../StudyViewMyBatisRepositoryTest.java | 86 ++++++++++++++----- 2 files changed, 74 insertions(+), 36 deletions(-) diff --git a/persistence/persistence-mybatis/src/main/resources/org/cbioportal/persistence/mybatiscolumnstore/StudyViewMapper.xml b/persistence/persistence-mybatis/src/main/resources/org/cbioportal/persistence/mybatiscolumnstore/StudyViewMapper.xml index 6a27522c3cc..5e3de2d5284 100644 --- a/persistence/persistence-mybatis/src/main/resources/org/cbioportal/persistence/mybatiscolumnstore/StudyViewMapper.xml +++ b/persistence/persistence-mybatis/src/main/resources/org/cbioportal/persistence/mybatiscolumnstore/StudyViewMapper.xml @@ -160,26 +160,24 @@ - INTERSECT - SELECT sample_unique_id - FROM genomic_event - - - + + + SELECT sample_unique_id + FROM genomic_event + genetic_profile_stable_id IN #{molecularProfileId} AND hugo_gene_symbol IN ( - - - #{geneFilterQuery.hugoGeneSymbol} - + + #{geneFilterQuery.hugoGeneSymbol} ) - - - + + + + diff --git a/persistence/persistence-mybatis/src/test/java/org/cbioportal/persistence/mybatiscolumnstore/StudyViewMyBatisRepositoryTest.java b/persistence/persistence-mybatis/src/test/java/org/cbioportal/persistence/mybatiscolumnstore/StudyViewMyBatisRepositoryTest.java index 877bd9d7249..c110f7065f7 100644 --- a/persistence/persistence-mybatis/src/test/java/org/cbioportal/persistence/mybatiscolumnstore/StudyViewMyBatisRepositoryTest.java +++ b/persistence/persistence-mybatis/src/test/java/org/cbioportal/persistence/mybatiscolumnstore/StudyViewMyBatisRepositoryTest.java @@ -3,6 +3,7 @@ import org.cbioportal.model.AlterationCountByGene; import org.cbioportal.model.ClinicalData; import org.cbioportal.model.ClinicalDataCount; +import org.cbioportal.model.Gene; import org.cbioportal.model.Sample; import org.cbioportal.model.util.Select; import org.cbioportal.persistence.enums.ClinicalAttributeDataSource; @@ -102,7 +103,7 @@ public void getMutatedGenesFiltered() { StudyViewGeneFilter mutationStudyViewGeneFilter = new StudyViewGeneFilter(); mutationStudyViewGeneFilter.setMolecularProfileIds(new HashSet<>(Arrays.asList("msk_impact_2017_mutations"))); - mutationStudyViewGeneFilter.setGeneQueries(getFilters.apply("moo")); + mutationStudyViewGeneFilter.setGeneQueries(generateGeneFilters(List.of("SMARCD1", "TP53"), false)); studyViewGeneFilters.add(mutationStudyViewGeneFilter); @@ -147,8 +148,8 @@ private ClinicalDataFilter generateClinicalDataFilter(String attributeId, String return dataFilterValue; }; - private final Function>> getFilters = v -> { - + private List> generateGeneFilters(List genesToFilter, boolean createOrRelationship) { + boolean includeDriver = true; boolean includeVUS = true; boolean includeUnknownOncogenicity = true; @@ -157,27 +158,25 @@ private ClinicalDataFilter generateClinicalDataFilter(String attributeId, String boolean includeUnknownStatus = true; Select selectedTiers = Select.none(); boolean includeUnknownTier = true; - - GeneFilterQuery geneFilterQuery1 = new GeneFilterQuery("SMARCD1", null, - null, includeDriver, includeVUS, includeUnknownOncogenicity, selectedTiers, includeUnknownTier, - includeGermline, includeSomatic, includeUnknownStatus); - - GeneFilterQuery geneFilterQuery2 = new GeneFilterQuery("TP53", null, - null, includeDriver, includeVUS, includeUnknownOncogenicity, selectedTiers, includeUnknownTier, - includeGermline, includeSomatic, includeUnknownStatus); - - List> q1 = new ArrayList<>(); - List q2 = new ArrayList<>(); - List q3 = new ArrayList<>(); - q2.add(geneFilterQuery1); - q3.add(geneFilterQuery2); - q1.add(q2); - q1.add(q3); - return q1; - - }; - + if(createOrRelationship) { + List ordGeneFilters = genesToFilter.stream().map(geneToFilter -> new GeneFilterQuery(geneToFilter, + null, null, includeDriver, includeVUS, includeUnknownOncogenicity, selectedTiers, + includeUnknownTier, includeGermline, includeSomatic, includeUnknownStatus)) + .collect(Collectors.toList()); + + return List.of(ordGeneFilters); + } else { + List> filter = new ArrayList<>(); + for (String geneToFilter : genesToFilter) { + + filter.add(List.of( new GeneFilterQuery(geneToFilter, null, + null, includeDriver, includeVUS, includeUnknownOncogenicity, selectedTiers, includeUnknownTier, + includeGermline, includeSomatic, includeUnknownStatus))); + } + return filter; + } + } private final Function mapNumericalValues = v -> { DataFilterValue dataFilterValue = new DataFilterValue(); @@ -312,4 +311,45 @@ public void getClinicalDataCounts() { Assert.assertEquals(counts.size(), 2); } + + @Test + public void getFilteredSamplesWithGeneFilters() { + StudyViewFilter studyViewFilter = generateStudyViewFilter(new String[]{"msk_impact_2017"}, null); + + List studyViewGeneFilters = new ArrayList<>(); + StudyViewGeneFilter mutationStudyViewGeneFilter = new StudyViewGeneFilter(); + mutationStudyViewGeneFilter.setMolecularProfileIds(new HashSet<>(List.of("msk_impact_2017_mutations"))); + mutationStudyViewGeneFilter.setGeneQueries(generateGeneFilters(List.of("KRAS", "TP53"), false)); + studyViewGeneFilters.add(mutationStudyViewGeneFilter); + + studyViewFilter.setGeneFilters(studyViewGeneFilters); + + List samples = studyViewMyBatisRepository.getFilteredSamplesFromColumnstore(studyViewFilter, CategorizedClinicalDataCountFilter.getBuilder().build()); + Assert.assertEquals(845, samples.size()); + + mutationStudyViewGeneFilter.setGeneQueries(generateGeneFilters(List.of("SMARCD1", "TP53"), true)); + List samplesFilteredViaOrRelationship = studyViewMyBatisRepository.getFilteredSamplesFromColumnstore(studyViewFilter, CategorizedClinicalDataCountFilter.getBuilder().build()); + Assert.assertEquals(4561, samplesFilteredViaOrRelationship.size()); + } + + @Test + public void getFilteredSamplesWithMultipleStudyViewGeneFilters() { + StudyViewFilter studyViewFilter = generateStudyViewFilter(new String[]{"msk_impact_2017"}, null); + + List studyViewGeneFilters = new ArrayList<>(); + StudyViewGeneFilter mutationStudyViewGeneFilter = new StudyViewGeneFilter(); + mutationStudyViewGeneFilter.setMolecularProfileIds(new HashSet<>(List.of("msk_impact_2017_mutations"))); + mutationStudyViewGeneFilter.setGeneQueries(generateGeneFilters(List.of("TP53"), false)); + + StudyViewGeneFilter cnaStudyViewGeneFilter = new StudyViewGeneFilter(); + cnaStudyViewGeneFilter.setMolecularProfileIds(new HashSet<>(List.of("msk_impact_2017_structural_variants"))); + cnaStudyViewGeneFilter.setGeneQueries(generateGeneFilters(List.of("BRAF"), true)); + studyViewGeneFilters.add(mutationStudyViewGeneFilter); + studyViewGeneFilters.add(cnaStudyViewGeneFilter); + + studyViewFilter.setGeneFilters(studyViewGeneFilters); + + List samples = studyViewMyBatisRepository.getFilteredSamplesFromColumnstore(studyViewFilter, CategorizedClinicalDataCountFilter.getBuilder().build()); + Assert.assertEquals(16, samples.size()); + } } \ No newline at end of file