Skip to content

Commit

Permalink
Fixes #2589 only export species indepednent parameters to spatial str… (
Browse files Browse the repository at this point in the history
#2591)

* Fixes #2589 only export species indepednent parameters to spatial structure

* Update to real DLLs

* Fixes typo
  • Loading branch information
msevestre authored Apr 6, 2023
1 parent 35131dc commit 7edb919
Show file tree
Hide file tree
Showing 56 changed files with 340 additions and 267 deletions.
4 changes: 2 additions & 2 deletions src/PKSim.Assets.Images/PKSim.Assets.Images.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,8 @@
</ItemGroup>

<ItemGroup>
<PackageReference Include="OSPSuite.Assets" Version="12.0.153" />
<PackageReference Include="OSPSuite.Assets.Images" Version="12.0.153" />
<PackageReference Include="OSPSuite.Assets" Version="12.0.160" />
<PackageReference Include="OSPSuite.Assets.Images" Version="12.0.160" />
</ItemGroup>

<ItemGroup>
Expand Down
4 changes: 2 additions & 2 deletions src/PKSim.Assets/PKSim.Assets.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,8 @@
</ItemGroup>

<ItemGroup>
<PackageReference Include="OSPSuite.Assets" Version="12.0.153" />
<PackageReference Include="OSPSuite.Assets.Images" Version="12.0.153" />
<PackageReference Include="OSPSuite.Assets" Version="12.0.160" />
<PackageReference Include="OSPSuite.Assets.Images" Version="12.0.160" />
</ItemGroup>

<ItemGroup>
Expand Down
4 changes: 2 additions & 2 deletions src/PKSim.BatchTool/PKSim.BatchTool.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -59,8 +59,8 @@
</ItemGroup>

<ItemGroup>
<PackageReference Include="OSPSuite.Core" Version="12.0.153" />
<PackageReference Include="OSPSuite.Assets" Version="12.0.153" />
<PackageReference Include="OSPSuite.Core" Version="12.0.160" />
<PackageReference Include="OSPSuite.Assets" Version="12.0.160" />
<PackageReference Include="OSPSuite.DevExpress" Version="21.2.3" />
<PackageReference Include="OSPSuite.FuncParser" Version="4.0.0.54" GeneratePathProperty="true" />
<PackageReference Include="OSPSuite.SimModel" Version="4.0.0.53" GeneratePathProperty="true" />
Expand Down
4 changes: 2 additions & 2 deletions src/PKSim.CLI.Core/PKSim.CLI.Core.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,9 @@
</ItemGroup>

<ItemGroup>
<PackageReference Include="OSPSuite.Assets" Version="12.0.153" />
<PackageReference Include="OSPSuite.Assets" Version="12.0.160" />
<PackageReference Include="OSPSuite.Utility" Version="4.0.0.4" />
<PackageReference Include="OSPSuite.Core" Version="12.0.153" />
<PackageReference Include="OSPSuite.Core" Version="12.0.160" />
</ItemGroup>

<ItemGroup>
Expand Down
6 changes: 3 additions & 3 deletions src/PKSim.CLI/PKSim.CLI.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -61,9 +61,9 @@
<ItemGroup>
<PackageReference Include="CommandLineParser" Version="2.8.0" />
<PackageReference Include="Microsoft.Extensions.Logging.Console" Version="3.1.0" />
<PackageReference Include="OSPSuite.Core" Version="12.0.153" />
<PackageReference Include="OSPSuite.Presentation" Version="12.0.153" />
<PackageReference Include="OSPSuite.Assets" Version="12.0.153" />
<PackageReference Include="OSPSuite.Core" Version="12.0.160" />
<PackageReference Include="OSPSuite.Presentation" Version="12.0.160" />
<PackageReference Include="OSPSuite.Assets" Version="12.0.160" />
<PackageReference Include="OSPSuite.Utility" Version="4.0.0.4" />
<PackageReference Include="OSPSuite.FuncParser" Version="4.0.0.54" GeneratePathProperty="true" />
<PackageReference Include="OSPSuite.SimModel" Version="4.0.0.53" GeneratePathProperty="true" />
Expand Down
2 changes: 1 addition & 1 deletion src/PKSim.Core/Mappers/FormulaToFormulaTypeMapper.cs
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ public FormulaType MapFrom(IFormula formula)
if (formula == null)
return FormulaType.Constant;

if (formula.IsAnImplementationOf<IDistributionFormula>())
if (formula.IsAnImplementationOf<DistributionFormula>())
return FormulaType.Distribution;

if (formula.IsAnImplementationOf<TableFormula>())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
using OSPSuite.Utility.Extensions;
using PKSim.Assets;
using PKSim.Core.Model;
using PKSim.Core.Model.Extensions;
using PKSim.Core.Repositories;
using PKSim.Core.Services;
using IFormulaFactory = PKSim.Core.Model.IFormulaFactory;
Expand Down Expand Up @@ -64,6 +65,30 @@ protected override IReadOnlyList<IParameter> AllParametersFor(Individual individ
return individual.GetAllChildren<IParameter>().Where(x => x.GroupName != CoreConstants.Groups.RELATIVE_EXPRESSION).ToList();
}

public override IndividualParameter MapParameter(IParameter parameter, Individual individual)
{
var individualParameter = base.MapParameter(parameter, individual);
individualParameter.Info = parameter.Info.Clone();
individualParameter.Origin = new ParameterOrigin
{
ParameterId = parameter.Id,
BuilingBlockId = individual.Id,
};

return individualParameter;
}

protected override void MapFormulaOrValue(IParameter parameter, IndividualParameter builderParameter, Individual pkSimBuildingBlock, BuildingBlockFormulaCache formulaCache)
{
base.MapFormulaOrValue(parameter, builderParameter, pkSimBuildingBlock, formulaCache);
switch (parameter.Formula)
{
case DistributionFormula distributionFormula:
builderParameter.DistributionType = distributionFormula.DistributionType().Id;
break;
}
}

public override IndividualBuildingBlock MapFrom(Individual individual)
{
var buildingBlock = base.MapFrom(individual);
Expand Down
35 changes: 19 additions & 16 deletions src/PKSim.Core/Mappers/PathAndValueBuildingBlockMapper.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
using OSPSuite.Utility;
using OSPSuite.Utility.Extensions;
using PKSim.Core.Model;
using PKSim.Core.Model.Extensions;
using IFormulaFactory = PKSim.Core.Model.IFormulaFactory;

namespace PKSim.Core.Mappers
Expand All @@ -22,7 +23,7 @@ public interface IPathAndValueBuildingBlockMapper<in TPKSimBuildingBlock, out TB
/// Map the parameter to the underlying builder parameter.
/// Note that formula or value will not be set. Only common parameter properties
/// </summary>
TBuilder MapParameter(IParameter parameter);
TBuilder MapParameter(IParameter parameter, TPKSimBuildingBlock pkSimBuildingBlock);
}

public abstract class PathAndValueBuildingBlockMapper<TPKSimBuildingBlock, TBuildingBlock, TBuilder> : IPathAndValueBuildingBlockMapper<TPKSimBuildingBlock, TBuildingBlock, TBuilder> where TPKSimBuildingBlock : PKSimBuildingBlock
Expand Down Expand Up @@ -59,7 +60,7 @@ protected TBuildingBlock CreateBaseObject(TPKSimBuildingBlock pkSimBuildingBlock
return buildingBlock;
}

public virtual TBuilder MapParameter(IParameter parameter)
public virtual TBuilder MapParameter(IParameter parameter, TPKSimBuildingBlock pkSimBuildingBlock)
{
var builderParameter = _objectBaseFactory.Create<TBuilder>();
builderParameter.Name = parameter.Name;
Expand All @@ -69,11 +70,8 @@ public virtual TBuilder MapParameter(IParameter parameter)
return builderParameter;
}

private TBuilder mapBuilderParameter(IParameter parameter, TPKSimBuildingBlock pkSimBuildingBlock, BuildingBlockFormulaCache formulaCache)
protected virtual void MapFormulaOrValue(IParameter parameter, TBuilder builderParameter, TPKSimBuildingBlock pkSimBuildingBlock, BuildingBlockFormulaCache formulaCache)
{
var builderParameter = MapParameter(parameter);

// Add the formula to the building block formula cache if the formula can be cached
var parameterValue = getParameterValue(parameter);
var valueChanged = parameter.ValueDiffersFromDefault();
var formula = parameter.Formula;
Expand All @@ -82,17 +80,16 @@ private TBuilder mapBuilderParameter(IParameter parameter, TPKSimBuildingBlock p
{
case ConstantFormula _:
builderParameter.Value = parameterValue;
return builderParameter;

case DistributionFormula _:

break;
case DistributionFormula distributionFormula:
{
//formula and did not change. Do not return
if (!valueChanged)
return null;
break;

builderParameter.Value = parameterValue;
return builderParameter;

break;
}
default:
if (formula.IsCachable())
{
Expand All @@ -103,11 +100,17 @@ private TBuilder mapBuilderParameter(IParameter parameter, TPKSimBuildingBlock p
// Only set the value of the parameter using a formula if it was indeed set
if (valueChanged)
builderParameter.Value = parameterValue;

return builderParameter;
break;
}
}

private TBuilder mapBuilderParameter(IParameter parameter, TPKSimBuildingBlock pkSimBuildingBlock, BuildingBlockFormulaCache formulaCache)
{
var builderParameter = MapParameter(parameter, pkSimBuildingBlock);
MapFormulaOrValue(parameter, builderParameter, pkSimBuildingBlock, formulaCache);
return builderParameter;
}

private IFormula retrieveTemplateFormulaFromCache(IParameter parameter, TPKSimBuildingBlock pkSimBuildingBlock, BuildingBlockFormulaCache formulaCache)
{
var formulaName = parameter.Formula.Name;
Expand All @@ -133,7 +136,7 @@ protected void MapAllParameters(TPKSimBuildingBlock sourcePKSimBuildingBlock, TB
//Cache used to store all formula that can be cached. This is required to avoid having the same formula defined multiple times in the building block
//note that a clone of the original formula is added to the cache so that it can be modified if required
var formulaCache = new BuildingBlockFormulaCache();
var allBuilderParameters = AllParametersFor(sourcePKSimBuildingBlock).Select(x=>mapBuilderParameter(x, sourcePKSimBuildingBlock, formulaCache));
var allBuilderParameters = AllParametersFor(sourcePKSimBuildingBlock).Select(x => mapBuilderParameter(x, sourcePKSimBuildingBlock, formulaCache));
allBuilderParameters.Where(x => x != null).Each(buildingBlock.Add);

//Formula cache already contains a clone of all formula. We can add as is
Expand Down
1 change: 1 addition & 0 deletions src/PKSim.Core/Model/ContainerParameterBySpecies.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
{
public class ContainerParameterBySpecies
{
public int ContainerId { get; set; }
public string ContainerPath { get; set; }
public string ParameterName { get; set; }
public int SpeciesCount { get; set; }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ public DiscreteDistributionFormulaSpecificationFactory(IInterpolation interpolat
_distributionFormulaFactory = distributionFormulaFactory;
}

public IDistributionFormula CreateFor(IEnumerable<ParameterDistributionMetaData> distributions, IDistributedParameter parameter, OriginData originData)
public DistributionFormula CreateFor(IEnumerable<ParameterDistributionMetaData> distributions, IDistributedParameter parameter, OriginData originData)
{
UpdateDistributionBasedOn(distributions, parameter, null, originData);
return _distributionFormulaFactory.CreateDiscreteDistributionFormulaFor(parameter, parameter.MeanParameter);
Expand All @@ -33,7 +33,7 @@ public void UpdateDistributionBasedOn(IEnumerable<ParameterDistributionMetaData>
parameter.ScaleDistributionBasedOn(baseParameter);
}

public IDistributionFormula CreateFor(IDistributionMetaData distribution, IDistributedParameter parameter)
public DistributionFormula CreateFor(IDistributionMetaData distribution, IDistributedParameter parameter)
{
parameter.MeanParameter.Value = distribution.Mean;
return _distributionFormulaFactory.CreateDiscreteDistributionFormulaFor(parameter, parameter.MeanParameter);
Expand Down
8 changes: 4 additions & 4 deletions src/PKSim.Core/Model/DistributionFormulaFactory.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@ namespace PKSim.Core.Model
{
public interface IDistributionFormulaFactory
{
IDistributionFormula CreateFor(IEnumerable<ParameterDistributionMetaData> distributions, IDistributedParameter parameter, OriginData originData);
IDistributionFormula CreateFor(IDistributionMetaData distribution, IDistributedParameter parameter);
DistributionFormula CreateFor(IEnumerable<ParameterDistributionMetaData> distributions, IDistributedParameter parameter, OriginData originData);
DistributionFormula CreateFor(IDistributionMetaData distribution, IDistributedParameter parameter);
void UpdateDistributionBasedOn(IEnumerable<ParameterDistributionMetaData> distributions, IDistributedParameter parameter, IDistributedParameter baseParameter, OriginData originData);
}

Expand All @@ -30,7 +30,7 @@ public DistributionFormulaFactory(IRepository<IDistributionFormulaSpecificationF
_allDistributionFactory = repository.All();
}

public IDistributionFormula CreateFor(IEnumerable<ParameterDistributionMetaData> distributions, IDistributedParameter parameter, OriginData originData)
public DistributionFormula CreateFor(IEnumerable<ParameterDistributionMetaData> distributions, IDistributedParameter parameter, OriginData originData)
{
var allDistributions = distributions.ToList();
foreach (var factory in _allDistributionFactory)
Expand All @@ -42,7 +42,7 @@ public IDistributionFormula CreateFor(IEnumerable<ParameterDistributionMetaData>
throw new DistributionNotFoundException(parameter, _reportGenerator.StringReportFor(originData));
}

public IDistributionFormula CreateFor(IDistributionMetaData distribution, IDistributedParameter parameter)
public DistributionFormula CreateFor(IDistributionMetaData distribution, IDistributedParameter parameter)
{
foreach (var factory in _allDistributionFactory)
{
Expand Down
2 changes: 1 addition & 1 deletion src/PKSim.Core/Model/DistributionNotFoundException.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ public DistributionNotFoundException(IEntity entity, string originDataReport) :
}

public DistributionNotFoundException(IDistributionMetaData distributionMetaData) :
base(PKSimConstants.Error.DistributionUnknown(distributionMetaData.Distribution.Id))
base(PKSimConstants.Error.DistributionUnknown(distributionMetaData.Distribution.DisplayName))
{
}
}
Expand Down
23 changes: 12 additions & 11 deletions src/PKSim.Core/Model/DistributionType.cs
Original file line number Diff line number Diff line change
@@ -1,20 +1,21 @@
using System.Collections.Generic;
using OSPSuite.Utility.Collections;
using PKSim.Assets;
using CoreDistributionType = OSPSuite.Core.Domain.Formulas.DistributionType;

namespace PKSim.Core.Model
{
public static class DistributionTypes
{
private static readonly ICache<string, DistributionType> _allDistributionTypes = new Cache<string, DistributionType>(dist => dist.Id);
private static readonly ICache<CoreDistributionType, DistributionType> _allDistributionTypes = new Cache<CoreDistributionType, DistributionType>(dist => dist.Id);

public static DistributionType Normal = create(CoreConstants.Distribution.Normal, PKSimConstants.UI.Normal);
public static DistributionType LogNormal = create(CoreConstants.Distribution.LogNormal, PKSimConstants.UI.LogNormal);
public static DistributionType Uniform = create(CoreConstants.Distribution.Uniform, PKSimConstants.UI.Uniform);
public static DistributionType Discrete = create(CoreConstants.Distribution.Discrete, PKSimConstants.UI.Discrete);
public static DistributionType Unknown = create(CoreConstants.Distribution.Unknown, PKSimConstants.UI.Unknown);
public static DistributionType Normal = create(CoreDistributionType.Normal, PKSimConstants.UI.Normal);
public static DistributionType LogNormal = create(CoreDistributionType.LogNormal, PKSimConstants.UI.LogNormal);
public static DistributionType Uniform = create(CoreDistributionType.Uniform, PKSimConstants.UI.Uniform);
public static DistributionType Discrete = create(CoreDistributionType.Discrete, PKSimConstants.UI.Discrete);
public static DistributionType Unknown = create(CoreDistributionType.Unknown, PKSimConstants.UI.Unknown);

private static DistributionType create(string id, string displayName)
private static DistributionType create(CoreDistributionType id, string displayName)
{
var distributionType = new DistributionType(id, displayName);
_allDistributionTypes.Add(distributionType);
Expand All @@ -26,9 +27,9 @@ public static IEnumerable<DistributionType> All()
return _allDistributionTypes;
}

public static DistributionType ById(string distributionId)
public static DistributionType ById(CoreDistributionType distributionType)
{
return _allDistributionTypes[distributionId];
return _allDistributionTypes[distributionType];
}
}

Expand All @@ -37,11 +38,11 @@ public class DistributionType
/// <summary>
/// distribution id as defined in the PKSim Database
/// </summary>
public string Id { get; }
public CoreDistributionType Id { get; }

public string DisplayName { get; }

public DistributionType(string id, string displayName)
public DistributionType(CoreDistributionType id, string displayName)
{
Id = id;
DisplayName = displayName;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ namespace PKSim.Core.Model.Extensions
{
public static class DistributionFormulaExtensions
{
public static DistributionType DistributionType(this IDistributionFormula formula)
public static DistributionType DistributionType(this DistributionFormula formula)
{
if (formula.IsAnImplementationOf<NormalDistributionFormula>())
return DistributionTypes.Normal;
Expand Down
8 changes: 4 additions & 4 deletions src/PKSim.Core/Model/FormulaFactory.cs
Original file line number Diff line number Diff line change
Expand Up @@ -36,12 +36,12 @@ public interface IFormulaFactory
/// <summary>
/// Create and returns a distribution formula based on the given <paramref name="distributions" /> .
/// </summary>
IDistributionFormula DistributionFor(IEnumerable<ParameterDistributionMetaData> distributions, IDistributedParameter parameterWithDistribution, OriginData originData);
DistributionFormula DistributionFor(IEnumerable<ParameterDistributionMetaData> distributions, IDistributedParameter parameterWithDistribution, OriginData originData);

/// <summary>
/// Create and returns a distribution formula based on the given <paramref name="distributionMetaData" /> .
/// </summary>
IDistributionFormula DistributionFor(ParameterDistributionMetaData distributionMetaData, IDistributedParameter parameterWithDistribution);
DistributionFormula DistributionFor(ParameterDistributionMetaData distributionMetaData, IDistributedParameter parameterWithDistribution);

/// <summary>
/// Creates and returns a constant formula based on the <paramref name="valueDefinition" />
Expand Down Expand Up @@ -426,7 +426,7 @@ private void addTimeReferenceIfNeeded(FormulaWithFormulaString formula)
formula.AddObjectPath(_objectPathFactory.CreateTimePath(_dimensionRepository.Time));
}

public IDistributionFormula DistributionFor(ParameterDistributionMetaData distributionMetaData, IDistributedParameter parameterWithDistribution)
public DistributionFormula DistributionFor(ParameterDistributionMetaData distributionMetaData, IDistributedParameter parameterWithDistribution)
{
return _distributionFactory.CreateFor(distributionMetaData, parameterWithDistribution);
}
Expand All @@ -436,7 +436,7 @@ public IFormula ValueFor(ParameterValueMetaData valueDefinition)
return constantFormula(valueDefinition);
}

public IDistributionFormula DistributionFor(IEnumerable<ParameterDistributionMetaData> distributions, IDistributedParameter parameterWithDistribution, OriginData originData)
public DistributionFormula DistributionFor(IEnumerable<ParameterDistributionMetaData> distributions, IDistributedParameter parameterWithDistribution, OriginData originData)
{
return _distributionFactory.CreateFor(distributions, parameterWithDistribution, originData);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,13 +18,13 @@ public LogNormalDistributionFormulaSpecificationFactory(IInterpolation interpola
_distributionFormulaFactory = distributionFormulaFactory;
}

public IDistributionFormula CreateFor(IEnumerable<ParameterDistributionMetaData> distributions, IDistributedParameter parameter, OriginData originData)
public DistributionFormula CreateFor(IEnumerable<ParameterDistributionMetaData> distributions, IDistributedParameter parameter, OriginData originData)
{
UpdateDistributionBasedOn(distributions, parameter, null, originData);
return _distributionFormulaFactory.CreateLogNormalDistributionFormulaFor(parameter, parameter.MeanParameter, parameter.DeviationParameter);
}

public IDistributionFormula CreateFor(IDistributionMetaData distribution, IDistributedParameter parameter)
public DistributionFormula CreateFor(IDistributionMetaData distribution, IDistributedParameter parameter)
{
parameter.MeanParameter.Value = distribution.Mean;
parameter.DeviationParameter.Value = distribution.Deviation;
Expand Down
Loading

0 comments on commit 7edb919

Please sign in to comment.