|
ocssw
1.0
|
00001 /* -------------------------------------------------------------------- */ 00002 /* l1subpix() - sub-samples and/or crops a level-1 record in place */ 00003 /* */ 00004 /* Returns 0 on succss, 1 on error. */ 00005 /* */ 00006 /* Notes: Only record fields which are filled by the L1 read routines */ 00007 /* must be updated here. All other fields will be filled later */ 00008 /* using the sub-sampled geometry and radiances. */ 00009 /* */ 00010 /* Written By: B. A. Franz */ 00011 /* -------------------------------------------------------------------- */ 00012 00013 #include <string.h> 00014 #include "filehandle.h" 00015 #include "l1_struc.h" 00016 00017 int l1subpix(filehandle *l1file, l1str *l1rec) 00018 { 00019 int32_t sp = l1file->spix; 00020 int32_t ep = l1file->epix; 00021 int32_t dp = l1file->dpix; 00022 00023 if ( (sp == 0) && (ep == l1file->npix-1) && dp == 1) 00024 return (0); 00025 00026 if (sp > ep || dp < 1 || dp > (ep - sp + 1)) { 00027 fprintf(stderr, 00028 "-E- %s Line %d: subpixel specification error (sp=%d,ep=%d,dp=%d).\n", 00029 __FILE__,__LINE__,sp,ep,dp); 00030 return (1); 00031 } 00032 00033 if (dp == 1) { 00034 00035 int32_t length; 00036 int32_t j; 00037 00038 l1rec->npix = ep - sp + 1; 00039 00040 length = l1rec->npix*sizeof(float); 00041 00042 memmove(l1rec->pixnum,&l1rec->pixnum[sp],l1rec->npix*sizeof(int32_t)); 00043 memmove(l1rec->nobs ,&l1rec->nobs [sp],l1rec->npix*sizeof(int32_t)); 00044 00045 memmove(l1rec->lon, &l1rec->lon [sp],length); 00046 memmove(l1rec->lat, &l1rec->lat [sp],length); 00047 memmove(l1rec->solz,&l1rec->solz[sp],length); 00048 memmove(l1rec->sola,&l1rec->sola[sp],length); 00049 memmove(l1rec->senz,&l1rec->senz[sp],length); 00050 memmove(l1rec->sena,&l1rec->sena[sp],length); 00051 00052 memmove(l1rec->alpha,&l1rec->alpha[sp],length); 00053 00054 memmove(l1rec->hilt ,&l1rec->hilt [sp],l1rec->npix*sizeof(char)); 00055 memmove(l1rec->stlight,&l1rec->stlight[sp],l1rec->npix*sizeof(char)); 00056 memmove(l1rec->navfail,&l1rec->navfail[sp],l1rec->npix*sizeof(char)); 00057 memmove(l1rec->navwarn,&l1rec->navwarn[sp],l1rec->npix*sizeof(char)); 00058 00059 memmove(l1rec->Lt, &l1rec->Lt [sp*NBANDS],length*NBANDS); 00060 memmove(l1rec->Lt_unc, &l1rec->Lt_unc[sp*NBANDS],length*NBANDS); 00061 00062 memmove(l1rec->sw_n, &l1rec->sw_n [sp*NBANDS],length*NBANDS); 00063 memmove(l1rec->sw_a, &l1rec->sw_a [sp*NBANDS],length*NBANDS); 00064 memmove(l1rec->sw_bb, &l1rec->sw_bb [sp*NBANDS],length*NBANDS); 00065 00066 memmove(l1rec->Ltir, &l1rec->Ltir [sp*NBANDSIR],length*NBANDSIR); 00067 memmove(l1rec->Bt, &l1rec->Bt [sp*NBANDSIR],length*NBANDSIR); 00068 00069 memmove(l1rec->rho_cirrus,&l1rec->rho_cirrus[sp],length); 00070 00071 00072 /* MERIS */ 00073 memmove(l1rec->pixdet,&l1rec->pixdet[sp],l1rec->npix*sizeof(int32_t)); 00074 memmove(l1rec->radcor, &l1rec->radcor[sp*NBANDS],length*NBANDS); 00075 memmove(l1rec->in_flags,&l1rec->in_flags[sp],l1rec->npix*sizeof(int32)); 00076 for ( j = 0; j < l1rec->n_inprods; j++ ) 00077 memmove(l1rec->in_prods[j], &l1rec->in_prods[j][sp],length); 00078 00079 } else { 00080 00081 int32_t i,j; 00082 00083 l1rec->npix = (ep - sp)/dp + 1; 00084 00085 for (i=0; i<l1rec->npix; i++) { 00086 00087 l1rec->pixnum[i] = l1rec->pixnum[i*dp+sp]; 00088 00089 l1rec->lon [i] = l1rec->lon [i*dp+sp]; 00090 l1rec->lat [i] = l1rec->lat [i*dp+sp]; 00091 l1rec->solz[i] = l1rec->solz[i*dp+sp]; 00092 l1rec->sola[i] = l1rec->sola[i*dp+sp]; 00093 l1rec->senz[i] = l1rec->senz[i*dp+sp]; 00094 l1rec->sena[i] = l1rec->sena[i*dp+sp]; 00095 00096 l1rec->alpha[i] = l1rec->alpha[i*dp+sp]; 00097 00098 l1rec->hilt [i] = l1rec->hilt [i*dp+sp]; 00099 l1rec->stlight[i] = l1rec->stlight[i*dp+sp]; 00100 l1rec->navfail[i] = l1rec->navfail[i*dp+sp]; 00101 l1rec->navwarn[i] = l1rec->navwarn[i*dp+sp]; 00102 00103 l1rec->rho_cirrus[i] = l1rec->rho_cirrus[i*dp+sp]; 00104 00105 memmove(&l1rec->Lt [i*NBANDS], 00106 &l1rec->Lt [(i*dp+sp)*NBANDS],NBANDS*sizeof(float)); 00107 00108 memmove(&l1rec->sw_n [i*NBANDS], 00109 &l1rec->sw_n [(i*dp+sp)*NBANDS],NBANDS*sizeof(float)); 00110 memmove(&l1rec->sw_a [i*NBANDS], 00111 &l1rec->sw_a [(i*dp+sp)*NBANDS],NBANDS*sizeof(float)); 00112 memmove(&l1rec->sw_bb[i*NBANDS], 00113 &l1rec->sw_bb[(i*dp+sp)*NBANDS],NBANDS*sizeof(float)); 00114 00115 memmove(&l1rec->Ltir [i*NBANDSIR], 00116 &l1rec->Ltir [(i*dp+sp)*NBANDSIR],NBANDSIR*sizeof(float)); 00117 00118 memmove(&l1rec->Bt [i*NBANDSIR], 00119 &l1rec->Bt [(i*dp+sp)*NBANDSIR],NBANDSIR*sizeof(float)); 00120 00121 /* MERIS */ 00122 l1rec->pixdet[i] = l1rec->pixdet[i*dp+sp]; 00123 memmove(&l1rec->radcor [i*NBANDS], 00124 &l1rec->radcor [(i*dp+sp)*NBANDS],NBANDS*sizeof(float)); 00125 00126 l1rec->in_flags[i] = l1rec->in_flags[i*dp+sp]; 00127 for ( j = 0; j < l1rec->n_inprods; j++ ) 00128 l1rec->in_prods[j][i] = l1rec->in_prods[j][i*dp+sp]; 00129 00130 } 00131 00132 } 00133 00134 return (0); 00135 } 00136
1.7.6.1