(file) Return to update_sharp_keys.c CVS log (file) (dir) Up to [Development] / JSOC / proj / sharp / apps

  1 mbobra 1.1 /*                                                                      
  2             *      MODULE NAME: update_sharp_keys.c
  3             *
  4             *	DESCRIPTION: This module recalculates SHARP keywords. This is accomplished by 
  5             *      cloning a record, recalculating keywords of choice (i.e., user input), 
  6             *      and pointing to the same segments as the old record. Associated error keys
  7             *      are computed by default. 
  8             * 
  9             *      This module accounts for versioning by appending to the keyword CODEVER7 and HISTORY:
 10             *      CODEVER7 will contain multiple lines: the production build of sharp.c, the 
 11             *      production build of include file sw_functions.c, and the production build
 12             *      of update_sharp_keys.c. HISTORY will include a human-readable sentence about which
 13             *      keywords were updated. 
 14             * 
 15 mbobra 1.10  *      N.B.: This module calculates the keyword specified in keylist and then does a 
 16              *      drms_copykeys() to copy over all the remaining keywords. However, if [1] a keyword
 17              *      does not exist in the .jsd files of the input series, and [2] said keyword X is not
 18              *      specified in keylist, then [3] drms_copykeys() will copy DRMS_MISSING_VALUE into 
 19              *      keyword X for all the output series.
 20              *
 21 mbobra 1.1   *      This module does not produce segments.
 22              *
 23              *      INPUTS     : -- DRMS SHARP series
 24              *                   -- DRMS SHARP CEA series
 25              *                   -- HARPNUM
 26              *                   -- comma separated list of keywords to recalculate
 27 mbobra 1.9   *                   -- DEBUG flag (use like this debug=debug)
 28 mbobra 1.1   *
 29              *	AUTHOR     : Monica Bobra
 30              *
 31              *	Version    :   v0.0	Jun 14 2013
 32 mbobra 1.6   *                     v0.1     Feb 11 2014 Added different input and output series
 33 mbobra 1.1   *
 34              *	EXAMPLE    :
 35 mbobra 1.6   *      update_sharp_keys sharpseriesin=hmi.sharp_720s sharpceaseriesin=hmi.sharp_cea_720s //
 36 mbobra 1.9   *      HARPNUM=1 sharpseriesout=hmi.sharp_720s sharpceaseriesout=hmi.sharp_cea_720s keylist=USFLUX,TOTPOT debug=debug
 37 mbobra 1.1   *
 38              */
 39             
 40             /* Include files */
 41             #include <stdio.h>
 42             #include <stdlib.h>
 43             #include <time.h>
 44             #include <sys/time.h>
 45             #include <math.h>
 46             #include <string.h>
 47             #include "jsoc_main.h"
 48             #include "astro.h"
 49             #include "fstats.h"
 50             #include "cartography.c"
 51             #include "fresize.h"
 52             #include "finterpolate.h"
 53             #include "img2helioVector.c"
 54             #include "copy_me_keys.c"
 55             #include "errorprop.c"
 56             #include "sw_functions.c"
 57             #include <mkl_blas.h>
 58 mbobra 1.1  #include <mkl_service.h>
 59             #include <mkl_lapack.h>
 60             #include <mkl_vml_functions.h>
 61             #include <omp.h>
 62              
 63             /* Define values */                     
 64             #define PI              (M_PI)
 65             #define RADSINDEG       (PI/180.)
 66             #define ARRLENGTH(ARR) (sizeof(ARR) / sizeof(ARR[0]))
 67             #define DIE(msg) {fflush(stdout); fprintf(stderr,"%s, status=%d\n", msg, status); return(status);}
 68             #define SHOW(msg) {printf("%s", msg); fflush(stdout);}
 69             
 70             char *module_name = "update_sharp_keys";  /* Module name */
 71 mbobra 1.6  char *version_id  = "2014 Feb 12";        /* Version number */
 72 mbobra 1.1  
 73             ModuleArgs_t module_args[] =
 74             {
 75 mbobra 1.9  	{ARG_STRING, "sharpseriesin",      NULL, "Input Sharp dataseries"},
 76             	{ARG_STRING, "sharpceaseriesin",   NULL, "Input Sharp CEA dataseries"},
 77 mbobra 1.6  	{ARG_STRING, "sharpseriesout",     NULL, "Output Sharp dataseries"},
 78             	{ARG_STRING, "sharpceaseriesout",  NULL, "Output Sharp CEA dataseries"},
 79 mbobra 1.9  	{ARG_INT,    "HARPNUM",            NULL, "HARP number"},
 80             	{ARG_STRING, "keylist",            NULL, "comma separated list of keywords to update"},
 81             	{ARG_STRING, "debug",              NULL, "debug mode functionality. use like this: debug=debug"},
 82 mbobra 1.1  	{ARG_END}
 83             };
 84             
 85             
 86             int DoIt(void)                    
 87             {
 88                     int errbufstat=setvbuf(stderr, NULL, _IONBF, BUFSIZ);
 89                     int outbufstat=setvbuf(stdout, NULL, _IONBF, BUFSIZ);
 90             
 91             	int status = DRMS_SUCCESS;
 92             	int nrecs, irec;
 93             
 94                     /* Keywords */
 95             	float mean_vf; 
 96             	float absFlux;
 97                     float count_mask;
 98             	float mean_hf;
 99             	float mean_gamma;
100             	float mean_derivative_btotal;
101             	float mean_derivative_bh; 
102             	float mean_derivative_bz;
103 mbobra 1.1  	float mean_jz;
104             	float us_i;
105             	float mean_alpha;
106             	float mean_ih;
107             	float total_us_ih;
108             	float total_abs_ih;
109             	float totaljz;
110             	float totpot;
111             	float meanpot;
112             	float area_w_shear_gt_45;
113             	float meanshear_angle;
114             	float area_w_shear_gt_45h;
115             	float meanshear_angleh; 
116                     float mean_derivative_btotal_err;
117                     float mean_vf_err;
118                     float mean_gamma_err;
119                     float mean_derivative_bh_err;
120                     float mean_derivative_bz_err;
121                     float mean_jz_err;
122                     float us_i_err; 
123                     float mean_alpha_err;
124 mbobra 1.1          float mean_ih_err;
125                     float total_us_ih_err;
126                     float total_abs_ih_err;
127                     float totaljz_err;
128                     float meanpot_err;
129                     float totpot_err;
130 mbobra 1.6          float Rparam;
131 mbobra 1.1          float meanshear_angle_err;
132 mbobra 1.8          float totfx;
133                     float totfy;
134                     float totfz;
135                     float totbsq;
136                     float epsx;
137                     float epsy;
138                     float epsz;
139             
140 mbobra 1.6  	char *sharpseriesin = (char *) params_get_str(&cmdparams, "sharpseriesin");
141             	char *sharpceaseriesin = (char *) params_get_str(&cmdparams, "sharpceaseriesin");
142             	char *sharpseriesout = (char *) params_get_str(&cmdparams, "sharpseriesout");
143             	char *sharpceaseriesout = (char *) params_get_str(&cmdparams, "sharpceaseriesout");
144             
145                     int sameflag = strcmp(sharpseriesin, sharpseriesout) == 0;
146                     int testflag = strcmp(sharpceaseriesin, sharpceaseriesout) == 0;
147                     if (testflag != sameflag)
148                       DIE("Either both outputs must be the same as their inputs, or both be different.");
149 mbobra 1.1  
150             	int harpnum = params_get_int(&cmdparams, "HARPNUM");
151 mbobra 1.6  
152 mbobra 1.1  	char sharpquery[256];
153             	char sharpceaquery[256];
154 mbobra 1.6  	sprintf(sharpceaquery, "%s[%d]\n", sharpceaseriesin,harpnum);
155             	printf(sharpceaquery, "%s[%d]\n", sharpceaseriesin,harpnum);
156 mbobra 1.1  
157 mbobra 1.6  	sprintf(sharpquery, "%s[%d]\n", sharpseriesin,harpnum);
158             	sprintf(sharpquery, "%s[%d]\n", sharpseriesin,harpnum);
159 mbobra 1.1  
160 mbobra 1.6  	DRMS_RecordSet_t *sharpinrecset= drms_open_records(drms_env, sharpquery, &status);
161 mbobra 1.1  	if (status != DRMS_SUCCESS)
162             		DIE("Problem opening sharp recordset.");
163 mbobra 1.6  	nrecs=sharpinrecset->n;
164             	if (nrecs == 0)
165 mbobra 1.1  		DIE("Sharp recordset contains no records.");
166 mbobra 1.6          printf("nrecs=%d\n",nrecs);
167 mbobra 1.1  
168             	DRMS_RecordSet_t *sharpceainrecset = drms_open_records(drms_env, sharpceaquery, &status);
169             	if (status != DRMS_SUCCESS)
170             		DIE("Problem opening sharp cea recordset.");
171 mbobra 1.6  	if (sharpceainrecset->n != nrecs)
172             		DIE("Sharp cea recordset differs from sharp recordset.");
173             
174                     DRMS_RecordSet_t *sharpoutrecset, *sharpceaoutrecset;
175                     if (sameflag)
176                     {
177             	sharpoutrecset = drms_clone_records(sharpinrecset, DRMS_PERMANENT, DRMS_SHARE_SEGMENTS, &status);
178             	if (status != DRMS_SUCCESS)
179             		DIE("Problem cloning sharp records.");
180             	sharpceaoutrecset = drms_clone_records(sharpceainrecset, DRMS_PERMANENT, DRMS_SHARE_SEGMENTS, &status);
181 mbobra 1.1  	if (status != DRMS_SUCCESS)
182             		DIE("Problem cloning sharp cea records.");
183 mbobra 1.6          }
184                     else
185                     {
186             	sharpoutrecset = drms_create_records(drms_env, nrecs, sharpseriesout, DRMS_PERMANENT, &status);
187             	if (status != DRMS_SUCCESS)
188             		DIE("Problem creating sharp records.");
189             	sharpceaoutrecset = drms_create_records(drms_env, nrecs, sharpceaseriesout, DRMS_PERMANENT, &status);
190             	if (status != DRMS_SUCCESS)
191             		DIE("Problem creating sharp cea records.");
192                     }
193             
194 mbobra 1.1  
195             	char *keylist = (char *) params_get_str(&cmdparams, "keylist");
196 mbobra 1.9  	char *debug   = (char *) params_get_str(&cmdparams, "debug");
197 mbobra 1.1  
198                     // Flags to indicate which keyword will be recalculated
199             	int meanvfflag  = (strstr(keylist,"USFLUX")  != NULL);  // generalize so that lowercase is acceptable
200             	int totpotflag  = (strstr(keylist,"TOTPOT")  != NULL);  
201                     int meangamflag = (strstr(keylist,"MEANGAM") != NULL);
202                     int meangbtflag = (strstr(keylist,"MEANGBT") != NULL);
203                     int meangbzflag = (strstr(keylist,"MEANGBZ") != NULL);
204                     int meangbhflag = (strstr(keylist,"MEANGBH") != NULL);
205                     int meanjzdflag = (strstr(keylist,"MEANJZD") != NULL);
206                     int totusjzflag = (strstr(keylist,"TOTUSJZ") != NULL);
207                     int meanalpflag = (strstr(keylist,"MEANALP") != NULL);
208                     int meanjzhflag = (strstr(keylist,"MEANJZH") != NULL);
209                     int totusjhflag = (strstr(keylist,"TOTUSJH") != NULL);
210                     int absnjzhflag = (strstr(keylist,"ABSNJZH") != NULL);
211                     int savncppflag = (strstr(keylist,"SAVNCPP") != NULL);
212                     int meanpotflag = (strstr(keylist,"MEANPOT") != NULL);
213                     int meanshrflag = (strstr(keylist,"MEANSHR") != NULL);
214                     int shrgt45flag = (strstr(keylist,"SHRGT45") != NULL);
215 mbobra 1.6          int r_valueflag = (strstr(keylist,"R_VALUE") != NULL);
216 mbobra 1.8          int totbsqflag  = (strstr(keylist,"TOTBSQ")  != NULL);
217                     int totfxflag   = (strstr(keylist,"TOTFX")   != NULL);
218                     int totfyflag   = (strstr(keylist,"TOTFY")   != NULL);
219                     int totfzflag   = (strstr(keylist,"TOTFZ")   != NULL);
220                     int epsxflag    = (strstr(keylist,"EPSX")    != NULL);
221                     int epsyflag    = (strstr(keylist,"EPSY")    != NULL);
222                     int epszflag    = (strstr(keylist,"EPSZ")    != NULL);
223 mbobra 1.9          int debugflag   = (strstr(debug,"debug")     != NULL);
224 mbobra 1.8  
225 mbobra 1.11     
226             	for (irec=0;irec<nrecs;irec++)
227             	{
228             
229             
230             	DRMS_Record_t *sharpinrec = sharpinrecset->records[irec];
231             	DRMS_Record_t *sharpceainrec = sharpceainrecset->records[irec];
232 mbobra 1.1  	DRMS_Segment_t *inseg = drms_segment_lookup(sharpceainrec, "Br");
233             	int nx = inseg->axis[0];
234             	int ny = inseg->axis[1];
235             	int nxny = nx * ny;
236             	int dims[2] = {nx, ny};
237 mbobra 1.6   
238 mbobra 1.1  	// Temp arrays 	
239             	float *bh      = (float *) (malloc(nxny * sizeof(float)));
240             	float *bt      = (float *) (malloc(nxny * sizeof(float)));
241             	float *jz      = (float *) (malloc(nxny * sizeof(float)));
242             	float *bpx     = (float *) (malloc(nxny * sizeof(float)));
243             	float *bpy     = (float *) (malloc(nxny * sizeof(float)));
244             	float *bpz     = (float *) (malloc(nxny * sizeof(float)));
245             	float *derx    = (float *) (malloc(nxny * sizeof(float)));
246             	float *dery    = (float *) (malloc(nxny * sizeof(float)));
247             	float *derx_bt = (float *) (malloc(nxny * sizeof(float)));
248             	float *dery_bt = (float *) (malloc(nxny * sizeof(float)));
249             	float *derx_bh = (float *) (malloc(nxny * sizeof(float)));
250             	float *dery_bh = (float *) (malloc(nxny * sizeof(float)));
251             	float *derx_bz = (float *) (malloc(nxny * sizeof(float)));
252             	float *dery_bz = (float *) (malloc(nxny * sizeof(float)));
253             	float *bt_err  = (float *) (malloc(nxny * sizeof(float)));
254             	float *bh_err  = (float *) (malloc(nxny * sizeof(float)));
255                     float *jz_err  = (float *) (malloc(nxny * sizeof(float)));
256                     float *jz_err_squared = (float *) (malloc(nxny * sizeof(float)));
257                     float *jz_rms_err = (float *) (malloc(nxny * sizeof(float)));
258                     float *jz_err_squared_smooth = (float *) (malloc(nxny * sizeof(float)));
259 mbobra 1.1  	float *jz_smooth = (float *) (malloc(nxny * sizeof(float)));
260 mbobra 1.11 	float *err_term1  = (float *) (malloc(nxny * sizeof(float)));
261             	float *err_term2  = (float *) (malloc(nxny * sizeof(float)));
262 mbobra 1.12 	float *err_termA   = (float *) (calloc(nxny, sizeof(float)));
263             	float *err_termB   = (float *) (calloc(nxny, sizeof(float)));
264             	float *err_termAt  = (float *) (calloc(nxny, sizeof(float)));
265             	float *err_termBt  = (float *) (calloc(nxny, sizeof(float)));
266             	float *err_termAh  = (float *) (calloc(nxny, sizeof(float)));
267             	float *err_termBh  = (float *) (calloc(nxny, sizeof(float)));
268               
269 mbobra 1.1          // ephemeris variables
270             	float  cdelt1_orig, cdelt1, dsun_obs, imcrpix1, imcrpix2, crpix1, crpix2;
271             	double rsun_ref, rsun_obs;
272             
273                     // outrecords 
274 mbobra 1.6  	DRMS_Record_t *sharpoutrec, *sharpceaoutrec, *testrec;
275 mbobra 1.1  
276                     // prepare to set CODEVER7 (CVS Version of the SHARP module)
277             	char *cvsinfo0;
278             	char *history0;
279 mbobra 1.12 	char *cvsinfo1 = strdup("$Id: update_sharp_keys.c,v 1.11 2015/01/25 18:30:34 mbobra Exp $");
280 mbobra 1.1  	char *cvsinfo2 = sw_functions_version();
281             	char *cvsinfoall = (char *)malloc(2048);
282                     char historyofthemodule[2048];
283                     cvsinfo0    = drms_getkey_string(sharpinrec, "CODEVER7", &status);
284                     strcpy(cvsinfoall,cvsinfo0);
285                     strcat(cvsinfoall,"\n");
286                     strcat(cvsinfoall,cvsinfo2);
287             
288                     // prepare to set HISTORY (History of the data)
289             	char timebuf[1024];
290             	float UNIX_epoch = -220924792.000; 	
291             	sprint_time(timebuf, (double)time(NULL) + UNIX_epoch, "ISO", 0);
292                     sprintf(historyofthemodule,"The following keywords were re-computed on %s: %s.",timebuf,keylist); 
293             	printf("historyofthemodule=%s\n",historyofthemodule);
294             	history0    = drms_getkey_string(sharpinrec, "HISTORY", &status);
295             	strcat(historyofthemodule,"\n");
296                     strcat(historyofthemodule,history0);
297              
298 mbobra 1.6          // grab one record such that we can malloc the R-parameter calculation arrays outside of the loop
299                     // assume scale = round(2./cdelt1) does not change for any given HARP
300                     testrec  = sharpceainrecset->records[nrecs/2];
301                     dsun_obs = drms_getkey_float(testrec, "DSUN_OBS",   &status); 
302                     rsun_ref = drms_getkey_double(testrec, "RSUN_REF", &status);
303                     cdelt1_orig = drms_getkey_float(testrec, "CDELT1",   &status);
304                     cdelt1      = (atan((rsun_ref*cdelt1_orig*RADSINDEG)/(dsun_obs)))*(1/RADSINDEG)*(3600.);
305                     int scale = round(2.0/cdelt1);
306                     int nx1 = nx/scale;
307                     int ny1 = ny/scale;
308 mbobra 1.7          int nxp = nx1+40;
309                     int nyp = ny1+40;
310 mbobra 1.6  
311 mbobra 1.10         // check to make sure that the dimensions passed into fsample() are adequate
312 mbobra 1.6  	if (nx1 > floor((nx-1)/scale + 1) )
313             		DIE("X-dimension of output array in fsample() is too large.");
314             	if (ny1 > floor((ny-1)/scale + 1) )
315 mbobra 1.10         	DIE("Y-dimension of output array in fsample() is too large.");
316 mbobra 1.6   
317                     // malloc some arrays for the R parameter calculation
318 mbobra 1.7          float *rim     = (float *)malloc(nx1*ny1*sizeof(float));
319                     float *p1p0    = (float *)malloc(nx1*ny1*sizeof(float));
320                     float *p1n0    = (float *)malloc(nx1*ny1*sizeof(float));
321                     float *p1p     = (float *)malloc(nx1*ny1*sizeof(float));
322                     float *p1n     = (float *)malloc(nx1*ny1*sizeof(float));
323                     float *p1      = (float *)malloc(nx1*ny1*sizeof(float));
324                     float *pmap    = (float *)malloc(nxp*nyp*sizeof(float));
325                     float *p1pad   = (float *)malloc(nxp*nyp*sizeof(float));
326                     float *pmapn   = (float *)malloc(nx1*ny1*sizeof(float));
327 mbobra 1.8  
328                     // define some arrays for the lorentz force calculation
329                     float *fx = (float *) (malloc(nxny * sizeof(float)));
330                     float *fy = (float *) (malloc(nxny * sizeof(float)));
331                     float *fz = (float *) (malloc(nxny * sizeof(float)));
332                 
333 mbobra 1.1     	   // Get emphemeris
334 mbobra 1.7    	   sharpinrec    = sharpinrecset->records[irec];
335 mbobra 1.6    	   sharpceainrec = sharpceainrecset->records[irec];
336 mbobra 1.7  	   cdelt1_orig   = drms_getkey_float(sharpceainrec, "CDELT1",   &status);
337             	   dsun_obs      = drms_getkey_float(sharpinrec, "DSUN_OBS",   &status);
338             	   rsun_ref      = drms_getkey_double(sharpinrec, "RSUN_REF", &status);
339             	   rsun_obs      = drms_getkey_double(sharpinrec, "RSUN_OBS", &status);
340             	   imcrpix1      = drms_getkey_float(sharpinrec, "IMCRPIX1", &status);
341             	   imcrpix2      = drms_getkey_float(sharpinrec, "IMCRPIX2", &status);
342             	   crpix1        = drms_getkey_float(sharpinrec, "CRPIX1", &status);
343             	   crpix2        = drms_getkey_float(sharpinrec, "CRPIX2", &status);
344 mbobra 1.6  
345 mbobra 1.1    	   sharpoutrec = sharpoutrecset->records[irec];
346               	   sharpceaoutrec = sharpceaoutrecset->records[irec];
347 mbobra 1.6             if (!sameflag)
348                        {
349                          drms_copykeys(sharpoutrec, sharpinrec, 0, kDRMS_KeyClass_Explicit);
350                          drms_copykeys(sharpceaoutrec, sharpceainrec, 0, kDRMS_KeyClass_Explicit);
351                        }
352             
353 mbobra 1.11            TIME trec, tnow; /* 1970.01.01_00:00:00_UTC */
354 mbobra 1.6             tnow = (double)time(NULL);
355                        tnow += UNIX_epoch;
356 mbobra 1.1  
357 mbobra 1.9             if (debugflag)
358                        {
359                           printf("i=%d\n",irec);
360                        }
361             
362 mbobra 1.6  	   // set CODEVER7 and HISTORY and DATE
363 mbobra 1.1  	   drms_setkey_string(sharpoutrec, "CODEVER7", cvsinfoall);
364                        drms_setkey_string(sharpoutrec,"HISTORY",historyofthemodule);           
365             	   drms_setkey_string(sharpceaoutrec, "CODEVER7", cvsinfoall);
366                        drms_setkey_string(sharpceaoutrec,"HISTORY",historyofthemodule);
367 mbobra 1.6             drms_setkey_time(sharpoutrec,"DATE",tnow);  
368                        drms_setkey_time(sharpceaoutrec,"DATE",tnow);
369 mbobra 1.1  
370             	   // Get bx, by, bz, mask	
371             	   // Use HARP (Turmon) bitmap as a threshold on spaceweather quantities
372 mbobra 1.6  	   DRMS_Segment_t *bitmaskSeg = drms_segment_lookup(sharpceainrec, "bitmap");
373 mbobra 1.1  	   DRMS_Array_t *bitmaskArray = drms_segment_read(bitmaskSeg, DRMS_TYPE_INT, &status);
374             	   int *bitmask = (int *) bitmaskArray->data;	 // get the previously made mask array	
375             
376             	   //Use conf_disambig map as a threshold on spaceweather quantities 
377 mbobra 1.6  	   DRMS_Segment_t *maskSeg = drms_segment_lookup(sharpceainrec, "conf_disambig");       
378 mbobra 1.1  	   DRMS_Array_t *maskArray = drms_segment_read(maskSeg, DRMS_TYPE_INT, &status);	
379                        if (status != DRMS_SUCCESS)
380                           DIE("No CONF_DISAMBIG segment.");
381             	   int *mask = (int *) maskArray->data;		// get the previously made mask array	
382             
383 mbobra 1.6   	   //Use magnetogram map to compute R
384             	   DRMS_Segment_t *losSeg = drms_segment_lookup(sharpceainrec, "magnetogram");
385             	   DRMS_Array_t *losArray = drms_segment_read(losSeg, DRMS_TYPE_FLOAT, &status);
386             	   float *los = (float *) losArray->data;		// los
387             
388             	   DRMS_Segment_t *bxSeg = drms_segment_lookup(sharpceainrec, "Bp");
389 mbobra 1.1  	   DRMS_Array_t *bxArray = drms_segment_read(bxSeg, DRMS_TYPE_FLOAT, &status);
390             	   float *bx = (float *) bxArray->data;		// bx
391             	
392 mbobra 1.6  	   DRMS_Segment_t *bySeg = drms_segment_lookup(sharpceainrec, "Bt");
393 mbobra 1.1  	   DRMS_Array_t *byArray = drms_segment_read(bySeg, DRMS_TYPE_FLOAT, &status);
394             	   float *by = (float *) byArray->data;		// by
395             	   for (int i = 0; i < nxny; i++) by[i] *= -1;
396             	
397 mbobra 1.6  	   DRMS_Segment_t *bzSeg = drms_segment_lookup(sharpceainrec, "Br");
398 mbobra 1.1  	   DRMS_Array_t *bzArray = drms_segment_read(bzSeg, DRMS_TYPE_FLOAT, &status);
399             	   float *bz = (float *) bzArray->data;		// bz
400             
401 mbobra 1.6     	   DRMS_Segment_t *bz_errSeg = drms_segment_lookup(sharpceainrec, "Br_err");
402 mbobra 1.1  	   DRMS_Array_t *bz_errArray = drms_segment_read(bz_errSeg, DRMS_TYPE_FLOAT, &status);
403             	   float *bz_err = (float *) bz_errArray->data;		// bz_err
404             
405 mbobra 1.6  	   DRMS_Segment_t *by_errSeg = drms_segment_lookup(sharpceainrec, "Bt_err");
406 mbobra 1.1  	   DRMS_Array_t *by_errArray = drms_segment_read(by_errSeg, DRMS_TYPE_FLOAT, &status);
407             	   float *by_err = (float *) by_errArray->data;		// by_err
408             
409 mbobra 1.6  	   DRMS_Segment_t *bx_errSeg = drms_segment_lookup(sharpceainrec, "Bp_err");
410 mbobra 1.1  	   DRMS_Array_t *bx_errArray = drms_segment_read(bx_errSeg, DRMS_TYPE_FLOAT, &status);
411             	   float *bx_err = (float *) bx_errArray->data;		// bx_err
412             
413 mbobra 1.6             /***** USFLUX, Example Function 1 *************************************/ 
414 mbobra 1.1  	   if (meanvfflag)
415             	   {
416                           // Compute unsigned flux 
417                           if (computeAbsFlux(bz_err, bz , dims, &absFlux, &mean_vf,  &mean_vf_err, 
418                                              &count_mask, mask, bitmask, cdelt1, rsun_ref, rsun_obs))
419                           {
420             	         mean_vf           = DRMS_MISSING_FLOAT;
421                              mean_vf_err       = DRMS_MISSING_FLOAT;
422                              count_mask        = DRMS_MISSING_INT;
423             	      }
424             
425                        drms_setkey_float(sharpoutrec, "USFLUX",  mean_vf);
426                        drms_setkey_float(sharpoutrec, "CMASK",   count_mask); 	
427                        drms_setkey_float(sharpoutrec, "ERRVF",   mean_vf_err);
428             
429                        drms_setkey_float(sharpceaoutrec, "USFLUX",  mean_vf);
430                        drms_setkey_float(sharpceaoutrec, "CMASK",   count_mask); 	
431                        drms_setkey_float(sharpceaoutrec, "ERRVF",   mean_vf_err);
432                        }
433 mbobra 1.6  
434                         /***** RPARAM, Example Function 14 *************************************/ 
435             	   if (r_valueflag)
436             	   {
437                           if (computeR(bz_err, los , dims, &Rparam, cdelt1, rim, p1p0, p1n0,
438 mbobra 1.7                             p1p, p1n, p1, pmap, nx1, ny1, scale, p1pad, nxp, nyp, pmapn))
439             
440 mbobra 1.6                {
441             		 Rparam            = DRMS_MISSING_FLOAT;
442             	      }
443             
444                        drms_setkey_float(sharpoutrec, "R_VALUE",  Rparam);
445                        drms_setkey_float(sharpceaoutrec, "R_VALUE", Rparam);
446             
447                        }
448               
449 mbobra 1.1             /***** MEANPOT and TOTPOT, Example Function 13  (Requires Keiji's code) **/
450                    
451                	   if (totpotflag || meanpotflag)
452             	   {
453                           // First compute potential field	
454                           for (int i = 0; i < nxny; i++) bpz[i] = bz[i];
455             	      greenpot(bpx, bpy, bpz, nx, ny);
456              
457                           // Then compute energy   
458             	      if (computeFreeEnergy(bx_err, by_err, bx, by, bpx, bpy, dims, 
459                                                 &meanpot, &meanpot_err, &totpot, &totpot_err, 
460             			            mask, bitmask, cdelt1, rsun_ref, rsun_obs)) 
461                           {
462             	         meanpot           = DRMS_MISSING_FLOAT; 
463             	         totpot            = DRMS_MISSING_FLOAT;
464                              meanpot_err       = DRMS_MISSING_FLOAT;
465                              totpot_err        = DRMS_MISSING_FLOAT;
466             	      }
467             	   
468                           // Set sharp keys          
469                           drms_setkey_float(sharpoutrec, "MEANPOT",  meanpot); 
470 mbobra 1.1                drms_setkey_float(sharpoutrec, "TOTPOT",   totpot); 	
471                           drms_setkey_float(sharpoutrec, "ERRMPOT",  meanpot_err); 
472                           drms_setkey_float(sharpoutrec, "ERRTPOT",  totpot_err);  
473             
474                           // Set sharp cea keys
475                           drms_setkey_float(sharpceaoutrec, "MEANPOT",  meanpot); 
476                           drms_setkey_float(sharpceaoutrec, "TOTPOT",   totpot); 	
477                           drms_setkey_float(sharpceaoutrec, "ERRMPOT",  meanpot_err); 
478                           drms_setkey_float(sharpceaoutrec, "ERRTPOT",  totpot_err);
479                        }
480                    
481                        /***** MEANGAM, Example Function 3 ************************************/
482                
483                        if (meangamflag)
484                        {
485                           // First compute horizontal field
486                           computeBh(bx_err, by_err, bh_err, bx, by, bz, bh, dims, &mean_hf, mask, bitmask);
487             
488                           // Then compute inclination angle, gamma
489                           if (computeGamma(bz_err, bh_err, bx, by, bz, bh, dims, &mean_gamma, &mean_gamma_err,mask, bitmask))
490             	      {	
491 mbobra 1.1                   mean_gamma                 =  DRMS_MISSING_FLOAT;
492                              mean_gamma_err             =  DRMS_MISSING_FLOAT;
493                           }
494             
495                           // Set sharp keys    
496                           drms_setkey_float(sharpoutrec, "MEANGAM",  mean_gamma); 
497                           drms_setkey_float(sharpoutrec, "ERRGAM",   mean_gamma_err); 	
498             
499                           // Set sharp cea keys
500                           drms_setkey_float(sharpceaoutrec, "MEANGAM", mean_gamma); 
501                           drms_setkey_float(sharpceaoutrec, "ERRGAM",  mean_gamma_err); 	
502                        }
503             
504                        /***** MEANGBT, Example Function 5 (Requires Function 4) *************/
505             
506                        if (meangbtflag)
507                        {
508                           // First, compute Bt 
509                           computeB_total(bx_err, by_err, bz_err, bt_err, bx, by, bz, bt, dims, mask, bitmask);
510             
511                           // Then take the derivative of Bt
512 mbobra 1.1  	      if (computeBtotalderivative(bt, dims, &mean_derivative_btotal, mask, bitmask, derx_bt, dery_bt, bt_err, 
513 mbobra 1.12                                           &mean_derivative_btotal_err, err_termAt, err_termBt))
514 mbobra 1.1                {
515             	         mean_derivative_btotal     = DRMS_MISSING_FLOAT;
516             	         mean_derivative_btotal_err = DRMS_MISSING_FLOAT;
517                           }
518             
519                           // Set sharp keys    
520                           drms_setkey_float(sharpoutrec, "MEANGBT",  mean_derivative_btotal); 
521                           drms_setkey_float(sharpoutrec, "ERRBT",  mean_derivative_btotal_err); 
522             	
523                           // Set sharp cea keys  
524                           drms_setkey_float(sharpceaoutrec, "MEANGBT", mean_derivative_btotal); 
525                           drms_setkey_float(sharpceaoutrec, "ERRBT", mean_derivative_btotal_err); 	
526                        }
527                
528                        /***** MEANGBH, Example Function 6 (Requires Function 2) *************/
529             
530                        if (meangbhflag)
531                        {
532                           // First, compute Bh
533                	      computeBh(bx_err, by_err, bh_err, bx, by, bz, bh, dims, &mean_hf, mask, bitmask);
534             
535 mbobra 1.1                // Then take the derivative of Bh
536 mbobra 1.12 	      if (computeBhderivative(bh, bh_err, dims, &mean_derivative_bh, &mean_derivative_bh_err, mask, bitmask, derx_bh, dery_bh, err_termAh, err_termBh))
537 mbobra 1.1                {
538             	         mean_derivative_bh       = DRMS_MISSING_FLOAT;
539                              mean_derivative_bh_err   = DRMS_MISSING_FLOAT;
540             	      }
541             
542                           // Set sharp keys   
543                           drms_setkey_float(sharpoutrec, "MEANGBH", mean_derivative_bh); 
544                           drms_setkey_float(sharpoutrec, "ERRBH", mean_derivative_bh_err); 
545             	
546                           // Set sharp cea keys  
547                           drms_setkey_float(sharpceaoutrec, "MEANGBH", mean_derivative_bh); 
548                           drms_setkey_float(sharpceaoutrec, "ERRBH", mean_derivative_bh_err); 	
549                        }
550             
551                        /***** MEANGBZ, Example Function 7 ************************************/
552             
553                        if (meangbzflag)
554                        {
555                           // Compute Bz derivative
556 mbobra 1.12               if (computeBzderivative(bz, bz_err, dims, &mean_derivative_bz, &mean_derivative_bz_err, mask, bitmask, derx_bz, dery_bz, err_termA, err_termB))
557 mbobra 1.1                {
558             	         mean_derivative_bz     = DRMS_MISSING_FLOAT; 
559                              mean_derivative_bz_err = DRMS_MISSING_FLOAT; 
560                           }
561             	
562                           // Set sharp keys   
563                           drms_setkey_float(sharpoutrec, "MEANGBZ",  mean_derivative_bz); 
564                           drms_setkey_float(sharpoutrec, "ERRBZ",  mean_derivative_bz_err); 
565             	
566                           // Set sharp cea keys   
567                           drms_setkey_float(sharpceaoutrec, "MEANGBZ", mean_derivative_bz); 
568                           drms_setkey_float(sharpceaoutrec, "ERRBZ", mean_derivative_bz_err); 	
569                        }
570             
571                        /***** MEANJZD and TOTUSJZ, Example Function 9 (Requires Function 8) ***/
572             
573                        if (meanjzdflag || totusjzflag)
574                        {
575                           // First, compute Jz on all pixels
576             	      computeJz(bx_err, by_err, bx, by, dims, jz, jz_err, jz_err_squared, mask, bitmask, cdelt1, rsun_ref, rsun_obs, 
577 mbobra 1.11                      derx, dery, err_term1, err_term2);
578 mbobra 1.1     
579                           // Then take the sums of the appropriate pixels
580                           if(computeJzsmooth(bx, by, dims, jz, jz_smooth, jz_err, jz_rms_err, jz_err_squared_smooth, &mean_jz,
581                                    &mean_jz_err, &us_i, &us_i_err, mask, bitmask, cdelt1,
582                                    rsun_ref, rsun_obs, derx, dery))
583             
584             
585                           {
586                              mean_jz                = DRMS_MISSING_FLOAT;
587             	         us_i                   = DRMS_MISSING_FLOAT;
588                              mean_jz_err            = DRMS_MISSING_FLOAT;
589                              us_i_err               = DRMS_MISSING_FLOAT;
590             	      }
591             
592                           // Set sharp keys   
593                           drms_setkey_float(sharpoutrec, "MEANJZD",  mean_jz); 
594                           drms_setkey_float(sharpoutrec, "TOTUSJZ",  us_i); 	
595                           drms_setkey_float(sharpoutrec, "ERRJZ",  mean_jz_err); 
596                           drms_setkey_float(sharpoutrec, "ERRUSI",  us_i_err); 	
597             
598                           // Set sharp cea keys   
599 mbobra 1.1                drms_setkey_float(sharpceaoutrec, "MEANJZD", mean_jz); 
600                           drms_setkey_float(sharpceaoutrec, "TOTUSJZ", us_i); 	
601                           drms_setkey_float(sharpceaoutrec, "ERRJZ", mean_jz_err); 
602                           drms_setkey_float(sharpceaoutrec, "ERRUSI", us_i_err); 	
603                        }
604             
605                        /***** MEANALP, Example Function 10 (Requires Function 8)*********/
606             
607                        if (meanalpflag)
608                        {
609                           // First, compute Jz on all pixels
610                	      computeJz(bx_err, by_err, bx, by, dims, jz, jz_err, jz_err_squared, mask, bitmask, cdelt1, rsun_ref, rsun_obs, 
611 mbobra 1.11                         derx, dery, err_term1, err_term2);
612 mbobra 1.1  
613                           // Then compute alpha quantities on select pixels
614             	      if (computeAlpha(jz_err, bz_err, bz, dims, jz, jz_smooth, &mean_alpha, &mean_alpha_err, 
615                                            mask, bitmask, cdelt1, rsun_ref, rsun_obs))
616                           {
617             	         mean_alpha             = DRMS_MISSING_FLOAT;
618                              mean_alpha_err         = DRMS_MISSING_FLOAT;
619                           }
620             
621                           // Set sharp keys   	
622                           drms_setkey_float(sharpoutrec, "MEANALP", mean_alpha); 
623                           drms_setkey_float(sharpoutrec, "ERRALP", mean_alpha_err); 	
624             
625                           // Set sharp cea keys   
626                           drms_setkey_float(sharpceaoutrec, "MEANALP", mean_alpha); 
627                           drms_setkey_float(sharpceaoutrec, "ERRALP", mean_alpha_err); 	
628             
629                        }
630             
631                        /***** MEANJZH, TOTUSJH, ABSNJZH, Example Function 11 (Requires Function 8) ***/
632             
633 mbobra 1.1             if (meanjzhflag || totusjhflag || absnjzhflag)
634                        {
635                           // First, compute Jz on all pixels
636                 	      computeJz(bx_err, by_err, bx, by, dims, jz, jz_err, jz_err_squared, mask, bitmask, cdelt1, rsun_ref, rsun_obs, 
637 mbobra 1.11                         derx, dery, err_term1, err_term2);
638 mbobra 1.1  
639                           // Then compute helicity quantities on select pixels
640                        if (computeHelicity(jz_err, jz_rms_err, bz_err, bz, dims, jz, &mean_ih, &mean_ih_err, &total_us_ih, 
641                                            &total_abs_ih, &total_us_ih_err, &total_abs_ih_err, mask, bitmask, cdelt1, rsun_ref, rsun_obs))
642                           {  
643             	         mean_ih                = DRMS_MISSING_FLOAT; 
644             	         total_us_ih            = DRMS_MISSING_FLOAT;
645               	         total_abs_ih           = DRMS_MISSING_FLOAT;
646                              mean_ih_err            = DRMS_MISSING_FLOAT;
647                              total_us_ih_err        = DRMS_MISSING_FLOAT;
648                              total_abs_ih_err       = DRMS_MISSING_FLOAT;
649             	      }
650             
651                           // Set sharp keys 
652                           drms_setkey_float(sharpoutrec, "MEANJZH",  mean_ih); 
653                           drms_setkey_float(sharpoutrec, "TOTUSJH",  total_us_ih); 	
654                           drms_setkey_float(sharpoutrec, "ABSNJZH",  total_abs_ih); 
655                           drms_setkey_float(sharpoutrec, "ERRMIH",  mean_ih_err); 	
656                           drms_setkey_float(sharpoutrec, "ERRTUI",  total_us_ih_err); 
657                           drms_setkey_float(sharpoutrec, "ERRTAI",  total_abs_ih_err); 	
658             
659 mbobra 1.1                // Set sharp cea keys 
660                           drms_setkey_float(sharpceaoutrec, "MEANJZH", mean_ih); 
661                           drms_setkey_float(sharpceaoutrec, "TOTUSJH", total_us_ih); 	
662                           drms_setkey_float(sharpceaoutrec, "ABSNJZH", total_abs_ih); 
663                           drms_setkey_float(sharpceaoutrec, "ERRMIH", mean_ih_err); 	
664                           drms_setkey_float(sharpceaoutrec, "ERRTUI", total_us_ih_err); 
665                           drms_setkey_float(sharpceaoutrec, "ERRTAI", total_abs_ih_err); 	
666                        }
667             
668                        /***** SAVNCPP, Example Function 12 (Requires Function 8) *******************/
669                
670                        if (savncppflag)
671                        {
672                           // First, compute Jz on all pixels
673               	      computeJz(bx_err, by_err, bx, by, dims, jz, jz_err, jz_err_squared, mask, bitmask, cdelt1, rsun_ref, rsun_obs, 
674 mbobra 1.11                         derx, dery, err_term1, err_term2);
675 mbobra 1.1  
676                           // Then compute sums of Jz on select pixels
677               	      if (computeSumAbsPerPolarity(jz_err, bz_err, bz, jz, dims, &totaljz, &totaljz_err, 
678             				           mask, bitmask, cdelt1, rsun_ref, rsun_obs))
679                           {
680             	         totaljz                = DRMS_MISSING_FLOAT;
681                              totaljz_err            = DRMS_MISSING_FLOAT;
682             	      }
683             
684                           // Set sharp keys 	
685                           drms_setkey_float(sharpoutrec, "SAVNCPP",  totaljz); 
686                           drms_setkey_float(sharpoutrec, "ERRJHT",  totaljz_err); 	
687             
688                           // Set sharp cea keys 
689                           drms_setkey_float(sharpceaoutrec, "SAVNCPP", totaljz); 
690                           drms_setkey_float(sharpceaoutrec, "ERRJHT", totaljz_err); 	
691                        }
692             
693                        /***** MEANSHR and SHRGT45, Example Function 14 (Requires Keiji's code) **********/
694             
695                        if (meanshrflag || shrgt45flag)
696 mbobra 1.1             {
697                           // First compute potential field
698             	      for (int i = 0; i < nxny; i++) bpz[i] = bz[i];
699             	      greenpot(bpx, bpy, bpz, nx, ny); 
700             
701                           // Then compute shear angles
702             	      if (computeShearAngle(bx_err, by_err, bh_err, bx, by, bz, bpx, bpy, bpz, dims, 
703             		   		    &meanshear_angle, &meanshear_angle_err, &area_w_shear_gt_45,  
704             				    mask, bitmask)) 
705                           {
706             	          meanshear_angle    = DRMS_MISSING_FLOAT; // If fail, fill in NaN
707             		  area_w_shear_gt_45 = DRMS_MISSING_FLOAT;
708                               meanshear_angle_err= DRMS_MISSING_FLOAT;
709             	      }
710             
711                           // Set sharp keys 	
712                           drms_setkey_float(sharpoutrec, "MEANSHR",  meanshear_angle); 
713                           drms_setkey_float(sharpoutrec, "SHRGT45",  area_w_shear_gt_45); 	
714                           drms_setkey_float(sharpoutrec, "ERRMSHA",  meanshear_angle_err); 	
715             
716                           // Set sharp cea keys 
717 mbobra 1.1                drms_setkey_float(sharpceaoutrec, "MEANSHR", meanshear_angle); 
718                           drms_setkey_float(sharpceaoutrec, "SHRGT45", area_w_shear_gt_45); 	
719                           drms_setkey_float(sharpceaoutrec, "ERRMSHA", meanshear_angle_err); 	  
720                        }
721             
722 mbobra 1.8            /***** TOTFX, TOTFY, TOTFX, TOTBSQ, EPSX, EPSY, EPSZ , Example Function 16 (Lorentz forces) **********/
723             
724                        if (totfxflag || totfyflag || totfzflag || totbsqflag || epsxflag || epsyflag || epszflag)
725                        {
726             
727                             // Compute Lorentz forces
728                     	if (computeLorentz(bx, by, bz, fx, fy, fz, dims, &totfx, &totfy, &totfz, &totbsq,
729                                 &epsx, &epsy, &epsz, mask, bitmask, cdelt1, rsun_ref, rsun_obs))
730                             {  
731             		   totfx             = DRMS_MISSING_FLOAT;
732                                totfy             = DRMS_MISSING_FLOAT;
733             		   totfz             = DRMS_MISSING_FLOAT;
734             		   totbsq            = DRMS_MISSING_FLOAT;
735                                epsx              = DRMS_MISSING_FLOAT;
736             		   epsy              = DRMS_MISSING_FLOAT;
737                                epsz              = DRMS_MISSING_FLOAT;
738                      	}
739             
740                           // Set sharp keys 	
741                           drms_setkey_float(sharpoutrec, "TOTFX", totfx); 
742                           drms_setkey_float(sharpoutrec, "TOTFY", totfy); 	
743 mbobra 1.8                drms_setkey_float(sharpoutrec, "TOTFZ", totfz); 	
744                           drms_setkey_float(sharpoutrec, "TOTBSQ",totbsq); 
745                           drms_setkey_float(sharpoutrec, "EPSX",  epsx); 	
746                           drms_setkey_float(sharpoutrec, "EPSY",  epsy); 	
747                           drms_setkey_float(sharpoutrec, "EPSZ",  epsz); 	
748             
749                           // Set sharp cea keys 
750                           drms_setkey_float(sharpceaoutrec, "TOTFX", totfx); 
751                           drms_setkey_float(sharpceaoutrec, "TOTFY", totfy); 	
752                           drms_setkey_float(sharpceaoutrec, "TOTFZ", totfz); 	
753                           drms_setkey_float(sharpceaoutrec, "TOTBSQ",totbsq); 
754                           drms_setkey_float(sharpceaoutrec, "EPSX",  epsx); 	
755                           drms_setkey_float(sharpceaoutrec, "EPSY",  epsy); 	
756                           drms_setkey_float(sharpceaoutrec, "EPSZ",  epsz); 	
757                           
758                        }
759             
760 mbobra 1.1             /******************************* END FLAGS **********************************/
761             
762 mbobra 1.10 
763 mbobra 1.1  	   drms_free_array(bitmaskArray);		
764             	   drms_free_array(maskArray);
765             	   drms_free_array(bxArray);           
766             	   drms_free_array(byArray);
767             	   drms_free_array(bzArray);
768             	   drms_free_array(bx_errArray);           
769             	   drms_free_array(by_errArray);
770             	   drms_free_array(bz_errArray);
771 mbobra 1.6  	   drms_free_array(losArray);
772 mbobra 1.10 
773 mbobra 1.11         // free the arrays that are related to the lorentz calculation
774                     free(fx); free(fy); free(fz);
775 mbobra 1.1          //used for select calculations
776             	free(bh); free(bt); free(jz); 
777             	free(bpx); free(bpy); free(bpz); 
778             	free(derx); free(dery);	 
779             	free(derx_bt); free(dery_bt); 	
780             	free(derx_bz); free(dery_bz);	 
781             	free(derx_bh); free(dery_bh); 
782             	free(bt_err); free(bh_err);  free(jz_err); 
783                     free(jz_err_squared); free(jz_rms_err);
784             	free(cvsinfoall);
785 mbobra 1.7  
786 mbobra 1.6          free(rim);
787                     free(p1p0);
788                     free(p1n0);
789                     free(p1p);
790                     free(p1n);
791                     free(p1);
792                     free(pmap);
793 mbobra 1.7          free(p1pad);
794                     free(pmapn);
795 mbobra 1.12 
796                     // free the arrays that are related to the numerical derivatives
797 mbobra 1.11         free(err_term2);
798                     free(err_term1);
799 mbobra 1.12         free(err_termB);
800                     free(err_termA);
801                     free(err_termBt);
802                     free(err_termAt);
803                     free(err_termBh);
804                     free(err_termAh);
805 mbobra 1.11 
806             	} //endfor
807             
808              	drms_close_records(sharpinrecset, DRMS_FREE_RECORD);
809             	drms_close_records(sharpceainrecset, DRMS_FREE_RECORD);
810             
811             	drms_close_records(sharpoutrecset, DRMS_INSERT_RECORD);
812             	drms_close_records(sharpceaoutrecset, DRMS_INSERT_RECORD);
813 mbobra 1.6  
814 mbobra 1.9  	printf("Success=%d\n",sameflag);
815 arta   1.3  return 0;    
816 mbobra 1.1  }	// DoIt

Karen Tian
Powered by
ViewCVS 0.9.4