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
29 #define ARRLENGTH(ARR) (sizeof(ARR) / sizeof(ARR[0]))
30
31 const char *meKeys[] =
32 {
33 "QUALITY", "QUAL_S", "QUALLEV1", "INSTRUME", "CAMERA", // info
34 "T_OBS", "CADENCE", "DATE_S", "DATE__OBS", "DATE", "DATE_M", // time
35 "DSUN_OBS", "CRLN_OBS", "CRLT_OBS", "CAR_ROT",
36 "OBS_VR", "OBS_VW", "OBS_VN", "RSUN_OBS", // geometry
37 "INVCODEV", "INVDOCU", "INVITERA", "INVLMBDA", "INVLMBDF",
38 "INVTUNEN", "INVSVDTL", "INVCHIST", "INVPOLTH",
39 "INVPJUMP", "INVLMBDM", "INVLMBD0", "INVLMBDB",
40 "INVDLTLA", "INVLMBDS", "INVLMBMS",
41 "INVLYOTW", "INVWNARW", "INVWSPAC",
42 "INVINTTH", "INVNOISE", "INVCONTI", "INVWGHTI",
43 xudong 1.1 "INVWGHTQ", "INVWGHTU", "INVWGHTV", "INVSTLGT", "INVFREEP",
44 "INVFLPRF", "INVPHMAP", "INVVLAVE", "INVBLAVE", "INVBBAVE",
45 "INVNPRCS", "INVNCNVG",
46 "INVKEYS1", "INVKEYS2", "INVKEYS3",
47 "INVKEYI1", "INVKEYI2", "INVKEYI3",
48 "INVKEYD1", "INVKEYD2", "INVKEYD3", // inversion
49 "BUNIT", "INVNFCTI", "INVNFCTQ", "INVNFCTU", "INVNFCTV",
50 "BUNIT_000", "BUNIT_001", "BUNIT_002", "BUNIT_003", "BUNIT_004",
51 "BUNIT_005", "BUNIT_006", "BUNIT_007", "BUNIT_008", "BUNIT_009",
52 "BUNIT_010", "BUNIT_011", "BUNIT_012", "BUNIT_013", "BUNIT_014",
53 "BUNIT_015", "BUNIT_016", "BUNIT_017", "BUNIT_018", "BUNIT_019",
54 "BUNIT_020", "BUNIT_021", "BUNIT_022", "BUNIT_023", "BUNIT_024",
55 "BUNIT_025", "BUNIT_026", "BUNIT_027",
56 "HFLID", "HCFTID", "QLOOK", "TINTNUM", "SINTNUM",
57 "DISTCOEF", "ROTCOEF", "POLCALM", "SOURCE",
58 "CODEVER0", "CODEVER1", "CODEVER2", "CODEVER3", "CODEVER4", "CODEVER5", "CODEVER6","BLD_VERS" // misc
59 };
60
61 const char *patchKeys[] =
62 {
63 "PATCHNUM","ARMCODEV","ARMDOCU","HRPCODEV","HRPDOCU",
64 xudong 1.1 "CRSIZE1","CRSIZE2","ACTIVE","NCLASS","ON_PATCH","MASK","ARM_QUAL","ARM_NCLN","H_MERGE","H_FAINT",
65 "ARM_MODL","ARM_EDGE","ARM_BETA","TKP_KWID","TKP_KLAT","TKP_TAU","TKP_TAU2",
66 "TKP_ACTV","TKP_FNUM","TKP_FTIM","TKP_MAPR","TKP_RUNN","TKP_RUNT",
67 "LATDTMIN","LONDTMIN","LATDTMAX","LONDTMAX","OMEGA_DT",
68 "NPIX","SIZE","AREA","NACR","SIZE_ACR","AREA_ACR",
69 "MTOT","MNET","MPOS_TOT","MNEG_TOT","MMEAN","MSTDEV","MSKEW","MKURT",
70 "LAT_MIN","LON_MIN","LAT_MAX","LON_MAX","LAT_FWT","LON_FWT","LAT_FWTPOS","LON_FWTPOS","LAT_FWTNEG","LON_FWTNEG",
71 "T_FRST","T_FRST1","T_LAST1","T_LAST","N_PATCH","N_PATCH1","N_PATCHM","NOAA_AR","NOAA_NUM","NOAA_ARS","OFFDISK", "QUIET"
72 };
73
74 const char *geoKeys[] =
75 {
76 "CRPIX1", "CRPIX2", "CRVAL1", "CRVAL2",
77 "CDELT1", "CDELT2", "CROTA2",
78 "CRDER1", "CRDER2", "CSYSER1", "CSYSER2",
79 "IMCRPIX1", "IMCRPIX2"
80 };
81
82 const char *ambigKeys[] =
83 {
84 "AMBCODEV", "AMBDOCU",
85 xudong 1.1 "AMBGMTRY", "AMBWEAK", "AMBNEROD", "AMBNGROW",
86 "AMBNPAD", "AMBNAP", "AMBNTX", "AMBNTY",
87 "AMBBTHR0", "AMBBTHR1", "AMBSEED", "AMBNEQ",
88 "AMBLMBDA", "AMBTFCT0", "AMBTFCTR", "AMBPATCH"
89 };
90
91
92
93 int copy_me_keys (DRMS_Record_t *inRec, DRMS_Record_t *outRec)
94
95 {
96 int failCount = 0;
97 int iKey, nKeys = ARRLENGTH(meKeys);
98
99 if (inRec == NULL || outRec == NULL) {
100 return -1;
101 }
102
103 for (iKey = 0; iKey < nKeys; iKey++)
104 {
105 failCount += drms_copykey(outRec, inRec, meKeys[iKey]);
106 xudong 1.1 }
107
108 return failCount;
109 }
110
111
112
113 int copy_patch_keys (DRMS_Record_t *inRec, DRMS_Record_t *outRec)
114
115 {
116 int failCount = 0;
117 int iKey, nKeys = ARRLENGTH(patchKeys);
118
119 if (inRec == NULL || outRec == NULL) {
120 return -1;
121 }
122
123 for (iKey = 0; iKey < nKeys; iKey++)
124 {
125 failCount += drms_copykey(outRec, inRec, patchKeys[iKey]);
126 }
127 xudong 1.1
128 return failCount;
129 }
130
131
132
133 int copy_geo_keys (DRMS_Record_t *inRec, DRMS_Record_t *outRec)
134
135 {
136 int failCount = 0;
137 int iKey, nKeys = ARRLENGTH(geoKeys);
138
139 if (inRec == NULL || outRec == NULL) {
140 return -1;
141 }
142
143 for (iKey = 0; iKey < nKeys; iKey++)
144 {
145 failCount += drms_copykey(outRec, inRec, geoKeys[iKey]);
146 }
147
148 xudong 1.1 return failCount;
149 }
150
151
152
153 int copy_ambig_keys (DRMS_Record_t *inRec, DRMS_Record_t *outRec)
154
155 {
156 int failCount = 0;
157 int iKey, nKeys = ARRLENGTH(ambigKeys);
158
159 if (inRec == NULL || outRec == NULL) {
160 return -1;
161 }
162
163 for (iKey = 0; iKey < nKeys; iKey++)
164 {
165 failCount += drms_copykey(outRec, inRec, ambigKeys[iKey]);
166 }
167
168 return failCount;
169 xudong 1.1 }
|