![]() ![]() |
![]() |
File: [Development] / JSOC / proj / lev1_hmi / apps / Attic / helio2mlat_j.c
(download)
Revision: 1.3, Tue Apr 21 03:12:53 2009 UTC (14 years, 1 month ago) by arta Branch: MAIN CVS Tags: Ver_9-9, Ver_7-1, Ver_7-0, Ver_6-4, Ver_6-3, Ver_6-2, Ver_6-1, Ver_6-0, Ver_5-9, Ver_5-8, Ver_5-7, Ver_5-6, Ver_5-5, Ver_5-3, Ver_5-2, Ver_5-14, Ver_5-13, Ver_5-12, Ver_5-11, Ver_5-10, Ver_5-1 Changes since 1.2: +2 -1 lines Fixes for remotesums not properly doing the asynchronous download. lib DRMS was blocking on remotesums_master.pl, but it should not have blocked. Also, show_info wasn't properly handling the 'trylater' status code generated by remotesums. Needed to separate the record-chunk status codes from the regular drms status codes because code in show_info needed to look at both (and we don't combine status codes in drms_statuscodes.h). Fix drms_server deadlock - was due to server-side accept call blocking, even when there isn't any clients |
#include <stdio.h> #include <stdlib.h> #include <time.h> #include <math.h> #include <sys/time.h> #include "jsoc_main.h" #include "astro.h" #include "drms_dsdsapi.h" #include "errlog.h" #define PI (M_PI) #define kRecSetIn "in" #define kSeriesOut "out" #define kParamSegIn "segin" #define kParamSegOut "segout" #define kParamLMAX "LMAX" #define kParamSUBMEAN "S" #define kParamNORMALIZE "N" #define kParamCENTLONG "C" #define kParamZEROMISS "Z" #define kParamLGAPOD "L" #define kParamLGAPMIN "LGAPMIN" #define kParamLGAPWIDT "LGAPWIDT" #define kDefSegIn "data" #define kDefSegOut "data" #define kI_DREC "I_DREC" #define kT_REC "T_REC" #define kQUALITY "QUALITY" #define kQUAL_ALL_DATA_MISSING (0) #define kQUAL_DATA_AVAILABLE (1) typedef enum { H2MStatus_Success, H2MStatus_MissingParameter, } H2MStatus_t; char *module_name = "helio2mlat"; ModuleArgs_t module_args[] = { /* Should be ARG_DATASET, but not implemented */ {ARG_STRING, kRecSetIn, NULL, "Input data records", NULL}, /* Should be ARG_DATASERIES, but not implemented */ {ARG_STRING, kSeriesOut, NULL, "Output data series", NULL}, {ARG_STRING, kParamSegIn, kDefSegIn, "Input data segment", NULL}, {ARG_STRING, kParamSegOut, kDefSegOut, "Output data segment", NULL}, {ARG_INT, kParamLMAX, "249", NULL, NULL}, /* These flags used to be <name>=<value> parameters in SOI. * So, rather than put SUBMEAN=1 on the cmd-line, you'd * put "-S" on the cmd-line. */ {ARG_FLAG, kParamSUBMEAN, "0", NULL, NULL}, {ARG_FLAG, kParamNORMALIZE, "0", NULL, NULL}, {ARG_FLAG, kParamCENTLONG, "1", NULL, NULL}, {ARG_FLAG, kParamZEROMISS, "0", NULL, NULL}, {ARG_FLAG, kParamLGAPOD, "0", NULL, NULL}, /* Apodize in longitude? */ /* Start of apodize. Degrees. */ {ARG_DOUBLE, kParamLGAPMIN, "60.0", NULL, "[0.0,90.0]"}, /* range unimplemented */ /* Width of apodize. Degrees. */ {ARG_DOUBLE, kParamLGAPWIDT, "10.0", NULL, "[0.0,90.0]"}, /* range unimplemented */ {ARG_END, NULL, NULL, NULL, NULL} }; /* Segment will be empty, but there will be a record! */ static void CreateBlankRecord(DRMS_Record_t *inrec, DRMS_Record_t *outrec) { /* create 'blank' data */ drms_copykey(outrec, inrec, kI_DREC); drms_copykey(outrec, inrec, kT_REC); if (drms_copykey(outrec, inrec, kQUALITY)) { drms_setkey_int(outrec, kQUALITY, kQUAL_ALL_DATA_MISSING); } } int DoIt(void) { int status = DRMS_SUCCESS; ErrNo_t error; WarnNo_t warn; char *inRecQuery = NULL; char *outseries = NULL; char *inseries = NULL; DRMS_RecordSet_t *inrecs = NULL; double mean, norm=1.0, normx; double tmp; int subtract_mean, normalize, cent_long, zero_miss, lgapod; double lgapmin, lgapwidt, lgapmax, lon; int col; int requested_lmax; int lmax, len, lfft, mapped_lmax, map_cols, map_rows; int map_cols2; int nfft, nmean, nok, nout, row, sn, verbose; int forward = 1; /* forward transform option */ int length[2]; int qual; clock_t t0; LogPrint_t printerr = errlog_errwrite; LogPrint_t printhst = errlog_hstwrite; requested_lmax = params_get_int(&cmdparams, kParamLMAX); subtract_mean = params_isflagset(&cmdparams, kParamSUBMEAN); normalize = params_isflagset(&cmdparams, kParamNORMALIZE); /* CENTLONG=1 centers the longitude Fourier transform on the center of the remapped image */ cent_long = params_isflagset(&cmdparams, kParamCENTLONG); /* ZEROMISS=1 sets missing data to 0, ZEROMISS=0 fills the output row with missing */ zero_miss = params_isflagset(&cmdparams, kParamZEROMISS); lgapod = params_isflagset(&cmdparams, kParamZEROMISS); lgapmin = params_get_double(&cmdparams, kParamLGAPMIN); lgapwidt = params_get_double(&cmdparams, kParamLGAPWIDT); lgapmax = lgapmin+lgapwidt; t0 = clock(); (*printhst)("Setup %f\n", t0); inRecQuery = cmdparams_get_str(&cmdparams, kRecSetIn, NULL); outseries = cmdparams_get_str(&cmdparams, kSeriesOut, NULL); inseries = drms_recordset_acquireseriesname(inRecQuery); inrecs = drms_open_recordset(drms_env, inRecQuery, &status); if (inrecs) { int nRecs = inrecs->n; int iset; int nsets = drms_recordset_getnumss(inrecs); DRMS_Record_t *inrec = NULL; DRMS_Record_t *orec = NULL; DRMS_RecChunking_t cstat = kRecChunking_None; if (drms_env->verbose) { (*printhst)("There are %d datasets.\n", nsets); } for (iset = 0; iset < nsets; iset++) { while ((inrec = drms_recordset_fetchnextinset(drms_env, inrecs, &iset, &status, &cstat)) != NULL) { /* create the corresponding output record (which may be 'blank) */ orec = drms_create_record(drms_env, outseries, DRMS_PERMANENT, &status); /* There was some test for VDS_FITS_MERGE - not sure how to check for this in DRMS */ qual = drms_getkey_int(inrec, kQUALITY, &status); if (status || qual != kQUAL_DATA_AVAILABLE) { errlog_staterr(printerr, "bad quality", !status ? qual : status, inseries, inrec->recnum); CreateBlankRecord(inrec, orec); continue; } // mapped_lmax = sds_getkey_int(in_sds, "MAPMMAX"); } } } char *segnamein = cmdparams_get_str(&cmdparams, kParamSegIn, NULL); char *segnameout = cmdparams_get_str(&cmdparams, kParamSegOut, NULL); if (inseries) { free(inseries); } return error; } /* DoIt */ //errlog_paramerr(printerr, pname, err, series, recnum);
Karen Tian |
Powered by ViewCVS 0.9.4 |