@@ -75,15 +75,16 @@ def default_image_args(lst=305, ndvi=0.8,
7575 et_reference_resample = 'nearest' ,
7676 et_reference_date_type = None ,
7777 dt_source = 18 ,
78- elev_source = 67 ,
79- elr_flag = False ,
8078 tcorr_source = 0.9744 ,
8179 tmax_source = 310.15 ,
80+ dt_scale_factor = None ,
81+ elev_source = 67 ,
82+ elr_flag = False ,
83+ et_fraction_type = 'alfalfa' ,
84+ reflectance_type = 'TOA' ,
8285 dt_resample = 'nearest' ,
8386 tmax_resample = 'nearest' ,
8487 tcorr_resample = 'nearest' ,
85- et_fraction_type = 'alfalfa' ,
86- reflectance_type = 'TOA' ,
8788 ):
8889 return {
8990 'image' : default_image (lst = lst , ndvi = ndvi ),
@@ -93,15 +94,16 @@ def default_image_args(lst=305, ndvi=0.8,
9394 'et_reference_resample' : et_reference_resample ,
9495 'et_reference_date_type' : et_reference_date_type ,
9596 'dt_source' : dt_source ,
96- 'elev_source' : elev_source ,
97- 'elr_flag' : elr_flag ,
9897 'tcorr_source' : tcorr_source ,
9998 'tmax_source' : tmax_source ,
99+ 'dt_scale_factor' : dt_scale_factor ,
100+ 'elev_source' : elev_source ,
101+ 'elr_flag' : elr_flag ,
102+ 'et_fraction_type' : et_fraction_type ,
103+ 'reflectance_type' : reflectance_type ,
100104 'dt_resample' : dt_resample ,
101105 'tmax_resample' : tmax_resample ,
102106 'tcorr_resample' : tcorr_resample ,
103- 'et_fraction_type' : et_fraction_type ,
104- 'reflectance_type' : reflectance_type ,
105107 }
106108
107109
@@ -113,15 +115,16 @@ def default_image_obj(lst=305, ndvi=0.8,
113115 et_reference_resample = 'nearest' ,
114116 et_reference_date_type = None ,
115117 dt_source = 18 ,
116- elev_source = 67 ,
117- elr_flag = False ,
118118 tcorr_source = 0.9744 ,
119119 tmax_source = 310.15 ,
120+ dt_scale_factor = None ,
121+ elev_source = 67 ,
122+ elr_flag = False ,
123+ et_fraction_type = 'alfalfa' ,
124+ reflectance_type = 'TOA' ,
120125 dt_resample = 'nearest' ,
121126 tmax_resample = 'nearest' ,
122127 tcorr_resample = 'nearest' ,
123- et_fraction_type = 'alfalfa' ,
124- reflectance_type = 'TOA' ,
125128 ):
126129 return ssebop .Image (** default_image_args (
127130 lst = lst , ndvi = ndvi ,
@@ -131,15 +134,16 @@ def default_image_obj(lst=305, ndvi=0.8,
131134 et_reference_resample = et_reference_resample ,
132135 et_reference_date_type = et_reference_date_type ,
133136 dt_source = dt_source ,
134- elev_source = elev_source ,
135- elr_flag = elr_flag ,
136137 tcorr_source = tcorr_source ,
137138 tmax_source = tmax_source ,
139+ dt_scale_factor = dt_scale_factor ,
140+ elev_source = elev_source ,
141+ elr_flag = elr_flag ,
142+ et_fraction_type = et_fraction_type ,
143+ reflectance_type = reflectance_type ,
138144 dt_resample = dt_resample ,
139145 tmax_resample = tmax_resample ,
140146 tcorr_resample = tcorr_resample ,
141- et_fraction_type = et_fraction_type ,
142- reflectance_type = reflectance_type ,
143147 ))
144148
145149
@@ -153,14 +157,15 @@ def test_Image_init_default_parameters():
153157 assert m ._dt_source == 'projects/earthengine-legacy/assets/projects/usgs-ssebop/dt/daymet_median_v6'
154158 assert m ._tcorr_source == 'FANO'
155159 assert m ._tmax_source == 'projects/earthengine-legacy/assets/projects/usgs-ssebop/tmax/daymet_v4_mean_1981_2010'
156- assert m ._elr_flag == False
157160 assert m ._dt_min == 5
158161 assert m ._dt_max == 25
159- assert m ._dt_resample == 'bilinear'
162+ assert m ._dt_scale_factor == None
160163 assert m ._elev_source == None
164+ assert m ._elr_flag == False
165+ assert m .reflectance_type == 'SR'
166+ assert m ._dt_resample == 'bilinear'
161167 assert m ._tmax_resample == 'bilinear'
162168 assert m ._tcorr_resample == 'bilinear'
163- assert m .reflectance_type == 'SR'
164169
165170
166171# Todo: Break these up into separate functions?
@@ -222,7 +227,9 @@ def test_Image_lst_properties():
222227
223228@pytest .mark .parametrize (
224229 'elev_source' ,
225- [None , '' , 'DEADBEEF' ]
230+ [None ],
231+ # TODO: Non-image strings should raise an exception
232+ # ['', 'DEADBEEF']
226233 # TODO: Check what happens if source is an image collection
227234 # [None, '', 'DEADBEEF']
228235)
@@ -356,6 +363,27 @@ def test_Image_dt_source_exception():
356363 utils .getinfo (default_image_obj (dt_source = '' ).dt )
357364
358365
366+ @pytest .mark .parametrize (
367+ 'dt_source, factor, doy, xy, expected' ,
368+ [
369+ ['projects/usgs-ssebop/dt/daymet_median_v6' , 0.01 , SCENE_DOY , TEST_POINT , 20.77 ],
370+ ['projects/usgs-ssebop/dt/daymet_median_v6' , 1.0 , SCENE_DOY , TEST_POINT , 2077 ],
371+ # Scale factor is only applied to collection ID sources
372+ ['projects/usgs-ssebop/dt/daymet_median_v2' , 2.0 , SCENE_DOY , TEST_POINT , 2 * 19.5982 ],
373+ ['DAYMET_MEDIAN_V2' , 2.0 , SCENE_DOY , TEST_POINT , 19.5982 ],
374+ # None will default to 0.01 for v6 and fall back to 1.0 for all other sources
375+ ['projects/usgs-ssebop/dt/daymet_median_v6' , None , SCENE_DOY , TEST_POINT , 20.77 ],
376+ ['projects/usgs-ssebop/dt/daymet_median_v2' , None , SCENE_DOY , TEST_POINT , 19.5982 ],
377+ ]
378+ )
379+ def test_Image_dt_scale_factor (dt_source , factor , doy , xy , expected , tol = 0.001 ):
380+ """Test that dT scale factor changes the dT values"""
381+ m = default_image_obj (dt_source = dt_source , dt_scale_factor = factor )
382+ m ._doy = doy
383+ output = utils .point_image_value (ee .Image (m .dt ), xy )
384+ assert abs (output ['dt' ] - expected ) <= tol
385+
386+
359387@pytest .mark .parametrize (
360388 'doy, dt_min, dt_max' ,
361389 [
0 commit comments