Skip to content

Commit

Permalink
Merge pull request #1190 from virtualcell/LocalHDF5ExportFix
Browse files Browse the repository at this point in the history
Uses streams to filter non-overridable constants rather than iterator
  • Loading branch information
CodeByDrescher authored Mar 12, 2024
2 parents a694b20 + 52a54e0 commit 95e7580
Showing 1 changed file with 7 additions and 7 deletions.
14 changes: 7 additions & 7 deletions vcell-core/src/main/java/cbit/vcell/solver/MathOverrides.java
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
import java.util.function.BiPredicate;
import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.stream.Stream;

/**
* Constant expressions that override those specified in the MathDescription
Expand Down Expand Up @@ -1140,32 +1141,31 @@ public String[] getFilteredConstantNames(){
//
// try to ask SimulationContext for Constants which map to unit conversions and physical constants (exclude these).
//
SimulationOwner simulationOwner = simulation.getSimulationOwner();
SimulationOwner simulationOwner = this.simulation.getSimulationOwner();
//
// MathModels don't provide MathOverrides resolvers, and in context of Simulation editor, cloned Simulation doesn't have an owner (transient field)
//
if(simulationOwner != null && simulationOwner.getMathOverridesResolver() != null){
Set<String> nonOverridableConstantNames = simulationOwner.getMathOverridesResolver().getNonOverridableConstantNames();
if(nonOverridableConstantNames != null){ // returns null if MathSymbolMapping is missing from MathDescription.
List<String> allConstants = Arrays.asList(getAllConstantNames());
allConstants.removeAll(nonOverridableConstantNames);
return allConstants.toArray(new String[0]);
Stream<String> ss = Arrays.stream(this.getAllConstantNames().clone()).filter(elem -> !nonOverridableConstantNames.contains(elem));
return ss.toArray(String[]::new);
}
}

//
// Simulation owner cannot provide intelligent choices (MathModel or MathSymbolMapping is missing)
//
List<String> reservedConstants = Arrays.asList("KMOLE", "_T_", "_F_", "F_nmol_", "_N_pmol_", "_PI_", "_R_", "_K_GHK", "K_millivolts_per_volt", "param_K_millivolts_per_volt");
List<String> allConstants = Arrays.asList(getAllConstantNames());
ArrayList<String> filteredConstants = new ArrayList<String>();
String[] allConstants = this.getAllConstantNames();
ArrayList<String> filteredConstants = new ArrayList<>();
for(String constant : allConstants){
if(reservedConstants.stream().anyMatch(constant::contains)) continue;
if(constant.startsWith("UnitFactor")) continue;
if(constant.startsWith("param__")) continue;
filteredConstants.add(constant);
}
return filteredConstants.toArray(new String[filteredConstants.size()]);
return filteredConstants.toArray(String[]::new);
}

}

0 comments on commit 95e7580

Please sign in to comment.