MetrixPostProcessingTimeSeries.java
/*
* Copyright (c) 2023, RTE (http://www.rte-france.com)
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
* SPDX-License-Identifier: MPL-2.0
*/
package com.powsybl.metrix.integration;
import com.powsybl.metrix.mapping.TimeSeriesMappingConfig;
import com.powsybl.timeseries.ReadOnlyTimeSeriesStore;
import com.powsybl.timeseries.TimeSeriesFilter;
import com.powsybl.timeseries.ast.NodeCalc;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
/**
* @author Marianne Funfrock {@literal <marianne.funfrock at rte-france.com>}
*/
public final class MetrixPostProcessingTimeSeries {
public static final String CURATIVE_PREFIX = "cur_";
public static final String PREVENTIVE_PREFIX = "pre_";
public static final String DOCTRINE_COSTS_ARE_NOT_PROPERLY_CONFIGURED = "{} doctrine costs are not properly configured";
private MetrixPostProcessingTimeSeries() {
}
public static List<String> findIdsToProcess(Set<String> allIds, Set<String> allTimeSeriesNames, String prefix) {
return allIds.stream().filter(id -> allTimeSeriesNames.stream().anyMatch(s -> s.startsWith(prefix + id))).toList();
}
/**
* Create branch, generator, load, losses calculated time series for postprocessing
* @param dslData metrix configuration
* @param mappingConfig mapping configuration
* @param store time series store containing metrix results
* @param nullableSchemaName schema name, otherwise null
*/
public static Map<String, NodeCalc> getPostProcessingTimeSeries(MetrixDslData dslData,
TimeSeriesMappingConfig mappingConfig,
ReadOnlyTimeSeriesStore store,
String nullableSchemaName) {
if (dslData == null || mappingConfig == null) {
return Collections.emptyMap();
}
Set<String> allTimeSeriesNames = store.getTimeSeriesNames(new TimeSeriesFilter().setIncludeDependencies(false));
// Branch
MetrixBranchPostProcessingTimeSeries branchProcessing = new MetrixBranchPostProcessingTimeSeries(dslData, mappingConfig, allTimeSeriesNames, nullableSchemaName);
// Initialize post-processing TimeSeries
Map<String, NodeCalc> postProcessingTimeSeries = new HashMap<>(branchProcessing.createPostProcessingTimeSeries());
// Generator
MetrixGeneratorPostProcessingTimeSeries generatorProcessing = new MetrixGeneratorPostProcessingTimeSeries(dslData, mappingConfig, allTimeSeriesNames, nullableSchemaName);
postProcessingTimeSeries.putAll(generatorProcessing.createPostProcessingTimeSeries());
// Load
MetrixLoadPostProcessingTimeSeries loadProcessing = new MetrixLoadPostProcessingTimeSeries(dslData, mappingConfig, allTimeSeriesNames, nullableSchemaName);
postProcessingTimeSeries.putAll(loadProcessing.createPostProcessingTimeSeries());
// Losses
MetrixLossesPostProcessingTimeSeries lossesProcessing = new MetrixLossesPostProcessingTimeSeries(mappingConfig, nullableSchemaName);
postProcessingTimeSeries.putAll(lossesProcessing.createPostProcessingTimeSeries());
return postProcessingTimeSeries;
}
}