IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 4864


Ignore:
Timestamp:
Aug 23, 2005, 8:55:22 PM (21 years ago)
Author:
eugene
Message:

converted to the libohana/dvo_image I/O routines; improvements in fits_db.c

Location:
trunk/Ohana/src
Files:
17 added
6 deleted
70 edited

Legend:

Unmodified
Added
Removed
  • trunk/Ohana/src/addstar/Makefile

    r4805 r4864  
    6161$(SRC)/update_coords.$(ARCH).o \
    6262$(SRC)/wcatalog.$(ARCH).o \
    63 $(SRC)/wimage.$(ARCH).o \
     63$(SRC)/Shutdown.$(ARCH).o \
    6464$(SRC)/rfits.$(ARCH).o \
    6565$(SRC)/rtext.$(ARCH).o
  • trunk/Ohana/src/addstar/include/addstar.h

    r4826 r4864  
    138138Stars     *getgsc                 PROTO((GSCRegion *patch, int *NSTARS));
    139139Stars     *getusno                PROTO((GSCRegion *catstats, int *Nstars));
    140 Image     *gimages                PROTO((Image *image, int *Npimage));
     140Image     *gimages                PROTO((FITS_DB *db, Image *image, int *Npimage));
    141141Stars     *grefcat                PROTO((char *Refcat, GSCRegion *catstats, int *nstars));
    142142Stars     *grefstars              PROTO((char *file, int *Nstars));
     
    152152int        load_pt_catalog        PROTO((Catalog *catalog, GSCRegion *region));  /*** choose new name ***/
    153153void       load_subpix            PROTO(());
    154 void       lock_image_db          PROTO(());
     154void       lock_image_db          PROTO((FITS_DB *db, char *filename));
    155155int        main                   PROTO((int argc, char **argv));
    156156void       make_backup            PROTO((char *filename));
     
    170170void       sort_stars             PROTO((Stars *stars, int N));
    171171int        str_to_radec           PROTO((double *ra, double *dec, char *str1, char *str2));
    172 void       unlock_image_db        PROTO((Image *image));
     172void       unlock_image_db        PROTO((FITS_DB *db));
    173173void       update_coords          PROTO((Average *average, Measure *measure, int *next));
    174174void       wcatalog               PROTO((Catalog *catalog));
    175 void       wimage                 PROTO((Image *image));
     175void       wimage                 PROTO((FITS_DB *db, Image *image));
     176void       create_image_db        PROTO((FITS_DB *db));
     177void       set_db                 PROTO((FITS_DB *in));
    176178
    177179void       uppercase              PROTO((char *string));
  • trunk/Ohana/src/addstar/src/addstar.c

    r4854 r4864  
    88  GSCRegion *regions;
    99  Catalog catalog;
     10  FITS_DB db;
    1011
    1112  double dtime;
     
    2122  overlap = NULL;
    2223  regions = NULL;
     24  set_db (&db);
    2325
    2426  if (SKYPROBE) load_subpix ();
    2527
    26   /* we use the image table to lock db access */
    27   lock_image_db ();
     28  /* we use the image table to lock db access -- perhaps this is not necessary?*/
     29  lock_image_db (&db, ImageCat);
    2830
    2931  switch (MODE) {
     
    3234    if ((DUMP != NULL) && !strcmp (DUMP, "rawstars")) dump_rawstars (stars, Nstars);
    3335    regions = gregion_image (&image, &Nregions);
    34     overlap = gimages (&image, &Noverlap);
     36    /* lock_image_db (&db, ImageCat); */
     37    overlap = gimages (&db, &image, &Noverlap);
     38    /* unlock_image_db (&db); */
    3539    break;
    3640  case M_REFLIST:
     
    7579
    7680  if (CALIBRATE) { FindCalibration (&image); }
    77   unlock_image_db (&image);
     81
     82  if (db.dbstate == LCK_EMPTY) {
     83    create_image_db (&db);
     84  }
     85 
     86  ohana_memcheck (FALSE);
     87
     88  /* write out new image */
     89  if (MODE == M_IMAGE) {
     90    dvo_image_addrows (&db, &image, 1);
     91    SetProtect (TRUE);
     92    dvo_image_update (&db, VERBOSE);
     93    SetProtect (FALSE);
     94  }
     95  ohana_memcheck (FALSE);
     96  /* unlock_image_db (&db); */
    7897
    7998  gettimeofday (&stop, NULL);
  • trunk/Ohana/src/addstar/src/gimages.c

    r4854 r4864  
    22
    33/* given image, find catalog images which overlap it */
    4 Image *gimages (Image *image, int *Npimage) {
     4Image *gimages (FITS_DB *db, Image *image, int *Npimage) {
    55 
    6   int i, j, k, Nimage, addtolist, size, dbstate;
    7   int NTIMAGE, Ntimage, ntimage;
    8   int NPIMAGE, npimage;
     6  int i, j, k, addtolist;
     7  int NPIMAGE, npimage, Ntimage;
    98  Image *timage, *pimage;
    109  Coords tcoords;
     
    1211  double Xi[5], Yi[5], Xo[5], Yo[5];  /* image and original corners */
    1312  double zeropt;
    14   struct stat filestatus;
    15   FILE *f;
    16 
    17   FITS_DB *db;
    1813
    1914  /* if image.db is opened successfully, f will not be NULL.
     
    2116     if image.db is not locked & opened successfully, we will not reach here!
    2217  */
    23   db = GetDB ();
    2418  if (db[0].dbstate == LCK_EMPTY) {
    2519    *Npimage = 0;
    2620    return (NULL);
    2721  }
    28   fseek (f, 0, SEEK_SET);
    2922
    30   if (!dvo_image_load (db, TRUE)) {
    31     Shutdown ("can't read image catalog %s", ImageCat);
     23  /* read entire db table (use block read eventually?) */
     24  if (!dvo_image_load (db, VERBOSE, FORCE_READ)) {
     25    Shutdown ("can't read image catalog %s", db[0].filename);
    3226  }
    33   timage = fits_table_get_Image (&db.ftable, &Ntimage);
    34   /* timage represents the complete image table */
     27  timage = fits_table_get_Image (&db[0].ftable, &Ntimage, &db[0].swapped);
    3528
    3629  fits_scan (&db[0].header, "ZERO_PT", "%lf", 1, &zeropt);
     
    8073  BuildChipMatch (timage, Ntimage);
    8174
    82   /* run through image table and search for overlaps */
     75  /* run through image table and search for overlaps
     76     also define the vtable entries for the images we keep  */
     77
    8378  for (i = 0; i < Ntimage; i++) {
    8479
     
    116111
    117112  BuildChipMatch (pimage, npimage);
    118 
     113 
    119114  if (VERBOSE) fprintf (stderr, "found %d overlapping images\n", npimage);
    120115
     
    134129   we are now loading in the entire image db table into memory. 
    135130
    136    we will need to write out the new image with a vtable.
    137131*/
  • trunk/Ohana/src/addstar/src/image-db.c

    r4854 r4864  
    11# include "addstar.h"
    22
    3 # define LOCK LCK_XCLD
     3void lock_image_db (FITS_DB *db, char *filename) {
    44
    5 /* file-pointer to Image.db table. if image db does not yet exist */
    6 static FITS_DB db;
     5  /* lock the image catalog */
     6  check_permissions (filename);
    77
    8 FITS_DB *GetDB () {
    9   return (&db);
    10 }
     8  db[0].lockstate = LCK_XCLD;
     9  db[0].timeout   = 3600.0;
     10  fits_db_init (db);
    1111
    12 void lock_image_db () {
    13   /* lock the image catalog */
    14   check_permissions (ImageCat);
    15 
    16   db.lockstate = LCK_XCLD;
    17   db.timeout   = 3600.0;
    18   fits_db_init (&db);
    19 
    20   if (!fits_db_lock (&db, ImageCat)) {
     12  if (!fits_db_lock (db, filename)) {
    2113    fprintf (stderr, "ERROR: can't lock image catalog\n");
    2214    exit (1);
     
    2416}
    2517
    26 void unlock_image_db (Image *image) {
     18void unlock_image_db (FITS_DB *db) {
    2719
    2820  mode_t mode;
    2921
    30   /* protect wimage from interrupt signals */
    31   if (MODE == M_IMAGE) {
    32     SetProtect (TRUE);
    33     wimage (image);
    34     SetProtect (FALSE);
     22  fprintf (stderr, "closing file\n");
     23  if (db[0].f == NULL) {
     24    fprintf (stderr, "re-closing file??\n");
    3525  }
    36 
    37   fits_db_close (&db);
     26  fits_db_close (db);
     27  db[0].f = NULL;
    3828
    3929  /* force permissions to 666 */
    4030  mode = S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH;
    41   chmod (ImageCat, mode);
     31  chmod (db[0].filename, mode);
    4232}
    4333
    44 /* clean up open / locked ImageCat before shutting down */
    45 int Shutdown (char *format, ...) { 
    46   va_list argp;
    47   char *formatplus;
    48  
    49   ALLOCATE (formatplus, char, strlen(format));
    50   strcpy (formatplus, format);
    51   strcat (formatplus, "\n");
     34void create_image_db (FITS_DB *db) {
    5235
    53   va_start (argp, format);
    54   vfprintf (stderr, formatplus, argp);
    55   free (formatplus);
    56   va_end (argp);
     36  if (VERBOSE) fprintf (stderr, "can't find %s, creating a new one\n", ImageCat);
    5737
    58   SetProtect (TRUE);
    59   fits_db_close (&db);
    60   fprintf (stderr, "ERROR: addstar halted\n");
    61   exit (1);
     38  /* create new header */
     39  fits_init_header (&db[0].header);
     40
     41  if (!strcmp (CATMODE, "RAW")) {
     42    /* make header a fake image */
     43    db[0].header.bitpix   = 16;
     44    db[0].header.Naxes    = 2;
     45    db[0].header.Naxis[0] = 1;
     46    db[0].header.Naxis[1] = 1;
     47    fits_create_header (&db[0].header);
     48  }
     49
     50  if (!strcmp (CATMODE, "MEF") || !strcmp (CATMODE, "SPLIT")) {
     51    fits_create_header (&db[0].header);
     52  }
     53
     54  fits_create_matrix (&db[0].header, &db[0].matrix);
     55  fits_table_set_Image (&db[0].ftable, NULL, 0);
     56
     57  /* assign Zero Point provided by first image in dB */
     58  fits_modify (&db[0].header, "ZERO_PT", "%lf", 1, ZeroPt);
     59  fits_modify (&db[0].header, "NIMAGES", "%d", 1, 0);
    6260}
     61
  • trunk/Ohana/src/addstar/src/rfits.c

    r4299 r4864  
    1616  if (!fits_fread_ftable (f, &table, "SMPFILE")) goto escape;
    1717
    18   smpdata = fits_table_get_SMPData (&table, &Nstars);
     18  smpdata = fits_table_get_SMPData (&table, &Nstars, NULL);
    1919
    2020  ALLOCATE (stars, Stars, Nstars);
  • trunk/Ohana/src/addstar/src/wimage.c

    r4854 r4864  
    22
    33/* add 1 image to image db */
    4 void wimage (Image *image) {
     4void wimages (FITS_DB *db, Image *image, int Nimage) {
    55 
    6   FILE *f;
    7   int Nimages, status, offset, dbstate;
    8   Header header;
     6  int status, Nimages;
    97
    10   db = GetDB ();
    11   fseek (f, 0, SEEK_SET);
     8  /* set permissions somewhere ...
     9  mode = S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH;
     10  fchmod (ImageCat, mode); */
    1211
    13   if (dbstate == LCK_EMPTY) {
    14     if (VERBOSE) fprintf (stderr, "can't find %s, creating a new one\n", ImageCat);
    15     if (!fits_read_header (ImageTemplate, &header)) {
    16       fprintf (stderr, "ERROR: can't find template header %s\n", ImageTemplate);
    17       exit (1);
    18     }
    19     /* assign Zero Point provided by first image in dB */
    20     fits_modify (&header, "ZERO_PT", "%lf", 1, ZeroPt);
    21     fits_modify (&header, "NIMAGES", "%d", 1, 0);
    22   } else {
    23     if (!fits_load_header (f, &header)) {
    24       fprintf (stderr, "ERROR: can't read image header %s\n", ImageCat);
    25       exit (1);
    26     }
    27   }
    28  
     12  /* adjust header */
    2913  Nimages = 0;
    30   fits_scan (&header, "NIMAGES", "%d", 1, &Nimages);
     14  fits_scan (&db[0].header, "NIMAGES", "%d", 1, &Nimages);
    3115  Nimages ++;
    32   fits_modify (&header, "NIMAGES", "%d", 1, Nimages);
     16  fits_modify (&db[0].header, "NIMAGES", "%d", 1, Nimages);
    3317
    34   /* position to begining of file to write header */
    35   fseek (f, 0, SEEK_SET);
    36   status = Fwrite (header.buffer, 1, header.size, f, "char");
    37   if (status != header.size) {
    38     fprintf (stderr, "ERROR: failed writing data to image header\n");
    39     exit (1);
     18  fits_table_to_vtable (&db[0].ftable, &db[0].vtable, 0, 0);
     19  for (i = 0; i < Nimage; i++) {
     20    fits_vadd_rows (&db[0].vtable, (char *) image, 1, sizeof(Image));
    4021  }
    4122
    42   /* position to end of data array */
    43   offset = (Nimages - 1)*sizeof(Image) + header.size;
    44   fseek (f, offset, SEEK_SET);
     23  /* check that primary header and table header agree */
     24  if (Nimages != db[0].header.Naxis[1]) {
     25    fprintf (stderr, "header / table length mismatch!\n");
     26  }
    4527
    46   status = Fwrite (image, sizeof(Image), 1, f, "image");
    47   if (status != 1) {
     28  SetProtect (TRUE);
     29  status = dvo_image_update (db, VERBOSE);
     30  SetProtect (FALSE);
     31
     32  if (!status) {
    4833    fprintf (stderr, "ERROR: failed writing data to image catalog\n");
    4934    exit (1);
     
    5136}
    5237
    53 /* the image we add in this routine is always a new image. 
    54    We only need to do two things:
    55      1) append the data for the image to the end of the file
    56      2) update the NIMAGES field in the header (which means, read in header, re-write)
    57  */
     38/* add the new image to the image table:
     39   - use the table header (from ftable)
     40   - create an empty vtable
     41   - add the new image to the end of the vtable
     42   
     43   - write out the vtable, either as TEXT or FITS
     44   * dvo_image_update performs the needed byte-swap on the image data
     45*/
  • trunk/Ohana/src/delstar/Makefile

    r4832 r4864  
    4040$(SRC)/sort_lists.$(ARCH).o \
    4141$(SRC)/check_permissions.$(ARCH).o \
    42 $(SRC)/dimages.$(ARCH).o         
     42$(SRC)/Shutdown.$(ARCH).o         
    4343
    4444OBJ = $(DELSTAR)
  • trunk/Ohana/src/delstar/include/delstar.h

    r4832 r4864  
    5050int        args                   PROTO((int *argc, char **argv));
    5151void       check_permissions      PROTO((char *basefile));
    52 void       delete_imagefile       PROTO((char *filename));
    53 void       delete_imagename       PROTO((char *name));
    54 void       delete_times           PROTO(());
    55 int        dimages                PROTO((int *imlist, int Nimlist));
     52void       delete_imagefile       PROTO((FITS_DB *db, char *filename));
     53void       delete_imagename       PROTO((FITS_DB *db, char *name));
     54void       delete_times           PROTO((FITS_DB *db));
    5655int        edge_check             PROTO((double *x1, double *y1, double *x2, double *y2));
    57 Image     *find_images            PROTO((FILE *f, CatStats *catstats, int *Nimages));
    58 int       *find_images_data       PROTO((Image *timage, int *nlist));
    59 int       *find_images_name       PROTO((char *filename, int *nlist));
    60 int       *find_images_time       PROTO((time_t start, time_t end, PhotCode *code, int *nlist));
     56int       *find_images_data       PROTO((FITS_DB *db, Image *timage, int *nlist));
     57int       *find_images_name       PROTO((FITS_DB *db, char *filename, int *nlist));
     58int       *find_images_time       PROTO((FITS_DB *db, time_t start, time_t end, PhotCode *code, int *nlist));
    6159void       find_matches           PROTO((Catalog *catalog, int photcode, int start, int end));
    6260int        gcatalog               PROTO((Catalog *catalog));
     
    6664Image     *gtimes                 PROTO((int *NIMAGE));
    6765void       help                   PROTO(());
    68 int        load_image_db          PROTO(());
    69 void       lock_image_db          PROTO(());
     66int        load_image_db          PROTO((FITS_DB *db));
     67void       lock_image_db          PROTO((FITS_DB *db, char *filename));
    7068void       match_images           PROTO((Catalog *catalog, Image *image, int Nimage));
    7169double     opening_angle          PROTO((double x1, double y1, double x2, double y2, double x3, double y3));
     
    7472void       sort_lists             PROTO((float *X, float *Y, int *S, int N));
    7573void       sort_regions           PROTO((GSCRegion *region, int N));
    76 void       unlock_image_db        PROTO(());
     74void       unlock_image_db        PROTO((FITS_DB *db));
    7775void       usage                  PROTO(());
    7876int        wcatalog               PROTO((Catalog *catalog));
     77
     78void set_db (FITS_DB *in);
  • trunk/Ohana/src/delstar/src/args.c

    r4680 r4864  
    44
    55  fprintf (stderr, "USAGE:\n");
    6   fprintf (stderr, "  delstar (filename) or (start range) or -orphan (region)\n");
     6  fprintf (stderr, "  delstar (filename)\n");
     7  fprintf (stderr, "  delstar -name (filename)\n");
    78  fprintf (stderr, "  delstar -time (start) (stop/range)\n");
    89  fprintf (stderr, "  delstar -orphan (region)\n");
  • trunk/Ohana/src/delstar/src/delete_imagefile.c

    r4611 r4864  
    11# include "delstar.h"
    22
    3 void delete_imagefile (char *filename) {
     3void delete_imagefile (FITS_DB *db, char *filename) {
    44
    5   int i, j;
    6   int Nregions, Nimlist;
     5  int i, Nregions, Nimlist;
    76  int *imlist;
    87  double trange;
     
    4140    start = image[0].tzero;
    4241    stop  = image[0].tzero + trange;
    43     find_matches (&catalog, image[j].source, start, stop);
     42    find_matches (&catalog, image[0].source, start, stop);
    4443    wcatalog (&catalog);
    4544    unlock_catalog (&catalog);
     
    4746
    4847  /* find and delete matching images */
    49   imlist = find_images_data (image, &Nimlist);
     48  imlist = find_images_data (db, image, &Nimlist);
    5049  if (!Nimlist) Shutdown ("image %s not found in db", filename);
    5150
    52   dimages (imlist, Nimlist);
     51  fits_vtable_from_ftable (&db[0].ftable, &db[0].vtable, imlist, Nimlist);
     52  dvo_image_update (db, VERBOSE);
     53  unlock_image_db (db);
    5354
    54   save_image_db ();
    55   unlock_image_db ();
    5655  fprintf (stderr, "SUCCESS\n");
    5756  exit (0);
  • trunk/Ohana/src/delstar/src/delete_imagename.c

    r4680 r4864  
    11# include "delstar.h"
    22
    3 void delete_imagename (char *name) {
     3void delete_imagename (FITS_DB *db, char *name) {
    44
    55  int i, j, k;
     
    1212  Catalog catalog;
    1313
    14   image = GetImages (&Nimage);
     14  image = fits_table_get_Image (&db[0].ftable, &Nimage, &db[0].swapped);
    1515
    1616  /* find image in db by name */
    17   imlist = find_images_name (name, &Nimlist);
     17  imlist = find_images_name (db, name, &Nimlist);
    1818  if (!Nimlist) Shutdown ("image %s not found in db", name);
    1919 
     
    5555
    5656  /* delete the identified images */
    57   dimages (imlist, Nimlist);
     57  fits_vtable_from_ftable (&db[0].ftable, &db[0].vtable, imlist, Nimlist);
     58  dvo_image_update (db, VERBOSE);
     59  unlock_image_db (db);
    5860
    59   save_image_db ();
    60   unlock_image_db ();
    6161  fprintf (stderr, "SUCCESS\n");
    6262  exit (0);
  • trunk/Ohana/src/delstar/src/delete_times.c

    r4680 r4864  
    11# include "delstar.h"
    22
    3 void delete_times () {
     3void delete_times (FITS_DB *db) {
    44
    55  int i, j, k, n;
     
    1717  ALLOCATE (region, GSCRegion, NREGIONS);
    1818
    19   image = GetImages (&Nimage);
     19  image = fits_table_get_Image (&db[0].ftable, &Nimage, &db[0].swapped);
    2020
    2121  /* find images for time range, delete each image */
    22   imlist = find_images_time (START, END, PHOTCODE, &Nimlist);
     22  imlist = find_images_time (db, START, END, PHOTCODE, &Nimlist);
    2323
    2424  /* find all overlapping regions */
     
    7575
    7676  /* delete the identified images */
    77   dimages (imlist, Nimlist);
     77  fits_vtable_from_ftable (&db[0].ftable, &db[0].vtable, imlist, Nimlist);
     78  dvo_image_update (db, VERBOSE);
     79  unlock_image_db (db);
    7880
    79   save_image_db ();
    80   unlock_image_db ();
    8181  fprintf (stderr, "SUCCESS\n");
    8282  exit (0);
  • trunk/Ohana/src/delstar/src/delstar.c

    r4680 r4864  
    22
    33int main (int argc, char **argv) {
     4
     5  FITS_DB db;
    46
    57  SetSignals ();
     
    79  args (&argc, argv);
    810
    9   lock_image_db ();
    10   load_image_db ();
     11  set_db (&db);
     12  lock_image_db (&db, ImageCat);
     13  load_image_db (&db);
    1114
    12   /* delete orphaned measurements (no image) from catalog */
    1315  switch (MODE) {
    1416    case MODE_IMAGEFILE:
    15       delete_imagefile (argv[1]);
     17      delete_imagefile (&db, argv[1]);
    1618      break;
    1719    case MODE_IMAGENAME:
    18       delete_imagename (argv[1]);
     20      delete_imagename (&db, argv[1]);
    1921      break;
    2022    case MODE_TIME:
    21       delete_times ();
     23      delete_times (&db);
    2224      break;
    2325    case MODE_ORPHAN:
  • trunk/Ohana/src/delstar/src/find_image_db.c

    r4682 r4864  
    11# include "delstar.h"
    22
    3 int *find_images_name (char *filename, int *nlist) {
     3int *find_images_name (FITS_DB *db, char *filename, int *nlist) {
    44
    55  int i, Nimage, Nlist, NLIST;
     
    1616  }
    1717
    18   image = GetImages (&Nimage);
     18  image = fits_table_get_Image (&db[0].ftable, &Nimage, &db[0].swapped);
    1919
    2020  Nlist = 0;
     
    3434
    3535/* find images in db by image data (time/photcode) */
    36 int *find_images_data (Image *timage, int *nlist) {
     36int *find_images_data (FITS_DB *db, Image *timage, int *nlist) {
    3737
    3838  int i, Nimage, Nlist, NLIST;
     
    4242  int code;
    4343
     44  image = fits_table_get_Image (&db[0].ftable, &Nimage, &db[0].swapped);
     45
    4446  start = timage[0].tzero - MAX(0.05*timage[0].trate*timage[0].NY, 1);
    4547  stop  = timage[0].tzero + MAX(1.05*timage[0].trate*timage[0].NY, 1);
    4648  code  = timage[0].source;
    47 
    48   image = GetImages (&Nimage);
    4949
    5050  Nlist = 0;
     
    6666
    6767/* find images in db by image data (time/photcode) */
    68 int *find_images_time (time_t start, time_t end, PhotCode *code, int *nlist) {
     68int *find_images_time (FITS_DB *db, time_t start, time_t end, PhotCode *code, int *nlist) {
    6969
    7070  int i, Nimage, Nlist, NLIST;
     
    7272  Image *image;
    7373
    74   image = GetImages (&Nimage);
     74  image = fits_table_get_Image (&db[0].ftable, &Nimage, &db[0].swapped);
    7575
    7676  Nlist = 0;
  • trunk/Ohana/src/delstar/src/image-db.c

    r4680 r4864  
    11# include "delstar.h"
    22
    3 # define LOCK LCK_XCLD
     3void lock_image_db (FITS_DB *db, char *filename) {
    44
    5 /* file-pointer to Image.db table. if image db does not yet exist */
    6 static FILE *f = (FILE *) NULL;
    7 static int dbstate = LCK_UNLOCK;
     5  /* lock the image catalog */
     6  check_permissions (filename);
    87
    9 static Header header;
    10 static Image *image = NULL;
    11 static int   Nimage;
     8  db[0].lockstate = LCK_XCLD;
     9  db[0].timeout   = 3600.0;
     10  fits_db_init (db);
    1211
    13 FILE *GetDB (int *state) {
    14   *state = dbstate;
    15   return (f);
     12  if (!fits_db_lock (db, filename)) {
     13    fprintf (stderr, "ERROR: can't lock image catalog\n");
     14    exit (1);
     15  }
    1616}
    1717
    18 Image *GetImages (int *nimage) {
    19   *nimage = Nimage;
    20   return (image);
    21 }
    22 
    23 int SetImages (Image *new, int Nnew) {
    24   Nimage = Nnew;
    25   image  =  new;
    26   fits_modify (&header, "NIMAGES", "%d", 1, Nimage);
    27   return (TRUE);
    28 }
    29 
    30 /* clean up open / locked ImageCat before shutting down */
    31 int Shutdown (char *format, ...) { 
    32   va_list argp;
    33   char *formatplus;
    34  
    35   ALLOCATE (formatplus, char, strlen(format));
    36   strcpy (formatplus, format);
    37   strcat (formatplus, "\n");
    38 
    39   va_start (argp, format);
    40   vfprintf (stderr, formatplus, argp);
    41   va_end (argp);
    42 
    43   SetProtect (TRUE);
    44   fclearlockfile (ImageCat, f, LOCK, &dbstate);
    45   fprintf (stderr, "ERROR: addstar halted\n");
    46   exit (1);
    47 }
    48 
    49 void lock_image_db () {
    50   /* lock the image catalog */
    51   check_permissions (ImageCat);
    52   f = fsetlockfile (ImageCat, 3600.0, LOCK, &dbstate);
    53   if (f == NULL) {
    54     Shutdown ("ERROR: can't lock image catalog");
    55   }
    56   if (dbstate == LCK_EMPTY) {
    57     Shutdown ("ERROR: database is empty");
    58   }
    59   fseek (f, 0, SEEK_SET);
    60 }
    61 
    62 int load_image_db () {
    63 
    64   int nimage;
    65 
    66   /* read header */
    67   fseek (f, 0, SEEK_SET);
    68   if (!fits_fread_header (f, &header)) {
    69     Shutdown ("can't read image catalog %s", ImageCat);
    70   }
    71   fseek (f, header.size, SEEK_SET);
    72 
    73   Nimage = 0;
    74   fits_scan (&header, "NIMAGES", "%d", 1, &Nimage);
    75   ALLOCATE (image, Image, Nimage);
    76 
    77   nimage = Fread (image, sizeof(Image), Nimage, f, "image");
    78   if (nimage != Nimage) {
    79     Shutdown ("error reading images from db file");
    80   }
    81  
    82   return (TRUE);
    83 }
    84 
    85 int save_image_db () {
    86 
    87   int status;
    88   char line[1024];
    89   mode_t mode;
    90 
    91   /* use cp to make backup copy */
    92   sprintf (line, "cp %s %s~", ImageCat, ImageCat);
    93   status = system (line);
    94   if (status) {
    95     Shutdown ("ERROR: unable to create %s~, exiting", ImageCat);
    96   }
    97   mode = S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH;
    98   sprintf (line, "%s~", ImageCat);
    99   chmod (line, mode);
    100 
    101   /* update header */
    102   fits_modify (&header, "NIMAGES", "%d", 1, Nimage);
    103 
    104   /* write out data to already opened file */
    105   fseek (f, 0, SEEK_SET);
    106   Fwrite (header.buffer, 1, header.size, f, "char");
    107   Fwrite (image, sizeof(Image), Nimage, f, "image");
    108 
    109   return (TRUE);
    110 }
    111 
    112 void unlock_image_db () {
     18void unlock_image_db (FITS_DB *db) {
    11319
    11420  mode_t mode;
    11521
    116   fclearlockfile (ImageCat, f, LOCK, &dbstate);
     22  fits_db_close (db);
     23
     24  /* force permissions to 666 */
    11725  mode = S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH;
    118   chmod (ImageCat, mode);
     26  chmod (db[0].filename, mode);
    11927}
     28
     29int load_image_db (FITS_DB *db) {
     30
     31  if (db[0].dbstate == LCK_EMPTY) Shutdown ("ERROR: No images in catalog %s (1)", db[0].filename);
     32
     33  /* read entire db table */
     34  if (!dvo_image_load (db, VERBOSE, FALSE)) Shutdown ("can't read image catalog %s", db[0].filename);
     35}
  • trunk/Ohana/src/gastro2/src/rfits.c

    r4772 r4864  
    1313  if (!fits_fread_ftable (f, &table, "SMPFILE")) goto escape;
    1414
    15   stars = fits_table_get_SMPData (&table, &Nstars);
     15  stars = fits_table_get_SMPData (&table, &Nstars, NULL);
    1616
    1717  ALLOCATE (stardata, StarData, Nstars);
  • trunk/Ohana/src/getstar/src/gimages.c

    r2490 r4864  
    1010  Header header;
    1111 
    12   f = fopen (ImageCat, "r");
    13   if (f == (FILE *) NULL) {
    14     fprintf (stderr, "error opening image cat %s\n", ImageCat);
    15     exit (1);
    16   }
    17 
    18   /* read header */
    19   if (!fits_load_header (f, &header)) {
    20     if (VERBOSE) fprintf (stderr, "ERROR: can't read image catalog %s\n", ImageCat);
    21     exit (1);
    22   }
     12  set_db (&db);
     13  lock_image_db (&db, ImageCat);
     14  if (db[0].dbstate == LCK_EMPTY) Shutdown ("ERROR: No images in catalog %s (1)", db[0].filename);
     15  if (!dvo_image_load (db, VERBOSE, FALSE)) Shutdown ("can't read image catalog %s", db[0].filename);
     16  timage = fits_table_get_Image (&db[0].ftable, &Nimage, &db[0].swapped);
     17  unlock_image_db (&db, ImageCat);
    2318
    2419  fits_scan (&header, "ZERO_PT", "%lf", 1, &zeropt);
     
    2621    fprintf (stderr, "ERROR: zero point in image table (%f:%s) inconsistent with zero point in image header (%f:%s)\n",
    2722             zeropt, ImageCat, ZeroPt, filename);
    28     exit (1);
    29   }
    30 
    31   /* advance to data segment */
    32   fseek (f, header.size, SEEK_SET);
    33 
    34   Nimage = 0;
    35   fits_scan (&header, "NIMAGES", "%d", 1, &Nimage);
    36   /* check that file size makes sense */
    37   if (stat (ImageCat, &filestatus) == -1) {
    38     fprintf (stderr, "ERROR: failed to get status of image catalog\n");
    39     exit (1);
    40   }
    41   size = Nimage*sizeof(Image) + header.size;
    42   if (size != filestatus.st_size) {
    43     fprintf (stderr, "ERROR: image catalog has inconsistent size\n");
    44     exit (1);
    45   }
    46 
    47   ALLOCATE (timage, Image, Nimage);
    48   nimage = Fread (timage, sizeof(Image), Nimage, f, "image");
    49   if (nimage != Nimage) {
    50     fprintf (stderr, "error reading images from table\n");
    5123    exit (1);
    5224  }
  • trunk/Ohana/src/imregister/Makefile

    r4024 r4864  
    179179
    180180install:
    181         for i in $(INSTALL); do make $$i.install; done
     181        for i in $(INSTALL); do make $$i.install || exit; done
    182182
    183183clean:
  • trunk/Ohana/src/imregister/detrend/altpath.c

    r3606 r4864  
    88  char *dBPath, infile[256], outfile[256], line[1024];
    99  struct stat statbuf;
    10   VTable vtable;
    1110
    1211  ALLOCATE (current, int, Nimage);
     
    4847
    4948    /** we may later want to pull this out and put it elsewhere **/
    50     fits_vtable_from_ftable (&db[0].ftable, &vtable, list, Nlist);
     49    fits_vtable_from_ftable (&db[0].ftable, &db[0].vtable, list, Nlist);
    5150    for (i = 0; i < Nmatch; i++) {
    52       fits_convert_DetReg ((DetReg *) vtable.buffer[i], sizeof (DetReg), 1);
     51      fits_convert_DetReg ((DetReg *) db[0].vtable.buffer[i], sizeof (DetReg), 1);
    5352    }
    54     fits_db_update (db, &vtable);
     53    fits_db_update (db);
    5554    fits_db_close (db);
    5655    fits_db_free (db);
     
    8584
    8685    /** we may later want to pull this out and put it elsewhere **/
    87     fits_vtable_from_ftable (&db[0].ftable, &vtable, list, Nlist);
     86    fits_vtable_from_ftable (&db[0].ftable, &db[0].vtable, list, Nlist);
    8887    for (i = 0; i < Nmatch; i++) {
    89       fits_convert_DetReg ((DetReg *) vtable.buffer[i], sizeof (DetReg), 1);
     88      fits_convert_DetReg ((DetReg *) db[0].vtable.buffer[i], sizeof (DetReg), 1);
    9089    }
    91     fits_db_update (db, &vtable);
     90    fits_db_update (db);
    9291    fits_db_close (db);
    9392    fits_db_free (db);
     
    114113
    115114    /** we may later want to pull this out and put it elsewhere **/
    116     fits_vtable_from_ftable (&db[0].ftable, &vtable, list, Nlist);
     115    fits_vtable_from_ftable (&db[0].ftable, &db[0].vtable, list, Nlist);
    117116    for (i = 0; i < Nmatch; i++) {
    118       fits_convert_DetReg ((DetReg *) vtable.buffer[i], sizeof (DetReg), 1);
     117      fits_convert_DetReg ((DetReg *) db[0].vtable.buffer[i], sizeof (DetReg), 1);
    119118    }
    120     fits_db_update (db, &vtable);
     119    fits_db_update (db);
    121120    fits_db_close (db);
    122121    fits_db_free (db);
  • trunk/Ohana/src/imregister/detrend/modify.c

    r3606 r4864  
    66  int i, j, value;
    77  int *list;
    8   VTable vtable;
    98 
    109  value = M_UNDEF;
     
    4544
    4645  /** we may later want to pull this out and put it elsewhere **/
    47   fits_vtable_from_ftable (&db[0].ftable, &vtable, list, Nmatch);
     46  fits_vtable_from_ftable (&db[0].ftable, &db[0].vtable, list, Nmatch);
    4847  for (i = 0; i < Nmatch; i++) {
    49     fits_convert_DetReg ((DetReg *) vtable.buffer[i], sizeof (DetReg), 1);
     48    fits_convert_DetReg ((DetReg *) db[0].vtable.buffer[i], sizeof (DetReg), 1);
    5049  }
    51   fits_db_update (db, &vtable);
     50  fits_db_update (db);
    5251  fits_db_close (db);
    5352  fits_db_free (db);
  • trunk/Ohana/src/imregister/imphot/modify.c

    r4024 r4864  
    55
    66  int i, j;
    7   VTable vtable;
    87
    98  /* modify the selected entries */
     
    2928
    3029  /** we may later want to pull this out and put it elsewhere **/
    31   fits_vtable_from_ftable (&db[0].ftable, &vtable, match, Nmatch);
     30  fits_vtable_from_ftable (&db[0].ftable, &db[0].vtable, match, Nmatch);
    3231  for (i = 0; i < Nmatch; i++) {
    33     fits_convert_Image ((Image *) vtable.buffer[i], sizeof (Image), 1);
     32    fits_convert_Image ((Image *) db[0].vtable.buffer[i], sizeof (Image), 1);
    3433  }
    35   fits_db_update (db, &vtable);
     34  fits_db_update (db);
    3635  fits_db_close (db);
    3736  fits_db_free (db);
  • trunk/Ohana/src/imregister/imreg/imregclient.c

    r3650 r4864  
    77  FILE *f;
    88  RegImage *image;
    9   VTable vtable;
    109  FITS_DB db;
    1110
     
    8382
    8483  fits_convert_RegImage (image, sizeof (RegImage), Nentry);
    85   fits_table_to_vtable (&db.ftable, &vtable, 0, 0);
    86   fits_vadd_rows (&vtable, (char *) image, Nentry, sizeof(RegImage));
     84  fits_table_to_vtable (&db.ftable, &db.vtable, 0, 0);
     85  fits_vadd_rows (&db.vtable, (char *) image, Nentry, sizeof(RegImage));
    8786
    88   fits_db_update (&db, &vtable);
     87  fits_db_update (&db);
    8988  fits_db_close (&db);
    9089  fits_db_free (&db);
  • trunk/Ohana/src/imregister/imreg/modify.c

    r3606 r4864  
    77  char *tmppath;
    88  char *ext, *root, *path, dist;
    9   VTable vtable;
    109
    1110  Nold = 0;
     
    7978
    8079  /** we may later want to pull this out and put it elsewhere **/
    81   fits_vtable_from_ftable (&db[0].ftable, &vtable, match, Nmatch);
     80  fits_vtable_from_ftable (&db[0].ftable, &db[0].vtable, match, Nmatch);
    8281  for (i = 0; i < Nmatch; i++) {
    83     fits_convert_RegImage ((RegImage *) vtable.buffer[i], sizeof (RegImage), 1);
     82    fits_convert_RegImage ((RegImage *) db[0].vtable.buffer[i], sizeof (RegImage), 1);
    8483  }
    85   fits_db_update (db, &vtable);
     84  fits_db_update (db);
    8685  fits_db_close (db);
    8786  fits_db_free (db);
  • trunk/Ohana/src/imregister/spreg/modify.c

    r3509 r4864  
    66  int i, j, Nold;
    77  char *tmppath;
    8   VTable vtable;
    98
    109  Nold = 0;
     
    3938
    4039  /** we may later want to pull this out and put it elsewhere **/
    41   fits_vtable_from_ftable (&db[0].ftable, &vtable, match, Nmatch);
     40  fits_vtable_from_ftable (&db[0].ftable, &db[0].vtable, match, Nmatch);
    4241  for (i = 0; i < Nmatch; i++) {
    43     fits_convert_Spectrum ((Spectrum *) vtable.buffer[i], sizeof (Spectrum), 1);
     42    fits_convert_Spectrum ((Spectrum *) db[0].vtable.buffer[i], sizeof (Spectrum), 1);
    4443  }
    45   fits_db_update (db, &vtable);
     44  fits_db_update (db);
    4645  fits_db_close (db);
    4746  fits_db_free (db);
  • trunk/Ohana/src/imregister/src/detregister.c

    r3649 r4864  
    11# include "imregister.h"
    22# include "detrend.h"
    3 static char *version = "detregister $Revision: 3.3 $";
     3static char *version = "detregister $Revision: 3.4 $";
    44
    55int main (int argc, char **argv) {
     
    88  DetReg newdata;
    99  Descriptor descriptor;
    10   VTable vtable;
    1110  FITS_DB db;
    1211 
     
    4039
    4140  fits_convert_DetReg (&newdata, sizeof (DetReg), 1);
    42   fits_table_to_vtable (&db.ftable, &vtable, 0, 0);
    43   fits_vadd_rows (&vtable, (char *) &newdata, 1, sizeof(DetReg));
     41  fits_table_to_vtable (&db.ftable, &db.vtable, 0, 0);
     42  fits_vadd_rows (&db.vtable, (char *) &newdata, 1, sizeof(DetReg));
    4443
    45   fits_db_update (&db, &vtable);
     44  fits_db_update (&db);
    4645  fits_db_close (&db);
    4746  fits_db_free (&db);
  • trunk/Ohana/src/imregister/src/detsearch.c

    r3649 r4864  
    11# include "imregister.h"
    22# include "detrend.h"
    3 static char *version = "detsearch $Revision: 3.6 $";
     3static char *version = "detsearch $Revision: 3.7 $";
    44
    55int main (int argc, char **argv) {
     
    3535
    3636  if (!output.Modify && !output.Delete && !output.Altpath) fits_db_close (&db);
    37   detrend = fits_table_get_DetReg (&db.ftable, &Ndetrend);
     37  detrend = fits_table_get_DetReg (&db.ftable, &Ndetrend, &db.swapped);
    3838 
    3939  match = MatchCriteria (detrend, Ndetrend, &Nmatch);          /* match basic criteria */
  • trunk/Ohana/src/imregister/src/imphotmerge.c

    r2803 r4864  
    11# include "imregister.h"
    22
     3/*** this needs to be written using dvo_image functions ***/
     4
    35Image *LoadImageTable (FILE *f, Header *header, int *nimage);
    4 static char *version = "imphotcopy $Revision: 1.2 $";
     6static char *version = "imphotcopy $Revision: 1.3 $";
    57
    68int main (int argc, char **argv) {
  • trunk/Ohana/src/imregister/src/imphotsearch.c

    r4854 r4864  
    22# include "imphot.h"
    33
    4 static char *version = "imphotsearch $Revision: 1.8 $";
     4static char *version = "imphotsearch $Revision: 1.9 $";
    55
    66int main (int argc, char **argv) {
     
    2525  }
    2626  /* we use a varient of fits_db_load since the file may be in text format */
    27   if (!dvo_image_load (&db)) {
     27  if (!dvo_image_load (&db, VERBOSE, FORCE_READ)) {
    2828    fprintf (stderr, "ERROR: failure to load db\n");
    2929    fits_db_close (&db);
     
    3232  if (!options.modify) fits_db_close (&db);
    3333
    34   image = fits_table_get_Image (&db.ftable, &Nimage);
     34  image = fits_table_get_Image (&db.ftable, &Nimage, &db.swapped);
    3535
    3636  match = subset (image, Nimage, &Nmatch);
  • trunk/Ohana/src/imregister/src/imregister.c

    r3649 r4864  
    11# include "imregister.h"
    22# include "imreg.h"
    3 static char *version = "imregister $Revision: 3.6 $";
     3static char *version = "imregister $Revision: 3.7 $";
    44
    55int main (int argc, char **argv) {
     
    77  int Nregimage;
    88  RegImage *image, *regimage;
    9   VTable vtable;
    109  FITS_DB db;
    1110
     
    3938
    4039  fits_convert_RegImage (regimage, sizeof (RegImage), Nregimage);
    41   fits_table_to_vtable (&db.ftable, &vtable, 0, 0);
    42   fits_vadd_rows (&vtable, (char *) regimage, Nregimage, sizeof(RegImage));
     40  fits_table_to_vtable (&db.ftable, &db.vtable, 0, 0);
     41  fits_vadd_rows (&db.vtable, (char *) regimage, Nregimage, sizeof(RegImage));
    4342
    44   fits_db_update (&db, &vtable);
     43  fits_db_update (&db);
    4544  fits_db_close (&db);
    4645  fits_db_free (&db);
  • trunk/Ohana/src/imregister/src/imregtable.c

    r3649 r4864  
    11# include "imregister.h"
    22# include "imreg.h"
    3 static char *version = "imregtable $Revision: 3.6 $";
     3static char *version = "imregtable $Revision: 3.7 $";
    44
    55int main (int argc, char **argv) {
     
    1212  Matrix matrix;
    1313  FTable ftable;
    14   VTable vtable;
    1514  FITS_DB db;
    1615
     
    3433  fits_read_ftable  (infile, &ftable, "IMAGE_DATABASE");
    3534
    36   image = fits_table_get_RegImage (&ftable, &Nimage);
     35  image = fits_table_get_RegImage (&ftable, &Nimage, NULL);
    3736
    3837  /* load database table */
     
    5857
    5958  fits_convert_RegImage (image, sizeof (RegImage), Nimage);
    60   fits_table_to_vtable (&db.ftable, &vtable, 0, 0);
    61   fits_vadd_rows (&vtable, (char *) image, Nimage, sizeof(RegImage));
     59  fits_table_to_vtable (&db.ftable, &db.vtable, 0, 0);
     60  fits_vadd_rows (&db.vtable, (char *) image, Nimage, sizeof(RegImage));
    6261
    63   fits_db_update (&db, &vtable);
     62  fits_db_update (&db);
    6463  fits_db_close (&db);
    6564  fits_db_free (&db);
  • trunk/Ohana/src/imregister/src/imsearch.c

    r3649 r4864  
    11# include "imregister.h"
    22# include "imreg.h"
    3 static char *version = "imsearch $Revision: 3.5 $";
     3static char *version = "imsearch $Revision: 3.6 $";
    44
    55int main (int argc, char **argv) {
     
    2929  if (!output.modify && !output.delete) fits_db_close (&db);
    3030
    31   image = fits_table_get_RegImage (&db.ftable, &Nimage);
     31  image = fits_table_get_RegImage (&db.ftable, &Nimage, &db.swapped);
    3232 
    3333  match = match_criteria (image, Nimage, &Nmatch);
  • trunk/Ohana/src/imregister/src/imstatreg.c

    r4772 r4864  
    11# include "imregister.h"
    22# include "imreg.h"
    3 static char *version = "imstatreg $Revision: 3.14 $";
     3static char *version = "imstatreg $Revision: 3.15 $";
    44
    55int main (int argc, char **argv) {
     
    1010  RegImage *image, *subset;
    1111  FITS_DB image_db, temp_db;
    12   VTable vtable;
    1312
    1413  get_version (argc, argv, version);
     
    6766      exit (1);
    6867    }
    69     subset = fits_table_get_RegImage (&temp_db.ftable, &Nsubset);
     68    subset = fits_table_get_RegImage (&temp_db.ftable, &Nsubset, &temp_db.swapped);
    7069    fprintf (stderr, "temporary database read\n");
    7170
     
    9089         we will just drop the temp db data */
    9190    }
    92     image = fits_table_get_RegImage (&image_db.ftable, &Nimage);
     91    image = fits_table_get_RegImage (&image_db.ftable, &Nimage, &image_db.swapped);
    9392    fprintf (stderr, "main database read\n");
    9493
     
    9897
    9998    /* update entries in main db */
    100     fits_vtable_from_ftable (&image_db.ftable, &vtable, match, Nmatch);
     99    fits_vtable_from_ftable (&image_db.ftable, &image_db.vtable, match, Nmatch);
    101100    for (i = 0; i < Nmatch; i++) {
    102       fits_convert_RegImage ((RegImage *) vtable.buffer[i], sizeof (RegImage), 1);
     101      fits_convert_RegImage ((RegImage *) image_db.vtable.buffer[i], sizeof (RegImage), 1);
    103102    }
    104     fits_db_update (&image_db, &vtable);
     103    fits_db_update (&image_db);
    105104    fits_db_close (&image_db);
    106105
    107106    fits_db_free (&image_db);
    108107    fits_db_free (&temp_db);
    109     fits_free_vtable (&vtable);
    110108    if (match != NULL) free (match);
    111109    if (image != NULL) free (image);
  • trunk/Ohana/src/imregister/src/photreg.c

    r3649 r4864  
    11# include "imregister.h"
    22# include "photreg.h"
    3 static char *version = "photreg $Revision: 1.7 $";
     3static char *version = "photreg $Revision: 1.8 $";
    44
    55int main (int argc, char **argv) {
     
    77  char *filename;
    88  PhotPars newdata;
    9   VTable vtable;
    109  FITS_DB db;
    1110 
     
    4241  /** we may later want to pull this out and put it elsewhere **/
    4342  fits_convert_PhotPars (&newdata, sizeof (PhotPars), 1);
    44   fits_table_to_vtable (&db.ftable, &vtable, 0, 0);
    45   fits_vadd_rows (&vtable, (char *) &newdata, 1, sizeof(PhotPars));
     43  fits_table_to_vtable (&db.ftable, &db.vtable, 0, 0);
     44  fits_vadd_rows (&db.vtable, (char *) &newdata, 1, sizeof(PhotPars));
    4645
    47   fits_db_update (&db, &vtable);
     46  fits_db_update (&db);
    4847  fits_db_close (&db);
    4948  fits_db_free (&db);
  • trunk/Ohana/src/imregister/src/photsearch.c

    r3649 r4864  
    11# include "imregister.h"
    22# include "photreg.h"
    3 static char *version = "photsearch $Revision: 1.7 $";
     3static char *version = "photsearch $Revision: 1.8 $";
    44
    55int main (int argc, char **argv) {
     
    4141  /* add test to EXTNAME? */
    4242  if (output.convert) {
    43     photpars_old = fits_table_get_PhotParsOld (&db.ftable, &Nphotpars);
     43    photpars_old = fits_table_get_PhotParsOld (&db.ftable, &Nphotpars, &db.swapped);
    4444    photpars = PhotParsOld_to_PhotPars (photpars_old, Nphotpars);
    4545  } else {
    46     photpars = fits_table_get_PhotPars (&db.ftable, &Nphotpars);
     46    photpars = fits_table_get_PhotPars (&db.ftable, &Nphotpars, &db.swapped);
    4747  }
    4848
  • trunk/Ohana/src/imregister/src/spregister.c

    r3649 r4864  
    11# include "imregister.h"
    22# include "spreg.h"
    3 static char *version = "spregister $Revision: 1.7 $";
     3static char *version = "spregister $Revision: 1.8 $";
    44
    55int main (int argc, char **argv) {
    66 
    77  Spectrum *spectrum;
    8   VTable vtable;
    98  FITS_DB db;
    109
     
    3938
    4039  fits_convert_Spectrum (spectrum, sizeof (Spectrum), 1);
    41   fits_table_to_vtable (&db.ftable, &vtable, 0, 0);
    42   fits_vadd_rows (&vtable, (char *) spectrum, 1, sizeof(Spectrum));
     40  fits_table_to_vtable (&db.ftable, &db.vtable, 0, 0);
     41  fits_vadd_rows (&db.vtable, (char *) spectrum, 1, sizeof(Spectrum));
    4342
    44   fits_db_update (&db, &vtable);
     43  fits_db_update (&db);
    4544  fits_db_close (&db);
    4645  fits_db_free (&db);
  • trunk/Ohana/src/imregister/src/spsearch.c

    r3649 r4864  
    11# include "imregister.h"
    22# include "spreg.h"
    3 static char *version = "spsearch $Revision: 1.6 $";
     3static char *version = "spsearch $Revision: 1.7 $";
    44
    55int main (int argc, char **argv) {
     
    2929  if (!output.modify && !output.delete) fits_db_close (&db);
    3030
    31   spectrum = fits_table_get_Spectrum (&db.ftable, &Nspectrum);
     31  spectrum = fits_table_get_Spectrum (&db.ftable, &Nspectrum, &db.swapped);
    3232 
    3333  match = match_criteria (spectrum, Nspectrum, &Nmatch);
  • trunk/Ohana/src/libautocode/def/autocode.c

    r4019 r4864  
    2727
    2828/*** add test of EXTNAME and header-defined columns? ***/
    29 $STRUCT *fits_table_get_$STRUCT (FTable *ftable, int *Ndata) {
     29/* return internal structure representation */
     30$STRUCT *fits_table_get_$STRUCT (FTable *ftable, int *Ndata, int *swapped) {
    3031
    3132  $STRUCT *data;
     
    3334  *Ndata = ftable[0].header[0].Naxis[1];
    3435  data = ($STRUCT *) ftable[0].buffer;
    35   fits_convert_$STRUCT (data, sizeof ($STRUCT), *Ndata);
    36  
     36  if ((swapped == NULL) || (*swapped == FALSE)) {
     37    fits_convert_$STRUCT (data, sizeof ($STRUCT), *Ndata);
     38    if (swapped != NULL) *swapped = TRUE;
     39  }
    3740  return (data);
    3841}
  • trunk/Ohana/src/libautocode/def/autocode.h

    r4772 r4864  
    22/** STRUCT DEFINITION **/
    33
    4 $STRUCT *fits_table_get_$STRUCT (FTable *table, int *Ndata);
     4$STRUCT *fits_table_get_$STRUCT (FTable *table, int *Ndata, int *swapped);
    55int      fits_table_set_$STRUCT (FTable *ftable, $STRUCT *data, int Ndata);
    66int      fits_table_mkheader_$STRUCT (Header *header);
  • trunk/Ohana/src/libfits/include/fitsio.h

    r4799 r4864  
    8282int   fits_fread_Theader          PROTO((FILE *, Header *));
    8383int   fits_fread_ftable           PROTO((FILE *, FTable *, char *));
     84int   fits_fread_vtable_range     PROTO((FILE *f, VTable *table, int start, int Nrows));
    8485int   fits_fread_vtable           PROTO((FILE *f, VTable *table, char *extname, int Nrow, int *row));
    8586int   fits_fread_ftable_data      PROTO((FILE *f, FTable *table));
     
    122123int   fits_read_Theader           PROTO((char *, Header *));     
    123124int   fits_read_table             PROTO((char *, FTable *));
     125int   fits_read_table             PROTO((char *, FTable *));
    124126int   fits_write_Theader          PROTO((char *, Header *header));
    125127int   fits_write_table            PROTO((char *, FTable *));
  • trunk/Ohana/src/libohana/Makefile

    r4832 r4864  
    4747$(SRC)/fits_db.$(ARCH).o         \
    4848$(SRC)/photfits.$(ARCH).o        \
     49$(SRC)/dvo_image.$(ARCH).o           \
    4950$(SRC)/phot_catalog.$(ARCH).o    \
    5051$(SRC)/phot_catalog_mef.$(ARCH).o      \
  • trunk/Ohana/src/libohana/include/dvo.h

    r4832 r4864  
    9090  Header theader;
    9191  FTable ftable;
     92  VTable vtable;
     93  int    mode;          /* what data storage mode is used for disk file? */
     94  int    format;        /* what data format is used for disk file? */
     95  int    virtual;       /* is table in ftable or vtable? */
     96  int    swapped;       /* is table in internal byte-order? */
    9297} FITS_DB;
    9398
     
    141146int   fits_db_lock                PROTO((FITS_DB *db, char *filename));
    142147int   fits_db_load                PROTO((FITS_DB *db));
     148int   fits_db_load_segment        PROTO((FITS_DB *db, int start, int Nrows));
     149int   fits_db_save                PROTO((FITS_DB *db));
     150int   fits_db_update              PROTO((FITS_DB *db));
    143151int   fits_db_close               PROTO((FITS_DB *db));
    144152int   fits_db_free                PROTO((FITS_DB *db));
    145 int   fits_db_save                PROTO((FITS_DB *db));
    146 int   fits_db_update              PROTO((FITS_DB *db, VTable *vtable));
    147153
    148154/* in coords.c, using libautocode/def/coords.d */
     
    256262int save_catalog_mef (Catalog *catalog, char VERBOSE);
    257263
     264/*** DVO image db I/O Functions ***/
     265int dvo_image_load (FITS_DB *db, int VERBOSE, int FORCE_READ);
     266int dvo_image_save (FITS_DB *db, int VERBOSE);
     267int dvo_image_update (FITS_DB *db, int VERBOSE);
     268int dvo_image_load_raw (FITS_DB *db, int VERBOSE, int FORCE_READ);
     269int dvo_image_update_raw (FITS_DB *db, int VERBOSE);
     270int dvo_image_save_raw (FITS_DB *db, int VERBOSE);
     271int dvo_image_addrows (FITS_DB *db, Image *new, int Nnew);
     272
    258273# endif
  • trunk/Ohana/src/libohana/src/dvo_convert.c

    r4832 r4864  
    2424  }
    2525  if (!strcmp (extname, "DVO_AVERAGE")) {
    26     average = fits_table_get_Average (ftable, Naverage);
     26    average = fits_table_get_Average (ftable, Naverage, NULL);
    2727    return (average);
    2828  }
    2929  if (!strcmp (extname, "DVO_AVERAGE_ELIXIR")) {
    3030    AverageElixir *tmpaverage;
    31     tmpaverage = fits_table_get_AverageElixir (ftable, Naverage);
     31    tmpaverage = fits_table_get_AverageElixir (ftable, Naverage, NULL);
    3232    average = AverageElixirToInternal (tmpaverage, *Naverage);
    3333    free (tmpaverage);
     
    3636  if (!strcmp (extname, "DVO_AVERAGE_LONEOS")) {
    3737    AverageLoneos *tmpaverage;
    38     tmpaverage = fits_table_get_AverageLoneos (ftable, Naverage);
     38    tmpaverage = fits_table_get_AverageLoneos (ftable, Naverage, NULL);
    3939    average = AverageLoneosToInternal (tmpaverage, *Naverage);
    4040    free (tmpaverage);
     
    4343  if (!strcmp (extname, "DVO_AVERAGE_PANSTARRS")) {
    4444    AveragePanstarrs *tmpaverage;
    45     tmpaverage = fits_table_get_AveragePanstarrs (ftable, Naverage);
     45    tmpaverage = fits_table_get_AveragePanstarrs (ftable, Naverage, NULL);
    4646    average = AveragePanstarrsToInternal (tmpaverage, *Naverage);
    4747    free (tmpaverage);
     
    9999  }
    100100  if (!strcmp (extname, "DVO_MEASURE")) {
    101     measure = fits_table_get_Measure (ftable, Nmeasure);
     101    measure = fits_table_get_Measure (ftable, Nmeasure, NULL);
    102102    return (measure);
    103103  }
    104104  if (!strcmp (extname, "DVO_MEASURE_ELIXIR")) {
    105105    MeasureElixir *tmpmeasure;
    106     tmpmeasure = fits_table_get_MeasureElixir (ftable, Nmeasure);
     106    tmpmeasure = fits_table_get_MeasureElixir (ftable, Nmeasure, NULL);
    107107    measure = MeasureElixirToInternal (tmpmeasure, *Nmeasure);
    108108    free (tmpmeasure);
     
    111111  if (!strcmp (extname, "DVO_MEASURE_LONEOS")) {
    112112    MeasureLoneos *tmpmeasure;
    113     tmpmeasure = fits_table_get_MeasureLoneos (ftable, Nmeasure);
     113    tmpmeasure = fits_table_get_MeasureLoneos (ftable, Nmeasure, NULL);
    114114    measure = MeasureLoneosToInternal (tmpmeasure, *Nmeasure);
    115115    free (tmpmeasure);
     
    118118  if (!strcmp (extname, "DVO_MEASURE_PANSTARRS")) {
    119119    MeasurePanstarrs *tmpmeasure;
    120     tmpmeasure = fits_table_get_MeasurePanstarrs (ftable, Nmeasure);
     120    tmpmeasure = fits_table_get_MeasurePanstarrs (ftable, Nmeasure, NULL);
    121121    measure = MeasurePanstarrsToInternal (tmpmeasure, *Nmeasure);
    122122    free (tmpmeasure);
  • trunk/Ohana/src/libohana/src/dvo_image.c

    r4854 r4864  
    44enum {FITS, RAW};
    55
    6 /** this is a varient on fits_db_load to handle the RAW mode */
    7 int dvo_image_load (FITS_DB *db, int VERBOSE) {
    8 
    9   int Nx, Ny, Naxis;
    10   int mode, status;
     6/* determine db mode (raw/fits) and read the complete table */
     7int dvo_image_load (FITS_DB *db, int VERBOSE, int FORCE_READ) {
     8
     9  int Naxis, Nrow, Nread, mode, status;
     10  char buffer[241];
    1111
    1212  /* database name must be set first */
    13   if (db == NULL) {
    14     fprintf (stderr, "db handle is not set\n");
     13  if (db == NULL) return (FALSE);
     14  if (db[0].f == NULL) return (FALSE);
     15
     16  fseek (db[0].f, 0, SEEK_SET);
     17
     18  /* test for NAXIS == 2 in line 3 */
     19  bzero (buffer, 241);
     20  Nread = fread (buffer, 1, 240, db[0].f);
     21  if (Nread != 240) {
     22    if (VERBOSE) fprintf (stderr, "can't determine image db mode\n");
    1523    return (FALSE);
    1624  }
     25  Nread = sscanf (&buffer[160], "NAXIS   = %d", &Naxis);
     26  if (Nread != 1) {
     27    if (VERBOSE) fprintf (stderr, "can't determine image db mode\n");
     28    return (FALSE);
     29  }
     30  fseek (db[0].f, 0, SEEK_SET);
     31
     32  mode = FITS;
     33  if (Naxis == 2) mode = RAW;
     34  if (VERBOSE) {
     35    switch (mode) {
     36      case FITS:
     37        fprintf (stderr, "reading images (mode FITS)\n");
     38        break;
     39      case RAW:
     40        fprintf (stderr, "reading images (mode RAW)\n");
     41        break;
     42      default:
     43        fprintf (stderr, "error getting image mode\n");
     44        exit (2);
     45    }
     46  }
     47
     48  /* read data in appropriate mode */
     49  if (mode == FITS) {
     50    status = fits_db_load (db);
     51  } else {
     52    status = dvo_image_load_raw (db, VERBOSE, FORCE_READ);
     53  }
     54  /* byteswap table data */
     55  Nrow = db[0].theader.Naxis[1];
     56  fits_convert_Image ((Image *) db[0].ftable.buffer, sizeof(Image), Nrow);
     57  db[0].swapped = TRUE;
     58
     59  return (TRUE);
     60}
     61
     62/* write the complete image table to disk in the requested mode */
     63int dvo_image_save (FITS_DB *db, int VERBOSE) {
     64
     65  int Nrow, mode, status;
     66
     67  mode = FITS;
     68  if (db[0].header.Naxes == 2) mode = RAW;
     69 
     70  /* byteswap table data */
     71  Nrow = db[0].theader.Naxis[1];
     72  if (db[0].swapped) {
     73    fits_convert_Image ((Image *) db[0].ftable.buffer, sizeof(Image), Nrow);
     74    db[0].swapped = FALSE;
     75  } 
     76 
     77  /* write data in appropriate mode */
     78  if (mode == FITS) {
     79    status = fits_db_save (db);
     80  } else {
     81    status = dvo_image_save_raw (db, VERBOSE);
     82  }
     83  return (TRUE);
     84}
     85
     86int dvo_image_addrows (FITS_DB *db, Image *new, int Nnew) {
     87
     88  int Nimages;
     89
     90  /* adjust header */
     91  Nimages = 0;
     92  fits_scan (&db[0].header, "NIMAGES", "%d", 1, &Nimages);
     93  Nimages += Nnew;
     94  fits_modify (&db[0].header, "NIMAGES", "%d", 1, Nimages);
     95
     96  fits_table_to_vtable (&db[0].ftable, &db[0].vtable, 0, 0);
     97  fits_vadd_rows (&db[0].vtable, (char *) new, Nnew, sizeof(Image));
     98
     99  /* check that primary header and table header agree */
     100  if (Nimages != db[0].theader.Naxis[1]) {
     101    fprintf (stderr, "header / table length mismatch!\n");
     102  }
     103  return (TRUE);
     104
     105
     106/* write the vtable data to disk in the requested mode */
     107int dvo_image_update (FITS_DB *db, int VERBOSE) {
     108
     109  int i, mode, status;
     110
     111  mode = FITS;
     112  if (db[0].header.Naxes == 2) mode = RAW;
     113 
     114  /* byteswap table data */
     115  for (i = 0; i < db[0].vtable.Nrow; i++) {
     116    fits_convert_Image ((Image *) db[0].vtable.buffer[i], sizeof(Image), 1);
     117  }
     118
     119  /* write data in appropriate mode */
     120  if (mode == FITS) {
     121    status = fits_db_update (db);
     122  } else {
     123    status = dvo_image_update_raw (db, VERBOSE);
     124  }
     125  return (TRUE);
     126}
     127
     128/* the old Image.dat files used a fake FITS header defining a finite data block
     129 * this function reads in the data portion, assuming header already loaded
     130 */
     131
     132int dvo_image_load_raw (FITS_DB *db, int VERBOSE, int FORCE_READ) {
     133
     134  int Nimage, size, nimage;
     135  struct stat filestatus;
     136  Image *image;
    17137
    18138  /* init & load in FITS table data - return FALSE on error */
     
    21141    return (FALSE);
    22142  }
    23 
    24   fits_scan (&db[0].header, "NAXIS",  "%d", 1, &Naxis);
    25   fits_scan (&db[0].header, "NAXIS1", "%d", 1, &Nx);
    26   fits_scan (&db[0].header, "NAXIS2", "%d", 1, &Ny);
    27  
    28   mode = FITS;
    29   if ((Naxis == 2) && (Nx == 1106) && (Ny == 1024)) {
    30     mode = TEXT;
    31   }
    32  
    33   /* how do we decide if it is text or fits? must examine header */
    34   if (mode == FITS) {
    35     status = dvo_image_load_fits (db, VERBOSE);
    36   } else {
    37     status = dvo_image_load_rtext (db, VERBOSE);
    38   }
    39   return (TRUE);
    40 }
    41 
    42 /* the old Image.dat files used a fake FITS header defining a finite data block
    43  * this function reads in the data portion, assuming header already loaded
    44  */
    45 
    46 int dvo_image_load_text (FITS_DB *db, int VERBOSE) {
    47 
    48   int Nimage, size, nimage;
    49   struct stat filestatus;
    50   Image *image;
    51143
    52144  /* check that file size makes sense */
     
    70162  /* create a dummy set of table information */
    71163  /* (original table has NAXIS = 2, change to 0) */
    72   fits_modify (&db[0].header, "NAXIS", "%d", 1, 0);
     164  /* fits_modify (&db[0].header, "NAXIS", "%d", 1, 0); */
    73165  fits_create_matrix (&db[0].header, &db[0].matrix);
    74166  fits_table_mkheader_Image (&db[0].theader);
     
    90182}
    91183
    92 /* load the rest of the db table into memory (first extension only) */
    93 int rfits (FITS_DB *db, int VERBOSE) {
    94 
    95   /* database name must be set first */
    96   if (db == NULL) {
    97     if (VERBOSE) fprintf (stderr, "db handle is not set\n");
    98     return (FALSE);
    99   }
    100   if (!fits_fread_matrix (db[0].f, &db[0].matrix, &db[0].header)) {
    101     if (VERBOSE) fprintf (stderr, "can't read primary matrix");
    102     return (FALSE);
    103   }
    104   if (!fits_fread_header (db[0].f, &db[0].theader)) {
    105     if (VERBOSE) fprintf (stderr, "can't read table header");
    106     return (FALSE);
    107   }
    108   if (!fits_fread_ftable_data (db[0].f, &db[0].ftable)) {
    109     if (VERBOSE) fprintf (stderr, "can't read table data");
    110     return (FALSE);
    111   }
    112   return (TRUE);
    113 }
     184/* write out image db elements from vtable */
     185int dvo_image_update_raw (FITS_DB *db, int VERBOSE) {
     186
     187  int i, Nx, Ny, Nrow, Nbytes;
     188  int status, start, offset;
     189  int *row;
     190
     191  if (VERBOSE) fprintf (stderr, "writing out %d images\n", db[0].vtable.Nrow);
     192
     193  /* position to start of file */
     194  Fseek (db[0].f, 0, SEEK_SET);
     195 
     196  /* write out complete header (no check on disk size?) */
     197  status = fwrite (db[0].header.buffer, 1, db[0].header.size, db[0].f);
     198  if (status != db[0].header.size) {
     199    fprintf (stderr, "ERROR: failed writing data to image header\n");
     200    exit (1);
     201  }
     202
     203  /** this code is identical to fits_fwrite_vtable, except without padding */
     204  Nrow = db[0].vtable.Nrow;
     205  row = db[0].vtable.row;
     206  fits_scan (db[0].vtable.header, "NAXIS1", "%d", 1, &Nx);
     207  fits_scan (db[0].vtable.header, "NAXIS2", "%d", 1, &Ny);
     208
     209  /* file pointer is at beginning of desired table data */
     210  start = ftell (db[0].f);
     211 
     212  for (i = 0; i < Nrow; i++) {
     213    offset = start + Nx*row[i];
     214    fseek (db[0].f, offset, SEEK_SET);
     215    Nbytes = fwrite (db[0].vtable.buffer[i], sizeof (char), Nx, db[0].f);
     216    if (Nbytes != Nx) { return (FALSE); }
     217  }
     218  return (TRUE);
     219}
     220
     221/* write out complete image db table from ftable */
     222int dvo_image_save_raw (FITS_DB *db, int VERBOSE) {
     223
     224  int status, Nx, Ny, size, Nbytes;
     225
     226  if (VERBOSE) fprintf (stderr, "writing out %d images\n", db[0].theader.Naxis[1]);
     227
     228  /* position to start of file */
     229  Fseek (db[0].f, 0, SEEK_SET);
     230 
     231  /* write out complete header (no check on disk size?) */
     232  status = fwrite (db[0].header.buffer, 1, db[0].header.size, db[0].f);
     233  if (status != db[0].header.size) {
     234    fprintf (stderr, "ERROR: failed writing data to image header\n");
     235    exit (1);
     236  }
     237
     238  fits_scan (db[0].ftable.header, "NAXIS1", "%d", 1, &Nx);
     239  fits_scan (db[0].ftable.header, "NAXIS2", "%d", 1, &Ny);
     240  size = Nx * Ny;
     241  Nbytes = fwrite (db[0].ftable.buffer, sizeof(char), size, db[0].f);
     242  if (Nbytes != size) return (FALSE);
     243  return (TRUE);
     244}
  • trunk/Ohana/src/libohana/src/fits_db.c

    r3649 r4864  
    55int fits_db_init (FITS_DB *db) {
    66
     7  db[0].f             = NULL;
    78  db[0].filename      = NULL;
    89  db[0].header.buffer = NULL;
    910  db[0].matrix.buffer = NULL;
     11  db[0].theader.buffer = NULL;
    1012  db[0].ftable.buffer = NULL;
    1113  db[0].ftable.header = &db[0].theader;
     14
     15  db[0].vtable.header = NULL;
     16  db[0].vtable.buffer = NULL;
     17  db[0].vtable.row    = NULL;
    1218  return (TRUE);
    1319}
     
    7985    return (FALSE);
    8086  }
     87  db[0].swapped = FALSE;  /* is table in internal byte-order? */
     88  return (TRUE);
     89}
     90
     91/* load the data from Nrows from table starting at start; load header, etc if needed */
     92int fits_db_load_segment (FITS_DB *db, int start, int Nrows) {
     93
     94  int Nskip;
     95
     96  /* database name must be set first */
     97  if (db == NULL) {
     98    fprintf (stderr, "db handle is not set\n");
     99    return (FALSE);
     100  }
     101
     102  /* database name must be opened */
     103  if (db[0].f == NULL) {
     104    fprintf (stderr, "db is not opened\n");
     105    return (FALSE);
     106  }
     107
     108  /* position to start of file */
     109  Fseek (db[0].f, 0, SEEK_SET);
     110
     111  /* load or skip header */
     112  if (db[0].header.buffer == NULL) {
     113    if (!fits_fread_header (db[0].f, &db[0].header)) {
     114      fprintf (stderr, "can't read primary header\n");
     115      return (FALSE);
     116    }
     117  } else {
     118    Nskip = db[0].header.size;
     119    Fseek (db[0].f, Nskip, SEEK_CUR);
     120  }
     121
     122  /* load or skip matrix */
     123  if (db[0].matrix.buffer == NULL) {
     124    if (!fits_fread_matrix (db[0].f, &db[0].matrix, &db[0].header)) {
     125      fprintf (stderr, "can't read primary matrix");
     126      return (FALSE);
     127    }
     128  } else {
     129    Nskip = fits_matrix_size (&db[0].header);
     130    Fseek (db[0].f, Nskip, SEEK_CUR);
     131  }
     132
     133  /* load or skip table header */
     134  if (db[0].theader.buffer == NULL) {
     135    if (!fits_fread_header (db[0].f, &db[0].theader)) {
     136      fprintf (stderr, "can't read table header");
     137      return (FALSE);
     138    }
     139  } else {
     140    Nskip = db[0].header.size;
     141    Fseek (db[0].f, Nskip, SEEK_CUR);
     142  }
     143
     144  /* read table segment into vtable */
     145  if (!fits_fread_vtable_range (db[0].f, &db[0].vtable, start, Nrows)) {
     146    fprintf (stderr, "can't read table data");
     147    return (FALSE);
     148  }
    81149  return (TRUE);
    82150}
     
    109177
    110178/* write vtable to db file (also appends rows to the end of the table) */
    111 int fits_db_update (FITS_DB *db, VTable *vtable) {
     179int fits_db_update (FITS_DB *db) {
    112180
    113181  /* this section is not valid if we have changed the size of header, matrix, theader */
    114182
    115183  /* write subset to file */
    116   make_backup (db[0].filename);
     184  make_backup (db[0].filename);  /*** drop this!!?? ***/
    117185  Fseek (db[0].f, 0, SEEK_SET);
    118186
     
    130198    return (FALSE);
    131199  }
    132   if (!fits_fwrite_vtable   (db[0].f, vtable))  {
     200  if (!fits_fwrite_vtable   (db[0].f, &db[0].vtable))  {
    133201    fprintf (stderr, "can't update table data");
    134202    return (FALSE);
     
    143211  fits_free_header (&db[0].theader);
    144212  fits_free_table  (&db[0].ftable);
     213  fits_free_vtable (&db[0].vtable);
    145214  if (db[0].filename != NULL) {
    146215    free (db[0].filename);
  • trunk/Ohana/src/libohana/src/phot_catalog_mef.c

    r4830 r4864  
    8787    }
    8888    /* no conversions currently defined */
    89     catalog[0].missing = fits_table_get_Missing (&ftable, &catalog[0].Nmissing);
     89    catalog[0].missing = fits_table_get_Missing (&ftable, &catalog[0].Nmissing, NULL);
    9090    if (Nmissing != catalog[0].Nmissing) {
    9191      fprintf (stderr, "Warning: mismatch between Nmissing in PHU and Table headers (%d vs %d)\n", Nmissing, catalog[0].Nmissing);
     
    108108    }
    109109    /* no conversions currently defined */
    110     catalog[0].secfilt = fits_table_get_SecFilt (&ftable, &Nitems);
     110    catalog[0].secfilt = fits_table_get_SecFilt (&ftable, &Nitems, NULL);
    111111    catalog[0].Nsecfilt = Nitems / catalog[0].Naverage;
    112112    if (Nsecfilt != catalog[0].Nsecfilt) {
  • trunk/Ohana/src/markstar/src/find_images.c

    r2490 r4864  
    22double opening_angle ();
    33
    4 Image *find_images (catstats, Nimages)
    5 CatStats catstats[];
    6 int *Nimages;
    7 {
     4Image *find_images (FITS_DB *db, CatStats *catstats, int *Nimages) {
    85 
    96  Header header;
     
    2825  }
    2926
    30   /* check if image datafile exists, get header, number of images */
    31   if (!fits_read_header (ImageCat, &header)) {
    32     fprintf (stderr, "ERROR: No images in catalog %s (1)\n", ImageCat);
    33     exit (0);
    34   }
    35   Nimage = 0;
    36   fits_scan (&header, "NIMAGES", "%d", 1, &Nimage);
    37   if (Nimage == 0) {
    38     fprintf (stderr, "ERROR: No images in catalog %s (1)\n", ImageCat);
    39     exit (0);
    40   }
    41 
    42   /* get ready to read data on images */
    43   f = fopen (ImageCat, "r");
    44   if (f == (FILE *) NULL) {
    45     fprintf (stderr, "ERROR: trouble opening Image catalog: %s (2)\n", ImageCat);
    46     exit (0);
    47   }
    48   fseek (f, header.size, SEEK_SET);
     27  timage = fits_table_get_Image (&db[0].ftable, &Ntimage, &db[0].swapped);
    4928
    5029  /* set up buffers for images, temporary storage */
    51   NTIMAGE = 100;
    52   ALLOCATE (timage, Image, NTIMAGE);
     30  nimage = 0;
    5331  NIMAGE = 100;
    5432  ALLOCATE (image, Image, NIMAGE);
    55   nimage = 0;
    56   Nloop = Nimage / NTIMAGE + 1;
    57   Nlast = Nimage % NTIMAGE;
    58  
    59   /* read in images in groups of NTIMAGE (100) */
    60   for (n = 0; n < Nloop; n++) {
    61     Nim = (n == Nloop - 1) ? Nlast : NTIMAGE;
    62     status = Fread (timage, sizeof(Image), Nim, f, "image");
    63     if (status != Nim) {
    64       fprintf (stderr, "ERROR: couldn't read images from image catalog: %s\n", ImageCat);
    65       exit (0);
    66     }
    67     /* test each image in block */
    68     for (i = 0; i < Nim; i++) {
    69       /* define image corners */
    70       Xi[0] = 0;            Yi[0] = 0;
    71       Xi[1] = timage[i].NX; Yi[1] = 0;
    72       Xi[2] = timage[i].NX; Yi[2] = timage[i].NY;
    73       Xi[3] = 0;            Yi[3] = timage[i].NY;
    74       Xi[4] = 0;            Yi[4] = 0;
    75       found = FALSE;
    76       /* transform to tcoords */
    77       if (catstats[0].DEC[1] > 86.25) { /* pole */
    78         for (j = 0; j < 5; j++) {
    79           XY_to_RD (&r, &d, Xi[j], Yi[j], &timage[i].coords);
    80           if (d > catstats[0].DEC[0] - 0.5) found = TRUE;
    81         }
    82       } else {
    83         for (j = 0; j < 6; j++) {
    84           XY_to_RD (&r, &d, Xi[j], Yi[j], &timage[i].coords);
    85           InRange = RD_to_XY (&Xi[j], &Yi[j], r, d, tcoords);
    86           if (!InRange) {
    87             /* if RD_to_XY returns false, the coords are ~180 away from
    88                the projection center */
    89             goto imskip;
    90           }
    91         }
    92         /* check if image corner inside catalog */
    93         for (j = 0; (j < 4) && !found; j++) {
    94           found |= corner_check (&Xi[j], &Yi[j], &Xc[0], &Yc[0]);
    95         }
    96         /* check if catalog corner inside image */
    97         for (j = 0; (j < 4) && !found; j++) {
    98           found |= corner_check (&Xc[j], &Yc[j], &Xi[0], &Yi[0]);
    99         }
    100         /* check if edges cross */
    101         for (j = 0; (j < 4) && !found; j++) {
    102           for (k = 0; (k < 4) && !found; k++) {
    103             found |= edge_check (&Xi[j], &Yi[j], &Xc[k], &Yc[k]);
    104           }
     33
     34  /* test each image in block */
     35  for (i = 0; i < Ntimage; i++) {
     36    /* define image corners */
     37    Xi[0] = 0;            Yi[0] = 0;
     38    Xi[1] = timage[i].NX; Yi[1] = 0;
     39    Xi[2] = timage[i].NX; Yi[2] = timage[i].NY;
     40    Xi[3] = 0;            Yi[3] = timage[i].NY;
     41    Xi[4] = 0;            Yi[4] = 0;
     42    found = FALSE;
     43    /* transform to tcoords */
     44    if (catstats[0].DEC[1] > 86.25) { /* pole */
     45      for (j = 0; j < 5; j++) {
     46        XY_to_RD (&r, &d, Xi[j], Yi[j], &timage[i].coords);
     47        if (d > catstats[0].DEC[0] - 0.5) found = TRUE;
     48      }
     49    } else {
     50      for (j = 0; j < 6; j++) {
     51        XY_to_RD (&r, &d, Xi[j], Yi[j], &timage[i].coords);
     52        InRange = RD_to_XY (&Xi[j], &Yi[j], r, d, tcoords);
     53        if (!InRange) {
     54          /* if RD_to_XY returns false, the coords are ~180 away from
     55             the projection center */
     56          goto imskip;
    10557        }
    10658      }
    107       if (found) {
    108         image[nimage] = timage[i];
    109         image[nimage].code = 0;
    110         nimage ++;
    111         if (nimage == NIMAGE) {
    112           NIMAGE += 100;
    113           REALLOCATE (image, Image, NIMAGE);
     59      /* check if image corner inside catalog */
     60      for (j = 0; (j < 4) && !found; j++) {
     61        found |= corner_check (&Xi[j], &Yi[j], &Xc[0], &Yc[0]);
     62      }
     63      /* check if catalog corner inside image */
     64      for (j = 0; (j < 4) && !found; j++) {
     65        found |= corner_check (&Xc[j], &Yc[j], &Xi[0], &Yi[0]);
     66      }
     67      /* check if edges cross */
     68      for (j = 0; (j < 4) && !found; j++) {
     69        for (k = 0; (k < 4) && !found; k++) {
     70          found |= edge_check (&Xi[j], &Yi[j], &Xc[k], &Yc[k]);
    11471        }
    11572      }
    116     imskip:
    11773    }
     74    if (found) {
     75      image[nimage] = timage[i];
     76      image[nimage].code = 0;
     77      nimage ++;
     78      if (nimage == NIMAGE) {
     79        NIMAGE += 100;
     80        REALLOCATE (image, Image, NIMAGE);
     81      }
     82    }
     83  imskip:
    11884  }
    11985     
     
    12894
    12995  REALLOCATE (image, Image, MAX (nimage, 1));
    130   free (timage);
    13196  *Nimages = nimage;
    132   fclose (f);
    13397  return (image);
    13498}
  • trunk/Ohana/src/markstar/src/markstar.c

    r2490 r4864  
    11# include "markstar.h"
    22
    3 main (argc, argv)
    4 int argc;
    5 char **argv;
    6 {
     3/*** this needs to be cleaned to match current db I/O model ***/
     4
     5int main (int argc, char **argv) {
    76
    87  FILE *f;
     
    1211  CatStats catstats;
    1312  struct timeval now, then; 
     13  FITS_DB db;
    1414 
    1515  gettimeofday (&then, (void *) NULL);
     
    3636  }
    3737
    38   /* if lockfile exists, program will complain and quit */
    39   check_lockfile ();
    40   check_permissions (argv[1]);
     38  set_db (&db);
     39  lock_image_db (&db, ImageCat);
    4140
    4241  gcatalog (argv[1], &catalog);
  • trunk/Ohana/src/mosastro/src/rfits.c

    r3520 r4864  
    3030  }
    3131
    32   stars = fits_table_get_SMPData (&table, &mychip[0].Nstars);
     32  stars = fits_table_get_SMPData (&table, &mychip[0].Nstars, NULL);
    3333  fits_scan (table.header, "NAXIS1", "%d", 1, &Nx);
    3434
  • trunk/Ohana/src/opihi/dvo/LoadImages.c

    r4854 r4864  
    1010
    1111  fits_db_init (&db);
     12  db.lockstate = LCK_SOFT;
     13  db.timeout   = 120.0;
     14
    1215  if (!fits_db_lock (&db, filename)) {
    13     fprintf (stderr, "No available image catalog %s (1)\n", filename);
     16    fprintf (stderr, "error opening image catalog %s (1)\n", filename);
    1417    return (NULL);
    1518  }
    1619
    17   dvo_image_load (&db, TRUE);
     20  if (db.dbstate == LCK_EMPTY) {
     21    fprintf (stderr, "note: image catalog is empty\n");
     22    ALLOCATE (image, Image, 1);
     23    *nimage = 1;
     24    return (image);
     25  }
     26
     27  dvo_image_load (&db, TRUE, FALSE);
    1828  fits_db_close (&db);
    1929
    20   image = fits_table_get_Image (&db.ftable, nimage);
     30  image = fits_table_get_Image (&db.ftable, nimage, &db.swapped);
    2131  return (image);
    2232}
  • trunk/Ohana/src/opihi/dvo/badimages.c

    r4689 r4864  
    88int badimages (int argc, char **argv) {
    99 
    10   FILE *f;
    11   int i, Nimage, nimage, entry, First, Cross;
     10  int i, Nimage, entry, First, Cross;
    1211  float *ptr;
    1312  double nominal, big, small, value;
    14   Header header;
    1513  Image *image;
    16   char ImageCat[256];
    1714
    18   VarConfig ("IMAGE_CATALOG", "%s", ImageCat);
    19  
    2015  if (argc != 3) {
    2116    fprintf (stderr, "USAGE: badimages entry value\n");
     
    2419  }
    2520 
     21  image = LoadImages (&Nimage);
     22
    2623  Cross = FALSE;
    2724  First = FALSE;
     
    3633      Cross = TRUE;
    3734    }
    38   }
    39  
    40   /* check if image datafile exists, get header */
    41   if (!fits_read_header (ImageCat, &header)) {
    42     fprintf (stderr, "can't open image catalog %s\n", ImageCat);
    43     return (FALSE);
    44   }
    45  
    46   /* get ready to read data on images */
    47   f = fopen (ImageCat, "r");
    48   if (f == (FILE *) NULL) {
    49     fprintf (stderr, "can't open image catalog %s\n", ImageCat);
    50     return (FALSE);
    51   }
    52   fseek (f, header.size, SEEK_SET);
    53  
    54   /* read in image data */
    55   Nimage = 0;
    56   fits_scan (&header, "NIMAGES", "%d", 1, &Nimage);
    57   ALLOCATE (image, Image, Nimage);
    58   nimage = Fread (image, sizeof(Image), Nimage, f, "image");
    59   fclose (f);
    60   if (nimage != Nimage) {
    61     fprintf (stderr, "error reading all data from image file (%d != %d)\n", nimage, Nimage);
    62     free (image);
    63     return (FALSE);
    6435  }
    6536 
     
    10172
    10273}
    103  
  • trunk/Ohana/src/photdbc/Makefile

    r4808 r4864  
    2020
    2121SRCLIST = \
    22 $(SRC)/photdbc.$(ARCH).o         \
    23 $(SRC)/initialize.$(ARCH).o      \
    24 $(SRC)/ConfigInit.$(ARCH).o      \
    25 $(SRC)/args.$(ARCH).o            \
    26 $(SRC)/liststats.$(ARCH).o       \
    27 $(SRC)/load_images.$(ARCH).o     \
    28 $(SRC)/name_region.$(ARCH).o     \
    29 $(SRC)/find_images.$(ARCH).o     \
    30 $(SRC)/find_regions.$(ARCH).o    \
    31 $(SRC)/get_regions.$(ARCH).o     \
    32 $(SRC)/load_catalogs.$(ARCH).o   \
    33 $(SRC)/gcatalog.$(ARCH).o        \
    34 $(SRC)/misc.$(ARCH).o            \
    35 $(SRC)/join_stars.$(ARCH).o      \
    36 $(SRC)/unique_measures.$(ARCH).o \
    37 $(SRC)/flag_measures.$(ARCH).o   \
    38 $(SRC)/get_mags.$(ARCH).o        \
    39 $(SRC)/check_directory.$(ARCH).o \
    40 $(SRC)/subcatalog.$(ARCH).o      \
     22$(SRC)/photdbc.$(ARCH).o           \
     23$(SRC)/initialize.$(ARCH).o        \
     24$(SRC)/ConfigInit.$(ARCH).o        \
     25$(SRC)/args.$(ARCH).o              \
     26$(SRC)/liststats.$(ARCH).o         \
     27$(SRC)/load_images.$(ARCH).o       \
     28$(SRC)/name_region.$(ARCH).o       \
     29$(SRC)/find_images.$(ARCH).o       \
     30$(SRC)/find_regions.$(ARCH).o      \
     31$(SRC)/get_regions.$(ARCH).o       \
     32$(SRC)/load_catalogs.$(ARCH).o     \
     33$(SRC)/gcatalog.$(ARCH).o          \
     34$(SRC)/misc.$(ARCH).o              \
     35$(SRC)/join_stars.$(ARCH).o        \
     36$(SRC)/unique_measures.$(ARCH).o   \
     37$(SRC)/flag_measures.$(ARCH).o     \
     38$(SRC)/get_mags.$(ARCH).o          \
     39$(SRC)/check_directory.$(ARCH).o   \
     40$(SRC)/overlap_funcs.$(ARCH).o     \
     41$(SRC)/image-db.$(ARCH).o          \
     42$(SRC)/SetSignals.$(ARCH).o        \
     43$(SRC)/Shutdown.$(ARCH).o          \
     44$(SRC)/check_permissions.$(ARCH).o \
     45$(SRC)/subcatalog.$(ARCH).o        \
    4146$(SRC)/wcatalog.$(ARCH).o
    4247
  • trunk/Ohana/src/photdbc/include/photdbc.h

    r4828 r4864  
    6464# define FLAG_DUPMEAS         0x0040
    6565
    66 Image        *find_images (GSCRegion *region, int Nregion, int *Nimages, int **LineNum);
     66Image        *find_images (FITS_DB *db, GSCRegion *region, int Nregion, int *Nimage, int **LineNum);
    6767GSCRegion    *find_regions (Image *image, int Nimage, int *Nregions, GSCRegion *fullregion);
    68 Image        *get_images (int *N);
    6968GSCRegion    *get_regions (double minRa, double maxRa, double minDec, double maxDec, int *Nregions);
    7069Catalog      *load_catalogs (GSCRegion *region, int Nregion);
    71 GSCRegion    *load_images (char *seed, int *nregion);
     70GSCRegion    *load_images (FITS_DB *db, char *seed, int *nregion);
    7271GSCRegion    *name_region (char *name, int *Nregions);
    7372void          ConfigInit (int *argc, char **argv);
     
    7574int           corner_check (double *x1, double *y1, double *x2, double *y2);
    7675int           edge_check (double *x1, double *y1, double *x2, double *y2);
    77 void          flag_measures (Catalog *catalog);
     76void          flag_measures (FITS_DB *db, Catalog *catalog);
    7877int           gcatalog (Catalog *catalog);
    7978void          get_mags (Catalog *catalog);
     
    9392void          unique_measures (Catalog *catalog);
    9493void          wcatalog (Catalog *catalog);
    95 Catalog *subcatalog (Catalog *catalog);
    96 void check_directory (char *basefile);
     94Catalog      *subcatalog (Catalog *catalog);
     95void          check_directory (char *basefile);
     96
     97int Shutdown (char *format, ...);
     98void set_db (FITS_DB *in);
     99void lock_image_db (FITS_DB *db, char *filename);
     100void unlock_image_db (FITS_DB *db);
     101void check_permissions (char *basefile);
     102void TrapSignal (int sig);
     103void SetProtect (int mode);
     104int SetSignals ();
  • trunk/Ohana/src/photdbc/src/find_images.c

    r4808 r4864  
    77   images */
    88
    9 Image *find_images (GSCRegion *region, int Nregion, int *Nimages, int **LineNum) {
     9Image *find_images (FITS_DB *db, GSCRegion *region, int Nregion, int *Nimage, int **LineNum) {
    1010 
    11   Header header;
    1211  Image *timage, *image;
    13   int i, j, k, m, found, nimage, Nimage, NIMAGE;
    14   int status, InRange;
    15   FILE *f;
     12  int i, j, k, m, found, nimage, Ntimage, NIMAGE;
     13  int InRange;
    1614  double Xc[5], Yc[5], Xi[5], Yi[5], r, d, dx, dy;
    1715  int *line_number;
     
    2927  strcpy (tcoords.ctype, "RA---TAN");
    3028
    31   /* check if image datafile exists, get header, number of images */
    32   if (!fits_read_header (ImageCat, &header)) {
    33     fprintf (stderr, "ERROR: No images in catalog %s (1)\n", ImageCat);
    34     exit (0);
    35   }
    36   Nimage = 0;
    37   fits_scan (&header, "NIMAGES", "%d", 1, &Nimage);
    38   if (Nimage == 0) {
    39     fprintf (stderr, "ERROR: No images in catalog %s (1)\n", ImageCat);
    40     exit (0);
    41   }
    42 
    43   /* get ready to read data on images */
    44   f = fopen (ImageCat, "r");
    45   if (f == (FILE *) NULL) {
    46     fprintf (stderr, "ERROR: trouble opening Image catalog: %s (2)\n", ImageCat);
    47     exit (0);
    48   }
    49   fseek (f, header.size, SEEK_SET);
    50 
    51   /* load all images */
    52   ALLOCATE (timage, Image, Nimage);
    53   status = Fread (timage, sizeof(Image), Nimage, f, "image");
    54   if (status != Nimage) {
    55     fprintf (stderr, "ERROR: couldn't read images from image catalog: %s\n", ImageCat);
    56     exit (0);
    57   }
     29  timage = fits_table_get_Image (&db[0].ftable, &Ntimage, &db[0].swapped);
    5830
    5931  nimage = 0;
     
    6234  ALLOCATE (line_number, int, NIMAGE);
    6335 
    64   for (i = 0; i < Nimage; i++) {
     36  for (i = 0; i < Ntimage; i++) {
    6537     
    6638# if (0)
    6739    /* select images by photcode */
    68     np = timage[i].source;
    69     Np = photcodes.hashcode[np];
    70     if (Np < 0) continue;
    71     if (photcodes.code[Np].equiv != PHOTCODE) continue;
     40    ecode = GetPhotcodeEquivCodebyCode (timage[i].source);
     41    if (ecode != photcode[0].code) continue;
    7242
    7343    /* select images by time */
     
    7747    }
    7848# endif
    79    
     49
    8050    /* define image corners */
    8151    Xi[0] = 0;            Yi[0] = 0;
     
    153123  REALLOCATE (image, Image, MAX (nimage + 1, 1));
    154124  REALLOCATE (line_number, int, MAX (nimage + 1, 1));
    155   free (timage);
    156   *Nimages = nimage;
     125  *Nimage = nimage;
    157126  *LineNum = line_number;
    158   fclose (f);
    159127  return (image);
    160128}
    161129
    162 /* check if line between points 0 and 1 of x1
    163    crosses line between points 0 and 1 of x2 */
    164 int edge_check (double *x1, double *y1, double *x2, double *y2) {
    165 
    166   double theta1, theta2;
    167   double Theta1, Theta2;
    168 
    169   theta1 = opening_angle (x1[0], y1[0], x2[0], y2[0], x1[1], y1[1]);
    170   theta2 = opening_angle (x1[0], y1[0], x2[0], y2[0], x2[1], y2[1]);
    171 
    172   if (theta1*theta2 < 0.0) {
    173     return (FALSE);
    174   }
    175 
    176   if (fabs(theta1) < fabs(theta2)) {
    177     return (FALSE);
    178   }
    179 
    180   Theta1 = theta1;
    181   Theta2 = theta2;
    182   theta1 = opening_angle (x2[0], y2[0], x1[1], y1[1], x2[1], y2[1]);
    183   theta2 = opening_angle (x2[0], y2[0], x1[1], y1[1], x1[0], y1[0]);
    184  
    185  
    186   if (theta1*theta2 < 0.0) {
    187     return (FALSE);
    188   }
    189 
    190   if (fabs(theta1) < fabs(theta2)) {
    191     return (FALSE);
    192   }
    193 
    194   return (TRUE);
    195 
    196 }
    197 
    198 /* check if point x1,y1 is in box formed by x2[0-4] */
    199 int corner_check (double *x1, double *y1, double *x2, double *y2) {
    200 
    201   int i;
    202   double theta;
    203 
    204   theta = 0;
    205 
    206   for (i = 0; i < 4; i++) {
    207     theta += opening_angle (x2[i], y2[i], x1[0], y1[0], x2[i+1], y2[i+1]);
    208   }
    209   if (fabs(theta) > 6) {
    210     return (TRUE);
    211   } else {
    212     return (FALSE);
    213   }
    214 }
    215 
    216 /* returns the opening angle between the three points (2 is in middle)
    217    in range -pi to pi */
    218 
    219 double opening_angle (double x1, double y1, double x2, double y2, double x3, double y3) {
    220 
    221   double dx1, dy1, dx2, dy2, ct, st, theta;
    222 
    223   dx1 = x1 - x2;
    224   dy1 = y1 - y2;
    225  
    226   dx2 = x3 - x2;
    227   dy2 = y3 - y2;
    228  
    229   ct = (dx1*dx2 + dy1*dy2);
    230   st = (dx1*dy2 - dx2*dy1);
    231 
    232   theta = atan2 (st, ct);
    233 
    234   return (theta);
    235 
    236 }
    237 
  • trunk/Ohana/src/photdbc/src/flag_measures.c

    r4808 r4864  
    11# include "photdbc.h"
    22
    3 void flag_measures (Catalog *catalog) {
     3void flag_measures (FITS_DB *db, Catalog *catalog) {
    44
    55  int i, j, k, m, n, N, found;
     
    1515  if (VERBOSE) fprintf (stderr, "flagging bad measurements\n");
    1616
    17   /* load images */
    18   image = get_images (&Nimage);
     17  image = fits_table_get_Image (&db[0].ftable, &Nimage, &db[0].swapped);
    1918
    2019  PhotNsec = GetPhotcodeNsecfilt ();
  • trunk/Ohana/src/photdbc/src/load_images.c

    r4808 r4864  
    11# include "photdbc.h"
    22
    3 static int   Nimage;
    4 static int   *Line;
    5 static Image *image;
     3GSCRegion *load_images (FITS_DB *db, char *seed, int *nregion) {
    64
    7 GSCRegion *load_images (char *seed, int *nregion) {
    8 
     5  int        Nregion;
    96  GSCRegion *region;
    10   int       Nregion;
     7  int        Nimage;
     8  int       *Line;
     9  Image     *image;
    1110
    1211  region = name_region (seed, &Nregion);
    1312
     13  if (db[0].dbstate == LCK_EMPTY) Shutdown ("ERROR: No images in catalog %s (1)", db[0].filename);
     14
     15  /* read entire db table */
     16  if (!dvo_image_load (db, VERBOSE, FALSE)) Shutdown ("can't read image catalog %s", db[0].filename);
     17
    1418  /* find images which supplied all measurements */
    15   image = find_images (region, Nregion, &Nimage, &Line);
     19  image = find_images (db, region, Nregion, &Nimage, &Line);
    1620  *nregion = Nregion;
    1721 
     22  fits_vtable_from_ftable (&db[0].ftable, &db[0].vtable, Line, Nimage);
     23
    1824  return (region);
    1925}
    20 
    21 Image *get_images (int *N) {
    22  
    23   *N = Nimage;
    24   return (image);
    25 }
    26 
    27 /*
    28 void wimages () {
    29  
    30   int i, status, mode;
    31   FILE *f;
    32   Header header;
    33 
    34   setMcalFinal (image, Nimage);
    35 
    36   if (!fits_read_header (ImageCat, &header)) {
    37     fprintf (stderr, "ERROR: can't find %s\n", ImageCat);
    38     exit (0);
    39   }
    40  
    41   f = fopen (ImageCat, "r+");
    42   if (f == NULL) {
    43     fprintf (stderr, "ERROR: can't open image catalog file to append: %s\n", ImageCat);
    44     exit (0);
    45   }
    46   mode = S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH;
    47   chmod (ImageCat, mode);
    48 
    49   if (VERBOSE) fprintf (stderr, "writing out %d images\n", Nimage);
    50   for (i = 0; i < Nimage; i++) {
    51     if (image[i].code == ID_IMAGE_NOCAL) image[i].code &= ~ID_IMAGE_NOCAL;
    52    
    53     fseek (f, header.size + Line[i]*sizeof(Image), SEEK_SET);
    54     status = Fwrite (&image[i], sizeof(Image), 1, f, "image");
    55     if (status != 1) {
    56       fprintf (stderr, "ERROR: failure writing image data to catalog %s\n", ImageCat);
    57       exit (0);
    58     }
    59   }
    60 
    61   fclose (f);
    62 }
    63 */
  • trunk/Ohana/src/photdbc/src/photdbc.c

    r4808 r4864  
    77  Catalog *catalog;
    88  GSCRegion *region;
     9  FITS_DB db;
    910
    1011  /* get configuration info, args, lockfile */
    1112  initialize (argc, argv);
    1213
     14  set_db (&db);
     15  lock_image_db (&db, ImageCat);
     16
    1317  /* load region and images overlapping region */
    14   region = load_images (argv[1], &Nregion);
     18  region = load_images (&db, argv[1], &Nregion);
    1519
    1620  /* load catalog data corresponding to region file */
     
    2529  unique_measures (catalog);
    2630
    27   flag_measures (catalog);
     31  flag_measures (&db, catalog);
    2832
    2933  get_mags (catalog);
  • trunk/Ohana/src/relphot/Makefile

    r4805 r4864  
    4242$(SRC)/misc.$(ARCH).o            \
    4343$(SRC)/reload_catalogs.$(ARCH).o \
     44$(SRC)/image-db.$(ARCH).o \
    4445$(SRC)/free_catalogs.$(ARCH).o   \
     46$(SRC)/check_permissions.$(ARCH).o   \
    4547$(SRC)/setMrelFinal.$(ARCH).o    \
    4648$(SRC)/write_coords.$(ARCH).o    \
    4749$(SRC)/setExclusions.$(ARCH).o   \
     50$(SRC)/Shutdown.$(ARCH).o        \
     51$(SRC)/SetSignals.$(ARCH).o      \
    4852$(SRC)/wcatalog.$(ARCH).o
    4953
  • trunk/Ohana/src/relphot/include/relphot.h

    r4828 r4864  
    11# include <ohana.h>
    22# include <dvo.h>
     3# include <signal.h>
    34
    45/* # define GRID_V1 */
     
    118119void          findImages          PROTO((Catalog *catalog, int Ncatalog));
    119120int           findMosaics         PROTO((Catalog *catalog, int Ncatalog));
    120 Image        *find_images         PROTO((GSCRegion *region, int Nregion, int *Nimages, int **LineNum));
     121Image        *find_images         PROTO((FITS_DB *db, GSCRegion *region, int Nregion, int *Nimage, int **LineNum));
     122void set_db (FITS_DB *in);
     123int Shutdown (char *format, ...);
     124void TrapSignal (int sig);
     125void SetProtect (int mode);
     126int SetSignals ();
     127
    121128GSCRegion    *find_regions        PROTO((Image *image, int Nimage, int *Nregions, GSCRegion *fullregion));
    122129void          freeGridBins        PROTO((int Ncatalog));
     
    147154int           liststats           PROTO((double *value, double *dvalue, int N, StatType *stats));
    148155Catalog      *load_catalogs       PROTO((GSCRegion *region, int Nregion, GSCRegion *fullregion));
    149 GSCRegion    *load_images         PROTO((char *seed, int *nregion, GSCRegion *fullregion));
     156GSCRegion    *load_images         PROTO((FITS_DB *db, char *seed, int *nregion, GSCRegion *fullregion));
     157
     158void check_permissions (char *basefile);
     159void lock_image_db (FITS_DB *db, char *filename);
     160void unlock_image_db (FITS_DB *db);
     161void create_image_db (FITS_DB *db);
     162
    150163int           main                PROTO((int argc, char **argv));
    151164void          mark_images         PROTO((Image *image, int Nimage, Image *timage, int Ntimage));
     
    167180int           setExclusions       PROTO((Catalog *catalog, int Ncatalog));
    168181void          setMcal             PROTO((Catalog *catalog, int Poor));
    169 void          setMcalFinal        PROTO((Image *image, int Nimage));
     182void          setMcalFinal        PROTO(());
    170183int           setMcalOutput       PROTO((Catalog *catalog, int Ncatalog));
    171184void          setMgrid            PROTO((Catalog *catalog));
  • trunk/Ohana/src/relphot/src/MosaicOps.c

    r4796 r4864  
    167167}
    168168
    169 void setMcalFinal (Image *image, int Nimage) {
    170 
    171   int i, j, im;
     169void setMcalFinal () {
     170
     171  int i, j, im, Nimage;
     172  Image *image;
    172173
    173174  if (!MOSAICNAME[0]) return;
     175
     176  image = getimages (&Nimage);
    174177
    175178  for (i = 0; i < Nmosaic; i++) {
  • trunk/Ohana/src/relphot/src/find_images.c

    r4796 r4864  
    77   images */
    88
    9 Image *find_images (GSCRegion *region, int Nregion, int *Nimages, int **LineNum) {
    10  
    11   Header header;
     9Image *find_images (FITS_DB *db, GSCRegion *region, int Nregion, int *Nimage, int **LineNum) {
     10 
    1211  Image *timage, *image;
    13   int i, j, k, m, found, nimage, Nimage, NIMAGE;
    14   int status, InRange, ecode;
    15   FILE *f;
     12  int i, j, k, m, found, nimage, Ntimage, NIMAGE;
     13  int InRange, ecode;
    1614  double Xc[5], Yc[5], Xi[5], Yi[5], r, d, dx, dy;
    1715  int *line_number;
     
    2927  strcpy (tcoords.ctype, "RA---TAN");
    3028
    31   /* check if image datafile exists, get header, number of images */
    32   if (!fits_read_header (ImageCat, &header)) {
    33     fprintf (stderr, "ERROR: No images in catalog %s (1)\n", ImageCat);
    34     exit (0);
    35   }
    36   Nimage = 0;
    37   fits_scan (&header, "NIMAGES", "%d", 1, &Nimage);
    38   if (Nimage == 0) {
    39     fprintf (stderr, "ERROR: No images in catalog %s (1)\n", ImageCat);
    40     exit (0);
    41   }
    42 
    43   /* get ready to read data on images */
    44   f = fopen (ImageCat, "r");
    45   if (f == (FILE *) NULL) {
    46     fprintf (stderr, "ERROR: trouble opening Image catalog: %s (2)\n", ImageCat);
    47     exit (0);
    48   }
    49   fseek (f, header.size, SEEK_SET);
    50 
    51   /* load all images */
    52   ALLOCATE (timage, Image, Nimage);
    53   status = Fread (timage, sizeof(Image), Nimage, f, "image");
    54   if (status != Nimage) {
    55     fprintf (stderr, "ERROR: couldn't read images from image catalog: %s\n", ImageCat);
    56     exit (0);
    57   }
     29  timage = fits_table_get_Image (&db[0].ftable, &Ntimage, &db[0].swapped);
    5830
    5931  nimage = 0;
     
    6234  ALLOCATE (line_number, int, NIMAGE);
    6335 
    64   for (i = 0; i < Nimage; i++) {
     36  for (i = 0; i < Ntimage; i++) {
    6537     
    6638    /* select images by photcode */
     
    153125  REALLOCATE (line_number, int, MAX (nimage, 1));
    154126
    155   free (timage);
    156   *Nimages = nimage;
     127  *Nimage  = nimage;
    157128  *LineNum = line_number;
    158   fclose (f);
    159129  return (image);
    160130}
  • trunk/Ohana/src/relphot/src/load_images.c

    r2486 r4864  
    11# include "relphot.h"
    22
    3 static int   Nimage;
    4 static int   *Line;
    5 static Image *image;
    6 
    7 GSCRegion *load_images (char *seed, int *nregion, GSCRegion *fullregion) {
     3GSCRegion *load_images (FITS_DB *db, char *seed, int *nregion, GSCRegion *fullregion) {
    84
    95  GSCRegion *region;
    10   int       Nregion, Ntimage;
    11   Image     *timage;
     6  int        Nregion;
     7  Image     *image;
     8  int       *Line;
     9  int        Nimage;
     10
     11  if (db[0].dbstate == LCK_EMPTY) Shutdown ("ERROR: No images in catalog %s (1)", db[0].filename);
     12
     13  /* read entire db table */
     14  if (!dvo_image_load (db, VERBOSE, FALSE)) Shutdown ("can't read image catalog %s", db[0].filename);
    1215
    1316  region = name_region (seed, &Nregion);
    1417
    1518  /* find images which supplied all measurements */
    16   timage = find_images (region, Nregion, &Ntimage, &Line);
     19  image = find_images (db, region, Nregion, &Nimage, &Line);
    1720  free (Line);
    1821
    1922  /* find all region files which touch images */
    20   region = find_regions (timage, Ntimage, &Nregion, fullregion);
    21   free (timage);
     23  region = find_regions (image, Nimage, &Nregion, fullregion);
     24  free (image);
    2225
    2326  /* find images which supplied all measurements for all regions */
    24   image = find_images (region, Nregion, &Nimage, &Line);
     27  image = find_images (db, region, Nregion, &Nimage, &Line);
    2528  getfullregion (image, Nimage, fullregion);
     29
     30  fits_vtable_from_ftable (&db[0].ftable, &db[0].vtable, Line, Nimage);
    2631
    2732  initImages (image, Nimage);
     
    3035  *nregion = Nregion;
    3136  return (region);
    32 
    3337}
    34 
    35 void wimages () {
    36  
    37   int i, status, mode;
    38   FILE *f;
    39   Header header;
    40 
    41   setMcalFinal (image, Nimage);
    42 
    43   if (!fits_read_header (ImageCat, &header)) {
    44     fprintf (stderr, "ERROR: can't find %s\n", ImageCat);
    45     exit (0);
    46   }
    47  
    48   f = fopen (ImageCat, "r+");
    49   if (f == NULL) {
    50     fprintf (stderr, "ERROR: can't open image catalog file to append: %s\n", ImageCat);
    51     exit (0);
    52   }
    53   mode = S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH;
    54   chmod (ImageCat, mode);
    55 
    56   if (VERBOSE) fprintf (stderr, "writing out %d images\n", Nimage);
    57   for (i = 0; i < Nimage; i++) {
    58     fseek (f, header.size + Line[i]*sizeof(Image), SEEK_SET);
    59     status = Fwrite (&image[i], sizeof(Image), 1, f, "image");
    60     if (status != 1) {
    61       fprintf (stderr, "ERROR: failure writing image data to catalog %s\n", ImageCat);
    62       exit (0);
    63     }
    64   }
    65 
    66   fclose (f);
    67 }
  • trunk/Ohana/src/relphot/src/relphot.c

    r4796 r4864  
    77  Catalog *catalog;
    88  GSCRegion fullregion, *region;
     9  FITS_DB db;
    910
    1011  /* get configuration info, args */
    1112  initialize (argc, argv);
    1213
     14  set_db (&db);
     15  lock_image_db (&db, ImageCat);
     16
    1317  /* load regions and images based on seed region */
    14   region = load_images (argv[1], &Ncatalog, &fullregion);
     18  region = load_images (&db, argv[1], &Ncatalog, &fullregion);
    1519
    1620  /* load catalog data from region files */
     
    7983  /* load catalog data from region files, update Mrel include all data */
    8084  reload_catalogs (region, Ncatalog, &fullregion);
    81   wimages ();
     85  setMcalFinal ();
     86  dvo_image_update (&db, VERBOSE);
     87  unlock_image_db (&db);
     88
    8289  exit (0);
    8390}
  • trunk/Ohana/src/uniphot/Makefile

    r4809 r4864  
    2626$(SRC)/liststats.$(ARCH).o       \
    2727$(SRC)/load_images.$(ARCH).o     \
     28$(SRC)/subset_images.$(ARCH).o   \
    2829$(SRC)/find_image_tgroups.$(ARCH).o      \
    2930$(SRC)/find_image_sgroups.$(ARCH).o      \
     
    3435$(SRC)/wimages.$(ARCH).o                 \
    3536$(SRC)/gcatalog.$(ARCH).o                \
     37$(SRC)/check_permissions.$(ARCH).o               \
     38$(SRC)/image-db.$(ARCH).o                \
     39$(SRC)/SetSignals.$(ARCH).o              \
     40$(SRC)/Shutdown.$(ARCH).o                \
    3641$(SRC)/misc.$(ARCH).o
    3742
  • trunk/Ohana/src/uniphot/include/uniphot.h

    r4828 r4864  
    11# include <ohana.h>
    22# include <dvo.h>
     3# include <signal.h>
    34
    45# ifdef ANSI
     
    7576int           args               PROTO((int argc, char **argv));
    7677void          dumpresult         PROTO(());
    77 Group        *find_image_sgroups PROTO((Image *image, ImageLink *imlink, int Nimage, int *Nsgroup));
    78 Group        *find_image_tgroups PROTO((Image *image, ImageLink *imlink, int Nimage, int *Ntgroup));
     78Group        *find_image_sgroups PROTO((FITS_DB *db, ImageLink *imlink, int *Nsgroup));
     79Group        *find_image_tgroups PROTO((FITS_DB *db, ImageLink *imlink, int *Ntgroup));
    7980void          fit_sgroup         PROTO((Group *sgroup, int Nsgroup));
    8081void          fit_tgroup         PROTO((Group *tgroup, int Ntgroup));
     
    8384void          initstats          PROTO((char *mode));
    8485int           liststats          PROTO((double *value, double *dvalue, int N, StatType *stats));
    85 Image        *load_images        PROTO((int *nimage));
     86int           load_images        PROTO((FITS_DB *db));
    8687int           main               PROTO((int argc, char **argv));
    8788int           open_graph         PROTO((int N));
     
    8990void          sortB              PROTO((double *X, double *Y, int N));
    9091void          sortD              PROTO((double *X, double *Y, double *Z, int N));
    91 void          update             PROTO((Image *image, int Nimage, Group *sgroup, int Nsgroup));
    9292void          update_catalog     PROTO((Catalog *catalog, Group *sgroup, int warn));
    9393void          wcatalog           PROTO((Catalog *catalog));
    9494void          wimages            PROTO((Image *image, int Nimage));
     95void check_permissions (char *basefile);
     96void lock_image_db (FITS_DB *db, char *filename);
     97void unlock_image_db (FITS_DB *db);
     98void create_image_db (FITS_DB *db);
     99void set_db (FITS_DB *in);
     100int Shutdown (char *format, ...);
     101void TrapSignal (int sig);
     102void SetProtect (int mode);
     103int SetSignals ();
     104int subset_images (FITS_DB *db);
     105void update (FITS_DB *db, Group *sgroup, int Nsgroup);
  • trunk/Ohana/src/uniphot/src/find_image_sgroups.c

    r2492 r4864  
    11# include "uniphot.h"
    22
    3 Group *find_image_sgroups (Image *image, ImageLink *imlink, int Nimage, int *Nsgroup) {
     3Group *find_image_sgroups (FITS_DB *db, ImageLink *imlink, int *Nsgroup) {
    44
    5   int i, j, Ngroup, Nentry, NENTRY;
     5  int i, j, Nimage, Ngroup, Nentry, NENTRY;
    66  double r, d, x, y, radius;
    77  Group *group;
    88  Coords coords;
    9  
     9  Image *image;
     10
     11  image = fits_table_get_Image (&db[0].ftable, &Nimage, &db[0].swapped);
     12
    1013  coords.crpix1 = coords.crpix2 = 0.0;
    1114  coords.cdelt1 = coords.cdelt2 = 1.0; /* scale is degrees, radius in degrees */
  • trunk/Ohana/src/uniphot/src/find_image_tgroups.c

    r2492 r4864  
    11# include "uniphot.h"
    22
    3 Group *find_image_tgroups (Image *image, ImageLink *imlink, int Nimage, int *Ntgroup) {
     3Group *find_image_tgroups (FITS_DB *db, ImageLink *imlink, int *Ntgroup) {
    44
    55  char *start, *stop;
    6   int i, j, Ngroup, NGROUP, Nentry, NENTRY;
     6  int i, j, Nimage, Ngroup, NGROUP, Nentry, NENTRY;
    77  unsigned int *time, *tmin, *tmax;
    88  Group *group;
     9  Image *image;
     10
     11  image = fits_table_get_Image (&db[0].ftable, &Nimage, &db[0].swapped);
    912
    1013  /* sort time list (use only valid images?) */
  • trunk/Ohana/src/uniphot/src/load_images.c

    r2492 r4864  
    11# include "uniphot.h"
    22
    3 Image *load_images (int *nimage) {
    4 
    5   int    i, Nimage, status, equiv;
    6   FILE  *f;
    7   Image *image;
    8   Header header;
     3int load_images (FITS_DB *db) {
    94
    105  if (VERBOSE) fprintf (stderr, "finding images\n");
    116
    12   /* open image datafile */
    13   if ((f = fopen (ImageCat, "r")) == (FILE *) NULL) {
    14     fprintf (stderr, "ERROR: can't open image table %s\n", ImageCat);
    15     exit (1);
    16   }
     7  if (db[0].dbstate == LCK_EMPTY) Shutdown ("ERROR: No images in catalog %s (1)", db[0].filename);
    178
    18   /* read header */
    19   if (!fits_fread_header (f, &header)) {
    20     fprintf (stderr, "ERROR: can't read image table header %s\n", ImageCat);
    21     exit (1);
    22   }
     9  /* read entire db table */
     10  if (!dvo_image_load (db, VERBOSE, FALSE)) Shutdown ("can't read image catalog %s", db[0].filename);
    2311
    24   /* read number of images */
    25   Nimage = 0;
    26   fits_scan (&header, "NIMAGES", "%d", 1, &Nimage);
    27   if (Nimage == 0) {
    28     fprintf (stderr, "ERROR: No images in catalog %s (1)\n", ImageCat);
    29     exit (1);
    30   }
    31 
    32   /* load all images */
    33   ALLOCATE (image, Image, Nimage);
    34   status = Fread (image, sizeof(Image), Nimage, f, "image");
    35   if (status != Nimage) {
    36     fprintf (stderr, "ERROR: couldn't read all images from image catalog: %s\n", ImageCat);
    37     exit (1);
    38   }
    39   fclose (f);
    40 
    41   /* mark images to be calibrated */
    42   for (i = 0; i < Nimage; i++) {
    43      
    44     image[i].code |= ID_IMAGE_NOCAL;
    45 
    46     /* select images by photcode */
    47     equiv = GetPhotcodeEquivCodebyCode (image[i].source);
    48     if (equiv != photcode[0].code) continue;
    49 
    50     /* select images by time */
    51     if (TimeSelect) {
    52       if (image[i].tzero < TSTART) continue;
    53       if (image[i].tzero > TSTOP) continue;
    54     }
    55 
    56     image[i].code &= ~ID_IMAGE_NOCAL;
    57   }
    58   *nimage = Nimage;
    59   return (image);
     12  return (TRUE);
    6013}
  • trunk/Ohana/src/uniphot/src/uniphot.c

    r4797 r4864  
    55  int i, Nimage, Ntgroup, Nsgroup;
    66  Group *tgroup, *sgroup;
    7   Image *image;
    87  ImageLink *imlinks;
    9 
    10   /* add a mode to check / force consistency between image.Mcal and
    11      measure.Mcal use the method in delstar to match image with measure
    12      (gregions (image), etc)
    13   */
     8  FITS_DB db;
    149
    1510  /* get configuration info, args, lockfile */
    1611  initialize (argc, argv);
    1712
    18   /* load images filtered by selection */
    19   image = load_images (&Nimage);
     13  set_db (&db);
     14  lock_image_db (&db, ImageCat);
     15
     16  /* load images */
     17  load_images (&db);
     18 
     19  /* filter image list by selection */
     20  subset_images (&db);
     21
    2022  ALLOCATE (imlinks, ImageLink, Nimage);
    21 
    22   tgroup = find_image_tgroups (image, imlinks, Nimage, &Ntgroup);
    23   sgroup = find_image_sgroups (image, imlinks, Nimage, &Nsgroup);
     23  tgroup = find_image_tgroups (&db, imlinks, &Ntgroup);
     24  sgroup = find_image_sgroups (&db, imlinks, &Nsgroup);
    2425
    2526  /* determine fit values */
     
    4950  if (!UPDATE) exit (0);
    5051
    51   update (image, Nimage, sgroup, Nsgroup);
     52  update (&db, sgroup, Nsgroup);
     53  unlock_image_db (&db);
     54
    5255  exit (0);
    5356}
    5457
     58/* add a mode to check / force consistency between image.Mcal and
     59   measure.Mcal.
     60
     61   use the method in delstar to match image with measure (gregions (image), etc)
     62*/
  • trunk/Ohana/src/uniphot/src/update.c

    r2492 r4864  
    22# include <glob.h>
    33
    4 void update (Image *image, int Nimage, Group *sgroup, int Nsgroup) {
     4void update (FITS_DB *db, Group *sgroup, int Nsgroup) {
    55
    6   int i, j, status, Nmin;
     6  int i, j, status, Nmin, Nimage;
    77  char line[256];
    88  glob_t pglob;
    99  double Rmin, Rmax, Dmin, Dmax, x, y, radius;
     10  Image *image;
    1011  Catalog catalog;
    1112  Coords coords;
     13
     14  image = fits_table_get_Image (&db[0].ftable, &Nimage, &db[0].swapped);
    1215
    1316  /* clear the NOCAL flags */
     
    1518    image[i].code &= ~ID_IMAGE_NOCAL;
    1619  }
    17 
    1820
    1921  /* apply calculated space-group offset to image Mcal values */
     
    2527
    2628  /** write image table **/
    27   wimages (image, Nimage);
     29  dvo_image_update (db, VERBOSE);
    2830
    2931  /** update catalog tables **/
Note: See TracChangeset for help on using the changeset viewer.