IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Mar 8, 2007, 12:21:18 PM (19 years ago)
Author:
eugene
Message:

complete merge from branch dvo-mods-2007-02

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Ohana/src/libdvo/src/dvo_catalog_mef.c

    r8328 r12332  
    99  Matrix matrix;
    1010  FTable ftable;
     11  SecFilt *primary;
    1112
    1213  f = catalog[0].f;
     
    4445      return (FALSE);
    4546    }
    46     catalog[0].average = FtableToAverage (&ftable, &catalog[0].Naverage, &catalog[0].catformat);
     47    /* old versions of DVO stored one of the average magnitudes in Average. we save this if needed */
     48    catalog[0].average = FtableToAverage (&ftable, &catalog[0].Naverage, &catalog[0].catformat, &primary);
    4749    if (Naverage != catalog[0].Naverage) {
    4850      fprintf (stderr, "Warning: mismatch between Naverage in PHU and Table headers (%d vs %d)\n", Naverage, catalog[0].Naverage);
     
    9698  }
    9799
    98   // catalog[0].secfilt = gfits_table_get_SecFilt (&ftable, &Nitems, NULL);
    99   // catalog[0].Nsecfilt = Nitems / catalog[0].Naverage;
    100 
    101100  /* read secfilt table header */
    102101  if (!gfits_fread_header (f, &header)) {
     
    110109      return (FALSE);
    111110    }
     111
     112    /* how many entries do we expect from the secfilt table? */
    112113    Nexpect = catalog[0].Nsecfilt * catalog[0].Naverage;
    113114    catalog[0].secfilt = FtableToSecFilt (&ftable, &Nitems, &catalog[0].catformat);
     
    115116      fprintf (stderr, "Warning: mismatch between Nsecfilt items in PHU and Table headers (%d vs %d)\n", Nexpect, Nitems);
    116117    }
     118
     119    /* if primary is defined, we were supplied with one additional average magnitude from Average
     120       we need to interleave these magnitudes with the secfilt entries just loaded */
     121    if (primary != NULL) {
     122      int Ntmpfilt, Ntotal, i, j;
     123      SecFilt *tmpfilt;
     124      tmpfilt  = catalog[0].secfilt;
     125      Ntmpfilt = catalog[0].Nsecfilt;
     126      Nsecfilt = catalog[0].Nsecfilt + 1;
     127      Ntotal = Nsecfilt * catalog[0].Naverage;
     128      ALLOCATE (catalog[0].secfilt, SecFilt, Ntotal);
     129      for (i = 0; i < catalog[0].Naverage; i++) {
     130        catalog[0].secfilt[i*Nsecfilt + 0] = primary[i];
     131        for (j = 0; j < Ntmpfilt; j++) {
     132          catalog[0].secfilt[i*Nsecfilt + j + 1] = tmpfilt[i*Ntmpfilt + j];
     133        }
     134      }         
     135      catalog[0].Nsecfilt = Nsecfilt;
     136      free (primary);
     137    }
     138
    117139  } else {
    118140    /* no real need to skip the data array here... */
    119141    Nbytes = gfits_matrix_size (&header);
    120142    fseek (f, Nbytes, SEEK_CUR);
     143    if (primary != NULL) free (primary);
    121144  }
    122145
     
    129152}
    130153
     154/* XXX need to decompose the primary and secfilt entries for Elixir and Loneos */
    131155/* save_catalog_mef writes a complete new file from scratch */
    132 
    133156int dvo_catalog_save_mef (Catalog *catalog, char VERBOSE) {
    134157
     
    138161  Header header;
    139162  FTable ftable;
     163  SecFilt *primary;
     164  SecFilt *secfilt;
     165  int i, j, Nsecfilt, Nallfilt, Ntotal;
    140166
    141167  if (catalog[0].Naverage == 0) {
     
    171197  gfits_free_matrix (&matrix);
    172198
     199  /* for the appropriate types, pull out the first secfilt and pass to AverageToFtable as primary */
     200  if ((catalog[0].catformat == DVO_FORMAT_ELIXIR) || // special case for ELIXIR
     201      (catalog[0].catformat == DVO_FORMAT_LONEOS)) { // special case for LONEOS
     202    Nallfilt = catalog[0].Nsecfilt;
     203    Nsecfilt = catalog[0].Nsecfilt - 1;
     204    Ntotal = Nsecfilt * catalog[0].Naverage;
     205    ALLOCATE (primary, SecFilt, catalog[0].Naverage);
     206    ALLOCATE (secfilt, SecFilt, Ntotal);
     207
     208    for (i = 0; i < catalog[0].Naverage; i++) {
     209      primary[i] = catalog[0].secfilt[i*Nallfilt + 0];
     210      for (j = 0; j < Nsecfilt; j++) {
     211        secfilt[i*Nsecfilt + j] = catalog[0].secfilt[i*Nallfilt + j + 1];
     212      }
     213    }           
     214  } else {
     215    primary = NULL;
     216    secfilt = catalog[0].secfilt;
     217    Nsecfilt = catalog[0].Nsecfilt;
     218  }
     219
    173220  /* write out Average table (convert to FITS table format) */
    174   AverageToFtable (&ftable, catalog[0].average, catalog[0].Naverage, catalog[0].catformat);
     221  AverageToFtable (&ftable, catalog[0].average, catalog[0].Naverage, catalog[0].catformat, primary);
    175222  if (!gfits_fwrite_Theader (catalog[0].f, &header)) {
    176223    fprintf (stderr, "can't write table header");
     
    211258
    212259  /* write out SecFilt table (convert to FITS table format) */
    213   Nitems = catalog[0].Naverage * catalog[0].Nsecfilt;
    214   SecFiltToFtable (&ftable, catalog[0].secfilt, Nitems, catalog[0].catformat);
    215   if (!gfits_fwrite_Theader (catalog[0].f, &header)) {
    216     fprintf (stderr, "can't write table header");
    217     return (FALSE);
    218   }
    219   if (!gfits_fwrite_table (catalog[0].f, &ftable)) {
    220     fprintf (stderr, "can't write table data");
    221     return (FALSE);
    222   }
    223   gfits_free_table (&ftable);
    224   gfits_free_header (&header);
     260  Nitems = catalog[0].Naverage * Nsecfilt;
     261  SecFiltToFtable (&ftable, secfilt, Nitems, catalog[0].catformat);
     262  if (!gfits_fwrite_Theader (catalog[0].f, &header)) {
     263    fprintf (stderr, "can't write table header");
     264    return (FALSE);
     265  }
     266  if (!gfits_fwrite_table (catalog[0].f, &ftable)) {
     267    fprintf (stderr, "can't write table data");
     268    return (FALSE);
     269  }
     270  gfits_free_table (&ftable);
     271  gfits_free_header (&header);
     272
     273  /* free temp storage */
     274  if (primary != NULL) {
     275    free (primary);
     276    free (secfilt);
     277  }
    225278
    226279  return (TRUE);
     
    228281
    229282/*
    230    catalog data is:
    231    header (bitpix == 8)
    232    matrix (empty)
    233    average header
    234    average table
    235    measure header
    236    measure table
    237    missing header
    238    missing table
    239    secfilt header
    240    secfilt table
     283  catalog data is:
     284  header (bitpix == 8)
     285  matrix (empty)
     286  average header
     287  average table
     288  measure header
     289  measure table
     290  missing header
     291  missing table
     292  secfilt header
     293  secfilt table
    241294*/
    242295   
Note: See TracChangeset for help on using the changeset viewer.