Newer
Older
# cython: language_level=3
# cython: c_string_Type=unicode, c_string_encoding=utf8
cdef extern void get_Reynolds_SST(float *, float *, char *, char *, float *)
cdef extern void get_NDVI_background(float *, float *, char *, char *, float *)
cdef extern void get_Olson_eco(float *, float *, char *, unsigned char *)
cdef extern void get_GEOS(float *, float *, char *, char *, char *, char *, char *, char *, char *,
float *, float *, float *, float *, float *, float *)

Paolo Veglio
committed
cdef extern void snow_mask(char *, unsigned char)
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
import cython
from cython.view cimport array as cvarray
import numpy as np
cimport numpy as np
np.import_array()
ctypedef np.float_t DTYPE_t
DTYPE = np.float
@cython.boundscheck(False)
@cython.wraparound(False)
@cython.initializedcheck(False)
def py_get_Reynolds_SST(np.ndarray[float, ndim=1] lat,
np.ndarray[float, ndim=1] lon,
char *anc_dir, char *sst_file, sst):
# cdef np.ndarray sst = np.zeros((3232*3200, ), order='C', dtype=np.float32)
if not sst.flags['C_CONTIGUOUS']:
sst = np.ascontiguousarray(sst)
cdef float[::1] sst_mv = sst
get_Reynolds_SST(&lat[0], &lon[0], anc_dir, sst_file, &sst_mv[0])
return sst
def py_get_NDVI_background(np.ndarray[float, ndim=1] lat,
np.ndarray[float, ndim=1] lon,
char *anc_dir, char *ndvi_file, ndvi):
if not ndvi.flags['C_CONTIGUOUS']:
ndvi = np.ascontiguousarray(ndvi)
cdef float[::1] ndvi_mv = ndvi
get_NDVI_background(&lat[0], &lon[0], anc_dir, ndvi_file, &ndvi_mv[0])
return ndvi
def py_get_Olson_eco(np.ndarray[float, ndim=1] lat,
np.ndarray[float, ndim=1] lon,
char *anc_dir, eco):
if not eco.flags['C_CONTIGUOUS']:
eco = np.ascontiguousarray(eco)
cdef unsigned char[::1] eco_mv = eco
get_Olson_eco(&lat[0], &lon[0], anc_dir, &eco_mv[0])
return eco
def py_get_GEOS(np.ndarray[float, ndim=1] lat, np.ndarray[float, ndim=1] lon, char *startTime,
char *anc_dir, char *geos1, char *geos2, char *geos_lnd, char *geos_ocn, char *geos_cnst,
geos_data):
for v in geos_data:
if not geos_data[v].flags['C_CONTIGUOUS']:
geos_data[v] = np.ascontiguousarray(geos_data[v])
cdef float[::1] tpw_mv = geos_data['tpw']
cdef float[::1] snowfr_mv = geos_data['snowfr']
cdef float[::1] icefr_mv = geos_data['icefr']
cdef float[::1] ocnfr_mv = geos_data['ocnfr']
cdef float[::1] landicefr_mv = geos_data['landicefr']
cdef float[::1] sfct_mv = geos_data['sfct']
get_GEOS(&lat[0], &lon[0], startTime, anc_dir, geos1, geos2, geos_lnd, geos_ocn, geos_cnst,
&tpw_mv[0], &snowfr_mv[0], &icefr_mv[0], &ocnfr_mv[0], &landicefr_mv[0], &sfct_mv[0])
geos_dict = {'tpw': geos_data['tpw'],
'snowfr': geos_data['snowfr'],
'icefr': geos_data['icefr'],
'ocnfr': geos_data['ocnfr'],
'landicefr': geos_data['landicefr'],
'sfct': geos_data['sfct']
}
return geos_dict

Paolo Veglio
committed
def py_snow_mask(char *satname, unsigned char lsf):
# need to have for loop here to compute all the pixels since the function, as with everything else,
# is run per pixel.
pass