Changeset 6548
- Timestamp:
- Mar 8, 2006, 11:09:16 AM (20 years ago)
- File:
-
- 1 edited
-
trunk/psLib/src/types/psMetadata.c (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psLib/src/types/psMetadata.c
r6535 r6548 12 12 * @author Ross Harman, MHPCC 13 13 * 14 * @version $Revision: 1.10 0$ $Name: not supported by cvs2svn $15 * @date $Date: 2006-03-0 7 03:03:33$14 * @version $Revision: 1.101 $ $Name: not supported by cvs2svn $ 15 * @date $Date: 2006-03-08 21:09:16 $ 16 16 * 17 17 * Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii … … 47 47 /** Maximum size of a string */ 48 48 #define MAX_STRING_LENGTH 1024 49 #define HASH_SIZE 25650 49 51 50 /******************************************************************************/ … … 328 327 // Allocate metadata's internal containers 329 328 list = (psList*) psListAlloc(NULL); 330 hash = (psHash*) psHashAlloc( HASH_SIZE);329 hash = (psHash*) psHashAlloc(10); 331 330 332 331 metadata->list = list; … … 1151 1150 } 1152 1151 1152 psPolynomial2D *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 1180 bool 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 1221 psPolynomial3D *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 1251 bool 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 1296 psPolynomial4D *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 1329 bool 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.
