Changeset 16050
- Timestamp:
- Jan 8, 2008, 4:36:07 PM (18 years ago)
- File:
-
- 1 edited
-
branches/end_stage/ippTools/src/regtool.c (modified) (8 diffs)
Legend:
- Unmodified
- Added
- Removed
-
branches/end_stage/ippTools/src/regtool.c
r16049 r16050 43 43 static bool revertprocessedexpMode(pxConfig *config); 44 44 static bool updateprocessedexpMode(pxConfig *config); 45 46 47 // static guidePendingExpRow *newToP1PendingExp(newExpRow *newExp);48 //static chipPendingExpRow *newTochipPendingExp(pxConfig *config, newExpRow *newExp);49 //static chipInputImfileRow *rawImfileTochipInputImfile(pxConfig *config, psS64 chip_id, rawImfileRow *rawImfile);50 51 static rawExpRow *newToRawExp(pxConfig *config, newExpRow *exp);52 //static psU32 mapCodeStrToInt(const char *codeStr);53 54 45 55 46 # define MODECASE(caseName, func) \ … … 822 813 823 814 bool status = false; 815 // required 816 psString exp_name = psMetadataLookupStr(&status, config->args, "-exp_name"); 817 if (!status) { 818 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -exp_name"); 819 return false; 820 } 821 if (!exp_name) { 822 psError(PS_ERR_UNKNOWN, true, "-exp_name is required"); 823 return false; 824 } 825 826 psString camera = psMetadataLookupStr(&status, config->args, "-inst"); 827 if (!status) { 828 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -inst"); 829 return false; 830 } 831 if (!camera) { 832 psError(PS_ERR_UNKNOWN, true, "-inst is required"); 833 return false; 834 } 835 836 psString telescope = psMetadataLookupStr(&status, config->args, "-telescope"); 837 if (!status) { 838 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -telescope"); 839 return false; 840 } 841 if (!telescope) { 842 psError(PS_ERR_UNKNOWN, true, "-telescope is required"); 843 return false; 844 } 845 846 psString exp_tag = psMetadataLookupStr(&status, config->args, "-exp_tag"); 847 if (!status) { 848 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -exp_tag"); 849 return false; 850 } 851 if (!exp_tag) { 852 psError(PS_ERR_UNKNOWN, true, "-exp_tag is required"); 853 return false; 854 } 855 856 // optional 857 psString exp_type = psMetadataLookupStr(&status, config->args, "-exp_type"); 858 if (!status) { 859 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -exp_type"); 860 return false; 861 } 862 863 psString filelevel = psMetadataLookupStr(&status, config->args, "-filelevel"); 864 if (!status) { 865 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -filelevel"); 866 return false; 867 } 868 if (!filelevel) { 869 psError(PS_ERR_UNKNOWN, true, "-filelevel is required"); 870 return false; 871 } 872 873 psString workdir = psMetadataLookupStr(&status, config->args, "-workdir"); 874 if (!status) { 875 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -workdir"); 876 return false; 877 } 878 879 psString reduction = psMetadataLookupStr(&status, config->args, "-reduction"); 880 if (!status) { 881 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -reduction"); 882 return false; 883 } 884 885 psString filter = psMetadataLookupStr(&status, config->args, "-filter"); 886 if (!status) { 887 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -filter"); 888 return false; 889 } 890 891 psString comment = psMetadataLookupStr(&status, config->args, "-comment"); 892 if (!status) { 893 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -comment"); 894 return false; 895 } 896 897 psF32 airmass = psMetadataLookupF32(&status, config->args, "-airmass"); 898 if (!status) { 899 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -airmass"); 900 return false; 901 } 902 903 psF64 ra = psMetadataLookupF64(&status, config->args, "-ra"); 904 if (!status) { 905 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -ra"); 906 return false; 907 } 908 909 psF64 decl = psMetadataLookupF64(&status, config->args, "-decl"); 910 if (!status) { 911 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -decl"); 912 return false; 913 } 914 915 psF32 exp_time = psMetadataLookupF32(&status, config->args, "-exp_time"); 916 if (!status) { 917 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -exp_time"); 918 return false; 919 } 920 921 psF32 sat_pixel_frac = psMetadataLookupF32(&status, config->args, "-sat_pixel_frac"); 922 if (!status) { 923 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -sat_pixel_frac"); 924 return false; 925 } 926 927 psF64 bg = psMetadataLookupF64(&status, config->args, "-bg"); 928 if (!status) { 929 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -bg"); 930 return false; 931 } 932 933 psF64 bg_stdev = psMetadataLookupF64(&status, config->args, "-bg_stdev"); 934 if (!status) { 935 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -bg_stdev"); 936 return false; 937 } 938 939 psF64 bg_mean_stdev = psMetadataLookupF64(&status, config->args, "-bg_mean_stdev"); 940 if (!status) { 941 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -bg_mean_stdev"); 942 return false; 943 } 944 945 psF64 alt = psMetadataLookupF64(&status, config->args, "-alt"); 946 if (!status) { 947 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -alt"); 948 return false; 949 } 950 951 psF64 az = psMetadataLookupF64(&status, config->args, "-az"); 952 if (!status) { 953 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -az"); 954 return false; 955 } 956 957 psF32 ccd_temp = psMetadataLookupF32(&status, config->args, "-ccd_temp"); 958 if (!status) { 959 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -ccd_temp"); 960 return false; 961 } 962 963 psF64 posang = psMetadataLookupF32(&status, config->args, "-posang"); 964 if (!status) { 965 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -posang"); 966 return false; 967 } 968 969 psF32 m1_x = psMetadataLookupF32(&status, config->args, "-m1_x"); 970 if (!status) { 971 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -m1_x"); 972 return false; 973 } 974 psF32 m1_y = psMetadataLookupF32(&status, config->args, "-m1_y"); 975 if (!status) { 976 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -m1_y"); 977 return false; 978 } 979 psF32 m1_z = psMetadataLookupF32(&status, config->args, "-m1_z"); 980 if (!status) { 981 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -m1_z"); 982 return false; 983 } 984 psF32 m1_tip = psMetadataLookupF32(&status, config->args, "-m1_tip"); 985 if (!status) { 986 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -m1_tip"); 987 return false; 988 } 989 psF32 m1_tilt = psMetadataLookupF32(&status, config->args, "-m1_tilt"); 990 if (!status) { 991 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -m1_tilt"); 992 return false; 993 } 994 995 psF32 m2_x = psMetadataLookupF32(&status, config->args, "-m2_x"); 996 if (!status) { 997 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -m2_x"); 998 return false; 999 } 1000 psF32 m2_y = psMetadataLookupF32(&status, config->args, "-m2_y"); 1001 if (!status) { 1002 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -m2_y"); 1003 return false; 1004 } 1005 psF32 m2_z = psMetadataLookupF32(&status, config->args, "-m2_z"); 1006 if (!status) { 1007 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -m2_z"); 1008 return false; 1009 } 1010 psF32 m2_tip = psMetadataLookupF32(&status, config->args, "-m2_tip"); 1011 if (!status) { 1012 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -m2_tip"); 1013 return false; 1014 } 1015 psF32 m2_tilt = psMetadataLookupF32(&status, config->args, "-m2_tilt"); 1016 if (!status) { 1017 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -m2_tilt"); 1018 return false; 1019 } 1020 1021 psF32 env_temp = psMetadataLookupF32(&status, config->args, "-env_temperature"); 1022 if (!status) { 1023 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -env_temperature"); 1024 return false; 1025 } 1026 psF32 env_humid = psMetadataLookupF32(&status, config->args, "-env_humidity"); 1027 if (!status) { 1028 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -env_humidity"); 1029 return false; 1030 } 1031 psF32 env_wind = psMetadataLookupF32(&status, config->args, "-env_wind_speed"); 1032 if (!status) { 1033 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -env_wind_speed"); 1034 return false; 1035 } 1036 psF32 env_dir = psMetadataLookupF32(&status, config->args, "-env_wind_dir"); 1037 if (!status) { 1038 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -env_wind_dir"); 1039 return false; 1040 } 1041 1042 psF32 teltemp_m1 = psMetadataLookupF32(&status, config->args, "-teltemp_m1"); 1043 if (!status) { 1044 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -teltemp_m1"); 1045 return false; 1046 } 1047 psF32 teltemp_m1cell = psMetadataLookupF32(&status, config->args, "-teltemp_m1cell"); 1048 if (!status) { 1049 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -teltemp_m1cell"); 1050 return false; 1051 } 1052 psF32 teltemp_m2 = psMetadataLookupF32(&status, config->args, "-teltemp_m2"); 1053 if (!status) { 1054 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -teltemp_m2"); 1055 return false; 1056 } 1057 psF32 teltemp_spider = psMetadataLookupF32(&status, config->args, "-teltemp_spider"); 1058 if (!status) { 1059 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -teltemp_spider"); 1060 return false; 1061 } 1062 psF32 teltemp_truss = psMetadataLookupF32(&status, config->args, "-teltemp_truss"); 1063 if (!status) { 1064 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -teltemp_truss"); 1065 return false; 1066 } 1067 psF32 teltemp_extra = psMetadataLookupF32(&status, config->args, "-teltemp_extra"); 1068 if (!status) { 1069 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -teltemp_extra"); 1070 return false; 1071 } 1072 1073 psF32 pon_time = psMetadataLookupF32(&status, config->args, "-pon_time"); 1074 if (!status) { 1075 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -pon_time"); 1076 return false; 1077 } 1078 1079 psF64 user_1 = psMetadataLookupF64(&status, config->args, "-user_1"); 1080 if (!status) { 1081 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -user_1"); 1082 return false; 1083 } 1084 psF64 user_2 = psMetadataLookupF64(&status, config->args, "-user_2"); 1085 if (!status) { 1086 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -user_2"); 1087 return false; 1088 } 1089 psF64 user_3 = psMetadataLookupF64(&status, config->args, "-user_3"); 1090 if (!status) { 1091 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -user_3"); 1092 return false; 1093 } 1094 psF64 user_4 = psMetadataLookupF64(&status, config->args, "-user_4"); 1095 if (!status) { 1096 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -user_4"); 1097 return false; 1098 } 1099 psF64 user_5 = psMetadataLookupF64(&status, config->args, "-user_5"); 1100 if (!status) { 1101 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -user_5"); 1102 return false; 1103 } 1104 1105 psString object = psMetadataLookupStr(&status, config->args, "-object"); 1106 if (!status) { 1107 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -object"); 1108 return false; 1109 } 1110 1111 psTime *dateobs = NULL; 1112 { 1113 psString dateobsStr = psMetadataLookupStr(&status, config->args, "-dateobs"); 1114 if (!status) { 1115 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -dateobs"); 1116 return false; 1117 } 1118 // pass through NULL as this is an optional field 1119 if (dateobsStr) { 1120 dateobs = psTimeFromISO(dateobsStr, PS_TIME_UTC); 1121 } else { 1122 dateobs = NULL; 1123 } 1124 } 1125 1126 // default 1127 psS16 code = psMetadataLookupS16(&status, config->args, "-code"); 1128 if (!status) { 1129 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -code"); 1130 return false; 1131 } 824 1132 psString exp_id = psMetadataLookupStr(&status, config->args, "-exp_id"); 825 1133 if (!status) { … … 865 1173 // build a query to search by exp_id 866 1174 psMetadata *where = psMetadataAlloc(); 867 if (exp_id) { 868 if (!psMetadataAddStr(where, PS_LIST_TAIL, "exp_id", 0, "==", exp_id)) { 869 psError(PS_ERR_UNKNOWN, false, "failed to add item exp_id"); 870 psFree(where); 871 psFree(query); 872 return false; 873 } 874 } 875 1175 if (!psMetadataAddStr(where, PS_LIST_TAIL, "exp_id", 0, "==", exp_id)) { 1176 psError(PS_ERR_UNKNOWN, false, "failed to add item exp_id"); 1177 psFree(where); 1178 psFree(query); 1179 return false; 1180 } 876 1181 877 1182 psString whereClause = psDBGenerateWhereSQL(where, NULL); … … 909 1214 return false; 910 1215 } 1216 // sanity check that we only got one row 1217 if (psArrayLength(output) != 1) { 1218 // rollback 1219 if (!psDBRollback(config->dbh)) { 1220 psError(PS_ERR_UNKNOWN, false, "database error"); 1221 } 1222 psError(PS_ERR_UNKNOWN, false, "should have gotten 1 row but %lu rows were returned", psArrayLength(output)); 1223 psFree(output); 1224 return NULL; 1225 } 911 1226 912 1227 if (!psDBTransaction(config->dbh)) { … … 917 1232 918 1233 // insert the exp into rawExp 919 for (long i = 0; psArrayLength(output) > i; i++) { 920 psMetadata *row = output->data[i]; 921 // convert metadata into a newExp object 922 newExpRow *newExp = newExpObjectFromMetadata(row); 923 // convert newExp object into a rawExp object 924 rawExpRow *rawExp = newToRawExp(config, newExp); 925 if (!rawExp) { 926 // rollback 927 if (!psDBRollback(config->dbh)) { 928 psError(PS_ERR_UNKNOWN, false, "database error"); 929 } 930 psError(PS_ERR_UNKNOWN, false, "failed to convert newExp to rawExp"); 931 psFree(newExp); 932 psFree(output); 933 return false; 934 } 935 psFree(newExp); 936 937 // insert the rawExp object into the database 938 if (!rawExpInsertObject(config->dbh, rawExp)) { 939 // rollback 940 if (!psDBRollback(config->dbh)) { 941 psError(PS_ERR_UNKNOWN, false, "database error"); 942 } 943 psError(PS_ERR_UNKNOWN, false, "database error"); 944 psFree(rawExp); 945 psFree(output); 946 return false; 947 } 948 949 // if this is a detrend image don't put it in the chip queue (and we're 950 // done) 951 if (detrend) { 952 // set the state for the newExp to stop 953 if (!pxnewExpSetState(config, exp_id, "stop")) { 954 // rollback 955 if (!psDBRollback(config->dbh)) { 956 psError(PS_ERR_UNKNOWN, false, "database error"); 957 } 958 psError(PS_ERR_UNKNOWN, false, "failed to change newExp.state for exp_id: %s", exp_id); 959 psFree(rawExp); 960 psFree(output); 961 return false; 962 } 963 psFree(rawExp); 964 continue; 965 } 966 967 968 // set the state for the newExp to stop 969 if (!pxnewExpSetState(config, exp_id, "stop")) { 970 // rollback 971 if (!psDBRollback(config->dbh)) { 972 psError(PS_ERR_UNKNOWN, false, "database error"); 973 } 974 psError(PS_ERR_UNKNOWN, false, "failed to change newExp.state for exp_id: %s", exp_id); 975 psFree(rawExp); 976 psFree(output); 977 return false; 978 } 979 980 // insert an entry into the chipPendingExp table 981 // this can only be run as the newExp's state has been set to stop 982 if (!pxchipQueueByExpTag(config, 983 rawExp->exp_id, 984 rawExp->workdir, 985 NULL, // label 986 rawExp->reduction, 987 NULL, // expgroup 988 dvodb, 989 tess_id, 990 end_stage 991 )) { 992 // rollback 993 if (!psDBRollback(config->dbh)) { 994 psError(PS_ERR_UNKNOWN, false, "database error"); 995 } 996 psError(PS_ERR_UNKNOWN, false, "failed to queue chipPendingExp"); 997 psFree(rawExp); 998 psFree(output); 999 return false; 1000 } 1001 psFree(rawExp); 1002 } 1234 psMetadata *row = output->data[0]; 1235 // convert metadata into a newExp object 1236 newExpRow *newExp = newExpObjectFromMetadata(row); 1003 1237 psFree(output); 1004 1238 1005 if (!psDBCommit(config->dbh)) { 1006 psError(PS_ERR_UNKNOWN, false, "database error"); 1007 return false; 1008 } 1009 1010 return true; 1011 } 1012 1013 1014 static bool processedexpMode(pxConfig *config) 1015 { 1016 PS_ASSERT_PTR_NON_NULL(config, false); 1017 1018 bool status = false; 1019 psU64 limit = psMetadataLookupU64(&status, config->args, "-limit"); 1020 if (!status) { 1021 psError(PXTOOLS_ERR_PROG, false, "failed to lookup value for -limit"); 1022 return false; 1023 } 1024 1025 bool faulted = psMetadataLookupU64(&status, config->args, "-faulted"); 1026 if (!status) { 1027 psError(PXTOOLS_ERR_PROG, false, "failed to lookup value for -faulted"); 1028 return false; 1029 } 1030 1031 psString query = pxDataGet("regtool_processedexp.sql"); 1032 if (!query) { 1033 psError(PXTOOLS_ERR_DATA, false, "failed to retreive SQL statement"); 1034 return false; 1035 } 1036 1037 if (config->where) { 1038 psString whereClause = psDBGenerateWhereConditionSQL(config->where, "rawExp"); 1039 psStringAppend(&query, " AND %s", whereClause); 1040 psFree(whereClause); 1041 } 1042 1043 if (faulted) { 1044 // list only faulted rows 1045 psStringAppend(&query, " %s", "AND rawExp.fault != 0"); 1046 } else { 1047 // don't list faulted rows 1048 psStringAppend(&query, " %s", "AND rawExp.fault = 0"); 1049 } 1050 1051 // treat limit == 0 as "no limit" 1052 if (limit) { 1053 psString limitString = psDBGenerateLimitSQL(limit); 1054 psStringAppend(&query, " %s", limitString); 1055 psFree(limitString); 1056 } 1057 1058 if (!p_psDBRunQuery(config->dbh, query)) { 1059 psError(PS_ERR_UNKNOWN, false, "database error"); 1060 return false; 1061 } 1062 psFree(query); 1063 1064 psArray *output = p_psDBFetchResult(config->dbh); 1065 if (!output) { 1066 psErrorCode err = psErrorCodeLast(); 1067 switch (err) { 1068 case PS_ERR_DB_CLIENT: 1069 psError(PXTOOLS_ERR_SYS, false, "database error"); 1070 case PS_ERR_DB_SERVER: 1071 psError(PXTOOLS_ERR_PROG, false, "database error"); 1072 default: 1073 psError(PXTOOLS_ERR_PROG, false, "unknown error"); 1074 } 1075 1076 return false; 1077 } 1078 if (!psArrayLength(output)) { 1079 psTrace("regtool", PS_LOG_INFO, "no rows found"); 1080 psFree(output); 1081 return true; 1082 } 1083 1084 bool simple = false; 1085 { 1086 bool status = false; 1087 simple = psMetadataLookupBool(&status, config->args, "-simple"); 1088 if (!status) { 1089 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -simple"); 1090 return false; 1091 } 1092 } 1093 1094 if (psArrayLength(output)) { 1095 // negative simple so the default is true 1096 if (!ippdbPrintMetadatas(stdout, output, "rawExp", !simple)) { 1097 psError(PS_ERR_UNKNOWN, false, "failed to print array"); 1098 psFree(output); 1099 return false; 1100 } 1101 } 1102 1103 psFree(output); 1104 1105 return true; 1106 } 1107 1108 static bool revertprocessedexpMode(pxConfig *config) 1109 { 1110 PS_ASSERT_PTR_NON_NULL(config, false); 1111 1112 psString query = pxDataGet("regtool_revertprocessedexp.sql"); 1113 if (!query) { 1114 psError(PXTOOLS_ERR_DATA, false, "failed to retreive SQL statement"); 1115 return false; 1116 } 1117 1118 if (config->where) { 1119 psString whereClause = psDBGenerateWhereConditionSQL(config->where, "rawExp"); 1120 psStringAppend(&query, " AND %s", whereClause); 1121 psFree(whereClause); 1122 } 1123 1124 if (!p_psDBRunQuery(config->dbh, query)) { 1125 psError(PS_ERR_UNKNOWN, false, "database error"); 1126 psFree(query); 1127 return false; 1128 } 1129 psFree(query); 1130 1131 if (psDBAffectedRows(config->dbh) < 1) { 1132 psError(PS_ERR_UNKNOWN, false, "should have affected atleast 1 row"); 1133 return false; 1134 } 1135 1136 return true; 1137 } 1138 1139 1140 static bool updateprocessedexpMode(pxConfig *config) 1141 { 1142 bool status = false; 1143 psS16 code = psMetadataLookupS16(&status, config->args, "-code"); 1144 if (!status) { 1145 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -code"); 1146 return false; 1147 } 1148 if (code == INT16_MAX) { 1149 psError(PS_ERR_UNKNOWN, true, "-code is required"); 1150 return false; 1151 } 1152 1153 if (!pxSetFaultCode(config->dbh, "rawExp", config->where, code)) { 1154 psError(PS_ERR_UNKNOWN, false, "failed to set set fault flag"); 1155 return false; 1156 } 1157 1158 return true; 1159 } 1160 1161 1162 # if 0 1163 static guidePendingExpRow *newToP1PendingExp(newExpRow *newExp) 1164 { 1165 return guidePendingExpRowAlloc( 1166 newExp->exp_id, 1167 newExp->camera, 1168 newExp->telescope, 1169 newExp->exp_type, 1170 newExp->imfiles, 1171 "my filter", 1172 0.1, // airmass 1173 0.2, // ra 1174 0.3, // dec 1175 0.4, // exp time 1176 0.5, // background 1177 "my recipe", 1178 0xff // XXX calc version number 1179 ); 1180 } 1181 #endif 1182 1183 1184 #if 0 1185 static chipPendingExpRow *newTochipPendingExp(pxConfig *config, newExpRow *exp) 1186 { 1187 PS_ASSERT_PTR_NON_NULL(config, NULL); 1188 PS_ASSERT_PTR_NON_NULL(exp, NULL); 1189 1190 // optional 1191 bool status = false; 1192 psString label = psMetadataLookupStr(&status, config->args, "-label"); 1193 if (!status) { 1194 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -label"); 1195 return false; 1196 } 1197 1198 chipPendingExpRow *chipExp = chipPendingExpRowAlloc( 1199 0, // chip ID, assigned by db 1200 exp->exp_id, 1201 0xdeadbeef, // guide version 1202 label, 1203 "my recipe", // recipe 1204 NULL, // expgroup 1205 NULL // dvodb 1206 ); 1207 1208 return chipExp; 1209 } 1210 1211 1212 static chipInputImfileRow *rawImfileTochipInputImfile(pxConfig *config, psS64 chip_id, rawImfileRow *rawImfile) 1213 { 1214 return chipInputImfileRowAlloc( 1215 chip_id, 1216 rawImfile->class_id, 1217 rawImfile->uri 1218 ); 1219 } 1220 #endif 1221 1222 1223 static rawExpRow *newToRawExp(pxConfig *config, newExpRow *exp) 1224 { 1225 PS_ASSERT_PTR_NON_NULL(config, NULL); 1226 PS_ASSERT_PTR_NON_NULL(exp, NULL); 1227 1228 bool status = false; 1229 // required 1230 psString exp_name = psMetadataLookupStr(&status, config->args, "-exp_name"); 1231 if (!status) { 1232 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -exp_name"); 1233 return false; 1234 } 1235 if (!exp_name) { 1236 psError(PS_ERR_UNKNOWN, true, "-exp_name is required"); 1237 return false; 1238 } 1239 1240 psString camera = psMetadataLookupStr(&status, config->args, "-inst"); 1241 if (!status) { 1242 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -inst"); 1243 return false; 1244 } 1245 if (!camera) { 1246 psError(PS_ERR_UNKNOWN, true, "-inst is required"); 1247 return false; 1248 } 1249 1250 psString telescope = psMetadataLookupStr(&status, config->args, "-telescope"); 1251 if (!status) { 1252 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -telescope"); 1253 return false; 1254 } 1255 if (!telescope) { 1256 psError(PS_ERR_UNKNOWN, true, "-telescope is required"); 1257 return false; 1258 } 1259 1260 psString exp_tag = psMetadataLookupStr(&status, config->args, "-exp_tag"); 1261 if (!status) { 1262 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -exp_tag"); 1263 return false; 1264 } 1265 if (!exp_tag) { 1266 psError(PS_ERR_UNKNOWN, true, "-exp_tag is required"); 1267 return false; 1268 } 1269 1270 // optional 1271 psString exp_type = psMetadataLookupStr(&status, config->args, "-exp_type"); 1272 if (!status) { 1273 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -exp_type"); 1274 return false; 1275 } 1276 1277 psString filelevel = psMetadataLookupStr(&status, config->args, "-filelevel"); 1278 if (!status) { 1279 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -filelevel"); 1280 return false; 1281 } 1282 if (!filelevel) { 1283 psError(PS_ERR_UNKNOWN, true, "-filelevel is required"); 1284 return false; 1285 } 1286 1287 psString workdir = psMetadataLookupStr(&status, config->args, "-workdir"); 1288 if (!status) { 1289 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -workdir"); 1290 return false; 1291 } 1292 1293 psString reduction = psMetadataLookupStr(&status, config->args, "-reduction"); 1294 if (!status) { 1295 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -reduction"); 1296 return false; 1297 } 1298 1299 psString filter = psMetadataLookupStr(&status, config->args, "-filter"); 1300 if (!status) { 1301 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -filter"); 1302 return false; 1303 } 1304 1305 psString comment = psMetadataLookupStr(&status, config->args, "-comment"); 1306 if (!status) { 1307 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -comment"); 1308 return false; 1309 } 1310 1311 psF32 airmass = psMetadataLookupF32(&status, config->args, "-airmass"); 1312 if (!status) { 1313 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -airmass"); 1314 return false; 1315 } 1316 1317 psF64 ra = psMetadataLookupF64(&status, config->args, "-ra"); 1318 if (!status) { 1319 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -ra"); 1320 return false; 1321 } 1322 1323 psF64 decl = psMetadataLookupF64(&status, config->args, "-decl"); 1324 if (!status) { 1325 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -decl"); 1326 return false; 1327 } 1328 1329 psF32 exp_time = psMetadataLookupF32(&status, config->args, "-exp_time"); 1330 if (!status) { 1331 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -exp_time"); 1332 return false; 1333 } 1334 1335 psF32 sat_pixel_frac = psMetadataLookupF32(&status, config->args, "-sat_pixel_frac"); 1336 if (!status) { 1337 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -sat_pixel_frac"); 1338 return false; 1339 } 1340 1341 psF64 bg = psMetadataLookupF64(&status, config->args, "-bg"); 1342 if (!status) { 1343 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -bg"); 1344 return false; 1345 } 1346 1347 psF64 bg_stdev = psMetadataLookupF64(&status, config->args, "-bg_stdev"); 1348 if (!status) { 1349 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -bg_stdev"); 1350 return false; 1351 } 1352 1353 psF64 bg_mean_stdev = psMetadataLookupF64(&status, config->args, "-bg_mean_stdev"); 1354 if (!status) { 1355 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -bg_mean_stdev"); 1356 return false; 1357 } 1358 1359 psF64 alt = psMetadataLookupF64(&status, config->args, "-alt"); 1360 if (!status) { 1361 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -alt"); 1362 return false; 1363 } 1364 1365 psF64 az = psMetadataLookupF64(&status, config->args, "-az"); 1366 if (!status) { 1367 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -az"); 1368 return false; 1369 } 1370 1371 psF32 ccd_temp = psMetadataLookupF32(&status, config->args, "-ccd_temp"); 1372 if (!status) { 1373 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -ccd_temp"); 1374 return false; 1375 } 1376 1377 psF64 posang = psMetadataLookupF32(&status, config->args, "-posang"); 1378 if (!status) { 1379 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -posang"); 1380 return false; 1381 } 1382 1383 psF32 m1_x = psMetadataLookupF32(&status, config->args, "-m1_x"); 1384 if (!status) { 1385 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -m1_x"); 1386 return false; 1387 } 1388 psF32 m1_y = psMetadataLookupF32(&status, config->args, "-m1_y"); 1389 if (!status) { 1390 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -m1_y"); 1391 return false; 1392 } 1393 psF32 m1_z = psMetadataLookupF32(&status, config->args, "-m1_z"); 1394 if (!status) { 1395 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -m1_z"); 1396 return false; 1397 } 1398 psF32 m1_tip = psMetadataLookupF32(&status, config->args, "-m1_tip"); 1399 if (!status) { 1400 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -m1_tip"); 1401 return false; 1402 } 1403 psF32 m1_tilt = psMetadataLookupF32(&status, config->args, "-m1_tilt"); 1404 if (!status) { 1405 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -m1_tilt"); 1406 return false; 1407 } 1408 1409 psF32 m2_x = psMetadataLookupF32(&status, config->args, "-m2_x"); 1410 if (!status) { 1411 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -m2_x"); 1412 return false; 1413 } 1414 psF32 m2_y = psMetadataLookupF32(&status, config->args, "-m2_y"); 1415 if (!status) { 1416 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -m2_y"); 1417 return false; 1418 } 1419 psF32 m2_z = psMetadataLookupF32(&status, config->args, "-m2_z"); 1420 if (!status) { 1421 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -m2_z"); 1422 return false; 1423 } 1424 psF32 m2_tip = psMetadataLookupF32(&status, config->args, "-m2_tip"); 1425 if (!status) { 1426 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -m2_tip"); 1427 return false; 1428 } 1429 psF32 m2_tilt = psMetadataLookupF32(&status, config->args, "-m2_tilt"); 1430 if (!status) { 1431 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -m2_tilt"); 1432 return false; 1433 } 1434 1435 psF32 env_temp = psMetadataLookupF32(&status, config->args, "-env_temperature"); 1436 if (!status) { 1437 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -env_temperature"); 1438 return false; 1439 } 1440 psF32 env_humid = psMetadataLookupF32(&status, config->args, "-env_humidity"); 1441 if (!status) { 1442 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -env_humidity"); 1443 return false; 1444 } 1445 psF32 env_wind = psMetadataLookupF32(&status, config->args, "-env_wind_speed"); 1446 if (!status) { 1447 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -env_wind_speed"); 1448 return false; 1449 } 1450 psF32 env_dir = psMetadataLookupF32(&status, config->args, "-env_wind_dir"); 1451 if (!status) { 1452 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -env_wind_dir"); 1453 return false; 1454 } 1455 1456 psF32 teltemp_m1 = psMetadataLookupF32(&status, config->args, "-teltemp_m1"); 1457 if (!status) { 1458 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -teltemp_m1"); 1459 return false; 1460 } 1461 psF32 teltemp_m1cell = psMetadataLookupF32(&status, config->args, "-teltemp_m1cell"); 1462 if (!status) { 1463 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -teltemp_m1cell"); 1464 return false; 1465 } 1466 psF32 teltemp_m2 = psMetadataLookupF32(&status, config->args, "-teltemp_m2"); 1467 if (!status) { 1468 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -teltemp_m2"); 1469 return false; 1470 } 1471 psF32 teltemp_spider = psMetadataLookupF32(&status, config->args, "-teltemp_spider"); 1472 if (!status) { 1473 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -teltemp_spider"); 1474 return false; 1475 } 1476 psF32 teltemp_truss = psMetadataLookupF32(&status, config->args, "-teltemp_truss"); 1477 if (!status) { 1478 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -teltemp_truss"); 1479 return false; 1480 } 1481 psF32 teltemp_extra = psMetadataLookupF32(&status, config->args, "-teltemp_extra"); 1482 if (!status) { 1483 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -teltemp_extra"); 1484 return false; 1485 } 1486 1487 psF32 pon_time = psMetadataLookupF32(&status, config->args, "-pon_time"); 1488 if (!status) { 1489 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -pon_time"); 1490 return false; 1491 } 1492 1493 psF64 user_1 = psMetadataLookupF64(&status, config->args, "-user_1"); 1494 if (!status) { 1495 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -user_1"); 1496 return false; 1497 } 1498 psF64 user_2 = psMetadataLookupF64(&status, config->args, "-user_2"); 1499 if (!status) { 1500 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -user_2"); 1501 return false; 1502 } 1503 psF64 user_3 = psMetadataLookupF64(&status, config->args, "-user_3"); 1504 if (!status) { 1505 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -user_3"); 1506 return false; 1507 } 1508 psF64 user_4 = psMetadataLookupF64(&status, config->args, "-user_4"); 1509 if (!status) { 1510 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -user_4"); 1511 return false; 1512 } 1513 psF64 user_5 = psMetadataLookupF64(&status, config->args, "-user_5"); 1514 if (!status) { 1515 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -user_5"); 1516 return false; 1517 } 1518 1519 psString object = psMetadataLookupStr(&status, config->args, "-object"); 1520 if (!status) { 1521 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -object"); 1522 return false; 1523 } 1524 1525 psTime *dateobs = NULL; 1526 { 1527 psString dateobsStr = psMetadataLookupStr(&status, config->args, "-dateobs"); 1528 if (!status) { 1529 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -dateobs"); 1530 return false; 1531 } 1532 // pass through NULL as this is an optional field 1533 if (dateobsStr) { 1534 dateobs = psTimeFromISO(dateobsStr, PS_TIME_UTC); 1535 } else { 1536 dateobs = NULL; 1537 } 1538 } 1539 1540 // default 1541 psS16 code = psMetadataLookupS16(&status, config->args, "-code"); 1542 if (!status) { 1543 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -code"); 1544 return false; 1545 } 1546 1547 rawExpRow *raw = rawExpRowAlloc( 1548 exp->exp_id, 1239 if (!rawExpInsert( 1240 config->dbh, 1241 (psS64)atoll(exp_id), 1549 1242 exp_name, 1550 1243 camera, … … 1554 1247 exp_type, 1555 1248 filelevel, 1556 workdir ? workdir : exp->workdir,1557 reduction ? reduction : exp->reduction,1249 workdir ? workdir : newExp->workdir, 1250 reduction ? reduction : newExp->reduction, 1558 1251 filter, 1559 comment,1252 comment, 1560 1253 airmass, 1561 1254 ra, … … 1570 1263 ccd_temp, 1571 1264 posang, 1572 m1_x,1573 m1_y,1574 m1_z,1575 m1_tip,1576 m1_tilt,1577 m2_x,1578 m2_y,1579 m2_z,1580 m2_tip,1581 m2_tilt,1582 env_temp,1583 env_humid,1584 env_wind,1585 env_dir,1586 teltemp_m1,1587 teltemp_m1cell,1588 teltemp_m2,1589 teltemp_spider,1590 teltemp_truss,1591 teltemp_extra,1592 pon_time,1265 m1_x, 1266 m1_y, 1267 m1_z, 1268 m1_tip, 1269 m1_tilt, 1270 m2_x, 1271 m2_y, 1272 m2_z, 1273 m2_tip, 1274 m2_tilt, 1275 env_temp, 1276 env_humid, 1277 env_wind, 1278 env_dir, 1279 teltemp_m1, 1280 teltemp_m1cell, 1281 teltemp_m2, 1282 teltemp_spider, 1283 teltemp_truss, 1284 teltemp_extra, 1285 pon_time, 1593 1286 user_1, 1594 1287 user_2, … … 1599 1292 0.0, 1600 1293 code 1601 ); 1602 1603 if (dateobs) { 1604 psFree(dateobs); 1605 } 1606 1607 return raw; 1294 )) { 1295 // rollback 1296 if (!psDBRollback(config->dbh)) { 1297 psError(PS_ERR_UNKNOWN, false, "database error"); 1298 } 1299 psError(PS_ERR_UNKNOWN, false, "database error"); 1300 psFree(newExp); 1301 return false; 1302 } 1303 1304 // if this is a detrend image don't put it in the chip queue (and we're 1305 // done) 1306 if (detrend) { 1307 psFree(newExp); 1308 1309 // set the state for the newExp to stop 1310 if (!pxnewExpSetState(config, exp_id, "stop")) { 1311 // rollback 1312 if (!psDBRollback(config->dbh)) { 1313 psError(PS_ERR_UNKNOWN, false, "database error"); 1314 } 1315 psError(PS_ERR_UNKNOWN, false, "failed to change newExp.state for exp_id: %s", exp_id); 1316 return false; 1317 } 1318 1319 return true; 1320 } 1321 1322 1323 // set the state for the newExp to stop 1324 if (!pxnewExpSetState(config, exp_id, "stop")) { 1325 // rollback 1326 if (!psDBRollback(config->dbh)) { 1327 psError(PS_ERR_UNKNOWN, false, "database error"); 1328 } 1329 psError(PS_ERR_UNKNOWN, false, "failed to change newExp.state for exp_id: %s", exp_id); 1330 psFree(newExp); 1331 return false; 1332 } 1333 1334 // insert an entry into the chipPendingExp table 1335 // this can only be run as the newExp's state has been set to stop 1336 if (!pxchipQueueByExpTag(config, 1337 newExp->exp_id, 1338 newExp->workdir, 1339 NULL, // label 1340 newExp->reduction, 1341 NULL, // expgroup 1342 dvodb, 1343 tess_id, 1344 end_stage 1345 )) { 1346 // rollback 1347 if (!psDBRollback(config->dbh)) { 1348 psError(PS_ERR_UNKNOWN, false, "database error"); 1349 } 1350 psError(PS_ERR_UNKNOWN, false, "failed to queue chipPendingExp"); 1351 psFree(newExp); 1352 return false; 1353 } 1354 psFree(newExp); 1355 1356 if (!psDBCommit(config->dbh)) { 1357 psError(PS_ERR_UNKNOWN, false, "database error"); 1358 return false; 1359 } 1360 1361 return true; 1608 1362 } 1363 1364 1365 static bool processedexpMode(pxConfig *config) 1366 { 1367 PS_ASSERT_PTR_NON_NULL(config, false); 1368 1369 bool status = false; 1370 psU64 limit = psMetadataLookupU64(&status, config->args, "-limit"); 1371 if (!status) { 1372 psError(PXTOOLS_ERR_PROG, false, "failed to lookup value for -limit"); 1373 return false; 1374 } 1375 1376 bool faulted = psMetadataLookupU64(&status, config->args, "-faulted"); 1377 if (!status) { 1378 psError(PXTOOLS_ERR_PROG, false, "failed to lookup value for -faulted"); 1379 return false; 1380 } 1381 1382 psString query = pxDataGet("regtool_processedexp.sql"); 1383 if (!query) { 1384 psError(PXTOOLS_ERR_DATA, false, "failed to retreive SQL statement"); 1385 return false; 1386 } 1387 1388 if (config->where) { 1389 psString whereClause = psDBGenerateWhereConditionSQL(config->where, "rawExp"); 1390 psStringAppend(&query, " AND %s", whereClause); 1391 psFree(whereClause); 1392 } 1393 1394 if (faulted) { 1395 // list only faulted rows 1396 psStringAppend(&query, " %s", "AND rawExp.fault != 0"); 1397 } else { 1398 // don't list faulted rows 1399 psStringAppend(&query, " %s", "AND rawExp.fault = 0"); 1400 } 1401 1402 // treat limit == 0 as "no limit" 1403 if (limit) { 1404 psString limitString = psDBGenerateLimitSQL(limit); 1405 psStringAppend(&query, " %s", limitString); 1406 psFree(limitString); 1407 } 1408 1409 if (!p_psDBRunQuery(config->dbh, query)) { 1410 psError(PS_ERR_UNKNOWN, false, "database error"); 1411 return false; 1412 } 1413 psFree(query); 1414 1415 psArray *output = p_psDBFetchResult(config->dbh); 1416 if (!output) { 1417 psErrorCode err = psErrorCodeLast(); 1418 switch (err) { 1419 case PS_ERR_DB_CLIENT: 1420 psError(PXTOOLS_ERR_SYS, false, "database error"); 1421 case PS_ERR_DB_SERVER: 1422 psError(PXTOOLS_ERR_PROG, false, "database error"); 1423 default: 1424 psError(PXTOOLS_ERR_PROG, false, "unknown error"); 1425 } 1426 1427 return false; 1428 } 1429 if (!psArrayLength(output)) { 1430 psTrace("regtool", PS_LOG_INFO, "no rows found"); 1431 psFree(output); 1432 return true; 1433 } 1434 1435 bool simple = false; 1436 { 1437 bool status = false; 1438 simple = psMetadataLookupBool(&status, config->args, "-simple"); 1439 if (!status) { 1440 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -simple"); 1441 return false; 1442 } 1443 } 1444 1445 if (psArrayLength(output)) { 1446 // negative simple so the default is true 1447 if (!ippdbPrintMetadatas(stdout, output, "rawExp", !simple)) { 1448 psError(PS_ERR_UNKNOWN, false, "failed to print array"); 1449 psFree(output); 1450 return false; 1451 } 1452 } 1453 1454 psFree(output); 1455 1456 return true; 1457 } 1458 1459 static bool revertprocessedexpMode(pxConfig *config) 1460 { 1461 PS_ASSERT_PTR_NON_NULL(config, false); 1462 1463 psString query = pxDataGet("regtool_revertprocessedexp.sql"); 1464 if (!query) { 1465 psError(PXTOOLS_ERR_DATA, false, "failed to retreive SQL statement"); 1466 return false; 1467 } 1468 1469 if (config->where) { 1470 psString whereClause = psDBGenerateWhereConditionSQL(config->where, "rawExp"); 1471 psStringAppend(&query, " AND %s", whereClause); 1472 psFree(whereClause); 1473 } 1474 1475 if (!p_psDBRunQuery(config->dbh, query)) { 1476 psError(PS_ERR_UNKNOWN, false, "database error"); 1477 psFree(query); 1478 return false; 1479 } 1480 psFree(query); 1481 1482 if (psDBAffectedRows(config->dbh) < 1) { 1483 psError(PS_ERR_UNKNOWN, false, "should have affected atleast 1 row"); 1484 return false; 1485 } 1486 1487 return true; 1488 } 1489 1490 1491 static bool updateprocessedexpMode(pxConfig *config) 1492 { 1493 bool status = false; 1494 psS16 code = psMetadataLookupS16(&status, config->args, "-code"); 1495 if (!status) { 1496 psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -code"); 1497 return false; 1498 } 1499 if (code == INT16_MAX) { 1500 psError(PS_ERR_UNKNOWN, true, "-code is required"); 1501 return false; 1502 } 1503 1504 if (!pxSetFaultCode(config->dbh, "rawExp", config->where, code)) { 1505 psError(PS_ERR_UNKNOWN, false, "failed to set set fault flag"); 1506 return false; 1507 } 1508 1509 return true; 1510 }
Note:
See TracChangeset
for help on using the changeset viewer.
