NOTICE: This version of the NSF Unidata web site (archive.unidata.ucar.edu) is no longer being updated.
Current content can be found at unidata.ucar.edu.

To learn about what's going on, see About the Archive Site.

corrupted Low-Hi values in SampledSet

Hi,

I got a NullPointerException during interpolation (with the evaluate method)
and finally found out that the error was due to a bad LowX value in my
Irregular1DSet. The problem seems to be related to the use of extreme values
(e.g. Float.MIN_VALUES, Float.MAX_VALUE) as samples for the set but doesn't
happen in a consistent manner.  Please find below a small program which
illustrates the problem:
1- method test1() provides an example for which the Low value gets corrupted
2- method test2() provides a similar example but for which the Low and Hi
values are correct
3- method test3() generates the NullPointerException

The output of the program is:

Test 1: low=-1124.069   hi=3.4028235E38
        aSet is  visad.Irregular1DSet: Dimension = 1 Length = 4
   Dimension 0: Range = -1124.069 to 3.4028235E38

Test 2: low=1.4E-45   hi=3.4028235E38
        aSet is  visad.Irregular1DSet: Dimension = 1 Length = 4
   Dimension 0: Range = 1.4E-45 to 3.4028235E38

Test 3: interField.evaluate(-2000.0f)
java.lang.NullPointerException
        at visad.Irregular1DSet.valueToInterp(Irregular1DSet.java:127)
        at visad.FlatField.resample(FlatField.java:3446)
        at visad.FunctionImpl.evaluate(FunctionImpl.java:169)
        at visad.FunctionImpl.evaluate(FunctionImpl.java:128)
        at TestIrregular1DSet.test3(TestIrregular1DSet.java:51)
        at TestIrregular1DSet.main(TestIrregular1DSet.java:60)
Exception in thread "main" 
Process TestIrregular1DSet exited abnormally with code 1


I got the same error with jdk1.1.3 and jdk1.1.4.  I also replaced
Float.MIN_VALUE by Float.NEGATIVE_INFINITE, no luck. I'm really not
convinced that the problem is in the VisAD logic.  Nevertheless, it would be
good to have a solution.

Thanks,
Sylvain


import java.rmi.RemoteException;
import visad.*;

public class TestIrregular1DSet {

  public TestIrregular1DSet() {
  }

  public void test1() throws VisADException {
         float[][] samples = new float[][] {
                {Float.MIN_VALUE, -1124.06897f, -1047.077026f,
Float.MAX_VALUE}};
         
         Irregular1DSet aSet = new Irregular1DSet(
                RealType.getRealType("x1", null, null), samples);
         float[] hi = aSet.getHi();
         float[] low = aSet.getLow();

         System.out.println("Test 1: low=" + low[0] + "   hi=" + hi[0]);
         System.out.println("        aSet is " + aSet.longString(" "));

  }

  public void test2() throws VisADException {
         float[][] samples = new float[][] {
                {Float.MIN_VALUE, 208.561829f, 326.168915f,
Float.MAX_VALUE}};       
         Irregular1DSet aSet = 
                new Irregular1DSet(RealType.getRealType("x2", null, null),
                samples);

         float[] hi = aSet.getHi();
         float[] low = aSet.getLow();
         System.out.println("Test 2: low=" + low[0] + "   hi=" + hi[0]);
         System.out.println("        aSet is " + aSet.longString(" "));
  }

  public void test3() throws VisADException, RemoteException {
         float[][] samples = new float[][] {
                {Float.MIN_VALUE, -1124.06897f, -1047.077026f,
Float.MAX_VALUE}};
         
         Irregular1DSet aSet = 
                new Irregular1DSet(RealType.getRealType("x1", null,
null),samples);

         RealType x1RT = RealType.getRealType("x1");
         FunctionType interFuncType = 
                new FunctionType(x1RT, RealType.getRealType("value", null,
null));
         FlatField interField = new FlatField(interFuncType, aSet);    
         interField.setSamples(new float[][] {
                {100.0f, 150.0f, 110.0f, 75.0f}});
         System.out.println("Test 3: interField.evaluate(-2000.0f)=");
         System.out.println(interField.evaluate(new Real(x1RT, -2000.0), 
        
Data.WEIGHTED_AVERAGE, 
                                                         Data.NO_ERRORS));
  }

  public static void main(String[] args) throws VisADException,
RemoteException {
         TestIrregular1DSet aTest = new TestIrregular1DSet();
         aTest.test1();
         aTest.test2();
         aTest.test3();   
  }
 
}


===
Sylvain Létourneau 
Research Officer
National Research Council of Canada
1500 Montreal road, Build. M-50, Rm 367A
Ottawa, Ontario Canada K1A 0R6 
Phone:(613) 990-1178 
Fax:(613) 952-0215 


  • 2002 messages navigation, sorted by:
    1. Thread
    2. Subject
    3. Author
    4. Date
    5. ↑ Table Of Contents
  • Search the visad archives: