Changeset 23576 for trunk/psModules/src/camera/pmFPAfileIO.c
- Timestamp:
- Mar 27, 2009, 1:26:55 PM (17 years ago)
- File:
-
- 1 edited
-
trunk/psModules/src/camera/pmFPAfileIO.c (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psModules/src/camera/pmFPAfileIO.c
r23447 r23576 635 635 } 636 636 637 psString pmFPAfileName(const pmFPAfile *file, const pmFPAview *view, pmConfig *config) 638 { 639 PS_ASSERT_PTR_NON_NULL(file, NULL); 640 PS_ASSERT_PTR_NON_NULL(view, NULL); 641 PS_ASSERT_PTR_NON_NULL(config, NULL); 642 643 psString filename = pmFPAfileNameFromRule(file->filerule, file, view); // Filename, based on rule 644 if (!filename) { 645 psError(PS_ERR_IO, true, "Cannot determine file name from rule"); 646 return false; 647 } 648 649 // indirect filenames: these come from a list on the command line or elsewhere 650 if (!strcasecmp(filename, "@FILES")) { 651 psString filesrc = pmFPAfileNameFromRule(file->filesrc, file, view); // Source of file name 652 if (!filesrc) { 653 psError(PS_ERR_IO, false, "error converting filesrc to name %s", file->filesrc); 654 return false; 655 } 656 psFree(filename); 657 filename = psMemIncrRefCounter(psMetadataLookupStr(NULL, file->names, filesrc)); 658 if (!filename) { 659 psError(PS_ERR_IO, false, "filename lookup error (@FILES) for %s : %s", file->filesrc, filesrc); 660 psFree(filesrc); 661 return false; 662 } 663 psFree(filesrc); 664 } 665 666 // get name from detrend database 667 // file->detrend->detID contains the desired -det_id detID -iteration iter string 668 if (!strcasecmp(filename, "@DETDB")) { 669 if (!file->detrend) { 670 psError(PS_ERR_UNEXPECTED_NULL, true, "Unable to find information about selected detrend."); 671 return false; 672 } 673 psMetadata *menu = psMetadataLookupMetadata(NULL, file->camera, "CLASSID"); // Menu of class IDs 674 if (!menu) { 675 psError(PS_ERR_IO, false, "Unable to find CLASSID metadata in camera configuration"); 676 return false; 677 } 678 const char *rule = psMetadataLookupStr(NULL, menu, file->detrend->level); // Rule for class_id 679 if (!rule || strlen(rule) == 0) { 680 psError(PS_ERR_IO, false, "Unable to find %s in CLASSID in camera configuration", 681 file->detrend->level); 682 return false; 683 } 684 psString classId = pmFPAfileNameFromRule(rule, file, view); // The class identifier, for pmDetrendFile 685 if (!classId) { 686 psError(PS_ERR_IO, false, "error converting CLASSID rule to name: %s\n", rule); 687 return false; 688 } 689 690 psTrace("psModules.camera", 6, "looking for detrend (%s, %s)\n", file->detrend->detID, classId); 691 psFree(filename); 692 filename = pmDetrendFile(file->detrend->detID, classId, config); 693 if (!filename) { 694 psError(PS_ERR_IO, false, "failed to find a valid detrend image for detID %s : classID %s", 695 file->detrend->detID, classId); 696 psFree(classId); 697 return false; 698 } 699 700 psTrace("psModules.camera", 6, "got detrend file %s", filename); 701 psFree(classId); 702 } 703 704 return filename; 705 } 706 637 707 // open file (if not already opened). 638 708 // this function is only called only within pmFPAfileRead or pmFPAfileWrite. … … 672 742 673 743 // determine the file name, free a name allocated earlier 674 psFree (file->filename); 675 file->filename = pmFPAfileNameFromRule (file->filerule, file, view); 676 if (file->filename == NULL) { 677 psError(PS_ERR_IO, true, "Filename is NULL"); 678 return false; 679 } 680 681 // indirect filenames: these come from a list on the command line or elsewhere 682 if (!strcasecmp (file->filename, "@FILES")) { 683 char *filesrc = pmFPAfileNameFromRule (file->filesrc, file, view); 684 if (filesrc == NULL) { 685 psError(PS_ERR_IO, false, "error converting filesrc to name %s\n", file->filesrc); 686 return false; 687 } 688 689 psFree (file->filename); 690 file->filename = psMetadataLookupStr (&status, file->names, filesrc); 691 692 if (file->filename == NULL) { 693 psError(PS_ERR_IO, true, "filename lookup error (@FILES) for %s : %s\n", file->filesrc, filesrc); 694 psFree (filesrc); 695 return false; 696 } 697 // psMetadataLookupStr just returns a view, file->filename must be protected 698 psMemIncrRefCounter (file->filename); 699 psFree (filesrc); 700 } 701 702 // get name from detrend database 703 // file->detrend->detID contains the desired -det_id detID -iteration iter string 704 if (!strcasecmp (file->filename, "@DETDB")) { 705 if (!file->detrend) { 706 psError(PS_ERR_UNEXPECTED_NULL, true, "Unable to find information about selected detrend."); 707 return false; 708 } 709 710 psString classId = NULL; // The class identifier, to pass to pmDetrendFile 711 psMetadata *menu = psMetadataLookupMetadata(&status, file->camera, "CLASSID"); // Menu of class IDs 712 if (!status || !menu) { 713 psError(PS_ERR_IO, false, "Unable to find CLASSID metadata in camera configuration"); 714 return false; 715 } 716 const char *rule = psMetadataLookupStr(&status, menu, file->detrend->level); // Rule for class_id 717 if (!status || !rule || strlen(rule) == 0) { 718 psError(PS_ERR_IO, false, "Unable to find %s in CLASSID in camera configuration", file->detrend->level); 719 return false; 720 } 721 classId = pmFPAfileNameFromRule(rule, file, view); 722 if (!classId) { 723 psError(PS_ERR_IO, false, "error converting CLASSID rule to name: %s\n", rule); 724 return false; 725 } 726 psTrace ("psModules.camera", 6, "looking for detrend (%s, %s)\n", file->detrend->detID, classId); 727 psFree (file->filename); 728 729 file->filename = pmDetrendFile(file->detrend->detID, classId, config); 730 if (file->filename == NULL) { 731 psError(PS_ERR_IO, false, "failed to find a valid detrend image for detID %s : classID %s\n", file->detrend->detID, classId); 732 psFree (classId); 733 return false; 734 } 735 736 psTrace ("psModules.camera", 6, "got detrend file %s\n", file->filename); 737 psFree (classId); 744 psFree(file->filename); 745 file->filename = pmFPAfileName(file, view, config); 746 if (!file->filename) { 747 psError(PS_ERR_IO, true, "Unable to determine filename"); 748 return false; 738 749 } 739 750
Note:
See TracChangeset
for help on using the changeset viewer.
