7 from dateutil
import tz
10 from os.path
import basename
12 from shutil
import copyfile
as cp
18 versionStr =
"1.0_2024-11-06"
23 spixl=None, epixl=None, sline=None, eline=None,
26 self.
ifile = pathlib.Path(ifile)
27 self.
ofile = pathlib.Path(ofile)
51 print(
'Extracting', srcfile)
56 infile = netCDF4.Dataset(srcfile,
'r')
58 outfile = netCDF4.Dataset(dstfile,
'r+')
65 if 'extract_pixel_start' in infile.ncattrs():
66 outfile.extract_pixel_start = np.dtype(
'int32').
type(infile.extract_pixel_start + self.
spixl + 1)
67 outfile.extract_pixel_stop = np.dtype(
'int32').
type(infile.extract_pixel_stop + self.
epixl + 1)
68 outfile.extract_line_start = np.dtype(
'int32').
type(infile.extract_line_start + self.
sline + 1)
69 outfile.extract_line_stop = np.dtype(
'int32').
type(infile.extract_line_stop + self.
eline + 1)
71 outfile.extract_pixel_start = np.dtype(
'int32').
type(self.
spixl + 1)
72 outfile.extract_pixel_stop = np.dtype(
'int32').
type(self.
epixl + 1)
74 outfile.extract_line_start = np.dtype(
'int32').
type(self.
sline + 1)
75 outfile.extract_line_stop = np.dtype(
'int32').
type(self.
eline + 1)
83 infile = netCDF4.Dataset(srcfile,
'r')
85 outfile = netCDF4.Dataset(dstfile,
'r+')
87 scantime = outfile.variables[
'time'][:]
88 stime = datetime.datetime.fromtimestamp(scantime[0],tz=utc)
89 etime = datetime.datetime.fromtimestamp(scantime[-1],tz=utc)
91 outfile.time_coverage_start =
str(stime.strftime(
'%Y-%m-%dT%H:%M:%S') +
'Z')
92 outfile.time_coverage_end =
str(etime.strftime(
'%Y-%m-%dT%H:%M:%S') +
'Z')
102 infile = netCDF4.Dataset(self.
ifile,
'r')
103 dims =
list(infile.dimensions.keys())
113 args.epixl = infile.dimensions[
'pixels'].size
115 args.eline = infile.dimensions[
'scans'].size
116 return args.spixl, args.epixl, args.sline, args.eline
118 if __name__ ==
"__main__":
119 print(
"l1aextract_netcdf", versionStr)
122 parser = argparse.ArgumentParser(
123 description=
'Extract specified area from an L1A netCDF file')
124 parser.add_argument(
'-v',
'--verbose', help=
'print status messages',
126 parser.add_argument(
'ifile',
127 help=
'SeaWiFS Level 1A input file')
128 parser.add_argument(
'ofile',
131 group2 = parser.add_argument_group(
'pixel/line ranges (1-based)')
132 group2.add_argument(
'--spixl', type=int, help=
'start pixel', default = 1)
133 group2.add_argument(
'--epixl', type=int, help=
'end pixel', default = -1)
135 group2.add_argument(
'--sline', type=int, help=
'start line', default = 1)
136 group2.add_argument(
'--eline', type=int, help=
'end line', default = -1)
138 if len(sys.argv) == 1:
141 args = parser.parse_args()
144 infile = netCDF4.Dataset(args.ifile,
'r')
146 args.spixl, args.epixl, args.sline, args.in_eline =
chk_pixl(args, infile)
155 verbose=args.verbose)