source: ether_iasi_L1C/trunk/IASI_mot_2004_l1b_all_spots_V1.0 @ 27

Last change on this file since 27 was 27, checked in by cbipsl, 17 years ago

validation creation appli extraction L1C

  • Property svn:executable set to *
File size: 13.7 KB
Line 
1#!/bin/ksh
2##################################################################
3# extract_iasi.job
4# --------------------
5# Objet : permet d'extraire des orbites IASI une liste de mot
6# predefinie en plus de ceux demandes par l'utilisateur.
7
8# Usage : IASI_mot_2004_l1b -d Debut(aammjj),Fin(aammjj)
9#                    -iasi liste_de_mot_iasi (separes par ',' ou '-')
10#                    -amsu liste_de_mot_amsu (separes par ',' ou '-')
11#                    -s code_satellite (Metop, ...)
12#                    -lat latmin,latmax
13#                    -lon lonmin,lonmax
14#                    -idtm indice_terre_mer (0=mer,1=terre,2=mer+terre)
15#                    -idjn indice_jour_nuit (0=nuit,1=jour,2=nuit+jour)
16#                    [-c] (sortie format carto)
17# Remarques :
18#  - ordre des options sans importance
19#  - la virgule (',') est le seul separateur reconnu
20#  - le tiret ('-') permet de definir une plage de mots
21#  - les fichiers de sortie sont dans $PATH_Resu :
22#      /IASI_mots.Code_SatVersion.Saammjj.Eaammjj.mNbrMots
23#      /IASI_mots.Code_SatVersion.Saammjj.Eaammjj.mNbrMots.m15.info
24# [-c  /IASI_mots.Code_SatVersion.Saammjj.Eaammjj.mNbrMots_IASI-n°mot ]
25#  - par defaut, la zone geographique extraite est -90,90 en latitude
26#    et -180,180 en longitude
27#  - par defaut, l'extraction se fait pour mer+terre et jour+nuit
28# --------------------
29# Exemple :
30#
31#  IASI_mot_2004_l1b -d 910701,910730 -m 1,10-15,123 -s Metop
32#
33# --------------------
34# 01/07/2007 - R. Armante (LMD/ARA/IPSL) :
35#              erreur selection fichiers retenus en fonction
36#              datedeb et fin demandees ==> parametres M_stop et J_stop
37##################################################################
38
39##################################################################
40# Variables d'environnement
41# -------------------
42#PATH_Orbiasi_l1b="/data/sva/IASI_dev/lmd/New_version_v0.0/Data"
43#PATH_PROG="/data/sva/iasi_l1c/bin"
44#PATH_LOGS="/data/sva/iasi_l1c/logs"
45PROGRAMME="extract_iasi_words_all_spots"
46#PATH_Resu="/data/sva/IASI_dev/lmd/New_version_v0.0/Result"
47
48##################################################################
49# Recupere les options - verifie leur nombre
50# --------------------
51Carto="FALSE"
52Lati="-90,90"
53Long="-180,180"
54Indtm="2"
55Indjn="2"
56typeset -i NbrOptionOblig=0
57while [ $# -ge 1 ]
58do
59  case $1 in
60    -d) shift 1;Date="$1"; NbrOptionOblig=$(($NbrOptionOblig+1));;
61    -iasi) shift 1;Mot_iasi="$1"; NbrOptionOblig=$(($NbrOptionOblig+1));;
62    -s) shift 1;Sat="$1"NbrOptionOblig=$(($NbrOptionOblig+1));;
63    -rd) shift 1;PATH_Resu="$1"NbrOptionOblig=$(($NbrOptionOblig+1));;
64    -lat) shift 1;Lati="$1";;
65    -lon) shift 1;Long="$1";;
66    -idtm) shift 1;Indtm="$1";;
67    -idjn) shift 1;Indjn="$1";;
68    -logs) shift 1;file_logs="$1";;
69    -req) shift 1;req="$1";;
70    -c) Carto="TRUE";;
71    *) print 'Parameter ' $1 'is not defined in the script !!!'; echo "Parameter ' $1 'is not defined in the script !!!'" >> $PATH_LOGS/iasi_l1c_user_request_$req.txt; exit 1;;
72  esac
73  shift 1
74done
75
76TMPDIR="$PATH_Resu/tmpdir"
77
78
79if [ $NbrOptionOblig -ne 4 ]; then
80  echo $*
81  echo "ERREUR: toutes les options obligatoires ne sont pas remplies"
82  echo "USAGE : "$0" -d Debut(aammjj),Fin(aammjj) "
83  echo "                   -iasi  liste_de_canaux_iasi (separes par ',' ou '-')"
84  echo "                   -s code_satellite (Metop, ...)"
85  echo "                   -rd repertoire resultat"
86  echo "                  [-lat] latmin,latmax"
87  echo "                  [-lon] lonmin,lonmax"
88  echo "                  [-idtm] indice_terre_mer (0=mer,1=terre,2=mer+terre)"
89  echo "                  [-idjn] indice_jour_nuit (0=nuit,1=jour,2=nuit+jour)"
90  echo "                  [-c] (sortie format carto)"
91  exit 1
92fi
93
94conf_file="./conf.txt"
95while read line
96do
97        ll=${#line}
98
99        if [[ -n $(echo $line | grep PATH_PROG) ]] ; then
100                chem=`expr $ll - 11`
101                temp=`echo $line | cut -c11-$ll`
102                PATH_PROG=$temp
103        fi
104        if [[ -n $(echo $line | grep PATH_LOGS) ]] ; then
105                chem=`expr $ll - 11`
106                temp=`echo $line | cut -c11-$ll`
107                PATH_LOGS=$temp
108        fi
109        if [[ -n $(echo $line | grep PATH_SUN_WEB_SERVICES) ]] ; then
110                chem=`expr $ll - 23`
111                temp=`echo $line | cut -c23-$ll`
112                PATH_SUN_WEB_SERVICES=$temp
113        fi
114        if [[ -n $(echo $line | grep PATH_Orbiasi_l1b) ]] ; then
115                chem=`expr $ll - 18`
116                temp=`echo $line | cut -c18-$ll`
117                PATH_Orbiasi_l1b=$temp
118        fi
119        if [[ -n $(echo $line | grep PATH_TEMP) ]] ; then
120                chem=`expr $ll - 11`
121                temp=`echo $line | cut -c11-$ll`
122                PATH_TEMP=$temp
123        fi
124
125
126done < $conf_file
127
128echo "PATH_Orbiasi_l1b=$PATH_Orbiasi_l1b"
129
130
131##################################################################
132# affiche les valeurs passees
133# --------------------
134echo " "$0 $*
135echo "Parametres choisis:"
136echo "  Date     : "$Date 
137echo "  Airs TBs : "$Mot_iasi
138echo "  Satellite: "$Sat
139echo "  Latitude : "$Lati
140echo "  Longitude: "$Long
141echo "  Ind T/M  : "$Indtm
142echo "  Ind J/N  : "$Indjn
143echo "  Carto    : "$Carto
144
145if [ $Indjn -eq 0 ] ;then Filtre_jn='N';fi
146if [ $Indjn -eq 1 ] ;then Filtre_jn='J';fi
147if [ $Indjn -eq 2 ] ;then Filtre_jn='u';fi
148echo 'Filtre_jn' $Filtre_jn
149##################################################################
150# Argument Date
151# --------------------
152
153Date1=`echo $Date | cut -d, -f1`
154Date2=`echo $Date | cut -d, -f2`
155
156# Mise en place de l'environnement de travail
157# --------------------
158if [[ ! -d $PATH_Resu ]];
159then
160  echo "creation du repertoire : " $PATH_Resu
161  mkdir $PATH_Resu
162else
163  echo "WARNING : " $PATH_Resu" existe deja."
164  sleep 5
165# echo "  Ecraser les eventuels fichiers existant (o/n) ?"
166# read choix
167# case $choix in
168#   [Yy]|[Oo]) echo "  => Ecraser"; Ecrase="true";;
169#   [Nn])      echo "  => Conserver"; Ecrase="false";;
170#   *)         echo "  => Mode par defaut = conserver"; Ecrase="false";;
171# esac
172fi
173cd $PATH_Resu
174
175if [[ ! -d $TMPDIR ]];
176then
177  echo "creation d'un repertoire temporaire" $TMPDIR
178  mkdir $TMPDIR
179else
180  echo "WARNING : "$TMPDIR" existe deja." 
181  sleep 5
182fi
183
184cd $TMPDIR
185##################################################################
186# Liste les archives correspondant a la demande
187# --------------------
188# Date1=A1M1J1 et Date2=A2M2J2
189A1=`echo $Date1 | cut -c1-2`;A2=`echo $Date2 | cut -c1-2`
190M1=`echo $Date1 | cut -c3-4`;M2=`echo $Date2 | cut -c3-4`
191J1=`echo $Date1 | cut -c5-6`;J2=`echo $Date2 | cut -c5-6`
192H1=`echo $Date1 | cut -c7-8`;H2=`echo $Date2 | cut -c7-8`
193
194typeset -i Lati1=0
195typeset -i Lati2=0
196typeset -i Long1=0
197typeset -i Long1=0
198
199Lati1=`echo $Lati | cut -d, -f1`
200Lati2=`echo $Lati | cut -d, -f2`
201Long1=`echo $Long | cut -d, -f1`
202Long2=`echo $Long | cut -d, -f2`
203
204echo "Lati1=$Lati1"
205echo "Lati2=$Lati2"
206echo "Long1=$Long1"
207echo "Long2=$Long2"
208
209typeset -i -Z2 aa=$A1
210typeset -i -Z2 mm=$M1
211typeset -i -Z2 jj=$J1
212typeset -i -Z2 hh=$H1
213
214typeset -i lat1=0
215typeset -i lat2=0
216typeset -i lon1=0
217typeset -i lon2=0
218
219if [[ -f Orbites_PRV_erreur ]]; then
220  /bin/rm Orbites_PRV_erreur
221fi
222if [[ -f Orbites_PRV ]]; then
223  /bin/rm Orbites_PRV
224fi
225
226M_stop=12
227J_stop=31
228H_stop=23
229
230echo $aa$mm$jj $M_stop $J_stop $H_stop $A2
231while [[ $aa -le $A2 ]]; do
232echo $aa $A2
233  if [[ $aa -eq $A2 ]]; then M_stop=$M2 ; fi
234  while [[ $mm -le $M_stop ]]; do
235echo $mm $M_stop $M2 $A2
236    if [[ $mm -eq $M2 && $aa -eq $A2 ]]; then J_stop=$J2 ; fi
237    while [[ $jj -le $J_stop ]]; do
238        if [[ $jj -eq $J2 && $mm -eq $M2 ]]; then H_stop=$H2 ; fi
239        while [[ $hh -le $H_stop  ]]; do
240      #Date_jul=`$PATH_PROG/date_to_quant $aa$mm$jj`
241
242      #cd $PATH_Orbiasi_l1b
243        cd $PATH_Orbiasi_l1b/20$aa/$mm/$jj
244        print "$PATH_Orbiasi_l1b/20$aa/$mm/$jj"
245
246        #echo ">>>>>>>>"
247        #echo $PATH_Orbiasi_l1b
248        #echo "$PATH_Orbiasi_l1b/20$aa/$mm/$jj"
249        #echo ">>>>>>>>"
250      #for fich in iasi_20$aa$mm$jj??.tar
251      for fich in iasi_20$aa$mm$jj$hh.tar
252      do
253        cd $PATH_Orbiasi_l1b/20$aa/$mm/$jj
254
255        tar tf $fich >> $TMPDIR/list_tar_temp
256        cd $TMPDIR
257       
258        cat $TMPDIR/list_tar_temp  |grep "_20$aa$mm$jj$hh" | grep ".f" | while read fichF ;do
259        #cat list_tar_temp  |grep "_20$aa$mm$jj" | grep ".f" | while read fichF ;do
260                #test sur lat et lon
261
262                lat1=`echo $fichF | cut -d_ -f3`
263                lat2=`echo $fichF | cut -d_ -f5`
264                lon1=`echo $fichF | cut -d_ -f4`
265                lon2=`echo $fichF | cut -d_ -f6`
266       
267                lat1=$(($lat1-90))
268                lat2=$(($lat2-90))
269                lon1=$(($lon1-180))
270                lon2=$(($lon2-180))
271
272                test=1
273
274                if [[ $lat1 -ge $Lati1 && $lat1 -le $Lati2 || $lat2 -ge $Lati1 && $lat2 -le $Lati2 ]]; then
275                        if [[ $lon1 -lt $lon2 ]]; then
276                                if [[ $lon1 -ge $Long1 && $lon1 -le $Long2 || $lon2 -ge $Long1 && $lon2 -le $Long2 ]]; then
277                                        test=
278                                fi
279                        else
280                                if [[ $lon2 -ge $Long1 || $lon1 -le $Long2 ]]; then
281                                        test=0
282                                fi
283                        fi     
284                fi
285
286                if [[ $test -eq 0 ]]; then
287                        #echo "$fichF"
288                        cd $PATH_Orbiasi_l1b/20$aa/$mm/$jj
289                        tar xvf $fich $fichF
290                        cp $fichF $TMPDIR 
291                       
292                        echo $TMPDIR"/"$fichF >> $TMPDIR/Orbites_PRV
293                fi
294
295         done
296
297        /bin/rm $TMPDIR/list_tar_temp
298
299
300      done
301
302
303      #/bin/rm *.LT
304      #cd $TMPDIR
305      #ls $PATH_Orbiasi_l1b  |grep $aa$mm$jj$hh | grep ".f" | while read fichF ;do
306      #   echo $PATH_Orbiasi_l1b/$fichF >> $TMPDIR/Orbites_PRV
307      #done
308#     ls $PATH_Orbiasi_l1b/??$aa$mm$jj*.asc 2>> Orbites_PRV_erreur >> Orbites_PRV
309
310
311        if [[ $hh -eq $H_stop ]] ; then
312          break
313        fi
314
315
316      #rq: certains fichiers n'existent pas d'ou la redirection d'erreur
317      (( hh=$hh+1 )) 
318    done
319    #raz compteur jour pour mois suivant
320    hh=00
321    (( jj=$jj+1 ))
322    done
323    #raz compteur jour pour mois suivant
324    jj=01
325    (( mm=$mm+1 ))
326  done
327  #raz compteur jour pour annee suivante
328  mm=01
329  (( aa=$aa+1 ))
330done
331cd $TMPDIR
332if [[ ! -s Orbites_PRV ]]; then
333  echo "Erreur : aucune archive ne correspond a la requete"
334#  /bin/rm -R $TMPDIR
335  exit 1
336fi
337
338typeset -i Nb_Archives=0
339Nb_Archives=`cat Orbites_PRV | wc -l`
340echo "Nombre d'archives correspondant a la requete: "$Nb_Archives
341
342##################################################################
343# Traitement de la liste de mots
344# --------------------
345# Remplace les virgules par des espaces
346# --------------------
347set -A Mots_iasi `echo $Mot_iasi | sed y/,/' '/`
348# Complete la liste de mot si '-' rencontre
349# --------------------
350echo "Mots_iasi="${Mots_iasi[*]}
351NbrMots_iasi=0
352for elem in ${Mots_iasi[*]}
353do
354  if [[ $elem != *-* ]]; then
355    Liste_Mots_iasi[$NbrMots_iasi]=$elem
356    NbrMots_iasi=$(($NbrMots_iasi+1))
357  else
358    N1=`echo $elem | cut -d- -f1`
359    N2=`echo $elem | cut -d- -f2`
360    if [[ $N1 -ge $N2  ]]; then
361      echo "erreur mots:" $N1 ">=" $N2
362      exit 1
363    fi
364    typeset -i nb=$N1
365    while [[ nb -le $N2 ]] ;
366    do     
367      Liste_Mots_iasi[$NbrMots_iasi]=$nb
368      NbrMots_iasi=$(($NbrMots_iasi+1))
369      nb=nb+1
370    done
371  fi
372done
373echo ${Liste_Mots_iasi[*]}
374# Ajout des mots par defaut (29 30 31 35 36 37 39 228)
375# pour affichage uniquement, le Fortran les ajoute en "dur"
376# --------------------
377Liste_Mots=${Liste_Mots_iasi[*]}
378NbrMots=$(($NbrMots_iasi))
379echo $NbrMots ${Liste_Mots[*]}
380##################################################################
381# Fichier sortie
382# --------------------
383File=`echo "IASI_mots_all_spots_"$req"."$Sat$Version".S"$Date1".E"$Date2".m"$NbrMots`
384
385##################################################################
386# Affiche les arguments traites
387# --------------------
388echo "req=$req"
389cat > $File".info" <<EOF
390Recapitulatif des parametres:
391  Satellite et version: $Sat $Version
392  DateDebut: $Date1
393  DateFin  : $Date2
394  Latitude : $Lati
395  Longitude: $Long
396  Nombre total de mots: $NbrMots
397  Liste totale des mots: ${Liste_Mots[*]}
398  Fichier Sortie: $File
399EOF
400cat $File".info"
401
402##################################################################
403# Boucle sur les archives
404# --------------------
405FlagHeader="TRUE" #permet d'ecrire un header. Ne le faire que la 1ere fois!
406typeset -i CptPRV=1
407while read Archive
408do
409echo $Archive
410echo "Archive=$Archive"
411  # Execution du programme Fortran
412  # --------------------
413
414  $PATH_PROG/bufr $Archive
415  /bin/rm $Archive
416  ls |grep ".asc" > Orbites_PR
417  $PATH_PROG/$PROGRAMME $Carto $FlagHeader $Lati $Long $Indtm $Indjn Orbites_PR temp_file ${Liste_Mots[*]}
418  for fichF in $(<Orbites_PR) ; do /bin/rm $fichF ; done
419
420        echo "TMPDIR=$TMPDIR"
421        echo "PATH_Result=$PATH_Resu"
422
423        #cp Orbites_PR $PATH_PROG/Orb_PR
424  rm $TMPDIR/Orbites_PR
425
426  #on desactive le header pour la prochaine etape
427  FlagHeader="FALSE"
428  # Sauvegarde du resultat temporaire
429  # --------------------
430  cat temp_file >> $File
431 
432  # ====================
433  # Si option carto
434  # ====================
435  if [[ $Carto = "TRUE" ]]; then
436    for j in ${Mots_desire[*]};
437    do
438      #extract_iii complete les indices des mots par des zeros (ex:IASI-005)
439      #carto comprend l'indice sans completion (ex:IASI-5)
440      typeset -i -Z3 JJJ=$j
441      cat temp_file*$JJJ > $File"_IASI-"$j
442    done
443    #on desactive l'option carto pour la prochaine etape
444    #(evite de creer des fichiers trop long inutiles)
445    Carto="FALSE"
446    echo "WARNING : Option carto desactivee pour archives suivantes"
447  fi
448  # ====================
449
450  # Efface les fichiers temporaires
451  # --------------------
452 #/bin/rm temp_file*
453  #/bin/rm Orbites_PR
454
455  # Passe a l'archive suivante
456  # --------------------
457  (( CptPRV=$CptPRV+1 ))
458
459done < Orbites_PRV
460
461##################################################################
462# Sauvegarde des resultats
463# --------------------
464if [[ $Ecrase = "true" ]];
465then
466  /bin/mv -f $File* $PATH_TEMP/
467else
468  /bin/mv -fu $File* $PATH_TEMP/
469fi
470echo "Les fichiers resultats se trouvent dans : "$PATH_Resu
471##################################################################
472# Suppression du repertoire temporaire
473# --------------------
474echo "suppression du repertoire temporaire"
475#/bin/rm -r $PATH_Resu
Note: See TracBrowser for help on using the repository browser.