Skip to content

Commit 89e364c

Browse files
ConsistencyChecker now skips test (3) when lookupBehavior does not need average entry
1 parent de7adc1 commit 89e364c

File tree

2 files changed

+29
-21
lines changed

2 files changed

+29
-21
lines changed

contribs/emissions/src/main/java/org/matsim/contrib/emissions/EmissionModule.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,7 @@ private void createLookupTables() {
183183

184184
if(emissionConfigGroup.getHbefaConsistencyChecker() == EmissionsConfigGroup.UseHbefaConsistencyChecker.check){
185185
logger.info("Checking consistency of hbefa-tables");
186-
HbefaConsistencyChecker.checkConsistency(avgHbefaWarmTable, detailedHbefaWarmTable, avgHbefaColdTable, detailedHbefaColdTable);
186+
HbefaConsistencyChecker.checkConsistency(emissionConfigGroup.getDetailedVsAverageLookupBehavior(), avgHbefaWarmTable, detailedHbefaWarmTable, avgHbefaColdTable, detailedHbefaColdTable);
187187
}
188188

189189
logger.info("leaving createLookupTables");

contribs/emissions/src/main/java/org/matsim/contrib/emissions/HbefaConsistencyChecker.java

Lines changed: 28 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -2,24 +2,25 @@
22

33

44
import com.google.common.collect.Iterables;
5+
import org.matsim.contrib.emissions.utils.EmissionsConfigGroup;
56

67
import javax.annotation.Nullable;
78
import java.util.*;
89

910
public class HbefaConsistencyChecker {
10-
1111
/**
1212
* Tests the read-in hbefa-maps and makes sure that: <br>
1313
* (1) Technology-column contains petrol or diesel <br>
1414
* (2) EmissionConcept contains neither petrol nor diesel <br>
15-
* (3) EmissionConcept and SizeClass contains "average" as fallback (used in technology-average-lookup) <br>
15+
* (3) EmissionConcept and SizeClass contains "average" as fallback (used in technology-average-lookup, skipped if not needed by lookup-behavior) <br>
1616
* (4) Average table contain only average entries in VehicleAttributes <br>
1717
*
1818
* Background of this consistency check is an error in the hbefa database, which causes the column names to be named wrong.
1919
*
2020
* @throws IllegalArgumentException with explanation, if one of the check listed above failed.
2121
*/
22-
static void checkConsistency(@Nullable Map<HbefaWarmEmissionFactorKey, HbefaWarmEmissionFactor> hbefaAvgWarm,
22+
static void checkConsistency(EmissionsConfigGroup.DetailedVsAverageLookupBehavior lookupBehavior,
23+
@Nullable Map<HbefaWarmEmissionFactorKey, HbefaWarmEmissionFactor> hbefaAvgWarm,
2324
@Nullable Map<HbefaWarmEmissionFactorKey, HbefaWarmEmissionFactor> hbefaDetWarm,
2425
@Nullable Map<HbefaColdEmissionFactorKey, HbefaColdEmissionFactor> hbefaAvgCold,
2526
@Nullable Map<HbefaColdEmissionFactorKey, HbefaColdEmissionFactor> hbefaDetCold) throws IllegalArgumentException {
@@ -106,19 +107,23 @@ static void checkConsistency(@Nullable Map<HbefaWarmEmissionFactorKey, HbefaWarm
106107
"The first 5 entries of emission-concept-column are: " + Iterables.limit(emConcepts, 5));
107108

108109
// Test (3)
109-
if( !emConcepts.contains("average") )
110-
throw new IllegalArgumentException("""
110+
if( lookupBehavior != EmissionsConfigGroup.DetailedVsAverageLookupBehavior.onlyTryDetailedElseAbort &&
111+
lookupBehavior != EmissionsConfigGroup.DetailedVsAverageLookupBehavior.directlyTryAverageTable){
112+
if( !emConcepts.contains("average"))
113+
throw new IllegalArgumentException("""
111114
Emission-concept-column of warm detailed table does not contain average as key.\s
112115
This may cause problems with the lookup-behaviors "tryDetailedThenTechnologyAverageElseAbort" and\s
113116
"tryDetailedThenTechnologyAverageThenAverageTable". If you use one of these behaviors, make sure that an average entry exists!\s
114117
If you want to proceed without average values, you can deactivate the ConsistencyCheck with EmissionsConfigGroup.setHbefaConsistencyChecker()\s""");
115118

116-
if( !sizeClass.contains("average") )
117-
throw new IllegalArgumentException("""
119+
if( !sizeClass.contains("average"))
120+
throw new IllegalArgumentException("""
118121
size-class-column of warm detailed table does not contain average as key.\s
119122
This may cause problems with the lookup-behaviors "tryDetailedThenTechnologyAverageElseAbort" and\s
120123
"tryDetailedThenTechnologyAverageThenAverageTable". If you use one of these behaviors, make sure that an average entry exists!\s
121124
If you want to proceed without average values, you can deactivate the ConsistencyCheck with EmissionsConfigGroup.setHbefaConsistencyChecker()\s""");
125+
}
126+
122127

123128
technologies.clear();
124129
emConcepts.clear();
@@ -142,19 +147,22 @@ static void checkConsistency(@Nullable Map<HbefaWarmEmissionFactorKey, HbefaWarm
142147
throw new CorruptedHbefaTableException("Detailed cold table contains diesel or petrol key in the emission-concept-column. Unless you specifically put them in, you are probably using a corrupted hbefa table!");
143148

144149
// Test (3)
145-
if( !emConcepts.contains("average") )
146-
throw new IllegalArgumentException("""
147-
Emission-concept-column of warm detailed table does not contain average as key.\s
148-
This may cause problems with the lookup-behaviors "tryDetailedThenTechnologyAverageElseAbort" and\s
149-
"tryDetailedThenTechnologyAverageThenAverageTable". If you use one of these behaviors, make sure that an average entry exists!\s
150-
If you want to proceed without average values, you can deactivate the ConsistencyCheck with EmissionsConfigGroup.setHbefaConsistencyChecker()""");
151-
152-
if( !sizeClass.contains("average") )
153-
throw new IllegalArgumentException("""
154-
size-class-column of warm detailed table does not contain average as key.\s
155-
This may cause problems with the lookup-behaviors "tryDetailedThenTechnologyAverageElseAbort" and\s
156-
"tryDetailedThenTechnologyAverageThenAverageTable". If you use one of these behaviors, make sure that an average entry exists!\s
157-
If you want to proceed without average values, you can deactivate the ConsistencyCheck with EmissionsConfigGroup.setHbefaConsistencyChecker()""");
150+
if( lookupBehavior != EmissionsConfigGroup.DetailedVsAverageLookupBehavior.onlyTryDetailedElseAbort &&
151+
lookupBehavior != EmissionsConfigGroup.DetailedVsAverageLookupBehavior.directlyTryAverageTable) {
152+
if ( !emConcepts.contains("average"))
153+
throw new IllegalArgumentException("""
154+
Emission-concept-column of warm detailed table does not contain average as key.\s
155+
This may cause problems with the lookup-behaviors "tryDetailedThenTechnologyAverageElseAbort" and\s
156+
"tryDetailedThenTechnologyAverageThenAverageTable". If you use one of these behaviors, make sure that an average entry exists!\s
157+
If you want to proceed without average values, you can deactivate the ConsistencyCheck with EmissionsConfigGroup.setHbefaConsistencyChecker()""");
158+
159+
if ( !sizeClass.contains("average"))
160+
throw new IllegalArgumentException("""
161+
size-class-column of warm detailed table does not contain average as key.\s
162+
This may cause problems with the lookup-behaviors "tryDetailedThenTechnologyAverageElseAbort" and\s
163+
"tryDetailedThenTechnologyAverageThenAverageTable". If you use one of these behaviors, make sure that an average entry exists!\s
164+
If you want to proceed without average values, you can deactivate the ConsistencyCheck with EmissionsConfigGroup.setHbefaConsistencyChecker()""");
165+
}
158166

159167
technologies.clear();
160168
emConcepts.clear();

0 commit comments

Comments
 (0)