+ @SuppressWarnings("checkstyle:VariableDeclarationUsageDistance")
+ public double retrieveOSNR() {
+ // sum of 1 over the span OSNRs (linear units)
+ double sum = 0;
+ // link OSNR, in dB
+ double linkOsnrDb;
+ // link OSNR, in dB
+ double linkOsnrLu;
+ // span OSNR, in dB
+ double spanOsnrDb;
+ // span OSNR, in linear units
+ double spanOsnrLu;
+ // default amplifier noise value, in dB
+ double ampNoise = 5.5;
+ // fiber span measured loss, in dB
+ double loss;
+ // launch power, in dB
+ double power;
+ double constantA = 38.97293;
+ double constantB = 0.72782;
+ double constantC = -0.532331;
+ double constactD = -0.019549;
+ double upperBoundOSNR = 33;
+ double lowerBoundOSNR = 0.1;
+
+ if (omsAttributesSpan == null) {
+ // indicates no data or N/A
+ return 0L;
+ }
+ loss = omsAttributesSpan.getSpanlossCurrent().getValue().doubleValue();
+ switch (omsAttributesSpan.getLinkConcatenation().get(0).getFiberType()) {
+ case Smf:
+ power = 2;
+ break;
+
+ case Eleaf:
+ power = 1;
+ break;
+
+ case Oleaf:
+ power = 0;
+ break;
+
+ case Dsf:
+ power = 0;
+ break;
+
+ case Truewave:
+ power = 0;
+ break;
+
+ case Truewavec:
+ power = -1;
+ break;
+
+ case NzDsf:
+ power = 0;
+ break;
+
+ case Ull:
+ power = 0;
+ break;
+
+ default:
+ power = 0;
+ break;
+ }
+ spanOsnrDb = constantA + constantB * power + constantC * loss + constactD * power * loss;
+ if (spanOsnrDb > upperBoundOSNR) {
+ spanOsnrDb = upperBoundOSNR;
+ } else if (spanOsnrDb < lowerBoundOSNR) {
+ spanOsnrDb = lowerBoundOSNR;
+ }
+ spanOsnrLu = Math.pow(10, (spanOsnrDb / 10.0));
+ sum = PceConstraints.CONST_OSNR / spanOsnrLu;
+ linkOsnrLu = sum;
+ //link_OSNR_dB = 10 * Math.log10(1 / sum);
+ LOG.debug("In retrieveOSNR: link OSNR is {} dB", linkOsnrLu);
+ return linkOsnrLu;
+ }
+