Skip to content

Commit 6d459b4

Browse files
authored
Merge pull request #283 from HHS/dev
v4.4.0
2 parents c989451 + 17ce66d commit 6d459b4

File tree

224 files changed

+10773
-5702
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

224 files changed

+10773
-5702
lines changed

lessons/lesson-08/src/main/java/gov/hhs/aspr/ms/gcm/lessons/plugins/disease/DiseasePluginData.java

+29-4
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,16 @@ private static class Data {
1515

1616
private double symptomaticDays;
1717

18+
private boolean locked;
19+
1820
private Data() {
1921
}
2022

2123
private Data(final Data data) {
2224
r0 = data.r0;
2325
asymptomaticDays = data.asymptomaticDays;
2426
symptomaticDays = data.symptomaticDays;
27+
locked = data.locked;
2528
}
2629
/* end */
2730

@@ -72,25 +75,47 @@ private Builder(final Data data) {
7275

7376
@Override
7477
public DiseasePluginData build() {
75-
76-
return new DiseasePluginData(new Data(data));
78+
if (!data.locked) {
79+
validateData();
80+
}
81+
ensureImmutability();
82+
return new DiseasePluginData(data);
7783

7884
}
7985

8086
public Builder setAsymptomaticDays(final double asymptomaticDays) {
87+
ensureDataMutability();
8188
data.asymptomaticDays = asymptomaticDays;
8289
return this;
8390
}
8491

8592
public Builder setR0(final double r0) {
93+
ensureDataMutability();
8694
data.r0 = r0;
8795
return this;
8896
}
8997

9098
public Builder setSymptomaticDays(final double symptomaticDays) {
99+
ensureDataMutability();
91100
data.symptomaticDays = symptomaticDays;
92101
return this;
93102
}
103+
104+
private void ensureDataMutability() {
105+
if (data.locked) {
106+
data = new Data(data);
107+
data.locked = false;
108+
}
109+
}
110+
111+
private void ensureImmutability() {
112+
if (!data.locked) {
113+
data.locked = true;
114+
}
115+
}
116+
117+
private void validateData() {
118+
}
94119
}
95120

96121
public static Builder builder() {
@@ -123,8 +148,8 @@ public double getSymptomaticDays() {
123148

124149
/* start code_ref=plugin_data_clone_builder|code_cap=The disease plugin data creates a copy of its data and places it in the returned plugin data builder.*/
125150
@Override
126-
public PluginDataBuilder getCloneBuilder() {
127-
return new Builder(new Data(data));
151+
public PluginDataBuilder toBuilder() {
152+
return new Builder(data);
128153
}
129154
/* end */
130155

lessons/lesson-08/src/main/java/gov/hhs/aspr/ms/gcm/lessons/plugins/policy/PolicyPluginData.java

+27-3
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,15 @@ private static class Data {
1111

1212
private double schoolClosingInfectionRate;
1313
private boolean distributeVaccineLocally;
14+
private boolean locked;
1415

1516
private Data() {
1617
}
1718

1819
private Data(final Data data) {
1920
schoolClosingInfectionRate = data.schoolClosingInfectionRate;
2021
distributeVaccineLocally = data.distributeVaccineLocally;
22+
locked = data.locked;
2123
}
2224

2325
@Override
@@ -61,19 +63,41 @@ private Builder(final Data data) {
6163

6264
@Override
6365
public PolicyPluginData build() {
64-
return new PolicyPluginData(new Data(data));
66+
if (!data.locked) {
67+
validateData();
68+
}
69+
ensureImmutability();
70+
return new PolicyPluginData(data);
6571
}
6672

6773
public Builder setSchoolClosingInfectionRate(double schoolClosingInfectionRate) {
74+
ensureDataMutability();
6875
data.schoolClosingInfectionRate = schoolClosingInfectionRate;
6976
return this;
7077
}
7178

7279
public Builder setDistributeVaccineLocally(boolean distributeVaccineLocally) {
80+
ensureDataMutability();
7381
data.distributeVaccineLocally = distributeVaccineLocally;
7482
return this;
7583
}
7684

85+
private void ensureDataMutability() {
86+
if (data.locked) {
87+
data = new Data(data);
88+
data.locked = false;
89+
}
90+
}
91+
92+
private void ensureImmutability() {
93+
if (!data.locked) {
94+
data.locked = true;
95+
}
96+
}
97+
98+
private void validateData() {
99+
}
100+
77101
}
78102

79103
public static Builder builder() {
@@ -95,8 +119,8 @@ public boolean isDistributeVaccineLocally() {
95119
}
96120

97121
@Override
98-
public PluginDataBuilder getCloneBuilder() {
99-
return new Builder(new Data(data));
122+
public PluginDataBuilder toBuilder() {
123+
return new Builder(data);
100124
}
101125

102126
@Override

lessons/lesson-09/src/main/java/gov/hhs/aspr/ms/gcm/lessons/Example_9_B.java

+5-3
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import gov.hhs.aspr.ms.gcm.simulation.nucleus.Dimension;
1111
import gov.hhs.aspr.ms.gcm.simulation.nucleus.Experiment;
1212
import gov.hhs.aspr.ms.gcm.simulation.nucleus.FunctionalDimension;
13+
import gov.hhs.aspr.ms.gcm.simulation.nucleus.FunctionalDimensionData;
1314
import gov.hhs.aspr.ms.gcm.simulation.nucleus.Plugin;
1415

1516
public final class Example_9_B {
@@ -44,8 +45,8 @@ public static void main(String[] args) {
4445

4546
Plugin modelPlugin = ModelPlugin.getModelPlugin();
4647

47-
Dimension dimension = FunctionalDimension.builder()//
48-
.addLevel((context) -> {
48+
FunctionalDimensionData dimensionData = FunctionalDimensionData.builder()//
49+
.addValue("Level_0", (context) -> {
4950
DiseasePluginData.Builder builder = context.getPluginDataBuilder(DiseasePluginData.Builder.class);
5051
double r0 = 2.5;
5152
builder.setR0(r0);
@@ -54,7 +55,7 @@ public static void main(String[] args) {
5455
return result;
5556
})//
5657

57-
.addLevel((context) -> {
58+
.addValue("Level_1", (context) -> {
5859
DiseasePluginData.Builder builder = context.getPluginDataBuilder(DiseasePluginData.Builder.class);
5960
double r0 = 2.0;
6061
builder.setR0(r0);
@@ -66,6 +67,7 @@ public static void main(String[] args) {
6667
.addMetaDatum("r0")//
6768

6869
.build();
70+
Dimension dimension = new FunctionalDimension(dimensionData);
6971

7072
Experiment.builder()//
7173
.addPlugin(diseasePlugin)//

lessons/lesson-09/src/main/java/gov/hhs/aspr/ms/gcm/lessons/Example_9_C.java

+7-4
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import gov.hhs.aspr.ms.gcm.simulation.nucleus.Dimension;
1212
import gov.hhs.aspr.ms.gcm.simulation.nucleus.Experiment;
1313
import gov.hhs.aspr.ms.gcm.simulation.nucleus.FunctionalDimension;
14+
import gov.hhs.aspr.ms.gcm.simulation.nucleus.FunctionalDimensionData;
1415
import gov.hhs.aspr.ms.gcm.simulation.nucleus.Plugin;
1516

1617
/* start code_ref=experiments_example_steamlined_dimension|code_cap=Example 9 C improves on the creation of the R0 dimension.*/
@@ -35,7 +36,7 @@ private static PolicyPluginData getPolicyPluginData() {
3536
}
3637

3738
private static Dimension getDimension() {
38-
FunctionalDimension.Builder builder = FunctionalDimension.builder();//
39+
FunctionalDimensionData.Builder builder = FunctionalDimensionData.builder();//
3940

4041
List<Double> r0Values = new ArrayList<>();
4142
r0Values.add(0.5);
@@ -45,8 +46,9 @@ private static Dimension getDimension() {
4546
r0Values.add(2.0);
4647
r0Values.add(2.5);
4748

48-
for (Double r0 : r0Values) {
49-
builder.addLevel((context) -> {
49+
for (int i = 0; i < r0Values.size(); i++) {
50+
Double r0 = r0Values.get(i);
51+
builder.addValue("Level_" + i, (context) -> {
5052
DiseasePluginData.Builder pluginDataBuilder = context
5153
.getPluginDataBuilder(DiseasePluginData.Builder.class);
5254
pluginDataBuilder.setR0(r0);
@@ -57,7 +59,8 @@ private static Dimension getDimension() {
5759
}
5860
builder.addMetaDatum("r0");//
5961

60-
return builder.build();
62+
FunctionalDimensionData dimensionData = builder.build();
63+
return new FunctionalDimension(dimensionData);
6164
}
6265
/* end */
6366

lessons/lesson-09/src/main/java/gov/hhs/aspr/ms/gcm/lessons/Example_9_D.java

+18-10
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import gov.hhs.aspr.ms.gcm.simulation.nucleus.Dimension;
1212
import gov.hhs.aspr.ms.gcm.simulation.nucleus.Experiment;
1313
import gov.hhs.aspr.ms.gcm.simulation.nucleus.FunctionalDimension;
14+
import gov.hhs.aspr.ms.gcm.simulation.nucleus.FunctionalDimensionData;
1415
import gov.hhs.aspr.ms.gcm.simulation.nucleus.Plugin;
1516

1617
public final class Example_9_D {
@@ -35,32 +36,35 @@ private static PolicyPluginData getPolicyPluginData() {
3536

3637
private static Dimension getR0Dimension() {
3738

38-
FunctionalDimension.Builder builder = FunctionalDimension.builder();//
39+
FunctionalDimensionData.Builder builder = FunctionalDimensionData.builder();//
3940

4041
List<Double> r0Values = new ArrayList<>();
4142
r0Values.add(1.5);
4243
r0Values.add(2.0);
4344
r0Values.add(2.5);
4445

45-
for (Double r0 : r0Values) {
46-
builder.addLevel((context) -> {
46+
for (int i = 0; i < r0Values.size(); i++) {
47+
Double r0 = r0Values.get(i);
48+
builder.addValue("Level_" + i, (context) -> {
4749
DiseasePluginData.Builder pluginDataBuilder = context
4850
.getPluginDataBuilder(DiseasePluginData.Builder.class);
4951
pluginDataBuilder.setR0(r0);
5052
ArrayList<String> result = new ArrayList<>();
5153
result.add(Double.toString(r0));
5254
return result;
5355
});//
54-
}
56+
}
57+
5558
builder.addMetaDatum("r0");//
5659

57-
return builder.build();
60+
FunctionalDimensionData dimensionData = builder.build();
61+
return new FunctionalDimension(dimensionData);
5862

5963
}
6064

6165
/* start code_ref=experiements_policy_dimension|code_cap=A dimension representing school related policies is added. Note that this dimension has four levels and covers two policies.*/
6266
private static Dimension getPolicyDimension() {
63-
FunctionalDimension.Builder builder = FunctionalDimension.builder();//
67+
FunctionalDimensionData.Builder builder = FunctionalDimensionData.builder();//
6468

6569
List<Double> schoolClosingInfectionRates = new ArrayList<>();
6670
schoolClosingInfectionRates.add(0.05);
@@ -70,9 +74,11 @@ private static Dimension getPolicyDimension() {
7074
localVaccineDistributionValues.add(false);
7175
localVaccineDistributionValues.add(true);
7276

73-
for (Boolean localVaccineDistribution : localVaccineDistributionValues) {
74-
for (Double schoolClosingInfectionRate : schoolClosingInfectionRates) {
75-
builder.addLevel((context) -> {
77+
for (int i = 0; i < localVaccineDistributionValues.size(); i++) {
78+
Boolean localVaccineDistribution = localVaccineDistributionValues.get(i);
79+
for (int j = 0; j < schoolClosingInfectionRates.size(); j++) {
80+
Double schoolClosingInfectionRate = schoolClosingInfectionRates.get(j);
81+
builder.addValue("Level_" + i + j, (context) -> {
7682
PolicyPluginData.Builder pluginDataBuilder = context
7783
.getPluginDataBuilder(PolicyPluginData.Builder.class);
7884
pluginDataBuilder.setSchoolClosingInfectionRate(schoolClosingInfectionRate);
@@ -85,10 +91,12 @@ private static Dimension getPolicyDimension() {
8591
});//
8692
}
8793
}
94+
8895
builder.addMetaDatum("school_closing_infection_rate");//
8996
builder.addMetaDatum("distribute_vaccine_locally");//
9097

91-
return builder.build();
98+
FunctionalDimensionData dimensionData = builder.build();
99+
return new FunctionalDimension(dimensionData);
92100
}
93101
/* end */
94102

lessons/lesson-09/src/main/java/gov/hhs/aspr/ms/gcm/lessons/Example_9_E.java

+19-11
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import gov.hhs.aspr.ms.gcm.simulation.nucleus.Experiment;
1313
import gov.hhs.aspr.ms.gcm.simulation.nucleus.ExperimentParameterData;
1414
import gov.hhs.aspr.ms.gcm.simulation.nucleus.FunctionalDimension;
15+
import gov.hhs.aspr.ms.gcm.simulation.nucleus.FunctionalDimensionData;
1516
import gov.hhs.aspr.ms.gcm.simulation.nucleus.Plugin;
1617

1718
public final class Example_9_E {
@@ -36,15 +37,16 @@ private static PolicyPluginData getPolicyPluginData() {
3637

3738
private static Dimension getR0Dimension() {
3839

39-
FunctionalDimension.Builder builder = FunctionalDimension.builder();//
40+
FunctionalDimensionData.Builder builder = FunctionalDimensionData.builder();//
4041

4142
List<Double> r0Values = new ArrayList<>();
4243
r0Values.add(1.5);
4344
r0Values.add(2.0);
4445
r0Values.add(2.5);
4546

46-
for (Double r0 : r0Values) {
47-
builder.addLevel((context) -> {
47+
for (int i = 0; i < r0Values.size(); i++) {
48+
Double r0 = r0Values.get(i);
49+
builder.addValue("Level_" + i, (context) -> {
4850
DiseasePluginData.Builder pluginDataBuilder = context
4951
.getPluginDataBuilder(DiseasePluginData.Builder.class);
5052
pluginDataBuilder.setR0(r0);
@@ -53,14 +55,15 @@ private static Dimension getR0Dimension() {
5355
return result;
5456
});//
5557
}
56-
builder.addMetaDatum("r0");//
5758

58-
return builder.build();
59+
builder.addMetaDatum("r0");//
5960

61+
FunctionalDimensionData functionalDimensionData = builder.build();
62+
return new FunctionalDimension(functionalDimensionData);
6063
}
6164

6265
private static Dimension getPolicyDimension() {
63-
FunctionalDimension.Builder builder = FunctionalDimension.builder();//
66+
FunctionalDimensionData.Builder builder = FunctionalDimensionData.builder();//
6467

6568
List<Double> schoolClosingInfectionRates = new ArrayList<>();
6669
schoolClosingInfectionRates.add(0.05);
@@ -70,9 +73,13 @@ private static Dimension getPolicyDimension() {
7073
localVaccineDistributionValues.add(false);
7174
localVaccineDistributionValues.add(true);
7275

73-
for (Boolean localVaccineDistribution : localVaccineDistributionValues) {
74-
for (Double schoolClosingInfectionRate : schoolClosingInfectionRates) {
75-
builder.addLevel((context) -> {
76+
for (int i = 0; i < localVaccineDistributionValues.size(); i++) {
77+
Boolean localVaccineDistribution = localVaccineDistributionValues.get(i);
78+
79+
for (int j = 0; j < schoolClosingInfectionRates.size(); j++) {
80+
Double schoolClosingInfectionRate = schoolClosingInfectionRates.get(j);
81+
82+
builder.addValue("Level_" + i + j, (context) -> {
7683
PolicyPluginData.Builder pluginDataBuilder = context
7784
.getPluginDataBuilder(PolicyPluginData.Builder.class);
7885
pluginDataBuilder.setSchoolClosingInfectionRate(schoolClosingInfectionRate);
@@ -85,11 +92,12 @@ private static Dimension getPolicyDimension() {
8592
});//
8693
}
8794
}
95+
8896
builder.addMetaDatum("school_closing_infection_rate");//
8997
builder.addMetaDatum("distribute_vaccine_locally");//
9098

91-
return builder.build();
92-
99+
FunctionalDimensionData functionalDimensionData = builder.build();
100+
return new FunctionalDimension(functionalDimensionData);
93101
}
94102

95103
/* start code_ref=experiements_example_9_E|code_cap=Executing the 12 scenarios of the previous experiment with four threads.*/

0 commit comments

Comments
 (0)