[GRASS-dev] [GRASS GIS] #3891: t.rast.algebra: if clause with two conditions does not work properly

GRASS GIS trac at osgeo.org
Thu Aug 15 05:56:17 PDT 2019

#3891: t.rast.algebra: if clause with two conditions does not work properly
 Reporter:  veroandreo                 |      Owner:  grass-dev@…
     Type:  defect                     |     Status:  new
 Priority:  normal                     |  Milestone:  7.8.0
Component:  Temporal                   |    Version:  unspecified
 Keywords:  t.rast.algebra, r.mapcalc  |        CPU:  Unspecified
 Platform:  Unspecified                |
 I have a daily lst time series that I converted to celsius degrees. I want
 to count how many days per year have LST >= 20 and <= 30. So, I first do
 the following:

 t.rast.algebra expression="tmean_higher20_lower30 = if(lst_daily_celsius
 >= 20.0 && lst_daily_celsius <= 30.0, lst_daily_celsius, null())"
 basename=tmean_higher20_lower30 suffix=gran nprocs=7

 with the intention of using t.rast.aggregate afterwards.

 However, without any error, the `t.rast.algebra` command produces either
 an empty STRDS or one full of null maps if I use the -n flag.

 If I run the corresponding `r.mapcalc` command for a single date, it works
 as expected. Region is properly set, input maps have values in the proper
 range. No idea what's wrong. I have used this command before and it worked
 just fine. It is indeed something very simple for t.rast.algebra.

 The only odd thing I see when I do a dry run is how it builds the
 r.mapcalc command, that in the second part of the condition it puts
 parenthesis, but I don't know much python as to judge that.

 ['EQUAL'] False False False True && & False False False
 lst_2014_01_01 at italy_LST_1km_daily_reconstructed_daily >=
 20.0&&(lst_2014_01_01 at italy_LST_1km_daily_reconstructed_daily <= 30.0)
 lst_2014_01_02 at italy_LST_1km_daily_reconstructed_daily >=
 20.0&&(lst_2014_01_02 at italy_LST_1km_daily_reconstructed_daily <= 30.0)

 [rest skipped]

 lst_2018_12_31 at italy_LST_1km_daily_reconstructed_daily >=
 20.0&&(lst_2018_12_31 at italy_LST_1km_daily_reconstructed_daily <= 30.0)
 build_condition_cmd_list ['EQUAL']
 ['EQUAL'] False False False False None None False False False
 {'STDS': {'name': 'tmean_higher20_lower30',
           'stdstype': 'strds',
           'temporal_type': 'absolute'},
  'processes': [{'flags': ['overwrite'],
                 'inputs': [('expression',
 'tmean_higher20_lower30_2014_01_01=if(lst_2014_01_01 at italy_LST_1km_daily_reconstructed_daily
                             '>= '
 '20.0&&(lst_2014_01_01 at italy_LST_1km_daily_reconstructed_daily '
                             '<= 30.0), '
 'lst_2014_01_01 at italy_LST_1km_daily_reconstructed_daily, '
                            ('region', 'current')],
                 'name': 'r.mapcalc',
                 'outputs': []},

 [rest skipped]

  'register': [('tmean_higher20_lower30_2014_01_01',
                '2014-01-01 00:00:00',
                '2014-01-02 00:00:00'),
                '2014-01-02 00:00:00',
                '2014-01-03 00:00:00'),

 [rest skipped]

                '2018-12-31 00:00:00',
                '2019-01-01 00:00:00')],
  'remove': []}

 I attach the full output of the dry run.

 I tested with python2 and python3, same behavior. I use grass-dev in
 Fedora 30.

Ticket URL: <https://trac.osgeo.org/grass/ticket/3891>
GRASS GIS <https://grass.osgeo.org>

More information about the grass-dev mailing list