RangeActionSetpointResultImpl.java
/*
* Copyright (c) 2021, 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/.
*/
package com.powsybl.openrao.searchtreerao.result.impl;
import com.powsybl.openrao.commons.OpenRaoException;
import com.powsybl.openrao.data.crac.api.State;
import com.powsybl.openrao.data.crac.api.rangeaction.PstRangeAction;
import com.powsybl.openrao.data.crac.api.rangeaction.RangeAction;
import com.powsybl.openrao.searchtreerao.result.api.RangeActionActivationResult;
import com.powsybl.openrao.searchtreerao.result.api.RangeActionSetpointResult;
import com.powsybl.iidm.network.Network;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.function.Function;
import java.util.stream.Collectors;
import static java.lang.String.format;
/**
* @author Baptiste Seguinot {@literal <joris.mancini at rte-france.com>}
*/
public class RangeActionSetpointResultImpl implements RangeActionSetpointResult {
private final Map<RangeAction<?>, Double> setPoints;
public RangeActionSetpointResultImpl(Map<RangeAction<?>, Double> setPoints) {
this.setPoints = setPoints;
}
@Override
public Set<RangeAction<?>> getRangeActions() {
return setPoints.keySet();
}
@Override
public double getSetpoint(RangeAction<?> rangeAction) {
if (!setPoints.containsKey(rangeAction)) {
throw new OpenRaoException(format("range action %s is not present in the result", rangeAction.getName()));
}
return setPoints.get(rangeAction);
}
@Override
public int getTap(PstRangeAction pstRangeAction) {
return pstRangeAction.convertAngleToTap(getSetpoint(pstRangeAction));
}
public static RangeActionSetpointResult buildWithSetpointsFromNetwork(Network network, Set<RangeAction<?>> rangeActions) {
return new RangeActionSetpointResultImpl(rangeActions.stream()
.collect(Collectors.toMap(Function.identity(), rangeAction -> rangeAction.getCurrentSetpoint(network))));
}
public static RangeActionSetpointResult buildFromActivationOfRangeActionAtState(RangeActionActivationResult raar, State state) {
Map<RangeAction<?>, Double> setPoints = new HashMap<>();
raar.getRangeActions().forEach(ra -> setPoints.put(ra, raar.getOptimizedSetpoint(ra, state)));
return new RangeActionSetpointResultImpl(setPoints);
}
}