Changeset 12011
- Timestamp:
- Feb 23, 2007, 8:04:18 AM (19 years ago)
- Location:
- branches/dvo-mods-2007-02/Ohana/src/libdvo
- Files:
-
- 8 edited
-
include/dvo.h (modified) (3 diffs)
-
src/LoadPhotcodes.c (modified) (15 diffs)
-
src/dvo_catalog_mef.c (modified) (10 diffs)
-
src/dvo_catalog_raw.c (modified) (13 diffs)
-
src/dvo_catalog_split.c (modified) (29 diffs)
-
src/dvo_convert.c (modified) (5 diffs)
-
src/dvo_convert_elixir.c (modified) (7 diffs)
-
src/dvo_convert_loneos.c (modified) (6 diffs)
Legend:
- Unmodified
- Added
- Removed
-
branches/dvo-mods-2007-02/Ohana/src/libdvo/include/dvo.h
r10931 r12011 232 232 float PhotdM (PhotCode *code, Average *average, SecFilt *secfilt); 233 233 234 # if (0) 235 short iPhotInst (Measure *measure); 236 short iPhotAbs (Measure *measure); 237 short iPhotCat (Measure *measure); 238 short iPhotSys (Measure *measure, Average *average, SecFilt *secfilt); 239 short iPhotRel (Measure *measure, Average *average, SecFilt *secfilt); 240 short iPhotCal (Measure *thisone, Average *average, SecFilt *secfilt, Measure *measure, PhotCode *code); 241 short iPhotAve (PhotCode *code, Average *average, SecFilt *secfilt); 242 short iPhotRef (PhotCode *code, Average *average, SecFilt *secfilt, Measure *measure); 243 short iPhotXm (PhotCode *code, Average *average, SecFilt *secfilt); 244 short iPhotdM (PhotCode *code, Average *average, SecFilt *secfilt); 245 # endif 246 247 float iPhotColor (Average *average, SecFilt *secfilt, Measure *measure, PhotCode *code); 234 float PhotColorForCode (Average *average, SecFilt *secfilt, Measure *measure, PhotCode *code); 248 235 int PhotColor (Average *average, SecFilt *secfilt, Measure *measure, int c1, int c2, double *color); 249 236 … … 297 284 298 285 /*** conversion functions / I/O conversions ***/ 299 Average *ReadRawAverage (FILE *f, int Naverage, int format );286 Average *ReadRawAverage (FILE *f, int Naverage, int format, SecFilt **primary); 300 287 Measure *ReadRawMeasure (FILE *f, int Nmeasure, int format); 301 288 SecFilt *ReadRawSecFilt (FILE *f, int Nsecfilt, int format); 302 int WriteRawAverage (FILE *f, Average *average, int Naverage, int format );289 int WriteRawAverage (FILE *f, Average *average, int Naverage, int format, SecFilt *primary); 303 290 int WriteRawMeasure (FILE *f, Measure *measure, int Nmeasure, int format); 304 291 int WriteRawSecFilt (FILE *f, SecFilt *secfilt, int Nsecfilt, int format); 305 292 306 Average *FtableToAverage (FTable *ftable, int *Naverage, int *format); 307 Average *AverageLoneosToInternal (AverageLoneos *in, int Nvalues); 308 Average *AverageElixirToInternal (AverageElixir *in, int Nvalues); 309 Average *AveragePanstarrsToInternal (AveragePanstarrs *in, int Nvalues); 310 Average *AveragePMtestToInternal (AveragePMtest *in, int Nvalues); 311 AverageLoneos *AverageInternalToLoneos (Average *in, int Nvalues); 312 AverageElixir *AverageInternalToElixir (Average *in, int Nvalues); 313 AveragePanstarrs *AverageInternalToPanstarrs (Average *in, int Nvalues); 314 AveragePMtest *AverageInternalToPMtest (Average *in, int Nvalues); 315 293 Average *FtableToAverage (FTable *ftable, int *Naverage, int *format, SecFilt **primary); 316 294 Measure *FtableToMeasure (FTable *ftable, int *Nmeasure, int *format); 317 Measure *MeasureLoneosToInternal (MeasureLoneos *in, int Nvalues);318 Measure *MeasureElixirToInternal (MeasureElixir *in, int Nvalues);319 Measure *MeasurePanstarrsToInternal (MeasurePanstarrs *in, int Nvalues);320 MeasureLoneos *MeasureInternalToLoneos (Measure *in, int Nvalues);321 MeasureElixir *MeasureInternalToElixir (Measure *in, int Nvalues);322 MeasurePanstarrs *MeasureInternalToPanstarrs (Measure *in, int Nvalues);323 324 295 SecFilt *FtableToSecFilt (FTable *ftable, int *Nsecfilt, int *format); 325 SecFilt *SecFiltLoneosToInternal (SecFiltLoneos *in, int Nvalues); 326 SecFilt *SecFiltElixirToInternal (SecFiltElixir *in, int Nvalues); 327 SecFilt *SecFiltPanstarrsToInternal (SecFiltPanstarrs *in, int Nvalues); 328 SecFiltLoneos *SecFiltInternalToLoneos (SecFilt *in, int Nvalues); 329 SecFiltElixir *SecFiltInternalToElixir (SecFilt *in, int Nvalues); 330 SecFiltPanstarrs *SecFiltInternalToPanstarrs (SecFilt *in, int Nvalues); 331 332 int AverageToFtable (FTable *ftable, Average *average, int Naverage, int format); 296 int FtableToImage (FTable *ftable, Header *theader, int *format); 297 298 int AverageToFtable (FTable *ftable, Average *average, int Naverage, int format, SecFilt *primary); 333 299 int MeasureToFtable (FTable *ftable, Measure *measure, int Nmeasure, int format); 334 300 int SecFiltToFtable (FTable *ftable, SecFilt *secfilt, int Nsecfilt, int format); 301 int ImageToFtable (FTable *ftable, Header *theader, int format); 302 int ImageToVtable (VTable *vtable, Header *theader, int format); 303 304 Image *ImageElixirToInternal (ImageElixir *in, int Nvalues); 305 Image *ImageLoneosToInternal (ImageLoneos *in, int Nvalues); 306 Image *ImagePanstarrsToInternal (ImagePanstarrs *in, int Nvalues); 307 308 ImageElixir *ImageInternalToElixir (Image *in, int Nvalues); 309 ImageLoneos *ImageInternalToLoneos (Image *in, int Nvalues); 310 ImagePanstarrs *ImageInternalToPanstarrs (Image *in, int Nvalues); 311 312 Average *AverageLoneosToInternal (AverageLoneos *in, int Nvalues, SecFilt **primary); 313 Average *AverageElixirToInternal (AverageElixir *in, int Nvalues, SecFilt **primary); 314 Average *AveragePMtestToInternal (AveragePMtest *in, int Nvalues); 315 Average *AveragePanstarrsToInternal (AveragePanstarrs *in, int Nvalues); 316 317 AverageLoneos *AverageInternalToLoneos (Average *in, int Nvalues, SecFilt *primary); 318 AverageElixir *AverageInternalToElixir (Average *in, int Nvalues, SecFilt *primary); 319 AveragePMtest *AverageInternalToPMtest (Average *in, int Nvalues); 320 AveragePanstarrs *AverageInternalToPanstarrs (Average *in, int Nvalues); 321 322 Measure *MeasureLoneosToInternal (MeasureLoneos *in, int Nvalues); 323 Measure *MeasureElixirToInternal (MeasureElixir *in, int Nvalues); 324 Measure *MeasurePanstarrsToInternal (MeasurePanstarrs *in, int Nvalues); 325 326 MeasureLoneos *MeasureInternalToLoneos (Measure *in, int Nvalues); 327 MeasureElixir *MeasureInternalToElixir (Measure *in, int Nvalues); 328 MeasurePanstarrs *MeasureInternalToPanstarrs (Measure *in, int Nvalues); 329 330 SecFilt *SecFiltLoneosToInternal (SecFiltLoneos *in, int Nvalues); 331 SecFilt *SecFiltElixirToInternal (SecFiltElixir *in, int Nvalues); 332 SecFilt *SecFiltPanstarrsToInternal (SecFiltPanstarrs *in, int Nvalues); 333 334 SecFiltLoneos *SecFiltInternalToLoneos (SecFilt *in, int Nvalues); 335 SecFiltElixir *SecFiltInternalToElixir (SecFilt *in, int Nvalues); 336 SecFiltPanstarrs *SecFiltInternalToPanstarrs (SecFilt *in, int Nvalues); 335 337 336 338 /*** DVO image db I/O Functions ***/ … … 345 347 int dvo_image_addrows (FITS_DB *db, Image *new, int Nnew); 346 348 void dvo_image_create (FITS_DB *db, double ZeroPoint); 347 348 int FtableToImage (FTable *ftable, Header *theader, int *format);349 int ImageToFtable (FTable *ftable, Header *theader, int format);350 int ImageToVtable (VTable *vtable, Header *theader, int format);351 Image *ImageElixirToInternal (ImageElixir *in, int Nvalues);352 ImageElixir *ImageInternalToElixir (Image *in, int Nvalues);353 Image *ImageLoneosToInternal (ImageLoneos *in, int Nvalues);354 ImageLoneos *ImageInternalToLoneos (Image *in, int Nvalues);355 Image *ImagePanstarrsToInternal (ImagePanstarrs *in, int Nvalues);356 ImagePanstarrs *ImageInternalToPanstarrs (Image *in, int Nvalues);357 349 358 350 /* skyregion APIs */ -
branches/dvo-mods-2007-02/Ohana/src/libdvo/src/LoadPhotcodes.c
r12008 r12011 3 3 # define NCTERMS 4 4 4 # define F 0.001 5 # define NO_MAG 100.0 5 /* # define NO_MAG 100.0 */ 6 6 7 7 static PhotCodeData *photcodes = NULL; … … 380 380 } 381 381 382 /**** conversion to INTERNAL vs TABLE types makes the iPhot versions irrelevant ****/383 # if (0)384 /******** photometry conversions *********/385 double PhotInst (Measure *measure) {386 387 short Mi;388 double M;389 390 Mi = iPhotInst (measure);391 M = 0.001*Mi;392 return (M);393 }394 395 /****/396 double PhotCat (Measure *measure) {397 398 short Mi;399 double M;400 401 Mi = iPhotCat (measure);402 M = 0.001*Mi;403 return (M);404 }405 406 /****/407 double PhotSys (Measure *measure, Average *average, SecFilt *secfilt) {408 409 short Mi;410 double M;411 412 Mi = iPhotSys (measure, average, secfilt);413 M = 0.001*Mi;414 return (M);415 }416 417 /****/418 double PhotRel (Measure *measure, Average *average, SecFilt *secfilt) {419 420 short Mi;421 double M;422 423 Mi = iPhotRel (measure, average, secfilt);424 M = 0.001*Mi;425 return (M);426 }427 428 /****/429 double PhotCal (Measure *thisone, Average *average, SecFilt *secfilt, Measure *measure, PhotCode *code) {430 431 short Mi;432 double M;433 434 Mi = iPhotCal (thisone, average, secfilt, measure, code);435 M = 0.001*Mi;436 return (M);437 }438 439 /****/440 double PhotRef (PhotCode *code, Average *average, SecFilt *secfilt, Measure *measure) {441 442 short Mi;443 double M;444 445 Mi = iPhotRef (code, average, secfilt, measure);446 M = 0.001*Mi;447 return (M);448 }449 450 /****/451 double PhotAve (PhotCode *code, Average *average, SecFilt *secfilt) {452 453 short Mi;454 double M;455 456 Mi = iPhotAve (code, average, secfilt);457 M = 0.001*Mi;458 return (M);459 }460 461 /****/462 double PhotdM (PhotCode *code, Average *average, SecFilt *secfilt) {463 464 short Mi;465 double M;466 467 Mi = iPhotdM (code, average, secfilt);468 M = 0.001*Mi;469 return (M);470 }471 472 /****/473 double PhotXm (PhotCode *code, Average *average, SecFilt *secfilt) {474 475 int Mi;476 double Xm;477 478 Mi = iPhotXm (code, average, secfilt);479 Xm = (Mi == NO_MAG) ? -1.0 : pow (10.0, 0.01*Mi);480 return (Xm);481 }482 483 # endif484 485 382 /******** internal photometry conversions (keeps values in short int millimags) *********/ 486 383 float PhotInst (Measure *measure) { … … 539 436 540 437 /* for DEP, color must be made of PRI/SEC */ 541 mc = iPhotColor(average, secfilt, NULL, code);438 mc = PhotColorForCode (average, secfilt, NULL, code); 542 439 if (mc == NO_MAG) return (Mcat); 543 440 mc = mc - F*code[0].dX; … … 570 467 571 468 /* for DEP, color must be made of PRI/SEC */ 572 mc = iPhotColor(average, secfilt, NULL, code);469 mc = PhotColorForCode (average, secfilt, NULL, code); 573 470 if (mc == NO_MAG) return (Mrel); 574 471 mc = mc - F*code[0].dX; … … 606 503 Mcal = PhotRel (thisone, average, secfilt) + F*code[0].C; 607 504 608 mc = iPhotColor(average, secfilt, measure, code);505 mc = PhotColorForCode (average, secfilt, measure, code); 609 506 if (mc == NO_MAG) return (Mcal); 610 507 mc = mc - F*code[0].dX; … … 621 518 622 519 /* color term may not use DEP magnitude */ 623 float iPhotColor(Average *average, SecFilt *secfilt, Measure *measure, PhotCode *code) {520 float PhotColorForCode (Average *average, SecFilt *secfilt, Measure *measure, PhotCode *code) { 624 521 625 522 int i, Ns1, Ns2, Ns; … … 633 530 Ns2 = photcodes[0].hashNsec[code[0].c2]; 634 531 635 m1 = (Ns1 == -1) ? average[0].M: secfilt[Ns1].M;636 m2 = (Ns2 == -1) ? average[0].M: secfilt[Ns2].M;532 m1 = (Ns1 == -1) ? NO_MAG : secfilt[Ns1].M; 533 m2 = (Ns2 == -1) ? NO_MAG : secfilt[Ns2].M; 637 534 mc = ((m1 == NO_MAG) || (m2 == NO_MAG)) ? NO_MAG : (m1 - m2); 638 535 return (mc); … … 650 547 } else { 651 548 Ns = photcodes[0].hashNsec[color[0].code]; 652 m1 = (Ns == -1) ? average[0].M: secfilt[Ns].M;549 m1 = (Ns == -1) ? NO_MAG : secfilt[Ns].M; 653 550 } 654 551 … … 664 561 } else { 665 562 Ns = photcodes[0].hashNsec[color[0].code]; 666 m2 = (Ns == -1) ? average[0].M: secfilt[Ns].M;563 m2 = (Ns == -1) ? NO_MAG : secfilt[Ns].M; 667 564 } 668 565 mc = ((m1 == NO_MAG) || (m2 == NO_MAG)) ? NO_MAG : (m1 - m2); … … 678 575 679 576 Ns = photcodes[0].hashNsec[code[0].code]; 680 Mave = (Ns == -1) ? average[0].M: secfilt[Ns].M;577 Mave = (Ns == -1) ? NO_MAG : secfilt[Ns].M; 681 578 Mref = Mave + F*code[0].C; 682 579 683 mc = iPhotColor(average, secfilt, measure, code);580 mc = PhotColorForCode (average, secfilt, measure, code); 684 581 if (mc == NO_MAG) return (Mref); 685 582 mc = mc - F*code[0].dX; … … 702 599 703 600 Ns = photcodes[0].hashNsec[code[0].code]; 704 Mave = (Ns == -1) ? average[0].M: secfilt[Ns].M;601 Mave = (Ns == -1) ? NO_MAG : secfilt[Ns].M; 705 602 return (Mave); 706 603 } 707 604 708 /*** note that this is NOT a wrapper around iPhotdM ***/709 605 float PhotdM (PhotCode *code, Average *average, SecFilt *secfilt) { 710 606 … … 713 609 714 610 Ns = photcodes[0].hashNsec[code[0].code]; 715 dM = (Ns == -1) ? average[0].dM: secfilt[Ns].dM;611 dM = (Ns == -1) ? NO_MAG : secfilt[Ns].dM; 716 612 return (dM); 717 613 } 718 614 719 /*** note that this is NOT a wrapper around iPhotXm ***/720 615 float PhotXm (PhotCode *code, Average *average, SecFilt *secfilt) { 721 616 … … 725 620 726 621 Ns = photcodes[0].hashNsec[code[0].code]; 727 Mi = (Ns == -1) ? average[0].Xm: secfilt[Ns].Xm;622 Mi = (Ns == -1) ? NO_MAG : secfilt[Ns].Xm; 728 623 Xm = (Mi == NO_MAG) ? -1.0 : pow (10.0, 0.01*Mi); 729 624 return (Xm); … … 749 644 } else { 750 645 Ns = photcodes[0].hashNsec[code[0].code]; 751 M1 = (Ns == -1) ? average[0].M: secfilt[Ns].M;646 M1 = (Ns == -1) ? NO_MAG : secfilt[Ns].M; 752 647 } 753 648 … … 765 660 } else { 766 661 Ns = photcodes[0].hashNsec[code[0].code]; 767 M2 = (Ns == -1) ? average[0].M: secfilt[Ns].M;662 M2 = (Ns == -1) ? NO_MAG : secfilt[Ns].M; 768 663 } 769 664 -
branches/dvo-mods-2007-02/Ohana/src/libdvo/src/dvo_catalog_mef.c
r8328 r12011 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) || (catalog[0].catformat == DVO_FORMAT_LONEOS)) { 201 Nallfilt = catalog[0].Nsecfilt; 202 Nsecfilt = catalog[0].Nsecfilt - 1; 203 Ntotal = Nsecfilt * catalog[0].Naverage; 204 ALLOCATE (primary, SecFilt, catalog[0].Naverage); 205 ALLOCATE (secfilt, SecFilt, Ntotal); 206 207 for (i = 0; i < catalog[0].Naverage; i++) { 208 primary[i] = catalog[0].secfilt[i*Nallfilt + 0]; 209 for (j = 0; j < Nsecfilt; j++) { 210 secfilt[i*Nsecfilt + j] = catalog[0].secfilt[i*Nallfilt + j + 1]; 211 } 212 } 213 } else { 214 primary = NULL; 215 secfilt = catalog[0].secfilt; 216 Nsecfilt = catalog[0].Nsecfilt; 217 } 218 173 219 /* write out Average table (convert to FITS table format) */ 174 AverageToFtable (&ftable, catalog[0].average, catalog[0].Naverage, catalog[0].catformat );220 AverageToFtable (&ftable, catalog[0].average, catalog[0].Naverage, catalog[0].catformat, primary); 175 221 if (!gfits_fwrite_Theader (catalog[0].f, &header)) { 176 222 fprintf (stderr, "can't write table header"); … … 211 257 212 258 /* 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); 259 Nitems = catalog[0].Naverage * Nsecfilt; 260 SecFiltToFtable (&ftable, secfilt, Nitems, catalog[0].catformat); 261 if (!gfits_fwrite_Theader (catalog[0].f, &header)) { 262 fprintf (stderr, "can't write table header"); 263 return (FALSE); 264 } 265 if (!gfits_fwrite_table (catalog[0].f, &ftable)) { 266 fprintf (stderr, "can't write table data"); 267 return (FALSE); 268 } 269 gfits_free_table (&ftable); 270 gfits_free_header (&header); 271 272 /* free temp storage */ 273 if (primary != NULL) { 274 free (primary); 275 free (secfilt); 276 } 225 277 226 278 return (TRUE); … … 228 280 229 281 /* 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 table282 catalog data is: 283 header (bitpix == 8) 284 matrix (empty) 285 average header 286 average table 287 measure header 288 measure table 289 missing header 290 missing table 291 secfilt header 292 secfilt table 241 293 */ 242 294 -
branches/dvo-mods-2007-02/Ohana/src/libdvo/src/dvo_catalog_raw.c
r12008 r12011 12 12 struct stat filestatus; 13 13 char format[80], telescope[80]; 14 SecFilt *primary; 14 15 15 16 f = catalog[0].f; … … 122 123 123 124 /* read and convert the averages (use a macro to clean this up?) */ 125 /* old versions of DVO stored one of the average magnitudes in Average. we save this if needed */ 124 126 if (catalog[0].catflags & LOAD_AVES) { 125 catalog[0].average = ReadRawAverage (catalog[0].f, catalog[0].Naverage, catalog[0].catformat );127 catalog[0].average = ReadRawAverage (catalog[0].f, catalog[0].Naverage, catalog[0].catformat, &primary); 126 128 } else { 127 129 /* skip over averages */ … … 159 161 Nitems = catalog[0].Naverage * catalog[0].Nsecfilt; 160 162 catalog[0].secfilt = ReadRawSecFilt (catalog[0].f, Nitems, catalog[0].catformat); 163 164 /* if primary is defined, we were supplied with one additional average magnitude from Average 165 we need to interleave these magnitudes with the secfilt entries just loaded */ 166 if (primary != NULL) { 167 int Ntmpfilt, Nsecfilt, Ntotal, i, j; 168 SecFilt *tmpfilt; 169 tmpfilt = catalog[0].secfilt; 170 Ntmpfilt = catalog[0].Nsecfilt; 171 Nsecfilt = catalog[0].Nsecfilt + 1; 172 Ntotal = Nsecfilt * catalog[0].Naverage; 173 ALLOCATE (catalog[0].secfilt, SecFilt, Ntotal); 174 for (i = 0; i < catalog[0].Naverage; i++) { 175 catalog[0].secfilt[i*Nsecfilt + 0] = primary[i]; 176 for (j = 0; j < Ntmpfilt; j++) { 177 catalog[0].secfilt[i*Nsecfilt + j + 1] = tmpfilt[i*Ntmpfilt + j]; 178 } 179 } 180 catalog[0].Nsecfilt = Nsecfilt; 181 free (primary); 182 } 183 161 184 } else { 162 185 /* skip over secfilts */ 163 186 Nskip = catalog[0].Nsecfilt * catalog[0].Naverage * SecFiltSize; 164 187 fseek (f, Nskip, SEEK_CUR); 188 if (primary != NULL) free (primary); 165 189 } 166 190 … … 196 220 int Nitems, nitems; 197 221 FILE *f; 222 SecFilt *primary; 223 SecFilt *secfilt; 224 int i, j, Nsecfilt, Nallfilt, Ntotal; 198 225 199 226 if (catalog[0].Naverage == 0) { … … 227 254 } 228 255 256 /* for the appropriate types, pull out the first secfilt and pass to WriteRawAverage as primary */ 257 if ((catalog[0].catformat == DVO_FORMAT_ELIXIR) || (catalog[0].catformat == DVO_FORMAT_LONEOS)) { 258 Nallfilt = catalog[0].Nsecfilt; 259 Nsecfilt = catalog[0].Nsecfilt - 1; 260 Ntotal = Nsecfilt * catalog[0].Naverage; 261 ALLOCATE (primary, SecFilt, catalog[0].Naverage); 262 ALLOCATE (secfilt, SecFilt, Ntotal); 263 264 for (i = 0; i < catalog[0].Naverage; i++) { 265 primary[i] = catalog[0].secfilt[i*Nallfilt + 0]; 266 for (j = 0; j < Nsecfilt; j++) { 267 secfilt[i*Nsecfilt + j] = catalog[0].secfilt[i*Nallfilt + j + 1]; 268 } 269 } 270 } else { 271 primary = NULL; 272 secfilt = catalog[0].secfilt; 273 Nsecfilt = catalog[0].Nsecfilt; 274 } 275 229 276 /* write averages and measures */ 230 WriteRawAverage (f, catalog[0].average, catalog[0].Naverage, catalog[0].catformat );277 WriteRawAverage (f, catalog[0].average, catalog[0].Naverage, catalog[0].catformat, primary); 231 278 WriteRawMeasure (f, catalog[0].measure, catalog[0].Nmeasure, catalog[0].catformat); 232 279 … … 242 289 Nitems = catalog[0].Naverage * catalog[0].Nsecfilt; 243 290 WriteRawSecFilt (f, catalog[0].secfilt, Nitems, catalog[0].catformat); 291 292 /* free temp storage */ 293 if (primary != NULL) { 294 free (primary); 295 free (secfilt); 296 } 297 244 298 return (TRUE); 245 299 } … … 252 306 /** Average / Raw Table conversions **/ 253 307 254 Average *ReadRawAverage (FILE *f, int Naverage, int format ) {308 Average *ReadRawAverage (FILE *f, int Naverage, int format, SecFilt **primary) { 255 309 256 310 int nitems; … … 261 315 // AveragePMtest *tmpAveragePMtest; 262 316 317 /* in the ELIXIR and LONEOS cases, we are supplied with an average magnitude in Average 318 in these cases, save these values in primary; otherwise set primary to NULL */ 319 *primary = NULL; 320 263 321 switch (format) { 264 322 case DVO_FORMAT_INTERNAL: … … 279 337 } 280 338 gfits_convert_AverageElixir (tmpAverageElixir, sizeof(AverageElixir), Naverage); 281 average = AverageElixirToInternal (tmpAverageElixir, Naverage );339 average = AverageElixirToInternal (tmpAverageElixir, Naverage, primary); 282 340 free (tmpAverageElixir); 283 341 break; … … 290 348 } 291 349 gfits_convert_AverageLoneos (tmpAverageLoneos, sizeof(AverageLoneos), Naverage); 292 average = AverageLoneosToInternal (tmpAverageLoneos, Naverage );350 average = AverageLoneosToInternal (tmpAverageLoneos, Naverage, primary); 293 351 free (tmpAverageLoneos); 294 352 break; … … 326 384 /* accepts and converts internal average formats and outputs 327 385 raw data in the specified format */ 328 int WriteRawAverage (FILE *f, Average *average, int Naverage, int format ) {386 int WriteRawAverage (FILE *f, Average *average, int Naverage, int format, SecFilt *primary) { 329 387 330 388 int nitems; … … 344 402 break; 345 403 case DVO_FORMAT_ELIXIR: 346 tmpAverageElixir = AverageInternalToElixir (average, Naverage );404 tmpAverageElixir = AverageInternalToElixir (average, Naverage, primary); 347 405 gfits_convert_AverageElixir (tmpAverageElixir, sizeof(AverageElixir), Naverage); 348 406 nitems = fwrite (tmpAverageElixir, sizeof(AverageElixir), Naverage, f); … … 354 412 break; 355 413 case DVO_FORMAT_LONEOS: 356 tmpAverageLoneos = AverageInternalToLoneos (average, Naverage );414 tmpAverageLoneos = AverageInternalToLoneos (average, Naverage, primary); 357 415 gfits_convert_AverageLoneos (tmpAverageLoneos, sizeof(AverageLoneos), Naverage); 358 416 nitems = fwrite (tmpAverageLoneos, sizeof(AverageLoneos), Naverage, f); -
branches/dvo-mods-2007-02/Ohana/src/libdvo/src/dvo_catalog_split.c
r8456 r12011 8 8 Matrix matrix; 9 9 FTable ftable; 10 SecFilt *primary; 10 11 Catalog *measure, *missing, *secfilt; 11 12 … … 54 55 return (FALSE); 55 56 } 56 catalog[0].average = FtableToAverage (&ftable, &catalog[0].Naverage, &catalog[0].catformat); 57 /* old versions of DVO stored one of the average magnitudes in Average. we save this if needed */ 58 catalog[0].average = FtableToAverage (&ftable, &catalog[0].Naverage, &catalog[0].catformat, &primary); 57 59 if (Naverage != catalog[0].Naverage) { 58 60 fprintf (stderr, "Warning: mismatch between Naverage in PHU and Table headers (%d vs %d)\n", Naverage, catalog[0].Naverage); … … 240 242 fprintf (stderr, "Warning: mismatch between Nsecfilt items in PHU and Table headers (%d vs %d)\n", Nexpect, Nitems); 241 243 } 244 245 /* if primary is defined, we were supplied with one additional average magnitude from Average 246 we need to interleave these magnitudes with the secfilt entries just loaded */ 247 if (primary != NULL) { 248 int Ntmpfilt, Ntotal, i, j; 249 SecFilt *tmpfilt; 250 tmpfilt = catalog[0].secfilt; 251 Ntmpfilt = catalog[0].Nsecfilt; 252 Nsecfilt = catalog[0].Nsecfilt + 1; 253 Ntotal = Nsecfilt * catalog[0].Naverage; 254 ALLOCATE (catalog[0].secfilt, SecFilt, Ntotal); 255 for (i = 0; i < catalog[0].Naverage; i++) { 256 catalog[0].secfilt[i*Nsecfilt + 0] = primary[i]; 257 for (j = 0; j < Ntmpfilt; j++) { 258 catalog[0].secfilt[i*Nsecfilt + j + 1] = tmpfilt[i*Ntmpfilt + j]; 259 } 260 } 261 catalog[0].Nsecfilt = Nsecfilt; 262 free (primary); 263 } 264 265 242 266 gfits_free_header (&header); 243 267 gfits_free_matrix (&matrix); 244 } 268 } else { 269 if (primary != NULL) free (primary); 270 } 271 245 272 catalog[0].secfilt_catalog = secfilt; 246 273 … … 254 281 255 282 /* save_catalog_split writes complete new files from scratch */ 256 257 283 int dvo_catalog_save_split (Catalog *catalog, char VERBOSE) { 258 284 … … 261 287 Header header; 262 288 FTable ftable; 263 Catalog *measure, *missing, *secfilt; 289 Catalog *catfile; 290 SecFilt *primary, *secfilt; 291 int i, j, Nsecfilt, Nallfilt, Ntotal; 264 292 265 293 ftable.header = &header; … … 289 317 /* in split mode, we can save only part of the data */ 290 318 319 /* for the appropriate types, pull out the first secfilt and pass to AverageToFtable as primary */ 320 if ((catalog[0].catformat == DVO_FORMAT_ELIXIR) || (catalog[0].catformat == DVO_FORMAT_LONEOS)) { 321 if (catalog[0].secfilt == NULL) { 322 fprintf (stderr, "missing secfilt, cannot build output averages (dvo_catalog_split.c:544)\n"); 323 exit (1); 324 } 325 secfilt = catalog[0].secfilt; 326 327 Nallfilt = catalog[0].Nsecfilt; 328 Nsecfilt = catalog[0].Nsecfilt - 1; 329 Ntotal = Nsecfilt * catalog[0].Naverage; 330 ALLOCATE (primary, SecFilt, catalog[0].Naverage); 331 ALLOCATE (secfilt, SecFilt, Ntotal); 332 333 for (i = 0; i < catalog[0].Naverage; i++) { 334 primary[i] = secfilt[i*Nallfilt + 0]; 335 for (j = 0; j < Nsecfilt; j++) { 336 secfilt[i*Nsecfilt + j] = catalog[0].secfilt[i*Nallfilt + j + 1]; 337 } 338 } 339 } else { 340 primary = NULL; 341 secfilt = catalog[0].secfilt; 342 Nsecfilt = catalog[0].Nsecfilt; 343 } 344 291 345 /*** Average Table ***/ 292 346 … … 303 357 304 358 /* write out Average table (convert to FITS table format) */ 305 AverageToFtable (&ftable, catalog[0].average, catalog[0].Naverage, catalog[0].catformat );359 AverageToFtable (&ftable, catalog[0].average, catalog[0].Naverage, catalog[0].catformat, primary); 306 360 if (!gfits_fwrite_Theader (catalog[0].f, &header)) { 307 361 fprintf (stderr, "can't write table header"); … … 317 371 318 372 /*** Measure Table ***/ 319 320 373 if (catalog[0].measure != NULL) { 321 374 322 measure = catalog[0].measure_catalog; 375 /* catalog file data is stored in separate structure */ 376 catfile = catalog[0].measure_catalog; 323 377 324 378 /* XXX EAM : warn about this condition; add code to handle? */ … … 329 383 330 384 /* rewind file pointers and truncate (file is still open) */ 331 fseek ( measure[0].f, 0, SEEK_SET);332 ftruncate (fileno ( measure[0].f), 0);385 fseek (catfile[0].f, 0, SEEK_SET); 386 ftruncate (fileno (catfile[0].f), 0); 333 387 334 388 /* write table PHU header */ 335 if (!gfits_fwrite_header ( measure[0].f, &measure[0].header)) {389 if (!gfits_fwrite_header (catfile[0].f, &catfile[0].header)) { 336 390 fprintf (stderr, "can't write primary header"); 337 391 return (FALSE); … … 339 393 340 394 /* this is probably a NOP, do I have to keep it in? */ 341 gfits_create_matrix (& measure[0].header, &matrix);342 if (!gfits_fwrite_matrix ( measure[0].f, &matrix)) {395 gfits_create_matrix (&catfile[0].header, &matrix); 396 if (!gfits_fwrite_matrix (catfile[0].f, &matrix)) { 343 397 fprintf (stderr, "can't write primary matrix"); 344 398 return (FALSE); … … 348 402 /* write out Measure table (convert to FITS table format) */ 349 403 MeasureToFtable (&ftable, catalog[0].measure, catalog[0].Nmeasure, catalog[0].catformat); 350 if (!gfits_fwrite_Theader ( measure[0].f, &header)) {404 if (!gfits_fwrite_Theader (catfile[0].f, &header)) { 351 405 fprintf (stderr, "can't write table header"); 352 406 return (FALSE); 353 407 } 354 if (!gfits_fwrite_table ( measure[0].f, &ftable)) {408 if (!gfits_fwrite_table (catfile[0].f, &ftable)) { 355 409 fprintf (stderr, "can't write table data"); 356 410 return (FALSE); … … 361 415 362 416 /*** Missing Table ***/ 363 364 417 if (catalog[0].missing != NULL) { 365 418 366 missing = catalog[0].missing_catalog; 419 /* catalog data is stored in separate catalog */ 420 catfile = catalog[0].missing_catalog; 367 421 368 422 /* rewind file pointers and truncate (file is still open) */ 369 fseek ( missing[0].f, 0, SEEK_SET);370 ftruncate (fileno ( missing[0].f), 0);423 fseek (catfile[0].f, 0, SEEK_SET); 424 ftruncate (fileno (catfile[0].f), 0); 371 425 372 426 /* write table PHU header */ 373 if (!gfits_fwrite_header ( missing[0].f, &missing[0].header)) {427 if (!gfits_fwrite_header (catfile[0].f, &catfile[0].header)) { 374 428 fprintf (stderr, "can't write primary header"); 375 429 return (FALSE); … … 377 431 378 432 /* this is probably a NOP, do I have to keep it in? */ 379 gfits_create_matrix (& missing[0].header, &matrix);380 if (!gfits_fwrite_matrix ( missing[0].f, &matrix)) {433 gfits_create_matrix (&catfile[0].header, &matrix); 434 if (!gfits_fwrite_matrix (catfile[0].f, &matrix)) { 381 435 fprintf (stderr, "can't write primary matrix"); 382 436 return (FALSE); … … 386 440 /* write out Missing table (convert to FITS table format) */ 387 441 gfits_table_set_Missing (&ftable, catalog[0].missing, catalog[0].Nmissing); 388 if (!gfits_fwrite_Theader ( missing[0].f, &header)) {442 if (!gfits_fwrite_Theader (catfile[0].f, &header)) { 389 443 fprintf (stderr, "can't write table header"); 390 444 return (FALSE); 391 445 } 392 if (!gfits_fwrite_table ( missing[0].f, &ftable)) {446 if (!gfits_fwrite_table (catfile[0].f, &ftable)) { 393 447 fprintf (stderr, "can't write table data"); 394 448 return (FALSE); … … 399 453 400 454 /*** Secfilt Table ***/ 401 402 455 if (catalog[0].secfilt != NULL) { 403 456 404 secfilt = catalog[0].secfilt_catalog; 457 /* catalog file data is stored in a separate catalog structure */ 458 catfile = catalog[0].secfilt_catalog; 405 459 406 460 /* rewind file pointers and truncate (file is still open) */ 407 fseek ( secfilt[0].f, 0, SEEK_SET);408 ftruncate (fileno ( secfilt[0].f), 0);461 fseek (catfile[0].f, 0, SEEK_SET); 462 ftruncate (fileno (catfile[0].f), 0); 409 463 410 464 /* write table PHU header */ 411 if (!gfits_fwrite_header ( secfilt[0].f, &secfilt[0].header)) {465 if (!gfits_fwrite_header (catfile[0].f, &catfile[0].header)) { 412 466 fprintf (stderr, "can't write primary header"); 413 467 return (FALSE); … … 415 469 416 470 /* this is probably a NOP, do I have to keep it in? */ 417 gfits_create_matrix (& secfilt[0].header, &matrix);418 if (!gfits_fwrite_matrix ( secfilt[0].f, &matrix)) {471 gfits_create_matrix (&catfile[0].header, &matrix); 472 if (!gfits_fwrite_matrix (catfile[0].f, &matrix)) { 419 473 fprintf (stderr, "can't write primary matrix"); 420 474 return (FALSE); … … 424 478 /* write out SecFilt table (convert to FITS table format) */ 425 479 Nitems = catalog[0].Naverage * catalog[0].Nsecfilt; 426 SecFiltToFtable (&ftable, catalog[0].secfilt, Nitems, catalog[0].catformat);427 if (!gfits_fwrite_Theader ( secfilt[0].f, &header)) {480 SecFiltToFtable (&ftable, secfilt, Nitems, catalog[0].catformat); 481 if (!gfits_fwrite_Theader (catfile[0].f, &header)) { 428 482 fprintf (stderr, "can't write table header"); 429 483 return (FALSE); 430 484 } 431 if (!gfits_fwrite_table ( secfilt[0].f, &ftable)) {485 if (!gfits_fwrite_table (catfile[0].f, &ftable)) { 432 486 fprintf (stderr, "can't write table data"); 433 487 return (FALSE); … … 435 489 gfits_free_table (&ftable); 436 490 gfits_free_header (&header); 491 } 492 493 /* free temp storage */ 494 if (primary != NULL) { 495 free (primary); 496 free (secfilt); 437 497 } 438 498 … … 453 513 FTable ftable; 454 514 VTable vtable; 455 Catalog *measure, *missing, *secfilt; 515 Catalog *catfile; 516 SecFilt *primary, *secfilt; 517 int j, Nsecfilt, Nallfilt, Ntotal; 456 518 457 519 ftable.header = &header; … … 480 542 } 481 543 544 /** for the appropriate types, pull out the first secfilt and pass to AverageToFtable as primary **/ 545 if ((catalog[0].catformat == DVO_FORMAT_ELIXIR) || (catalog[0].catformat == DVO_FORMAT_LONEOS)) { 546 if (catalog[0].secfilt == NULL) { 547 fprintf (stderr, "missing secfilt, cannot build output averages (dvo_catalog_split.c:544)\n"); 548 exit (1); 549 } 550 secfilt = catalog[0].secfilt; 551 552 Nallfilt = catalog[0].Nsecfilt; 553 Nsecfilt = catalog[0].Nsecfilt - 1; 554 Ntotal = Nsecfilt * catalog[0].Naverage; 555 ALLOCATE (primary, SecFilt, catalog[0].Naverage); 556 ALLOCATE (secfilt, SecFilt, Ntotal); 557 558 for (i = 0; i < catalog[0].Naverage; i++) { 559 primary[i] = secfilt[i*Nallfilt + 0]; 560 for (j = 0; j < Nsecfilt; j++) { 561 secfilt[i*Nsecfilt + j] = catalog[0].secfilt[i*Nallfilt + j + 1]; 562 } 563 } 564 } else { 565 primary = NULL; 566 secfilt = catalog[0].secfilt; 567 Nsecfilt = catalog[0].Nsecfilt; 568 } 569 482 570 /*** Average Table ***/ 483 484 571 if (catalog[0].average != NULL) { 485 572 … … 492 579 493 580 /* write out Average table (convert to FITS table format) */ 494 AverageToFtable (&ftable, catalog[0].average, catalog[0].Naverage, catalog[0].catformat );581 AverageToFtable (&ftable, catalog[0].average, catalog[0].Naverage, catalog[0].catformat, primary); 495 582 /* convert only output rows to vtable */ 496 583 gfits_table_to_vtable (&ftable, &vtable, catalog[0].Nave_disk, Nout); … … 510 597 511 598 /*** Measure Table ***/ 512 513 599 if (catalog[0].measure != NULL) { 514 600 515 measure = catalog[0].measure_catalog;601 catfile = catalog[0].measure_catalog; 516 602 517 603 /* skip past PHU header and matrix */ 518 Nskip = measure[0].header.size + gfits_matrix_size (&measure[0].header);519 fseek ( measure[0].f, Nskip, SEEK_SET);604 Nskip = catfile[0].header.size + gfits_matrix_size (&catfile[0].header); 605 fseek (catfile[0].f, Nskip, SEEK_SET); 520 606 521 607 Ndisk = catalog[0].Nmeas_disk; … … 547 633 vtable.pad = vtable.size - Nx*Ny; 548 634 549 if (!gfits_fwrite_Theader ( measure[0].f, &header)) {635 if (!gfits_fwrite_Theader (catfile[0].f, &header)) { 550 636 fprintf (stderr, "can't write table header"); 551 637 return (FALSE); 552 638 } 553 if (!gfits_fwrite_vtable ( measure[0].f, &vtable)) {639 if (!gfits_fwrite_vtable (catfile[0].f, &vtable)) { 554 640 fprintf (stderr, "can't write table data"); 555 641 return (FALSE); … … 566 652 if (catalog[0].missing != NULL) { 567 653 568 missing= catalog[0].missing_catalog;654 catfile = catalog[0].missing_catalog; 569 655 570 656 /* rewind file pointers and truncate (file is still open) */ 571 fseek ( missing[0].f, 0, SEEK_SET);572 ftruncate (fileno ( missing[0].f), 0);657 fseek (catfile[0].f, 0, SEEK_SET); 658 ftruncate (fileno (catfile[0].f), 0); 573 659 574 660 /* write table PHU header */ 575 if (!gfits_fwrite_header ( missing[0].f, &missing[0].header)) {661 if (!gfits_fwrite_header (catfile[0].f, &catfile[0].header)) { 576 662 fprintf (stderr, "can't write primary header"); 577 663 return (FALSE); … … 579 665 580 666 /* this is probably a NOP, do I have to keep it in? */ 581 gfits_create_matrix (& missing[0].header, &matrix);582 if (!gfits_fwrite_matrix ( missing[0].f, &matrix)) {667 gfits_create_matrix (&catfile[0].header, &matrix); 668 if (!gfits_fwrite_matrix (catfile[0].f, &matrix)) { 583 669 fprintf (stderr, "can't write primary matrix"); 584 670 return (FALSE); … … 588 674 /* write out Missing table (convert to FITS table format) */ 589 675 gfits_table_set_Missing (&ftable, catalog[0].missing, catalog[0].Nmissing); 590 if (!gfits_fwrite_Theader ( missing[0].f, &header)) {676 if (!gfits_fwrite_Theader (catfile[0].f, &header)) { 591 677 fprintf (stderr, "can't write table header"); 592 678 return (FALSE); 593 679 } 594 if (!gfits_fwrite_table ( missing[0].f, &ftable)) {680 if (!gfits_fwrite_table (catfile[0].f, &ftable)) { 595 681 fprintf (stderr, "can't write table data"); 596 682 return (FALSE); … … 601 687 602 688 /*** Secfilt Table ***/ 603 604 689 if (catalog[0].secfilt != NULL) { 605 690 606 secfilt= catalog[0].secfilt_catalog;691 catfile = catalog[0].secfilt_catalog; 607 692 608 693 /* skip past PHU header and matrix */ 609 Nskip = secfilt[0].header.size + gfits_matrix_size (&secfilt[0].header);610 fseek ( secfilt[0].f, Nskip, SEEK_SET);694 Nskip = catfile[0].header.size + gfits_matrix_size (&catfile[0].header); 695 fseek (catfile[0].f, Nskip, SEEK_SET); 611 696 612 697 /* how many lines to write out? */ … … 616 701 /* convert to output format FITS table */ 617 702 Nitems = catalog[0].Naverage * catalog[0].Nsecfilt; 618 SecFiltToFtable (&ftable, catalog[0].secfilt, Nitems, catalog[0].catformat);703 SecFiltToFtable (&ftable, secfilt, Nitems, catalog[0].catformat); 619 704 /* convert only output rows to vtable */ 620 705 gfits_table_to_vtable (&ftable, &vtable, Ndisk, Nout); 621 706 622 if (!gfits_fwrite_Theader ( secfilt[0].f, &header)) {707 if (!gfits_fwrite_Theader (catfile[0].f, &header)) { 623 708 fprintf (stderr, "can't write table header"); 624 709 return (FALSE); 625 710 } 626 if (!gfits_fwrite_vtable ( secfilt[0].f, &vtable)) {711 if (!gfits_fwrite_vtable (catfile[0].f, &vtable)) { 627 712 fprintf (stderr, "can't write table data"); 628 713 return (FALSE); … … 631 716 gfits_free_table (&ftable); 632 717 gfits_free_header (&header); 718 } 719 720 /* free temp storage */ 721 if (primary != NULL) { 722 free (primary); 723 free (secfilt); 633 724 } 634 725 -
branches/dvo-mods-2007-02/Ohana/src/libdvo/src/dvo_convert.c
r12008 r12011 13 13 /*** Average / FTable conversion functions ***/ 14 14 15 Average *FtableToAverage (FTable *ftable, int *Naverage, int *format ) {15 Average *FtableToAverage (FTable *ftable, int *Naverage, int *format, SecFilt **primary) { 16 16 17 17 Average *average; 18 18 char extname[80]; 19 20 /* in the ELIXIR and LONEOS cases, we are supplied with an average magnitude in Average 21 in these cases, save these values in primary; otherwise set primary to NULL */ 22 *primary = NULL; 19 23 20 24 /* convert to the internal format */ … … 31 35 AverageElixir *tmpAverage; 32 36 tmpAverage = gfits_table_get_AverageElixir (ftable, Naverage, NULL); 33 average = AverageElixirToInternal (tmpAverage, *Naverage );37 average = AverageElixirToInternal (tmpAverage, *Naverage, primary); 34 38 free (tmpAverage); 35 39 *format = DVO_FORMAT_ELIXIR; … … 39 43 AverageLoneos *tmpAverage; 40 44 tmpAverage = gfits_table_get_AverageLoneos (ftable, Naverage, NULL); 41 average = AverageLoneosToInternal (tmpAverage, *Naverage );45 average = AverageLoneosToInternal (tmpAverage, *Naverage, primary); 42 46 free (tmpAverage); 43 47 *format = DVO_FORMAT_LONEOS; … … 72 76 } 73 77 74 int AverageToFtable (FTable *ftable, Average *average, int Naverage, int format ) {78 int AverageToFtable (FTable *ftable, Average *average, int Naverage, int format, SecFilt *primary) { 75 79 76 80 AverageElixir *tmpAverageElixir; … … 85 89 break; 86 90 case DVO_FORMAT_ELIXIR: 87 tmpAverageElixir = AverageInternalToElixir (average, Naverage );91 tmpAverageElixir = AverageInternalToElixir (average, Naverage, primary); 88 92 gfits_table_set_AverageElixir (ftable, tmpAverageElixir, Naverage); 89 93 free (tmpAverageElixir); 90 94 break; 91 95 case DVO_FORMAT_LONEOS: 92 tmpAverageLoneos = AverageInternalToLoneos (average, Naverage );93 gfits_table_set_AverageLoneos (ftable, tmpAverageLoneos , Naverage);96 tmpAverageLoneos = AverageInternalToLoneos (average, Naverage, primary); 97 gfits_table_set_AverageLoneos (ftable, tmpAverageLoneos, Naverage); 94 98 free (tmpAverageLoneos ); 95 99 break; -
branches/dvo-mods-2007-02/Ohana/src/libdvo/src/dvo_convert_elixir.c
r12008 r12011 78 78 79 79 /* convert elixir-format averages to internal averages */ 80 Average *AverageElixirToInternal (AverageElixir *in, int Nvalues ) {80 Average *AverageElixirToInternal (AverageElixir *in, int Nvalues, SecFilt **primary) { 81 81 82 82 int i; … … 84 84 85 85 ALLOCATE (out, Average, Nvalues); 86 ALLOCATE (*primary, SecFilt, Nvalues); 86 87 87 88 for (i = 0; i < Nvalues; i++) { 88 89 out[i].R = in[i].R; 89 90 out[i].D = in[i].D; 90 out[i].M = in[i].M * 0.001;91 out[i].dM = in[i].dM * 0.001;92 91 out[i].Xp = in[i].Xp; 93 out[i].Xm = in[i].Xm;94 92 out[i].Nm = in[i].Nm; 95 93 out[i].Nn = in[i].Nn; … … 97 95 out[i].offset = in[i].offset; 98 96 out[i].missing = in[i].missing; 99 out[i].Xg = in[i].Xg;100 97 101 98 /* these don't exist in Elixir */ … … 112 109 out[i].objID_hi = 0; 113 110 out[i].objID_lo = 0; 111 112 primary[0][i].M = in[i].M * 0.001; 113 primary[0][i].dM = in[i].dM * 0.001; 114 primary[0][i].Xm = in[i].Xm; 115 primary[0][i].Ncode = 0; 116 primary[0][i].Nused = 0; 117 118 // XXX drop this or keep this? 119 // primary[0][i].Xg = in[i].Xg; 114 120 } 115 121 return (out); … … 117 123 118 124 /* convert internal averages to elixir-format averages */ 119 AverageElixir *AverageInternalToElixir (Average *in, int Nvalues ) {125 AverageElixir *AverageInternalToElixir (Average *in, int Nvalues, SecFilt *primary) { 120 126 121 127 int i; … … 127 133 out[i].R = in[i].R; 128 134 out[i].D = in[i].D; 129 out[i].M = in[i].M * 1000.0;130 out[i].dM = in[i].dM * 1000.0;131 135 out[i].Xp = in[i].Xp; 132 out[i].Xm = in[i].Xm;133 136 out[i].Nm = in[i].Nm; 134 137 out[i].Nn = in[i].Nn; … … 136 139 out[i].offset = in[i].offset; 137 140 out[i].missing = in[i].missing; 138 out[i].Xg = in[i].Xg; 141 142 out[i].M = primary[i].M * 1000.0; 143 out[i].dM = primary[i].dM * 1000.0; 144 out[i].Xm = primary[i].Xm; 145 // out[i].Xg = in[i].Xg; 139 146 } 140 147 return (out); -
branches/dvo-mods-2007-02/Ohana/src/libdvo/src/dvo_convert_loneos.c
r12008 r12011 75 75 76 76 /* convert loneos-format averages to internal averages */ 77 Average *AverageLoneosToInternal (AverageLoneos *in, int Nvalues ) {77 Average *AverageLoneosToInternal (AverageLoneos *in, int Nvalues, SecFilt **primary) { 78 78 79 79 int i; … … 81 81 82 82 ALLOCATE (out, Average, Nvalues); 83 ALLOCATE (*primary, SecFilt, Nvalues); 83 84 84 85 for (i = 0; i < Nvalues; i++) { 85 86 out[i].R = in[i].R; 86 87 out[i].D = in[i].D; 87 out[i].M = in[i].M * 0.001;88 88 out[i].Xp = in[i].Xp; 89 out[i].Xm = in[i].Xm;90 89 out[i].Nm = in[i].Nm; 91 90 out[i].Nn = in[i].Nn; … … 103 102 out[i].P = 0; 104 103 out[i].dP = 0; 105 out[i].dM = 0xffff;106 out[i].Xg = 0xffff;107 104 108 105 /* XXX add these later */ 109 106 out[i].objID_hi = 0; 110 107 out[i].objID_lo = 0; 108 109 primary[0][i].M = in[i].M * 0.001; 110 primary[0][i].Xm = in[i].Xm; 111 primary[0][i].dM = 0xffff; 112 primary[0][i].Ncode = 0; 113 primary[0][i].Nused = 0; 114 115 // XXX drop this or keep this? 116 // primary[0][i].Xg = in[i].Xg; 111 117 } 112 118 return (out); … … 114 120 115 121 /* convert internal averages to loneos-format averages */ 116 AverageLoneos *AverageInternalToLoneos (Average *in, int Nvalues ) {122 AverageLoneos *AverageInternalToLoneos (Average *in, int Nvalues, SecFilt *primary) { 117 123 118 124 int i; … … 124 130 out[i].R = in[i].R; 125 131 out[i].D = in[i].D; 126 out[i].M = in[i].M * 1000.0;127 132 out[i].Xp = in[i].Xp; 128 out[i].Xm = in[i].Xm;129 133 out[i].Nm = in[i].Nm; 130 134 out[i].Nn = in[i].Nn; … … 132 136 out[i].offset = in[i].offset; 133 137 out[i].missing = in[i].missing; 138 139 out[i].M = primary[i].M * 1000.0; 140 out[i].Xm = primary[i].Xm; 134 141 } 135 142 return (out);
Note:
See TracChangeset
for help on using the changeset viewer.
