Changeset 19189
- Timestamp:
- Aug 25, 2008, 12:14:04 PM (18 years ago)
- Location:
- trunk/psModules/src
- Files:
-
- 5 edited
-
camera/pmFPAfile.c (modified) (2 diffs)
-
camera/pmFPAfile.h (modified) (2 diffs)
-
camera/pmFPAfileIO.c (modified) (8 diffs)
-
imcombine/pmSubtractionIO.c (modified) (5 diffs)
-
imcombine/pmSubtractionIO.h (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psModules/src/camera/pmFPAfile.c
r19007 r19189 440 440 PS_ASSERT_STRING_NON_EMPTY(type, PM_FPA_FILE_NONE); 441 441 442 if (!strcasecmp (type, "SX")) {442 if (!strcasecmp(type, "SX")) { 443 443 return PM_FPA_FILE_SX; 444 444 } 445 if (!strcasecmp (type, "OBJ")) {445 if (!strcasecmp(type, "OBJ")) { 446 446 return PM_FPA_FILE_OBJ; 447 447 } 448 if (!strcasecmp (type, "CMP")) {448 if (!strcasecmp(type, "CMP")) { 449 449 return PM_FPA_FILE_CMP; 450 450 } 451 if (!strcasecmp (type, "CMF")) {451 if (!strcasecmp(type, "CMF")) { 452 452 return PM_FPA_FILE_CMF; 453 453 } 454 if (!strcasecmp (type, "RAW")) {454 if (!strcasecmp(type, "RAW")) { 455 455 return PM_FPA_FILE_RAW; 456 456 } 457 if (!strcasecmp (type, "IMAGE")) {457 if (!strcasecmp(type, "IMAGE")) { 458 458 return PM_FPA_FILE_IMAGE; 459 459 } 460 if (!strcasecmp (type, "PSF")) {460 if (!strcasecmp(type, "PSF")) { 461 461 return PM_FPA_FILE_PSF; 462 462 } 463 if (!strcasecmp (type, "JPEG")) {463 if (!strcasecmp(type, "JPEG")) { 464 464 return PM_FPA_FILE_JPEG; 465 465 } 466 if (!strcasecmp (type, "KAPA")) {466 if (!strcasecmp(type, "KAPA")) { 467 467 return PM_FPA_FILE_KAPA; 468 468 } 469 if (!strcasecmp (type, "MASK")) {469 if (!strcasecmp(type, "MASK")) { 470 470 return PM_FPA_FILE_MASK; 471 471 } 472 if (!strcasecmp (type, "WEIGHT")) {472 if (!strcasecmp(type, "WEIGHT")) { 473 473 return PM_FPA_FILE_WEIGHT; 474 474 } 475 if (!strcasecmp (type, "FRINGE")) {475 if (!strcasecmp(type, "FRINGE")) { 476 476 return PM_FPA_FILE_FRINGE; 477 477 } 478 if (!strcasecmp (type, "DARK")) {478 if (!strcasecmp(type, "DARK")) { 479 479 return PM_FPA_FILE_DARK; 480 480 } 481 if (!strcasecmp (type, "HEADER")) {481 if (!strcasecmp(type, "HEADER")) { 482 482 return PM_FPA_FILE_HEADER; 483 483 } 484 484 // deprecate this? 485 if (!strcasecmp (type, "ASTROM")) {485 if (!strcasecmp(type, "ASTROM")) { 486 486 return PM_FPA_FILE_ASTROM_MODEL; 487 487 } 488 if (!strcasecmp (type, "ASTROM.MODEL")) {488 if (!strcasecmp(type, "ASTROM.MODEL")) { 489 489 return PM_FPA_FILE_ASTROM_MODEL; 490 490 } 491 if (!strcasecmp (type, "ASTROM.REFSTARS")) {491 if (!strcasecmp(type, "ASTROM.REFSTARS")) { 492 492 return PM_FPA_FILE_ASTROM_REFSTARS; 493 } 494 if (!strcasecmp(type, "SUBKERNEL")) { 495 return PM_FPA_FILE_SUBKERNEL; 493 496 } 494 497 … … 531 534 case PM_FPA_FILE_ASTROM_REFSTARS: 532 535 return ("ASTROM.REFSTARS"); 536 case PM_FPA_FILE_SUBKERNEL: 537 return ("SUBKERNEL"); 533 538 default: 534 539 return ("NONE"); -
trunk/psModules/src/camera/pmFPAfile.h
r18843 r19189 4 4 * @author EAM, IfA 5 5 * 6 * @version $Revision: 1.3 1$ $Name: not supported by cvs2svn $7 * @date $Date: 2008-08- 01 03:15:46$6 * @version $Revision: 1.32 $ $Name: not supported by cvs2svn $ 7 * @date $Date: 2008-08-25 22:14:04 $ 8 8 * Copyright 2004-2005 Institute for Astronomy, University of Hawaii 9 9 */ … … 45 45 PM_FPA_FILE_ASTROM_MODEL, 46 46 PM_FPA_FILE_ASTROM_REFSTARS, 47 PM_FPA_FILE_SUBKERNEL, 47 48 } pmFPAfileType; 48 49 -
trunk/psModules/src/camera/pmFPAfileIO.c
r18601 r19189 40 40 #include "pmSourcePlots.h" 41 41 #include "pmFPAConstruct.h" 42 #include "pmSubtractionIO.h" 42 43 #include "pmConcepts.h" 43 44 … … 188 189 } 189 190 break; 191 case PM_FPA_FILE_SUBKERNEL: 192 status = pmSubtractionReadKernels(view, file, config); 193 break; 190 194 case PM_FPA_FILE_SX: 191 195 case PM_FPA_FILE_RAW: … … 258 262 case PM_FPA_FILE_FRINGE: 259 263 case PM_FPA_FILE_DARK: { 260 // create FPA structure component based on view 261 psMetadata *format = file->format; // Camera format configuration 262 if (!format) { 263 format = config->format; 264 } 265 266 pmFPA *nameSource = file->src; // Source of FPA.OBS 267 if (!nameSource) { 268 nameSource = file->fpa; 269 } 270 bool mdok; // Status of MD lookup 271 const char *fpaObs = psMetadataLookupStr(&mdok, nameSource->concepts, "FPA.OBS"); // Obs. id 272 273 pmFPAAddSourceFromView(file->fpa, fpaObs, view, format); 274 psTrace ("psModules.camera", 5, "created fpa data elements for %s (%s) (%d:%d:%d)\n", 275 file->name, file->name, view->chip, view->cell, view->readout); 276 break; 277 } 278 case PM_FPA_FILE_HEADER: 279 psAbort ("Create not defined for HEADER"); 280 break; 281 case PM_FPA_FILE_SX: 282 case PM_FPA_FILE_RAW: 283 case PM_FPA_FILE_OBJ: 284 case PM_FPA_FILE_CMP: 285 case PM_FPA_FILE_CMF: 286 case PM_FPA_FILE_PSF: 287 case PM_FPA_FILE_ASTROM_MODEL: 288 case PM_FPA_FILE_ASTROM_REFSTARS: 289 case PM_FPA_FILE_JPEG: 290 case PM_FPA_FILE_KAPA: 291 break; 292 293 default: 264 // create FPA structure component based on view 265 psMetadata *format = file->format; // Camera format configuration 266 if (!format) { 267 format = config->format; 268 } 269 270 pmFPA *nameSource = file->src; // Source of FPA.OBS 271 if (!nameSource) { 272 nameSource = file->fpa; 273 } 274 bool mdok; // Status of MD lookup 275 const char *fpaObs = psMetadataLookupStr(&mdok, nameSource->concepts, "FPA.OBS"); // Obs. id 276 277 pmFPAAddSourceFromView(file->fpa, fpaObs, view, format); 278 psTrace ("psModules.camera", 5, "created fpa data elements for %s (%s) (%d:%d:%d)\n", 279 file->name, file->name, view->chip, view->cell, view->readout); 280 break; 281 } 282 case PM_FPA_FILE_HEADER: 283 psAbort ("Create not defined for HEADER"); 284 break; 285 case PM_FPA_FILE_SUBKERNEL: 286 case PM_FPA_FILE_SX: 287 case PM_FPA_FILE_RAW: 288 case PM_FPA_FILE_OBJ: 289 case PM_FPA_FILE_CMP: 290 case PM_FPA_FILE_CMF: 291 case PM_FPA_FILE_PSF: 292 case PM_FPA_FILE_ASTROM_MODEL: 293 case PM_FPA_FILE_ASTROM_REFSTARS: 294 case PM_FPA_FILE_JPEG: 295 case PM_FPA_FILE_KAPA: 296 break; 297 298 default: 294 299 psError(PS_ERR_IO, true, "Unsupported type for %s: %d", file->name, file->type); 295 300 return false; … … 435 440 } 436 441 } 442 break; 443 case PM_FPA_FILE_SUBKERNEL: 444 status = pmSubtractionWriteKernels(view, file, config); 437 445 break; 438 446 case PM_FPA_FILE_SX: … … 512 520 case PM_FPA_FILE_FRINGE: 513 521 case PM_FPA_FILE_DARK: 522 case PM_FPA_FILE_SUBKERNEL: 514 523 case PM_FPA_FILE_CMF: 515 524 case PM_FPA_FILE_PSF: … … 577 586 status = pmFPAviewFreeData(view, file); 578 587 break; 588 case PM_FPA_FILE_SUBKERNEL: 579 589 case PM_FPA_FILE_SX: 580 590 case PM_FPA_FILE_RAW: … … 720 730 case PM_FPA_FILE_FRINGE: 721 731 case PM_FPA_FILE_DARK: 732 case PM_FPA_FILE_SUBKERNEL: 722 733 case PM_FPA_FILE_CMF: 723 734 case PM_FPA_FILE_PSF: … … 899 910 status = pmFPAviewFitsWritePHU (view, file, config); 900 911 break; 912 case PM_FPA_FILE_SUBKERNEL: 913 status = pmSubtractionWritePHU(view, file, config); 901 914 case PM_FPA_FILE_CMF: 902 915 status = pmSource_CMF_WritePHU (view, file, config); 903 916 break; 904 917 case PM_FPA_FILE_PSF: 905 status = pmPSFmodelWritePHU (view, file, config);918 status = pmPSFmodelWritePHU(view, file, config); 906 919 break; 907 920 case PM_FPA_FILE_ASTROM_REFSTARS: -
trunk/psModules/src/imcombine/pmSubtractionIO.c
r18146 r19189 1 1 #include <stdio.h> 2 2 #include <pslib.h> 3 #include <strings.h> 3 4 4 5 #include "pmHDU.h" 5 6 #include "pmFPA.h" 7 #include "pmFPAview.h" 8 #include "pmFPAfile.h" 9 #include "pmFPAfileFitsIO.h" 10 #include "pmConcepts.h" 6 11 7 12 #include "pmSubtraction.h" … … 62 67 } 63 68 69 ////////////////////////////////////////////////////////////////////////////////////////////////////////////// 70 64 71 bool pmReadoutWriteSubtractionKernels(pmReadout *ro, psFits *fits) 65 72 { 66 73 PM_ASSERT_READOUT_NON_NULL(ro, false); 67 74 PS_ASSERT_FITS_NON_NULL(fits, false); 68 69 75 70 76 // Extract the regions and solutions used in the image matching … … 159 165 // CVS tags, used to identify the version of this file (in case incompatibilities are introduced) 160 166 psString cvsFile = psStringCopy("$RCSfile: pmSubtractionIO.c,v $"); 161 psString cvsRev = psStringCopy("$Revision: 1. 1$");162 psString cvsDate = psStringCopy("$Date: 2008-0 6-16 21:59:43$");167 psString cvsRev = psStringCopy("$Revision: 1.2 $"); 168 psString cvsDate = psStringCopy("$Date: 2008-08-25 22:14:04 $"); 163 169 psStringSubstitute(&cvsFile, NULL, "RCSfile: "); 164 170 psStringSubstitute(&cvsRev, NULL, "Revision: "); … … 190 196 return true; 191 197 } 198 199 static bool pmCellWriteSubtractionKernels(pmCell *cell, const pmFPAview *view, 200 pmFPAfile *file, pmConfig *config) 201 { 202 PS_ASSERT_PTR_NON_NULL(cell, false); 203 PS_ASSERT_PTR_NON_NULL(cell->readouts, false); 204 PS_ASSERT_PTR_NON_NULL(view, false); 205 206 pmFPAview *thisView = pmFPAviewAlloc(view->nRows); // Copy of input view 207 *thisView = *view; 208 209 for (int i = 0; i < cell->readouts->n; i++) { 210 pmReadout *readout = cell->readouts->data[i]; 211 thisView->readout = i; 212 if (!pmReadoutWriteSubtractionKernels(readout, file->fits)) { 213 psError(PS_ERR_IO, false, "Failed to write %dth readout", i); 214 psFree(thisView); 215 return false; 216 } 217 } 218 psFree(thisView); 219 return true; 220 } 221 222 static bool pmChipWriteSubtractionKernels(pmChip *chip, const pmFPAview *view, 223 pmFPAfile *file, pmConfig *config) 224 { 225 PS_ASSERT_PTR_NON_NULL(chip, false); 226 PS_ASSERT_PTR_NON_NULL(chip->cells, false); 227 PS_ASSERT_PTR_NON_NULL(view, false); 228 229 pmFPAview *thisView = pmFPAviewAlloc(view->nRows); // Copy of input view 230 *thisView = *view; 231 232 for (int i = 0; i < chip->cells->n; i++) { 233 pmCell *cell = chip->cells->data[i]; 234 thisView->cell = i; 235 if (!pmCellWriteSubtractionKernels(cell, thisView, file, config)) { 236 psError(PS_ERR_IO, false, "Failed to write %dth cell", i); 237 psFree(thisView); 238 return false; 239 } 240 } 241 psFree(thisView); 242 return true; 243 } 244 245 static bool pmFPAWriteSubtractionKernels(pmFPA *fpa, const pmFPAview *view, 246 pmFPAfile *file, pmConfig *config) 247 { 248 PS_ASSERT_PTR_NON_NULL(view, false); 249 PS_ASSERT_PTR_NON_NULL(fpa, false); 250 PS_ASSERT_PTR_NON_NULL(fpa->chips, false); 251 252 pmFPAview *thisView = pmFPAviewAlloc(view->nRows); // Copy of input view 253 *thisView = *view; 254 255 for (int i = 0; i < fpa->chips->n; i++) { 256 pmChip *chip = fpa->chips->data[i]; 257 thisView->chip = i; 258 if (!pmChipWriteSubtractionKernels(chip, thisView, file, config)) { 259 psError(PS_ERR_IO, false, "Failed to write %dth chip", i); 260 psFree(thisView); 261 return false; 262 } 263 } 264 psFree(thisView); 265 return true; 266 } 267 268 ////////////////////////////////////////////////////////////////////////////////////////////////////////////// 192 269 193 270 … … 283 360 return true; 284 361 } 362 363 static bool pmCellReadSubtractionKernels(pmCell *cell, const pmFPAview *view, 364 pmFPAfile *file, pmConfig *config) 365 { 366 PS_ASSERT_PTR_NON_NULL(view, false); 367 PS_ASSERT_PTR_NON_NULL(cell, false); 368 PS_ASSERT_PTR_NON_NULL(cell->readouts, false); 369 370 pmFPAview *thisView = pmFPAviewAlloc(view->nRows); // Copy of input view 371 *thisView = *view; 372 373 // Create a readout if none exists 374 if (!cell->readouts || cell->readouts->n == 0) { 375 pmReadout *readout = pmReadoutAlloc(cell); // New readout 376 psFree(readout); // Drop reference 377 } 378 379 cell->data_exists = false; 380 for (int i = 0; i < cell->readouts->n; i++) { 381 pmReadout *readout = cell->readouts->data[i]; 382 thisView->readout = i; 383 pmReadoutReadSubtractionKernels(readout, file->fits); 384 if (!readout->data_exists) { 385 continue; 386 } 387 388 // load in the concept information for this cell 389 if (!pmConceptsReadCell(cell, PM_CONCEPT_SOURCE_HEADER, true, NULL)) { 390 psErrorClear(); 391 psWarning("Difficulty reading concepts for cell; attempting to proceed."); 392 } 393 cell->data_exists = true; 394 } 395 psFree(thisView); 396 397 return true; 398 } 399 400 static bool pmChipReadSubtractionKernels(pmChip *chip, const pmFPAview *view, 401 pmFPAfile *file, pmConfig *config) 402 { 403 PS_ASSERT_PTR_NON_NULL(view, false); 404 PS_ASSERT_PTR_NON_NULL(chip, false); 405 PS_ASSERT_PTR_NON_NULL(chip->cells, false); 406 407 pmFPAview *thisView = pmFPAviewAlloc(view->nRows); // Copy of input view 408 *thisView = *view; 409 410 chip->data_exists = false; 411 for (int i = 0; i < chip->cells->n; i++) { 412 pmCell *cell = chip->cells->data[i]; 413 thisView->cell = i; 414 pmCellReadSubtractionKernels(cell, thisView, file, config); 415 if (!cell->data_exists) { 416 continue; 417 } 418 chip->data_exists = true; 419 } 420 psFree(thisView); 421 422 if (!pmConceptsReadChip(chip, PM_CONCEPT_SOURCE_HEADER, true, true, NULL)) { 423 psError(PS_ERR_IO, false, "Failed to read concepts for chip.\n"); 424 return false; 425 } 426 427 return true; 428 } 429 430 static bool pmFPAReadSubtractionKernels(pmFPA *fpa, const pmFPAview *view, 431 pmFPAfile *file, pmConfig *config) 432 { 433 PS_ASSERT_PTR_NON_NULL(view, false); 434 PS_ASSERT_PTR_NON_NULL(file, false); 435 PS_ASSERT_PTR_NON_NULL(file->fpa, false); 436 PS_ASSERT_PTR_NON_NULL(file->fpa->chips, false); 437 438 pmFPAview *thisView = pmFPAviewAlloc(view->nRows); // Copy of input view 439 *thisView = *view; 440 441 for (int i = 0; i < fpa->chips->n; i++) { 442 pmChip *chip = fpa->chips->data[i]; 443 thisView->chip = i; 444 pmChipReadSubtractionKernels(chip, thisView, file, config); 445 } 446 psFree(thisView); 447 448 if (!pmConceptsReadFPA(fpa, PM_CONCEPT_SOURCE_HEADER, true, NULL)) { 449 psError(PS_ERR_IO, false, "Failed to read concepts for fpa.\n"); 450 return false; 451 } 452 453 return true; 454 } 455 456 ////////////////////////////////////////////////////////////////////////////////////////////////////////////// 457 458 bool pmSubtractionWriteKernels(const pmFPAview *view, pmFPAfile *file, pmConfig *config) 459 { 460 PS_ASSERT_PTR_NON_NULL(view, false); 461 PS_ASSERT_PTR_NON_NULL(file, false); 462 PS_ASSERT_PTR_NON_NULL(file->fpa, false); 463 464 pmFPA *fpa = pmFPAfileSuitableFPA(file, view, config, false); // Suitable FPA for writing 465 466 if (view->chip == -1) { 467 if (!pmFPAWriteSubtractionKernels(fpa, view, file, config)) { 468 psError(PS_ERR_IO, false, "Failed to write subtraction kernels from fpa"); 469 psFree(fpa); 470 return false; 471 } 472 psFree(fpa); 473 return true; 474 } 475 476 if (view->chip >= fpa->chips->n) { 477 psError(PS_ERR_UNKNOWN, false, "Writing chip == %d (>= chips->n == %ld)", view->chip, fpa->chips->n); 478 psFree(fpa); 479 return false; 480 } 481 pmChip *chip = fpa->chips->data[view->chip]; 482 483 if (view->cell == -1) { 484 if (!pmChipWriteSubtractionKernels(chip, view, file, config)) { 485 psError(PS_ERR_IO, false, "Failed to write objects from chip"); 486 psFree(fpa); 487 return false; 488 } 489 psFree(fpa); 490 return true; 491 } 492 493 if (view->cell >= chip->cells->n) { 494 psError(PS_ERR_UNKNOWN, false, "Writing cell == %d (>= cells->n == %ld)", 495 view->cell, chip->cells->n); 496 psFree(fpa); 497 return false; 498 } 499 pmCell *cell = chip->cells->data[view->cell]; 500 501 if (view->readout == -1) { 502 if (!pmCellWriteSubtractionKernels(cell, view, file, config)) { 503 psError(PS_ERR_IO, false, "Failed to write objects from cell"); 504 psFree(fpa); 505 return false; 506 } 507 psFree(fpa); 508 return true; 509 } 510 511 if (view->readout >= cell->readouts->n) { 512 psError(PS_ERR_UNKNOWN, false, "Writing readout == %d (>= readouts->n == %ld)", 513 view->readout, cell->readouts->n); 514 psFree(fpa); 515 return false; 516 } 517 pmReadout *readout = cell->readouts->data[view->readout]; 518 519 if (!pmReadoutWriteSubtractionKernels(readout, file->fits)) { 520 psError(PS_ERR_IO, false, "Failed to write objects from readout %d", view->readout); 521 psFree(fpa); 522 return false; 523 } 524 525 psFree(fpa); 526 return true; 527 } 528 529 bool pmSubtractionWritePHU(const pmFPAview *view, pmFPAfile *file, pmConfig *config) 530 { 531 PS_ASSERT_PTR_NON_NULL(view, false); 532 PS_ASSERT_PTR_NON_NULL(file, false); 533 534 if (file->wrote_phu) { 535 return true; 536 } 537 if (file->fileLevel != PM_FPA_LEVEL_FPA) { 538 return true; 539 } 540 if (file->fpa->chips->n == 1) { 541 return true; 542 } 543 544 // find the FPA phu 545 pmFPA *fpa = pmFPAfileSuitableFPA(file, view, config, false); // Suitable FPA for writing 546 pmHDU *phu = psMemIncrRefCounter(pmFPAviewThisPHU(view, fpa)); 547 psFree(fpa); 548 549 // if there is no PHU, this is a single header+image (extension-less) file. This could be the case for an 550 // input SPLIT set of files being written out as a MEF. if there is a PHU, write it out as a 'blank' 551 psMetadata *outhead = psMetadataAlloc(); 552 if (phu) { 553 psMetadataCopy (outhead, phu->header); 554 } 555 psFree(phu); 556 557 pmConfigConformHeader(outhead, file->format); 558 559 psFitsWriteBlank(file->fits, outhead, ""); 560 file->wrote_phu = true; 561 562 psTrace("pmFPAfile", 5, "wrote phu %s (type: %d)\n", file->filename, file->type); 563 psFree(outhead); 564 565 return true; 566 } 567 568 bool pmSubtractionReadKernels(const pmFPAview *view, pmFPAfile *file, pmConfig *config) 569 { 570 PS_ASSERT_PTR_NON_NULL(view, false); 571 PS_ASSERT_PTR_NON_NULL(file, false); 572 PS_ASSERT_PTR_NON_NULL(file->fpa, false); 573 574 pmFPA *fpa = file->fpa; 575 576 if (view->chip == -1) { 577 pmFPAReadSubtractionKernels(fpa, view, file, config); 578 return true; 579 } 580 581 if (view->chip >= fpa->chips->n) { 582 return false; 583 } 584 pmChip *chip = fpa->chips->data[view->chip]; 585 586 if (view->cell == -1) { 587 pmChipReadSubtractionKernels(chip, view, file, config); 588 return true; 589 } 590 591 if (view->cell >= chip->cells->n) { 592 return false; 593 } 594 pmCell *cell = chip->cells->data[view->cell]; 595 596 if (view->readout == -1) { 597 pmCellReadSubtractionKernels(cell, view, file, config); 598 return true; 599 } 600 601 if (view->readout >= cell->readouts->n) { 602 return false; 603 } 604 pmReadout *readout = cell->readouts->data[view->readout]; 605 606 return pmReadoutReadSubtractionKernels(readout, file->fits); 607 } -
trunk/psModules/src/imcombine/pmSubtractionIO.h
r18146 r19189 20 20 21 21 22 bool pmSubtractionReadKernels(const pmFPAview *view, ///< View into which to read 23 pmFPAfile *file, ///< File from which to read 24 pmConfig *config ///< Configuration 25 ); 26 27 bool pmSubtractionWriteKernels(const pmFPAview *view, ///< View from which to write 28 pmFPAfile *file, ///< File to which to write 29 pmConfig *config ///< Configuration 30 ); 31 32 bool pmSubtractionWritePHU(const pmFPAview *view, // View to PHU 33 pmFPAfile *file, ///< File to which to write 34 pmConfig *config ///< Configuration 35 ); 36 22 37 #endif
Note:
See TracChangeset
for help on using the changeset viewer.
