IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 6433


Ignore:
Timestamp:
Feb 15, 2006, 10:13:16 PM (20 years ago)
Author:
magnier
Message:

added polynomial to metadata config conversions

Location:
branches/rel10_ifa/psLib/src/types
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/rel10_ifa/psLib/src/types/psMetadata.c

    r6314 r6433  
    1212 *  @author Ross Harman, MHPCC
    1313 *
    14  *  @version $Revision: 1.99 $ $Name: not supported by cvs2svn $
    15  *  @date $Date: 2006-02-03 00:12:00 $
     14 *  @version $Revision: 1.99.4.1 $ $Name: not supported by cvs2svn $
     15 *  @date $Date: 2006-02-16 08:13:16 $
    1616 *
    1717 *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
     
    11501150}
    11511151
     1152psPolynomial2D *psPolynomial2DfromMD (psMetadata *folder)
     1153{
     1154
     1155    bool status;
     1156    char keyword[80];
     1157
     1158    // get polynomial orders
     1159    // XXX add status failures tests
     1160    int nXorder = psMetadataLookupS32 (&status, folder, "NORDER_X");
     1161    int nYorder = psMetadataLookupS32 (&status, folder, "NORDER_Y");
     1162
     1163    psPolynomial2D *poly = psPolynomial2DAlloc (nXorder, nYorder, PS_POLYNOMIAL_ORD);
     1164
     1165    for (int nx = 0; nx < poly->nX + 1; nx++) {
     1166        for (int ny = 0; ny < poly->nY + 1; ny++) {
     1167            sprintf (keyword, "VAL_X%02d_Y%02d", nx, ny);
     1168            poly->coeff[nx][ny] = psMetadataLookupF64 (&status, folder, keyword);
     1169            if (!status)
     1170                poly->mask[nx][ny] = 1;
     1171
     1172            sprintf (keyword, "ERR_X%02d_Y%02d", nx, ny);
     1173            poly->coeffErr[nx][ny] = psMetadataLookupF64 (&status, folder, keyword);
     1174        }
     1175    }
     1176    return (poly);
     1177}
     1178
     1179// XXX : these may need F64, or %g format for output
     1180bool psPolynomial2DtoMD (psMetadata *md, psPolynomial2D *poly, char *format, ...)
     1181{
     1182
     1183    int Nbyte;
     1184    char tmp;
     1185    char *root;
     1186    va_list argp;
     1187
     1188    va_start (argp, format);
     1189    Nbyte = vsnprintf (&tmp, 0, format, argp);
     1190    va_end (argp);
     1191
     1192    if (!Nbyte)
     1193        return false;
     1194
     1195    va_start (argp, format);
     1196    root = (char *) psAlloc (Nbyte + 1);
     1197    memset (root, 0, Nbyte + 1);
     1198    vsnprintf (root, Nbyte + 1, format, argp);
     1199    va_end (argp);
     1200
     1201    psMetadata *folder = psMetadataAlloc ();
     1202    psMetadataAdd (md, PS_LIST_TAIL, root, PS_DATA_METADATA, "folder for 2D polynomial", folder);
     1203    psFree (root);
     1204
     1205    // specify the polynomial orders
     1206    psMetadataAdd (folder, PS_LIST_TAIL, "NORDER_X", PS_DATA_S32, "number of x orders", poly->nX);
     1207    psMetadataAdd (folder, PS_LIST_TAIL, "NORDER_Y", PS_DATA_S32, "number of y orders", poly->nY);
     1208
     1209    // place polynomial entries on folder
     1210    for (int nx = 0; nx < poly->nX + 1; nx++) {
     1211        for (int ny = 0; ny < poly->nY + 1; ny++) {
     1212            if (poly->mask[nx][ny])
     1213                continue;
     1214            psMetadataAdd (folder, PS_LIST_TAIL, "VAL_X%02d_Y%02d", PS_DATA_F64, "polynomial coefficient", poly->coeff[nx][ny], nx, ny);
     1215            psMetadataAdd (folder, PS_LIST_TAIL, "ERR_X%02d_Y%02d", PS_DATA_F64, "polynomial coefficient error", poly->coeffErr[nx][ny], nx, ny);
     1216        }
     1217    }
     1218    return true;
     1219}
     1220
     1221psPolynomial3D *psPolynomial3DfromMD (psMetadata *folder)
     1222{
     1223
     1224    bool status;
     1225    char keyword[80];
     1226
     1227    // get polynomial orders
     1228    // XXX add status failures tests
     1229    int nXorder = psMetadataLookupS32 (&status, folder, "NORDER_X");
     1230    int nYorder = psMetadataLookupS32 (&status, folder, "NORDER_Y");
     1231    int nZorder = psMetadataLookupS32 (&status, folder, "NORDER_Z");
     1232
     1233    psPolynomial3D *poly = psPolynomial3DAlloc (nXorder, nYorder, nZorder, PS_POLYNOMIAL_ORD);
     1234
     1235    for (int nx = 0; nx < poly->nX + 1; nx++) {
     1236        for (int ny = 0; ny < poly->nY + 1; ny++) {
     1237            for (int nz = 0; nz < poly->nZ + 1; nz++) {
     1238                sprintf (keyword, "VAL_X%02d_Y%02d_Z%02d", nx, ny, nz);
     1239                poly->coeff[nx][ny][nz] = psMetadataLookupF64 (&status, folder, keyword);
     1240                if (!status)
     1241                    poly->mask[nx][ny][nz] = 1;
     1242
     1243                sprintf (keyword, "ERR_X%02d_Y%02d_Z%02d", nx, ny, nz);
     1244                poly->coeffErr[nx][ny][nz] = psMetadataLookupF64 (&status, folder, keyword);
     1245            }
     1246        }
     1247    }
     1248    return (poly);
     1249}
     1250
     1251bool psPolynomial3DtoMD (psMetadata *md, psPolynomial3D *poly, char *format, ...)
     1252{
     1253
     1254    int Nbyte;
     1255    char tmp;
     1256    char *root;
     1257    va_list argp;
     1258
     1259    va_start (argp, format);
     1260    Nbyte = vsnprintf (&tmp, 0, format, argp);
     1261    va_end (argp);
     1262
     1263    if (!Nbyte)
     1264        return false;
     1265
     1266    va_start (argp, format);
     1267    root = (char *) psAlloc (Nbyte + 1);
     1268    memset (root, 0, Nbyte + 1);
     1269    vsnprintf (root, Nbyte + 1, format, argp);
     1270    va_end (argp);
     1271
     1272    psMetadata *folder = psMetadataAlloc ();
     1273    psMetadataAdd (md, PS_LIST_TAIL, root, PS_DATA_METADATA, "folder for 3D polynomial", folder);
     1274    psFree (root);
     1275
     1276    // specify the polynomial orders
     1277    psMetadataAdd (folder, PS_LIST_TAIL, "NORDER_X", PS_DATA_S32, "number of x orders", poly->nX);
     1278    psMetadataAdd (folder, PS_LIST_TAIL, "NORDER_Y", PS_DATA_S32, "number of y orders", poly->nY);
     1279    psMetadataAdd (folder, PS_LIST_TAIL, "NORDER_Z", PS_DATA_S32, "number of z orders", poly->nZ);
     1280
     1281    // place polynomial entries on folder
     1282    for (int nx = 0; nx < poly->nX + 1; nx++) {
     1283        for (int ny = 0; ny < poly->nY + 1; ny++) {
     1284            for (int nz = 0; nz < poly->nZ + 1; nz++) {
     1285                if (poly->mask[nx][ny][nz])
     1286                    continue;
     1287                psMetadataAdd (folder, PS_LIST_TAIL, "VAL_X%02d_Y%02d_Z%02d", PS_DATA_F64, "polynomial coefficient", poly->coeff[nx][ny][nz], nx, ny, nz);
     1288                psMetadataAdd (folder, PS_LIST_TAIL, "ERR_X%02d_Y%02d_Z%02d", PS_DATA_F64, "polynomial coeffficient error", poly->coeffErr[nx][ny][nz], nx, ny, nz);
     1289            }
     1290        }
     1291    }
     1292    return true;
     1293}
     1294
     1295
     1296psPolynomial4D *psPolynomial4DfromMD (psMetadata *folder)
     1297{
     1298
     1299    bool status;
     1300    char keyword[80];
     1301
     1302    // get polynomial orders
     1303    // XXX add status failures tests
     1304    int nXorder = psMetadataLookupS32 (&status, folder, "NORDER_X");
     1305    int nYorder = psMetadataLookupS32 (&status, folder, "NORDER_Y");
     1306    int nZorder = psMetadataLookupS32 (&status, folder, "NORDER_Z");
     1307    int nTorder = psMetadataLookupS32 (&status, folder, "NORDER_T");
     1308
     1309    psPolynomial4D *poly = psPolynomial4DAlloc (nXorder, nYorder, nZorder, nTorder, PS_POLYNOMIAL_ORD);
     1310
     1311    for (int nx = 0; nx < poly->nX + 1; nx++) {
     1312        for (int ny = 0; ny < poly->nY + 1; ny++) {
     1313            for (int nz = 0; nz < poly->nZ + 1; nz++) {
     1314                for (int nt = 0; nt < poly->nT + 1; nt++) {
     1315                    sprintf (keyword, "VAL_X%02d_Y%02d_Z%02d_T%02d", nx, ny, nz, nt);
     1316                    poly->coeff[nx][ny][nz][nt] = psMetadataLookupF64 (&status, folder, keyword);
     1317                    if (!status)
     1318                        poly->mask[nx][ny][nz][nt] = 1;
     1319
     1320                    sprintf (keyword, "ERR_X%02d_Y%02d_Z%02d_T%02d", nx, ny, nz, nt);
     1321                    poly->coeffErr[nx][ny][nz][nt] = psMetadataLookupF64 (&status, folder, keyword);
     1322                }
     1323            }
     1324        }
     1325    }
     1326    return (poly);
     1327}
     1328
     1329bool psPolynomial4DtoMD (psMetadata *md, psPolynomial4D *poly, char *format, ...)
     1330{
     1331
     1332    int Nbyte;
     1333    char tmp;
     1334    char *root;
     1335    va_list argp;
     1336
     1337    va_start (argp, format);
     1338    Nbyte = vsnprintf (&tmp, 0, format, argp);
     1339    va_end (argp);
     1340
     1341    if (!Nbyte)
     1342        return false;
     1343
     1344    va_start (argp, format);
     1345    root = (char *) psAlloc (Nbyte + 1);
     1346    memset (root, 0, Nbyte + 1);
     1347    vsnprintf (root, Nbyte + 1, format, argp);
     1348    va_end (argp);
     1349
     1350    psMetadata *folder = psMetadataAlloc ();
     1351    psMetadataAdd (md, PS_LIST_TAIL, root, PS_DATA_METADATA, "folder for 4D polynomial", folder);
     1352    psFree (root);
     1353
     1354    // specify the polynomial orders
     1355    psMetadataAdd (folder, PS_LIST_TAIL, "NORDER_X", PS_DATA_S32, "number of x orders", poly->nX);
     1356    psMetadataAdd (folder, PS_LIST_TAIL, "NORDER_Y", PS_DATA_S32, "number of y orders", poly->nY);
     1357    psMetadataAdd (folder, PS_LIST_TAIL, "NORDER_Z", PS_DATA_S32, "number of z orders", poly->nZ);
     1358    psMetadataAdd (folder, PS_LIST_TAIL, "NORDER_T", PS_DATA_S32, "number of z orders", poly->nT);
     1359
     1360    // place polynomial entries on folder
     1361    for (int nx = 0; nx < poly->nX + 1; nx++) {
     1362        for (int ny = 0; ny < poly->nY + 1; ny++) {
     1363            for (int nz = 0; nz < poly->nZ + 1; nz++) {
     1364                for (int nt = 0; nt < poly->nT + 1; nt++) {
     1365                    if (poly->mask[nx][ny][nz][nt])
     1366                        continue;
     1367                    psMetadataAdd (folder, PS_LIST_TAIL, "VAL_X%02d_Y%02d_Z%02d_T%02d", PS_DATA_F64, "polynomial coefficient", poly->coeff[nx][ny][nz][nt], nx, ny, nz, nt);
     1368                    psMetadataAdd (folder, PS_LIST_TAIL, "ERR_X%02d_Y%02d_Z%02d_T%02d", PS_DATA_F64, "polynomial coeffficient error", poly->coeffErr[nx][ny][nz][nt], nx, ny, nz, nt);
     1369                }
     1370            }
     1371        }
     1372    }
     1373    return true;
     1374}
  • branches/rel10_ifa/psLib/src/types/psMetadata.h

    r6251 r6433  
    1111*  @author Ross Harman, MHPCC
    1212*
    13 *  @version $Revision: 1.74 $ $Name: not supported by cvs2svn $
    14 *  @date $Date: 2006-01-30 20:28:33 $
     13*  @version $Revision: 1.74.4.1 $ $Name: not supported by cvs2svn $
     14*  @date $Date: 2006-02-16 08:13:16 $
    1515*
    1616*  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
     
    939939
    940940
     941psPolynomial2D *psPolynomial2DfromMD (psMetadata *folder);
     942bool psPolynomial2DtoMD (psMetadata *md, psPolynomial2D *poly, char *format, ...);
     943
     944psPolynomial3D *psPolynomial3DfromMD (psMetadata *folder);
     945bool psPolynomial3DtoMD (psMetadata *md, psPolynomial3D *poly, char *format, ...);
     946
     947psPolynomial4D *psPolynomial4DfromMD (psMetadata *folder);
     948bool psPolynomial4DtoMD (psMetadata *md, psPolynomial4D *poly, char *format, ...);
     949
     950
    941951/// @}
    942952
Note: See TracChangeset for help on using the changeset viewer.