Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
74 commits
Select commit Hold shift + click to select a range
4672a1d
first attempt of removing ESTs and Affymetrix datatypes
jwollbrett Dec 1, 2025
dfc6454
manage devOntologyXRef information for each species
jwollbrett Dec 1, 2025
9c2dd09
cache condition graph for OTF propagation
jwollbrett Dec 1, 2025
0444628
insert propagated conditions for OTF propagation
jwollbrett Dec 1, 2025
36f3bc3
commented code that will not be used anymore
jwollbrett Dec 1, 2025
cf24f67
updated dao-api to manage OTF propagation
jwollbrett Dec 1, 2025
c2bce30
updated dao-sql to manage OTF propagation
jwollbrett Dec 1, 2025
5e20c9c
started to implement bgee-core for OTF propagation
jwollbrett Dec 1, 2025
855e9c9
continued update of bgee-core for OTF propagation
jwollbrett Dec 1, 2025
b3ad729
solve last errors from bgee-core after removing affymetrix and ESTs
jwollbrett Dec 1, 2025
303fd3f
solve misc errors in bgee-pipeline after removing affymetrix and ESTs
jwollbrett Dec 1, 2025
8dc63a5
solved errors related to affy and ESTs removal for bgee-webapp
jwollbrett Dec 1, 2025
d826b97
remove unused classes
jwollbrett Jan 16, 2026
b59ed4f
convert raw data sex & strain to sex & strain
jwollbrett Jan 16, 2026
1b9a4ce
high level cleaning
jwollbrett Jan 16, 2026
6cf9d72
update insertion of global condition by the pipeline
jwollbrett Jan 16, 2026
ffed2f5
rename some database columns
jwollbrett Jan 16, 2026
d35eb88
store score rather than score in the expression table
jwollbrett Jan 16, 2026
5d40723
messy commit about OTF propagation
jwollbrett Jan 16, 2026
0a5f8af
adapt API to new field species.hiddenSpecies
jwollbrett Mar 26, 2026
508ea6a
misc commit before going on holidays
jwollbrett Apr 2, 2026
becb440
started updating the type adaptor managing OTF calls information retr…
jwollbrett Apr 2, 2026
cf827c6
manage attribute discrepency between API and SQL Schema and removed t…
jwollbrett Apr 16, 2026
5ce7047
updated SQL DB files used to create Bgee 16
jwollbrett Apr 16, 2026
b207396
solved Type on DB attribute
jwollbrett Apr 16, 2026
ef833fb
manage expression score/weight/pvalue/numObs separately for full leng…
jwollbrett Apr 16, 2026
ac995e5
remove the not used and never totaly implemented hiddenSpecies attribute
jwollbrett Apr 16, 2026
708231e
update anatEntity Attribute name to fit the DB schema
jwollbrett Apr 16, 2026
dc96e10
second round of cleaning to remove AFFY and ESTs
jwollbrett Apr 30, 2026
bc43816
updated gene objects to fit updates in the database (removed OMAParen…
jwollbrett Apr 30, 2026
9db74aa
removed logic of raw data retrieval specific to ESTs
jwollbrett Apr 30, 2026
974fdc9
removed affy/est from js file
jwollbrett Apr 30, 2026
302b689
fasten retrieval of single cell experiment info
jwollbrett Jun 9, 2026
6283af7
add log for timing of OTF propagation
jwollbrett Jun 25, 2026
1cffeef
add possibility to load condition graph on demand
jwollbrett Jun 25, 2026
c7bd0f8
solve bug excluding annotated dev stage during condition propagation
jwollbrett Jun 25, 2026
af65328
fasten generation of the condition graph for condition propagation
jwollbrett Jun 25, 2026
a15f149
added fixme comment
jwollbrett Jun 25, 2026
7d088ca
improve speed of slow raw data SQL queries
jwollbrett Jun 25, 2026
608051c
update exclusion reasons
jwollbrett Jun 25, 2026
b7ffdfc
consider only expression values with observation for selected datatypes
jwollbrett Jun 25, 2026
7216b46
update insertion of propagated conditions
jwollbrett Jun 25, 2026
a525744
update exclusion reason in bgee-core
jwollbrett Jun 25, 2026
07d0b9e
add logs to detect slowest parts of the OTF propagation
jwollbrett Jun 25, 2026
2b9e5de
do not retrieve maxRanksPerSpecies for OTF propagation
jwollbrett Jun 25, 2026
4bc0a44
precise that descendant values are only direct descendant
jwollbrett Jun 25, 2026
97393ee
format pvalue
jwollbrett Jun 25, 2026
a62d446
reminder to remove unused max ranks
jwollbrett Jun 25, 2026
76564ce
sort calls per decreasing score
jwollbrett Jun 25, 2026
b5a2898
misc modifictations on OTF propagation
jwollbrett Jun 25, 2026
f5355f3
continue updating CommandData to use OTF propagation
jwollbrett Jun 25, 2026
3cb17cd
first version of gene page API call compatible with OTF propagation
jwollbrett Jun 25, 2026
ca58b94
allow DAOConditionFilter2 to only contain speciesId. Consider species…
jwollbrett Jun 30, 2026
3cc3370
consider speciesIds when instanciate DAOConditionFilter2 for OTF prop…
jwollbrett Jun 30, 2026
adcfa6b
implement a filter engine to remove condition with not requested chil…
jwollbrett Jun 30, 2026
892f06e
add misc todo and fixme
jwollbrett Jun 30, 2026
90c45b9
do not consider excluded terms and management of child terms when con…
jwollbrett Jun 30, 2026
18b5a68
remove useless update of condition map
jwollbrett Jun 30, 2026
8d44461
propagation method retrieve a set rather than a list
jwollbrett Jun 30, 2026
ac55ebe
implement new post otf propagation filtering of condition with exclud…
jwollbrett Jun 30, 2026
30f592f
refactor loading of ExpressionCallLoader for CommandGene and CommandData
jwollbrett Jun 30, 2026
bbef6f0
refactor call generation code for CommandData and CommandGene
jwollbrett Jul 1, 2026
0d8b36d
add condition parameters to the condition filter used in CommandGene
jwollbrett Jul 1, 2026
b6018f0
solved wrong management of excluded terms
jwollbrett Jul 2, 2026
f9d13cf
throw an error if conditionId present in the expression table is not …
jwollbrett Jul 2, 2026
deea193
removed code not used anymore
jwollbrett Jul 2, 2026
745df76
add FIXME comment to remember functionalities not yet implemented
jwollbrett Jul 2, 2026
ed2f28d
better formatting of JSON output for condition part
jwollbrett Jul 2, 2026
88f3e83
update TODO comment
jwollbrett Jul 2, 2026
7175055
update management of expressed/not expressed in CommandGene
jwollbrett Jul 3, 2026
1714667
manage requested summary call type after OTF propagation
jwollbrett Jul 3, 2026
e4142e9
fix p-value formatting when value is 0 in OTFExpressionCall
jwollbrett Jul 10, 2026
0c6a0f9
add missing import
jwollbrett Jul 12, 2026
affe0ec
Merge branch 'implement_otf' into updated_implement_otf
jwollbrett Jul 12, 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
15 changes: 6 additions & 9 deletions bgee-core/src/main/java/org/bgee/model/CommonService.java
Original file line number Diff line number Diff line change
Expand Up @@ -317,10 +317,6 @@ protected static GeneBioType mapGeneBioTypeTOToGeneBioType(GeneBioTypeTO geneBio
protected static DataType convertDaoDataTypeToDataType(DAODataType dt) {
log.traceEntry("{}", dt);
switch(dt) {
case AFFYMETRIX:
return log.traceExit(DataType.AFFYMETRIX);
case EST:
return log.traceExit(DataType.EST);
case IN_SITU:
return log.traceExit(DataType.IN_SITU);
case RNA_SEQ:
Expand All @@ -342,10 +338,6 @@ public static DAODataType convertDataTypeToDAODataType(DataType dt)
return log.traceExit((DAODataType) null);
}
switch(dt) {
case AFFYMETRIX:
return log.traceExit(DAODataType.AFFYMETRIX);
case EST:
return log.traceExit(DAODataType.EST);
case IN_SITU:
return log.traceExit(DAODataType.IN_SITU);
case RNA_SEQ:
Expand Down Expand Up @@ -402,6 +394,11 @@ protected static RawDataSex mapDAORawDataSexToRawDataSex(DAORawDataSex daoRawDat
throw log.throwing(new IllegalStateException("Unrecognized DAORawDataSex: " + daoRawDataSex));
}
}
public static DAOSex convertDAORawDataSexToDAOSex(DAORawDataSex daoRawDataSex) {
log.traceEntry("{}", daoRawDataSex);
return log.traceExit(convertSexToDAOSex(mapRawDataSexToSex(
mapDAORawDataSexToRawDataSex(daoRawDataSex))));
}
protected static Sex mapRawDataSexToSex(RawDataSex daoRawDataSex) {
log.traceEntry("{}", daoRawDataSex);
if (daoRawDataSex == null) {
Expand Down Expand Up @@ -1054,7 +1051,7 @@ protected static DAOConditionFilter generateDAOConditionFilter(ConditionFilter c
return log.traceExit(daoCondFilter);
}

protected static Strain mapRawDataStrainToStrain(String strain) {
public static Strain mapRawDataStrainToStrain(String strain) {
log.traceEntry("{}", strain);
if (StringUtils.isBlank(strain)) {
log.traceExit(); return null;
Expand Down
9 changes: 9 additions & 0 deletions bgee-core/src/main/java/org/bgee/model/ServiceFactory.java
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
import org.bgee.model.anatdev.multispemapping.DevStageSimilarityService;
import org.bgee.model.dao.api.DAOManager;
import org.bgee.model.expressiondata.call.CallService;
import org.bgee.model.expressiondata.call.ConditionGraphCacheService;
import org.bgee.model.expressiondata.call.ConditionGraphService;
import org.bgee.model.expressiondata.call.ConditionService;
import org.bgee.model.expressiondata.call.ExpressionCallService;
Expand Down Expand Up @@ -304,6 +305,14 @@ public ConditionService getConditionService() {
return log.traceExit(new ConditionService(this));
}

/**
* @return A newly instantiated {@code ConditionGraphCacheService}
*/
public ConditionGraphCacheService getConditionGraphCacheService() {
log.traceEntry();
return log.traceExit(new ConditionGraphCacheService(this));
}

/**
* @return A newly instantiated {@code ConditionGraphService}
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ public interface CallType {
public static enum Expression implements CallType, BgeeEnumField {
EXPRESSED(Collections.unmodifiableSet(EnumSet.allOf(DataType.class))),
NOT_EXPRESSED(Collections.unmodifiableSet(
EnumSet.of(DataType.AFFYMETRIX, DataType.IN_SITU, DataType.RNA_SEQ)));
EnumSet.of(DataType.IN_SITU, DataType.RNA_SEQ)));
private final static Logger log = LogManager.getLogger(Expression.class.getName());

/**
Expand Down Expand Up @@ -167,7 +167,7 @@ public static enum DiffExpression implements CallType, BgeeEnumField {
* @see #getAllowedDataTypes()
*/
private static final Set<DataType> DIFF_EXPR_DATA_TYPES =
Collections.unmodifiableSet(EnumSet.of(DataType.AFFYMETRIX, DataType.RNA_SEQ));
Collections.unmodifiableSet(EnumSet.of(DataType.RNA_SEQ));

@Override
public Set<DataType> getAllowedDataTypes() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,6 @@
//TODO: why don't we have a "ALL" data type?? This would be much cleaner than having to provide "null"
//everywhere...
public enum DataType implements BgeeEnumField {
AFFYMETRIX("Affymetrix", true, null, true), EST("EST", false, null, false),
IN_SITU("in situ hybridization", true, null, true),
//Note: It is important to keep SC_RNA_SEQ before RNA_SEQ until we fix the issue of retrieving
// experiment information consisting in different datatype (e.g both RNA_SEQ and SC_RNA_SEQ) as
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -320,10 +320,6 @@ private static Set<DataType> mapDAODataTypeToDataType(Set<DAODataType> dts,
mappedDataTypes = dts.stream()
.map(dt -> {
switch(dt) {
case AFFYMETRIX:
return log.traceExit(DataType.AFFYMETRIX);
case EST:
return log.traceExit(DataType.EST);
case IN_SITU:
return log.traceExit(DataType.IN_SITU);
case RNA_SEQ:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1880,10 +1880,6 @@ private static Set<DataType> mapDAODataTypeToDataType(Set<DAODataType> dts,
mappedDataTypes = dts.stream()
.map(dt -> {
switch(dt) {
case AFFYMETRIX:
return log.traceExit(DataType.AFFYMETRIX);
case EST:
return log.traceExit(DataType.EST);
case IN_SITU:
return log.traceExit(DataType.IN_SITU);
case RNA_SEQ:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,11 +30,11 @@
import org.bgee.model.dao.api.expressiondata.DAODataType;
import org.bgee.model.dao.api.expressiondata.call.CallObservedDataDAOFilter2;
import org.bgee.model.dao.api.expressiondata.call.ConditionDAO;
import org.bgee.model.dao.api.expressiondata.call.ConditionDAO.ConditionTO;
import org.bgee.model.dao.api.expressiondata.call.ConditionDAO.ConditionTOResultSet;
import org.bgee.model.dao.api.expressiondata.call.DAOConditionFilter2;
import org.bgee.model.dao.api.expressiondata.call.DAOFDRPValueFilter2;
import org.bgee.model.dao.api.expressiondata.call.DAOPropagationState;
import org.bgee.model.dao.api.expressiondata.call.ConditionDAO.ConditionTO;
import org.bgee.model.dao.api.expressiondata.call.ConditionDAO.ConditionTOResultSet;
import org.bgee.model.expressiondata.BaseConditionFilter2.FilterIds;
import org.bgee.model.expressiondata.baseelements.ConditionParameter;
import org.bgee.model.expressiondata.baseelements.DataType;
Expand Down Expand Up @@ -301,7 +301,10 @@ public Set<DAOConditionFilter2> convertConditionFiltersToDAOConditionFilters(
AnatEntityService anatEntityService, Set<Integer> consideredSpeciesIds) {
log.traceEntry("{}, {}, {}, {}", condFilters, ontService, anatEntityService, consideredSpeciesIds);
if (condFilters == null || condFilters.isEmpty()) {
return log.traceExit(new HashSet<>());
if(consideredSpeciesIds == null || consideredSpeciesIds.isEmpty()) {
return log.traceExit(new HashSet<>());
}
return log.traceExit(Set.of(new DAOConditionFilter2(consideredSpeciesIds, null, null, null, null, null, null, null)));
}

//First, in order to load appropriately the ontologies,
Expand All @@ -318,12 +321,17 @@ public Set<DAOConditionFilter2> convertConditionFiltersToDAOConditionFilters(
ConditionParameter.ANAT_ENTITY_CELL_TYPE).getFilterIds(0);
FilterIds<String> cellTypeFilterIds = filter.getComposedFilterIds(
ConditionParameter.ANAT_ENTITY_CELL_TYPE).getFilterIds(1);
if (anatEntityFilterIds != null && anatEntityFilterIds.isIncludeChildTerms()) {
//XXX: we used to consider isIncludeChildTerms == true detect terms to retrieve for anat. enttiy,
// Cell type and dev. stage.
// Since Bgee 16.0 we generate the calls on the fly. All descendant condition of a requested
// one have to be processed. Then we always need to retrieve all child terms of a requested term.
// The subseting of condition is done later once the propagation has been done.
if (anatEntityFilterIds != null) {
anatEntityAndCellTypeIdsWithChildrenRequested.addAll(anatEntityFilterIds.getIds());
anatEntityAndCellTypeIdsWithChildrenRequested.addAll(anatEntityFilterIds.getExcludeTermsAndChildrenIds());
speciesIdsWithAnatCellChildrenRequested.add(filter.getSpeciesId());
}
if (cellTypeFilterIds != null && cellTypeFilterIds.isIncludeChildTerms()) {
if (cellTypeFilterIds != null) {
anatEntityAndCellTypeIdsWithChildrenRequested.addAll(cellTypeFilterIds.getIds());
anatEntityAndCellTypeIdsWithChildrenRequested.addAll(cellTypeFilterIds.getExcludeTermsAndChildrenIds());
speciesIdsWithAnatCellChildrenRequested.add(filter.getSpeciesId());
Expand All @@ -332,24 +340,36 @@ public Set<DAOConditionFilter2> convertConditionFiltersToDAOConditionFilters(
assert !filter.getComposedFilterIds(ConditionParameter.DEV_STAGE).isComposed();
FilterIds<String> devStageFilterIds = filter.getComposedFilterIds(
ConditionParameter.DEV_STAGE).getFilterIds(0);
if (devStageFilterIds != null && devStageFilterIds.isIncludeChildTerms()) {
if (devStageFilterIds != null) {
devStageIdsWithChildrenRequested.addAll(devStageFilterIds.getIds());
devStageIdsWithChildrenRequested.addAll(devStageFilterIds.getExcludeTermsAndChildrenIds());
speciesIdsWithDevStageChildrenRequested.add(filter.getSpeciesId());
}
}

//Now we load the ontologies if needed
long t0 = System.currentTimeMillis();
MultiSpeciesOntology<AnatEntity, String> anatOntology = anatEntityAndCellTypeIdsWithChildrenRequested.isEmpty()?
null: ontService.getAnatEntityOntology(
speciesIdsWithAnatCellChildrenRequested, anatEntityAndCellTypeIdsWithChildrenRequested,
EnumSet.of(RelationType.ISA_PARTOF), false, true);
log.debug("getAnatEntityOntology() completed in {} ms (requested {} terms in {} species)",
System.currentTimeMillis() - t0,
anatEntityAndCellTypeIdsWithChildrenRequested.size(),
speciesIdsWithAnatCellChildrenRequested.size());
t0 = System.currentTimeMillis();
MultiSpeciesOntology<DevStage, String> stageOntology = devStageIdsWithChildrenRequested.isEmpty()?
null: ontService.getDevStageOntology(
speciesIdsWithDevStageChildrenRequested, devStageIdsWithChildrenRequested, false, true);
log.debug("getDevStageOntology() completed in {} ms (requested {} terms in {} species)",
System.currentTimeMillis() - t0,
devStageIdsWithChildrenRequested.size(),
speciesIdsWithDevStageChildrenRequested.size());
//There is no ontology for RawDataSex and RawDataStrain (String), really it's simply one root
//with all other terms at the first level.

t0 = System.currentTimeMillis();
t0 = System.currentTimeMillis();
Map<Integer, Set<String>> nonInformativePerSpeciesId = condFilters.stream()
.filter(f -> f.isExcludeNonInformative())
.map(f -> f.getSpeciesId()).distinct()
Expand All @@ -363,8 +383,11 @@ public Set<DAOConditionFilter2> convertConditionFiltersToDAOConditionFilters(
.filter(aeid -> !aeid.equals(ConditionDAO.ANAT_ENTITY_ROOT_ID) &&
!aeid.equals(ConditionDAO.CELL_TYPE_ROOT_ID))
.collect(Collectors.toSet())));
log.debug("loadNonInformativeAnatEntities() completed in {} ms ({} species with exclusion)",
System.currentTimeMillis() - t0, nonInformativePerSpeciesId.size());

//Now we have everything we need to create the DAO filters
t0 = System.currentTimeMillis();
Set<DAOConditionFilter2> daoCondFilters = new HashSet<>();
for (ConditionFilter2 filter: condFilters) {
Set<String> anatEntityIds = new HashSet<>();
Expand All @@ -380,15 +403,13 @@ public Set<DAOConditionFilter2> convertConditionFiltersToDAOConditionFilters(
ConditionParameter.ANAT_ENTITY_CELL_TYPE).getFilterIds(1);
if (anatEntityFilterIds != null) {
anatEntityIds.addAll(anatEntityFilterIds.getIds());
if (anatEntityFilterIds.isIncludeChildTerms()) {
anatEntityIds.addAll(
anatEntityFilterIds.getIds().stream()
.flatMap(id -> anatOntology.getDescendantIds(
id, false, Collections.singleton(filter.getSpeciesId()))
.stream())
.collect(Collectors.toSet())
);
}
anatEntityIds.addAll(
anatEntityFilterIds.getIds().stream()
.flatMap(id -> anatOntology.getDescendantIds(
id, false, Collections.singleton(filter.getSpeciesId()))
.stream())
.collect(Collectors.toSet())
);
if (!anatEntityFilterIds.getExcludeTermsAndChildrenIds().isEmpty()) {
Set<String> anatEntityIdsToExclude = new HashSet<>();
anatEntityIdsToExclude.addAll(anatEntityFilterIds.getExcludeTermsAndChildrenIds());
Expand All @@ -398,7 +419,7 @@ public Set<DAOConditionFilter2> convertConditionFiltersToDAOConditionFilters(
id, false, Collections.singleton(filter.getSpeciesId()))
.stream())
.collect(Collectors.toSet())
);
);
anatEntityIdsToExclude.removeAll(anatEntityFilterIds.getNotToExcludeIds());
if (anatEntityIds.removeAll(anatEntityIdsToExclude) && anatEntityIds.isEmpty()) {
throw log.throwing(new IllegalArgumentException(
Expand All @@ -408,15 +429,13 @@ public Set<DAOConditionFilter2> convertConditionFiltersToDAOConditionFilters(
}
if (cellTypeFilterIds != null) {
cellTypeIds.addAll(cellTypeFilterIds.getIds());
if (cellTypeFilterIds.isIncludeChildTerms()) {
cellTypeIds.addAll(
cellTypeFilterIds.getIds().stream()
.flatMap(id -> anatOntology.getDescendantIds(
id, false, Collections.singleton(filter.getSpeciesId()))
.stream())
.collect(Collectors.toSet())
);
}
cellTypeIds.addAll(
cellTypeFilterIds.getIds().stream()
.flatMap(id -> anatOntology.getDescendantIds(
id, false, Collections.singleton(filter.getSpeciesId()))
.stream())
.collect(Collectors.toSet())
);
if (!cellTypeFilterIds.getExcludeTermsAndChildrenIds().isEmpty()) {
Set<String> cellTypeIdsToExclude = new HashSet<>();
cellTypeIdsToExclude.addAll(cellTypeFilterIds.getExcludeTermsAndChildrenIds());
Expand All @@ -426,7 +445,7 @@ public Set<DAOConditionFilter2> convertConditionFiltersToDAOConditionFilters(
id, false, Collections.singleton(filter.getSpeciesId()))
.stream())
.collect(Collectors.toSet())
);
);
//we don't want to exclude the selected terms themselves
cellTypeIdsToExclude.removeAll(cellTypeFilterIds.getNotToExcludeIds());
if (cellTypeIds.removeAll(cellTypeIdsToExclude) && cellTypeIds.isEmpty()) {
Expand All @@ -442,32 +461,13 @@ public Set<DAOConditionFilter2> convertConditionFiltersToDAOConditionFilters(
ConditionParameter.DEV_STAGE).getFilterIds(0);
if (devStageFilterIds != null) {
devStageIds.addAll(devStageFilterIds.getIds());
if (devStageFilterIds.isIncludeChildTerms()) {
devStageIds.addAll(
devStageFilterIds.getIds().stream()
.flatMap(id -> stageOntology.getDescendantIds(
id, false, Collections.singleton(filter.getSpeciesId()))
.stream())
.collect(Collectors.toSet())
);
}
if (!devStageFilterIds.getExcludeTermsAndChildrenIds().isEmpty()) {
Set<String> devStageIdsToExclude = new HashSet<>();
devStageIdsToExclude.addAll(devStageFilterIds.getExcludeTermsAndChildrenIds());
devStageIdsToExclude.addAll(
devStageFilterIds.getExcludeTermsAndChildrenIds().stream()
.flatMap(id -> stageOntology.getDescendantIds(
id, false, Collections.singleton(filter.getSpeciesId()))
.stream())
.collect(Collectors.toSet())
);
//we don't want to exclude the selected terms themselves
devStageIdsToExclude.removeAll(devStageFilterIds.getNotToExcludeIds());
if (devStageIds.removeAll(devStageIdsToExclude) && devStageIds.isEmpty()) {
throw log.throwing(new IllegalArgumentException(
"No result should be retrieved because of dev. stage exclusion"));
}
}
}

//For now we consider there is no composition for sexes and strains
Expand Down Expand Up @@ -504,6 +504,8 @@ public Set<DAOConditionFilter2> convertConditionFiltersToDAOConditionFilters(
filter, condParamComb, daoCondFilter);
daoCondFilters.add(daoCondFilter);
}
log.debug("DAOConditionFilter2 construction loop completed in {} ms ({} filters built)",
System.currentTimeMillis() - t0, daoCondFilters.size());

//Now we filter the daoCondFilters: if one of them target a species with no additional parameters,
//then we discard any other filter targeting the same species
Expand Down
Loading