IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 4854


Ignore:
Timestamp:
Aug 22, 2005, 10:08:38 AM (21 years ago)
Author:
eugene
Message:

working towards a unified dvo_image interface

Location:
trunk/Ohana/src
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/Ohana/src/addstar/src/addstar.c

    r4299 r4854  
    2424  if (SKYPROBE) load_subpix ();
    2525
     26  /* we use the image table to lock db access */
    2627  lock_image_db ();
    2728
  • trunk/Ohana/src/addstar/src/gimages.c

    r3649 r4854  
    99  Image *timage, *pimage;
    1010  Coords tcoords;
    11   Header header;
    1211  double r, d;
    1312  double Xi[5], Yi[5], Xo[5], Yo[5];  /* image and original corners */
     
    1514  struct stat filestatus;
    1615  FILE *f;
    17  
     16
     17  FITS_DB *db;
     18
    1819  /* if image.db is opened successfully, f will not be NULL.
    1920     if image.db is empty, dbstate will be LCK_EMPTY
    2021     if image.db is not locked & opened successfully, we will not reach here!
    2122  */
    22   f = GetDB (&dbstate);
    23   if (dbstate == LCK_EMPTY) {
     23  db = GetDB ();
     24  if (db[0].dbstate == LCK_EMPTY) {
    2425    *Npimage = 0;
    2526    return (NULL);
     
    2728  fseek (f, 0, SEEK_SET);
    2829
    29   /* read header */
    30   if (!fits_load_header (f, &header)) {
     30  if (!dvo_image_load (db, TRUE)) {
    3131    Shutdown ("can't read image catalog %s", ImageCat);
    3232  }
     33  timage = fits_table_get_Image (&db.ftable, &Ntimage);
     34  /* timage represents the complete image table */
    3335
    34   fits_scan (&header, "ZERO_PT", "%lf", 1, &zeropt);
     36  fits_scan (&db[0].header, "ZERO_PT", "%lf", 1, &zeropt);
    3537  if (fabs (ZeroPt - zeropt) > 1e-4) {
    3638    Shutdown ("zero point in image (%f:%s) inconsistent with zero point in catalog (%f)",
     
    7072  }
    7173 
    72   /* advance to data segment */
    73   fseek (f, header.size, SEEK_SET);
    74 
    75   Nimage = 0;
    76   fits_scan (&header, "NIMAGES", "%d", 1, &Nimage);
    77   /* check that file size makes sense */
    78   if (stat (ImageCat, &filestatus) == -1) {
    79     Shutdown ("failed to get status of image catalog");
    80   }
    81   size = Nimage*sizeof(Image) + header.size;
    82   if (size != filestatus.st_size) {
    83     int Ndata;
    84 
    85     Ndata = (filestatus.st_size - header.size) / sizeof (Image);
    86     fprintf (stderr, "error: image catalog has inconsistent size\n");
    87     fprintf (stderr, "header: %d images, data: %d images\n", Nimage, Ndata);
    88     if (!FORCE_READ) Shutdown ("refuse to read image table");
    89 
    90     Nimage = MIN (Nimage, Ndata);
    91     fprintf (stderr, "using %d images\n", Nimage);
    92   }
    93 
    94   /* kind of dangerous, see note below */
    95   NTIMAGE = MAX (MIN (Nimage, 1000), 1);
    96   ALLOCATE (timage, Image, NTIMAGE);
    97 
     74  /* pimage represents the subset of overlapping images */
    9875  npimage = 0;
    9976  NPIMAGE = 20;
    10077  ALLOCATE (pimage, Image, NPIMAGE);
    10178
    102   /* run through image table, reading images in blocks */
    103   for (Ntimage = 0; Ntimage < Nimage; Ntimage += ntimage) {
    104     ntimage = Fread (timage, sizeof(Image), NTIMAGE, f, "image");
    105     if (ntimage == 0) Shutdown ("expected %d images, only found %d", Nimage, Ntimage);
    106     BuildChipMatch (timage, ntimage);
     79  /* setup links for mosaic WRP and DIS entries */
     80  BuildChipMatch (timage, Ntimage);
    10781
    108     for (i = 0; i < ntimage; i++) {
     82  /* run through image table and search for overlaps */
     83  for (i = 0; i < Ntimage; i++) {
    10984
    110       /* if any of these images are WRP images, need to find matching DIS */
    111       if (!FindMosaicForImage (timage, ntimage, i)) continue;
     85    /* if any of these images are WRP images, need to find matching DIS */
     86    if (!FindMosaicForImage (timage, Ntimage, i)) continue;
    11287
    113       addtolist = FALSE;
    114       /* define image corners */
    115       Xi[0] = 0;            Yi[0] = 0;
    116       Xi[1] = timage[i].NX; Yi[1] = 0;
    117       Xi[2] = timage[i].NX; Yi[2] = timage[i].NY;
    118       Xi[3] = 0;            Yi[3] = timage[i].NY;
    119       Xi[4] = 0;            Yi[4] = 0;  /* so we can make a loop easily */
    120       /* transform to tcoords */
    121       for (j = 0; j < 5; j++) {
    122         XY_to_RD (&r, &d, Xi[j], Yi[j], &timage[i].coords);
    123         RD_to_XY (&Xi[j], &Yi[j], r, d, &tcoords);
     88    addtolist = FALSE;
     89    /* define image corners */
     90    Xi[0] = 0;            Yi[0] = 0;
     91    Xi[1] = timage[i].NX; Yi[1] = 0;
     92    Xi[2] = timage[i].NX; Yi[2] = timage[i].NY;
     93    Xi[3] = 0;            Yi[3] = timage[i].NY;
     94    Xi[4] = 0;            Yi[4] = 0;  /* so we can make a loop easily */
     95    /* transform to tcoords */
     96    for (j = 0; j < 5; j++) {
     97      XY_to_RD (&r, &d, Xi[j], Yi[j], &timage[i].coords);
     98      RD_to_XY (&Xi[j], &Yi[j], r, d, &tcoords);
     99    }
     100    /* check if any edges cross */
     101    /* not every robust - images must be close in size */
     102    for (j = 0; (j < 4) && !addtolist; j++) {
     103      for (k = 0; (k < 4) && !addtolist; k++) {
     104        addtolist |= edge_check (&Xi[j], &Yi[j], &Xo[k], &Yo[k]);
    124105      }
    125       /* check if any edges cross */
    126       /* not every robust - images must be close in size */
    127       for (j = 0; (j < 4) && !addtolist; j++) {
    128         for (k = 0; (k < 4) && !addtolist; k++) {
    129           addtolist |= edge_check (&Xi[j], &Yi[j], &Xo[k], &Yo[k]);
    130         }
    131       }
    132       if (addtolist) {
    133         pimage[npimage] = timage[i];
    134         npimage ++;
    135         if (npimage == NPIMAGE) {
    136           NPIMAGE += 20;
    137           REALLOCATE (pimage, Image, NPIMAGE);
    138         }
     106    }
     107    if (addtolist) {
     108      pimage[npimage] = timage[i];
     109      npimage ++;
     110      if (npimage == NPIMAGE) {
     111        NPIMAGE += 20;
     112        REALLOCATE (pimage, Image, NPIMAGE);
    139113      }
    140114    }
     
    147121  *Npimage = npimage;
    148122  return (pimage);
    149 
    150123}
    151124 
     
    158131
    159132   we are not adding the matching DIS image to the table.
     133
     134   we are now loading in the entire image db table into memory. 
     135
     136   we will need to write out the new image with a vtable.
    160137*/
  • trunk/Ohana/src/addstar/src/image-db.c

    r3649 r4854  
    44
    55/* 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;
     6static FITS_DB db;
    87
    9 FILE *GetDB (int *state) {
    10   *state = dbstate;
    11   return (f);
     8FITS_DB *GetDB () {
     9  return (&db);
     10}
     11
     12void 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)) {
     21    fprintf (stderr, "ERROR: can't lock image catalog\n");
     22    exit (1);
     23  }
     24}
     25
     26void unlock_image_db (Image *image) {
     27
     28  mode_t mode;
     29
     30  /* protect wimage from interrupt signals */
     31  if (MODE == M_IMAGE) {
     32    SetProtect (TRUE);
     33    wimage (image);
     34    SetProtect (FALSE);
     35  }
     36
     37  fits_db_close (&db);
     38
     39  /* force permissions to 666 */
     40  mode = S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH;
     41  chmod (ImageCat, mode);
    1242}
    1343
     
    2757
    2858  SetProtect (TRUE);
    29   fclearlockfile (ImageCat, f, LOCK, &dbstate);
     59  fits_db_close (&db);
    3060  fprintf (stderr, "ERROR: addstar halted\n");
    3161  exit (1);
    3262}
    33 
    34 void lock_image_db () {
    35   /* lock the image catalog */
    36   check_permissions (ImageCat);
    37   f = fsetlockfile (ImageCat, 3600.0, LOCK, &dbstate);
    38   if (f == NULL) {
    39     fprintf (stderr, "ERROR: can't lock image catalog\n");
    40     exit (1);
    41   }
    42   fseek (f, 0, SEEK_SET);
    43 }
    44 
    45 void unlock_image_db (Image *image) {
    46 
    47   mode_t mode;
    48 
    49   /* protect wimage from interrupt signals */
    50   if (MODE == M_IMAGE) {
    51     SetProtect (TRUE);
    52     wimage (image);
    53     SetProtect (FALSE);
    54   }
    55 
    56   fclearlockfile (ImageCat, f, LOCK, &dbstate);
    57   mode = S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH;
    58   chmod (ImageCat, mode);
    59 }
  • trunk/Ohana/src/addstar/src/wimage.c

    r3361 r4854  
    11# include "addstar.h"
    22
    3 /* add image to image db */
     3/* add 1 image to image db */
    44void wimage (Image *image) {
    55 
     
    88  Header header;
    99
    10   f = GetDB (&dbstate);
     10  db = GetDB ();
    1111  fseek (f, 0, SEEK_SET);
    1212
  • trunk/Ohana/src/imregister/src/imphotsearch.c

    r4024 r4854  
    22# include "imphot.h"
    33
    4 static char *version = "imphotsearch $Revision: 1.7 $";
     4static char *version = "imphotsearch $Revision: 1.8 $";
    55
    66int main (int argc, char **argv) {
     
    1818  fits_db_init (&db);
    1919
     20  /* don't create a new image table if not available */
    2021  if (!fits_db_lock (&db, ImPhotDB)) {
    2122    fprintf (stderr, "ERROR: failure to lock db\n");
     
    2425  }
    2526  /* we use a varient of fits_db_load since the file may be in text format */
    26   if (!db_load (&db)) {
     27  if (!dvo_image_load (&db)) {
    2728    fprintf (stderr, "ERROR: failure to load db\n");
    2829    fits_db_close (&db);
  • trunk/Ohana/src/libohana/src/dvo_image.c

    r4851 r4854  
    22# include <dvo.h>
    33
    4 enum {FITS, TEXT};
     4enum {FITS, RAW};
    55
     6/** this is a varient on fits_db_load to handle the RAW mode */
    67int dvo_image_load (FITS_DB *db, int VERBOSE) {
    78
  • trunk/Ohana/src/opihi/dvo/LoadImages.c

    r3462 r4854  
    44
    55  char filename[256];
    6   int Nimage, NIMAGE;
    7   FILE *f;
    8   Header header;
    96  Image *image;
     7  FITS_DB db;
    108 
    119  VarConfig ("IMAGE_CATALOG", "%s", filename);
    1210
    13   *nimage = 0;
    14   NIMAGE = 0;
    15   Nimage = 0;
    16   image  = NULL;
    17 
    18   /* check if image datafile exists, get header */
    19   if (!fits_read_header (filename, &header)) {
     11  fits_db_init (&db);
     12  if (!fits_db_lock (&db, filename)) {
    2013    fprintf (stderr, "No available image catalog %s (1)\n", filename);
    2114    return (NULL);
    2215  }
    2316
    24   fits_scan (&header, "NIMAGES", "%d", 1, &NIMAGE);
    25   if (NIMAGE == 0) {
    26     fprintf (stderr, "no images found\n");
    27     return (NULL);
    28   }
     17  dvo_image_load (&db, TRUE);
     18  fits_db_close (&db);
    2919
    30   /* get ready to read data on images */
    31   f = fopen (filename, "r");
    32   if (f == (FILE *) NULL) {
    33     fprintf (stderr, "No available image catalog: %s (2)\n", filename);
    34     free (header.buffer);
    35     return (NULL);
    36   }
    37 
    38   ALLOCATE (image, Image, NIMAGE);
    39   fseek (f, header.size, SEEK_SET);
    40   Nimage = Fread (image, sizeof(Image), NIMAGE, f, "image");
    41   if (Nimage != NIMAGE) {
    42     fprintf (stderr, "failed to read in all images (%d of %d)\n", Nimage, NIMAGE);
    43   }
    44 
    45   fclose (f);
    46   *nimage = Nimage;
     20  image = fits_table_get_Image (&db.ftable, nimage);
    4721  return (image);
    4822}
Note: See TracChangeset for help on using the changeset viewer.