IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 6026


Ignore:
Timestamp:
Jan 16, 2006, 11:24:23 PM (21 years ago)
Author:
magnier
Message:

added polynomial / metadata I/F functions

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

Legend:

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

    r5909 r6026  
    1212 *  @author Ross Harman, MHPCC
    1313 *
    14  *  @version $Revision: 1.92.6.1 $ $Name: not supported by cvs2svn $
    15  *  @date $Date: 2006-01-06 01:01:39 $
     14 *  @version $Revision: 1.92.6.2 $ $Name: not supported by cvs2svn $
     15 *  @date $Date: 2006-01-17 09:24:23 $
    1616 *
    1717 *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
     
    14041404}
    14051405
     1406psPolynomial2D *psPolynomial2DfromMD (psMetadata *folder)
     1407{
     1408
     1409    bool status;
     1410    char keyword[80];
     1411
     1412    // get polynomial orders
     1413    // XXX add status failures tests
     1414    int nXorder = psMetadataLookupS32 (&status, folder, "NORDER_X");
     1415    int nYorder = psMetadataLookupS32 (&status, folder, "NORDER_Y");
     1416
     1417    psPolynomial2D *poly = psPolynomial2DAlloc (nXorder, nYorder, PS_POLYNOMIAL_ORD);
     1418
     1419    for (int nx = 0; nx < poly->nX + 1; nx++) {
     1420        for (int ny = 0; ny < poly->nY + 1; ny++) {
     1421            sprintf (keyword, "VAL_X%02d_Y%02d", nx, ny);
     1422            poly->coeff[nx][ny] = psMetadataLookupF64 (&status, folder, keyword);
     1423            if (!status)
     1424                poly->mask[nx][ny] = 1;
     1425
     1426            sprintf (keyword, "ERR_X%02d_Y%02d", nx, ny);
     1427            poly->coeffErr[nx][ny] = psMetadataLookupF64 (&status, folder, keyword);
     1428        }
     1429    }
     1430    return (poly);
     1431}
     1432
     1433// XXX : these may need F64, or %g format for output
     1434bool psPolynomial2DtoMD (psMetadata *md, psPolynomial2D *poly, char *format, ...)
     1435{
     1436
     1437    int Nbyte;
     1438    char tmp;
     1439    char *root;
     1440    va_list argp;
     1441
     1442    va_start (argp, format);
     1443    Nbyte = vsnprintf (&tmp, 0, format, argp);
     1444    va_end (argp);
     1445
     1446    if (!Nbyte)
     1447        return false;
     1448
     1449    va_start (argp, format);
     1450    root = (char *) psAlloc (Nbyte + 1);
     1451    memset (root, 0, Nbyte + 1);
     1452    vsnprintf (root, Nbyte + 1, format, argp);
     1453    va_end (argp);
     1454
     1455    psMetadata *folder = psMetadataAlloc ();
     1456    psMetadataAdd (md, PS_LIST_TAIL, root, PS_DATA_METADATA, "folder for 2D polynomial", folder);
     1457    psFree (root);
     1458
     1459    // specify the polynomial orders
     1460    psMetadataAdd (folder, PS_LIST_TAIL, "NORDER_X", PS_DATA_S32, "number of x orders", poly->nX);
     1461    psMetadataAdd (folder, PS_LIST_TAIL, "NORDER_Y", PS_DATA_S32, "number of y orders", poly->nY);
     1462
     1463    // place polynomial entries on folder
     1464    for (int nx = 0; nx < poly->nX + 1; nx++) {
     1465        for (int ny = 0; ny < poly->nY + 1; ny++) {
     1466            if (poly->mask[nx][ny])
     1467                continue;
     1468            psMetadataAdd (folder, PS_LIST_TAIL, "VAL_X%02d_Y%02d", PS_DATA_F64, "polynomial coefficient", poly->coeff[nx][ny], nx, ny);
     1469            psMetadataAdd (folder, PS_LIST_TAIL, "ERR_X%02d_Y%02d", PS_DATA_F64, "polynomial coefficient error", poly->coeffErr[nx][ny], nx, ny);
     1470        }
     1471    }
     1472    return true;
     1473}
     1474
     1475psPolynomial3D *psPolynomial3DfromMD (psMetadata *folder)
     1476{
     1477
     1478    bool status;
     1479    char keyword[80];
     1480
     1481    // get polynomial orders
     1482    // XXX add status failures tests
     1483    int nXorder = psMetadataLookupS32 (&status, folder, "NORDER_X");
     1484    int nYorder = psMetadataLookupS32 (&status, folder, "NORDER_Y");
     1485    int nZorder = psMetadataLookupS32 (&status, folder, "NORDER_Z");
     1486
     1487    psPolynomial3D *poly = psPolynomial3DAlloc (nXorder, nYorder, nZorder, PS_POLYNOMIAL_ORD);
     1488
     1489    for (int nx = 0; nx < poly->nX + 1; nx++) {
     1490        for (int ny = 0; ny < poly->nY + 1; ny++) {
     1491            for (int nz = 0; nz < poly->nZ + 1; nz++) {
     1492                sprintf (keyword, "VAL_X%02d_Y%02d_Z%02d", nx, ny, nz);
     1493                poly->coeff[nx][ny][nz] = psMetadataLookupF64 (&status, folder, keyword);
     1494                if (!status)
     1495                    poly->mask[nx][ny][nz] = 1;
     1496
     1497                sprintf (keyword, "ERR_X%02d_Y%02d_Z%02d", nx, ny, nz);
     1498                poly->coeffErr[nx][ny][nz] = psMetadataLookupF64 (&status, folder, keyword);
     1499            }
     1500        }
     1501    }
     1502    return (poly);
     1503}
     1504
     1505bool psPolynomial3DtoMD (psMetadata *md, psPolynomial3D *poly, char *format, ...)
     1506{
     1507
     1508    int Nbyte;
     1509    char tmp;
     1510    char *root;
     1511    va_list argp;
     1512
     1513    va_start (argp, format);
     1514    Nbyte = vsnprintf (&tmp, 0, format, argp);
     1515    va_end (argp);
     1516
     1517    if (!Nbyte)
     1518        return false;
     1519
     1520    va_start (argp, format);
     1521    root = (char *) psAlloc (Nbyte + 1);
     1522    memset (root, 0, Nbyte + 1);
     1523    vsnprintf (root, Nbyte + 1, format, argp);
     1524    va_end (argp);
     1525
     1526    psMetadata *folder = psMetadataAlloc ();
     1527    psMetadataAdd (md, PS_LIST_TAIL, root, PS_DATA_METADATA, "folder for 3D polynomial", folder);
     1528    psFree (root);
     1529
     1530    // specify the polynomial orders
     1531    psMetadataAdd (folder, PS_LIST_TAIL, "NORDER_X", PS_DATA_S32, "number of x orders", poly->nX);
     1532    psMetadataAdd (folder, PS_LIST_TAIL, "NORDER_Y", PS_DATA_S32, "number of y orders", poly->nY);
     1533    psMetadataAdd (folder, PS_LIST_TAIL, "NORDER_Z", PS_DATA_S32, "number of z orders", poly->nZ);
     1534
     1535    // place polynomial entries on folder
     1536    for (int nx = 0; nx < poly->nX + 1; nx++) {
     1537        for (int ny = 0; ny < poly->nY + 1; ny++) {
     1538            for (int nz = 0; nz < poly->nZ + 1; nz++) {
     1539                if (poly->mask[nx][ny][nz])
     1540                    continue;
     1541                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);
     1542                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);
     1543            }
     1544        }
     1545    }
     1546    return true;
     1547}
     1548
     1549
     1550psPolynomial4D *psPolynomial4DfromMD (psMetadata *folder)
     1551{
     1552
     1553    bool status;
     1554    char keyword[80];
     1555
     1556    // get polynomial orders
     1557    // XXX add status failures tests
     1558    int nXorder = psMetadataLookupS32 (&status, folder, "NORDER_X");
     1559    int nYorder = psMetadataLookupS32 (&status, folder, "NORDER_Y");
     1560    int nZorder = psMetadataLookupS32 (&status, folder, "NORDER_Z");
     1561    int nTorder = psMetadataLookupS32 (&status, folder, "NORDER_T");
     1562
     1563    psPolynomial4D *poly = psPolynomial4DAlloc (nXorder, nYorder, nZorder, nTorder, PS_POLYNOMIAL_ORD);
     1564
     1565    for (int nx = 0; nx < poly->nX + 1; nx++) {
     1566        for (int ny = 0; ny < poly->nY + 1; ny++) {
     1567            for (int nz = 0; nz < poly->nZ + 1; nz++) {
     1568                for (int nt = 0; nt < poly->nT + 1; nt++) {
     1569                    sprintf (keyword, "VAL_X%02d_Y%02d_Z%02d_T%02d", nx, ny, nz, nt);
     1570                    poly->coeff[nx][ny][nz][nt] = psMetadataLookupF64 (&status, folder, keyword);
     1571                    if (!status)
     1572                        poly->mask[nx][ny][nz][nt] = 1;
     1573
     1574                    sprintf (keyword, "ERR_X%02d_Y%02d_Z%02d_T%02d", nx, ny, nz, nt);
     1575                    poly->coeffErr[nx][ny][nz][nt] = psMetadataLookupF64 (&status, folder, keyword);
     1576                }
     1577            }
     1578        }
     1579    }
     1580    return (poly);
     1581}
     1582
     1583bool psPolynomial4DtoMD (psMetadata *md, psPolynomial4D *poly, char *format, ...)
     1584{
     1585
     1586    int Nbyte;
     1587    char tmp;
     1588    char *root;
     1589    va_list argp;
     1590
     1591    va_start (argp, format);
     1592    Nbyte = vsnprintf (&tmp, 0, format, argp);
     1593    va_end (argp);
     1594
     1595    if (!Nbyte)
     1596        return false;
     1597
     1598    va_start (argp, format);
     1599    root = (char *) psAlloc (Nbyte + 1);
     1600    memset (root, 0, Nbyte + 1);
     1601    vsnprintf (root, Nbyte + 1, format, argp);
     1602    va_end (argp);
     1603
     1604    psMetadata *folder = psMetadataAlloc ();
     1605    psMetadataAdd (md, PS_LIST_TAIL, root, PS_DATA_METADATA, "folder for 4D polynomial", folder);
     1606    psFree (root);
     1607
     1608    // specify the polynomial orders
     1609    psMetadataAdd (folder, PS_LIST_TAIL, "NORDER_X", PS_DATA_S32, "number of x orders", poly->nX);
     1610    psMetadataAdd (folder, PS_LIST_TAIL, "NORDER_Y", PS_DATA_S32, "number of y orders", poly->nY);
     1611    psMetadataAdd (folder, PS_LIST_TAIL, "NORDER_Z", PS_DATA_S32, "number of z orders", poly->nZ);
     1612    psMetadataAdd (folder, PS_LIST_TAIL, "NORDER_T", PS_DATA_S32, "number of z orders", poly->nT);
     1613
     1614    // place polynomial entries on folder
     1615    for (int nx = 0; nx < poly->nX + 1; nx++) {
     1616        for (int ny = 0; ny < poly->nY + 1; ny++) {
     1617            for (int nz = 0; nz < poly->nZ + 1; nz++) {
     1618                for (int nt = 0; nt < poly->nT + 1; nt++) {
     1619                    if (poly->mask[nx][ny][nz][nt])
     1620                        continue;
     1621                    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);
     1622                    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);
     1623                }
     1624            }
     1625        }
     1626    }
     1627    return true;
     1628}
  • branches/eam_rel9_b1/psLib/src/types/psMetadata.h

    r5539 r6026  
    1111*  @author Ross Harman, MHPCC
    1212*
    13 *  @version $Revision: 1.71 $ $Name: not supported by cvs2svn $
    14 *  @date $Date: 2005-11-18 01:51:03 $
     13*  @version $Revision: 1.71.6.1 $ $Name: not supported by cvs2svn $
     14*  @date $Date: 2006-01-17 09:24:23 $
    1515*
    1616*  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
     
    785785);
    786786
     787
     788psPolynomial2D *psPolynomial2DfromMD (psMetadata *folder);
     789bool psPolynomial2DtoMD (psMetadata *md, psPolynomial2D *poly, char *format, ...);
     790
     791psPolynomial3D *psPolynomial3DfromMD (psMetadata *folder);
     792bool psPolynomial3DtoMD (psMetadata *md, psPolynomial3D *poly, char *format, ...);
     793
     794psPolynomial4D *psPolynomial4DfromMD (psMetadata *folder);
     795bool psPolynomial4DtoMD (psMetadata *md, psPolynomial4D *poly, char *format, ...);
     796
     797
    787798/// @}
    788799
Note: See TracChangeset for help on using the changeset viewer.