Skip to content

Commit e4fd443

Browse files
committed
address issues besides NA counts
1 parent 7b4dd2a commit e4fd443

File tree

12 files changed

+227
-500
lines changed

12 files changed

+227
-500
lines changed

src/main/java/org/cbioportal/persistence/helper/StudyViewFilterHelper.java

+73-35
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package org.cbioportal.persistence.helper;
22

33
import org.cbioportal.model.ClinicalAttribute;
4+
import org.cbioportal.model.MolecularProfile;
45
import org.cbioportal.persistence.enums.ClinicalAttributeDataSource;
56
import org.cbioportal.web.parameter.CategorizedClinicalDataCountFilter;
67
import org.cbioportal.web.parameter.CustomSampleIdentifier;
@@ -13,21 +14,26 @@
1314
import java.util.List;
1415
import java.util.Map;
1516
import java.util.Objects;
17+
import java.util.stream.Collectors;
1618

1719
public final class StudyViewFilterHelper {
1820
public static StudyViewFilterHelper build(@Nullable StudyViewFilter studyViewFilter,
1921
@Nullable Map<ClinicalAttributeDataSource, List<ClinicalAttribute>> clinicalAttributesMap,
22+
@Nullable Map<ClinicalAttributeDataSource, List<MolecularProfile>> genericAssayProfilesMap,
2023
@Nullable List<CustomSampleIdentifier> customDataSamples) {
2124
if (Objects.isNull(studyViewFilter)) {
2225
studyViewFilter = new StudyViewFilter();
2326
}
2427
if (Objects.isNull(clinicalAttributesMap)) {
2528
clinicalAttributesMap = new EnumMap<>(ClinicalAttributeDataSource.class);
2629
}
30+
if (Objects.isNull(genericAssayProfilesMap)) {
31+
genericAssayProfilesMap = new EnumMap<>(ClinicalAttributeDataSource.class);
32+
}
2733
if (Objects.isNull(customDataSamples)) {
2834
customDataSamples = new ArrayList<>();
2935
}
30-
return new StudyViewFilterHelper(studyViewFilter, clinicalAttributesMap, customDataSamples);
36+
return new StudyViewFilterHelper(studyViewFilter, clinicalAttributesMap, genericAssayProfilesMap, customDataSamples);
3137
}
3238

3339
private final StudyViewFilter studyViewFilter;
@@ -37,9 +43,10 @@ public static StudyViewFilterHelper build(@Nullable StudyViewFilter studyViewFil
3743

3844

3945
private StudyViewFilterHelper(@NonNull StudyViewFilter studyViewFilter, @NonNull Map<ClinicalAttributeDataSource, List<ClinicalAttribute>> clinicalAttributesMap,
46+
@NonNull Map<ClinicalAttributeDataSource, List<MolecularProfile>> genericAssayProfilesMap,
4047
@NonNull List<CustomSampleIdentifier> customDataSamples) {
4148
this.studyViewFilter = studyViewFilter;
42-
this.categorizedClinicalDataCountFilter = extractClinicalDataCountFilters(studyViewFilter, clinicalAttributesMap);
49+
this.categorizedClinicalDataCountFilter = extractClinicalDataCountFilters(studyViewFilter, clinicalAttributesMap, genericAssayProfilesMap);
4350
this.customDataSamples = customDataSamples;
4451
this.applyPatientIdFilters = shouldApplyPatientIdFilters();
4552
}
@@ -56,46 +63,77 @@ public List<CustomSampleIdentifier> customDataSamples() {
5663
return this.customDataSamples;
5764
}
5865

59-
private CategorizedClinicalDataCountFilter extractClinicalDataCountFilters(final StudyViewFilter studyViewFilter, Map<ClinicalAttributeDataSource, List<ClinicalAttribute>> clinicalAttributesMap) {
60-
61-
if (studyViewFilter.getClinicalDataFilters() == null || clinicalAttributesMap.isEmpty()) {
66+
private CategorizedClinicalDataCountFilter extractClinicalDataCountFilters(final StudyViewFilter studyViewFilter, Map<ClinicalAttributeDataSource, List<ClinicalAttribute>> clinicalAttributesMap, Map<ClinicalAttributeDataSource, List<MolecularProfile>> genericAssayProfilesMap) {
67+
if ((studyViewFilter.getClinicalDataFilters() == null || clinicalAttributesMap.isEmpty()) &&
68+
(studyViewFilter.getGenericAssayDataFilters() == null || genericAssayProfilesMap.isEmpty()) &&
69+
studyViewFilter.getGenomicDataFilters() == null)
70+
{
6271
return CategorizedClinicalDataCountFilter.getBuilder().build();
6372
}
6473

65-
List<String> patientCategoricalAttributes = clinicalAttributesMap.get(ClinicalAttributeDataSource.PATIENT)
66-
.stream().filter(ca -> ca.getDatatype().equals("STRING"))
67-
.map(ClinicalAttribute::getAttrId)
68-
.toList();
74+
CategorizedClinicalDataCountFilter.Builder builder = CategorizedClinicalDataCountFilter.getBuilder();
75+
76+
if (studyViewFilter.getClinicalDataFilters() != null) {
77+
List<String> patientCategoricalAttributes = clinicalAttributesMap.get(ClinicalAttributeDataSource.PATIENT)
78+
.stream().filter(ca -> ca.getDatatype().equals("STRING"))
79+
.map(ClinicalAttribute::getAttrId)
80+
.toList();
6981

70-
List<String> patientNumericalAttributes = clinicalAttributesMap.get(ClinicalAttributeDataSource.PATIENT)
71-
.stream().filter(ca -> ca.getDatatype().equals("NUMBER"))
72-
.map(ClinicalAttribute::getAttrId)
73-
.toList();
82+
List<String> patientNumericalAttributes = clinicalAttributesMap.get(ClinicalAttributeDataSource.PATIENT)
83+
.stream().filter(ca -> ca.getDatatype().equals("NUMBER"))
84+
.map(ClinicalAttribute::getAttrId)
85+
.toList();
7486

75-
List<String> sampleCategoricalAttributes = clinicalAttributesMap.get(ClinicalAttributeDataSource.SAMPLE)
76-
.stream().filter(ca -> ca.getDatatype().equals("STRING"))
77-
.map(ClinicalAttribute::getAttrId)
78-
.toList();
87+
List<String> sampleCategoricalAttributes = clinicalAttributesMap.get(ClinicalAttributeDataSource.SAMPLE)
88+
.stream().filter(ca -> ca.getDatatype().equals("STRING"))
89+
.map(ClinicalAttribute::getAttrId)
90+
.toList();
7991

80-
List<String> sampleNumericalAttributes = clinicalAttributesMap.get(ClinicalAttributeDataSource.SAMPLE)
81-
.stream().filter(ca -> ca.getDatatype().equals("NUMBER"))
82-
.map(ClinicalAttribute::getAttrId)
83-
.toList();
92+
List<String> sampleNumericalAttributes = clinicalAttributesMap.get(ClinicalAttributeDataSource.SAMPLE)
93+
.stream().filter(ca -> ca.getDatatype().equals("NUMBER"))
94+
.map(ClinicalAttribute::getAttrId)
95+
.toList();
96+
97+
builder.setPatientCategoricalClinicalDataFilters(studyViewFilter.getClinicalDataFilters()
98+
.stream().filter(clinicalDataFilter -> patientCategoricalAttributes.contains(clinicalDataFilter.getAttributeId()))
99+
.collect(Collectors.toList()))
100+
.setPatientNumericalClinicalDataFilters(studyViewFilter.getClinicalDataFilters().stream()
101+
.filter(clinicalDataFilter -> patientNumericalAttributes.contains(clinicalDataFilter.getAttributeId()))
102+
.collect(Collectors.toList()))
103+
.setSampleCategoricalClinicalDataFilters(studyViewFilter.getClinicalDataFilters().stream()
104+
.filter(clinicalDataFilter -> sampleCategoricalAttributes.contains(clinicalDataFilter.getAttributeId()))
105+
.collect(Collectors.toList()))
106+
.setSampleNumericalClinicalDataFilters(studyViewFilter.getClinicalDataFilters().stream()
107+
.filter(clinicalDataFilter -> sampleNumericalAttributes.contains(clinicalDataFilter.getAttributeId()))
108+
.collect(Collectors.toList()));
109+
}
110+
if (studyViewFilter.getGenomicDataFilters() != null) {
111+
builder.setSampleNumericalGenomicDataFilters(studyViewFilter.getGenomicDataFilters().stream()
112+
.filter(genomicDataFilter -> !genomicDataFilter.getProfileType().equals("cna") && !genomicDataFilter.getProfileType().equals("gistic"))
113+
.collect(Collectors.toList()));
114+
builder.setSampleCategoricalGenomicDataFilters(studyViewFilter.getGenomicDataFilters().stream()
115+
.filter(genomicDataFilter -> genomicDataFilter.getProfileType().equals("cna") || genomicDataFilter.getProfileType().equals("gistic"))
116+
.collect(Collectors.toList()));
117+
}
118+
if (studyViewFilter.getGenericAssayDataFilters() != null) {
119+
// TODO: Support patient level profiles and data filtering
120+
List<String> sampleCategoricalProfileTypes = genericAssayProfilesMap.get(ClinicalAttributeDataSource.SAMPLE)
121+
.stream().filter(profile -> profile.getDatatype().equals("CATEGORICAL") || profile.getDatatype().equals("BINARY"))
122+
.map(profile -> profile.getStableId().replace(profile.getCancerStudyIdentifier() + "_", ""))
123+
.toList();
84124

85-
return CategorizedClinicalDataCountFilter.getBuilder()
86-
.setPatientCategoricalClinicalDataFilters(studyViewFilter.getClinicalDataFilters()
87-
.stream().filter(clinicalDataFilter -> patientCategoricalAttributes.contains(clinicalDataFilter.getAttributeId()))
88-
.toList())
89-
.setPatientNumericalClinicalDataFilters(studyViewFilter.getClinicalDataFilters().stream()
90-
.filter(clinicalDataFilter -> patientNumericalAttributes.contains(clinicalDataFilter.getAttributeId()))
91-
.toList())
92-
.setSampleCategoricalClinicalDataFilters(studyViewFilter.getClinicalDataFilters().stream()
93-
.filter(clinicalDataFilter -> sampleCategoricalAttributes.contains(clinicalDataFilter.getAttributeId()))
94-
.toList())
95-
.setSampleNumericalClinicalDataFilters(studyViewFilter.getClinicalDataFilters().stream()
96-
.filter(clinicalDataFilter -> sampleNumericalAttributes.contains(clinicalDataFilter.getAttributeId()))
97-
.toList())
98-
.build();
125+
List<String> sampleNumericalProfileTypes = genericAssayProfilesMap.get(ClinicalAttributeDataSource.SAMPLE)
126+
.stream().filter(profile -> profile.getDatatype().equals("LIMIT-VALUE"))
127+
.map(profile -> profile.getStableId().replace(profile.getCancerStudyIdentifier() + "_", ""))
128+
.toList();
129+
builder.setSampleNumericalGenericAssayDataFilters(studyViewFilter.getGenericAssayDataFilters().stream()
130+
.filter(genericAssayDataFilter -> sampleNumericalProfileTypes.contains(genericAssayDataFilter.getProfileType()))
131+
.collect(Collectors.toList()));
132+
builder.setSampleCategoricalGenericAssayDataFilters(studyViewFilter.getGenericAssayDataFilters().stream()
133+
.filter(genericAssayDataFilter -> sampleCategoricalProfileTypes.contains(genericAssayDataFilter.getProfileType()))
134+
.collect(Collectors.toList()));
135+
}
136+
return builder.build();
99137
}
100138

101139
public boolean shouldApplyPatientIdFilters() {

src/main/java/org/cbioportal/persistence/mybatisclickhouse/StudyViewMapper.java

+2-4
Original file line numberDiff line numberDiff line change
@@ -68,10 +68,8 @@ public interface StudyViewMapper {
6868
List<GenomicDataCountItem> getMutationCountsByType(StudyViewFilterHelper studyViewFilterHelper, List<GenomicDataFilter> genomicDataFilters);
6969

7070
// TODO: update this with new parameters
71-
List<ClinicalDataCount> getGenomicDataBinCounts(StudyViewFilter studyViewFilter, CategorizedClinicalDataCountFilter categorizedClinicalDataCountFilter,
72-
boolean applyPatientIdFilters, List<String> attributeIds, List<String> filteredAttributeValues);
73-
List<ClinicalDataCount> getGenericAssayDataBinCounts(StudyViewFilter studyViewFilter, CategorizedClinicalDataCountFilter categorizedClinicalDataCountFilter,
74-
boolean applyPatientIdFilters, List<String> attributeIds, List<String> filteredAttributeValues);
71+
List<ClinicalDataCount> getGenomicDataBinCounts(StudyViewFilterHelper studyViewFilterHelper, List<String> attributeIds);
72+
List<ClinicalDataCount> getGenericAssayDataBinCounts(StudyViewFilterHelper studyViewFilterHelper, List<String> attributeIds);
7573

7674
List<MolecularProfile> getGenericAssayProfiles();
7775
}

0 commit comments

Comments
 (0)