12 from netCDF4
import Dataset
as NetCDF
14 __version__ =
"1.1 (2024-04-25)"
25 Given a lon and lat dataset, process the gring of the datasets
26 Return an array of tuples (lon,lat) for the left and right side
42 for i
in range(num_bins):
45 updatePrevVals =
False
48 leftPoint = (lon_dataset[i][num_spatial-1], lat_dataset[i][num_spatial-1])
49 rightPoint = (lon_dataset[i][0], lat_dataset[i][0])
52 leftLon = leftPoint[0]
53 leftLat = leftPoint[1]
54 rightLon = rightPoint[0]
55 rightLat = rightPoint[1]
63 upperMiddlePoint = (lon_dataset[i][(num_spatial-1)//2], lat_dataset[i][(num_spatial-1)//2])
64 leftArr.append(upperMiddlePoint)
65 leftArr.append(leftPoint)
66 rightArr.append(rightPoint)
72 leftArr.append(leftPoint)
73 rightArr.append(rightPoint)
77 lowerMiddlePoint = (lon_dataset[i][(num_spatial-1)//2], lat_dataset[i][(num_spatial-1)//2])
78 rightArr.append(lowerMiddlePoint)
83 elif (leftLat >= MAX_LAT_BOUND
or leftLat <= MIN_LAT_BOUND
or rightLat >= MAX_LAT_BOUND
or rightLat <= MIN_LAT_BOUND):
86 leftDeltaLon =
abs(leftLon - prevLonLeft)
87 leftDeltaLat =
abs(leftLat - prevLatLeft)
88 rightDeltaLon =
abs(rightLon - prevLonRight)
89 rightDeltaLat =
abs(rightLat - prevLatRight)
92 if ((leftDeltaLat >= MIN_DELTA_LAT
and rightDeltaLat >= MIN_DELTA_LAT)
or
93 (leftDeltaLon >= 5.0
and rightDeltaLon >= MIN_DELTA_LAT)):
95 leftArr.append(leftPoint)
96 rightArr.append(rightPoint)
100 elif (leftLat < 40.0
and leftLat > -40.0)
or (rightLat < 40.0
and rightLat > -40.0):
101 deltaLat =
abs(leftLat - prevLatLeft)
102 if (deltaLat >= 20.0):
103 leftArr.append(leftPoint)
104 rightArr.append(rightPoint)
105 updatePrevVals =
True
109 prevLonLeft = leftLon
110 prevLatLeft = leftLat
111 prevLonRight = rightLon
112 prevLatRight = rightLat
114 return rightArr, leftArr
121 flag = 0
if isLon
else 1
125 print(
"gringpointlongitude=", end=
"")
127 print(
"gringpointlatitude=", end=
"")
130 arrSize = len(rightArr)
133 for i
in range(arrSize):
134 print(rightArr[i][flag], end=
",")
137 for i
in reversed(
range(arrSize)):
139 print(leftArr[i][flag], end=
"\n")
141 print(leftArr[i][flag], end=
",")
146 print(
"l1info_spexone", __version__)
149 parser = argparse.ArgumentParser(description=
"Given a SpexOne L1B file, return its time and gring information")
150 parser.add_argument(
"iFile", type=str, help=
"SpexOne L1B NetCDF file")
151 args = parser.parse_args()
154 ncFile = NetCDF(args.iFile,
"r+", format=
"NETCDF4")
159 num_bins = len(ncFile.dimensions[
"bins_along_track"])
160 num_spatial = len(ncFile.dimensions[
"spatial_samples_per_image"])
163 startTime = ncFile.__dict__[
"time_coverage_start"]
164 endDatetime = datetime.datetime(
int(startTime[:4]),
int(startTime[5:7]),
int(startTime[8:10]))
167 var = ncFile.groups[
"BIN_ATTRIBUTES"][
"image_time"]
169 var.set_auto_mask(
False)
170 lastBinSeconds =
float(var[num_bins-1])
171 endTime = datetime.timedelta(seconds=lastBinSeconds)
172 endDatetime += endTime
173 endTimeStr = endDatetime.isoformat()
174 if(len(endTimeStr) > 23):
175 endTimeStr = endTimeStr[:23]
178 lon_dataset = ncFile.groups[
"GEOLOCATION_DATA"][
"longitude"]
179 lat_dataset = ncFile.groups[
"GEOLOCATION_DATA"][
"latitude"]
182 rightArr, leftArr =
getGring(lon_dataset, lat_dataset)
186 print(f
"Start_Date={startTime[:10]}")
187 print(f
"Start_Time={startTime[11:23]}")
188 print(f
"End_Date={endTimeStr[:10]}")
189 print(f
"End_Time={endTimeStr[11:]}")
198 print(
"gringpointsequence=", end=
"")
201 for i
in range(len(leftArr) * 2):
202 if i == (len(leftArr) * 2)-1:
208 if __name__ ==
"__main__":