001    /*
002     * This file is part of McIDAS-V
003     *
004     * Copyright 2007-2013
005     * Space Science and Engineering Center (SSEC)
006     * University of Wisconsin - Madison
007     * 1225 W. Dayton Street, Madison, WI 53706, USA
008     * https://www.ssec.wisc.edu/mcidas
009     * 
010     * All Rights Reserved
011     * 
012     * McIDAS-V is built on Unidata's IDV and SSEC's VisAD libraries, and
013     * some McIDAS-V source code is based on IDV and VisAD source code.  
014     * 
015     * McIDAS-V is free software; you can redistribute it and/or modify
016     * it under the terms of the GNU Lesser Public License as published by
017     * the Free Software Foundation; either version 3 of the License, or
018     * (at your option) any later version.
019     * 
020     * McIDAS-V is distributed in the hope that it will be useful,
021     * but WITHOUT ANY WARRANTY; without even the implied warranty of
022     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
023     * GNU Lesser Public License for more details.
024     * 
025     * You should have received a copy of the GNU Lesser Public License
026     * along with this program.  If not, see http://www.gnu.org/licenses.
027     */
028    
029    package edu.wisc.ssec.mcidasv.data.hydra;
030    
031    /**
032     * Utility class to support Joint Polar Satellite System (JPSS) functionality.
033     * Documentation referenced is from Suomi NPP Common Data Format Control Book.
034     * See:
035     * http://jointmission.gsfc.nasa.gov/science/documents.html
036     * 
037     * @author tommyj
038     *
039     */
040    
041    public abstract class JPSSUtilities {
042       
043            public static final String JPSS_FIELD_SEPARATOR = "_";
044            
045            // This regular expression matches a Suomi NPP Data Product as defined by the 
046            // spec in CDFCB-X Volume 1, Page 21
047            public static final String SUOMI_NPP_REGEX =
048                    // Product Id, Multiple (ex: VSSTO-GATMO-VSLTO)
049                    "(\\w\\w\\w\\w\\w-)*" + 
050                    // Product Id, Single (ex: VSSTO)
051                    "\\w\\w\\w\\w\\w" + JPSSUtilities.JPSS_FIELD_SEPARATOR +
052                    // Spacecraft Id (ex: npp)
053                    "\\w\\w\\w" + JPSSUtilities.JPSS_FIELD_SEPARATOR +
054                    // Data Start Date (ex: dYYYYMMDD)
055                    "d20[0-3]\\d[0-1]\\d[0-3]\\d" + JPSSUtilities.JPSS_FIELD_SEPARATOR +
056                    // Data Start Time (ex: tHHMMSSS)
057                    "t[0-2]\\d[0-5]\\d[0-6]\\d\\d" + JPSSUtilities.JPSS_FIELD_SEPARATOR +
058                    // Data Stop Time (ex: eHHMMSSS)
059                    "e[0-2]\\d[0-5]\\d[0-6]\\d\\d" + JPSSUtilities.JPSS_FIELD_SEPARATOR +
060                    // Orbit Number (ex: b00015)
061                    "b\\d\\d\\d\\d\\d" + JPSSUtilities.JPSS_FIELD_SEPARATOR +
062                    // Creation Date (ex: cYYYYMMDDHHMMSSSSSSSS)
063                    "c20[0-3]\\d[0-1]\\d[0-3]\\d[0-2]\\d[0-5]\\d[0-6]\\d\\d\\d\\d\\d\\d\\d" + JPSSUtilities.JPSS_FIELD_SEPARATOR +
064                    // Origin (ex: navo)
065                    "\\w\\w\\w\\w" + JPSSUtilities.JPSS_FIELD_SEPARATOR +
066                    // Domain (ex: ops)
067                    "\\w\\w\\w" + 
068                    // HDF5 suffix
069                    ".h5";
070            
071            public static float[] ATMSChannelCenterFrequencies = {
072                    23.8f,
073                    31.4f,
074                    50.3f,
075                    51.76f,
076                    52.8f,
077                    53.596f,
078                    54.40f,
079                    54.94f,
080                    55.50f,
081                    57.29032f,
082                    57.29033f,
083                    57.29034f,
084                    57.29035f,
085                    57.29036f,
086                    57.29037f,
087                    88.20f,
088                    165.5f,
089                    183.3101f,
090                    183.3102f,
091                    183.3103f,
092                    183.3104f,
093                    183.3105f
094            };
095            
096            // the list of valid geolocation product ids
097            public static String[] geoProductIDs = {
098            "GATMO",
099            "GCRSO",
100            "GAERO",
101            "GCLDO",
102            "GDNBO",
103            "GNCCO",
104            "GIGTO",
105            "GIMGO",
106            "GITCO",
107            "GMGTO",
108            "GMODO",
109            "GMTCO",
110            "GNHFO",
111            "GOTCO",
112            "GOSCO",
113            "GONPO",
114            "GONCO",
115            "GCRIO",
116            "GATRO",
117            "IVMIM",
118            "VMUGE"
119            };  
120            
121            // This regular expression matches a Suomi NPP geolocation granule, see 
122            // spec in CDFCB-X Volume 1, Page 21
123            public static final String SUOMI_GEO_REGEX =
124                    // Geo Id, Single (ex: GMODO)
125                            // NOTE: This MUST match the list of product ids in static array above!
126                    "(GATMO|GCRSO|GAERO|GCLDO|GDNBO|GNCCO|GIGTO|GIMGO|GITCO|" + 
127                            "GMGTO|GMODO|GMTCO|GNHFO|GOTCO|GOSCO|GONPO|GONCO|GCRIO|GATRO|IVMIM|VMUGE)" + 
128                            JPSSUtilities.JPSS_FIELD_SEPARATOR +
129                    // Spacecraft Id (ex: npp)
130                    "\\w\\w\\w" + JPSSUtilities.JPSS_FIELD_SEPARATOR +
131                    // Data Start Date (ex: dYYYYMMDD)
132                    "d20[0-3]\\d[0-1]\\d[0-3]\\d" + JPSSUtilities.JPSS_FIELD_SEPARATOR +
133                    // Data Start Time (ex: tHHMMSSS)
134                    "t[0-2]\\d[0-5]\\d[0-6]\\d\\d" + JPSSUtilities.JPSS_FIELD_SEPARATOR +
135                    // Data Stop Time (ex: eHHMMSSS)
136                    "e[0-2]\\d[0-5]\\d[0-6]\\d\\d" + JPSSUtilities.JPSS_FIELD_SEPARATOR +
137                    // Orbit Number (ex: b00015)
138                    "b\\d\\d\\d\\d\\d" + JPSSUtilities.JPSS_FIELD_SEPARATOR +
139                    // Creation Date (ex: cYYYYMMDDHHMMSSSSSSSS)
140                    "c20[0-3]\\d[0-1]\\d[0-3]\\d[0-2]\\d[0-5]\\d[0-6]\\d\\d\\d\\d\\d\\d\\d" + JPSSUtilities.JPSS_FIELD_SEPARATOR +
141                    // Origin (ex: navo)
142                    "\\w\\w\\w\\w" + JPSSUtilities.JPSS_FIELD_SEPARATOR +
143                    // Domain (ex: ops)
144                    "\\w\\w\\w" + 
145                    // HDF5 suffix
146                    ".h5";
147            
148    }