Changeset 9946
- Timestamp:
- Nov 9, 2006, 5:21:33 PM (20 years ago)
- Location:
- trunk/ippTools/src
- Files:
-
- 2 edited
-
dettool.c (modified) (16 diffs)
-
dettoolConfig.c (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/ippTools/src/dettool.c
r9942 r9946 806 806 PS_ASSERT_PTR_NON_NULL(config, false); 807 807 808 // what type of detRun is this?809 // det_type is required810 psString det_type = psMetadataLookupStr(&status, config->args, "-det_type");811 if (!status) {812 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -det_type");813 return false;814 }815 if (!det_type) {816 psError(PS_ERR_UNKNOWN, true, "-det_type is required");817 return false;818 }819 820 ps Metadata *where = psMetadataAlloc();808 // det_id is the only required input 809 psString det_id = psMetadataLookupStr(&status, config->args, "-det_id"); 810 if (!status) { 811 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -det_id"); 812 return false; 813 } 814 if (!det_id) { 815 psError(PS_ERR_UNKNOWN, true, "-det_id is required"); 816 return false; 817 } 818 819 // lookup the detRun that we will be basing this one on 820 psArray *detRuns = NULL; 821 821 { 822 bool status = false; 823 psString exp_type = psMetadataLookupStr(&status, config->args, "-exp_type"); if (!status) { 824 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -exp_type"); 825 return false; 826 } 827 if (exp_type) { 828 if (!psMetadataAddStr(where, PS_LIST_TAIL, "exp_type", 0, "==", exp_type)) { 829 psError(PS_ERR_UNKNOWN, false, "failed to add item exp_type"); 830 psFree(where); 831 return false; 832 } 833 } 834 // map -inst -> camera 835 psString camera = psMetadataLookupStr(&status, config->args, "-inst"); 836 if (!status) { 837 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -inst"); 838 return false; 839 } 840 if (camera) { 841 if (!psMetadataAddStr(where, PS_LIST_TAIL, "camera", 0, "==", camera)) { 842 psError(PS_ERR_UNKNOWN, false, "failed to add item inst"); 843 psFree(where); 844 return false; 845 } 846 } 847 psString telescope = psMetadataLookupStr(&status, config->args, "-telescope"); if (!status) { 848 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -telescope"); 849 return false; 850 } 851 if (telescope) { 852 if (!psMetadataAddStr(where, PS_LIST_TAIL, "telescope", 0, "==", telescope)) { 853 psError(PS_ERR_UNKNOWN, false, "failed to add item telescope"); 854 psFree(where); 855 return false; 856 } 857 } 858 psString filter = psMetadataLookupStr(&status, config->args, "-filter"); 859 if (!status) { 860 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -filter"); 861 return false; 862 } 863 if (filter) { 864 if (!psMetadataAddStr(where, PS_LIST_TAIL, "filter", 0, "==", filter)) { 865 psError(PS_ERR_UNKNOWN, false, "failed to add item filter"); 866 psFree(where); 867 return false; 868 } 869 } 870 psString uri = psMetadataLookupStr(&status, config->args, "-uri"); 871 if (!status) { 872 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -filter"); 873 return false; 874 } 875 if (uri) { 876 if (!psMetadataAddStr(where, PS_LIST_TAIL, "uri", 0, "==", uri)) { 877 psError(PS_ERR_UNKNOWN, false, "failed to add item uri"); 878 psFree(where); 879 return false; 880 } 881 } 882 } 883 if (!psListLength(where->list)) { 822 psMetadata *where = psMetadataAlloc(); 823 psMetadataAddS32(where, PS_LIST_TAIL, "det_id", 0, "==", (psS32)atoi(det_id)); 824 detRuns = detRunSelectRowObjects(config->dbh, where, 0); 884 825 psFree(where); 885 where = NULL; 886 } 887 888 // there is some namespace overlap between the names of the fields we'd 889 // like to search by to setup a detrun and the names of the fields we'd 890 // like to assign values to so I've seperated them but prepending set- to 891 // the assigned values 892 893 // optional 826 } 827 if (!detRuns) { 828 psError(PS_ERR_UNKNOWN, false, "database error"); 829 return false; 830 } 831 // sanity check the result... we should have only found one det_id 832 if (psArrayLength(detRuns) != 1) { 833 psAbort(config->argv[0], "found more then one detRun matching det_id %d(this should not happen)", (psS32)atoi(det_id)); 834 return false; 835 } 836 837 // pull the detRun object out the result array 838 detRunRow *detRun = psMemIncrRefCounter(detRuns->data[0]); 839 840 // discard the resultarray 841 psFree(detRuns) 842 843 // set the det_id to 0/NULL so the database can assign it 844 detRun->det_id = 0; 845 846 // reset the iteration to 0 847 detRun->iteration = 0; 848 849 // reset the state to "run" 850 psFree(detRun->state); 851 detRun->state = psStringCopy("run"); 852 853 // walk through the optional values and update the detRun as required 894 854 psString exp_type = psMetadataLookupStr(&status, config->args, "-set_exp_type"); 895 855 if (!status) { … … 897 857 return false; 898 858 } 859 if (exp_type) { 860 detRun->exp_type = exp_type; 861 } 899 862 900 863 psString filter = psMetadataLookupStr(&status, config->args, "-set_filter"); … … 903 866 return false; 904 867 } 868 if (filter) { 869 detRun->filter = filter; 870 } 905 871 906 872 psF32 airmass = psMetadataLookupF32(&status, config->args, "-set_airmass"); … … 909 875 return false; 910 876 } 877 if (!isnan(airmass)) { 878 detRun->airmass = airmass; 879 } 911 880 912 881 psF32 exp_time = psMetadataLookupF32(&status, config->args, "-set_exp_time"); … … 915 884 return false; 916 885 } 886 if (!isnan(exp_time)) { 887 detRun->exp_time = exp_time; 888 } 917 889 918 890 psF32 ccd_temp = psMetadataLookupF32(&status, config->args, "-set_ccd_temp"); … … 921 893 return false; 922 894 } 895 if (!isnan(ccd_temp)) { 896 detRun->ccd_temp = ccd_temp; 897 } 923 898 924 899 psF64 posang = psMetadataLookupF32(&status, config->args, "-set_posang"); … … 927 902 return false; 928 903 } 904 if (!isnan(posang)) { 905 detRun->posang = posang; 906 } 929 907 930 908 psString object = psMetadataLookupStr(&status, config->args, "-set_object"); … … 933 911 return false; 934 912 } 913 if (object) { 914 detRun->object = object; 915 } 916 935 917 psTime *registered = NULL; 936 918 { … … 942 924 // pass through NULL as this is an optional field 943 925 if (registeredStr) { 926 psFree(registered); 944 927 registered = psTimeFromISO(registeredStr, PS_TIME_UTC); 945 } else {946 registered = NULL;928 detRun->registered = psMemIncrRefCounter(registered); 929 psFree(registered); 947 930 } 948 931 } … … 957 940 // pass through NULL as this is an optional field 958 941 if (use_beginStr) { 942 psFree(use_begin); 959 943 use_begin = psTimeFromISO(use_beginStr, PS_TIME_UTC); 960 } else {961 use_begin = NULL;944 detRun->use_begin = psMemIncrRefCounter(use_begin); 945 psFree(use_begin); 962 946 } 963 947 } … … 972 956 // pass through NULL as this is an optional field 973 957 if (use_endStr) { 958 psFree(use_end); 974 959 use_end = psTimeFromISO(use_endStr, PS_TIME_UTC); 975 } else { 976 use_end = NULL; 977 } 978 } 979 980 // search for rawDetrendExps with the specified options 981 psArray *detrendExps = rawDetrendExpSelectRowObjects(config->dbh, where, 0); 982 psFree(where); 983 // make sure that we found at least one rawDetrendExp 984 if (!detrendExps) { 985 psError(PS_ERR_UNKNOWN, false, "no rawDetrendExp rows found"); 986 return false; 960 detRun->use_end = psMemIncrRefCounter(use_end); 961 psFree(use_end); 962 } 987 963 } 988 964 … … 990 966 if (!psDBTransaction(config->dbh)) { 991 967 psError(PS_ERR_UNKNOWN, false, "database error"); 992 psFree(detrendExps); 993 return false; 994 } 995 996 // the first iteration is always 0 997 // XXX det_id 998 detRunInsert(config->dbh, 999 0, 1000 0, 1001 det_type, 1002 "run", 1003 exp_type, 1004 filter, 1005 airmass, 1006 exp_time, 1007 ccd_temp, 1008 posang, 1009 object, 1010 registered, 1011 use_begin, 1012 use_end 1013 ); 1014 psFree(registered); 1015 psFree(use_begin); 1016 psFree(use_end); 1017 long det_id = psDBLastInsertID(config->dbh); 1018 1019 // create new detInputExp row(s) from the rawDetrendExp row(s) 1020 psArray *inputExps = psArrayAllocEmpty(psArrayLength(detrendExps)); 1021 for (long i = 0; i < psArrayLength(detrendExps); i++) { 1022 detInputExpRow *inputExp = rawDetrenTodetInputExpRow( 1023 detrendExps->data[i], 1024 det_id, 1025 0 // the first iteration is explicitly 0 1026 ); 1027 psArrayAdd(inputExps, 0, inputExp); 1028 psFree(inputExp); 1029 } 1030 1031 psFree(detrendExps); 1032 1033 // insert detInputExp objects into the database 1034 if (!detInputExpInsertObjects(config->dbh, inputExps)) { 968 psFree(detRun); 969 return false; 970 } 971 972 if (!detRunInsertObject(config->dbh, detRun)) { 1035 973 psError(PS_ERR_UNKNOWN, false, "database error"); 1036 974 // rollback … … 1038 976 psError(PS_ERR_UNKNOWN, false, "database error"); 1039 977 } 1040 psFree(inputExps); 1041 return false; 1042 } 1043 psFree(inputExps); 978 psFree(detRun); 979 return false; 980 } 981 psFree(detRun); 982 983 // get the det_id 984 long newDet_id = psDBLastInsertID(config->dbh); 985 986 char *query = 987 "INSERT INTO detInputExp" 988 " SELECT" 989 " %d," 990 " 0," 991 " detResidExp.exp_tag," 992 " detResidExp.accept" 993 " FROM detResidExp" 994 " WHERE det_id = %d"; 995 996 if (!p_psDBRunQuery(config->dbh, query, (psS32)newDet_id, (psS32)atoi(det_id))) { 997 psError(PS_ERR_UNKNOWN, false, "database error"); 998 return false; 999 } 1044 1000 1045 1001 // point of no return for det_id creation … … 1059 1015 } 1060 1016 1017 { 1061 1018 // print the new det_id 1062 1019 psArray *detRuns = NULL; 1063 1020 { 1064 1021 psMetadata *where = psMetadataAlloc(); 1065 psMetadataAddS32(where, PS_LIST_TAIL, "det_id", 0, "==", det_id);1022 psMetadataAddS32(where, PS_LIST_TAIL, "det_id", 0, "==", newDet_id); 1066 1023 detRuns = psDBSelectRows(config->dbh, "detRun", where, 0); 1067 1024 psFree(where); … … 1071 1028 return false; 1072 1029 } 1073 // sanity check results1030 // sanity check the result... we should have only found one det_id 1074 1031 if (psArrayLength(detRuns) != 1) { 1075 psAbort(config->argv[0], "found more then one detRun matching det_id %ld(this should not happen)", det_id);1032 psAbort(config->argv[0], "found more then one detRun matching det_id %ld(this should not happen)", newDet_id); 1076 1033 return false; 1077 1034 } … … 1091 1048 } 1092 1049 psFree(detRuns); 1050 } 1093 1051 1094 1052 return true; -
trunk/ippTools/src/dettoolConfig.c
r9942 r9946 93 93 // -definebyquery 94 94 psMetadata *definebyqueryArgs = psMetadataAlloc(); 95 psMetadataAddStr(definebyqueryArgs, PS_LIST_TAIL, "-det_type", 0, 96 "define the type of detrend run (required)", NULL); 97 psMetadataAddStr(definebyqueryArgs, PS_LIST_TAIL, "-exp_type", 0, 98 "search by exposure type", NULL); 99 psMetadataAddStr(definebyqueryArgs, PS_LIST_TAIL, "-inst", 0, 100 "search by camera", NULL); 101 psMetadataAddStr(definebyqueryArgs, PS_LIST_TAIL, "-telescope", 0, 102 "search by telescope", NULL); 103 psMetadataAddStr(definebyqueryArgs, PS_LIST_TAIL, "-filter", 0, 104 "search by filter", NULL); 105 psMetadataAddStr(definebyqueryArgs, PS_LIST_TAIL, "-uri", 0, 106 "search by URL", NULL); 95 psMetadataAddStr(definebyqueryArgs, PS_LIST_TAIL, "-det_id", 0, 96 "det ID to base the new detrun on (required)", NULL); 107 97 psMetadataAddStr(definebyqueryArgs, PS_LIST_TAIL, "-set_exp_type", 0, 108 98 "define exposure type", NULL); … … 130 120 // -definebydetrun 131 121 psMetadata *definebydetrunArgs = psMetadataAlloc(); 132 psMetadataAddStr(definebydetrunArgs, PS_LIST_TAIL, "-det_type", 0, 133 "define the type of detrend run (required)", NULL); 134 psMetadataAddStr(definebydetrunArgs, PS_LIST_TAIL, "-exp_type", 0, 135 "search by exposure type", NULL); 136 psMetadataAddStr(definebydetrunArgs, PS_LIST_TAIL, "-inst", 0, 137 "search by camera", NULL); 138 psMetadataAddStr(definebydetrunArgs, PS_LIST_TAIL, "-telescope", 0, 139 "search by telescope", NULL); 140 psMetadataAddStr(definebydetrunArgs, PS_LIST_TAIL, "-filter", 0, 141 "search by filter", NULL); 142 psMetadataAddStr(definebydetrunArgs, PS_LIST_TAIL, "-uri", 0, 143 "search by URL", NULL); 122 psMetadataAddStr(definebydetrunArgs, PS_LIST_TAIL, "-det_id", 0, 123 "det ID to base a new detRun on (required)", NULL); 144 124 psMetadataAddStr(definebydetrunArgs, PS_LIST_TAIL, "-set_exp_type", 0, 145 125 "define exposure type", NULL);
Note:
See TracChangeset
for help on using the changeset viewer.
