Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fixes #2589 only export species indepednent parameters to spatial str… #2591

Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
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
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