Changeset 34405 for trunk/Ohana/src/dvomerge
- Timestamp:
- Sep 5, 2012, 4:25:56 PM (14 years ago)
- Location:
- trunk/Ohana
- Files:
-
- 14 edited
- 1 copied
-
. (modified) (1 prop)
-
src/dvomerge/Makefile (modified) (2 diffs)
-
src/dvomerge/doc/failsafe.txt (modified) (1 diff)
-
src/dvomerge/include/dvomerge.h (modified) (2 diffs)
-
src/dvomerge/include/dvoverify.h (modified) (2 diffs)
-
src/dvomerge/src/dvomergeHistory.c (copied) (copied from branches/eam_branches/ipp-20120805/Ohana/src/dvomerge/src/dvomergeHistory.c )
-
src/dvomerge/src/dvomergeImageIDs.c (modified) (2 diffs)
-
src/dvomerge/src/dvomergeUpdate_catalogs.c (modified) (5 diffs)
-
src/dvomerge/src/dvoverify.c (modified) (1 diff)
-
src/dvomerge/src/dvoverify_args.c (modified) (1 diff)
-
src/dvomerge/src/dvoverify_catalogs.c (modified) (1 diff)
-
src/dvomerge/src/dvoverify_client.c (modified) (1 diff)
-
src/dvomerge/src/dvoverify_utils.c (modified) (5 diffs)
-
src/dvomerge/src/merge_catalogs_old.c (modified) (1 diff)
-
src/dvomerge/test/catdir.grizy/Images.dat (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Ohana
- Property svn:mergeinfo set to
-
trunk/Ohana/src/dvomerge/Makefile
r34260 r34405 33 33 $(SRC)/dvomergeUpdate_catalogs.$(ARCH).o \ 34 34 $(SRC)/dvomergeUpdate_threaded.$(ARCH).o \ 35 $(SRC)/dvomergeHistory.$(ARCH).o \ 35 36 $(SRC)/dvomergeFromList.$(ARCH).o \ 36 37 $(SRC)/dvomergeImageIDs.$(ARCH).o \ … … 56 57 $(SRC)/dvomerge_client.$(ARCH).o \ 57 58 $(SRC)/dvomergeUpdate_catalogs.$(ARCH).o \ 59 $(SRC)/dvomergeHistory.$(ARCH).o \ 58 60 $(SRC)/dvomergeImageIDs.$(ARCH).o \ 59 61 $(SRC)/dvo_image_merge_dbs.$(ARCH).o \ -
trunk/Ohana/src/dvomerge/doc/failsafe.txt
r33963 r34405 1 2 20120809 3 4 more on failsafe 5 6 I need to improve the technique I'm using for failsafe ops / rerun. 7 8 * Image.dat PHU keywords: 9 DVO_DB_ID : %s : hex string with 32 byte "unique" string for DB 10 DM_NMERGE : %d : number of databases merged into this onea 11 DM_nnnnnn : %s : DVO_DB_ID of merge (nnnnn) 12 13 Note: nnnnnn may be greater than NMERGE if entries are skipped 14 (only a total of NMERGE nnnnnn values are allowed) 15 16 * region.cpt PHU keywords: 17 DM_NMERGE : %d : number of databases merged into this one (needed?) 18 MS_nnnnnn : %d : size of merged db entry nnnnnn 19 MT_nnnnnn : %s : date/time of merged db entry nnnnnn 20 21 Is there a reason for the image entries? (additional record keeping) 22 23 24 25 26 201206?? 1 27 2 28 we have a problem with dvomerge and flaky hosts. the problem is that -
trunk/Ohana/src/dvomerge/include/dvomerge.h
r34277 r34405 44 44 char *notFound; 45 45 } IDmapType; 46 47 // struct to describe a sequence of dvomerges (Image.dat header) 48 typedef struct { 49 int Nmerge; 50 char **IDs; 51 } dmhImage; 52 53 // struct to describe a sequence of dvomerges (Object table : cpt header) 54 typedef struct { 55 int Nmerge; 56 off_t *size; 57 time_t *time; 58 char **date; 59 } dmhObject; 60 61 // data on a single table, populated when a new file is merged 62 typedef struct { 63 off_t size; 64 time_t time; 65 char *date; 66 } dmhObjectStats; 67 68 // struct to describe the current status of a single output file: 69 // is it on this machine (valid)? have we already merged or not (missed)? 70 // what is the collection of past merges (history)? what is the real filename? 71 typedef struct { 72 int valid; // is this object table on this machine? 73 int missed; // did we fail to merge into this table yet? 74 dmhObject *history; // complete sequence of previous merges 75 char *filename; // true filename on disk 76 } OutputStatus; 46 77 47 78 int main PROTO((int argc, char **argv)); … … 130 161 IDmapType *IDmapLoad PROTO((char *filename)); 131 162 int create_IDmap_lookup PROTO((IDmapType *IDmap)); 163 164 // dvomerge history functions 165 OutputStatus *OutputStatusInit (int N); 166 int OutputStatusFree (OutputStatus *outstat, int N); 167 168 int dmhObjectAdd (dmhObject *history, Header *header, dmhObjectStats *inStats); 169 int dmhObjectCheck (dmhObject *history, dmhObjectStats *inStats); 170 dmhObject *dmhObjectRead (char *filename); 171 172 void dmhObjectStatsFree (dmhObjectStats *stats); 173 dmhObjectStats *dmhObjectStatsRead (char *filename); 174 175 int dmhImageAdd (FITS_DB *db, dmhImage *history, char *dbID); 176 dmhImage *dmhImageRead (FITS_DB *db) ; 177 int dmhImageCheck (dmhImage *history, char *dbID); 178 179 char *dmhImageReadID (FITS_DB *db); 180 int dvoCreateID (char *catdir); 181 -
trunk/Ohana/src/dvomerge/include/dvoverify.h
r34260 r34405 34 34 int NNotSorted; 35 35 int CHECK_TOPLEVEL; 36 int CHECK_IMAGE_ID; 36 37 int LIST_MISSING; 37 38 … … 52 53 void AddFailures (char *filename); 53 54 char **GetFailures (int *N); 55 56 int LoadImageIDs (char *catdir); 57 int CheckImageID (Catalog *catalog); -
trunk/Ohana/src/dvomerge/src/dvomergeImageIDs.c
r33963 r34405 21 21 return TRUE; 22 22 } 23 // this operation reads the PHU header (inDB.header) 23 24 if (!dvo_image_load (&inDB, VERBOSE, TRUE)) { 24 25 Shutdown ("can't read input image catalog %s", inDB.filename); 25 26 } 27 dvo_image_unlock (&inDB); // unlock input 28 29 // read the header for the database ID? 30 char *indbID = dmhImageReadID (&inDB); 31 if (!indbID) { 32 Shutdown ("this database is missing a DVO database ID; please generate one before merging\n"); 33 } 26 34 27 35 /*** load output/Images.dat ***/ … … 41 49 } 42 50 51 dmhImage *history = dmhImageRead (&outDB); 52 if (!history) { 53 Shutdown ("error reading history for output database\n"); 54 } 55 56 // have we already merged this database? 57 if (dmhImageCheck(history, indbID)) { 58 // if so, then just match the image IDs 59 if (VERBOSE) fprintf (stderr, "already merged image table\n"); 60 dvo_image_match_dbs(IDmap, &outDB, &inDB); 61 dvo_image_unlock (&outDB); // unlock output 62 return TRUE; 63 } 64 43 65 // convert database table to internal structure & add to output image db 44 66 dvo_image_merge_dbs(IDmap, &outDB, &inDB); 45 dvo_image_unlock (&inDB); // unlock input46 67 68 // add the new image db to merge history 69 // (updates header as well as history structure 70 if (!dmhImageAdd (&outDB, history, indbID)) { 71 Shutdown ("error reading history for output database\n"); 72 } 73 47 74 SetProtect (TRUE); 48 75 dvo_image_save (&outDB, VERBOSE); -
trunk/Ohana/src/dvomerge/src/dvomergeUpdate_catalogs.c
r34260 r34405 31 31 outlist = SkyListByBounds (outsky, -1, inlist[0].regions[i][0].Rmin + dPos, inlist[0].regions[i][0].Rmax - dPos, inlist[0].regions[i][0].Dmin + dPos, inlist[0].regions[i][0].Dmax - dPos); 32 32 33 // there may be more than one output region for a given input region. are any of these output regions relevant to this machine? 33 OutputStatus *outstat = OutputStatusInit (outlist->Nregions); 34 35 // there may be more than one output region for a given input region. 36 // are any of these output regions relevant to this machine? 34 37 int found = FALSE; 35 for (j = 0; !found && (j < outlist[0].Nregions); j++) { 36 found = (found || HostTableTestHost(outlist[0].regions[j], HOST_ID)); 38 for (j = 0; j < outlist[0].Nregions; j++) { 39 outstat[j].valid = HostTableTestHost(outlist[0].regions[j], HOST_ID); 40 found = (found || outstat[j].valid); 37 41 } 38 42 39 43 // skip this input table for if no output files are on this machine 40 44 if (!found) { 45 OutputStatusFree (outstat, outlist->Nregions); 41 46 SkyListFree (outlist); 42 47 continue; 43 48 } 44 49 45 // get the stats on this input file (for comparison with the output headers) 46 struct stat instats; 47 int stat_result = stat (inlist[0].filename[i], &instats); 48 if (stat_result) { 49 if (errno == ENOENT) continue; 50 fprintf (stderr, "cannot read stats on input file %s\n", inlist[0].filename[i]); 51 perror ("stats error message:"); 52 exit (2); 53 } 54 55 // instats.st_size & instats.st_mtime 56 57 // check if any of the output files have NOT yet received data from this input file 58 50 // get stats for history check, skip input catalog if file not found (NULL inStats) 51 dmhObjectStats *inStats = dmhObjectStatsRead (inlist[0].filename[i]); 52 if (!inStats) { 53 if (VERBOSE) fprintf (stderr, "skipping %s, empty \n", inlist[0].filename[i]); 54 OutputStatusFree (outstat, outlist->Nregions); 55 SkyListFree (outlist); 56 continue; 57 } 58 59 // Check if any of the output files have NOT yet received data from this input file 60 // If none have been missed, we can skip the input file completely 59 61 int missed = FALSE; 60 for (j = 0; !missed && (j < outlist[0].Nregions); j++) {61 if (! HostTableTestHost(outlist[0].regions[j], HOST_ID)) continue;62 for (j = 0; j < outlist[0].Nregions; j++) { 63 if (!outstat[j].valid) continue; 62 64 63 65 // set the parameters which guide catalog open/load/create … … 65 67 snprintf (hostfile, DVO_MAX_PATH, "%s/%s.cpt", HOSTDIR, outlist[0].regions[j]->name); 66 68 char *filename = HOST_ID ? hostfile : outlist[0].filename[j]; 67 68 // get the stats on this input file (for comparison with the output headers) 69 struct stat outstats; 70 stat_result = stat (filename, &outstats); 71 if (stat_result) { 72 if (errno == ENOENT) { 73 missed = TRUE; 74 break; 75 } 76 fprintf (stderr, "cannot read stats on output file %s\n", filename); 77 perror ("stats error message:"); 78 exit (2); 79 } 80 81 FILE *fout = fopen (filename, "r"); 82 if (!fout) { 83 fprintf (stderr, "problem opening output file to read header %s\n", filename); 84 perror ("stats error message:"); 85 exit (2); 86 } 87 88 Header outheader; 89 if (!gfits_fread_header (fout, &outheader)) { 90 fprintf (stderr, "problem reading header for output file %s\n", filename); 91 exit (2); 92 } 93 94 fclose (fout); 95 96 // XXX note that we are hardwired to v 2 97 // check the header of output catalog for an existing merge 98 long long last_size; 99 char last_moddate[80]; 100 gfits_scan (&outheader, "LMRG_SZ2", "%lld", 1, &last_size); 101 gfits_scan (&outheader, "LMRG_DT2", "%s", 1, last_moddate); 102 103 time_t last_mod = ohana_date_to_sec (last_moddate); 104 105 if (last_size != instats.st_size) { 106 missed = TRUE; 107 break; 108 } 109 110 if (last_mod != instats.st_mtime) { 111 missed = TRUE; 112 break; 113 } 69 outstat[j].filename = strcreate (filename); 70 71 outstat[j].history = dmhObjectRead (outstat[j].filename); 72 73 // have we already merged this database? 74 outstat[j].missed = !dmhObjectCheck (outstat[j].history, inStats); 75 missed = (missed || outstat[j].missed); 114 76 } 115 77 if (!missed) { 116 fprintf (stderr, "skipping %s, already merged\n", inlist[0].filename[i]); 78 if (VERBOSE) fprintf (stderr, "skipping %s, empty or already merged\n", inlist[0].filename[i]); 79 OutputStatusFree (outstat, outlist->Nregions); 80 dmhObjectStatsFree (inStats); 81 SkyListFree (outlist); 117 82 continue; 118 83 } … … 125 90 dvo_catalog_unlock (&incatalog); 126 91 dvo_catalog_free (&incatalog); 92 OutputStatusFree (outstat, outlist->Nregions); 93 dmhObjectStatsFree (inStats); 127 94 SkyListFree (outlist); 128 95 continue; 129 96 } 130 131 char *moddate = ohana_sec_to_date (instats.st_mtime);132 97 133 98 // merge input into the appropriate output tables 134 99 for (j = 0; j < outlist[0].Nregions; j++) { 135 100 // skip tables for which the output files are not on this machine 136 if (!HostTableTestHost(outlist[0].regions[j], HOST_ID)) continue; 101 if (!outstat[j].valid) continue; 102 103 // skip if we have already done the merge 104 if (!outstat[j].missed) continue; 137 105 138 106 if (VERBOSE) fprintf (stderr, "output : %s\n", outlist[0].regions[j][0].name); 139 107 140 // set the parameters which guide catalog open/load/create 141 char hostfile[DVO_MAX_PATH]; 142 snprintf (hostfile, DVO_MAX_PATH, "%s/%s.cpt", HOSTDIR, outlist[0].regions[j]->name); 143 outcatalog.filename = HOST_ID ? hostfile : outlist[0].filename[j]; 108 // the real filename 109 outcatalog.filename = outstat[j].filename; 144 110 145 111 // load input catalog … … 151 117 outcatalog.catflags = LOAD_AVES | LOAD_MEAS | LOAD_MISS | LOAD_SECF; 152 118 153 # if (0) 154 // get the LMRG data from the previous pass 155 long long last_size; 156 char last_moddate[80]; 157 int status_size = gfits_scan (&outcatalog.header, "LMRG_SZ", "%lld", 1, &last_size); 158 int status_date = gfits_scan (&outcatalog.header, "LMRG_DT", "%s", 1, last_moddate); 159 160 // save the LMRG data from the previous pass 161 if (status_size && status_date) { 162 gfits_modify (&outcatalog.header, "LMRG_SZ1", "%lld", 1, (long long) last_size); 163 gfits_modify (&outcatalog.header, "LMRG_DT1", "%s", 1, last_moddate); 164 } 165 166 // update header of output catalog 167 gfits_modify (&outcatalog.header, "LMRG_SZ", "%lld", 1, (long long) instats.st_size); 168 gfits_modify (&outcatalog.header, "LMRG_DT", "%s", 1, moddate); 169 # endif 170 171 // update header of output catalog 172 // XXX note that we are hardwired to v 2 173 gfits_modify (&outcatalog.header, "LMRG_SZ2", "%lld", 1, (long long) instats.st_size); 174 gfits_modify (&outcatalog.header, "LMRG_DT2", "%s", 1, moddate); 119 dmhObjectAdd (outstat[j].history, &outcatalog.header, inStats); 175 120 176 121 if (!dvo_catalog_backup (&outcatalog, TRUE)) { … … 196 141 fprintf (stderr, "merged %s into %s\n", inlist[0].regions[i][0].name, outlist[0].regions[j][0].name); 197 142 } 143 144 OutputStatusFree (outstat, outlist->Nregions); 198 145 SkyListFree (outlist); 199 free (moddate);146 dmhObjectStatsFree (inStats); 200 147 201 148 dvo_catalog_unlock (&incatalog); -
trunk/Ohana/src/dvomerge/src/dvoverify.c
r34260 r34405 42 42 } 43 43 44 if (CHECK_IMAGE_ID) { 45 LoadImageIDs (CATDIR); 46 } 47 44 48 // load the sky table for the existing database 45 49 sky = SkyTableLoadOptimal (CATDIR, NULL, NULL, FALSE, SKY_DEPTH_HST, VERBOSE); -
trunk/Ohana/src/dvomerge/src/dvoverify_args.c
r34260 r34405 53 53 if ((N = get_argument (*argc, argv, "-skip-toplevel"))) { 54 54 CHECK_TOPLEVEL = FALSE; 55 remove_argument (N, argc, argv); 56 } 57 58 CHECK_IMAGE_ID = TRUE; 59 if ((N = get_argument (*argc, argv, "-skip-image-ids"))) { 60 CHECK_IMAGE_ID = FALSE; 55 61 remove_argument (N, argc, argv); 56 62 } -
trunk/Ohana/src/dvomerge/src/dvoverify_catalogs.c
r34260 r34405 100 100 101 101 char tmpline[DVO_MAX_PATH]; 102 if (VERBOSE) { snprintf (tmpline, DVO_MAX_PATH, "%s -v", command); strcpy (command, tmpline); } 103 if (CHECKSORTED) { snprintf (tmpline, DVO_MAX_PATH, "%s -s", command); strcpy (command, tmpline); } 104 if (LIST_MISSING) { snprintf (tmpline, DVO_MAX_PATH, "%s -list-missing", command); strcpy (command, tmpline); } 102 if (VERBOSE) { snprintf (tmpline, DVO_MAX_PATH, "%s -v", command); strcpy (command, tmpline); } 103 if (CHECKSORTED) { snprintf (tmpline, DVO_MAX_PATH, "%s -s", command); strcpy (command, tmpline); } 104 if (!CHECK_IMAGE_ID) { snprintf (tmpline, DVO_MAX_PATH, "%s -skip-image-ids", command); strcpy (command, tmpline); } 105 if (LIST_MISSING) { snprintf (tmpline, DVO_MAX_PATH, "%s -list-missing", command); strcpy (command, tmpline); } 105 106 106 107 fprintf (stderr, "command: %s\n", command); -
trunk/Ohana/src/dvomerge/src/dvoverify_client.c
r34260 r34405 19 19 skylist = SkyListByPatch (sky, -1, &UserPatch); 20 20 21 if (CHECK_IMAGE_ID) { 22 // XXX in client mode, we should be reading a reduced table generated by the calling 23 // serial program 24 LoadImageIDs (CATDIR); 25 } 26 21 27 dvoverify_catalogs (skylist, &Nbad); 22 28 -
trunk/Ohana/src/dvomerge/src/dvoverify_utils.c
r34260 r34405 49 49 50 50 // is this file a consistent FITS file? 51 // note that VerifyTableFile only has to read the headers, 52 // not the data blocks (it uses stat for sizes) 51 53 int VerifyTableFile (char *filename) { 52 54 … … 194 196 // \sum average[].Nmeasure = Nmeasure 195 197 196 // if the table is NOT SORTED, we have a subset of checks we can make198 // if the table is NOT SORTED, do we have a subset of checks we can make? 197 199 if (!catalog.sorted) { 198 200 fprintf (stderr, "!"); … … 231 233 } 232 234 235 // if we have a problem with Nmeasure and/or measureOffset values, we 236 // cannot do any further check -- we risk segfaults 233 237 if (!status) { 234 238 dvo_catalog_unlock (&catalog); … … 263 267 } 264 268 265 // for (i = 0; i < catalog.Naverage; i++) { 266 // m = catalog.average[i].measureOffset; 267 // for (j = 0; i < catalog.Nmeasure; i++) { 268 // objIDsOK &= (catalog.average[i].objID == catalog.measure[m+j].objID); 269 // catIDsOK &= (catalog.average[i].catID == catalog.measure[m+j].catID);270 // averefOK &= (catalog.measure[m+j].averef = i);271 //}272 //}269 // check the image ID here? 270 if (CHECK_IMAGE_ID) { 271 int Nfail = CheckImageID (&catalog); 272 if (Nfail > 0) { 273 fprintf (stderr, "ERROR: catalog %s has invalid %d unmatched image IDs\n", catalog.filename, Nfail); 274 status = FALSE; 275 } 276 } 273 277 274 278 dvo_catalog_unlock (&catalog); … … 278 282 } 279 283 280 // gfits_scan(&cpmHeaderTBL, "NAXIS1", "%d", 1, &NbytesPerRow); 281 // gfits_scan(&cpmHeaderTBL, "NAXIS2", "%d", 1, &Nrows); 282 284 static int maxID = 0; 285 static int *IDlist = NULL; 286 287 // check that every measure->imageID (if set) matches an existing 288 // image->ID. return the number of failures. 289 int CheckImageID (Catalog *catalog) { 290 291 off_t i, j, m, id; 292 int Nfail = 0; 293 294 for (i = 0; i < catalog[0].Naverage; i++) { 295 m = catalog[0].average[i].measureOffset; 296 for (j = 0; j < catalog[0].average[i].Nmeasure; j++) { 297 id = catalog[0].measure[m+j].imageID; 298 if (id > maxID) { 299 Nfail ++; 300 continue; 301 // is this sufficient to catch IDs set without an image table? 302 } 303 if (IDlist) { 304 if (IDlist[id] < 0) { 305 Nfail ++; 306 continue; 307 } 308 } else { 309 if (id > 0) { 310 Nfail ++; 311 continue; 312 } 313 } 314 } 315 } 316 return Nfail; 317 } 318 319 int LoadImageIDs (char *catdir) { 320 321 int status; 322 off_t Nimages, i; 323 Image *images; 324 FITS_DB inDB; 325 326 char ImageCat[DVO_MAX_PATH]; 327 snprintf (ImageCat, DVO_MAX_PATH, "%s/Images.dat", catdir); 328 329 // load the iage database table 330 status = dvo_image_lock (&inDB, ImageCat, 3600.0, LCK_SOFT); // shorter timeout? 331 if (!status) { 332 fprintf (stderr, "ERROR: failure to lock image catalog %s", inDB.filename); 333 exit (3); 334 } 335 336 // load the image table 337 if (inDB.dbstate == LCK_EMPTY) { 338 dvo_image_unlock (&inDB); // unlock input 339 // this is not an error: we can have no image table for, eg, 2MASS only db 340 return TRUE; 341 } 342 if (!dvo_image_load (&inDB, VERBOSE, TRUE)) { 343 fprintf (stderr, "can't read input image catalog %s", inDB.filename); 344 exit (4); 345 } 346 347 images = gfits_table_get_Image (&inDB.ftable, &Nimages, &inDB.swapped); 348 if (!images) { 349 fprintf (stderr, "ERROR: failed to read images from src\n"); 350 exit (2); 351 } 352 353 // generate a lookup table for the images 283 354 355 // first, find the max imageID 356 for (i = 0; i < Nimages; i++) { 357 maxID = MAX(maxID, images[i].imageID); 358 } 359 360 ALLOCATE (IDlist, int, maxID + 1); 361 for (i = 0; i < maxID + 1; i++) { 362 IDlist[i] = -1; 363 } 364 365 for (i = 0; i < Nimages; i++) { 366 int id = images[i].imageID; 367 IDlist[id] = i; 368 } 369 370 // free image table here? 371 // (in the future, I'll have to do the image table read in segments 372 // it is just getting to be too large...) 373 dvo_image_unlock (&inDB); // unlock input 374 375 return TRUE; 376 } -
trunk/Ohana/src/dvomerge/src/merge_catalogs_old.c
r33963 r34405 320 320 output[0].average[Nave].dP = 0; 321 321 322 output[0].average[Nave]. Xp= 0;322 output[0].average[Nave].stargal = 0; 323 323 output[0].average[Nave].ChiSqAve = 0.0; 324 324 output[0].average[Nave].ChiSqPM = 0.0; -
trunk/Ohana/src/dvomerge/test/catdir.grizy/Images.dat
r24745 r34405 1 SIMPLE = T / BITPIX = 8 / NAXIS = 0 / PCOUNT = 0 / GCOUNT = 1 / BSCALE = 1.0000000000 / BZERO = 0.0000000000 / EXTEND = T / NIMAGES = 0 / ZERO_PT = 25.0000000000 / FORMAT = 'ELIXIR ' / ENDXTENSION= 'BINTABLE ' / BITPIX = 8 / NAXIS = 2 / NAXIS1 = 240 / NAXIS2 = 0 / PCOUNT = 0 / GCOUNT = 1 / TFIELDS = 50 / EXTNAME = 'DVO_IMAGE_ELIXIR ' / TTYPE1 = 'CRVAL1 ' / coordinate at reference pixel TUNIT1 = ' ' / TFORM1 = 'D ' / TSCAL1 = 1.0000000000 / TZERO1 = 0.0000000000 / TTYPE2 = 'CRVAL2 ' / coordinate at reference pixel TUNIT2 = ' ' / TFORM2 = 'D ' / TSCAL2 = 1.0000000000 / TZERO2 = 0.0000000000 / TTYPE3 = 'CRPIX1 ' / coordinate of reference pixel TUNIT3 = ' ' / TFORM3 = 'E ' / TSCAL3 = 1.0000000000 / TZERO3 = 0.0000000000 / TTYPE4 = 'CRPIX2 ' / coordinate of reference pixel TUNIT4 = ' ' / TFORM4 = 'E ' / TSCAL4 = 1.0000000000 / TZERO4 = 0.0000000000 / TTYPE5 = 'CDELT1 ' / degrees per pixel TUNIT5 = ' ' / TFORM5 = 'E ' / TSCAL5 = 1.0000000000 / TZERO5 = 0.0000000000 / TTYPE6 = 'CDELT2 ' / degrees per pixel TUNIT6 = ' ' / TFORM6 = 'E ' / TSCAL6 = 1.0000000000 / TZERO6 = 0.0000000000 / TTYPE7 = 'PC1_1 ' / rotation matrix TUNIT7 = ' ' / TFORM7 = 'E ' / TSCAL7 = 1.0000000000 / TZERO7 = 0.0000000000 / TTYPE8 = 'PC1_2 ' / rotation matrix TUNIT8 = ' ' / TFORM8 = 'E ' / TSCAL8 = 1.0000000000 / TZERO8 = 0.0000000000 / TTYPE9 = 'PC2_1 ' / rotation matrix TUNIT9 = ' ' / TFORM9 = 'E ' / TSCAL9 = 1.0000000000 / TZERO9 = 0.0000000000 / TTYPE10 = 'PC2_2 ' / rotation matrix TUNIT10 = ' ' / TFORM10 = 'E ' / TSCAL10 = 1.0000000000 / TZERO10 = 0.0000000000 / TTYPE11 = 'POLYTERMS ' / higher order warping terms TUNIT11 = ' ' / TFORM11 = '14E ' / TSCAL11 = 1.0000000000 / TZERO11 = 0.0000000000 / TTYPE12 = 'CTYPE ' / coordinate type TUNIT12 = ' ' / TFORM12 = '15A ' / TSCAL12 = 1.0000000000 / TZERO12 = 0.0000000000 / TTYPE13 = 'NPOLYTERMS ' / order of polynomial TUNIT13 = ' ' / TFORM13 = 'A ' / TSCAL13 = 1.0000000000 / TZERO13 = 0.0000000000 / TTYPE14 = 'TZERO ' / readout time (row 0) TUNIT14 = ' ' / TFORM14 = 'J ' / TSCAL14 = 1.0000000000 / TZERO14 = 0.0000000000 / TTYPE15 = 'NSTAR ' / number of stars on image TUNIT15 = ' ' / TFORM15 = 'J ' / TSCAL15 = 1.0000000000 / TZERO15 = 0.0000000000 / TTYPE16 = 'SECZ ' / airmass TUNIT16 = 'milliairmass ' / TFORM16 = 'I ' / TSCAL16 = 1.0000000000 / TZERO16 = 0.0000000000 / TTYPE17 = 'NX ' / image width TUNIT17 = ' ' / TFORM17 = 'I ' / TSCAL17 = 1.0000000000 / TZERO17 = 0.0000000000 / TTYPE18 = 'NY ' / image height TUNIT18 = ' ' / TFORM18 = 'I ' / TSCAL18 = 1.0000000000 / TZERO18 = 0.0000000000 / TTYPE19 = 'APMIFIT ' / aperture correction TUNIT19 = 'millimag ' / TFORM19 = 'I ' / TSCAL19 = 1.0000000000 / TZERO19 = 0.0000000000 / TTYPE20 = 'DAPMIFIT ' / apmifit error TUNIT20 = 'millimag ' / TFORM20 = 'I ' / TSCAL20 = 1.0000000000 / TZERO20 = 0.0000000000 / TTYPE21 = 'SOURCE ' / identifier for CCD, TUNIT21 = ' ' / TFORM21 = 'I ' / TSCAL21 = 1.0000000000 / TZERO21 = 0.0000000000 / TTYPE22 = 'MCAL ' / calibration mag TUNIT22 = 'millimag ' / TFORM22 = 'I ' / TSCAL22 = 1.0000000000 / TZERO22 = 0.0000000000 / TTYPE23 = 'DMCAL ' / error on Mcal TUNIT23 = 'millimag ' / TFORM23 = 'I ' / TSCAL23 = 1.0000000000 / TZERO23 = 0.0000000000 / TTYPE24 = 'XM ' / image chisq TUNIT24 = '10*log(value) ' / TFORM24 = 'I ' / TSCAL24 = 1.0000000000 / TZERO24 = 0.0000000000 / TTYPE25 = 'NAME ' / name of original image TUNIT25 = ' ' / TFORM25 = '32A ' / TSCAL25 = 1.0000000000 / TZERO25 = 0.0000000000 / TTYPE26 = 'DETECTION_LIMIT ' / detection limit TUNIT26 = '10*mag ' / TFORM26 = 'B ' / TSCAL26 = 1.0000000000 / TZERO26 = 0.0000000000 / TTYPE27 = 'SATURATION_LIMIT ' / saturation limit TUNIT27 = '10*mag ' / TFORM27 = 'B ' / TSCAL27 = 1.0000000000 / TZERO27 = 0.0000000000 / TTYPE28 = 'CERROR ' / astrometric error TUNIT28 = '50*arcsec ' / TFORM28 = 'B ' / TSCAL28 = 1.0000000000 / TZERO28 = 0.0000000000 / TTYPE29 = 'FWHM_X ' / PSF x width TUNIT29 = '25*arcsec ' / TFORM29 = 'B ' / TSCAL29 = 1.0000000000 / TZERO29 = 0.0000000000 / TTYPE30 = 'FWHM_Y ' / PSF y width TUNIT30 = '25*arcsec ' / TFORM30 = 'B ' / TSCAL30 = 1.0000000000 / TZERO30 = 0.0000000000 / TTYPE31 = 'TRATE ' / scan rate TUNIT31 = '100 usec/pixel ' / TFORM31 = 'B ' / TSCAL31 = 1.0000000000 / TZERO31 = 0.0000000000 / TTYPE32 = 'EXPTIME ' / exposure time TUNIT32 = 'seconds ' / TFORM32 = 'E ' / TSCAL32 = 1.0000000000 / TZERO32 = 0.0000000000 / TTYPE33 = 'CODE ' / image quality flag TUNIT33 = ' ' / TFORM33 = 'A ' / TSCAL33 = 1.0000000000 / TZERO33 = 0.0000000000 / TTYPE34 = 'CCDNUM ' / CCD ID number TUNIT34 = ' ' / TFORM34 = 'B ' / TSCAL34 = 1.0000000000 / TZERO34 = 0.0000000000 / TTYPE35 = 'DUMMY ' / unused TUNIT35 = ' ' / TFORM35 = '20A ' / TSCAL35 = 1.0000000000 / TZERO35 = 0.0000000000 / TTYPE36 = 'ORDER ' / Mrel 2D polynomical order TUNIT36 = ' ' / TFORM36 = 'I ' / TSCAL36 = 1.0000000000 / TZERO36 = 0.0000000000 / TTYPE37 = 'MX ' / Mrel polyterm TUNIT37 = ' ' / TFORM37 = 'I ' / TSCAL37 = 1.0000000000 / TZERO37 = 0.0000000000 / TTYPE38 = 'MY ' / Mrel polyterm TUNIT38 = ' ' / TFORM38 = 'I ' / TSCAL38 = 1.0000000000 / TZERO38 = 0.0000000000 / TTYPE39 = 'MXX ' / Mrel polyterm TUNIT39 = ' ' / TFORM39 = 'I ' / TSCAL39 = 1.0000000000 / TZERO39 = 0.0000000000 / TTYPE40 = 'MXY ' / Mrel polyterm TUNIT40 = ' ' / TFORM40 = 'I ' / TSCAL40 = 1.0000000000 / TZERO40 = 0.0000000000 / TTYPE41 = 'MYY ' / Mrel polyterm TUNIT41 = ' ' / TFORM41 = 'I ' / TSCAL41 = 1.0000000000 / TZERO41 = 0.0000000000 / TTYPE42 = 'MXXX ' / Mrel polyterm TUNIT42 = ' ' / TFORM42 = 'I ' / TSCAL42 = 1.0000000000 / TZERO42 = 0.0000000000 / TTYPE43 = 'MXXY ' / Mrel polyterm TUNIT43 = ' ' / TFORM43 = 'I ' / TSCAL43 = 1.0000000000 / TZERO43 = 0.0000000000 / TTYPE44 = 'MXYY ' / Mrel polyterm TUNIT44 = ' ' / TFORM44 = 'I ' / TSCAL44 = 1.0000000000 / TZERO44 = 0.0000000000 / TTYPE45 = 'MYYY ' / Mrel polyterm TUNIT45 = ' ' / TFORM45 = 'I ' / TSCAL45 = 1.0000000000 / TZERO45 = 0.0000000000 / TTYPE46 = 'MXXXX ' / Mrel polyterm TUNIT46 = ' ' / TFORM46 = 'I ' / TSCAL46 = 1.0000000000 / TZERO46 = 0.0000000000 / TTYPE47 = 'MXXXY ' / Mrel polyterm TUNIT47 = ' ' / TFORM47 = 'I ' / TSCAL47 = 1.0000000000 / TZERO47 = 0.0000000000 / TTYPE48 = 'MXXYY ' / Mrel polyterm TUNIT48 = ' ' / TFORM48 = 'I ' / TSCAL48 = 1.0000000000 / TZERO48 = 0.0000000000 / TTYPE49 = 'MXYYY ' / Mrel polyterm TUNIT49 = ' ' / TFORM49 = 'I ' / TSCAL49 = 1.0000000000 / TZERO49 = 0.0000000000 / TTYPE50 = 'MYYYY ' / Mrel polyterm TUNIT50 = ' ' / TFORM50 = 'I ' / TSCAL50 = 1.0000000000 / TZERO50 = 0.0000000000 / END1 SIMPLE = T / BITPIX = 8 / NAXIS = 0 / PCOUNT = 0 / GCOUNT = 1 / BSCALE = 1.0000000000 / BZERO = 0.0000000000 / EXTEND = T / NIMAGES = 0 / ZERO_PT = 25.0000000000 / FORMAT = 'ELIXIR ' / DVO_DBID= 'c2fa2cdbac0df952ae954ed04381e219' / END XTENSION= 'BINTABLE ' / BITPIX = 8 / NAXIS = 2 / NAXIS1 = 240 / NAXIS2 = 0 / PCOUNT = 0 / GCOUNT = 1 / TFIELDS = 50 / EXTNAME = 'DVO_IMAGE_ELIXIR ' / TTYPE1 = 'CRVAL1 ' / coordinate at reference pixel TUNIT1 = ' ' / TFORM1 = 'D ' / TSCAL1 = 1.0000000000 / TZERO1 = 0.0000000000 / TTYPE2 = 'CRVAL2 ' / coordinate at reference pixel TUNIT2 = ' ' / TFORM2 = 'D ' / TSCAL2 = 1.0000000000 / TZERO2 = 0.0000000000 / TTYPE3 = 'CRPIX1 ' / coordinate of reference pixel TUNIT3 = ' ' / TFORM3 = 'E ' / TSCAL3 = 1.0000000000 / TZERO3 = 0.0000000000 / TTYPE4 = 'CRPIX2 ' / coordinate of reference pixel TUNIT4 = ' ' / TFORM4 = 'E ' / TSCAL4 = 1.0000000000 / TZERO4 = 0.0000000000 / TTYPE5 = 'CDELT1 ' / degrees per pixel TUNIT5 = ' ' / TFORM5 = 'E ' / TSCAL5 = 1.0000000000 / TZERO5 = 0.0000000000 / TTYPE6 = 'CDELT2 ' / degrees per pixel TUNIT6 = ' ' / TFORM6 = 'E ' / TSCAL6 = 1.0000000000 / TZERO6 = 0.0000000000 / TTYPE7 = 'PC1_1 ' / rotation matrix TUNIT7 = ' ' / TFORM7 = 'E ' / TSCAL7 = 1.0000000000 / TZERO7 = 0.0000000000 / TTYPE8 = 'PC1_2 ' / rotation matrix TUNIT8 = ' ' / TFORM8 = 'E ' / TSCAL8 = 1.0000000000 / TZERO8 = 0.0000000000 / TTYPE9 = 'PC2_1 ' / rotation matrix TUNIT9 = ' ' / TFORM9 = 'E ' / TSCAL9 = 1.0000000000 / TZERO9 = 0.0000000000 / TTYPE10 = 'PC2_2 ' / rotation matrix TUNIT10 = ' ' / TFORM10 = 'E ' / TSCAL10 = 1.0000000000 / TZERO10 = 0.0000000000 / TTYPE11 = 'POLYTERMS ' / higher order warping terms TUNIT11 = ' ' / TFORM11 = '14E ' / TSCAL11 = 1.0000000000 / TZERO11 = 0.0000000000 / TTYPE12 = 'CTYPE ' / coordinate type TUNIT12 = ' ' / TFORM12 = '15A ' / TSCAL12 = 1.0000000000 / TZERO12 = 0.0000000000 / TTYPE13 = 'NPOLYTERMS ' / order of polynomial TUNIT13 = ' ' / TFORM13 = 'A ' / TSCAL13 = 1.0000000000 / TZERO13 = 0.0000000000 / TTYPE14 = 'TZERO ' / readout time (row 0) TUNIT14 = ' ' / TFORM14 = 'J ' / TSCAL14 = 1.0000000000 / TZERO14 = 0.0000000000 / TTYPE15 = 'NSTAR ' / number of stars on image TUNIT15 = ' ' / TFORM15 = 'J ' / TSCAL15 = 1.0000000000 / TZERO15 = 0.0000000000 / TTYPE16 = 'SECZ ' / airmass TUNIT16 = 'milliairmass ' / TFORM16 = 'I ' / TSCAL16 = 1.0000000000 / TZERO16 = 0.0000000000 / TTYPE17 = 'NX ' / image width TUNIT17 = ' ' / TFORM17 = 'I ' / TSCAL17 = 1.0000000000 / TZERO17 = 0.0000000000 / TTYPE18 = 'NY ' / image height TUNIT18 = ' ' / TFORM18 = 'I ' / TSCAL18 = 1.0000000000 / TZERO18 = 0.0000000000 / TTYPE19 = 'APMIFIT ' / aperture correction TUNIT19 = 'millimag ' / TFORM19 = 'I ' / TSCAL19 = 1.0000000000 / TZERO19 = 0.0000000000 / TTYPE20 = 'DAPMIFIT ' / apmifit error TUNIT20 = 'millimag ' / TFORM20 = 'I ' / TSCAL20 = 1.0000000000 / TZERO20 = 0.0000000000 / TTYPE21 = 'SOURCE ' / identifier for CCD, TUNIT21 = ' ' / TFORM21 = 'I ' / TSCAL21 = 1.0000000000 / TZERO21 = 0.0000000000 / TTYPE22 = 'MCAL ' / calibration mag TUNIT22 = 'millimag ' / TFORM22 = 'I ' / TSCAL22 = 1.0000000000 / TZERO22 = 0.0000000000 / TTYPE23 = 'DMCAL ' / error on Mcal TUNIT23 = 'millimag ' / TFORM23 = 'I ' / TSCAL23 = 1.0000000000 / TZERO23 = 0.0000000000 / TTYPE24 = 'XM ' / image chisq TUNIT24 = '10*log(value) ' / TFORM24 = 'I ' / TSCAL24 = 1.0000000000 / TZERO24 = 0.0000000000 / TTYPE25 = 'NAME ' / name of original image TUNIT25 = ' ' / TFORM25 = '32A ' / TSCAL25 = 1.0000000000 / TZERO25 = 0.0000000000 / TTYPE26 = 'DETECTION_LIMIT ' / detection limit TUNIT26 = '10*mag ' / TFORM26 = 'B ' / TSCAL26 = 1.0000000000 / TZERO26 = 0.0000000000 / TTYPE27 = 'SATURATION_LIMIT ' / saturation limit TUNIT27 = '10*mag ' / TFORM27 = 'B ' / TSCAL27 = 1.0000000000 / TZERO27 = 0.0000000000 / TTYPE28 = 'CERROR ' / astrometric error TUNIT28 = '50*arcsec ' / TFORM28 = 'B ' / TSCAL28 = 1.0000000000 / TZERO28 = 0.0000000000 / TTYPE29 = 'FWHM_X ' / PSF x width TUNIT29 = '25*arcsec ' / TFORM29 = 'B ' / TSCAL29 = 1.0000000000 / TZERO29 = 0.0000000000 / TTYPE30 = 'FWHM_Y ' / PSF y width TUNIT30 = '25*arcsec ' / TFORM30 = 'B ' / TSCAL30 = 1.0000000000 / TZERO30 = 0.0000000000 / TTYPE31 = 'TRATE ' / scan rate TUNIT31 = '100 usec/pixel ' / TFORM31 = 'B ' / TSCAL31 = 1.0000000000 / TZERO31 = 0.0000000000 / TTYPE32 = 'EXPTIME ' / exposure time TUNIT32 = 'seconds ' / TFORM32 = 'E ' / TSCAL32 = 1.0000000000 / TZERO32 = 0.0000000000 / TTYPE33 = 'CODE ' / image quality flag TUNIT33 = ' ' / TFORM33 = 'A ' / TSCAL33 = 1.0000000000 / TZERO33 = 0.0000000000 / TTYPE34 = 'CCDNUM ' / CCD ID number TUNIT34 = ' ' / TFORM34 = 'B ' / TSCAL34 = 1.0000000000 / TZERO34 = 0.0000000000 / TTYPE35 = 'DUMMY ' / unused TUNIT35 = ' ' / TFORM35 = '20A ' / TSCAL35 = 1.0000000000 / TZERO35 = 0.0000000000 / TTYPE36 = 'ORDER ' / Mrel 2D polynomical order TUNIT36 = ' ' / TFORM36 = 'I ' / TSCAL36 = 1.0000000000 / TZERO36 = 0.0000000000 / TTYPE37 = 'MX ' / Mrel polyterm TUNIT37 = ' ' / TFORM37 = 'I ' / TSCAL37 = 1.0000000000 / TZERO37 = 0.0000000000 / TTYPE38 = 'MY ' / Mrel polyterm TUNIT38 = ' ' / TFORM38 = 'I ' / TSCAL38 = 1.0000000000 / TZERO38 = 0.0000000000 / TTYPE39 = 'MXX ' / Mrel polyterm TUNIT39 = ' ' / TFORM39 = 'I ' / TSCAL39 = 1.0000000000 / TZERO39 = 0.0000000000 / TTYPE40 = 'MXY ' / Mrel polyterm TUNIT40 = ' ' / TFORM40 = 'I ' / TSCAL40 = 1.0000000000 / TZERO40 = 0.0000000000 / TTYPE41 = 'MYY ' / Mrel polyterm TUNIT41 = ' ' / TFORM41 = 'I ' / TSCAL41 = 1.0000000000 / TZERO41 = 0.0000000000 / TTYPE42 = 'MXXX ' / Mrel polyterm TUNIT42 = ' ' / TFORM42 = 'I ' / TSCAL42 = 1.0000000000 / TZERO42 = 0.0000000000 / TTYPE43 = 'MXXY ' / Mrel polyterm TUNIT43 = ' ' / TFORM43 = 'I ' / TSCAL43 = 1.0000000000 / TZERO43 = 0.0000000000 / TTYPE44 = 'MXYY ' / Mrel polyterm TUNIT44 = ' ' / TFORM44 = 'I ' / TSCAL44 = 1.0000000000 / TZERO44 = 0.0000000000 / TTYPE45 = 'MYYY ' / Mrel polyterm TUNIT45 = ' ' / TFORM45 = 'I ' / TSCAL45 = 1.0000000000 / TZERO45 = 0.0000000000 / TTYPE46 = 'MXXXX ' / Mrel polyterm TUNIT46 = ' ' / TFORM46 = 'I ' / TSCAL46 = 1.0000000000 / TZERO46 = 0.0000000000 / TTYPE47 = 'MXXXY ' / Mrel polyterm TUNIT47 = ' ' / TFORM47 = 'I ' / TSCAL47 = 1.0000000000 / TZERO47 = 0.0000000000 / TTYPE48 = 'MXXYY ' / Mrel polyterm TUNIT48 = ' ' / TFORM48 = 'I ' / TSCAL48 = 1.0000000000 / TZERO48 = 0.0000000000 / TTYPE49 = 'MXYYY ' / Mrel polyterm TUNIT49 = ' ' / TFORM49 = 'I ' / TSCAL49 = 1.0000000000 / TZERO49 = 0.0000000000 / TTYPE50 = 'MYYYY ' / Mrel polyterm TUNIT50 = ' ' / TFORM50 = 'I ' / TSCAL50 = 1.0000000000 / TZERO50 = 0.0000000000 / END
Note:
See TracChangeset
for help on using the changeset viewer.
