1 | ; |
---|
2 | ;+ |
---|
3 | ; |
---|
4 | ; .. _interpolswath.pro: |
---|
5 | ; |
---|
6 | ; ================= |
---|
7 | ; interpolswath.pro |
---|
8 | ; ================= |
---|
9 | ; |
---|
10 | ; DESCRIPTION |
---|
11 | ; =========== |
---|
12 | ; |
---|
13 | ; methode d'affectation des tb amsu sur grille de resolution |
---|
14 | ; fine pour eviter les pbs de trous entre les pixels |
---|
15 | ; |
---|
16 | ; tb du canal - dimension fova (30 points pour amsua) |
---|
17 | ; latlu |
---|
18 | ; lonlu memes dimensions que tb |
---|
19 | ; |
---|
20 | ; principe: on lit la fauchee, puis on calcule fova, distances de puis |
---|
21 | ; le centre de chaque pixel (en principe symetrique) |
---|
22 | ; on cree grid, de dimension ngrid pixels, depuis le centre |
---|
23 | ; jusqu'au bout du dernier pixel de chaque cote, avec une |
---|
24 | ; resolution fixee au diametre du pixel central ou la moitie (resol |
---|
25 | ; vaut 1 ou 2) |
---|
26 | ; |
---|
27 | ; on interpole les longitudes et latitudes en correspondance |
---|
28 | ; on affecte a chaque pixel nouveau la Tb originelle la plus proche |
---|
29 | ; en sortie on a une fauchee synthetique amsua reguliere |
---|
30 | ; TODO |
---|
31 | ; ===== |
---|
32 | ; |
---|
33 | ; lelod 20120530 |
---|
34 | ; faire evoluer le prgm pour l'inetrpolation des donnees AMSUB |
---|
35 | ; |
---|
36 | ; regler le pb des longitudes autour de 180 degres |
---|
37 | ; l'interpolation ne les gere pas et cree des points dans la zone AMMA... |
---|
38 | ; |
---|
39 | ; EVOLUTIONS |
---|
40 | ; ========== |
---|
41 | ; |
---|
42 | ; $Id$ |
---|
43 | ; |
---|
44 | ; $URL$ |
---|
45 | ; |
---|
46 | ; - fplod 20120417 |
---|
47 | ; |
---|
48 | ; * usage of key_performance |
---|
49 | ; |
---|
50 | ; - fplod 20111130T120358Z cratos (Linux) |
---|
51 | ; |
---|
52 | ; * minimal rest header |
---|
53 | ; |
---|
54 | ;- |
---|
55 | pro interpolswath, tb, latlu, lonlu, masklu, resol, nbgrid, tbint, latgrid, longrid, mask |
---|
56 | |
---|
57 | @common |
---|
58 | s = size(SCOPE_TRACEBACK(/STRUCTURE),/DIMENSION) |
---|
59 | routine = (SCOPE_TRACEBACK(/STRUCTURE))[s-1].Routine |
---|
60 | ; |
---|
61 | if key_performance EQ 1 THEN BEGIN |
---|
62 | time1 = SYSTIME(1) |
---|
63 | ENDIF |
---|
64 | ; |
---|
65 | pixelsize,pixatot,pixbtot,alongatot,alongbtot |
---|
66 | na=max(size(pixatot)) |
---|
67 | nnadir=na/2 |
---|
68 | pixa=pixatot[nnadir:(na-1)] |
---|
69 | fova=fltarr(na) |
---|
70 | fova[nnadir]=pixa[0]/2. |
---|
71 | fova[nnadir-1]=-pixa[0]/2. |
---|
72 | rterre=6400. |
---|
73 | deg=!pi/180. |
---|
74 | lat=latlu*deg |
---|
75 | lon=lonlu*deg |
---|
76 | mnadir=nnadir-1 |
---|
77 | ifov=indgen(na) |
---|
78 | for i=nnadir+1,na-1 do begin |
---|
79 | dist=rterre*acos(sin(lat(i-1))*sin(lat(i)) + cos(lat(i-1))*cos(lat(i))*cos(lon(i)-lon(i-1))) |
---|
80 | fova[i]=fova[i-1]+dist |
---|
81 | endfor |
---|
82 | for i=nnadir-2,0,-1 do begin |
---|
83 | dist=rterre*acos(sin(lat(i))*sin(lat(i+1)) + cos(lat(i))*cos(lat(i+1))*cos(lon(i)-lon(i+1))) |
---|
84 | ;print,i,dist |
---|
85 | fova[i]=fova[i+1]-dist |
---|
86 | endfor |
---|
87 | ;print,'fova' |
---|
88 | ;print,fova |
---|
89 | ;print,'pixatot' |
---|
90 | ;print,pixatot |
---|
91 | ;window,1 |
---|
92 | ;ploterr,ifov,fova,pixatot |
---|
93 | |
---|
94 | distmax=-min(fova)+max(fova)+max(pixa) |
---|
95 | dmax=distmax/2. |
---|
96 | delta= fix(pixa[0]/resol) |
---|
97 | ;print,'pas swath',delta |
---|
98 | ndemigrid=fix(dmax/delta)+1 |
---|
99 | if (dmax/delta-fix(dmax/delta) le 0.5) then ndemigrid=ndemigrid-1 |
---|
100 | nbgrid=ndemigrid*2 |
---|
101 | ;print,'nb pts',nbgrid, ' dmax',dmax |
---|
102 | |
---|
103 | grid2=indgen(ndemigrid)*delta+fova[nnadir] |
---|
104 | grid1=fltarr(ndemigrid) |
---|
105 | for i=0,ndemigrid-1 do begin |
---|
106 | grid1[i]=-grid2[ndemigrid-1-i] |
---|
107 | endfor |
---|
108 | ;alternative equivalente) |
---|
109 | ;for i=ndemigrid-1,0,-1 do grid1[i]=-(ndemigrid-i-1)*delta-fova[nnadir] |
---|
110 | grid=[grid1,grid2] |
---|
111 | ;print,grid |
---|
112 | ;print,tb |
---|
113 | tbint=fltarr(nbgrid) |
---|
114 | mask=intarr(nbgrid) |
---|
115 | for i=0,nbgrid-1 do begin |
---|
116 | ind=where(abs(grid[i]-fova) eq min(abs(grid[i]-fova)),nii) |
---|
117 | if nii eq 1 then begin |
---|
118 | tbint[i]=tb[ind] |
---|
119 | mask[i]=masklu[ind] |
---|
120 | endif else begin |
---|
121 | print,'pas de minimum?',nii |
---|
122 | endelse |
---|
123 | endfor |
---|
124 | |
---|
125 | ;for i=0,na-1 do begin |
---|
126 | ; ind=where(abs(grid-fova[i]) le pixatot[i]/2,nii) |
---|
127 | ; print,i,nii |
---|
128 | ; if nii ne 0 then begin |
---|
129 | ; tbint[ind]=tb[i] |
---|
130 | ; mask[ind]=masklu[i] |
---|
131 | ; endif |
---|
132 | ; if nii eq 0 then begin |
---|
133 | ; |
---|
134 | ;endfor |
---|
135 | |
---|
136 | |
---|
137 | latgrid=interpol(latlu,fova,grid) |
---|
138 | longrid=interpol(lonlu,fova,grid) |
---|
139 | |
---|
140 | ;print,tbint |
---|
141 | IF key_performance EQ 1 THEN BEGIN |
---|
142 | msg = report(['ppp : ' + routine + ' : durée totale ' $ |
---|
143 | + string(SYSTIME(1)-time1,format='(F12.6)')]) |
---|
144 | ENDIF |
---|
145 | ; |
---|
146 | end |
---|