climix issueshttps://git.smhi.se/climix/climix/-/issues2023-01-25T20:16:53Zhttps://git.smhi.se/climix/climix/-/issues/52Correctly implement cell_methods2023-01-25T20:16:53ZKlaus ZimmermannCorrectly implement cell_methodsThe `cell_method` information from the metadata file has to be put correctly into the output.The `cell_method` information from the metadata file has to be put correctly into the output.https://git.smhi.se/climix/climix/-/issues/53Add yaml schema2023-03-31T14:03:40ZKlaus ZimmermannAdd yaml schemaHaving a schema to validate the yaml file against would guarantee syntactical consistency.Having a schema to validate the yaml file against would guarantee syntactical consistency.Klaus ZimmermannKlaus Zimmermannhttps://git.smhi.se/climix/climix/-/issues/57Generate command line help from index definitions2024-02-02T14:17:04ZKlaus ZimmermannGenerate command line help from index definitions0.22https://git.smhi.se/climix/climix/-/issues/118Multiple thresholds2023-05-03T13:00:27ZLars BärringMultiple thresholdsMany indices are based on a threshold. For many of these indices it is relevant to have several thresholds E.g. for Summer Days the threshold is tasmax > 25 degC. It is often requested to have alternative thresholds e.g. 21, 23, 25, 27, ...Many indices are based on a threshold. For many of these indices it is relevant to have several thresholds E.g. for Summer Days the threshold is tasmax > 25 degC. It is often requested to have alternative thresholds e.g. 21, 23, 25, 27, 29 degC.
The index name should then be txgtn (TBC).
Cf. #73https://git.smhi.se/climix/climix/-/issues/141Backlog2024-02-02T10:46:11ZKlaus ZimmermannBacklogThere are a few things that we went with because they made sense at the time that I want to double check again.
This issue is a place to collect them.
- `normalize_axis` in index functions. Is it really necessary to accommodate negative...There are a few things that we went with because they made sense at the time that I want to double check again.
This issue is a place to collect them.
- `normalize_axis` in index functions. Is it really necessary to accommodate negative axis arguments and is this the way to do it?
- Do we need this strong separation of dask and numpy implementations? After some changes (perhaps both in numpy and dask) it seems that now even numpy functions will generally return dask arrays if presented with such.https://git.smhi.se/climix/climix/-/issues/150Implement Extreme Value Statistics2023-10-25T11:44:17ZLars BärringImplement Extreme Value StatisticsImplement basic Extreme Value statistics. Could use https://git.smhi.se/a001257/returnvalue/tree/classes as starting point. This code is still very much in development.Implement basic Extreme Value statistics. Could use https://git.smhi.se/a001257/returnvalue/tree/classes as starting point. This code is still very much in development.https://git.smhi.se/climix/climix/-/issues/156Refactor metadata dataclasses to contain constructors as classmethods2023-03-31T14:03:31ZKlaus ZimmermannRefactor metadata dataclasses to contain constructors as classmethodsThere are a number of factory-methods for dataclasses in metadata.py. It would be good to move them to classmethods in the respective dataclasses.There are a number of factory-methods for dataclasses in metadata.py. It would be good to move them to classmethods in the respective dataclasses.Klaus ZimmermannKlaus Zimmermannhttps://git.smhi.se/climix/climix/-/issues/176advanced drought related indices2023-04-27T07:43:55ZLars Bärringadvanced drought related indicesThe indices SPI and SPEI are included in the ET-SCI list, but has so far been beyond the horizon. However I just saw a [python implementation](https://github.com/monocongo/climate_indices) that seems to be solid enough in terms of instit...The indices SPI and SPEI are included in the ET-SCI list, but has so far been beyond the horizon. However I just saw a [python implementation](https://github.com/monocongo/climate_indices) that seems to be solid enough in terms of institutional support and interesting for their approach towards large data efficiency. @a002160 have a look at some point -- something we could benefit from hooking up to? The other indices on their list are well established and widely used, but typically not considered as "indices in sense where we are coming from".Joakim LöwJoakim Löwhttps://git.smhi.se/climix/climix/-/issues/177Counting exceedance above/below threshold across differernt datasets.2023-02-13T15:14:03ZLars BärringCounting exceedance above/below threshold across differernt datasets.We have numerous indices counting exceedance above/below a fixed threshold. There is need to be able to carry out such calculations across different datasets that may have different reference climate (i.e. there are "biases"...). In a si...We have numerous indices counting exceedance above/below a fixed threshold. There is need to be able to carry out such calculations across different datasets that may have different reference climate (i.e. there are "biases"...). In a simplistic way, and without invoking bias adjustment of the input data, this could be done by carrying out a quantile mapping of the threshold applied to the reference data. For this we new a couple of new index functions
We need a couple of new functions:
1. index function to calculate a percentile rank based on a fixed threshold, e.g. `tx{TT}rank` etc. This have to be done over some reference period, typically a 30 year period like 1971-2000.
2. index function to calculate a percentile value based on **spatially varying** percentiles (e.g. produced by 1.). This have to be done over a reference period, which typically is the same as used in 1.
3. index function to count the number of exceedances (above/below) a **spatially varying** threshold (e.g. produced by 2.)
In step 2 it should be possible to read the percentile array from the file produced by 1.
Step 2 and 3 could be combined. Irrespective of this, the result of 2 should be an auxiliary coordinate in step 3.https://git.smhi.se/climix/climix/-/issues/179tasmidpoint as standin for tas2023-04-04T21:15:34ZLars Bärringtasmidpoint as standin for tasThe well established indices were developed within the observational data communities. And in that context daily mean temperature, as in `tas: cell_method = "time: mean"`, brings about a lot of complications (given the limited and shifti...The well established indices were developed within the observational data communities. And in that context daily mean temperature, as in `tas: cell_method = "time: mean"`, brings about a lot of complications (given the limited and shifting observation times). Hence they settled for the draconian solution that **daily mean temperature is defined as `(TN+TX)/2`**, which in terms of CF would be `tas: cell_method = "time: midpoint` (assuming that the time bound specify daily data!), where *`tas`* should have another name, such as `tasmidpoint`.
We should have the possibility to compute `tas`-based indices on `tasmidpoint`, which then should be calculated on the fly as if input data had been specified as `low_data: tasmin, high_data: tasmax`https://git.smhi.se/climix/climix/-/issues/192index function to calculate annual range of monthly means2023-02-13T15:14:38ZLars Bärringindex function to calculate annual range of monthly meansNew index function to carry out the following:
* from daily data calculate the monthly means for all months
* based on the monthly means calculate the annual span
Use case: for temperature this functionality would form the basis for c...New index function to carry out the following:
* from daily data calculate the monthly means for all months
* based on the monthly means calculate the annual span
Use case: for temperature this functionality would form the basis for calculating various continentality indiceshttps://git.smhi.se/climix/climix/-/issues/198Other kinds of parameters2023-06-14T11:09:25ZKlaus ZimmermannOther kinds of parametersRight now, we have three kinds of parameters: Quantities, operators, and reducers.
For some indices, we need parameters such as reference periods or maybe others.
To allow for the passing of these, different options are possible:
- Int...Right now, we have three kinds of parameters: Quantities, operators, and reducers.
For some indices, we need parameters such as reference periods or maybe others.
To allow for the passing of these, different options are possible:
- Introduce new kinds as needed (increasing code complexity, but making the index specification type-safer)
- Encode everything in the current kinds (reference period would be a quantity)
- Introduce some form of lightweight kind, say `kind: scalar` that supports simple data with no units. For this case reference period would probably be a string following the [cmip6 convention for time_range (see page 14f)](http://goo.gl/v1drZl)
@a001257, what do you think?https://git.smhi.se/climix/climix/-/issues/221Calculation of number of days exceeding a percentile from another experiment2023-02-13T15:15:15ZRamon Fuentes FrancoCalculation of number of days exceeding a percentile from another experimentIt would be great to have an index in which it is calculated the number of days exceeding a percentile (annually, seasonally and monthly), for example, the number of days in the experiment ssp585 exceeding P95 of precipitation in the his...It would be great to have an index in which it is calculated the number of days exceeding a percentile (annually, seasonally and monthly), for example, the number of days in the experiment ssp585 exceeding P95 of precipitation in the historical experiment. This index could be applied for the following variables: pr, tasmax, tasmin, tas.https://git.smhi.se/climix/climix/-/issues/222Add `__repr__` methods to all classes2024-02-02T10:43:52ZKlaus ZimmermannAdd `__repr__` methods to all classeshttps://git.smhi.se/climix/climix/-/issues/251time.coord check for meaningful amount of time steps2023-06-09T14:04:32ZRenate Wilcketime.coord check for meaningful amount of time stepsclimix calculates an index also for a "year" with only one time step, resulting in a wrong value. That happens when the input data (daily fields) have been created from hourly data but the last time step is the first (00:00:00) of the ne...climix calculates an index also for a "year" with only one time step, resulting in a wrong value. That happens when the input data (daily fields) have been created from hourly data but the last time step is the first (00:00:00) of the next year.
It would be good to have a check for something like number of years mus result in at least number of days to avoid index created from one hour or day.https://git.smhi.se/climix/climix/-/issues/254Climix fails when using threaded or single-threaded scheduler2022-09-15T12:27:03ZJoakim LöwClimix fails when using threaded or single-threaded schedulerRunning Climix with `-d threaded` or `-d single-threaded` causes a crash. The corresponding scheduler classes (LocalThreadsScheduler and SingleThreadedScheduler) seems to be missing an expected 'client' member.
$ climix -s -e -l err...Running Climix with `-d threaded` or `-d single-threaded` causes a crash. The corresponding scheduler classes (LocalThreadsScheduler and SingleThreadedScheduler) seems to be missing an expected 'client' member.
$ climix -s -e -l error -d threaded -x txx /home/rossby/prod/201137/netcdf/day/tasmax_EUR-11_ICHEC-EC-EARTH_historical_r12i1p1_SMHI-RCA4_v1_day_19700101-19701231.nc
Traceback (most recent call last):
File "/home/sm_joalo/.conda/envs/omni/bin/climix", line 33, in <module>
sys.exit(load_entry_point('climix', 'console_scripts', 'climix')())
File "/home/sm_joalo/dev/repos/climix/climix/main.py", line 179, in main
do_main(
File "/home/sm_joalo/dev/repos/climix/climix/main.py", line 158, in do_main
result = index(input_data, client=scheduler.client, sliced_mode=sliced_mode)
File "/home/sm_joalo/dev/repos/climix/climix/index.py", line 52, in __call__
aggregated = multicube_aggregated_by(
File "/home/sm_joalo/dev/repos/climix/climix/iris.py", line 148, in multicube_aggregated_by
aggregateby_cube = aggregator.post_process(
File "/home/sm_joalo/dev/repos/climix/climix/aggregators.py", line 65, in post_process
data = self.compute_pre_result(data, client, sliced_mode)
File "/home/sm_joalo/dev/repos/climix/climix/aggregators.py", line 42, in compute_pre_result
d = client.persist(d)
AttributeError: 'NoneType' object has no attribute 'persist'https://git.smhi.se/climix/climix/-/issues/270Add a warning and raise a error if datafiles from unrelated datasets are used...2023-05-29T09:09:58ZCarolina NilssonAdd a warning and raise a error if datafiles from unrelated datasets are used together, e.g. tasmin and TNWhen running Climix with two input files from different datasets that uses two different variable names, e.g., tasmin and TN. Climix creates two separate cubes (which is correct), however, Climix only runs the index computation on one of...When running Climix with two input files from different datasets that uses two different variable names, e.g., tasmin and TN. Climix creates two separate cubes (which is correct), however, Climix only runs the index computation on one of them. This can be misleading for the user and go unnoticed. To improve the handling of this case a warning followed by aborting immediately should happen IF there are more than one cube after the concatenation AND if there is only one data variable required for the index calculation.https://git.smhi.se/climix/climix/-/issues/280new index request: number of events2023-09-12T08:41:46ZRenate Wilckenew index request: number of eventsI wish for an index that gives the "number of events", where an event would be (in my case).
Where event is defined as: (T > 95%) x number of day in a row. Where T can be tmean, tmax, or tmin.
Concrete example is (Tmax > 20C) at least 3 ...I wish for an index that gives the "number of events", where an event would be (in my case).
Where event is defined as: (T > 95%) x number of day in a row. Where T can be tmean, tmax, or tmin.
Concrete example is (Tmax > 20C) at least 3 days in a row.https://git.smhi.se/climix/climix/-/issues/281Climix API2023-06-09T14:05:16ZCarolina NilssonClimix APISome users use the functions in Climix and their own scripts which can be problematic in some cases. We need to take a decision on how one should use Climix, i.e. if we should limit and test the functions and create some sort of Climix API.Some users use the functions in Climix and their own scripts which can be problematic in some cases. We need to take a decision on how one should use Climix, i.e. if we should limit and test the functions and create some sort of Climix API.https://git.smhi.se/climix/climix/-/issues/285Implementation of index function for WSDI, CSDI2023-10-26T13:13:52ZLars BärringImplementation of index function for WSDI, CSDIWSDI and CSDI are (briefly) defined by ETCCDI and ET-SCI as
|VarName | OUTPUT_long_name |
|----------|------------------------------...WSDI and CSDI are (briefly) defined by ETCCDI and ET-SCI as
|VarName | OUTPUT_long_name |
|----------|-----------------------------------------------------------------------------------------------------------------------|
| wsdi | Warm Spell Duration Index, count of days with at least 6 consecutive days when Tmax > 90th percentile |
| wsdi{ND} | User-defined Warm Spell Duration Index, count of days with at least {ND} consecutive days when Tmax > 90th percentile |
| csdi | Cold Spell Duration Index, count of days with at least 6 consecutive days when Tmin < 10th percentile |
| csdi{ND} | User-defined Cold Spell Duration Index, count of days with at least # consecutive days when Tmin < 10th percentile |