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

Karen Tian
Powered by
ViewCVS 0.9.4