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

Diff for /JSOC/proj/sharp/apps/update_sharp_keys.c between version 1.16 and 1.19

version 1.16, 2020/06/30 22:38:53 version 1.19, 2021/05/26 19:25:17
Line 63 
Line 63 
 #define ARRLENGTH(ARR) (sizeof(ARR) / sizeof(ARR[0])) #define ARRLENGTH(ARR) (sizeof(ARR) / sizeof(ARR[0]))
 #define DIE(msg) {fflush(stdout); fprintf(stderr,"%s, status=%d\n", msg, status); return(status);} #define DIE(msg) {fflush(stdout); fprintf(stderr,"%s, status=%d\n", msg, status); return(status);}
 #define SHOW(msg) {printf("%s", msg); fflush(stdout);} #define SHOW(msg) {printf("%s", msg); fflush(stdout);}
   #define DEBUG(true)
  
 char *module_name = "update_sharp_keys";  /* Module name */ char *module_name = "update_sharp_keys";  /* Module name */
 char *version_id  = "2020 Jun 29";        /* Version number */  char *version_id  = "2021 May 25";        /* Version number */
  
 ModuleArgs_t module_args[] = ModuleArgs_t module_args[] =
 { {
Line 90  int DoIt(void)
Line 91  int DoIt(void)
  
     /* Keywords */     /* Keywords */
         float mean_vf;         float mean_vf;
       float mean_vf_los;
         float absFlux;         float absFlux;
       float absFlux_los;
     float count_mask;     float count_mask;
       float count_mask_los;
         float mean_hf;         float mean_hf;
         float mean_gamma;         float mean_gamma;
         float mean_derivative_btotal;         float mean_derivative_btotal;
Line 189  int DoIt(void)
Line 193  int DoIt(void)
                 DIE("Problem creating sharp cea records.");                 DIE("Problem creating sharp cea records.");
         }         }
  
   
         char *keylist = (char *) params_get_str(&cmdparams, "keylist");         char *keylist = (char *) params_get_str(&cmdparams, "keylist");
         char *debug   = (char *) params_get_str(&cmdparams, "debug");         char *debug   = (char *) params_get_str(&cmdparams, "debug");
  
     // Flags to indicate which keyword will be recalculated     // Flags to indicate which keyword will be recalculated
     int meanvflosflag = (strstr(keylist,"USFLUXLOS")  != NULL);      int meanvflosflag = (strstr(keylist,"USFLUXL")  != NULL);
     int meanglosflag  = (strstr(keylist,"MEANGBZLOS") != NULL);      int meanglosflag  = (strstr(keylist,"MEANGBL") != NULL);
         int meanvfflag    = (strstr(keylist,"USFLUX")  != NULL);         int meanvfflag    = (strstr(keylist,"USFLUX")  != NULL);
         int totpotflag    = (strstr(keylist,"TOTPOT")  != NULL);         int totpotflag    = (strstr(keylist,"TOTPOT")  != NULL);
     int meangamflag   = (strstr(keylist,"MEANGAM") != NULL);     int meangamflag   = (strstr(keylist,"MEANGAM") != NULL);
Line 222  int DoIt(void)
Line 225  int DoIt(void)
     int epszflag      = (strstr(keylist,"EPSZ")    != NULL);     int epszflag      = (strstr(keylist,"EPSZ")    != NULL);
     int debugflag     = (strstr(debug,"debug")     != NULL);     int debugflag     = (strstr(debug,"debug")     != NULL);
  
         DRMS_Record_t *sharpinrec = sharpinrecset->records[0];          for (irec=0;irec<nrecs;irec++)
         DRMS_Record_t *sharpceainrec = sharpceainrecset->records[0];          {
           DRMS_Record_t *sharpinrec = sharpinrecset->records[irec];
               DRMS_Record_t *sharpceainrec = sharpceainrecset->records[irec];
         DRMS_Segment_t *inseg = drms_segment_lookup(sharpceainrec, "Br");         DRMS_Segment_t *inseg = drms_segment_lookup(sharpceainrec, "Br");
         int nx = inseg->axis[0];         int nx = inseg->axis[0];
         int ny = inseg->axis[1];         int ny = inseg->axis[1];
Line 260  int DoIt(void)
Line 265  int DoIt(void)
     float *derx_los  = (float *) (malloc(nxny * sizeof(float)));     float *derx_los  = (float *) (malloc(nxny * sizeof(float)));
         float *dery_los  = (float *) (malloc(nxny * sizeof(float)));         float *dery_los  = (float *) (malloc(nxny * sizeof(float)));
  
         for (irec=0;irec<nrecs;irec++)  
         {  
   
         //DRMS_Record_t *sharpinrec = sharpinrecset->records[irec];  
             DRMS_Record_t *sharpceainrec = sharpceainrecset->records[irec];  
             DRMS_Segment_t *inseg = drms_segment_lookup(sharpceainrec, "Br");  
   
         // ephemeris variables         // ephemeris variables
             float  cdelt1_orig, cdelt1, dsun_obs, imcrpix1, imcrpix2, crpix1, crpix2;             float  cdelt1_orig, cdelt1, dsun_obs, imcrpix1, imcrpix2, crpix1, crpix2;
             double rsun_ref, rsun_obs;             double rsun_ref, rsun_obs;
Line 302  int DoIt(void)
Line 300  int DoIt(void)
         dsun_obs = drms_getkey_float(testrec, "DSUN_OBS",   &status);         dsun_obs = drms_getkey_float(testrec, "DSUN_OBS",   &status);
         rsun_ref = drms_getkey_double(testrec, "RSUN_REF", &status);         rsun_ref = drms_getkey_double(testrec, "RSUN_REF", &status);
         cdelt1_orig = drms_getkey_float(testrec, "CDELT1",   &status);         cdelt1_orig = drms_getkey_float(testrec, "CDELT1",   &status);
         cdelt1      = (atan((rsun_ref*cdelt1_orig*RADSINDEG)/(dsun_obs)))*(1/RADSINDEG)*(3600.);  
         int scale = round(2.0/cdelt1);         int scale = round(2.0/cdelt1);
         int nx1 = nx/scale;         int nx1 = nx/scale;
         int ny1 = ny/scale;         int ny1 = ny/scale;
Line 314  int DoIt(void)
Line 311  int DoIt(void)
                     DIE("X-dimension of output array in fsample() is too large.");                     DIE("X-dimension of output array in fsample() is too large.");
             if (ny1 > floor((ny-1)/scale + 1) )             if (ny1 > floor((ny-1)/scale + 1) )
                 DIE("Y-dimension of output array in fsample() is too large.");                 DIE("Y-dimension of output array in fsample() is too large.");
   
         // malloc some arrays for the R parameter calculation         // malloc some arrays for the R parameter calculation
         float *rim     = (float *)malloc(nx1*ny1*sizeof(float));         float *rim     = (float *)malloc(nx1*ny1*sizeof(float));
         float *p1p0    = (float *)malloc(nx1*ny1*sizeof(float));         float *p1p0    = (float *)malloc(nx1*ny1*sizeof(float));
Line 337  int DoIt(void)
Line 333  int DoIt(void)
         imcrpix2      = drms_getkey_float(sharpinrec, "IMCRPIX2", &status);         imcrpix2      = drms_getkey_float(sharpinrec, "IMCRPIX2", &status);
         crpix1        = drms_getkey_float(sharpinrec, "CRPIX1", &status);         crpix1        = drms_getkey_float(sharpinrec, "CRPIX1", &status);
         crpix2        = drms_getkey_float(sharpinrec, "CRPIX2", &status);         crpix2        = drms_getkey_float(sharpinrec, "CRPIX2", &status);
           cdelt1      = (atan((rsun_ref*cdelt1_orig*RADSINDEG)/(dsun_obs)))*(1/RADSINDEG)*(3600.);
  
         sharpoutrec = sharpoutrecset->records[irec];         sharpoutrec = sharpoutrecset->records[irec];
         sharpceaoutrec = sharpceaoutrecset->records[irec];         sharpceaoutrec = sharpceaoutrecset->records[irec];
Line 363  int DoIt(void)
Line 360  int DoIt(void)
         drms_setkey_time(sharpoutrec,"DATE",tnow);         drms_setkey_time(sharpoutrec,"DATE",tnow);
         drms_setkey_time(sharpceaoutrec,"DATE",tnow);         drms_setkey_time(sharpceaoutrec,"DATE",tnow);
  
             // Get bx, by, bz, mask              // Get all the segments if computing vector magnetic field keywords
             // Use HARP (Turmon) bitmap as a threshold on spaceweather quantities  
             DRMS_Segment_t *bitmaskSeg = drms_segment_lookup(sharpceainrec, "bitmap");             DRMS_Segment_t *bitmaskSeg = drms_segment_lookup(sharpceainrec, "bitmap");
             DRMS_Array_t *bitmaskArray = drms_segment_read(bitmaskSeg, DRMS_TYPE_INT, &status);             DRMS_Array_t *bitmaskArray = drms_segment_read(bitmaskSeg, DRMS_TYPE_INT, &status);
             int *bitmask = (int *) bitmaskArray->data;   // get the previously made mask array             int *bitmask = (int *) bitmaskArray->data;   // get the previously made mask array
  
             //Use conf_disambig map as a threshold on spaceweather quantities  
             DRMS_Segment_t *maskSeg = drms_segment_lookup(sharpceainrec, "conf_disambig");             DRMS_Segment_t *maskSeg = drms_segment_lookup(sharpceainrec, "conf_disambig");
             DRMS_Array_t *maskArray = drms_segment_read(maskSeg, DRMS_TYPE_INT, &status);             DRMS_Array_t *maskArray = drms_segment_read(maskSeg, DRMS_TYPE_INT, &status);
            if (status != DRMS_SUCCESS)            if (status != DRMS_SUCCESS)
               DIE("No CONF_DISAMBIG segment.");               DIE("No CONF_DISAMBIG segment.");
                int *mask = (int *) maskArray->data;             // get the previously made mask array                int *mask = (int *) maskArray->data;             // get the previously made mask array
  
             //Use magnetogram map to compute R  
             DRMS_Segment_t *losSeg = drms_segment_lookup(sharpceainrec, "magnetogram");             DRMS_Segment_t *losSeg = drms_segment_lookup(sharpceainrec, "magnetogram");
             DRMS_Array_t *losArray = drms_segment_read(losSeg, DRMS_TYPE_FLOAT, &status);             DRMS_Array_t *losArray = drms_segment_read(losSeg, DRMS_TYPE_FLOAT, &status);
               if (status != DRMS_SUCCESS)
               DIE("No magnetogram segment.");
             float *los = (float *) losArray->data;              // los             float *los = (float *) losArray->data;              // los
               //printf("Line 387");
  
             DRMS_Segment_t *bxSeg = drms_segment_lookup(sharpceainrec, "Bp");             DRMS_Segment_t *bxSeg = drms_segment_lookup(sharpceainrec, "Bp");
             DRMS_Array_t *bxArray = drms_segment_read(bxSeg, DRMS_TYPE_FLOAT, &status);             DRMS_Array_t *bxArray = drms_segment_read(bxSeg, DRMS_TYPE_FLOAT, &status);
               if (status != DRMS_SUCCESS)
               DIE("No Bp segment.");
             float *bx = (float *) bxArray->data;                // bx             float *bx = (float *) bxArray->data;                // bx
               //printf("Line 393");
  
             DRMS_Segment_t *bySeg = drms_segment_lookup(sharpceainrec, "Bt");             DRMS_Segment_t *bySeg = drms_segment_lookup(sharpceainrec, "Bt");
             DRMS_Array_t *byArray = drms_segment_read(bySeg, DRMS_TYPE_FLOAT, &status);             DRMS_Array_t *byArray = drms_segment_read(bySeg, DRMS_TYPE_FLOAT, &status);
               if (status != DRMS_SUCCESS)
               DIE("No Bt segment.");
             float *by = (float *) byArray->data;                // by             float *by = (float *) byArray->data;                // by
             for (int i = 0; i < nxny; i++) by[i] *= -1;             for (int i = 0; i < nxny; i++) by[i] *= -1;
               //printf("Line 399");
  
             DRMS_Segment_t *bzSeg = drms_segment_lookup(sharpceainrec, "Br");             DRMS_Segment_t *bzSeg = drms_segment_lookup(sharpceainrec, "Br");
               //printf("Line 408\n");
               if (bzSeg == NULL)
               DIE("somekind of pointer problem.");
   
             DRMS_Array_t *bzArray = drms_segment_read(bzSeg, DRMS_TYPE_FLOAT, &status);             DRMS_Array_t *bzArray = drms_segment_read(bzSeg, DRMS_TYPE_FLOAT, &status);
               //printf("status=%d\n",status);
               if (status != DRMS_SUCCESS)
               DIE("No Br segment.");
             float *bz = (float *) bzArray->data;                // bz             float *bz = (float *) bzArray->data;                // bz
               //printf("Line 414");
  
             DRMS_Segment_t *bz_errSeg = drms_segment_lookup(sharpceainrec, "Br_err");             DRMS_Segment_t *bz_errSeg = drms_segment_lookup(sharpceainrec, "Br_err");
             DRMS_Array_t *bz_errArray = drms_segment_read(bz_errSeg, DRMS_TYPE_FLOAT, &status);             DRMS_Array_t *bz_errArray = drms_segment_read(bz_errSeg, DRMS_TYPE_FLOAT, &status);
               if (status != DRMS_SUCCESS)
               DIE("No Br_err segment.");
             float *bz_err = (float *) bz_errArray->data;                // bz_err             float *bz_err = (float *) bz_errArray->data;                // bz_err
               //printf("Line 408");
  
             DRMS_Segment_t *by_errSeg = drms_segment_lookup(sharpceainrec, "Bt_err");             DRMS_Segment_t *by_errSeg = drms_segment_lookup(sharpceainrec, "Bt_err");
             DRMS_Array_t *by_errArray = drms_segment_read(by_errSeg, DRMS_TYPE_FLOAT, &status);             DRMS_Array_t *by_errArray = drms_segment_read(by_errSeg, DRMS_TYPE_FLOAT, &status);
               if (status != DRMS_SUCCESS)
               DIE("No Bt_err segment.");
             float *by_err = (float *) by_errArray->data;                // by_err             float *by_err = (float *) by_errArray->data;                // by_err
               //printf("Line 412");
  
             DRMS_Segment_t *bx_errSeg = drms_segment_lookup(sharpceainrec, "Bp_err");             DRMS_Segment_t *bx_errSeg = drms_segment_lookup(sharpceainrec, "Bp_err");
             DRMS_Array_t *bx_errArray = drms_segment_read(bx_errSeg, DRMS_TYPE_FLOAT, &status);             DRMS_Array_t *bx_errArray = drms_segment_read(bx_errSeg, DRMS_TYPE_FLOAT, &status);
               if (status != DRMS_SUCCESS)
               DIE("No Bp_err segment.");
             float *bx_err = (float *) bx_errArray->data;                // bx_err             float *bx_err = (float *) bx_errArray->data;                // bx_err
  
         /***** USFLUX, Example Function 1 *************************************/         /***** USFLUX, Example Function 1 *************************************/
Line 570  int DoIt(void)
Line 590  int DoIt(void)
                                &mean_jz_err, &us_i, &us_i_err, mask, bitmask, cdelt1,                                &mean_jz_err, &us_i, &us_i_err, mask, bitmask, cdelt1,
                                rsun_ref, rsun_obs, derx, dery))                                rsun_ref, rsun_obs, derx, dery))
  
   
             {             {
                 mean_jz                = DRMS_MISSING_FLOAT;                 mean_jz                = DRMS_MISSING_FLOAT;
                     us_i                   = DRMS_MISSING_FLOAT;                     us_i                   = DRMS_MISSING_FLOAT;
Line 743  int DoIt(void)
Line 762  int DoIt(void)
         /***** USFLUX, Example Function 17 *************************************/         /***** USFLUX, Example Function 17 *************************************/
             if (meanvflosflag)             if (meanvflosflag)
             {             {
             // Compute unsigned flux                 //printf("772");
             if (computeAbsFlux_los(los, dims, &absFlux, &mean_vf,                 if (computeAbsFlux_los(los, dims, &absFlux_los, &mean_vf_los,
                                &count_mask, bitmask, cdelt1, rsun_ref, rsun_obs))                             &count_mask_los, bitmask, cdelt1, rsun_ref, rsun_obs))
             {                 {
                 mean_vf = DRMS_MISSING_FLOAT;                  absFlux_los = DRMS_MISSING_FLOAT;               // If fail, fill in NaN
                 count_mask = DRMS_MISSING_INT;                  mean_vf_los = DRMS_MISSING_FLOAT;
             }                  count_mask_los = DRMS_MISSING_INT;
                  }
             drms_setkey_float(sharpoutrec, "USFLUX",  mean_vf);              //printf("line757\n");
             drms_setkey_float(sharpoutrec, "CMASK",   count_mask);              //printf("mean_vf_los=%f\n",mean_vf_los);
               //printf("cdelt1=%f\n",cdelt1);
               //printf("rsun_ref=%f\n",rsun_ref);
               //printf("rsun_obs=%f\n",rsun_obs);
               //printf("Key #%d done.\n", irec);
               drms_setkey_float(sharpoutrec, "USFLUXL",  mean_vf_los);
               drms_setkey_float(sharpoutrec, "CMASKL",   count_mask_los);
  
             drms_setkey_float(sharpceaoutrec, "USFLUX",  mean_vf);              drms_setkey_float(sharpceaoutrec, "USFLUXL",  mean_vf_los);
             drms_setkey_float(sharpceaoutrec, "CMASK",   count_mask);              drms_setkey_float(sharpceaoutrec, "CMASKL",   count_mask_los);
         }         }
  
         /***** MEANGBZ, Example Function 18 ************************************/         /***** MEANGBZ, Example Function 18 ************************************/
         if (meanglosflag)         if (meanglosflag)
         {         {
           //printf("line 794\n");
             // Compute Bz derivative             // Compute Bz derivative
             if (computeLOSderivative(los, dims, &mean_derivative_los,              if (computeLOSderivative(los, dims, &mean_derivative_los, bitmask, derx_los, dery_los))
                                      bitmask, derx_los, dery_los))  
             {             {
                   //printf("line 799\n");
                 mean_derivative_los     = DRMS_MISSING_FLOAT;                 mean_derivative_los     = DRMS_MISSING_FLOAT;
             }             }
  
             // Set sharp keys             // Set sharp keys
             drms_setkey_float(sharpoutrec, "MEANGBZ",  mean_derivative_los);              //printf("mean_derivative_los=%f\n",mean_derivative_los);
               drms_setkey_float(sharpoutrec, "MEANGBL",  mean_derivative_los);
  
             // Set sharp cea keys             // Set sharp cea keys
             drms_setkey_float(sharpceaoutrec, "MEANGBZ", mean_derivative_los);              drms_setkey_float(sharpceaoutrec, "MEANGBL", mean_derivative_los);
         }         }
  
         /******************************* END FLAGS **********************************/         /******************************* END FLAGS **********************************/
           //printf("line809\n");
         drms_free_array(bitmaskArray);         drms_free_array(bitmaskArray);
         drms_free_array(maskArray);         drms_free_array(maskArray);
         drms_free_array(bxArray);         drms_free_array(bxArray);
Line 787  int DoIt(void)
Line 814  int DoIt(void)
         drms_free_array(bz_errArray);         drms_free_array(bz_errArray);
         drms_free_array(losArray);         drms_free_array(losArray);
         free(cvsinfoall);         free(cvsinfoall);
   
     free(rim);     free(rim);
     free(p1p0);     free(p1p0);
     free(p1n0);     free(p1n0);
Line 797  int DoIt(void)
Line 823  int DoIt(void)
     free(pmap);     free(pmap);
     free(p1pad);     free(p1pad);
     free(pmapn);     free(pmapn);
   
         } //endfor  
   
     // free all the arrays  
     free(fx); free(fy); free(fz);     free(fx); free(fy); free(fz);
         free(bh); free(bt); free(jz);         free(bh); free(bt); free(jz);
         free(bpx); free(bpy); free(bpz);         free(bpx); free(bpy); free(bpz);
Line 816  int DoIt(void)
Line 838  int DoIt(void)
     free(err_term2);     free(err_term2);
     free(err_term1);     free(err_term1);
  
           } //endfor
   
     // Close all the records     // Close all the records
         drms_close_records(sharpinrecset, DRMS_FREE_RECORD);         drms_close_records(sharpinrecset, DRMS_FREE_RECORD);
         drms_close_records(sharpceainrecset, DRMS_FREE_RECORD);         drms_close_records(sharpceainrecset, DRMS_FREE_RECORD);


Legend:
Removed from v.1.16  
changed lines
  Added in v.1.19

Karen Tian
Powered by
ViewCVS 0.9.4