Commit 192229f3 authored by Marc-Antoine Drouin's avatar Marc-Antoine Drouin
Browse files

Merge branch 'release/v1.0.3'

parents ea341d0d 87576a47
......@@ -290,4 +290,12 @@ dim = time
type = $string$
long_name = alarm or warning status
units = 1
value = $reader_data$, info_flags
\ No newline at end of file
value = $reader_data$, info_flags
[h2_param]
dim = $none$
type = $integer$
long_name = is h2 parameter is on or off
flag_values = 0, 1
flag_meanings = off on
value = 0
\ No newline at end of file
;------------------------------------------------------------------------------
; raw2l1 user configuration file
;
; ___ __ _ _ ___ _ __
; | _ \/ \ | | | |(_ | | / |
; | v / /\ || 'V' | / /| |_`7 |
; |_|_\_||_|!_/ \_!|___|___||_|
;
; version: 2.1.8
; SIRTA IPSL/CNRS/EP 2014-2016
;
; for TOPROF netCDF-CF format
;
;------------------------------------------------------------------------------
; General configuration of the processing
;------------------------------------------------------------------------------
[conf]
reader_dir = reader
reader = vaisala_cl
netcdf_format = NETCDF4
netcdf4_compression = true
netcdf4_compression_level = 1
; Special option for the reader (optional)
;------------------------------------------------------------------------------
[reader_conf]
; time resolution in seconds
time_resolution = 3
missing_float = -999.
missing_int = -9
check_scale = true
; Variables required by TOPROF chosen format
;==============================================================================
; Global attribute of the netCDF file
;------------------------------------------------------------------------------
[global]
site_location = palaiseau
instrument_id = A
institution = IPSL (CNRS/ECole Polytechnique)
principal_investigator = SIRTA
instrument_type = CL31
title = PALAISEAU VAISALA CL31 SIRTA
history =
instrument_firmware_version = unknown
overlap_function = false
overlap_is_corrected = true
source = SIRTA
references =
comment =
Conventions = CF-1.0, UKMO-1.0.2
; Dimensions
;------------------------------------------------------------------------------
[time]
dim = time
type = $time$
standard_name = time
units = days since 1970-01-01 00:00:00
calendar = standard
value = $reader_data$, time
[range]
dim = range
type = $float$
long_name = range
units = m
value = $reader_data$, range
[layer]
dim = layer
type = $integer$
long_name = layer index of cloud base height
units = 1
value = $reader_data$, cbh_layer
[layer_clh]
dim = layer_clh
type = $integer$
long_name = layer index of cloud layer height
units = 1
value = $reader_data$, clh_layer
; variables
;------------------------------------------------------------------------------
[rcs_0]
dim = time, range
type = $double$
long_name = normalized range corrected signal
units = 1e-8 sr^-1.m^-1
missing_value = -999.
_FillValue = -999.
value = $reader_data$, rcs_0
[bckgrd_rcs_0]
dim = time
type = $double$
long_name = background light at internal ADC input
units = mV
missing_value = -999.
_FillValue = -999.
value = $reader_data$, bckgrd_rcs_0
[cloud_base_height]
dim = time, layer
type = $integer$
long_name = cloud base height
units = m
missing_value = -9
_FillValue = -9
value = $reader_data$, cbh
[time_resol]
dim = $none$
type = $integer$
long_name = time resolution
units = s
value = $reader_data$, time_resolution
[range_resol]
dim = $none$
type = $float$
long_name = range resolution
units = m
value = $reader_data$, range_resol
[tilt_angle]
dim = time
type = $float$
long_name = instrument tilt angle from vertical
units = degree
missing_value = -999.
_FillValue = -999.
value = $reader_data$, tilt_angle
[l0_wavelength]
dim = $none$
type = $float$
long_name = laser 0 wavelength
units = nm
value = 910
[l0_width]
type = $float$
dim = $none$
long_name = laser 0 line width
units = nm
value = NAN
[l0_beam_div]
type = $float$
dim = $none$
long_name = laser 0 beam divergence
units = rad
value = NAN
[l0_prf]
type = $float$
dim = $none$
long_name = laser 0 pulse repetition frequency
units = Hz
value = NAN
[t0_fov]
type = $float$
dim = $none$
long_name = telescope 0 field of view
units = rad
value = NAN
[t0_tilt]
type = $float$
dim = $none$
long_name = telescope 0 tilt angle wrt nadir
units = degree
value = NAN
[temperature_laser]
type = $float$
long_name = laser temperature
units = K
dim = time
missing_value = -999.
_FillValue = -999.
value = $reader_data$, laser_temp
[start_time]
dim = time
type = $time$
long_name = start time of measurements
units = days since 1970-01-01 00:00:00
calendar = standard
value = $reader_data$, start_time
[station_latitude]
dim = $none$
type = $float$
long_name = latitude
units = degrees_north
value = 48.7
[station_longitude]
dim = $none$
type = $float$
long_name = longitude
units = degrees_east
value = 2.2
[station_altitude]
dim = $none$
type = $float$
standard_name = altitude
long_name = altitude
units = m
value = 158
; Additional data available in CL31 files
;==============================================================================
[calibration_factor]
dim = $none$
type = $float$
long_name = preliminary calibration factor
units = 1
comment = preliminary calibration factor to be applied to normalized range corrected signal (rcs_0) for display purpose only
missing_value = -999.
_FillValue = -999.
value = 1.e8
; 1d
[sum_rcs0]
dim = time
type = $float$
long_name = sum of detected and normalized backscatter
units = sr^-1
missing_value = -999.
_FillValue = -999.
value = $reader_data$, integrated_rcs_0
[laser_energy]
dim = time
type = $float$
long_name = laser pulse energy, percent of nominal factory setting
units = %
missing_value = -999.
_FillValue = -999.
value = $reader_data$, laser_energy
[window_transmission]
dim = time
type = $float$
long_name = window transmission estimate
units = %
missing_value = -999.
_FillValue = -999.
value = $reader_data$, window_transmission
; 2d
[clh]
dim = time, layer_clh
type = $integer$
long_name = cloud layer height
units = m
missing_value = -9
_FillValue = -9
value = $reader_data$, clh
[cloud_amount]
type = $short$
long_name = cloud fraction in eighths
units = 1
dim = time, layer_clh
missing_value = -9
_FillValue = -9
value = $reader_data$, cloud_amount
; string variables
[error_string]
dim = time
type = $string$
long_name = alarm or warning status
units = 1
flag_values = 0, W, A
flags_meanings = None warning alarm
value = $reader_data$, alarm
[alarm_infos]
dim = time
type = $string$
long_name = alarm or warning status
units = 1
value = $reader_data$, info_flags
[h2_param]
dim = $none$
type = $integer$
long_name = is h2 parameter is on or off
flag_values = 0, 1
flag_meanings = off on
value = 1
\ No newline at end of file
......@@ -31,6 +31,7 @@
# 20170220 : MAD SIRTA add configuration for P7. use submodule for raw2l1
# : v1.0.1 correct problem with path of configuration file
# : v1.0.2 correct source for LISA configuration file
# 20170303 : v1.0.3 add material to process 3s SIRTA CL31 data
#
# SIRTA 2013
#==============================================================================
......
#!/bin/bash
#==============================================================================
# moy1min.sh
#
# Ce script sert à faire l'interface entre le traitement a qui calcule
# les moyennes 1 minutes des données radflux en zone 2 et le traitement b qui
# prend en charge le contrôle qualité des données.
#
# Le traitement a en plus des moyennes 1 min calcule aussi la valeur minnimum
# et maximum utilisé pour calculer la moyenne et fourni l'écart-type
#
# Le traitement b permet soit de faire un contrôle qualité automatique soit
# d'utiliser un fichier de contrôle qualité généré par un opérateur pour filtrer
# les données
#
# Parametres d'entree :
#----------------------
# -h : Affiche l'aide
# -v : Affiche la version du script
# -d : Date a traiter (format AAAAMMJJ)
# -e : Fichier contenant la liste des fichiers d'entree
# -s : Fichier contenant la liste des fichiers de sortie
# -c : Nom du fichier de configuration
# -n : Niveau de deboggage
# -t : Repertoire de travail
#
# Historique :
#-------------
# 20161206 : MAD SIRTA Creation v1.00
# 20170220 : MAD SIRTA add configuration for P7. use submodule for raw2l1
# : v1.0.1 correct problem with path of configuration file
# : v1.0.2 correct source for LISA configuration file
# 20170303 : v1.0.3 add material to process 3s SIRTA CL31 data
#
# SIRTA 2013
#==============================================================================
#==============================================================================
# usage
#
# Cette fonction decrit l'utilisation et les parametres d'entree du script
#==============================================================================
function usage
{
echo -n "Utilisation de $NOM_PRGM : $NOM_PRGM [-h|-v] -d date -e liste_fich_entree "
echo -n "[[-e liste_fich_basse_entree]...] -s liste_fich_sortie -t rep_travail "
echo -n "-n niv_debogage"
echo
echo -e " -d\tseules les donnees appartenant a cette date sont selectionnees,"
echo -e " \tle format de la date est du type aaaammjj"
echo -e " -e\tliste des fichiers niveau 1 5s ou 1s"
echo -e " -s\tliste des fichiers niveau 1 1min a creer"
echo -e " -n\tniveau de debogage (0 a 3)"
echo -e " -v\taffiche la version du programme"
echo -e " -c\tfichier de configuration"
echo -e " -h\taffiche cette aide"
echo "Les fichiers a convertir doivent respecter la convention de nommage SIRTA."
}
#==============================================================================
# consignerMsg
#
# Enregistre les messages dans un fichier de log et les affiche sur la sortie
# standard. La variable globale ENTETE_MSG peut etre initialisee avant l'appel.
# Le message n'est affiche que si son numero de debugage est inferieur ou egale
# a celui contenu dans la variable d'environnement DEBUG
# $1 : message
# $2 : niveau de debogage
#==============================================================================
function consignerMsg
{
local heure=$(date +%d/%m/%Y,%H:%M:%S)
local niv_deb=$2
if [[ $# -gt 2 ]]; then
consignerMsg "consignerMsg attend au maximum deux arguments"
return 1
fi
[[ -z $niv_deb || $niv_deb -lt 0 ]] && niv_deb=0
if [[ $niv_deb -le $DEBUG ]]; then
if [[ -n "$ENTETE_MSG" ]]; then
echo "$heure, $ENTETE_MSG : $1"
else
echo "$heure, $1"
fi
fi
}
################################################################################
#
# Debut du script
#
################################################################################
NOM_PRGM=$(basename $0)
ENTETE_MSG=$NOM_PRGM
ERREUR=0
DEBUG=0
VERSION=1
REP_SOURCES=$(dirname $(readlink -f $0))
# date à partir de laquelle le h2 passe a on
H2_ON_DATE = $(date -u -d 20150520 +%s)
n=0
#------------------------------------------------------------------------------
# Recupere les parametres de la lignes de commande
#------------------------------------------------------------------------------
while getopts :d:e:s:t:n:c:hv option
do
case $option in
d) date="$OPTARG" ;;
h) usage
exit 0 ;;
v) echo $VERSION
exit 0 ;;
e) liste_entree[n]="$OPTARG"
let n++ ;;
s) liste_sortie=${OPTARG} ;;
t) REP_TRAVAIL=${OPTARG} ;;
n) DEBUG=${OPTARG} ;;
c) fich_conf="$OPTARG" ;;
# permet de sauter des options inconnues sans sortir de while
?) while [[ $OPTIND -le $# && ${!OPTIND:0:1} != '-' ]]; do OPTIND=$((OPTIND+1)); done ;;
*) ERREUR=1 ;;
esac
done
DATE_AS_SECONDS = $(date -u -d $date +%s)
# RAW2L1 needed path
PYTHON="/opt/python_envs/python2/bin/python"
RAW2L1=${REP_SOURCES}"/sirta-raw2l1/raw2l1/raw2l1.py"
RAW2L1_LOGS=${REP_SOURCES}"/logs/raw2l1.log"
NCKS="/usr/bin/ncks"
#------------------------------------------------------------------------------
# verification des parametres
#------------------------------------------------------------------------------
if [[ $ERREUR != 0 ]]; then
usage
exit 1
fi
let n--
while [[ $n -ge 0 ]]
do
if [[ -z ${liste_entree[n]} ]]; then
consignerMsg "Il faut indiquer la liste des fichiers d'entree a traiter."
exit 1
fi
if [[ ! -f ${liste_entree[n]} ]]; then
consignerMsg "La liste de fichiers d'entree ${liste_entree[n]} est vide ou n'existe pas."
exit 1
fi
let n--
done
if [[ -z $liste_sortie ]]; then
consignerMsg "Il faut indiquer la liste des fichiers de sortie a creer."
exit 1
fi
if [[ ! -f $liste_sortie || ! -s $liste_sortie ]]; then
consignerMsg "La liste de fichiers de sortie $liste_sortie est vide ou n'existe pas."
exit 1
fi
if [[ -z $REP_TRAVAIL ]]; then
consignerMsg "Il faut indiquer un repertoire de travail."
exit 1
fi
if [[ ! -d $REP_TRAVAIL ]]; then
consignerMsg "Le repertoire de travail $REP_TRAVAIL n'existe pas."
exit 1
fi
#------------------------------------------------------------------------------
# Traitement
#------------------------------------------------------------------------------
# Recuperation des fichiers d entree radflux
# On verifie d'abord si le fichier 1s existe si il n'existe pas on cherche le 5s
# Si on n'en trouve aucun on quitte
#------------------------------------------------------------------------------
n=0
if [[ $DATE_AS_SECONDS -lt H2_ON_DATE ]]
then
# fichier avec h2 off
while read l
do
fich_entree[n]=$l
let n++
done < ${liste_entree[0]}
RAW2L1_CONF=${REP_SOURCES}"/conf_vaisala_cl31_sirta3s-h2off.ini"
else
# fichier avec h2 on
while read l
do
fich_entree[n]=$l
let n++
done < ${liste_entree[1]}
RAW2L1_CONF=${REP_SOURCES}"/conf_vaisala_cl31_sirta3s-h2on.ini"
fi
# test pour savoir si fichier du jour disponible
if [[ ${#fich_entree[*]} -lt 2 ]]
then
consignerMsg "Pas de fichier du jour a traiter"
exit 1
fi
# Recuperation des fichiers de sortie
#------------------------------------------------------------------------------
fich_sortie=$(cat $liste_sortie)
# fichier temporaire
tmpfile=$(mktemp $REP_TRAVAIL/test_XXXXX.nc)
# conversion avec raw2l1
#------------------------------------------------------------------------------
cmd="$PYTHON $RAW2L1 '$date' $RAW2L1_CONF ${fich_entree[@]} $tmpfile -log $RAW2L1_LOGS -v info"
eval $cmd
# suppression des donnees qui ne correspondent pas au jour
#-----------------------------------------------------------------------------
date_as_days=$(($(date -u -d "$date" +%s)/86400))
date_p1=$(($date_as_days + 1))
cmd="$NCKS -h -O -d time,${date_as_days}.0,${date_p1}.0 $tmpfile $fich_sortie"
consignerMsg "suppression des données n'appartenant au jour traite"
eval $cmd
\rm $tmpfile
if (($? > 1)); then
exit 1
fi
exit 0
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment