/**
   * This method finds for each regular angstroem parameter a PAIR of models which can be used for a
   * weighted sum (interpolation). The method represents the breadboard IDL routine
   * 'find_model_pairs_for_angstroem_interpolation'.
   *
   * @param angArray - array of Angstroem coefficients from aerosol model table
   * @param nAng - number of Ang coeffs
   * @return AngstroemParameters[] - the model pairs
   */
  public AngstroemParameters[] getAngstroemParameters(float[] angArray, int nAng) {
    final float[] minMaxVector = AerosolHelpers.getMinMaxVector(angArray, nAng);
    AngstroemParameters[] angstroemParameters = new AngstroemParameters[minMaxVector.length];

    for (int i = 0; i < minMaxVector.length; i++) {
      int lowerIndex =
          AerosolHelpers.getNearestLowerValueIndexInFloatArray(minMaxVector[i], angArray);
      angstroemParameters[i] = new AngstroemParameters();
      angstroemParameters[i].setIndexPairs(0, lowerIndex);
      int higherIndex =
          AerosolHelpers.getNearestHigherValueIndexInFloatArray(minMaxVector[i], angArray);
      angstroemParameters[i].setIndexPairs(1, higherIndex);
      angstroemParameters[i].setValue(minMaxVector[i]);
    }

    for (int i = 0; i < minMaxVector.length; i++) {
      float lowerAng = angArray[angstroemParameters[i].getIndexPairs()[0]];
      float higherAng = angArray[angstroemParameters[i].getIndexPairs()[1]];

      float distance = lowerAng - higherAng;
      if (Math.abs(distance) > 0.01) {
        double wgt0 = 1.0 - (lowerAng - minMaxVector[i]) / distance;
        angstroemParameters[i].setWeightPairs(0, wgt0);
        double wgt1 = 1.0 - (minMaxVector[i] - higherAng) / distance;
        angstroemParameters[i].setWeightPairs(1, wgt1);
      } else {
        angstroemParameters[i].setWeightPairs(0, 1.0);
        angstroemParameters[i].setWeightPairs(1, 0.0);
      }
    }

    return angstroemParameters;
  }