Changeset 12332 for trunk/Ohana/src/libdvo/src/dvo_catalog_mef.c
- Timestamp:
- Mar 8, 2007, 12:21:18 PM (19 years ago)
- File:
-
- 1 edited
-
trunk/Ohana/src/libdvo/src/dvo_catalog_mef.c (modified) (10 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Ohana/src/libdvo/src/dvo_catalog_mef.c
r8328 r12332 9 9 Matrix matrix; 10 10 FTable ftable; 11 SecFilt *primary; 11 12 12 13 f = catalog[0].f; … … 44 45 return (FALSE); 45 46 } 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); 47 49 if (Naverage != catalog[0].Naverage) { 48 50 fprintf (stderr, "Warning: mismatch between Naverage in PHU and Table headers (%d vs %d)\n", Naverage, catalog[0].Naverage); … … 96 98 } 97 99 98 // catalog[0].secfilt = gfits_table_get_SecFilt (&ftable, &Nitems, NULL);99 // catalog[0].Nsecfilt = Nitems / catalog[0].Naverage;100 101 100 /* read secfilt table header */ 102 101 if (!gfits_fread_header (f, &header)) { … … 110 109 return (FALSE); 111 110 } 111 112 /* how many entries do we expect from the secfilt table? */ 112 113 Nexpect = catalog[0].Nsecfilt * catalog[0].Naverage; 113 114 catalog[0].secfilt = FtableToSecFilt (&ftable, &Nitems, &catalog[0].catformat); … … 115 116 fprintf (stderr, "Warning: mismatch between Nsecfilt items in PHU and Table headers (%d vs %d)\n", Nexpect, Nitems); 116 117 } 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 117 139 } else { 118 140 /* no real need to skip the data array here... */ 119 141 Nbytes = gfits_matrix_size (&header); 120 142 fseek (f, Nbytes, SEEK_CUR); 143 if (primary != NULL) free (primary); 121 144 } 122 145 … … 129 152 } 130 153 154 /* XXX need to decompose the primary and secfilt entries for Elixir and Loneos */ 131 155 /* save_catalog_mef writes a complete new file from scratch */ 132 133 156 int dvo_catalog_save_mef (Catalog *catalog, char VERBOSE) { 134 157 … … 138 161 Header header; 139 162 FTable ftable; 163 SecFilt *primary; 164 SecFilt *secfilt; 165 int i, j, Nsecfilt, Nallfilt, Ntotal; 140 166 141 167 if (catalog[0].Naverage == 0) { … … 171 197 gfits_free_matrix (&matrix); 172 198 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 173 220 /* 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); 175 222 if (!gfits_fwrite_Theader (catalog[0].f, &header)) { 176 223 fprintf (stderr, "can't write table header"); … … 211 258 212 259 /* 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 } 225 278 226 279 return (TRUE); … … 228 281 229 282 /* 230 catalog data is:231 header (bitpix == 8)232 matrix (empty)233 average header234 average table235 measure header236 measure table237 missing header238 missing table239 secfilt header240 secfilt table283 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 241 294 */ 242 295
Note:
See TracChangeset
for help on using the changeset viewer.
