IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 6548


Ignore:
Timestamp:
Mar 8, 2006, 11:09:16 AM (20 years ago)
Author:
drobbin
Message:

Merged in changes to psMetadata (polynomial formatting) from rel10_ifa (bug 714)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/psLib/src/types/psMetadata.c

    r6535 r6548  
    1212 *  @author Ross Harman, MHPCC
    1313 *
    14  *  @version $Revision: 1.100 $ $Name: not supported by cvs2svn $
    15  *  @date $Date: 2006-03-07 03:03:33 $
     14 *  @version $Revision: 1.101 $ $Name: not supported by cvs2svn $
     15 *  @date $Date: 2006-03-08 21:09:16 $
    1616 *
    1717 *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
     
    4747/** Maximum size of a string */
    4848#define MAX_STRING_LENGTH 1024
    49 #define HASH_SIZE 256
    5049
    5150/******************************************************************************/
     
    328327    // Allocate metadata's internal containers
    329328    list = (psList*) psListAlloc(NULL);
    330     hash = (psHash*) psHashAlloc(HASH_SIZE);
     329    hash = (psHash*) psHashAlloc(10);
    331330
    332331    metadata->list = list;
     
    11511150}
    11521151
     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 (PS_POLYNOMIAL_ORD, nXorder, nYorder);
     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 (PS_POLYNOMIAL_ORD, nXorder, nYorder, nZorder);
     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 (PS_POLYNOMIAL_ORD, nXorder, nYorder, nZorder, nTorder);
     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}
Note: See TracChangeset for help on using the changeset viewer.