/*
* Copyright (C) 2010 Brockmann Consult GmbH (info@brockmann-consult.de)
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the Free
* Software Foundation; either version 3 of the License, or (at your option)
* any later version.
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, see http://www.gnu.org/licenses/
*/
package org.esa.beam.smos.dgg;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
/**
* Antonio Gutierrez (antonio.gutierrez@deimos.com.pt) wrote:
* <p/>
* The numbering in the SMOS DGG follows a combination of the first and second counters in the
* "isea4h9_cell_in_column" file.
* The second counter is the one which contemplates the 10 zones (each zone being two adjacent
* triangles of the icosahedron). Each zone is composed by 262144 points, and can be identified
* by the first 2 digits of the counter (i.e. 01000000000 -> zone 1, 10333333333 -> zone 10).
* <p/>
* The first and last point in the file do not belong to any of these 10 zones, but we incorporated
* them into the first and last zones respectively, so they have one extra point in the end.
* <p/>
* The remaining digits of the second counter should indicate the number within the zone, but
* the encoding used is based on quads, so we reduced it to a sequential numbering. In short,
* the method we used is the following:
* <p/>
* <pre>
* 1, 00000000000 -> 1
* 2, 01000000000 -> 2
* 3, 01000000001 -> 3
* ...
* 262144, 01333333332 -> 262144
* 262145, 01333333333 -> 262145
* 262146, 02000000000 -> 1000001
* 262147, 02000000001 -> 1000002
* ...
* 524288, 02333333332 -> 1262143
* 524289, 02333333333 -> 1262144
* 524290, 03000000000 -> 2000001
* 524291, 03000000001 -> 2000002
* ...
* 2359296, 09333333332 -> 8262143
* 2359297, 09333333333 -> 8262144
* 2359298, 10000000000 -> 9000001
* 2359299, 10000000001 -> 9000002
* ...
* 2621441, 10333333333 ->9262144
* 2621442, 11000000000 ->9262145
* </pre>
*/
public class SmosDggTest {
@Test
public void gridPointIdToSeqnum() {
assertEquals(1, SmosDgg.gridPointIdToSeqnum(1));
assertEquals(2, SmosDgg.gridPointIdToSeqnum(2));
assertEquals(3, SmosDgg.gridPointIdToSeqnum(3));
assertEquals(262144, SmosDgg.gridPointIdToSeqnum(262144));
assertEquals(262145, SmosDgg.gridPointIdToSeqnum(262145));
assertEquals(262146, SmosDgg.gridPointIdToSeqnum(1000001));
assertEquals(262147, SmosDgg.gridPointIdToSeqnum(1000002));
assertEquals(524288, SmosDgg.gridPointIdToSeqnum(1262143));
assertEquals(524289, SmosDgg.gridPointIdToSeqnum(1262144));
assertEquals(524290, SmosDgg.gridPointIdToSeqnum(2000001));
assertEquals(524291, SmosDgg.gridPointIdToSeqnum(2000002));
assertEquals(2359296, SmosDgg.gridPointIdToSeqnum(8262143));
assertEquals(2359297, SmosDgg.gridPointIdToSeqnum(8262144));
assertEquals(2359298, SmosDgg.gridPointIdToSeqnum(9000001));
assertEquals(2359299, SmosDgg.gridPointIdToSeqnum(9000002));
assertEquals(2621441, SmosDgg.gridPointIdToSeqnum(9262144));
assertEquals(2621442, SmosDgg.gridPointIdToSeqnum(9262145));
}
@Test
public void gridPointIdToSeqnumInZone() {
assertEquals(1, SmosDgg.gridPointIdToSeqnumInZone(1));
assertEquals(2, SmosDgg.gridPointIdToSeqnumInZone(2));
assertEquals(3, SmosDgg.gridPointIdToSeqnumInZone(3));
assertEquals(262144, SmosDgg.gridPointIdToSeqnumInZone(262144));
assertEquals(262145, SmosDgg.gridPointIdToSeqnumInZone(262145));
assertEquals(1, SmosDgg.gridPointIdToSeqnumInZone(1000001));
assertEquals(2, SmosDgg.gridPointIdToSeqnumInZone(1000002));
assertEquals(262143, SmosDgg.gridPointIdToSeqnumInZone(1262143));
assertEquals(262144, SmosDgg.gridPointIdToSeqnumInZone(1262144));
assertEquals(1, SmosDgg.gridPointIdToSeqnumInZone(2000001));
assertEquals(2, SmosDgg.gridPointIdToSeqnumInZone(2000002));
assertEquals(262143, SmosDgg.gridPointIdToSeqnumInZone(8262143));
assertEquals(262144, SmosDgg.gridPointIdToSeqnumInZone(8262144));
assertEquals(1, SmosDgg.gridPointIdToSeqnumInZone(9000001));
assertEquals(2, SmosDgg.gridPointIdToSeqnumInZone(9000002));
assertEquals(262144, SmosDgg.gridPointIdToSeqnumInZone(9262144));
assertEquals(262145, SmosDgg.gridPointIdToSeqnumInZone(9262145));
}
@Test
public void gridPointIdToZoneId() {
assertEquals(1, SmosDgg.gridPointIdToZoneId(1));
assertEquals(1, SmosDgg.gridPointIdToZoneId(2));
assertEquals(1, SmosDgg.gridPointIdToZoneId(3));
assertEquals(1, SmosDgg.gridPointIdToZoneId(262144));
assertEquals(1, SmosDgg.gridPointIdToZoneId(262145));
assertEquals(2, SmosDgg.gridPointIdToZoneId(1000001));
assertEquals(2, SmosDgg.gridPointIdToZoneId(1000002));
assertEquals(2, SmosDgg.gridPointIdToZoneId(1262143));
assertEquals(2, SmosDgg.gridPointIdToZoneId(1262144));
assertEquals(3, SmosDgg.gridPointIdToZoneId(2000001));
assertEquals(3, SmosDgg.gridPointIdToZoneId(2000002));
assertEquals(9, SmosDgg.gridPointIdToZoneId(8262143));
assertEquals(9, SmosDgg.gridPointIdToZoneId(8262144));
assertEquals(10, SmosDgg.gridPointIdToZoneId(9000001));
assertEquals(10, SmosDgg.gridPointIdToZoneId(9000002));
assertEquals(10, SmosDgg.gridPointIdToZoneId(9262144));
assertEquals(10, SmosDgg.gridPointIdToZoneId(9262145));
}
@Test
public void seqnumToGridPointId() {
assertEquals(1, SmosDgg.seqnumToGridPointId(1));
assertEquals(2, SmosDgg.seqnumToGridPointId(2));
assertEquals(3, SmosDgg.seqnumToGridPointId(3));
assertEquals(262144, SmosDgg.seqnumToGridPointId(262144));
assertEquals(262145, SmosDgg.seqnumToGridPointId(262145));
assertEquals(1000001, SmosDgg.seqnumToGridPointId(262146));
assertEquals(1000002, SmosDgg.seqnumToGridPointId(262147));
assertEquals(1262143, SmosDgg.seqnumToGridPointId(524288));
assertEquals(1262144, SmosDgg.seqnumToGridPointId(524289));
assertEquals(2000001, SmosDgg.seqnumToGridPointId(524290));
assertEquals(2000002, SmosDgg.seqnumToGridPointId(524291));
assertEquals(8262143, SmosDgg.seqnumToGridPointId(2359296));
assertEquals(8262144, SmosDgg.seqnumToGridPointId(2359297));
assertEquals(9000001, SmosDgg.seqnumToGridPointId(2359298));
assertEquals(9000002, SmosDgg.seqnumToGridPointId(2359299));
assertEquals(9262144, SmosDgg.seqnumToGridPointId(2621441));
assertEquals(9262145, SmosDgg.seqnumToGridPointId(2621442));
}
@Test
public void seqnumToSeqnumInZone() {
assertEquals(1, SmosDgg.seqnumToSeqnumInZone(1));
assertEquals(2, SmosDgg.seqnumToSeqnumInZone(2));
assertEquals(3, SmosDgg.seqnumToSeqnumInZone(3));
assertEquals(262144, SmosDgg.seqnumToSeqnumInZone(262144));
assertEquals(262145, SmosDgg.seqnumToSeqnumInZone(262145));
assertEquals(1, SmosDgg.seqnumToSeqnumInZone(262146));
assertEquals(2, SmosDgg.seqnumToSeqnumInZone(262147));
assertEquals(262143, SmosDgg.seqnumToSeqnumInZone(524288));
assertEquals(262144, SmosDgg.seqnumToSeqnumInZone(524289));
assertEquals(1, SmosDgg.seqnumToSeqnumInZone(524290));
assertEquals(2, SmosDgg.seqnumToSeqnumInZone(524291));
assertEquals(262143, SmosDgg.seqnumToSeqnumInZone(2359296));
assertEquals(262144, SmosDgg.seqnumToSeqnumInZone(2359297));
assertEquals(1, SmosDgg.seqnumToSeqnumInZone(2359298));
assertEquals(2, SmosDgg.seqnumToSeqnumInZone(2359299));
assertEquals(262144, SmosDgg.seqnumToSeqnumInZone(2621441));
assertEquals(262145, SmosDgg.seqnumToSeqnumInZone(2621442));
}
@Test
public void seqnumToZoneId() {
assertEquals(1, SmosDgg.seqnumToZoneId(1));
assertEquals(1, SmosDgg.seqnumToZoneId(2));
assertEquals(1, SmosDgg.seqnumToZoneId(3));
assertEquals(1, SmosDgg.seqnumToZoneId(262144));
assertEquals(1, SmosDgg.seqnumToZoneId(262145));
assertEquals(2, SmosDgg.seqnumToZoneId(262146));
assertEquals(2, SmosDgg.seqnumToZoneId(262147));
assertEquals(2, SmosDgg.seqnumToZoneId(524288));
assertEquals(2, SmosDgg.seqnumToZoneId(524289));
assertEquals(3, SmosDgg.seqnumToZoneId(524290));
assertEquals(3, SmosDgg.seqnumToZoneId(524291));
assertEquals(9, SmosDgg.seqnumToZoneId(2359296));
assertEquals(9, SmosDgg.seqnumToZoneId(2359297));
assertEquals(10, SmosDgg.seqnumToZoneId(2359298));
assertEquals(10, SmosDgg.seqnumToZoneId(2359299));
assertEquals(10, SmosDgg.seqnumToZoneId(2621441));
assertEquals(10, SmosDgg.seqnumToZoneId(2621442));
}
}