private float[] doSynAOStep1(
      float aatsrViewElevationNadir,
      float aatsrViewElevationFward,
      float aatsrSunElevationNadir,
      float aatsrSunElevationFward,
      float aatsrAzimuthDifferenceNadir,
      float aatsrAzimuthDifferenceFward,
      float merisViewZenith,
      float merisSunZenith,
      float merisAzimuthDifference,
      float surfacePressure,
      float ws) {

    float[] glint = new float[nWvl];
    float[] iSun = new float[nWvl];
    float[] iView = new float[nWvl];
    float[] iAzi = new float[nWvl];
    for (int j = 0; j < nWvl; j++) {
      // todo: clean up cases for finally unused channels
      switch (wvlIndex[j]) {
        case 0:
        case 1:
          iSun[j] = merisSunZenith;
          iView[j] = merisViewZenith;
          iAzi[j] = (float) (180.0 - merisAzimuthDifference);
          break;
        case 2:
        case 3:
          iSun[j] = (float) (90.0 - aatsrSunElevationNadir);
          iView[j] = (float) (90.0 - aatsrViewElevationNadir);
          iAzi[j] = (float) (180.0 - aatsrAzimuthDifferenceNadir);
          break;
        case 4:
        case 5:
          iSun[j] = (float) (90.0 - aatsrSunElevationFward);
          iView[j] = (float) (90.0 - aatsrViewElevationFward);
          iAzi[j] = (float) (180.0 - aatsrAzimuthDifferenceFward);
          break;
        default:
          break;
      }
      glint[j] =
          GlintRetrieval.calcGlintAnalytical(
              iSun[j],
              iView[j],
              iAzi[j],
              SynergyConstants.refractiveIndex[wvlIndex[j]],
              ws,
              SynergyConstants.rhoFoam[wvlIndex[j]]);
    }

    vectorTauLutHigh = AerosolHelpers.interpolateArray(vectorTauLut, nTau);

    for (int i = 0; i < nMod; i++) {
      for (int j = 0; j < nWvl; j++) {
        // todo: clean up cases for finally unused channels

        for (int k = 0; k < nTauLut; k++) {
          double[] interpol5DLowInput =
              new double[] {iAzi[j], iView[j], iSun[j], ws, vectorTauLut[k], surfacePressure};

          // interpol5DResultLow = 'minilut' in breadboard:
          //  minilut=fltarr(nmod,nwvl,ntau)
          interpol5DResultLow[i][j][k] = // 'minilut' in breadboard
              aerosolLookupTables[i][j].getValue(interpol5DLowInput);
        }
        //  interpol5DResultLow --> interpol5DResultHigh
        interpol5DResultHigh[i][j] =
            AerosolHelpers.interpolateArray(interpol5DResultLow[i][j], nTau);
        for (int k = 0; k < nTau; k++) {
          interpol5DResultHigh[i][j][k] += glint[j];
        }
      }
    }
    return glint;
  }