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

Diff for /JSOC/proj/globalhs/apps/jretile_manytofew.c between version 1.2 and 1.9

version 1.2, 2012/08/21 22:14:34 version 1.9, 2017/03/31 19:43:36
Line 1 
Line 1 
 #define MODES(L)        ((((L)+1)*(L))/2)  char *cvsinfo_jretile_manytofew = "cvsinfo: $Header$";
 #define MINIMUM(X,Y)    (((X)<(Y))?(X):(Y))  
 #define MAXIMUM(X,Y)    (((X)>(Y))?(X):(Y))  
  
 int jretile_manytofew(void) int jretile_manytofew(void)
 { {
Line 31  int jretile_manytofew(void)
Line 29  int jretile_manytofew(void)
   int mapmmax=-1;   int mapmmax=-1;
   int sinbdivs=-1;   int sinbdivs=-1;
   double cadence=0;   double cadence=0;
     int i;
  
   TIME tnow, UNIX_epoch = -220924792.000; /* 1970.01.01_00:00:00_UTC */   TIME tnow, UNIX_epoch = -220924792.000; /* 1970.01.01_00:00:00_UTC */
   char tstartstr[100], tscrstr[100];   char tstartstr[100], tscrstr[100];
Line 68  int jretile_manytofew(void)
Line 67  int jretile_manytofew(void)
     lifetime = DRMS_PERMANENT;     lifetime = DRMS_PERMANENT;
   else   else
     lifetime = DRMS_TRANSIENT;     lifetime = DRMS_TRANSIENT;
     unsigned short calverkey = (unsigned short)cmdparams_save_int(&cmdparams, "CALVERKEY", &newstat);
  
   char *histlinkname = (char *)cmdparams_save_str(&cmdparams, "histlink", &newstat);   char *histlinkname = (char *)cmdparams_save_str(&cmdparams, "histlink", &newstat);
  
Line 75  int jretile_manytofew(void)
Line 75  int jretile_manytofew(void)
   sprint_time(tstartstr, tstart, "TAI", 0);   sprint_time(tstartstr, tstart, "TAI", 0);
   ttotal=(char *)cmdparams_save_str(&cmdparams, "TTOTAL", &newstat);   ttotal=(char *)cmdparams_save_str(&cmdparams, "TTOTAL", &newstat);
   status=drms_names_parseduration(&ttotal, &nseconds, 1);   status=drms_names_parseduration(&ttotal, &nseconds, 1);
   if (status)    if (status != DRMS_SUCCESS)
   {   {
 //    newstat = newstat | CPSAVE_UNKNOWN_ERROR; //    newstat = newstat | CPSAVE_UNKNOWN_ERROR;
     fprintf(stderr, "ERROR: problem parsing TTOTAL, = %s\n", ttotal);     fprintf(stderr, "ERROR: problem parsing TTOTAL, = %s\n", ttotal);
Line 85  int jretile_manytofew(void)
Line 85  int jretile_manytofew(void)
   if (strcmp(kNOTSPECIFIED, tchunk))   if (strcmp(kNOTSPECIFIED, tchunk))
   {   {
     status=drms_names_parseduration(&tchunk, &chunksecs, 1);     status=drms_names_parseduration(&tchunk, &chunksecs, 1);
     if (status)      if (status != DRMS_SUCCESS)
       newstat = newstat | CPSAVE_UNKNOWN_ERROR;       newstat = newstat | CPSAVE_UNKNOWN_ERROR;
   }   }
   else   else
Line 121  int jretile_manytofew(void)
Line 121  int jretile_manytofew(void)
   }   }
  
 // set up ancillary dataseries for processing metadata // set up ancillary dataseries for processing metadata
   char *cvsinfo = strdup("$Header$");  //  char *cvsinfo = strdup("$Header$");
   DRMS_Link_t *histlink = hcon_lookup_lower(&tempoutrec->links, histlinkname);   DRMS_Link_t *histlink = hcon_lookup_lower(&tempoutrec->links, histlinkname);
   if (histlink != NULL)   if (histlink != NULL)
   {   {
     histrecnum=set_history(histlink, cvsinfo);      histrecnum=set_history(histlink);
     if (histrecnum < 0)     if (histrecnum < 0)
     {     {
       drms_close_record(tempoutrec, DRMS_FREE_RECORD);       drms_close_record(tempoutrec, DRMS_FREE_RECORD);
Line 197  int jretile_manytofew(void)
Line 197  int jretile_manytofew(void)
   if (outkeytest != NULL && outkeytest->info->recscope == 1)   if (outkeytest != NULL && outkeytest->info->recscope == 1)
     sinbdivsout=drms_getkey_int(tempoutrec, "SINBDIVS", &status);     sinbdivsout=drms_getkey_int(tempoutrec, "SINBDIVS", &status);
  
     float apinnerout=0.0;
     float apwidthout=0.0;
     outkeytest = hcon_lookup_lower(&tempoutrec->keywords, "APINNER");
     if (outkeytest != NULL && outkeytest->info->recscope == 1)
       apinnerout=drms_getkey_float(tempoutrec, "APINNER", &status);
     outkeytest = hcon_lookup_lower(&tempoutrec->keywords, "APWIDTH");
     if (outkeytest != NULL && outkeytest->info->recscope == 1)
       apwidthout=drms_getkey_float(tempoutrec, "APWIDTH", &status);
   
   drms_close_record(tempoutrec, DRMS_FREE_RECORD);   drms_close_record(tempoutrec, DRMS_FREE_RECORD);
  
   char *inchecklist[] = {"T_START", "QUALITY", "LMIN", "LMAX", "T_STEP"};   char *inchecklist[] = {"T_START", "QUALITY", "LMIN", "LMAX", "T_STEP"};
Line 210  int jretile_manytofew(void)
Line 219  int jretile_manytofew(void)
     fprintf(stderr, "ERROR: problem opening input recordset: status = %d\n", status);     fprintf(stderr, "ERROR: problem opening input recordset: status = %d\n", status);
     return 1;     return 1;
   }   }
   nrecsin = inrecset->n;  //  nrecsin = inrecset->n;
     nrecsin = drms_count_records(drms_env, inrecquery, &status);
     if (status != DRMS_SUCCESS)
     {
       fprintf(stderr, "ERROR: problem counting input records: status = %d, nrecs = %d\n", status, nrecsin);
       return 1;
     }
  
   if (verbflag)   if (verbflag)
     printf("input recordset opened, nrecs = %d\n", nrecsin);     printf("input recordset opened, nrecs = %d\n", nrecsin);
Line 256  int jretile_manytofew(void)
Line 271  int jretile_manytofew(void)
   }   }
  
   inkeytest = hcon_lookup_lower(&inrec->keywords, "SINBDIVS");   inkeytest = hcon_lookup_lower(&inrec->keywords, "SINBDIVS");
   if (outkeytest != NULL)    if (inkeytest != NULL)
     sinbdivs=drms_getkey_int(inrec, "SINBDIVS", &status);     sinbdivs=drms_getkey_int(inrec, "SINBDIVS", &status);
   if (sinbdivsout != -1 && sinbdivsout != sinbdivs)   if (sinbdivsout != -1 && sinbdivsout != sinbdivs)
   {   {
Line 265  int jretile_manytofew(void)
Line 280  int jretile_manytofew(void)
     return 1;     return 1;
   }   }
  
     float apinner=0.0;
     float apwidth=0.0;
     inkeytest = hcon_lookup_lower(&inrec->keywords, "APINNER");
     if (inkeytest != NULL)
       apinner=drms_getkey_float(inrec, "APINNER", &status);
     if (apinnerout != 0.0 && (int)(10000*apinnerout) != (int)(10000*apinner))
     {
       fprintf(stderr, "ERROR: input APINNER does not equal output APINNER, in=%d, out=%d\n",apinner, apinnerout);
       drms_close_records(inrecset, DRMS_FREE_RECORD);
       return 1;
     }
   
     inkeytest = hcon_lookup_lower(&inrec->keywords, "APWIDTH");
     if (inkeytest != NULL)
       apwidth=drms_getkey_float(inrec, "APWIDTH", &status);
     if (apinnerout != 0.0 && (int)(10000*apwidthout) != (int)(10000*apwidth))
     {
       fprintf(stderr, "ERROR: input APWIDTH does not equal output APWIDTH, in=%d, out=%d\n", apwidth, apwidth);
       drms_close_records(inrecset, DRMS_FREE_RECORD);
       return 1;
     }
   
   status=drms_stage_records(inrecset, 1, 0);   status=drms_stage_records(inrecset, 1, 0);
   if (status != DRMS_SUCCESS)   if (status != DRMS_SUCCESS)
   {   {
Line 287  int jretile_manytofew(void)
Line 324  int jretile_manytofew(void)
     return 1;     return 1;
   }   }
  
 /*    unsigned long long calversout, calvers;
   irecout=0;    int fixflagarr[16] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
   for (iset=0; iset < ntimechunks; iset++)    for (i=0;i<16;i++)
   {    {
     tstartout=tstart + iset * chunksecs;      if (getbits(calverkey,i,1))
     tstopout=tstartout+chunksecs;        fixflagarr[i]=1;
   
     for (lchunk = lchunkfirst; lchunk <= lchunklast; lchunk++)  
     {  
       lminout = lchunk * lchunksize;  
       lmaxout = lminout + lchunksize - 1;  
       lminout = MAXIMUM(lminout,lmin);  
       lmaxout = MINIMUM(lmaxout,lmax);  
   
       outrec = outrecset->records[irecout];  
       if (histlink)  
         drms_setlink_static(outrec, histlinkname,  histrecnum);  
       drms_setkey_int(outrec, "LMIN", lminout);  
       drms_setkey_int(outrec, "LMAX", lmaxout);  
       drms_setkey_time(outrec, "T_START", tstartout);  
       drms_setkey_time(outrec, "T_STOP", tstopout);  
       drms_setkey_time(outrec, "T_OBS", tstartout+chunksecs/2);  
       drms_setkey_int(outrec, "NDT", ndt);  
   
       irecout++;  
     }  
   }   }
 */  
     unsigned int *nybblearrout = (unsigned int *)malloc(16*nrecsout*sizeof(unsigned int));
     int *mixflagarr    = (int *)calloc(16*nrecsout,sizeof(int));
     int *calverssetarr = (int *)calloc(16*nrecsout,sizeof(int));
     unsigned long long *calversoutarr = (unsigned long long *)malloc(nrecsout*sizeof(unsigned long long));
  
   int firsttimethrough=1;   int firsttimethrough=1;
   int *nskiparr=(int *)calloc(nrecsout,sizeof(int));   int *nskiparr=(int *)calloc(nrecsout,sizeof(int));
Line 328  int jretile_manytofew(void)
Line 349  int jretile_manytofew(void)
     lmaxin=drms_getkey_int(inrec, "LMAX", &status);     lmaxin=drms_getkey_int(inrec, "LMAX", &status);
     tstepin=tstopin-tstartin;     tstepin=tstopin-tstartin;
  
       if (verbflag > 1)
       {
         sprint_time(tscrstr, tstartin, "TAI", 0);
         printf("processing input %d, tstart = %s, lmin = %d, lmax = %d\n", irecin, tscrstr, lminin, lmaxin);
       }
   
     quality=drms_getkey_int(inrec, "QUALITY", &status);     quality=drms_getkey_int(inrec, "QUALITY", &status);
     if (status != DRMS_SUCCESS || (quality & QUAL_NODATA)) //may want stricter test on quality here     if (status != DRMS_SUCCESS || (quality & QUAL_NODATA)) //may want stricter test on quality here
     {     {
       if (verbflag > 2)       if (verbflag > 2)
       {       {
         sprint_time(tscrstr, tstartin, "TAI", 0);  //        sprint_time(tscrstr, tstartin, "TAI", 0);
         fprintf(stderr, "WARNING: input data not used due to quality: T_START = %s, LMIN = %d, LMAX = %d, recnum = %lld, irec = %d, status = %d, quality = %08x\n",          printf("SKIP: input data not used due to quality: T_START = %s, LMIN = %d, LMAX = %d, recnum = %lld, irec = %d, status = %d, quality = %08x\n",
                                                                       tscrstr, lminin, lmaxin, inrec->recnum, irecin, status, quality);                                                                       tscrstr, lminin, lmaxin, inrec->recnum, irecin, status, quality);
       }       }
       for (irecout=0; irecout < nrecsout; irecout++)       for (irecout=0; irecout < nrecsout; irecout++)
Line 347  int jretile_manytofew(void)
Line 374  int jretile_manytofew(void)
       segin = drms_segment_lookup(inrec, segnamein);       segin = drms_segment_lookup(inrec, segnamein);
     else     else
       segin = drms_segment_lookupnum(inrec, 0);       segin = drms_segment_lookupnum(inrec, 0);
     if (segin)      if (segin != NULL)
       inarr = drms_segment_read(segin, usetype, &status);       inarr = drms_segment_read(segin, usetype, &status);
 //      inarr = drms_segment_readslice(segin, usetype, startind, endind, &status); //      inarr = drms_segment_readslice(segin, usetype, startind, endind, &status);
     if (status != DRMS_SUCCESS || inarr == NULL || segin == NULL)     if (status != DRMS_SUCCESS || inarr == NULL || segin == NULL)
Line 364  int jretile_manytofew(void)
Line 391  int jretile_manytofew(void)
       inptr=(float *)(inarr->data);       inptr=(float *)(inarr->data);
     }     }
  
   
       calvers=drms_getkey_longlong(inrec, "CALVER64", &status);
       if (status != DRMS_SUCCESS)
         calvers = 0;
   
     irecout=0;     irecout=0;
     for (iset=0; iset < ntimechunks; iset++)     for (iset=0; iset < ntimechunks; iset++)
     {     {
Line 381  int jretile_manytofew(void)
Line 413  int jretile_manytofew(void)
  
         if (firsttimethrough)         if (firsttimethrough)
         {         {
           if (histlink)            if (histlink != NULL)
             drms_setlink_static(outrec, histlinkname,  histrecnum);             drms_setlink_static(outrec, histlinkname,  histrecnum);
           drms_copykeys(outrec, inrec, 0, kDRMS_KeyClass_Explicit);           drms_copykeys(outrec, inrec, 0, kDRMS_KeyClass_Explicit);
   // copykeys takes care of MAPMMAX, SINBDIVS, etc. that should be constant across the input
           drms_setkey_int(outrec, "LMIN", lminout);           drms_setkey_int(outrec, "LMIN", lminout);
           drms_setkey_int(outrec, "LMAX", lmaxout);           drms_setkey_int(outrec, "LMAX", lmaxout);
           drms_setkey_time(outrec, "T_START", tstartout);           drms_setkey_time(outrec, "T_START", tstartout);
Line 398  int jretile_manytofew(void)
Line 431  int jretile_manytofew(void)
           continue;           continue;
         }         }
  
           int index0 = 16*irecout;
   
           if (!calverssetarr[irecout])
           {
             calversoutarr[irecout]=calvers;
             calverssetarr[irecout]=1;
             for (i=0;i<16;i++)
               nybblearrout[index0 + i]=getbits(calvers,4*i+3,4);
           }
   
           for (i=0;i<16;i++)
           {
             int nybble=getbits(calvers,4*i+3,4);
             if (fixflagarr[i])
             {
               if (nybble != nybblearrout[index0 + i])
               {
                 fprintf(stderr, "ERROR: input data has mixed values for field %d of CALVER64: %d and %d, recnum = %lld, histrecnum = %lld\n", i, nybblearrout[i], nybble, inrec->recnum, histrecnum);
                 return 0;
               }
             }
             else
             {
               if (nybble < nybblearrout[index0 + i])
                 nybblearrout[index0 + i]=nybble;
             }
           }
   
           if (!mixflagarr[irecout] && (quality & QUAL_MIXEDCALVER || calvers != calversoutarr[irecout]))
             mixflagarr[irecout]=1;
   
         if (segoutflag)         if (segoutflag)
           segout = drms_segment_lookup(outrec, segnameout);           segout = drms_segment_lookup(outrec, segnameout);
         else         else
Line 451  int jretile_manytofew(void)
Line 515  int jretile_manytofew(void)
           in_offset+=2*tstepin/cadence;           in_offset+=2*tstepin/cadence;
         }         }
  
           outarr->bzero=segout->bzero;
           outarr->bscale=segout->bscale;
         status=drms_segment_writeslice_ext(segout, outarr, startind, endind, totallength, 0);         status=drms_segment_writeslice_ext(segout, outarr, startind, endind, totallength, 0);
         if (status != DRMS_SUCCESS)         if (status != DRMS_SUCCESS)
         {         {
Line 483  int jretile_manytofew(void)
Line 549  int jretile_manytofew(void)
     {     {
       drms_setkey_int(outrec, "QUALITY", QUAL_NODATA);       drms_setkey_int(outrec, "QUALITY", QUAL_NODATA);
     }     }
       else if (mixflagarr[irecout])
       {
         drms_setkey_int(outrec, "QUALITY", QUAL_MIXEDCALVER);
         nsegments++;
       }
     else     else
     {     {
       drms_setkey_int(outrec, "QUALITY", 0);       drms_setkey_int(outrec, "QUALITY", 0);
       nsegments++;       nsegments++;
     }     }
  
       for (i=0;i<16;i++)
         calversout=setbits(calversout,4*i+3,4,nybblearrout[16*irecout + i]);
       drms_setkey_longlong(outrec, "CALVER64", calversout);
   
     tnow = (double)time(NULL);     tnow = (double)time(NULL);
     tnow += UNIX_epoch;     tnow += UNIX_epoch;
     drms_setkey_time(outrec, "DATE", tnow);     drms_setkey_time(outrec, "DATE", tnow);


Legend:
Removed from v.1.2  
changed lines
  Added in v.1.9

Karen Tian
Powered by
ViewCVS 0.9.4