import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.optical.channel.types.rev200529.FrequencyGHz;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.optical.channel.types.rev200529.FrequencyTHz;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.ServicePathInput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.optical.channel.types.rev211210.FrequencyGHz;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.optical.channel.types.rev211210.FrequencyTHz;
import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev181019.ModulationFormat;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev200529.available.freq.map.AvailFreqMaps;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev200529.available.freq.map.AvailFreqMapsBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev200529.available.freq.map.AvailFreqMapsKey;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.available.freq.map.AvailFreqMaps;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.available.freq.map.AvailFreqMapsBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.available.freq.map.AvailFreqMapsKey;
+import org.opendaylight.yangtools.yang.common.Decimal64;
import org.opendaylight.yangtools.yang.common.Uint16;
import org.opendaylight.yangtools.yang.common.Uint32;
import org.slf4j.Logger;
Arrays.fill(byteArray, (byte) GridConstant.AVAILABLE_SLOT_VALUE);
Map<AvailFreqMapsKey, AvailFreqMaps> waveMap = new HashMap<>();
AvailFreqMaps availFreqMaps = new AvailFreqMapsBuilder().setMapName(GridConstant.C_BAND)
- .setFreqMapGranularity(new FrequencyGHz(BigDecimal.valueOf(GridConstant.GRANULARITY)))
- .setStartEdgeFreq(new FrequencyTHz(BigDecimal.valueOf(GridConstant.START_EDGE_FREQUENCY)))
+ .setFreqMapGranularity(
+ new FrequencyGHz(Decimal64.valueOf(BigDecimal.valueOf(GridConstant.GRANULARITY))))
+ .setStartEdgeFreq(
+ new FrequencyTHz(Decimal64.valueOf(BigDecimal.valueOf(GridConstant.START_EDGE_FREQUENCY))))
.setEffectiveBits(Uint16.valueOf(GridConstant.EFFECTIVE_BITS))
.setFreqMap(byteArray)
.build();
/**
* Get the bit index for the frequency.
*
- * @param frequency BigDecimal
+ * @param atozMinFrequency BigDecimal
* @return the bit index of the frequency. Throw IllegalArgumentException if
* index not in range of 0 GridConstant.EFFECTIVE_BITS
*/
- public static int getIndexFromFrequency(BigDecimal frequency) {
- double nvalue = (frequency.doubleValue() - GridConstant.CENTRAL_FREQUENCY) * (1000 / GridConstant.GRANULARITY);
+ public static int getIndexFromFrequency(Decimal64 atozMinFrequency) {
+ double nvalue = (atozMinFrequency.doubleValue() - GridConstant.CENTRAL_FREQUENCY)
+ * (1000 / GridConstant.GRANULARITY);
int index = (int) Math.round(nvalue + 284);
if (index < 0 || index > GridConstant.EFFECTIVE_BITS) {
- throw new IllegalArgumentException("Frequency not in range " + frequency);
+ throw new IllegalArgumentException("Frequency not in range " + atozMinFrequency);
}
return index;
}
* @return central frequency in THz
*/
public static FrequencyTHz getCentralFrequency(BigDecimal minFrequency, BigDecimal maxFrequency) {
- return new FrequencyTHz(computeCentralFrequency(minFrequency, maxFrequency));
+ return new FrequencyTHz(Decimal64.valueOf(computeCentralFrequency(minFrequency, maxFrequency)));
}
* @param precision int
* @return central frequency in THz with precision
*/
- public static FrequencyTHz getCentralFrequencyWithPrecision(BigDecimal minFrequency,
+ public static org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev181019.FrequencyTHz
+ getCentralFrequencyWithPrecision(BigDecimal minFrequency,
BigDecimal maxFrequency, int precision) {
- return new FrequencyTHz(computeCentralFrequency(minFrequency, maxFrequency)
- .setScale(precision, RoundingMode.HALF_EVEN));
+ return new org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev181019.FrequencyTHz(
+ Decimal64.valueOf(computeCentralFrequency(minFrequency, maxFrequency)
+ .setScale(precision, RoundingMode.HALF_EVEN)));
}
return minFrequency.add(maxFrequency).divide(BigDecimal.valueOf(2));
}
+ /**
+ * Get the lower spectral index for the frequency.
+ * @param frequency BigDecimal
+ * @return the lower spectral index
+ */
+ public static int getLowerSpectralIndexFromFrequency(Decimal64 frequency) {
+ return getIndexFromFrequency(frequency) + 1;
+ }
+
+ /**
+ * Get the higher spectral index for the frequency.
+ * @param frequency BigDecimal
+ * @return the lower spectral index
+ */
+ public static int getHigherSpectralIndexFromFrequency(Decimal64 frequency) {
+ return getIndexFromFrequency(frequency);
+ }
+
+ /**
+ * Create spectrum information from service path input.
+ * @param input ServicePathInput
+ * @return SpectrumInformation
+ */
+ public static SpectrumInformation initSpectrumInformationFromServicePathInput(ServicePathInput input) {
+ if (input.getLowerSpectralSlotNumber() == null || input.getHigherSpectralSlotNumber() == null) {
+ LOG.error("low and higher spectral slot numbers cannot be null");
+ throw new IllegalArgumentException("low and higher spectral slot numbers cannot be null");
+ }
+ SpectrumInformation spectrumInformation = new SpectrumInformation();
+ spectrumInformation.setLowerSpectralSlotNumber(input.getLowerSpectralSlotNumber().intValue());
+ spectrumInformation.setHigherSpectralSlotNumber(input.getHigherSpectralSlotNumber().intValue());
+ if (input.getWaveNumber() != null) {
+ spectrumInformation.setWaveLength(input.getWaveNumber());
+ }
+ if (input.getMinFreq() != null) {
+ spectrumInformation.setMinFrequency(input.getMinFreq().getValue().decimalValue());
+ } else {
+ spectrumInformation.setMinFrequency(
+ GridUtils.getStartFrequencyFromIndex(input.getLowerSpectralSlotNumber().intValue() - 1));
+ }
+ if (input.getMaxFreq() != null) {
+ spectrumInformation.setMaxFrequency(input.getMaxFreq().getValue().decimalValue());
+ } else {
+ spectrumInformation.setMaxFrequency(
+ GridUtils.getStopFrequencyFromIndex(input.getHigherSpectralSlotNumber().intValue() - 1));
+ }
+ if (input.getCenterFreq() != null) {
+ spectrumInformation.setCenterFrequency(input.getCenterFreq().getValue().decimalValue());
+ } else {
+ spectrumInformation.setCenterFrequency(GridUtils.getCentralFrequency(spectrumInformation.getMinFrequency(),
+ spectrumInformation.getMaxFrequency()).getValue().decimalValue());
+ }
+ if (input.getNmcWidth() != null) {
+ spectrumInformation.setWidth(input.getNmcWidth().getValue().decimalValue()
+ .setScale(0, RoundingMode.CEILING));
+ }
+ if (input.getModulationFormat() != null) {
+ spectrumInformation.setModulationFormat(input.getModulationFormat());
+ }
+ return spectrumInformation;
+ }
+
+ /**
+ * Get the N value of range -284 +484 from frequency index array.
+ * @param frequencyIndex the frequency index f range 0 768.
+ * @return the N value
+ */
+ public static int getNFromFrequencyIndex(int frequencyIndex) {
+ return frequencyIndex - 284;
+ }
+
+ /**
+ * Convert the power from dBm to Watt.
+ * @param dbm power in dBm.
+ * @return outputpower in Watt.
+ */
+ public static BigDecimal convertDbmW(double dbm) {
+ return BigDecimal.valueOf(Math.pow(10, (dbm - 30) / 10));
+ }
+
}