-
Notifications
You must be signed in to change notification settings - Fork 15
Expand file tree
/
Copy pathDomainHelperForSpecs.cs
More file actions
149 lines (120 loc) · 6.23 KB
/
DomainHelperForSpecs.cs
File metadata and controls
149 lines (120 loc) · 6.23 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
using System;
using System.IO;
using MoBi.Core.Domain.Model;
using MoBi.Core.Services;
using OSPSuite.Core.Domain;
using OSPSuite.Core.Domain.Builder;
using OSPSuite.Core.Domain.Data;
using OSPSuite.Core.Domain.Formulas;
using OSPSuite.Core.Domain.Services;
using OSPSuite.Core.Domain.UnitSystem;
using OSPSuite.Utility.Events;
namespace MoBi.HelpersForTests
{
public static class DomainHelperForSpecs
{
private static Dimension _concentrationDimension;
private static Dimension _timeDimension;
private static readonly string PATH_TO_DOCS = "..\\..\\..\\..\\..\\docs\\";
public static string ProjectSchemaDumpFilePath => Path.Combine(AppDomain.CurrentDomain.BaseDirectory, PATH_TO_DOCS, "project_schema.sql");
public static string TestFileFullPath(string fileName)
{
return Path.Combine(TestFileDirectory, fileName);
}
public static readonly string TestFileDirectory = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "..", "..", "..", "TestFiles");
public static IDimension TimeDimensionForSpecs()
{
if (_timeDimension == null)
{
_timeDimension = new Dimension(new BaseDimensionRepresentation { TimeExponent = 1 }, Constants.Dimension.TIME, "min");
_timeDimension.AddUnit(new Unit("h", 60, 0));
}
return _timeDimension;
}
public static IDimension ConcentrationDimensionForSpecs()
{
if (_concentrationDimension == null)
{
_concentrationDimension = new Dimension(new BaseDimensionRepresentation { AmountExponent = 3, LengthExponent = -1 }, Constants.Dimension.MOLAR_CONCENTRATION, "µmol/l");
_concentrationDimension.AddUnit(new Unit("mol/l", 1E6, 0));
}
return _concentrationDimension;
}
public static DataRepository IndividualSimulationDataRepositoryFor(string simulationName)
{
var simulationResults = new DataRepository("Results");
var baseGrid = new BaseGrid("Time", TimeDimensionForSpecs())
{
Values = new[] { 1.0f, 2.0f, 3.0f }
};
simulationResults.Add(baseGrid);
var data = ConcentrationColumnForSimulation(simulationName, baseGrid);
simulationResults.Add(data);
return simulationResults;
}
public static DataColumn ConcentrationColumnForSimulation(string simulationName, BaseGrid baseGrid)
{
var data = new DataColumn("Col", ConcentrationDimensionForSpecs(), baseGrid)
{
Values = new[] { 10f, 20f, 30f },
DataInfo = { Origin = ColumnOrigins.Calculation },
QuantityInfo = new QuantityInfo(new[] { simulationName, "Comp", "Liver", "Cell", "Concentration" }, QuantityType.Drug)
};
return data;
}
static DomainHelperForSpecs()
{
TimeDimension.AddUnit(new Unit("seconds", 1 / 60.0, 0.0));
AmountDimension.AddUnit(new Unit("mmol", 1000.0, 0.0));
}
public static IDimension AmountDimension { get; } = new Dimension(new BaseDimensionRepresentation { AmountExponent = 1 }, Constants.Dimension.MOLAR_AMOUNT, "µmol");
public static ParameterValue ParameterValue { get; } = new ParameterValue { Name = "_name", Value = 1.0, Formula = null, Dimension = AmountDimension };
public static IDimension ConcentrationDimension { get; } = new Dimension(new BaseDimensionRepresentation { LengthExponent = -3, MassExponent = 1, TimeExponent = -1 }, Constants.Dimension.MOLAR_CONCENTRATION, "µmol/l");
public static IDimension FractionDimension { get; } = new Dimension(new BaseDimensionRepresentation(), Constants.Dimension.FRACTION, "");
public static IDimension ConcentrationPerTimeDimension { get; } = new Dimension(new BaseDimensionRepresentation { LengthExponent = -3, AmountExponent = 1, TimeExponent = -1 }, Constants.Dimension.MOLAR_CONCENTRATION_PER_TIME, "µmol/l/min");
public static IDimension AmountPerTimeDimension { get; } = new Dimension(new BaseDimensionRepresentation { AmountExponent = 1, TimeExponent = -1 }, Constants.Dimension.AMOUNT_PER_TIME, "µmol/min");
public static IDimension TimeDimension { get; } = new Dimension(new BaseDimensionRepresentation { TimeExponent = 1 }, Constants.Dimension.TIME, "min");
public static QuantityValueInSimulationChangeTracker QuantityValueChangeTracker(IEventPublisher eventPublisher)
{
var entityPathResolver = new EntityPathResolver(new ObjectPathFactoryForSpecs());
return new QuantityValueInSimulationChangeTracker(new QuantityToOriginalQuantityValueMapper(entityPathResolver), eventPublisher);
}
public static DataRepository ObservedData(string id = "TestData", IDimension timeDimension = null, IDimension concentrationDimension = null, string obsDataColumnName = null)
{
var observedData = new DataRepository(id).WithName(id);
var baseGrid = new BaseGrid("Time", timeDimension ?? TimeDimension)
{
Values = new[] { 1.0f, 2.0f, 3.0f }
};
observedData.Add(baseGrid);
var data = ConcentrationColumnForObservedData(baseGrid, concentrationDimension, obsDataColumnName);
observedData.Add(data);
return observedData;
}
public static DataColumn ConcentrationColumnForObservedData(BaseGrid baseGrid, IDimension concentrationDimension = null, string obsDataColumnName = null)
{
var data = new DataColumn(obsDataColumnName ?? "Col", concentrationDimension ?? ConcentrationDimension, baseGrid)
{
Values = new[] { 10f, 20f, 30f },
DataInfo = { Origin = ColumnOrigins.Observation }
};
return data;
}
public static IParameter ConstantParameterWithValue(double value = 10, bool isDefault = false, bool visible = true)
{
var parameter = new Parameter
{
Visible = visible,
Dimension = AmountDimension,
IsFixedValue = true,
IsDefault = isDefault,
Formula = new ConstantFormula(value).WithId("constantFormulaId")
};
return parameter;
}
public static MoBiProject NewProject()
{
return new MoBiProject { SimulationSettings = new SimulationSettings() };
}
}
}