Changeset 179 for trunk/src/proj_field.m
- Timestamp:
- Jan 9, 2011, 12:56:28 PM (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/proj_field.m
r174 r179 40 40 % Role = 'scalar': (default) represents a scalar field 41 41 % = 'coord': represents a set of unstructured coordinates, whose 42 % space dimension is given by the last array dimension (called ' nb_dim').42 % space dimension is given by the last array dimension (called 'NbDim'). 43 43 % = 'coord_x', 'coord_y', 'coord_z': represents a separate set of 44 44 % unstructured coordinate x, y or z 45 45 % = 'vector': represents a vector field whose number of components 46 % is given by the last dimension (called ' nb_dim')46 % is given by the last dimension (called 'NbDim') 47 47 % = 'vector_x', 'vector_y', 'vector_z' :represents the x, y or z component of a vector 48 48 % = 'warnflag' : provides a warning flag about the quality of data in a 'Field', default=0, no warning … … 100 100 end 101 101 102 % OBSOLETE102 %% OBSOLETE 103 103 if isfield(ObjectData,'XMax') && ~isempty(ObjectData.XMax) 104 104 ObjectData.RangeX(1)=ObjectData.XMax; … … 120 120 end 121 121 %%%%%%%%%% 122 123 %% apply projection depending on the object style 122 124 switch ObjectData.Style 123 125 case 'points' … … 131 133 [ProjData,errormsg] = proj_line(FieldData,ObjectData); 132 134 end 133 %A FAIRE : GERER MASK134 135 case 'plane' 135 % if isfield(FieldData,'NbDim') & isequal(FieldData.NbDim,3)136 % ProjData= proj_plane3D(FieldData,ObjectData);%137 % else138 136 [ProjData,errormsg] = proj_plane(FieldData,ObjectData); 139 % end140 137 case 'volume' 141 138 [ProjData,errormsg] = proj_volume(FieldData,ObjectData); … … 300 297 %DimIndices(ind_1)=[]; %suppress singleton dimensions 301 298 % indxy=find(DimVarIndex(DimIndices));%select dimension variables (DimIndices non zero) 302 % nb_dim=length(DimIndices)%number of space dimensions303 nb_dim=numel(VarType.coord);299 %NbDim=length(DimIndices)%number of space dimensions 300 NbDim=numel(VarType.coord); 304 301 Coord_z=[]; 305 302 Coord_y=[]; 306 303 Coord_x=[]; 307 for idim=1: nb_dim %loop on space dimensions304 for idim=1:NbDim %loop on space dimensions 308 305 test_interp(idim)=0;%test for coordiate interpolation (non regular grid), =0 by default 309 306 test_coord(idim)=0;%test for defined coordinates, =0 by default … … 1005 1002 %----------------------------------------------------------------- 1006 1003 idimvar=0; 1007 [CellVarIndex,NbDim ,VarTypeCell,errormsg]=find_field_indices(FieldData);1004 [CellVarIndex,NbDimVec,VarTypeCell,errormsg]=find_field_indices(FieldData); 1008 1005 if ~isempty(errormsg) 1009 1006 errormsg=['error in proj_field/proj_plane:' errormsg]; … … 1016 1013 icoord=0; 1017 1014 nbcoord=0;%number of added coordinate variables brought by projection 1015 nbvar=0; 1018 1016 for icell=1:length(CellVarIndex) 1019 if NbDim(icell)<2 1017 NbDim=NbDimVec(icell); 1018 if NbDim<2 1020 1019 continue 1021 1020 end … … 1129 1128 %ProjData.DimValue=[ProjData. 1130 1129 %length(coord_X)]; 1131 nbvar=0; 1130 1132 1131 for ivar=VarIndex %transfer variables to the projection plane 1133 1132 VarName=FieldData.ListVarName{ivar}; … … 1143 1142 ProjData.VarDimName=[ProjData.VarDimName DimCell]; 1144 1143 nbvar=nbvar+1; 1145 if isfield(FieldData,'VarAttribute') & length(FieldData.VarAttribute) >=ivar1144 if isfield(FieldData,'VarAttribute') && length(FieldData.VarAttribute) >=ivar 1146 1145 ProjData.VarAttribute{nbvar}=FieldData.VarAttribute{ivar}; 1147 1146 end … … 1215 1214 1216 1215 %% case of input fields defined on a structured grid 1217 else 1218 AYName=FieldData.ListVarName{VarType.coord(1)};%name of input x coordinate (name preserved on projection) 1219 AXName=FieldData.ListVarName{VarType.coord(2)};%name of input y coordinate (name preserved on projection) 1216 else 1217 VarName=FieldData.ListVarName{VarIndex(1)};%get the first variable of the cell to get the input matrix dimensions 1218 eval(['DimValue=size(FieldData.' VarName ');'])%input matrix dimensions 1219 DimValue(find(DimValue==1))=[];%remove singleton dimensions 1220 NbDim=numel(DimValue);%update number of space dimensions 1221 nbcolor=1; %default number of 'color' components: third matrix index without corresponding coordinate 1222 if NbDim>=3 1223 if NbDim>3 1224 errormsg='matrices with more than 3 dimensions not handled'; 1225 return 1226 else 1227 VarType.coord 1228 if numel(find(VarType.coord))==2% the third matrix dimension does not correspond to a space coordinate 1229 nbcolor=DimValue(3); 1230 DimValue(3)=[]; %number of 'color' components updated 1231 NbDim=2;% space dimension set to 2 1232 end 1233 end 1234 end 1235 AYName=FieldData.ListVarName{VarType.coord(NbDim-1)};%name of input x coordinate (name preserved on projection) 1236 AXName=FieldData.ListVarName{VarType.coord(NbDim)};%name of input y coordinate (name preserved on projection) 1220 1237 eval(['AX=FieldData.' AXName ';']) 1221 1238 eval(['AY=FieldData.' AYName ';']) 1222 VarName=FieldData.ListVarName{VarIndex(1)};%get the first variable of the cell to get the input matrix dimensions1223 eval(['DimValue=size(FieldData.' VarName ');'])%input matrix dimensions1224 1239 ListDimName=FieldData.VarDimName{VarIndex(1)}; 1225 ProjData.ListVarName=[{AYName} {AXName} ProjData.ListVarName]; %TODO: check if it already exists in Projdata (several cells) 1226 ProjData.VarDimName=[{AYName} {AXName} ProjData.VarDimName]; 1227 nbcolor=1; %default 1228 for idim=1:length(ListDimName) 1229 DimName=ListDimName{idim}; 1230 if strcmp(DimName,'rgb')||strcmp(DimName,'nb_coord')||strcmp(DimName,'nb_coord_i') 1231 nbcolor=DimValue(idim); 1232 DimValue(idim)=[]; 1233 end 1234 if isequal(DimName,'nb_coord_j')% NOTE: CASE OF TENSOR NOT TREATED 1235 DimValue(idim)=[]; 1236 end 1237 end 1238 ind_1=find(DimValue==1); 1240 ProjData.ListVarName=[ProjData.ListVarName {AYName} {AXName}]; %TODO: check if it already exists in Projdata (several cells) 1241 ProjData.VarDimName=[ProjData.VarDimName {AYName} {AXName}]; 1242 1243 % for idim=1:length(ListDimName) 1244 % DimName=ListDimName{idim}; 1245 % if strcmp(DimName,'rgb')||strcmp(DimName,'nb_coord')||strcmp(DimName,'nb_coord_i') 1246 % nbcolor=DimValue(idim); 1247 % DimValue(idim)=[]; 1248 % end 1249 % if isequal(DimName,'nb_coord_j')% NOTE: CASE OF TENSOR NOT TREATED 1250 % DimValue(idim)=[]; 1251 % end 1252 % end 1239 1253 Coord_z=[]; 1240 1254 Coord_y=[]; 1241 1255 Coord_x=[]; 1242 nb_dim=numel(DimValue); 1243 for idim=1: nb_dim %loop on space dimensions1256 1257 for idim=1:NbDim %loop on space dimensions 1244 1258 test_interp(idim)=0;%test for coordiate interpolation (non regular grid), =0 by default 1245 1259 ivar=VarType.coord(idim);% index of the variable corresponding to the current dimension … … 1268 1282 end 1269 1283 if DY==0 1270 DY=abs(DCoord_min( nb_dim-1));1271 end 1272 npY=1+round(abs(Coord{ nb_dim-1}(end)-Coord{nb_dim-1}(1))/DY);%nbre of points after interpol1284 DY=abs(DCoord_min(NbDim-1)); 1285 end 1286 npY=1+round(abs(Coord{NbDim-1}(end)-Coord{NbDim-1}(1))/DY);%nbre of points after interpol 1273 1287 if DX==0 1274 DX=abs(DCoord_min( nb_dim));1275 end 1276 npX=1+round(abs(Coord{ nb_dim}(end)-Coord{nb_dim}(1))/DX);%nbre of points after interpol1277 for idim=[1: nb_dim]1288 DX=abs(DCoord_min(NbDim)); 1289 end 1290 npX=1+round(abs(Coord{NbDim}(end)-Coord{NbDim}(1))/DX);%nbre of points after interpol 1291 for idim=[1:NbDim] 1278 1292 if test_interp(idim) 1279 1293 DimValue(idim)=1+round(abs(Coord{idim}(end)-Coord{idim}(1))/abs(DCoord_min(idim)));%nbre of points after possible interpolation on a regular gri 1280 1294 end 1281 1295 end 1282 Coord_y=linspace(Coord{nb_dim-1}(1),Coord{nb_dim-1}(end),npY); 1283 test_direct_y=test_direct(nb_dim-1); 1284 Coord_x=linspace(Coord{nb_dim}(1),Coord{nb_dim}(end),npX); 1285 test_direct_x=test_direct(nb_dim); 1286 DAX=DCoord_min(nb_dim); 1287 DAY=DCoord_min(nb_dim-1); 1288 if nb_dim==3 1289 DZ=abs(DCoord_min(1)); 1290 Coord_z=linspace(Coord{1}(1),Coord{1}(end),DimValue(1)); 1291 test_direct_z=test_direct(1); 1292 end 1296 Coord_y=linspace(Coord{NbDim-1}(1),Coord{NbDim-1}(end),npY); 1297 test_direct_y=test_direct(NbDim-1); 1298 Coord_x=linspace(Coord{NbDim}(1),Coord{NbDim}(end),npX); 1299 test_direct_x=test_direct(NbDim); 1300 DAX=DCoord_min(NbDim); 1301 DAY=DCoord_min(NbDim-1); 1293 1302 minAX=min(Coord_x); 1294 1303 maxAX=max(Coord_x); … … 1311 1320 YMin=min(ycor_new); 1312 1321 end 1313 DXinit=(maxAX-minAX)/(DimValue( 2)-1);1314 DYinit=(maxAY-minAY)/(DimValue( 1)-1);1322 DXinit=(maxAX-minAX)/(DimValue(NbDim)-1); 1323 DYinit=(maxAY-minAY)/(DimValue(NbDim-1)-1); 1315 1324 if DX==0 1316 1325 DX=DXinit; … … 1318 1327 if DY==0 1319 1328 DY=DYinit; 1329 end 1330 if NbDim==3 1331 DZ=(Coord{1}(end)-Coord{1}(1))/(DimValue(1)-1); 1332 if ~test_direct(1) 1333 DZ=-DZ; 1334 end 1335 Coord_z=linspace(Coord{1}(1),Coord{1}(end),DimValue(1)); 1336 test_direct_z=test_direct(1); 1320 1337 end 1321 1338 npX=floor((XMax-XMin)/DX+1); … … 1334 1351 % case with no rotation and interpolation 1335 1352 if isequal(ProjMode,'projection') && isequal(Phi,0) && isequal(Theta,0) && isequal(Psi,0) 1336 if ~testXMin && ~testXMax && ~testYMin && ~testYMax && nb_dim==21353 if ~testXMin && ~testXMax && ~testYMin && ~testYMax && NbDim==2 1337 1354 ProjData=FieldData; 1338 1355 else 1339 if test_direct(1) 1340 min_ind1=ceil((YMin-Coord{1}(1))/DYinit)+1; 1341 max_ind1=floor((YMax-Coord{1}(1))/DYinit)+1; 1342 Ybound(1)=Coord{1}(1)+DYinit*(min_ind1-1); 1343 Ybound(2)=Coord{1}(1)+DYinit*(max_ind1-1); 1356 indY=NbDim-1; 1357 if test_direct(indY) 1358 min_indy=ceil((YMin-Coord{indY}(1))/DYinit)+1; 1359 max_indy=floor((YMax-Coord{indY}(1))/DYinit)+1; 1360 Ybound(1)=Coord{indY}(1)+DYinit*(min_indy-1); 1361 Ybound(2)=Coord{indY}(1)+DYinit*(max_indy-1); 1344 1362 else 1345 min_ind 1=ceil((Coord{1}(1)-YMax)/DYinit)+1;1346 max_ind 1=floor((Coord{1}(1)-YMin)/DYinit)+1;1347 Ybound(2)=Coord{ 1}(1)-DYinit*(max_ind1-1);1348 Ybound(1)=Coord{ 1}(1)-DYinit*(min_ind1-1);1349 end 1350 if test_direct( 2)==11351 min_ind 2=ceil((XMin-Coord{2}(1))/DXinit)+1;1352 max_ind 2=floor((XMax-Coord{2}(1))/DXinit)+1;1353 Xbound(1)=Coord{ 2}(1)+DXinit*(min_ind2-1);1354 Xbound(2)=Coord{ 2}(1)+DXinit*(max_ind2-1);1363 min_indy=ceil((Coord{indY}(1)-YMax)/DYinit)+1; 1364 max_indy=floor((Coord{indY}(1)-YMin)/DYinit)+1; 1365 Ybound(2)=Coord{indY}(1)-DYinit*(max_indy-1); 1366 Ybound(1)=Coord{indY}(1)-DYinit*(min_indy-1); 1367 end 1368 if test_direct(NbDim)==1 1369 min_indx=ceil((XMin-Coord{NbDim}(1))/DXinit)+1; 1370 max_indx=floor((XMax-Coord{NbDim}(1))/DXinit)+1; 1371 Xbound(1)=Coord{NbDim}(1)+DXinit*(min_indx-1); 1372 Xbound(2)=Coord{NbDim}(1)+DXinit*(max_indx-1); 1355 1373 else 1356 min_ind 2=ceil((Coord{2}(1)-XMax)/DXinit)+1;1357 max_ind 2=floor((Coord{2}(1)-XMin)/DXinit)+1;1358 Xbound(2)=Coord{ 2}(1)+DXinit*(max_ind2-1);1359 Xbound(1)=Coord{ 2}(1)+DXinit*(min_ind2-1);1374 min_indx=ceil((Coord{NbDim}(1)-XMax)/DXinit)+1; 1375 max_indx=floor((Coord{NbDim}(1)-XMin)/DXinit)+1; 1376 Xbound(2)=Coord{NbDim}(1)+DXinit*(max_indx-1); 1377 Xbound(1)=Coord{NbDim}(1)+DXinit*(min_indx-1); 1360 1378 end 1361 if nb_dim==3 %TODO: to update 1362 min_ind3=ceil((Coord{1}(1)-ZMax)/DZinit)+1; 1363 max_ind2=floor((Coord{1}(2)-XMin)/DZinit)+1; 1364 Zbound(2)=Coord{1}(1)+DXinit*(max_ind2-1); 1365 Zbound(1)=Coord{1}(1)+DXinit*(min_ind2-1); 1379 iz_str=':'; %default 1380 if NbDim==3 1381 DimCell(1)=[]; %suppress z variable 1382 DimValue(1)=[]; 1383 %structured coordinates 1384 if test_direct(1) 1385 iz=ceil((ObjectData.Coord(1,3)-Coord{1}(1))/DZ)+1; 1386 else 1387 iz=ceil((Coord{1}(1)-ObjectData.Coord(1,3))/DZ)+1; 1388 end 1366 1389 end 1367 min_ind 1=max(min_ind1,1);% deals with margin (bound lower than the first index)1368 min_ind 2=max(min_ind2,1);1369 max_ind 1=min(max_ind1,DimValue(1));1370 max_ind 2=min(max_ind2,DimValue(2));1371 for ivar=VarIndex 1390 min_indy=max(min_indy,1);% deals with margin (bound lower than the first index) 1391 min_indx=max(min_indx,1); 1392 max_indy=min(max_indy,DimValue(1)); 1393 max_indx=min(max_indx,DimValue(2)); 1394 for ivar=VarIndex% loop on non coordinate variables 1372 1395 VarName=FieldData.ListVarName{ivar}; 1373 1396 ProjData.ListVarName=[ProjData.ListVarName VarName]; … … 1376 1399 ProjData.VarAttribute{length(ProjData.ListVarName)}=FieldData.VarAttribute{ivar}; 1377 1400 end 1378 eval(['ProjData.' VarName '=FieldData.' VarName '(min_ind1:max_ind1,min_ind2:max_ind2,:) ;']); 1401 if NbDim==3 1402 eval(['ProjData.' VarName '=squeeze(FieldData.' VarName '(iz,min_indy:max_indy,min_indx:max_indx));']); 1403 else 1404 eval(['ProjData.' VarName '=FieldData.' VarName '(min_indy:max_indy,min_indx:max_indx,:);']); 1405 end 1379 1406 end 1380 1407 eval(['ProjData.' AYName '=[Ybound(1) Ybound(2)];']) %record the new (projected ) y coordinates … … 1382 1409 end 1383 1410 else % case with rotation and/or interpolation 1384 if isempty(Coord_z)%2D case1411 if NbDim==2 %2D case 1385 1412 [X,Y]=meshgrid(coord_x_proj,coord_y_proj);%grid in the new coordinates 1386 1413 XIMA=ObjectData.Coord(1,1)+(X)*cos(Phi)-Y*sin(Phi);%corresponding coordinates in the original image … … 1436 1463 else %3D case 1437 1464 if isequal(Theta,0) & isequal(Phi,0) 1465 % unstructured z coordinate 1438 1466 test_sup=(Coord{1}>=ObjectData.Coord(1,3)); 1439 1467 iz_sup=find(test_sup); … … 1448 1476 eval(['ProjData.' VarName '=squeeze(FieldData.' VarName '(iz,:,:));'])% select the z index iz 1449 1477 %TODO : do a vertical average for a thick plane 1450 if test_interp(2) | test_interp(3)1478 if test_interp(2) || test_interp(3) 1451 1479 eval(['ProjData.' VarName '=interp2(Coord{3},Coord{2},ProjData.' VarName ',Coord_x,Coord_y'');']) 1452 1480 end … … 1461 1489 end 1462 1490 end 1463 1491 1464 1492 %% projection of velocity components in the rotated coordinates 1465 1493 if ~isequal(Phi,0) && length(ivar_U)==1 … … 1523 1551 % test for 3D fields 1524 1552 test3D=0; 1525 if isfield(FieldData,' nb_dim')1526 test3D=isequal(FieldData. nb_dim,3);1553 if isfield(FieldData,'NbDim') 1554 test3D=isequal(FieldData.NbDim,3); 1527 1555 end 1528 1556 test3C=test3D; %default 3 vel components … … 1829 1857 DimIndices(ind_1)=[]; %suppress singleton dimensions 1830 1858 % indxy=find(DimVarIndex(DimIndices));%select dimension variables (DimIndices non zero) 1831 nb_dim=length(DimIndices);%number of space dimensions1859 NbDim=length(DimIndices);%number of space dimensions 1832 1860 Coord_z=[]; 1833 1861 Coord_y=[]; 1834 1862 Coord_x=[]; 1835 1863 1836 for idim=1: nb_dim %loop on space dimensions1864 for idim=1:NbDim %loop on space dimensions 1837 1865 test_interp(idim)=0;%test for coordiate interpolation (non regular grid), =0 by default 1838 1866 ivar=DimVarIndex(DimIndices(idim));% index of the variable corresponding to the current dimension … … 1856 1884 end 1857 1885 end 1858 if nb_dim==21886 if NbDim==2 1859 1887 if DY==0 1860 1888 DY=abs(DCoord_min(1)); … … 1873 1901 DAX=DCoord_min(2); 1874 1902 DAY=DCoord_min(1); 1875 elseif nb_dim==31903 elseif NbDim==3 1876 1904 DZ=abs(DCoord_min(1)); 1877 1905 npz=1+round(abs(Coord{1}(end)-Coord{1}(1))/DZ);%nbre of points after interpolation … … 1937 1965 if isequal(ProjMode,'projection') && isequal(Phi,0) && isequal(Theta,0) && isequal(Psi,0) 1938 1966 if test_direct(1) 1939 min_ind 1=ceil((YMin-Coord{1}(1))/DYinit)+1;1940 max_ind 1=floor((YMax-Coord{1}(1))/DYinit)+1;1941 Ybound(1)=Coord{1}(1)+DYinit*(min_ind 1-1);1942 Ybound(2)=Coord{1}(1)+DYinit*(max_ind 1-1);1967 min_indy=ceil((YMin-Coord{1}(1))/DYinit)+1; 1968 max_indy=floor((YMax-Coord{1}(1))/DYinit)+1; 1969 Ybound(1)=Coord{1}(1)+DYinit*(min_indy-1); 1970 Ybound(2)=Coord{1}(1)+DYinit*(max_indy-1); 1943 1971 else 1944 min_ind 1=ceil((Coord{1}(1)-YMax)/DYinit)+1;1945 max_ind 1=floor((Coord{1}(1)-YMin)/DYinit)+1;1946 Ybound(2)=Coord{1}(1)-DYinit*(max_ind 1-1);1947 Ybound(1)=Coord{1}(1)-DYinit*(min_ind 1-1);1972 min_indy=ceil((Coord{1}(1)-YMax)/DYinit)+1; 1973 max_indy=floor((Coord{1}(1)-YMin)/DYinit)+1; 1974 Ybound(2)=Coord{1}(1)-DYinit*(max_indy-1); 1975 Ybound(1)=Coord{1}(1)-DYinit*(min_indy-1); 1948 1976 end 1949 1977 if test_direct(2)==1 1950 min_ind 2=ceil((XMin-Coord{2}(1))/DXinit)+1;1951 max_ind 2=floor((XMax-Coord{2}(1))/DXinit)+1;1952 Xbound(1)=Coord{2}(1)+DXinit*(min_ind 2-1);1953 Xbound(2)=Coord{2}(1)+DXinit*(max_ind 2-1);1978 min_indx=ceil((XMin-Coord{2}(1))/DXinit)+1; 1979 max_indx=floor((XMax-Coord{2}(1))/DXinit)+1; 1980 Xbound(1)=Coord{2}(1)+DXinit*(min_indx-1); 1981 Xbound(2)=Coord{2}(1)+DXinit*(max_indx-1); 1954 1982 else 1955 min_ind 2=ceil((Coord{2}(1)-XMax)/DXinit)+1;1956 max_ind 2=floor((Coord{2}(1)-XMin)/DXinit)+1;1957 Xbound(2)=Coord{2}(1)+DXinit*(max_ind 2-1);1958 Xbound(1)=Coord{2}(1)+DXinit*(min_ind 2-1);1983 min_indx=ceil((Coord{2}(1)-XMax)/DXinit)+1; 1984 max_indx=floor((Coord{2}(1)-XMin)/DXinit)+1; 1985 Xbound(2)=Coord{2}(1)+DXinit*(max_indx-1); 1986 Xbound(1)=Coord{2}(1)+DXinit*(min_indx-1); 1959 1987 end 1960 min_ind 1=max(min_ind1,1);% deals with margin (bound lower than the first index)1961 min_ind 2=max(min_ind2,1);1962 max_ind 1=min(max_ind1,DimValue(1));1963 max_ind 2=min(max_ind2,DimValue(2));1988 min_indy=max(min_indy,1);% deals with margin (bound lower than the first index) 1989 min_indx=max(min_indx,1); 1990 max_indy=min(max_indy,DimValue(1)); 1991 max_indx=min(max_indx,DimValue(2)); 1964 1992 for ivar=VarIndex 1965 1993 VarName=FieldData.ListVarName{ivar}; 1966 1994 ProjData.ListVarName=[ProjData.ListVarName VarName]; 1967 %ProjData.VarDimIndex=[ProjData.VarDimIndex [ nb_dim-1 nb_dim]];1995 %ProjData.VarDimIndex=[ProjData.VarDimIndex [NbDim-1 NbDim]]; 1968 1996 if length(FieldData.VarAttribute)>=ivar 1969 1997 ProjData.VarAttribute{length(ProjData.ListVarName)}=FieldData.VarAttribute{ivar}; 1970 1998 end 1971 eval(['ProjData.' VarName '=FieldData.' VarName '(min_ind 1:max_ind1,min_ind2:max_ind2) ;']);1999 eval(['ProjData.' VarName '=FieldData.' VarName '(min_indy:max_indy,min_indx:max_indx) ;']); 1972 2000 end 1973 2001 else
Note: See TracChangeset
for help on using the changeset viewer.