Apply current workspace changes
This commit is contained in:
+81
@@ -0,0 +1,81 @@
|
||||
#!/usr/bin/env python
|
||||
import argparse
|
||||
import sys
|
||||
import h5py
|
||||
import numpy as np
|
||||
from ssa import SSA
|
||||
import time, math
|
||||
from mintpy.utils import readfile, writefile, ptime, utils as ut
|
||||
from mintpy.objects import timeseries
|
||||
|
||||
def create_parser():
|
||||
parser=argparse.ArgumentParser()
|
||||
parser.add_argument('timeseries_file',
|
||||
help='time-series file to do SSA \n'
|
||||
'i.e.:geo_timeseries_GACOS_ramp_demErr.h5 (MintPy)\n')
|
||||
parser.add_argument("-w", "--window",
|
||||
type=int,
|
||||
help='Widow length (default is 7) ')
|
||||
parser.add_argument('-o', '--output', dest='outfile', help='output file name (default ssa.h5)')
|
||||
# args=parser.parse_args()
|
||||
# computing
|
||||
# parser = arg_group.add_memory_argument(parser)
|
||||
return parser
|
||||
def cmd_line_parse(iargs=None):
|
||||
parser = create_parser()
|
||||
inps = parser.parse_args(args=iargs)
|
||||
inps.key = readfile.read_attribute(inps.timeseries_file)['FILE_TYPE']
|
||||
if inps.key not in ['timeseries', 'giantTimeseries', 'HDFEOS']:
|
||||
raise Exception('input file is {}, NOT timeseries!'.format(inps.key))
|
||||
if not inps.window:
|
||||
inps.window = int(7)
|
||||
if not inps.outfile:
|
||||
outname = 'ssa'
|
||||
outname += '.h5'
|
||||
inps.outfile = outname
|
||||
tsobj = timeseries(inps.timeseries_file)
|
||||
return inps
|
||||
def is_number(s):
|
||||
if s==0:
|
||||
return False
|
||||
elif math.isnan(s):
|
||||
return False
|
||||
else:
|
||||
return True
|
||||
def main(iargs=None):
|
||||
# if cmd:
|
||||
# iargs = cmd.split()[1:]
|
||||
inps = cmd_line_parse(iargs)
|
||||
date_list = timeseries(inps.timeseries_file).get_date_list()
|
||||
data, atr = readfile.read(inps.timeseries_file)
|
||||
length, width = int(atr['LENGTH']), int(atr['WIDTH'])
|
||||
N_dates=len(date_list)
|
||||
# with h5py.File(inps.timeseries_file,'r') as f:
|
||||
# data = f['timeseries'][:]
|
||||
# date_list = f['date'][:]
|
||||
data_matrix = np.empty((len(date_list),length,width))
|
||||
data_matrix[:] = np.nan
|
||||
start_time = time.time()
|
||||
for i in range(length):
|
||||
for j in range(width):
|
||||
if is_number(sum(data[:,i,j])):
|
||||
a=SSA(data[:,i,j], inps.window)
|
||||
data_matrix[:,i,j]=a.reconstruct([0,1]) # Grouping recostructed components, by defaults it takes F1 and F2 as trend
|
||||
m, s = divmod(time.time()-start_time, 60)
|
||||
block= [0,N_dates,0,length,0,width]
|
||||
writefile.layout_hdf5(inps.outfile, metadata=atr, ref_file=inps.timeseries_file)
|
||||
writefile.write_hdf5_block(inps.outfile,
|
||||
data=data_matrix,
|
||||
datasetName='timeseries',
|
||||
block=block,
|
||||
print_msg=False)
|
||||
|
||||
|
||||
print(inps.timeseries_file)
|
||||
print(inps.window)
|
||||
# print(date_list)
|
||||
print(length,width)
|
||||
print('time used: {:02.0f} mins {:02.1f} secs.'.format(m, s))
|
||||
if __name__ == '__main__':
|
||||
main(sys.argv[1:])
|
||||
|
||||
Reference in New Issue
Block a user