#!/usr/bin/env python # encoding: utf-8 """ Author: Nick Bearson, nickb@ssec.wisc.edu Copyright (c) 2012 University of Wisconsin SSEC. All rights reserved. """ # How to convert the EBCDIC Dataset Name: # str = read(...) # str.decode('EBCDIC-CP-BE').encode('ascii') # TBM = [ # # {'field' : 'Data Set Name', 'start' : 31, 'length' : 44,}, # {'field' : 'Total/Selective Copy ("T" or "S")', 'start' : 75, 'length' : 1,}, # {'field' : 'Beginning Latitude', 'start' : 76, 'length' : 3,}, # {'field' : 'Ending Latitude', 'start' : 79, 'length' : 3,}, # {'field' : 'Beginning Longitude', 'start' : 82, 'length' : 4,}, # {'field' : 'Ending Longitude', 'start' : 86, 'length' : 4,}, # {'field' : 'Start Hour', 'start' : 90, 'length' : 2,}, # {'field' : 'Start Minute', 'start' : 92, 'length' : 2,}, # {'field' : 'Number of Minutes', 'start' : 94, 'length' : 3,}, # {'field' : 'Appended Data Selection ("Y" or "N")', 'start' : 97, 'length' : 1,}, # {'field' : 'Channels Selected (in binary)', 'start' : 98, 'length' : 20,}, # {'field' : 'Sensor Data Word Size (ASCII)', 'start' : 118, 'length' : 2,}, #] # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ """ Header before Sept 8 1992 (bottom of page): http://www2.ncdc.noaa.gov/docs/podug/html/k/app-k.htm Header after Sept 8 1992: http://www2.ncdc.noaa.gov/docs/podug/html/c2/sec2-0.htm#sec2-03 """ before_header = { 'Spacecraft ID', : {'start' : 1 , 'length' : 1 ,}, 'Data Type', : {'start' : 2 , 'length' : 1 ,}, 'Start Time', : {'start' : 3 , 'length' : 6 ,}, 'Number of Scans', : {'start' : 9 , 'length' : 2 ,}, 'End Time', : {'start' : 11, 'length' : 6 ,}, 'Processing Block ID (ASCII)', : {'start' : 17, 'length' : 7 ,}, 'Ramp/Auto Calibration', : {'start' : 24, 'length' : 1 ,}, 'Number of Data Gaps', : {'start' : 25, 'length' : 2 ,}, 'DACS Quality', : {'start' : 27, 'length' : 6 ,}, 'Calibration Parameter ID', : {'start' : 33, 'length' : 2 ,}, 'DACS Status', : {'start' : 35, 'length' : 1 ,}, 'Fixed Attitude Correction Indicator', : {'start' : 36, 'length' : 1 ,}, 'Nadir Earth Location Tolerance', : {'start' : 37, 'length' : 1 ,}, 'Spare (Zero-filled)', : {'start' : 38, 'length' : 1 ,}, '4-digit year for start of data (effective December 2, 1998)', : {'start' : 39, 'length' : 2 ,}, 'Dataset Name (EBCDIC)', : {'start' : 41, 'length' : 42,}, } after_header = { 'Spacecraft ID', : {'start' : 1 , 'length' : 1 ,}, 'Data Type', : {'start' : 2 , 'length' : 1 ,}, 'Start Time', : {'start' : 3 , 'length' : 6 ,}, 'Number of Scans', : {'start' : 9 , 'length' : 2 ,}, 'End Time', : {'start' : 11, 'length' : 6 ,}, 'Processing Block ID (ASCII)', : {'start' : 17, 'length' : 7 ,}, 'Ramp/Auto Calibration', : {'start' : 24, 'length' : 1 ,}, 'Number of Data Gaps', : {'start' : 25, 'length' : 2 ,}, 'DACS Quality', : {'start' : 27, 'length' : 6 ,}, 'Calibration Parameter ID', : {'start' : 33, 'length' : 2 ,}, 'DACS Status', : {'start' : 35, 'length' : 1 ,}, 'Dataset Name (EBCDIC)', : {'start' : 41, 'length' : 42,}, } # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ """ HIRS/2 Data Record: http://www2.ncdc.noaa.gov/docs/podug/html/c4/sec4-1.htm """ data = { 'Scan Line' : {'start' : 1 , 'length' : 2 ,}, 'Time Code' : {'start' : 3 , 'length' : 6 ,}, 'Scan Quality Indicators' : {'start' : 9 , 'length' : 4 ,}, 'Earth Location Delta' : {'start' : 13 , 'length' : 4 ,}, 'Calibration Coefficients' : {'start' : 17 , 'length' : 720 ,}, 'Height and Local Zenith Angle' : {'start' : 737 , 'length' : 4 ,}, 'Earth Location' : {'start' : 741 , 'length' : 224 ,}, 'HIRS/2 Data' : {'start' : 965 , 'length' : 2816,}, 'Minor Frame Quality' : {'start' : 3781, 'length' : 64 ,}, } """ Record Length: 4256 prior to 1/1/1995 4253 after 1/1/1995 """ from datetime import datetime def getRecordLength(datetime): boundary = datetime(1995, 01, 01) # FIXME: this isn't as exact as it should be if datetime < boundary: return 4256 else: return 4253