IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 15730


Ignore:
Timestamp:
Dec 1, 2007, 4:31:23 PM (18 years ago)
Author:
eugene
Message:

working on segment save

Location:
branches/eam_branch_20071130/Ohana/src/libdvo/src
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/eam_branch_20071130/Ohana/src/libdvo/src/dvo_catalog.c

    r15728 r15730  
    276276  gfits_modify (&catalog[0].header, "SORTED",  "%t", 1, catalog[0].sorted);
    277277
    278   if (catalog[0].Nmeas_off != 0) {
    279     if (!dvo_catalog_update (catalog, VERBOSE)) {
    280       return (FALSE);
    281     }
    282     return (TRUE);
    283   }
    284 
     278  // XXX handle return status
    285279  switch (catalog[0].catmode) {
    286280    case DVO_MODE_RAW:
     
    300294}
    301295
     296# if (0)
     297// XXX deprecate this function: choice of update or not is made in dvo_catalog_save_split, etc
    302298int dvo_catalog_update (Catalog *catalog, char VERBOSE) {
    303299
     
    334330  return (TRUE);
    335331}
     332# endif
    336333
    337334int dvo_catalog_check (Catalog *catalog, int Nsecfilt, int extend) {
  • branches/eam_branch_20071130/Ohana/src/libdvo/src/dvo_catalog_split.c

    r15728 r15730  
    447447      (catalog[0].catformat == DVO_FORMAT_LONEOS)) { // special case for LONEOS
    448448    if (catalog[0].secfilt == NULL) {       
     449      fprintf (stderr, "missing secfilt, cannot build output averages (dvo_catalog_split.c)\n");
     450      exit (1);
     451    }
     452    secfilt = catalog[0].secfilt;
     453
     454    // XXX this translation only works if we have loaded / created a matched average/secfilt set
     455    assert (catalog[0].Nsecf_mem == catalog[0].Nsecfilt*catalog[0].Naverage);
     456
     457    Nallfilt = catalog[0].Nsecfilt;
     458    Nsecfilt = catalog[0].Nsecfilt - 1;
     459    Ntotal = Nsecfilt * catalog[0].Naverage;
     460    ALLOCATE (primary, SecFilt, catalog[0].Naverage);
     461    ALLOCATE (secfilt, SecFilt, Ntotal);
     462
     463    for (i = 0; i < catalog[0].Naverage; i++) {
     464      primary[i] = secfilt[i*Nallfilt + 0];
     465      for (j = 0; j < Nsecfilt; j++) {
     466        secfilt[i*Nsecfilt + j] = catalog[0].secfilt[i*Nallfilt + j + 1];
     467      }
     468    }           
     469    catalog[0].Nsecfilt --;
     470    catalog[0].Nsecf_mem = catalog[0].Naverage*catalog[0].Nsecfilt;
     471  } else {
     472    primary = NULL;
     473    secfilt = catalog[0].secfilt;
     474    Nsecfilt = catalog[0].Nsecfilt;
     475  }
     476
     477  /* make sure header is consistent with data */
     478  gfits_modify (&catalog[0].header, "NSTARS",   "%d", 1, catalog[0].Naverage);
     479  gfits_modify (&catalog[0].header, "NMEAS",    "%d", 1, catalog[0].Nmeasure);
     480  gfits_modify (&catalog[0].header, "NMISS",    "%d", 1, catalog[0].Nmissing);
     481  gfits_modify (&catalog[0].header, "NSECFILT", "%d", 1, Nsecfilt);
     482  gfits_modify (&catalog[0].header, "EXTEND",   "%t", 1, TRUE);
     483
     484  /* rewind file pointers and truncate (file is still open) */
     485  fseek (catalog[0].f, 0, SEEK_SET);
     486
     487  /* write table PHU header - always write this out */
     488  /* XXX EAM : check if disk file size has changed */
     489  if (!gfits_fwrite_header  (catalog[0].f, &catalog[0].header)) {
     490    fprintf (stderr, "can't write primary header");
     491    goto failure;
     492  }
     493
     494  /* in split mode, we can save only part of the data */
     495
     496  /*** Average Table ***/
     497
     498  if (catalog[0].average != NULL) {
     499    ftruncate (fileno (catalog[0].f), catalog[0].header.size);
     500
     501    /* this is probably a NOP, do I have to keep it in? */
     502    gfits_create_matrix (&catalog[0].header, &matrix);
     503    if (!gfits_fwrite_matrix  (catalog[0].f, &matrix)) {
     504      fprintf (stderr, "can't write primary matrix");
     505      goto failure;
     506    }
     507    gfits_free_matrix (&matrix);
     508
     509    /* write out Average table (convert to FITS table format) */
     510    if (!AverageToFtable (&ftable, catalog[0].average, catalog[0].Naverage, catalog[0].catformat, primary)) {
     511      fprintf (stderr, "trouble converting format\n");
     512      goto failure;
     513    }
     514    if (!gfits_fwrite_Theader (catalog[0].f, &header)) {
     515      fprintf (stderr, "can't write table header");
     516      goto failure;
     517    }
     518    if (!gfits_fwrite_table (catalog[0].f, &ftable)) {
     519      fprintf (stderr, "can't write table data");
     520      goto failure;
     521    }
     522    gfits_free_table (&ftable);
     523    gfits_free_header (&header);
     524  }
     525
     526  /*** Measure Table ***/
     527  if (catalog[0].measure != NULL) {
     528
     529    /* catalog file data is stored in separate structure */
     530    catfile = catalog[0].measure_catalog;
     531
     532    /* XXX EAM : warn about this condition; add code to handle? */
     533    if (catalog[0].Nmeas_off != 0) {
     534      fprintf (stderr, "WARNING: LOAD_MEAS_META mixed with save??\n");
     535      fprintf (stderr, "WARNING: this should not be allowed to happen!\n");
     536    }
     537
     538    /* rewind file pointers and truncate (file is still open) */
     539    fseek (catfile[0].f, 0, SEEK_SET);
     540    ftruncate (fileno (catfile[0].f), 0);
     541
     542    /* write table PHU header */
     543    if (!gfits_fwrite_header  (catfile[0].f, &catfile[0].header)) {
     544      fprintf (stderr, "can't write primary header");
     545      goto failure;
     546    }
     547
     548    /* this is probably a NOP, do I have to keep it in? */
     549    gfits_create_matrix (&catfile[0].header, &matrix);
     550    if (!gfits_fwrite_matrix  (catfile[0].f, &matrix)) {
     551      fprintf (stderr, "can't write primary matrix");
     552      goto failure;
     553    }
     554    gfits_free_matrix (&matrix);
     555
     556    /* write out Measure table (convert to FITS table format) */
     557    MeasureToFtable (&ftable, catalog[0].measure, catalog[0].Nmeasure, catalog[0].catformat);
     558    if (!gfits_fwrite_Theader (catfile[0].f, &header)) {
     559      fprintf (stderr, "can't write table header");
     560      goto failure;
     561    }
     562    if (!gfits_fwrite_table (catfile[0].f, &ftable)) {
     563      fprintf (stderr, "can't write table data");
     564      goto failure;
     565    }
     566    gfits_free_table (&ftable);
     567    gfits_free_header (&header);
     568  }
     569
     570  /*** Missing Table ***/
     571  if (catalog[0].missing != NULL) {
     572
     573    /* catalog data is stored in separate catalog */
     574    catfile = catalog[0].missing_catalog;
     575
     576    /* rewind file pointers and truncate (file is still open) */
     577    fseek (catfile[0].f, 0, SEEK_SET);
     578    ftruncate (fileno (catfile[0].f), 0);
     579
     580    /* write table PHU header */
     581    if (!gfits_fwrite_header  (catfile[0].f, &catfile[0].header)) {
     582      fprintf (stderr, "can't write primary header");
     583      goto failure;
     584    }
     585
     586    /* this is probably a NOP, do I have to keep it in? */
     587    gfits_create_matrix (&catfile[0].header, &matrix);
     588    if (!gfits_fwrite_matrix  (catfile[0].f, &matrix)) {
     589      fprintf (stderr, "can't write primary matrix");
     590      goto failure;
     591    }
     592    gfits_free_matrix (&matrix);
     593
     594    /* write out Missing table (convert to FITS table format) */
     595    gfits_table_set_Missing (&ftable, catalog[0].missing, catalog[0].Nmissing);
     596    if (!gfits_fwrite_Theader (catfile[0].f, &header)) {
     597      fprintf (stderr, "can't write table header");
     598      goto failure;
     599    }
     600    if (!gfits_fwrite_table (catfile[0].f, &ftable)) {
     601      fprintf (stderr, "can't write table data");
     602      goto failure;
     603    }
     604    gfits_free_table (&ftable);
     605    gfits_free_header (&header);
     606  }
     607
     608  /*** Secfilt Table ***/
     609  if (catalog[0].secfilt != NULL) {
     610
     611    /* catalog file data is stored in a separate catalog structure */
     612    catfile = catalog[0].secfilt_catalog;
     613
     614    /* rewind file pointers and truncate (file is still open) */
     615    fseek (catfile[0].f, 0, SEEK_SET);
     616    ftruncate (fileno (catfile[0].f), 0);
     617
     618    /* write table PHU header */
     619    if (!gfits_fwrite_header  (catfile[0].f, &catfile[0].header)) {
     620      fprintf (stderr, "can't write primary header");
     621      goto failure;
     622    }
     623
     624    /* this is probably a NOP, do I have to keep it in? */
     625    gfits_create_matrix (&catfile[0].header, &matrix);
     626    if (!gfits_fwrite_matrix  (catfile[0].f, &matrix)) {
     627      fprintf (stderr, "can't write primary matrix");
     628      goto failure;
     629    }
     630    gfits_free_matrix (&matrix);
     631
     632    /* write out SecFilt table (convert to FITS table format) */
     633    Nitems = catalog[0].Naverage * catalog[0].Nsecfilt;
     634    SecFiltToFtable (&ftable, secfilt, Nitems, catalog[0].catformat);
     635    if (!gfits_fwrite_Theader (catfile[0].f, &header)) {
     636      fprintf (stderr, "can't write table header");
     637      goto failure;
     638    }
     639    if (!gfits_fwrite_table (catfile[0].f, &ftable)) {
     640      fprintf (stderr, "can't write table data");
     641      goto failure;
     642    }
     643    gfits_free_table (&ftable);
     644    gfits_free_header (&header);
     645  }
     646
     647  /* free temp storage */
     648  if (primary != NULL) {
     649    free (primary);
     650    free (secfilt);
     651  }
     652
     653  return (TRUE);
     654
     655failure:
     656  /* free temp storage */
     657  if (primary != NULL) {
     658    free (primary);
     659    free (secfilt);
     660  }
     661  return (FALSE);
     662}
     663
     664/* update_catalog_split only writes new lines to file. 
     665 * if file is empty, call save_catalog_split instead.
     666 * XXX EAM : save_catalog SHOULD do this
     667 */
     668
     669int dvo_catalog_update_split (Catalog *catalog, char VERBOSE) {
     670
     671  int i, Nx, Ny, Nlines;
     672  int Nitems, Nskip, Nout, Ndisk, Nstart;
     673  Matrix matrix;
     674  Header header;
     675  FTable ftable;
     676  VTable vtable;
     677  Catalog *catfile;
     678  SecFilt *primary, *secfilt;
     679  int j, Nsecfilt, Nallfilt, Ntotal;
     680
     681  ftable.header = &header;
     682  vtable.header = &header;
     683
     684  if (catalog[0].Naverage == 0) {
     685    if (VERBOSE) fprintf (stderr, "no stars in catalog, skipping\n");
     686    return (TRUE);
     687  }
     688
     689  /** for the appropriate types, pull out the first secfilt and pass to AverageToFtable as primary **/
     690  if ((catalog[0].catformat == DVO_FORMAT_ELIXIR) || // special case for ELIXIR
     691      (catalog[0].catformat == DVO_FORMAT_LONEOS)) { // special case for LONEOS
     692    if (catalog[0].secfilt == NULL) {
    449693      fprintf (stderr, "missing secfilt, cannot build output averages (dvo_catalog_split.c:544)\n");
    450694      exit (1);
     
    472716  /* make sure header is consistent with data */
    473717  gfits_modify (&catalog[0].header, "NSTARS",   "%d", 1, catalog[0].Naverage);
    474   gfits_modify (&catalog[0].header, "NMEAS",    "%d", 1, catalog[0].Nmeasure);
    475   gfits_modify (&catalog[0].header, "NMISS",    "%d", 1, catalog[0].Nmissing);
    476   gfits_modify (&catalog[0].header, "NSECFILT", "%d", 1, Nsecfilt);
    477   gfits_modify (&catalog[0].header, "EXTEND",   "%t", 1, TRUE);
    478 
    479   /* rewind file pointers and truncate (file is still open) */
    480   fseek (catalog[0].f, 0, SEEK_SET);
    481 
    482   /* write table PHU header - always write this out */
    483   /* XXX EAM : check if disk file size has changed */
    484   if (!gfits_fwrite_header  (catalog[0].f, &catalog[0].header)) {
    485     fprintf (stderr, "can't write primary header");
    486     goto failure;
    487   }
    488 
    489   /* in split mode, we can save only part of the data */
    490 
    491   /*** Average Table ***/
    492 
    493   if (catalog[0].average != NULL) {
    494     ftruncate (fileno (catalog[0].f), catalog[0].header.size);
    495 
    496     /* this is probably a NOP, do I have to keep it in? */
    497     gfits_create_matrix (&catalog[0].header, &matrix);
    498     if (!gfits_fwrite_matrix  (catalog[0].f, &matrix)) {
    499       fprintf (stderr, "can't write primary matrix");
    500       goto failure;
    501     }
    502     gfits_free_matrix (&matrix);
    503 
    504     /* write out Average table (convert to FITS table format) */
    505     if (!AverageToFtable (&ftable, catalog[0].average, catalog[0].Naverage, catalog[0].catformat, primary)) {
    506       fprintf (stderr, "trouble converting format\n");
    507       goto failure;
    508     }
    509     if (!gfits_fwrite_Theader (catalog[0].f, &header)) {
    510       fprintf (stderr, "can't write table header");
    511       goto failure;
    512     }
    513     if (!gfits_fwrite_table (catalog[0].f, &ftable)) {
    514       fprintf (stderr, "can't write table data");
    515       goto failure;
    516     }
    517     gfits_free_table (&ftable);
    518     gfits_free_header (&header);
    519   }
    520 
    521   /*** Measure Table ***/
    522   if (catalog[0].measure != NULL) {
    523 
    524     /* catalog file data is stored in separate structure */
    525     catfile = catalog[0].measure_catalog;
    526 
    527     /* XXX EAM : warn about this condition; add code to handle? */
    528     if (catalog[0].Nmeas_off != 0) {
    529       fprintf (stderr, "WARNING: LOAD_MEAS_META mixed with save??\n");
    530       fprintf (stderr, "WARNING: this should not be allowed to happen!\n");
    531     }
    532 
    533     /* rewind file pointers and truncate (file is still open) */
    534     fseek (catfile[0].f, 0, SEEK_SET);
    535     ftruncate (fileno (catfile[0].f), 0);
    536 
    537     /* write table PHU header */
    538     if (!gfits_fwrite_header  (catfile[0].f, &catfile[0].header)) {
    539       fprintf (stderr, "can't write primary header");
    540       goto failure;
    541     }
    542 
    543     /* this is probably a NOP, do I have to keep it in? */
    544     gfits_create_matrix (&catfile[0].header, &matrix);
    545     if (!gfits_fwrite_matrix  (catfile[0].f, &matrix)) {
    546       fprintf (stderr, "can't write primary matrix");
    547       goto failure;
    548     }
    549     gfits_free_matrix (&matrix);
    550 
    551     /* write out Measure table (convert to FITS table format) */
    552     MeasureToFtable (&ftable, catalog[0].measure, catalog[0].Nmeasure, catalog[0].catformat);
    553     if (!gfits_fwrite_Theader (catfile[0].f, &header)) {
    554       fprintf (stderr, "can't write table header");
    555       goto failure;
    556     }
    557     if (!gfits_fwrite_table (catfile[0].f, &ftable)) {
    558       fprintf (stderr, "can't write table data");
    559       goto failure;
    560     }
    561     gfits_free_table (&ftable);
    562     gfits_free_header (&header);
    563   }
    564 
    565   /*** Missing Table ***/
    566   if (catalog[0].missing != NULL) {
    567 
    568     /* catalog data is stored in separate catalog */
    569     catfile = catalog[0].missing_catalog;
    570 
    571     /* rewind file pointers and truncate (file is still open) */
    572     fseek (catfile[0].f, 0, SEEK_SET);
    573     ftruncate (fileno (catfile[0].f), 0);
    574 
    575     /* write table PHU header */
    576     if (!gfits_fwrite_header  (catfile[0].f, &catfile[0].header)) {
    577       fprintf (stderr, "can't write primary header");
    578       goto failure;
    579     }
    580 
    581     /* this is probably a NOP, do I have to keep it in? */
    582     gfits_create_matrix (&catfile[0].header, &matrix);
    583     if (!gfits_fwrite_matrix  (catfile[0].f, &matrix)) {
    584       fprintf (stderr, "can't write primary matrix");
    585       goto failure;
    586     }
    587     gfits_free_matrix (&matrix);
    588 
    589     /* write out Missing table (convert to FITS table format) */
    590     gfits_table_set_Missing (&ftable, catalog[0].missing, catalog[0].Nmissing);
    591     if (!gfits_fwrite_Theader (catfile[0].f, &header)) {
    592       fprintf (stderr, "can't write table header");
    593       goto failure;
    594     }
    595     if (!gfits_fwrite_table (catfile[0].f, &ftable)) {
    596       fprintf (stderr, "can't write table data");
    597       goto failure;
    598     }
    599     gfits_free_table (&ftable);
    600     gfits_free_header (&header);
    601   }
    602 
    603   /*** Secfilt Table ***/
    604   if (catalog[0].secfilt != NULL) {
    605 
    606     /* catalog file data is stored in a separate catalog structure */
    607     catfile = catalog[0].secfilt_catalog;
    608 
    609     /* rewind file pointers and truncate (file is still open) */
    610     fseek (catfile[0].f, 0, SEEK_SET);
    611     ftruncate (fileno (catfile[0].f), 0);
    612 
    613     /* write table PHU header */
    614     if (!gfits_fwrite_header  (catfile[0].f, &catfile[0].header)) {
    615       fprintf (stderr, "can't write primary header");
    616       goto failure;
    617     }
    618 
    619     /* this is probably a NOP, do I have to keep it in? */
    620     gfits_create_matrix (&catfile[0].header, &matrix);
    621     if (!gfits_fwrite_matrix  (catfile[0].f, &matrix)) {
    622       fprintf (stderr, "can't write primary matrix");
    623       goto failure;
    624     }
    625     gfits_free_matrix (&matrix);
    626 
    627     /* write out SecFilt table (convert to FITS table format) */
    628     Nitems = catalog[0].Naverage * catalog[0].Nsecfilt;
    629     SecFiltToFtable (&ftable, secfilt, Nitems, catalog[0].catformat);
    630     if (!gfits_fwrite_Theader (catfile[0].f, &header)) {
    631       fprintf (stderr, "can't write table header");
    632       goto failure;
    633     }
    634     if (!gfits_fwrite_table (catfile[0].f, &ftable)) {
    635       fprintf (stderr, "can't write table data");
    636       goto failure;
    637     }
    638     gfits_free_table (&ftable);
    639     gfits_free_header (&header);
    640   }
    641 
    642   /* free temp storage */
    643   if (primary != NULL) {
    644     free (primary);
    645     free (secfilt);
    646   }
    647 
    648   return (TRUE);
    649 
    650 failure:
    651   /* free temp storage */
    652   if (primary != NULL) {
    653     free (primary);
    654     free (secfilt);
    655   }
    656   return (FALSE);
    657 }
    658 
    659 /* update_catalog_split only writes new lines to file. 
    660  * if file is empty, call save_catalog_split instead.
    661  * XXX EAM : save_catalog SHOULD do this
    662  */
    663 
    664 int dvo_catalog_update_split (Catalog *catalog, char VERBOSE) {
    665 
    666   int i, Nx, Ny, Nlines;
    667   int Nitems, Nskip, Nout, Ndisk, Nstart;
    668   Matrix matrix;
    669   Header header;
    670   FTable ftable;
    671   VTable vtable;
    672   Catalog *catfile;
    673   SecFilt *primary, *secfilt;
    674   int j, Nsecfilt, Nallfilt, Ntotal;
    675 
    676   ftable.header = &header;
    677   vtable.header = &header;
    678 
    679   if (catalog[0].Naverage == 0) {
    680     if (VERBOSE) fprintf (stderr, "no stars in catalog, skipping\n");
    681     return (TRUE);
    682   }
    683 
    684   /** for the appropriate types, pull out the first secfilt and pass to AverageToFtable as primary **/
    685   if ((catalog[0].catformat == DVO_FORMAT_ELIXIR) || // special case for ELIXIR
    686       (catalog[0].catformat == DVO_FORMAT_LONEOS)) { // special case for LONEOS
    687     if (catalog[0].secfilt == NULL) {
    688       fprintf (stderr, "missing secfilt, cannot build output averages (dvo_catalog_split.c:544)\n");
    689       exit (1);
    690     }
    691     secfilt = catalog[0].secfilt;
    692 
    693     Nallfilt = catalog[0].Nsecfilt;
    694     Nsecfilt = catalog[0].Nsecfilt - 1;
    695     Ntotal = Nsecfilt * catalog[0].Naverage;
    696     ALLOCATE (primary, SecFilt, catalog[0].Naverage);
    697     ALLOCATE (secfilt, SecFilt, Ntotal);
    698 
    699     for (i = 0; i < catalog[0].Naverage; i++) {
    700       primary[i] = secfilt[i*Nallfilt + 0];
    701       for (j = 0; j < Nsecfilt; j++) {
    702         secfilt[i*Nsecfilt + j] = catalog[0].secfilt[i*Nallfilt + j + 1];
    703       }
    704     }           
    705   } else {
    706     primary = NULL;
    707     secfilt = catalog[0].secfilt;
    708     Nsecfilt = catalog[0].Nsecfilt;
    709   }
    710 
    711   /* make sure header is consistent with data */
    712   gfits_modify (&catalog[0].header, "NSTARS",   "%d", 1, catalog[0].Naverage);
    713718  gfits_modify (&catalog[0].header, "NMEAS",    "%d", 1, catalog[0].Nmeasure + catalog[0].Nmeas_off);
    714719  gfits_modify (&catalog[0].header, "NMISS",    "%d", 1, catalog[0].Nmissing);
Note: See TracChangeset for help on using the changeset viewer.