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

  1 tplarson 1.1 /* this module does the same thing as the SOI module retile, though not quite an exact port
  2 tplarson 1.10  * translated by tim larson
  3 tplarson 1.1   * future upgrade: keep track of missing inputs rather than initializing entire array to 0.
  4                */
  5               
  6               #include <stdio.h>
  7               #include <math.h>
  8               #include <stdlib.h>
  9               #include <time.h>
 10               #include <sys/time.h>
 11               #include <sys/resource.h>
 12               #include "jsoc_main.h"
 13               #include "drms_dsdsapi.h"
 14               #include "errlog.h"
 15               
 16               #define ARRLENGTH(ARR)  (sizeof(ARR)/sizeof(ARR[0]))
 17               
 18               #define kNOTSPECIFIED "not specified"
 19 tplarson 1.10 #define QUAL_NODATA	 (0x80000000)
 20               #define QUAL_MIXEDCALVER (0x00000001)
 21               
 22               #define MODES(L)        ((((L)+1)*(L))/2)
 23               #define MINIMUM(X,Y)    (((X)<(Y))?(X):(Y))
 24               #define MAXIMUM(X,Y)    (((X)>(Y))?(X):(Y))
 25 tplarson 1.1  
 26               char *module_name = "jretile";
 27 tplarson 1.12 char *cvsinfo_jretile = "cvsinfo: $Header: /home/cvsuser/cvsroot/JSOC/proj/globalhs/apps/jretile.c,v 1.11 2013/04/28 08:05:21 tplarson Exp $";
 28 tplarson 1.1  
 29               ModuleArgs_t module_args[] = 
 30               {
 31                  {ARG_STRING, "in",       NULL,          "input data records"},
 32                  {ARG_STRING, "out",      NULL,          "output data series"},
 33                  {ARG_STRING, "segin",    kNOTSPECIFIED, "input data segment"},
 34                  {ARG_STRING, "segout",   kNOTSPECIFIED, "output data segment"},
 35                  {ARG_STRING, "histlink", "HISTORY",     "name of link to ancillary dataseries for processing metadata"},
 36 tplarson 1.12    {ARG_INT,    "MEMUSE",   "3",           "set to 0 to minimize use of file descriptors and memory, set to 1 to read slices and write whole files, 2 to read whole files and write slices, 3 to read whole files and write whole files."},  
 37 tplarson 1.1     {ARG_INT,    "PERM",     "1",           "set to 0 for transient records, nonzero for permanent records"},
 38                  {ARG_INT,    "VERB",     "1",           "option for level of verbosity: 0=only error and warning messages; >0=print messages outside of loop; >1=print messages inside loop; >2=debugging output", NULL},
 39 tplarson 1.10    {ARG_INT,    "CALVERKEY","2",           "short integer bit mask determining which 4-bit fields of CALVER64 are permitted to change on input.  set the bit to disallow change of the corresponding nybble."},
 40 tplarson 1.1     {ARG_INT,    "LMIN" ,    "0",           "minimum l in output", NULL},
 41                  {ARG_INT,    "LMAX" ,    "0",           "maximum l in output", NULL},   /* if 0, default is LMAX of in_sds */
 42                  {ARG_INT,    "LCHUNK",   "0",           "size of output chunk in l", NULL},/* if 0, is LMAX+1 */ 
 43                  {ARG_TIME,   "TSTART",   NULL,          "start time of first output record"},
 44                  {ARG_STRING, "TTOTAL",   NULL,          "total length of time in output"},
 45                  {ARG_STRING, "TCHUNK",   kNOTSPECIFIED, "length of output timeseries"},
 46                  {ARG_END}
 47               };
 48               
 49               #include "saveparm.c"
 50               #include "timing.c"
 51 tplarson 1.6  #include "set_history.c"
 52 tplarson 1.10 #include "calversfunctions.c"
 53 tplarson 1.1  
 54 tplarson 1.8  #include "jretile_manytofew.c"
 55               #include "jretile_fewtomany.c"
 56 tplarson 1.12 #include "jretile_maxmem.c"
 57 tplarson 1.1  
 58               int DoIt(void)
 59               {
 60               
 61 tplarson 1.8    int status=0;
 62                 char *inrecquery = NULL, *outseries = NULL;
 63                 int lmin,lmax,lchunksize,lchunkfirst,lchunklast,nlchunks,ntimechunks,nrecsin,nrecsout;
 64                 double nseconds,chunksecs;
 65                 char *ttotal, *tchunk;
 66                 DRMS_Record_t *tempoutrec = NULL;
 67 tplarson 1.10 //  DRMS_RecordSet_t *inrecset = NULL;
 68 tplarson 1.12   int verbflag, memflag;
 69 tplarson 1.1  
 70 tplarson 1.8    inrecquery = (char *)cmdparams_get_str(&cmdparams, "in", &status);
 71                 outseries = (char *)cmdparams_get_str(&cmdparams, "out", &status);
 72                 lmin=cmdparams_get_int(&cmdparams, "LMIN", &status);
 73                 lmax=cmdparams_get_int(&cmdparams, "LMAX", &status);
 74                 lchunksize=cmdparams_get_int(&cmdparams, "LCHUNK", &status);
 75                 if (lchunksize == 0)
 76                   lchunksize=lmax+1;
 77                 verbflag = cmdparams_get_int(&cmdparams, "VERB", &status);
 78 tplarson 1.12   memflag = cmdparams_get_int(&cmdparams, "MEMUSE", &status);
 79 tplarson 1.1  
 80 tplarson 1.8    ttotal=(char *)cmdparams_get_str(&cmdparams, "TTOTAL", &status);
 81 arta     1.5    status=drms_names_parseduration(&ttotal, &nseconds, 1);
 82 tplarson 1.8    tchunk=(char *)cmdparams_get_str(&cmdparams, "TCHUNK", &status);
 83 tplarson 1.1    if (strcmp(kNOTSPECIFIED, tchunk))
 84                 {
 85 arta     1.5      status=drms_names_parseduration(&tchunk, &chunksecs, 1);
 86 tplarson 1.1    }
 87                 else
 88                   chunksecs=0;
 89               
 90 tplarson 1.8    tempoutrec = drms_create_record(drms_env, outseries, DRMS_TRANSIENT, &status);
 91 tplarson 1.1    if (status != DRMS_SUCCESS) 
 92                 {
 93                  fprintf(stderr,"ERROR: couldn't open a record in output dataseries %s, status = %d\n", outseries, status);
 94                  return 1;
 95                 }
 96               
 97 tplarson 1.8    char *outchecklist[] = {"T_START", "QUALITY", "LMIN", "LMAX", "NDT"};
 98                 DRMS_Keyword_t *outkeytest;
 99 tplarson 1.1    int itest;
100                 for (itest=0; itest < ARRLENGTH(outchecklist); itest++)
101                 {
102 tplarson 1.8      outkeytest = hcon_lookup_lower(&tempoutrec->keywords, outchecklist[itest]);
103 tplarson 1.6      if (outkeytest == NULL || outkeytest->info->islink || outkeytest->info->recscope == 1)
104 tplarson 1.1      {
105                     fprintf(stderr, "ERROR: output keyword %s is either missing, constant, or a link\n", outchecklist[itest]);
106 tplarson 1.3        drms_close_record(tempoutrec, DRMS_FREE_RECORD);
107 tplarson 1.6        return 1;
108 tplarson 1.1      }
109                 }
110               
111 tplarson 1.3    if (chunksecs == 0.0)
112 tplarson 1.8      chunksecs = drms_getkey_float(tempoutrec, "T_START_step", &status);
113 tplarson 1.3    drms_close_record(tempoutrec, DRMS_FREE_RECORD);
114               
115 tplarson 1.10 /*
116 tplarson 1.8    inrecset = drms_open_recordset(drms_env, inrecquery, &status);
117 tplarson 1.6    if (status != DRMS_SUCCESS || inrecset == NULL)
118 tplarson 1.1    {
119                   fprintf(stderr, "ERROR: problem opening input recordset: status = %d\n", status);
120 tplarson 1.6      return 1;
121 tplarson 1.1    }
122 tplarson 1.8    nrecsin = inrecset->n;
123                 drms_close_records(inrecset, DRMS_FREE_RECORD);
124 tplarson 1.10 */
125                 nrecsin = drms_count_records(drms_env, inrecquery, &status);
126                 if (status != DRMS_SUCCESS)
127                 {
128                   fprintf(stderr, "ERROR: problem counting input records: status = %d, nrecs = %d\n", status, nrecsin);
129                   return 1;
130                 }
131 tplarson 1.7  
132 tplarson 1.8    ntimechunks=nseconds/chunksecs;
133 tplarson 1.7    lchunkfirst = lmin/lchunksize;
134                 lchunklast = lmax/lchunksize;
135 tplarson 1.8    nlchunks = (lchunklast - lchunkfirst) + 1;
136                 nrecsout = nlchunks*ntimechunks;
137 tplarson 1.7  
138 tplarson 1.8    if (verbflag)
139                   printf("nrecsin = %d, nrecsout = %d, ", nrecsin, nrecsout);
140 tplarson 1.7  
141 tplarson 1.12   if (memflag==0)
142                 {
143                   if (nrecsin > nrecsout)
144                   {
145                     if (verbflag)
146                       printf("using jretile_manytofew()\n");
147                     status=jretile_manytofew();
148                   }
149                   else
150                   {
151                     if (verbflag)
152                       printf("using jretile_fewtomany()\n");
153                     status=jretile_fewtomany();
154                   }
155                 }
156                 else if (memflag==1)
157 tplarson 1.1    {
158 tplarson 1.8      if (verbflag)
159 tplarson 1.12       printf("forced use of jretile_fewtomany()\n");
160                   status=jretile_fewtomany();
161                 }
162                 else if (memflag==2)
163                 {
164                   if (verbflag)
165                     printf("forced use of jretile_manytofew()\n");
166 tplarson 1.8      status=jretile_manytofew();
167 tplarson 1.7    }
168 tplarson 1.12   else if (memflag==3)
169 tplarson 1.1    {
170 tplarson 1.8      if (verbflag)
171 tplarson 1.12       printf("using jretile_maxmem()\n");
172                   status=jretile_maxmem();
173 tplarson 1.1    }
174               
175 tplarson 1.8    return status;
176 tplarson 1.1  
177               }

Karen Tian
Powered by
ViewCVS 0.9.4