@Test public void testNormalizer() throws Exception { ExtSed sed1 = new ExtSed("Sed1"); ExtSed sed2 = new ExtSed("Sed2"); ExtSed sed3 = new ExtSed("Sed3"); Segment seg1 = new Segment(); for (int k = 0; k < x1.length; k++) { y1[k] = y1[k] * 1e23; yerr1[k] = yerr1[k] * 1e23; } seg1.setFluxAxisValues(y1); seg1.setSpectralAxisValues(x1); seg1.setFluxAxisUnits("Jy"); seg1.setSpectralAxisUnits("Angstrom"); seg1.setDataValues(yerr1, UTYPE.FLUX_STAT_ERROR); sed1.addSegment(seg1); Segment seg2 = new Segment(); seg2.setFluxAxisValues(y2); seg2.setSpectralAxisValues(x2); seg2.setFluxAxisUnits("erg/s/cm2/Hz"); seg2.setSpectralAxisUnits("Angstrom"); seg2.setDataValues(yerr2, UTYPE.FLUX_STAT_ERROR); sed2.addSegment(seg2); Segment seg3 = new Segment(); seg3.setFluxAxisValues(y3); // convert the values in x3 to nm so I can test the unit conversions // too. for (int k = 0; k < x3.length; k++) { x3[k] = x3[k] * 0.1; } seg3.setSpectralAxisValues(x3); seg3.setFluxAxisUnits("erg/s/cm2/Hz"); seg3.setSpectralAxisUnits("nm"); seg3.setDataValues(yerr3, UTYPE.FLUX_STAT_ERROR); sed3.addSegment(seg3); SedStack stack = new SedStack("Stack"); stack.add(sed1); stack.add(sed2); stack.add(sed3); // setup the redshift configuration NormalizationConfiguration config = new NormalizationConfiguration(); config.setMultiply(true); config.setIntegrate(true); config.setStats("Average"); config.setXUnits("Angstrom"); config.setXmax(Double.POSITIVE_INFINITY); config.setXmin(Double.NEGATIVE_INFINITY); config.setIntegrateValueYUnits("erg/s/cm2/Hz"); config.setYValue(1.0); // normalize the Stack SedStackerNormalizer normalizer = new SedStackerNormalizer(client, Default.getInstance().getUnitsManager()); normalizer.normalize(stack, config); List<double[]> xs = new ArrayList<>(); List<double[]> ys = new ArrayList<>(); xs.add(x1); xs.add(x2); xs.add(x3); ys.add(y1); ys.add(y2); ys.add(y3); // stack.getOrigSeds() should return original seds for (int j = 0; j < stack.getOrigSeds().size(); j++) { ExtSed origSed = stack.getOrigSeds().get(j); double[] x = xs.get(j); double[] y = ys.get(j); for (int i = 0; i < stack.getOrigSeds().get(j).getSegment(0).getLength(); i++) { double xOrigValue = origSed.getSegment(0).getSpectralAxisValues()[i]; double yOrigValue = origSed.getSegment(0).getFluxAxisValues()[i]; assertEquals(xOrigValue, x[i], EPSILON); assertEquals(yOrigValue, y[i], EPSILON); } } for (int j = 0; j < stack.getSed(0).getSegment(0).getLength(); j++) assertEquals( 0.49234923 * y1[j], stack.getSed(0).getSegment(0).getFluxAxisValues()[j], EPSILON * 0.49234923 * y1[j]); for (int j = 0; j < stack.getSed(1).getSegment(0).getLength(); j++) assertEquals(9.846 * y2[j], stack.getSed(1).getSegment(0).getFluxAxisValues()[j], EPSILON); assertEquals( 1.1529274, Double.valueOf(stack.getSed(2).getAttachment(NORM_CONSTANT).toString()), EPSILON); }
@Test public void testNormalizerOutsideRange() throws Exception { ExtSed sed1 = new ExtSed("Sed1"); ExtSed sed2 = new ExtSed("Sed2"); ExtSed sed3 = new ExtSed("Sed3"); Segment seg1 = new Segment(); // for (int k=0; k<x1.length; k++) { // y1[k] = y1[k]*1e23; // yerr1[k] = yerr1[k]*1e23; // } seg1.setFluxAxisValues(y1); seg1.setSpectralAxisValues(x1); seg1.setFluxAxisUnits("erg/s/cm2/Angstrom"); seg1.setSpectralAxisUnits("Angstrom"); seg1.setDataValues(yerr1, UTYPE.FLUX_STAT_ERROR); sed1.addSegment(seg1); Segment seg2 = new Segment(); seg2.setFluxAxisValues(y2); seg2.setSpectralAxisValues(x2); seg2.setFluxAxisUnits("erg/s/cm2/Angstrom"); seg2.setSpectralAxisUnits("Angstrom"); seg2.setDataValues(yerr2, UTYPE.FLUX_STAT_ERROR); sed2.addSegment(seg2); Segment seg3 = new Segment(); seg3.setFluxAxisValues(y3); // convert the values in x3 to nm so I can test the unit conversions // too. for (int k = 0; k < x3.length; k++) { x3[k] = x3[k] * 0.1; } seg3.setSpectralAxisValues(x3); seg3.setFluxAxisUnits("erg/s/cm2/Angstrom"); seg3.setSpectralAxisUnits("nm"); seg3.setDataValues(yerr3, UTYPE.FLUX_STAT_ERROR); sed3.addSegment(seg3); SedStack stack = new SedStack("Stack"); stack.add(sed1); stack.add(sed2); stack.add(sed3); // setup the redshift configuration NormalizationConfiguration config = new NormalizationConfiguration(); config.setMultiply(true); config.setIntegrate(true); config.setStats("Value"); config.setXUnits("Angstrom"); config.setXmax(9.0); config.setXmin(1.5); config.setIntegrateValueYUnits("erg/s/cm2"); config.setYValue(1.0); // normalize the Stack normalizeWithWindowInterceptor(stack, config); List<double[]> xs = new ArrayList<>(); List<double[]> ys = new ArrayList<>(); xs.add(x1); xs.add(x2); xs.add(x3); ys.add(y1); ys.add(y2); ys.add(y3); // stack.getOrigSeds() should return original seds for (int j = 0; j < stack.getOrigSeds().size(); j++) { ExtSed origSed = stack.getOrigSeds().get(j); double[] x = xs.get(j); double[] y = ys.get(j); for (int i = 0; i < stack.getOrigSeds().get(j).getSegment(0).getLength(); i++) { double xOrigValue = origSed.getSegment(0).getSpectralAxisValues()[i]; double yOrigValue = origSed.getSegment(0).getFluxAxisValues()[i]; assertEquals(xOrigValue, x[i], EPSILON); assertEquals(yOrigValue, y[i], EPSILON); } } for (int j = 0; j < stack.getSed(0).getSegment(0).getLength(); j++) assertEquals(y1[j], stack.getSed(0).getSegment(0).getFluxAxisValues()[j], EPSILON); for (int j = 0; j < stack.getSed(1).getSegment(0).getLength(); j++) assertEquals(0.0625 * y2[j], stack.getSed(1).getSegment(0).getFluxAxisValues()[j], EPSILON); assertEquals( 0.035714285714, Double.valueOf(stack.getSed(2).getAttachment(NORM_CONSTANT).toString()), EPSILON); }