source: trunk/src/interpolswath.pro @ 528

Last change on this file since 528 was 528, checked in by pinsard, 12 years ago

prepare investigation on performance

  • Property svn:keywords set to URL Id
File size: 3.4 KB
Line 
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; regler le pb des longitudes autour de 180 degres
34; l'interpolation ne les gere pas et cree des points dans la zone AMMA...
35;
36; EVOLUTIONS
37; ==========
38;
39; $Id$
40;
41; $URL$
42;
43; - fplod 20120417
44;
45;   * usage of key_performance
46;
47; - fplod 20111130T120358Z cratos (Linux)
48;
49;   * minimal rest header
50;
51;-
52pro interpolswath, tb, latlu, lonlu, masklu, resol, nbgrid, tbint, latgrid, longrid, mask
53
54@common
55s = size(SCOPE_TRACEBACK(/STRUCTURE),/DIMENSION)
56routine = (SCOPE_TRACEBACK(/STRUCTURE))[s-1].Routine
57;
58if key_performance EQ 1 THEN BEGIN
59    time1 = SYSTIME(1)
60ENDIF
61;
62pixelsize,pixatot,pixbtot,alongatot,alongbtot
63na=max(size(pixatot))
64nnadir=na/2
65pixa=pixatot[nnadir:(na-1)]
66fova=fltarr(na)
67fova[nnadir]=pixa[0]/2.
68fova[nnadir-1]=-pixa[0]/2.
69rterre=6400.
70deg=!pi/180.
71lat=latlu*deg
72lon=lonlu*deg
73mnadir=nnadir-1
74ifov=indgen(na)
75for i=nnadir+1,na-1 do begin
76   dist=rterre*acos(sin(lat(i-1))*sin(lat(i)) + cos(lat(i-1))*cos(lat(i))*cos(lon(i)-lon(i-1)))
77   fova[i]=fova[i-1]+dist
78endfor
79for i=nnadir-2,0,-1 do begin
80   dist=rterre*acos(sin(lat(i))*sin(lat(i+1)) + cos(lat(i))*cos(lat(i+1))*cos(lon(i)-lon(i+1)))
81;print,i,dist
82   fova[i]=fova[i+1]-dist
83endfor
84;print,'fova'
85;print,fova
86;print,'pixatot'
87;print,pixatot
88;window,1
89 ;ploterr,ifov,fova,pixatot
90
91distmax=-min(fova)+max(fova)+max(pixa)
92dmax=distmax/2.
93delta= fix(pixa[0]/resol)
94;print,'pas swath',delta
95ndemigrid=fix(dmax/delta)+1
96if (dmax/delta-fix(dmax/delta) le 0.5) then ndemigrid=ndemigrid-1
97nbgrid=ndemigrid*2
98;print,'nb pts',nbgrid, ' dmax',dmax
99
100grid2=indgen(ndemigrid)*delta+fova[nnadir]
101grid1=fltarr(ndemigrid)
102for i=0,ndemigrid-1 do begin
103   grid1[i]=-grid2[ndemigrid-1-i]
104endfor
105;alternative equivalente)
106;for i=ndemigrid-1,0,-1 do grid1[i]=-(ndemigrid-i-1)*delta-fova[nnadir]
107grid=[grid1,grid2]
108;print,grid
109;print,tb
110tbint=fltarr(nbgrid)
111mask=intarr(nbgrid)
112for i=0,nbgrid-1 do begin
113   ind=where(abs(grid[i]-fova) eq min(abs(grid[i]-fova)),nii)
114      if nii eq 1 then begin
115         tbint[i]=tb[ind]
116         mask[i]=masklu[ind]
117      endif else begin
118         print,'pas de minimum?',nii
119      endelse
120   endfor
121
122;for i=0,na-1 do begin
123 ;  ind=where(abs(grid-fova[i]) le pixatot[i]/2,nii)
124  ; print,i,nii
125  ; if nii ne 0 then begin
126   ;   tbint[ind]=tb[i]
127  ;    mask[ind]=masklu[i]
128  ; endif
129  ; if nii eq 0 then begin
130  ;     
131;endfor
132
133
134latgrid=interpol(latlu,fova,grid)
135longrid=interpol(lonlu,fova,grid)
136
137;print,tbint
138IF key_performance EQ 1 THEN BEGIN
139   msg = report(['ppp : ' + routine + ' : durée totale ' $
140               + string(SYSTIME(1)-time1,format='(F12.6)')])
141ENDIF
142;
143end
Note: See TracBrowser for help on using the repository browser.