1 xudong 1.1 #include "jsoc_main.h"
2 #include "drms_types.h"
3
4 /* Populate keywords from ME inversion results to
5 * ME_patch, B, B_patch, ME_HARP, B_HARP, etc.
6 *
7 * Upon success, return 0
8 * Otherwise return number of keywords failed to populate
9 * If record fails, return -1
10 *
11 * Prime keys like T_REC, PNUM needs to be set upfront in the main code
12 *
13 * Usage:
14 * For full disk image population, use:
15 * copy_me_keys() and copy_geo_keys()
16 * For patch population without remapping, use:
17 * copy_me_keys() and copy_geo_keys() and copy_patch_keys()
18 * For patch with remapping, use:
19 * copy_me_keys() and copy_patch_keys()
20 * For B series, additionally use:
21 * copy_ambig_keys()
22 xudong 1.1 *
23 * Written by X. Sun, Mar 01 2011
24 *
25 * Added keywords DATE, BLD_VERS, QUIET, OFFDISK, INVNFCTI,
26 * INVNFCTQ, INVNFCTU, INVNFCTV
27 */
28
|
31 xudong 1.1 #define ARRLENGTH(ARR) (sizeof(ARR) / sizeof(ARR[0]))
32
33 const char *meKeys[] =
34 {
35 "QUALITY", "QUAL_S", "QUALLEV1", "INSTRUME", "CAMERA", // info
36 "T_OBS", "CADENCE", "DATE_S", "DATE__OBS", "DATE", "DATE_M", // time
37 "DSUN_OBS", "CRLN_OBS", "CRLT_OBS", "CAR_ROT",
38 "OBS_VR", "OBS_VW", "OBS_VN", "RSUN_OBS", // geometry
39 "INVCODEV", "INVDOCU", "INVITERA", "INVLMBDA", "INVLMBDF",
40 "INVTUNEN", "INVSVDTL", "INVCHIST", "INVPOLTH",
41 "INVPJUMP", "INVLMBDM", "INVLMBD0", "INVLMBDB",
42 "INVDLTLA", "INVLMBDS", "INVLMBMS",
43 "INVLYOTW", "INVWNARW", "INVWSPAC",
44 "INVINTTH", "INVNOISE", "INVCONTI", "INVWGHTI",
45 "INVWGHTQ", "INVWGHTU", "INVWGHTV", "INVSTLGT", "INVFREEP",
46 "INVFLPRF", "INVPHMAP", "INVVLAVE", "INVBLAVE", "INVBBAVE",
47 "INVNPRCS", "INVNCNVG",
48 "INVKEYS1", "INVKEYS2", "INVKEYS3",
49 "INVKEYI1", "INVKEYI2", "INVKEYI3",
50 "INVKEYD1", "INVKEYD2", "INVKEYD3", // inversion
|
55 xudong 1.1 };
56
57 const char *patchKeys[] =
58 {
59 "PATCHNUM","ARMCODEV","ARMDOCU","HRPCODEV","HRPDOCU",
60 "CRSIZE1","CRSIZE2","ACTIVE","NCLASS","ON_PATCH","MASK","ARM_QUAL","ARM_NCLN","H_MERGE","H_FAINT",
61 "ARM_MODL","ARM_EDGE","ARM_BETA","TKP_KWID","TKP_KLAT","TKP_TAU","TKP_TAU2",
62 "TKP_ACTV","TKP_FNUM","TKP_FTIM","TKP_MAPR","TKP_RUNN","TKP_RUNT",
63 "LATDTMIN","LONDTMIN","LATDTMAX","LONDTMAX","OMEGA_DT",
64 "NPIX","SIZE","AREA","NACR","SIZE_ACR","AREA_ACR",
65 "MTOT","MNET","MPOS_TOT","MNEG_TOT","MMEAN","MSTDEV","MSKEW","MKURT",
66 "LAT_MIN","LON_MIN","LAT_MAX","LON_MAX","LAT_FWT","LON_FWT","LAT_FWTPOS","LON_FWTPOS","LAT_FWTNEG","LON_FWTNEG",
67 "T_FRST","T_FRST1","T_LAST1","T_LAST","N_PATCH","N_PATCH1","N_PATCHM","NOAA_AR","NOAA_NUM","NOAA_ARS","OFFDISK", "QUIET"
68 };
69
70 const char *geoKeys[] =
71 {
72 "CRPIX1", "CRPIX2", "CRVAL1", "CRVAL2",
73 "CDELT1", "CDELT2", "CROTA2",
74 "CRDER1", "CRDER2", "CSYSER1", "CSYSER2",
75 "IMCRPIX1", "IMCRPIX2"
76 xudong 1.1 };
77
78 const char *ambigKeys[] =
79 {
80 "AMBCODEV", "AMBDOCU",
81 "AMBGMTRY", "AMBWEAK", "AMBNEROD", "AMBNGROW",
82 "AMBNPAD", "AMBNAP", "AMBNTX", "AMBNTY",
83 "AMBBTHR0", "AMBBTHR1", "AMBSEED", "AMBNEQ",
|
86 xudong 1.1 };
87
88
89
90 int copy_me_keys (DRMS_Record_t *inRec, DRMS_Record_t *outRec)
91
92 {
93 int failCount = 0;
94 int iKey, nKeys = ARRLENGTH(meKeys);
95
96 if (inRec == NULL || outRec == NULL) {
97 return -1;
98 }
99
100 for (iKey = 0; iKey < nKeys; iKey++)
101 {
102 failCount += drms_copykey(outRec, inRec, meKeys[iKey]);
103 }
104
105 return failCount;
106 }
107 xudong 1.1
108
109
110 int copy_patch_keys (DRMS_Record_t *inRec, DRMS_Record_t *outRec)
111
112 {
113 int failCount = 0;
114 int iKey, nKeys = ARRLENGTH(patchKeys);
115
116 if (inRec == NULL || outRec == NULL) {
117 return -1;
118 }
119
120 for (iKey = 0; iKey < nKeys; iKey++)
121 {
122 failCount += drms_copykey(outRec, inRec, patchKeys[iKey]);
123 }
124
125 return failCount;
126 }
127
128 xudong 1.1
129
130 int copy_geo_keys (DRMS_Record_t *inRec, DRMS_Record_t *outRec)
131
132 {
133 int failCount = 0;
134 int iKey, nKeys = ARRLENGTH(geoKeys);
135
136 if (inRec == NULL || outRec == NULL) {
137 return -1;
138 }
139
140 for (iKey = 0; iKey < nKeys; iKey++)
141 {
142 failCount += drms_copykey(outRec, inRec, geoKeys[iKey]);
143 }
144
145 return failCount;
146 }
147
148
149 xudong 1.1
150 int copy_ambig_keys (DRMS_Record_t *inRec, DRMS_Record_t *outRec)
151
152 {
153 int failCount = 0;
154 int iKey, nKeys = ARRLENGTH(ambigKeys);
155
156 if (inRec == NULL || outRec == NULL) {
157 return -1;
158 }
159
160 for (iKey = 0; iKey < nKeys; iKey++)
161 {
162 failCount += drms_copykey(outRec, inRec, ambigKeys[iKey]);
163 }
164
165 return failCount;
166 }
|