script.R 13.3 KB
Newer Older
Heraut Louis's avatar
Heraut Louis committed
# \\\
Heraut Louis's avatar
Heraut Louis committed
# Copyright 2021-2022 Louis Héraut*1
Heraut Louis's avatar
Heraut Louis committed
#
# *1   INRAE, France
#      louis.heraut@inrae.fr
#
# This file is part of ash R toolbox.
#
# ash R toolbox is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or (at
# your option) any later version.
#
# ash R toolbox is distributed in the hope that it will be useful, but 
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with ash R toolbox.  If not, see <https://www.gnu.org/licenses/>.
# ///
#
#
# script.R
#
# Script file to manage the trend analysis of the Adour-Garonne basin.
# Performs the necessary calls to processing and plotting functions in
# order to realise the hydrologic trend analysis of stations according
# to the input parameters. The nearest area belove is where you need to
# write your prefer parameters for the analysis. See the 'README.txt'
# file for more information.


############## START OF REGION TO MODIFY (without risk) ##############
Heraut Louis's avatar
Heraut Louis committed
# Path to the data
Heraut Louis's avatar
Heraut Louis committed
computer_data_path = 
    "/home/louis/Documents/bouleau/INRAE/CDD_stationnarite/data"
    # "C:\\Users\\louis.heraut\\Documents\\CDD_stationnarite\\data"
# Work path (it needs to end with '/ASH' directory)
Heraut Louis's avatar
Heraut Louis committed
computer_work_path = 
    "/home/louis/Documents/bouleau/INRAE/CDD_stationnarite/ASH"
    # "C:\\Users\\louis.heraut\\Documents\\CDD_stationnarite\\ASH"
Heraut Louis's avatar
Heraut Louis committed

Heraut Louis's avatar
Heraut Louis committed
## BANQUE HYDRO
# Path to the directory where Banque Hydro (BH) data is stored
# from the work path
filedir = 
    # ""
    "BanqueHydro_Export2021"


Heraut Louis's avatar
Heraut Louis committed
## MANUAL SELECTION
# Name of the file that will be analysed from the BH directory
# (if 'all', all the file of the directory will be chosen)
        # "S2235610_HYDRO_QJM.txt",
        # "P1712910_HYDRO_QJM.txt",
        # "P0885010_HYDRO_QJM.txt",
        # "O5055010_HYDRO_QJM.txt",
        # "O0384010_HYDRO_QJM.txt",
        # "S4214010_HYDRO_QJM.txt",
        "Q7002910_HYDRO_QJM.txt",
        "Q0214010_HYDRO_QJM.txt"
        # "O3035210_HYDRO_QJM.txt",
        # "O0554010_HYDRO_QJM.txt",
        # "O1584610_HYDRO_QJM.txt"
Heraut Louis's avatar
Heraut Louis committed

Heraut Louis's avatar
Heraut Louis committed

Heraut Louis's avatar
Heraut Louis committed
## AGENCE EAU ADOUR GARONNE SELECTION
# Path to the 'docx' list file of station from the Agence de l'eau
# Adour-Garonne that will be analysed
Heraut Louis's avatar
Heraut Louis committed
AEAGlistdir = 
Heraut Louis's avatar
Heraut Louis committed
    ""
Heraut Louis's avatar
Heraut Louis committed

Heraut Louis's avatar
Heraut Louis committed
AEAGlistname = 
    ""
    # "Liste-station_RRSE.docx" 
Heraut Louis's avatar
Heraut Louis committed
## NIVALE SELECTION
# Path to the 'txt' list file of station from INRAE that will be analysed
Heraut Louis's avatar
Heraut Louis committed
# Generated with :
# create_selection(computer_data_path, 'dirname', 'example.txt')
INRAElistdir =
Heraut Louis's avatar
Heraut Louis committed
    ""

Heraut Louis's avatar
Heraut Louis committed
INRAElistname = 
Heraut Louis's avatar
Heraut Louis committed
    # "example.txt"
Heraut Louis's avatar
Heraut Louis committed
    # "INRAE_selection.txt"
Heraut Louis's avatar
Heraut Louis committed
## TREND ANALYSIS
Heraut Louis's avatar
Heraut Louis committed
# Time period to analyse
Heraut Louis's avatar
Heraut Louis committed
periodAll = c("1800-01-01", "2020-12-31")
periodSub = c("1968-01-01", "2020-12-31")
Heraut Louis's avatar
Heraut Louis committed
trend_period = list(periodAll, periodSub)

# Time period to mean
Heraut Louis's avatar
Heraut Louis committed
period1 = c("1968-01-01", "1988-12-31")
period2 = c("2000-01-01", "2020-12-31")
Heraut Louis's avatar
Heraut Louis committed
mean_period = list(period1, period2)
Heraut Louis's avatar
Heraut Louis committed

Heraut Louis's avatar
Heraut Louis committed
# alpha the risk
alpha = 0.1
Heraut Louis's avatar
Heraut Louis committed
# Number of missing days per year before remove the year 
yearLac_day = 3

# Sampling span of the data
sampleSpan = c('05-01', '11-30')

Heraut Louis's avatar
Heraut Louis committed
## MAP
Heraut Louis's avatar
Heraut Louis committed
# Is the hydrological network needs to be plot
is_river = FALSE
Heraut Louis's avatar
Heraut Louis committed

Heraut Louis's avatar
Heraut Louis committed
############### END OF REGION TO MODIFY (without risk) ###############
Heraut Louis's avatar
Heraut Louis committed


Heraut Louis's avatar
Heraut Louis committed
## 1. FILE STRUCTURE _________________________________________________
Heraut Louis's avatar
Heraut Louis committed
# Set working directory
setwd(computer_work_path)

# Sourcing R file
Heraut Louis's avatar
Heraut Louis committed
source('processing/extract.R', encoding='UTF-8')
source('processing/format.R', encoding='UTF-8')
source('processing/analyse.R', encoding='UTF-8')
source('plotting/layout.R', encoding='UTF-8')
Heraut Louis's avatar
Heraut Louis committed
source('processing/results_manager.R', encoding='UTF-8')
Heraut Louis's avatar
Heraut Louis committed

# Result directory
resdir = file.path(computer_work_path, 'results')
if (!(file.exists(resdir))) {
  dir.create(resdir)
}
Heraut Louis's avatar
Heraut Louis committed
print(paste('resdir :', resdir))

# Figure directory
figdir = file.path(computer_work_path, 'figures')
if (!(file.exists(figdir))) {
  dir.create(figdir)
}
Heraut Louis's avatar
Heraut Louis committed
print(paste('figdir :', figdir))

Heraut Louis's avatar
Heraut Louis committed
# Resources directory
resources_path = file.path(computer_work_path, 'resources')
if (!(file.exists(resources_path))) {
  dir.create(resources_path)
Heraut Louis's avatar
Heraut Louis committed
}
Heraut Louis's avatar
Heraut Louis committed
print(paste('resources_path :', resources_path))
Heraut Louis's avatar
Heraut Louis committed

# Logo filename
logo_dir = 'logo'
Heraut Louis's avatar
Heraut Louis committed
AEAGlogo_file = 'agence-de-leau-adour-garonne_logo.png'
INRAElogo_file = 'Logo-INRAE_Transparent.png'
FRlogo_file = 'Republique_Francaise_RVB.png'

# Path to the shapefile for france contour from 'computer_data_path' 
fr_shpdir = 'map/france'
fr_shpname = 'gadm36_FRA_0.shp'

# Path to the shapefile for basin shape from 'computer_data_path' 
bs_shpdir = 'map/bassin'
bs_shpname = 'BassinHydrographique.shp'

# Path to the shapefile for sub-basin shape from 'computer_data_path' 
sbs_shpdir = 'map/sous_bassin'
sbs_shpname = 'SousBassinHydrographique.shp'

# Path to the shapefile for river shape from 'computer_data_path' 
rv_shpdir = 'map/river'
rv_shpname = 'CoursEau_FXX.shp'

Heraut Louis's avatar
Heraut Louis committed
## 2. SELECTION OF STATION ___________________________________________
# Initialization of null data frame if there is no data selected
Heraut Louis's avatar
Heraut Louis committed
df_data_AEAG = NULL
df_data_INRAE = NULL
df_meta_AEAG = NULL
df_meta_INRAE = NULL
Heraut Louis's avatar
Heraut Louis committed
### 2.1. Selection of the Agence de l'eau Adour-Garonne ______________
if (AEAGlistname != "") {
    
    # Get only the selected station from a list station file
Heraut Louis's avatar
Heraut Louis committed
    df_selec_AEAG = get_selection_AEAG(computer_data_path, 
                             AEAGlistdir,
                             AEAGlistname,
Heraut Louis's avatar
Heraut Louis committed
                             cnames=c('code',
                                      'station', 
                                      'BV_km2',
                                      'axe_principal_concerne',
                                      'longueur_serie',
                                      'commentaires',
                                      'choix'), 
Heraut Louis's avatar
Heraut Louis committed
                             c_num=c('BV_km2',
Heraut Louis's avatar
Heraut Louis committed
                                      'longueur_serie'))
    
    # Get filenames of the selection
Heraut Louis's avatar
Heraut Louis committed
    filename = df_selec_AEAG[df_selec_AEAG$ok,]$filename 
    # Extract metadata about selected stations
Heraut Louis's avatar
Heraut Louis committed
    df_meta_AEAG = extract_meta(computer_data_path, filedir, filename)
    # Extract data about selected stations
Heraut Louis's avatar
Heraut Louis committed
    df_data_AEAG = extract_data(computer_data_path, filedir, filename)
Heraut Louis's avatar
Heraut Louis committed
### 2.2. INRAE selection _____________________________________________
Heraut Louis's avatar
Heraut Louis committed
if (INRAElistname != ""){
    
    # Get only the selected station from a list station file
Heraut Louis's avatar
Heraut Louis committed
    df_selec_INRAE = get_selection_INRAE(computer_data_path, 
                                   INRAElistdir,
                                   INRAElistname)
Heraut Louis's avatar
Heraut Louis committed

    # Get filenames of the selection
Heraut Louis's avatar
Heraut Louis committed
    filename = df_selec_INRAE[df_selec_INRAE$ok,]$filename
    # Extract metadata about selected stations
Heraut Louis's avatar
Heraut Louis committed
    df_meta_INRAE = extract_meta(computer_data_path, filedir, filename)
    # Extract data about selected stations
Heraut Louis's avatar
Heraut Louis committed
    df_data_INRAE = extract_data(computer_data_path, filedir, filename)
Heraut Louis's avatar
Heraut Louis committed

Heraut Louis's avatar
Heraut Louis committed
### 2.3. Manual selection ____________________________________________
Heraut Louis's avatar
Heraut Louis committed
if (AEAGlistname == "" & INRAElistname == "") {
    # Extract metadata about selected stations
Heraut Louis's avatar
Heraut Louis committed
    df_meta_AEAG = extract_meta(computer_data_path, filedir, filename)
    # Extract data about selected stations
Heraut Louis's avatar
Heraut Louis committed
    df_data_AEAG = extract_data(computer_data_path, filedir, filename)
Heraut Louis's avatar
Heraut Louis committed

Heraut Louis's avatar
Heraut Louis committed
### 2.4. Data join ___________________________________________________
df_join = join_selection(df_data_AEAG, df_data_INRAE,
                         df_meta_AEAG, df_meta_INRAE)
df_data = df_join$data
Heraut Louis's avatar
Heraut Louis committed
df_meta = df_join$meta
Heraut Louis's avatar
Heraut Louis committed
## 3. ANALYSE ________________________________________________________
var = list(
    'QA',
    'QMNA',
    'VCN10',
    'tDEB',
    'tCEN'
)
Heraut Louis's avatar
Heraut Louis committed
type = list(
    'sévérité',
    'sévérité',
    'sévérité',
    'saisonnalité',
    'saisonnalité'
)
glose = list(
    "Moyenne annuelle du débit journalier",
    "Minimum annuel de la moyenne mensuelle du débit journalier",
    "Minimum annuel de la moyenne sur 10 jours du débit journalier",
    "Début d'étiage (jour de l'année de la première moyenne sur 10 jours sous le maximum des VCN10)",
    "Centre d'étiage (jour de l'année du VCN10)"
)

Heraut Louis's avatar
Heraut Louis committed
### 3.1. Compute other parameters for stations _______________________
Heraut Louis's avatar
Heraut Louis committed
# Time gap
Heraut Louis's avatar
Heraut Louis committed
df_meta = get_lacune(df_data, df_meta)
Heraut Louis's avatar
Heraut Louis committed
# Hydrograph
df_meta = get_hydrograph(df_data, df_meta, period=mean_period[[1]])$meta
Heraut Louis's avatar
Heraut Louis committed
### 3.2. Trend analysis ______________________________________________
# QA trend
Heraut Louis's avatar
Heraut Louis committed
res = get_QAtrend(df_data, df_meta,
                  period=trend_period,
                  alpha=alpha,
                  yearLac_day=yearLac_day)
df_QAdata = res$data
df_QAmod = res$mod
res_QAtrend = res$analyse

# QMNA tend
Heraut Louis's avatar
Heraut Louis committed
res = get_QMNAtrend(df_data, df_meta,
                    period=trend_period,
                    alpha=alpha,
                    sampleSpan=sampleSpan,
                    yearLac_day=yearLac_day)
df_QMNAdata = res$data
df_QMNAmod = res$mod
res_QMNAtrend = res$analyse

# VCN10 trend
Heraut Louis's avatar
Heraut Louis committed
res = get_VCN10trend(df_data, df_meta,
                     period=trend_period,
                     alpha=alpha,
                     sampleSpan=sampleSpan,
                     yearLac_day=yearLac_day)
df_VCN10data = res$data
df_VCN10mod = res$mod
res_VCN10trend = res$analyse

# Start date for low water trend
Heraut Louis's avatar
Heraut Louis committed
res = get_tDEBtrend(df_data, df_meta, 
                    period=trend_period,
                    alpha=alpha,
                    sampleSpan=sampleSpan,
                    thresold_type='VCN10',
                    select_longest=TRUE,
                    yearLac_day=yearLac_day)
df_tDEBdata = res$data
df_tDEBmod = res$mod
res_tDEBtrend = res$analyse

# Center date for low water trend
Heraut Louis's avatar
Heraut Louis committed
res = get_tCENtrend(df_data, df_meta, 
                    period=trend_period,
                    alpha=alpha,
                    sampleSpan=sampleSpan,
                    yearLac_day=yearLac_day)
df_tCENdata = res$data
df_tCENmod = res$mod
res_tCENtrend = res$analyse

### 3.3. Break analysis ______________________________________________
Heraut Louis's avatar
Heraut Louis committed
# df_break = get_break(res_QAtrend$data, df_meta)
# df_break = get_break(res_QMNAtrend$data, df_meta)
# df_break = get_break(res_VCN10trend$data, df_meta)
Heraut Louis's avatar
Heraut Louis committed
# histogram(df_break$Date, df_meta,
Heraut Louis's avatar
Heraut Louis committed
#           figdir=figdir)
Heraut Louis's avatar
Heraut Louis committed

# cumulative(df_break$Date, df_meta, dyear=8,
Heraut Louis's avatar
Heraut Louis committed
#           figdir=figdir)


Heraut Louis's avatar
Heraut Louis committed
## 4. SAVING _________________________________________________________
Heraut Louis's avatar
Heraut Louis committed
# for (v in var) {
#     df_datatmp = get(paste('df_', v, 'data', sep=''))
#     df_modtmp = get(paste('df_', v, 'mod', sep=''))
#     res_trendtmp = get(paste('res_', v, 'trend', sep=''))
#     # Modified data saving
#     write_dfdata(df_datatmp, df_modtmp, resdir, optdir='modified_data',
#                  filedir=v)
#     # Trend analysis saving
#     write_listofdf(res_trendtmp, resdir, optdir='trend_analyse',
#                    filedir=v)
# }
# res_tDEBtrend = read_listofdf(resdir, 'res_tDEBtrend')


Heraut Louis's avatar
Heraut Louis committed
## 5. PLOTTING _______________________________________________________
Heraut Louis's avatar
Heraut Louis committed
# Shapefile importation in order to it only once time
df_shapefile = ini_shapefile(resources_path,
Heraut Louis's avatar
Heraut Louis committed
                             fr_shpdir, fr_shpname,
                             bs_shpdir, bs_shpname,
                             sbs_shpdir, sbs_shpname,
Heraut Louis's avatar
Heraut Louis committed
                             rv_shpdir, rv_shpname, is_river=is_river)
Heraut Louis's avatar
Heraut Louis committed
### 5.1. Simple time panel to criticize station data _________________
# Plot time panel of debit by stations
Heraut Louis's avatar
Heraut Louis committed
# datasheet_layout(list(df_data, df_data),
                 # layout_matrix=c(1, 2),
                 # df_meta=df_meta,
                 # missRect=list(TRUE, TRUE), 
Heraut Louis's avatar
Heraut Louis committed
                 # var=list('Q', 'sqrt(Q)'), 
Heraut Louis's avatar
Heraut Louis committed
                 # info_header=TRUE,
                 # time_header=NULL,
                 # var_ratio=3,
                 # figdir=figdir,
                 # filename_opt='time')
Heraut Louis's avatar
Heraut Louis committed

Heraut Louis's avatar
Heraut Louis committed
### 5.2. Analysis layout _____________________________________________
Heraut Louis's avatar
Heraut Louis committed
datasheet_layout(toplot=c(
Heraut Louis's avatar
Heraut Louis committed
                     'datasheet',
                     'matrix',
                     'map'
Heraut Louis's avatar
Heraut Louis committed
                 ),
                 df_meta=df_meta,
Heraut Louis's avatar
Heraut Louis committed
                 df_data=list(
Heraut Louis's avatar
Heraut Louis committed
                     res_QAtrend$data,
                     res_QMNAtrend$data,
                     res_VCN10trend$data,
                     res_tDEBtrend$data,
Heraut Louis's avatar
Heraut Louis committed
                     res_tCENtrend$data
                 ),
Heraut Louis's avatar
Heraut Louis committed
                 df_trend=list(
Heraut Louis's avatar
Heraut Louis committed
                     res_QAtrend$trend,
                     res_QMNAtrend$trend,
                     res_VCN10trend$trend,
                     res_tDEBtrend$trend,
Heraut Louis's avatar
Heraut Louis committed
                     res_tCENtrend$trend
                 ),
Heraut Louis's avatar
Heraut Louis committed
                 var=var,
Heraut Louis's avatar
Heraut Louis committed
                 type=type,
                 glose=glose,
Heraut Louis's avatar
Heraut Louis committed
                 
Heraut Louis's avatar
Heraut Louis committed
                 layout_matrix=matrix(c(1, 2, 3, 4, 5), ncol=1),
Heraut Louis's avatar
Heraut Louis committed
                 
Heraut Louis's avatar
Heraut Louis committed
                 missRect=TRUE,
Heraut Louis's avatar
Heraut Louis committed
                 trend_period=trend_period,
                 mean_period=mean_period,
                 info_header=TRUE,
                 time_header=df_data,
                 foot_note=TRUE,
Heraut Louis's avatar
Heraut Louis committed
                 info_ratio=2, 
                 time_ratio=2, 
                 var_ratio=3,
Heraut Louis's avatar
Heraut Louis committed
                 foot_height=1.25,
Heraut Louis's avatar
Heraut Louis committed
                 df_shapefile=df_shapefile,
                 figdir=figdir,
Heraut Louis's avatar
Heraut Louis committed
                 filename_opt='',
Heraut Louis's avatar
Heraut Louis committed
                 resources_path=resources_path,
                 logo_dir=logo_dir,
Heraut Louis's avatar
Heraut Louis committed
                 AEAGlogo_file=AEAGlogo_file,
                 INRAElogo_file=INRAElogo_file,
                 FRlogo_file=FRlogo_file)