Changeset 30466 for trunk/ippTools/src/dqstatstool.c
- Timestamp:
- Feb 2, 2011, 4:20:38 PM (15 years ago)
- File:
-
- 1 edited
-
trunk/ippTools/src/dqstatstool.c (modified) (6 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/ippTools/src/dqstatstool.c
r28427 r30466 92 92 } 93 93 else { 94 psStringAppend(&query, " AND ( invalid IS NULL OR invalid = 1) ");94 psStringAppend(&query, " AND (warp_id IS NOT NULL AND invalid IS NULL) "); 95 95 } 96 96 … … 402 402 403 403 if (psMetadataLookupStr(&status,enginedef,"COLNAME")&& 404 isfinite(psMetadataLookupF32(&status,enginedef,"MINIMUM"))&& 405 isfinite(psMetadataLookupF32(&status,enginedef,"MAXIMUM"))) { 404 (strcmp(psMetadataLookupStr(&status,enginedef,"RULETYPE"),"STRICT") == 0)&& 405 (isfinite(psMetadataLookupF32(&status,enginedef,"MINIMUM"))&& 406 isfinite(psMetadataLookupF32(&status,enginedef,"MAXIMUM")))) { 406 407 psArrayAdd(decisionRules,decisionRules->n,enginedef); 408 } 409 else if (psMetadataLookupStr(&status,enginedef,"COLNAME")&& 410 (strcmp(psMetadataLookupStr(&status,enginedef,"RULETYPE"),"CDF") == 0)&& 411 (isfinite(psMetadataLookupF32(&status,enginedef,"CDF00"))&& 412 isfinite(psMetadataLookupF32(&status,enginedef,"CDF50"))&& 413 isfinite(psMetadataLookupF32(&status,enginedef,"CDF100")))) { 414 psArrayAdd(decisionRules,decisionRules->n, enginedef); 415 } 416 else if (strcmp(psMetadataLookupStr(&status,enginedef,"RULETYPE"),"UNUSED") == 0) { 407 417 } 408 418 else { … … 637 647 // Calculate if this exposure was "good" or not. 638 648 bool accept = true; 649 psF32 quality = 1.0; 639 650 for (long j = 0; j < decisionRules->n; j++) { 640 651 psMetadata *rule = decisionRules->data[j]; … … 644 655 psError(PS_EXIT_CONFIG_ERROR, false, "Unable to find column name"); 645 656 return(false); 646 }647 psF32 min_value = psMetadataLookupF32(&status,rule,"MINIMUM");648 if (!status) {649 psError(PS_EXIT_CONFIG_ERROR, false, "Unable to find min value for %s",colname);650 return(false);651 }652 psF32 max_value = psMetadataLookupF32(&status,rule,"MAXIMUM");653 if (!status) {654 psError(PS_EXIT_CONFIG_ERROR, false, "Unable to find max value for %s",colname);655 return(false);656 }657 psString filter = psMetadataLookupStr(&status,rule,"FILTER");658 if (!status) {659 status = true;660 }661 if (filter) {662 psString imfilter = psMetadataLookupStr(&status,tableRow,"FILTER");663 if (strcmp(filter,imfilter) != 0) {664 continue;665 }666 657 } 667 658 // Not happy with this being set to a F32. Can this ever be something else? 668 659 psF32 value = psMetadataLookupF32(&status,tableRow,colname); 669 660 if (!status) { 670 psError(PS_EXIT_CONFIG_ERROR, false, "Unable to find column %s (%f %f %f) in compare with rule.",colname,min_value,max_value,value); 661 psError(PS_EXIT_CONFIG_ERROR, false, "Unable to find column %s (%f) in compare with rule.", 662 colname,value); 671 663 psFree(colNames); 672 664 psFree(colTypes); … … 677 669 return(false); 678 670 } 679 if ((value > max_value)||(value < min_value)) { 680 accept = false; 681 } 671 psString filter = psMetadataLookupStr(&status,rule,"FILTER"); 672 if (!status) { 673 status = true; 674 } 675 if (filter) { 676 psString imfilter = psMetadataLookupStr(&status,tableRow,"FILTER"); 677 if (strcmp(filter,imfilter) != 0) { 678 continue; 679 } 680 } 681 682 if (strcmp(psMetadataLookupStr(&status,rule,"RULETYPE"),"STRICT") == 0) { 683 psF32 min_value = psMetadataLookupF32(&status,rule,"MINIMUM"); 684 if (!status) { 685 psError(PS_EXIT_CONFIG_ERROR, false, "Unable to find min value for %s",colname); 686 return(false); 687 } 688 psF32 max_value = psMetadataLookupF32(&status,rule,"MAXIMUM"); 689 if (!status) { 690 psError(PS_EXIT_CONFIG_ERROR, false, "Unable to find max value for %s",colname); 691 return(false); 692 } 693 694 if ((value > max_value)||(value < min_value)) { 695 accept = false; 696 } 697 } // End STRICT min/max rule parsing 698 else if (strcmp(psMetadataLookupStr(&status,rule,"RULETYPE"),"CDF") == 0) { 699 // I'm just going to implement a quick linear interpolation over the points that exist. 700 psF32 min_value,max_value = 99; 701 psF32 min_cdf = 0.0,max_cdf = 1.0; 702 psF32 cdf; 703 psF32 try[22] = {0.00,0.05,0.10,0.15,0.20,0.25,0.30,0.35,0.40,0.45,0.50, 704 0.55,0.60,0.65,0.70,0.75,0.80,0.85,0.90,0.95,0.99,1.00}; 705 int i; 706 int done = 0; 707 status = true; 708 min_value = psMetadataLookupF32(&status,rule,"CDF00"); 709 min_cdf = 0.0; 710 if (!isfinite(value)) { 711 quality = 0.0; 712 continue; 713 } 714 if (!status) { 715 status = true; 716 psError(PS_EXIT_CONFIG_ERROR, false, "Unable to find CDF00 value for %s",colname); 717 } 718 if (value < min_value) { 719 if (quality > min_cdf) { 720 quality = 0.0; 721 continue; 722 } 723 } 724 725 for (i = 1; i < 22; i++) { 726 psString label = psStringCopy(""); 727 psStringAppend(&label,"CDF%02d",(int) (100 * try[i])); 728 729 max_value = psMetadataLookupF32(&status,rule,label); 730 max_cdf = try[i]; 731 if (!status) { 732 status = true; 733 psError(PS_EXIT_CONFIG_ERROR, false, "Unable to find %s value for %s",label,colname); 734 } 735 if ((value < max_value)&&(value > min_value)) { 736 cdf = ((value - min_value) * max_cdf + (max_value - value) * min_cdf) / (max_value - min_value); 737 // fprintf(stderr,"value: %f %f %f %f %f %f %d %d %f\n",value,quality,min_cdf,min_value,max_cdf,max_value, value < max_value, value > min_value,cdf); 738 if (quality > cdf) { 739 quality = cdf; 740 done = 1; 741 i = 25; 742 } 743 } 744 min_value = max_value; 745 min_cdf = max_cdf; 746 } 747 if (done) { 748 continue; 749 } 750 // Reached end of array without finding the value; 751 if (value > min_value) { 752 if (quality > min_cdf) { 753 quality = 1.0; 754 } 755 } 756 757 758 } // End CDF rule parsing 682 759 } 683 760 bool success; … … 695 772 return(false); 696 773 } 774 success = psMetadataAddF32(tableRow,PS_LIST_TAIL,"QUALITY",0,"",quality); 775 if (!success) { 776 psError(PS_ERR_UNKNOWN,false, "Error adding exposure quality to fits table row."); 777 psFree(colNames); 778 psFree(colTypes); 779 psFree(contents); 780 psFree(query); 781 psFree(outTable); 782 psFree(statsoutput); 783 psFree(statIter); 784 psFree(tableRow); 785 return(false); 786 } 697 787 698 788 // Add the row to the table array.
Note:
See TracChangeset
for help on using the changeset viewer.
