IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 5014


Ignore:
Timestamp:
Sep 12, 2005, 3:04:48 PM (21 years ago)
Author:
eugene
Message:

substantial work to enable mode and format selections for DVO:image and DVO:secfilt

Location:
trunk/Ohana/src
Files:
6 added
74 edited

Legend:

Unmodified
Added
Removed
  • trunk/Ohana/src/addstar/include/addstar.h

    r4864 r5014  
    124124int        Shutdown               PROTO((char *message, ...); )
    125125void       TrapSignal             PROTO((int sig));
    126 short      airmass                PROTO((short secz_image, double ra, double dec, double st, double latitude));
     126float      airmass                PROTO((float secz_image, double ra, double dec, double st, double latitude));
    127127void       aregion                PROTO((GSCRegion *region, FILE *f, double ra, double dec));
    128128int        args                   PROTO((int argc, char **argv));
  • trunk/Ohana/src/addstar/src/airmass.c

    r3361 r5014  
    11# include "addstar.h"
    22
    3 short airmass (short secz_image, double ra, double dec, double st, double latitude) {
     3float airmass (float secz_image, double ra, double dec, double st, double latitude) {
    44
    55  double hour, cosz, secz;
     
    1313  hour = 15.0*st - ra;
    1414  cosz = sin (RAD_DEG*dec) * sin (RAD_DEG*latitude) + cos (RAD_DEG*dec) * cos (RAD_DEG*hour) * cos (RAD_DEG*latitude);
    15  
    16   /* modify to match storage units (millimags) */
    17   secz = 1000.0 / cosz;
     15  secz = 1.000 / cosz;
    1816  return (secz);
    1917}
  • trunk/Ohana/src/addstar/src/calibrate.c

    r4865 r5014  
    9595  if (MaxN == -1) {
    9696    fprintf (stderr, "no clean stars\n");
    97     image[0].Mcal = 10000;
    98     image[0].dMcal = 10000;
     97    image[0].Mcal_PS = 10.000;
     98    image[0].dMcal_PS = 10.000;
    9999    return;
    100100  }
     
    137137  if (Nkeep < 5) {
    138138    fprintf (stderr, "too few stars\n");
    139     image[0].Mcal = 10000;
    140     image[0].dMcal = 10000;
     139    image[0].Mcal_PS = 10.000;
     140    image[0].dMcal_PS = 10.000;
    141141    return;
    142142  }
     
    169169    Mw = W1 / W2;
    170170    fprintf (stderr, "N: %.0f, mean: %f, wt mean: %f, stdev: %f, precision: %f\n", N, M1, Mw, M2, M2 / sqrt (N));
    171     image[0].Mcal = 1000 * M1;
    172     image[0].dMcal = 1000 * M2 / sqrt (N);
     171    image[0].Mcal_PS = M1;
     172    image[0].dMcal_PS = M2 / sqrt (N);
    173173    image[0].Mxxxx = N;
    174174  } else {
    175175    fprintf (stderr, "too few stars\n");
    176     image[0].Mcal = 10000;
    177     image[0].dMcal = 10000;
     176    image[0].Mcal_PS = 10.000;
     177    image[0].dMcal_PS = 10.000;
    178178    image[0].Mxxxx = 0;
    179179  }
    180180}
    181 
    182 /*** image.Mcal is still in millimags ***/
  • trunk/Ohana/src/addstar/src/find_matches.c

    r4865 r5014  
    1212  Missing *tmpmissing;
    1313  Coords tcoords;
    14   int Nsecfilt, Nsec, MTIME;
    15   float Mcat, *Mval;
     14  int Nsecfilt, Nsec;
     15  float Mcat, *Mval, MTIME;
    1616
    1717  /* photcode data - must by of type DEP, (PRI, SEC) - probably should restrict to DEP */
     
    143143       
    144144      /* calculate accurate per-star airmass */
    145       secz = airmass (image[0].secz, stars[N].R, stars[N].D, SiderealTime, Latitude);
     145      secz = airmass (image[0].secz_PS, stars[N].R, stars[N].D, SiderealTime, Latitude);
    146146     
    147147      /** add measurements for this star **/
     
    151151      catalog[0].measure[Nmeas].M_PS        = MIN (stars[N].M + MTIME, NO_MAG);
    152152      catalog[0].measure[Nmeas].dM_PS       = MIN (stars[N].dM, NO_ERR);  /* error in input files stored in thousandths of mag */
    153       catalog[0].measure[Nmeas].Mcal_PS     = 0.001*image[0].Mcal; /* XXX image.Mcal still millimags */
     153      catalog[0].measure[Nmeas].Mcal_PS     = image[0].Mcal_PS;
    154154      catalog[0].measure[Nmeas].t           = image[0].tzero + 1e-4*stars[N].Y*image[0].trate;  /* trate is in 0.1 msec / row */
    155155      catalog[0].measure[Nmeas].averef      = n;
     
    252252    if (!IN_CATALOG (stars[N].R, stars[N].D)) continue;
    253253
    254     secz = airmass (image[0].secz, stars[N].R, stars[N].D, SiderealTime, Latitude);
     254    secz = airmass (image[0].secz_PS, stars[N].R, stars[N].D, SiderealTime, Latitude);
    255255
    256256    catalog[0].average[Nave].R_PS      = stars[N].R;
     
    277277    catalog[0].measure[Nmeas].M_PS        = MIN (stars[N].M + MTIME, NO_MAG);
    278278    catalog[0].measure[Nmeas].dM_PS       = MIN (stars[N].dM, NO_ERR);
    279     catalog[0].measure[Nmeas].Mcal_PS     = 0.001*image[0].Mcal;
     279    catalog[0].measure[Nmeas].Mcal_PS     = image[0].Mcal_PS;
    280280    catalog[0].measure[Nmeas].t           = image[0].tzero + 1e-4*stars[N].Y*image[0].trate; /* trate is in 0.1 msec / row */
    281281    catalog[0].measure[Nmeas].averef      = Nave;
  • trunk/Ohana/src/addstar/src/gcatalog.c

    r4865 r5014  
    66  char mode;
    77
    8   /* no autodetect for CATMODE yet */
    9   strcpy (catalog[0].catmode, CATMODE);
     8  /* CATMODE and CATFORMAT determined from catalog */
    109
    1110  /* read catalog header */
  • trunk/Ohana/src/addstar/src/gstars.c

    r4988 r5014  
    44
    55  FILE *f;
    6   int j, N, Nbytes;
     6  int j, N, Nbytes, extend;
    77  int itmp, hour, min;
    88  char *c, photcode[64], line[80];
     
    7676  image[0].exptime = tmp;
    7777 
     78  /*** why are we no longer using APMIFIT?? ***/
    7879  tmp = 0;
    7980  /* fits_scan (&header, "APMIFIT",  "%lf", 1, &tmp); */
    80   image[0].apmifit = tmp * 1000.0;
     81  image[0].apmifit_PS = tmp;
    8182
    8283  tmp = 0;
    8384  /* fits_scan (&header, "dAPMIFIT", "%lf", 1, &tmp); */
    84   image[0].dapmifit = tmp * 1000.0;
     85  image[0].dapmifit_PS = tmp;
    8586
    8687  tmp = 0;
     
    110111  tmp = 0;
    111112  fits_scan (&header, AirmassKeyword, "%lf", 1, &tmp);
    112   image[0].secz = MIN (NO_MAG, 1000*tmp);
     113  image[0].secz_PS = MIN (NO_MAG, tmp);
    113114
    114115  if (!fits_scan (&header, CCDNumKeyword, "%d", 1, &itmp)) {
     
    122123
    123124  /* secz is in units milli-airmass */
    124   image[0].Mcal = 0.0;
     125  image[0].Mcal_PS = 0.0;
    125126  image[0].Xm   = NO_MAG;
    126127  image[0].code = 0;
     
    162163  fseek (f, header.size, SEEK_SET);
    163164
     165  /* read from FITS table or from text table */
     166  extend = FALSE;
     167  fits_scan (&header, "EXTEND",  "%t", 1, &extend);
     168  if (extend) {
     169    Nbytes = fits_matrix_size (&header);
     170    fseek (f, Nbytes, SEEK_CUR);
     171    rdstars = rfits (f, &image[0].nstar);
     172  } else {
     173    /* allocate space for stars */
     174    if (!fits_scan (&header, "NSTARS", "%d", 1, &image[0].nstar)) {
     175      fprintf (stderr, "ERROR: failed to find NSTARS\n");
     176      exit (1);
     177    }
     178    rdstars = rtext (f, &image[0].nstar);
     179  }
     180  fclose (f);
     181
     182  /*
    164183  if (FITS_INPUT) {
    165184    Nbytes = fits_matrix_size (&header);
     
    170189  }
    171190  fclose (f);
     191  */
    172192
    173193  /* modify resulting star list */
  • trunk/Ohana/src/addstar/src/image-db.c

    r4864 r5014  
    3939  fits_init_header (&db[0].header);
    4040
     41  /* set the recommended mode */
    4142  if (!strcmp (CATMODE, "RAW")) {
    4243    /* make header a fake image */
     
    4647    db[0].header.Naxis[1] = 1;
    4748    fits_create_header (&db[0].header);
     49    db[0].mode = DVO_MODE_RAW;
    4850  }
    4951
    5052  if (!strcmp (CATMODE, "MEF") || !strcmp (CATMODE, "SPLIT")) {
     53    db[0].header.extend   = TRUE;
    5154    fits_create_header (&db[0].header);
     55    db[0].mode = DVO_MODE_MEF;
     56  }
     57
     58  /* set the recommended format */
     59  db[0].format = DVO_FORMAT_UNDEF;
     60  if (!strcmp (CATFORMAT, "INTERNAL"))  db[0].format = DVO_FORMAT_INTERNAL;
     61  if (!strcmp (CATFORMAT, "LONEOS"))    db[0].format = DVO_FORMAT_LONEOS;
     62  if (!strcmp (CATFORMAT, "ELIXIR"))    db[0].format = DVO_FORMAT_ELIXIR;
     63  if (!strcmp (CATFORMAT, "PANSTARRS")) db[0].format = DVO_FORMAT_PANSTARRS;
     64  if (db[0].format == DVO_FORMAT_UNDEF) {
     65    fprintf (stderr, "invalid output catalog format\n");
     66    exit (1);
    5267  }
    5368
     
    5873  fits_modify (&db[0].header, "ZERO_PT", "%lf", 1, ZeroPt);
    5974  fits_modify (&db[0].header, "NIMAGES", "%d", 1, 0);
     75
     76  if (db[0].format == DVO_FORMAT_INTERNAL)  fits_modify (&db[0].header, "FORMAT", "%s", 1, "INTERNAL");
     77  if (db[0].format == DVO_FORMAT_LONEOS)    fits_modify (&db[0].header, "FORMAT", "%s", 1, "LONEOS");
     78  if (db[0].format == DVO_FORMAT_ELIXIR)    fits_modify (&db[0].header, "FORMAT", "%s", 1, "ELIXIR");
     79  if (db[0].format == DVO_FORMAT_PANSTARRS) fits_modify (&db[0].header, "FORMAT", "%s", 1, "PANSTARRS");
    6080}
    61 
  • trunk/Ohana/src/addstar/src/mkcatalog.c

    r4826 r5014  
    88  if (VERBOSE) fprintf (stderr, "new catalog file: %s\n", region[0].filename);
    99
     10  /* set the recommended CATFORMAT */
     11  catalog[0].catformat = DVO_FORMAT_UNDEF;
     12  if (!strcmp (CATFORMAT, "INTERNAL"))  catalog[0].catformat = DVO_FORMAT_INTERNAL;
     13  if (!strcmp (CATFORMAT, "LONEOS"))    catalog[0].catformat = DVO_FORMAT_LONEOS;
     14  if (!strcmp (CATFORMAT, "ELIXIR"))    catalog[0].catformat = DVO_FORMAT_ELIXIR;
     15  if (!strcmp (CATFORMAT, "PANSTARRS")) catalog[0].catformat = DVO_FORMAT_PANSTARRS;
     16  if (catalog[0].catformat == DVO_FORMAT_UNDEF) {
     17    fprintf (stderr, "invalid output catalog format\n");
     18    exit (1);
     19  }
     20
     21  /* set the recommended CATMODE */
     22  catalog[0].catmode = DVO_MODE_RAW;
     23  if (!strcmp (CATMODE, "RAW"))  catalog[0].catmode = DVO_MODE_RAW;
     24  if (!strcmp (CATMODE, "MEF"))  catalog[0].catmode = DVO_MODE_MEF;
     25
    1026  fits_init_header (&catalog[0].header);
     27
     28  if (catalog[0].catmode == DVO_MODE_RAW) {
     29    /* make header a fake image */
     30    catalog[0].header.bitpix   = 16;
     31    catalog[0].header.Naxes    = 2;
     32    catalog[0].header.Naxis[0] = 1;
     33    catalog[0].header.Naxis[1] = 1;
     34  }
     35
    1136  fits_create_header (&catalog[0].header);
    1237 
     
    3459  ALLOCATE (catalog[0].secfilt, SecFilt, 1);
    3560  catalog[0].Nsecfilt = GetPhotcodeNsecfilt ();
    36 
    37   /* set catalog mode (raw, mef, etc) - no autodetect for CATMODE yet */
    38   strcpy (catalog[0].catmode, CATMODE);
    39 
    40   /* set catalog format (elixir, loneos, etc) */
    41   if (!strcmp (CATFORMAT, "INTERNAL")) {
    42     sprintf (catalog[0].average_format, "DVO_AVERAGE");
    43     sprintf (catalog[0].measure_format, "DVO_MEASURE");
    44   } else {
    45     sprintf (catalog[0].average_format, "DVO_AVERAGE_%s", CATFORMAT);
    46     sprintf (catalog[0].measure_format, "DVO_MEASURE_%s", CATFORMAT);
    47   }
    4861}
  • trunk/Ohana/src/addstar/src/wcatalog.c

    r4826 r5014  
    33void wcatalog (Catalog *catalog) {
    44 
    5   /* set catalog format (elixir, loneos, etc) */
    6   if (!strcmp (CATFORMAT, "INTERNAL")) {
    7     sprintf (catalog[0].average_format, "DVO_AVERAGE");
    8     sprintf (catalog[0].measure_format, "DVO_MEASURE");
    9   } else {
    10     sprintf (catalog[0].average_format, "DVO_AVERAGE_%s", CATFORMAT);
    11     sprintf (catalog[0].measure_format, "DVO_MEASURE_%s", CATFORMAT);
    12   }
     5  /* output CATMODE and CATFORMAT are set by mkcatalog
     6     or by mode and format of existing data */
    137
    148  if (!save_catalog (catalog, VERBOSE)) {
  • trunk/Ohana/src/delstar/src/gcatalog.c

    r4865 r5014  
    66  char mode;
    77
    8   /* no autodetect for CATMODE yet */
    9   strcpy (catalog[0].catmode, CATMODE);
     8  /* CATMODE and CATFORMAT determined from catalog */
    109
    1110  /* read catalog header */
  • trunk/Ohana/src/delstar/src/gimages.c

    r4680 r5014  
    7676  tmp = 0;
    7777  fits_scan (&header, "AIRMASS", "%lf", 1, &tmp);
    78   image[0].secz = 1000*tmp;
     78  image[0].secz_PS = tmp;
    7979
    8080  /* secz is in units milli-airmass */
    81   image[0].Mcal =  ALPHA*(image[0].secz - 1000);
     81  image[0].Mcal_PS =  ALPHA*(image[0].secz_PS - 1.000);
    8282  image[0].Xm   = NO_MAG;
    8383
  • trunk/Ohana/src/delstar/src/wcatalog.c

    r4832 r5014  
    33int wcatalog (Catalog *catalog) {
    44 
    5   /* set catalog format (elixir, loneos, etc) */
    6   if (!strcmp (CATFORMAT, "INTERNAL")) {
    7     sprintf (catalog[0].average_format, "DVO_AVERAGE");
    8     sprintf (catalog[0].measure_format, "DVO_MEASURE");
    9   } else {
    10     sprintf (catalog[0].average_format, "DVO_AVERAGE_%s", CATFORMAT);
    11     sprintf (catalog[0].measure_format, "DVO_MEASURE_%s", CATFORMAT);
    12   }
     5  /* output CATMODE and CATFORMAT are set by mkcatalog
     6     or by mode and format of existing data */
    137
    148  if (!save_catalog (catalog, VERBOSE)) {
  • trunk/Ohana/src/gastro/src/gptolemy.c

    r4865 r5014  
    88  char filename[256], *fileroot, *filepath, *subdir;
    99  Catalog catalog;
    10 
    11   strcpy (catalog.catmode, CATMODE);
    1210
    1311  filepath = pathname (fullpath);
     
    2523    break;
    2624  }
     25
     26  /* CATMODE and CATFORMAT determined from catalog */
    2727  if (!load_catalog (&catalog, LOAD_AVES | LOAD_MEAS, FALSE)) {
    2828    fprintf (stderr, "can't load catalog data\n");
  • trunk/Ohana/src/gastro2/src/gptolemy2.c

    r4865 r5014  
    99  Catalog catalog;
    1010  GSCdata *stars;
    11 
    12   strcpy (catalog.catmode, CATMODE);
    1311
    1412  filepath = pathname (fullpath);
     
    2725    break;
    2826  }
     27
     28  /* CATMODE and CATFORMAT determined from catalog */
    2929  if (!load_catalog (&catalog, LOAD_AVES | LOAD_MEAS, FALSE)) {
    3030    fprintf (stderr, "can't load catalog data %s\n", filename);
  • trunk/Ohana/src/imregister/imphot/dumpfits.c

    r4024 r5014  
    114114    startstr = sec_to_date (subset[0].tzero);
    115115    filtstr  = GetPhotcodeNamebyCode (subset[0].source);
    116     zp       = 0.001*subset[0].Mcal;
    117     dzp      = 0.001*subset[0].dMcal;
     116    zp       = subset[0].Mcal_PS;
     117    dzp      = subset[0].dMcal_PS;
    118118    XY_to_RD (&ra, &dec, 0.0, 0.0, &subset[0].coords);
    119     airmass  = 0.001*subset[0].secz;
     119    airmass  = subset[0].secz_PS;
    120120    sky      = subset[0].Myyyy + 0x8000;
    121121
  • trunk/Ohana/src/imregister/imphot/output.c

    r4024 r5014  
    3939     
    4040    fprintf (stdout, "%s %s %s  %7.4f %7.4f  %7.4f %5d %02x\n", image[i].name, photstr, timestr,
    41              0.001*image[i].Mcal, 0.001*image[i].dMcal, 0.001*image[i].secz, image[i].nstar, image[i].code);
     41             image[i].Mcal_PS, image[i].dMcal_PS, image[i].secz_PS, image[i].nstar, image[i].code);
    4242    free (timestr);
    4343  }
  • trunk/Ohana/src/libautocode/Makefile

    r4865 r5014  
    2929$(SRC)/average-panstarrs.$(ARCH).o \
    3030$(SRC)/secfilt.$(ARCH).o \
     31$(SRC)/secfilt-loneos.$(ARCH).o \
    3132$(SRC)/secfilt-elixir.$(ARCH).o \
    3233$(SRC)/secfilt-panstarrs.$(ARCH).o \
     
    3839$(SRC)/photcode.$(ARCH).o \
    3940$(SRC)/image.$(ARCH).o \
     41$(SRC)/image-loneos.$(ARCH).o \
     42$(SRC)/image-elixir.$(ARCH).o \
     43$(SRC)/image-panstarrs.$(ARCH).o \
    4044$(SRC)/regimage.$(ARCH).o \
    4145$(SRC)/detreg.$(ARCH).o \
     
    5357$(INC)/average-panstarrs.h \
    5458$(INC)/secfilt.h \
     59$(INC)/secfilt-loneos.h \
    5560$(INC)/secfilt-elixir.h \
    5661$(INC)/secfilt-panstarrs.h \
     
    6267$(INC)/photcode.h \
    6368$(INC)/image.h \
     69$(INC)/image-loneos.h \
     70$(INC)/image-elixir.h \
     71$(INC)/image-panstarrs.h \
    6472$(INC)/regimage.h \
    6573$(INC)/detreg.h \
  • trunk/Ohana/src/libautocode/def/average-panstarrs.d

    r4865 r5014  
    22EXTNAME DVO_AVERAGE_PANSTARRS
    33TYPE    BINTABLE
    4 SIZE    44
     4SIZE    48
    55
    66# elements of data structure / FITS table
     
    1818FIELD offset,         offset,     int,              offset to first measurement
    1919FIELD missing,        missing,    int,              offset to first missing obs
     20FIELD dummy,          dummmy,     int,              extra space
  • trunk/Ohana/src/libautocode/def/image.d

    r4023 r5014  
    1 STRUCT Image
    2 EXTNAME DVO_IMAGES
    3 TYPE BINTABLE
    4 SIZE 240
     1STRUCT  Image
     2EXTNAME DVO_IMAGE
     3TYPE    BINTABLE
     4SIZE    248
    55
    66# elements of the image structure
     
    2020SUBFIELD  ctype,            CTYPE,                char[15],      coordinate type
    2121SUBFIELD  Npolyterms,       NPOLYTERMS,           char,          order of polynomial
     22# 120 bytes
    2223
    2324FIELD     tzero,            TZERO,                e_time,         readout time (row 0)
    2425FIELD     nstar,            NSTAR,                unsigned int,   number of stars on image
    25 FIELD     secz,             SECZ,                 short,          airmass,                   milliairmass
     26FIELD     secz_PS,          SECZ,                 float,          airmass,                   mag
    2627FIELD     NX,               NX,                   short,          image width
    2728FIELD     NY,               NY,                   short,          image height
    28 FIELD     apmifit,          APMIFIT,              short,          aperture correction,       millimag
    29 FIELD     dapmifit,         DAPMIFIT,             short,          apmifit error,             millimag
     29FIELD     apmifit_PS,       APMIFIT,              float,          aperture correction,       mag
     30FIELD     dapmifit_PS,      DAPMIFIT,             float,          apmifit error,             mag
     31FIELD     Mcal_PS,          MCAL,                 float,          calibration mag,           mag
     32FIELD     dMcal_PS,         DMCAL,                float,          error on Mcal,             mag
     33FIELD     Xm,               XM,                   short,          image chisq,               10*log(value)
    3034FIELD     source,           SOURCE,               short,          identifier for CCD,
    31 FIELD     Mcal,             MCAL,                 short,          calibration mag,           millimag
    32 FIELD     dMcal,            DMCAL,                short,          error on Mcal,             millimag
    33 FIELD     Xm,               XM,                   short,          image chisq,               10*log(value)
     35FIELD     exptime,          EXPTIME,              float,          exposure time,             seconds
     36# 40 bytes
     37
    3438FIELD     name,             NAME,                 char[32],       name of original image
    3539FIELD     detection_limit,  DETECTION_LIMIT,      unsigned char,  detection limit,           10*mag
     
    3943FIELD     fwhm_y,           FWHM_Y,               unsigned char,  PSF y width,               25*arcsec
    4044FIELD     trate,            TRATE,                unsigned char,  scan rate,                 100 usec/pixel
    41 FIELD     exptime,          EXPTIME,              float,          exposure time,             seconds
    4245FIELD     code,             CODE,                 char,           image quality flag
    4346FIELD     ccdnum,           CCDNUM,               unsigned char,  CCD ID number
    44 FIELD     dummy,            DUMMY,                char[20],       unused
     47# 40 bytes
     48
     49FIELD     dummy,            DUMMY,                char[18],       unused
    4550FIELD     order,            ORDER,                short,          Mrel 2D polynomical order
    4651FIELD     Mx,               MX,                   short,          Mrel polyterm
     
    5863FIELD     Mxyyy,            MXYYY,                short,          Mrel polyterm
    5964FIELD     Myyyy,            MYYYY,                short,          Mrel polyterm
     65# 48 bytes
  • trunk/Ohana/src/libautocode/def/measure-panstarrs.d

    r4865 r5014  
    22EXTNAME DVO_MEASURE_PANSTARRS
    33TYPE    BINTABLE
    4 SIZE    50
     4SIZE    52
    55
    66# elements of data structure / FITS table
     
    2020FIELD source,         source,     unsigned short, photcode
    2121FIELD flags,          flags,      unsigned short, flags for various uses 
     22FIELD dummy,          dummy,      short,          extra space
    2223FIELD t,              t,          unsigned int,   time in seconds (UNIX)
    2324FIELD averef,         averef,     unsigned int,   reference to average entry     
  • trunk/Ohana/src/libautocode/def/secfilt-panstarrs.d

    r4865 r5014  
    22EXTNAME DVO_SECFILT_PANSTARRS
    33TYPE    BINTABLE
    4 SIZE    8
     4SIZE    12
    55
    66# elements of data structure / FITS table
    77FIELD  M,  MAG,      float,                other mags,       mags
    8 FIELD  dM, MAG_ERR,  short,                scatter on mag    1e4*mag
     8FIELD  dM, MAG_ERR,  float,                scatter on mag    1e4*mag
    99FIELD  Xm, MAG_CHI,  short,                chisq on mag,     [100*log(value)]
     10FIELD  dummy, JUNK,  short,                chisq on mag,     [100*log(value)]
  • trunk/Ohana/src/libautocode/def/secfilt.d

    r4865 r5014  
    22EXTNAME DVO_SECFILT
    33TYPE    BINTABLE
    4 SIZE    10
     4SIZE    12
    55
    66# elements of data structure / FITS table
     
    88FIELD  dM_PS, MAG_ERR,  float,                scatter on mag    mags
    99FIELD  Xm,    MAG_CHI,  short,                chisq on mag      [100*log(value)]
     10FIELD  dummy, JUNK,     short,                place holder
  • trunk/Ohana/src/libautocode/generate

    r4023 r5014  
    3535        ($key, $value) = split (" ", $line, 2);
    3636       
     37        # strip white space from the following
     38        if ($key eq "TYPE")    { ($value) = $value =~ m|\s*(\S+)\s*|; }
     39        if ($key eq "SIZE")    { ($value) = $value =~ m|\s*(\S+)\s*|; }
     40        if ($key eq "STRUCT")  { ($value) = $value =~ m|\s*(\S+)\s*|; }
     41        if ($key eq "EXTNAME") { ($value) = $value =~ m|\s*(\S+)\s*|; }
     42
    3743        &set_keypair ($key, $value);
    3844
    3945        # there are used internally (not just a replacement)
    40         if ($key eq "TYPE")   { $TYPE = $value;   }
    41         if ($key eq "SIZE")   { $SIZE = $value;   }
    42         if ($key eq "STRUCT") { $STRUCT = $value; }
     46        if ($key eq "TYPE")    { $TYPE = $value;   }
     47        if ($key eq "SIZE")    { $SIZE = $value;   }
     48        if ($key eq "STRUCT")  { $STRUCT = $value; }
    4349
    4450        # not a simple key/value entry
     
    5460        }
    5561    }
     62    $Nexpect = 0;
    5663    if ($TYPE eq "BINTABLE") { $Nexpect = &count_bintablesize; }
    5764    if ($TYPE eq "TABLE")    { $Nexpect = &count_tablesize;    }
     65    if (! $Nexpect) { die "missing valid TYPE\n"; }
    5866    if ($Nexpect != $SIZE) { die "size mismatch: $Nexpect vs $SIZE\n"; }
    5967}
  • trunk/Ohana/src/libfits/include/fits.h

    r3507 r5014  
    4646      fprintf(stderr,"failed realloc increment at %d in %s\n", __LINE__, __FILE__);\
    4747      exit (10); } }
     48# define free(X) \
     49  free(X); X = NULL;
     50
    4851# endif /* ALLOCATE */
    4952
  • trunk/Ohana/src/libohana/Makefile

    r4865 r5014  
    4848$(SRC)/photfits.$(ARCH).o        \
    4949$(SRC)/dvo_image.$(ARCH).o           \
     50$(SRC)/dvo_image_raw.$(ARCH).o           \
    5051$(SRC)/phot_catalog.$(ARCH).o    \
    5152$(SRC)/phot_catalog_mef.$(ARCH).o      \
     
    6364$(ASRC)/average-panstarrs.$(ARCH).o \
    6465$(ASRC)/secfilt.$(ARCH).o \
     66$(ASRC)/secfilt-loneos.$(ARCH).o \
    6567$(ASRC)/secfilt-elixir.$(ARCH).o \
    6668$(ASRC)/secfilt-panstarrs.$(ARCH).o \
     
    7274$(ASRC)/photcode.$(ARCH).o \
    7375$(ASRC)/image.$(ARCH).o \
     76$(ASRC)/image-loneos.$(ARCH).o \
     77$(ASRC)/image-elixir.$(ARCH).o \
     78$(ASRC)/image-panstarrs.$(ARCH).o \
    7479$(ASRC)/regimage.$(ARCH).o \
    7580$(ASRC)/detreg.$(ARCH).o \
  • trunk/Ohana/src/libohana/include/dvo.h

    r4993 r5014  
    1111
    1212/* DVO table modes */
    13 enum {DVO_MODE_RAW, DVO_MODE_MEF, DVO_MODE_SPLIT, DVO_MODE_MYSQL} DVOTableMode;
     13enum {DVO_MODE_UNDEF, DVO_MODE_RAW, DVO_MODE_MEF, DVO_MODE_SPLIT, DVO_MODE_MYSQL} DVOTableMode;
    1414
    1515/* DVO table formats */
    16 enum {DVO_FORMAT_UNDEF, DVO_FORMAT_ELIXIR, DVO_FORMAT_LONEOS, DVO_FORMAT_PANSTARRS} DVOTableFormat;
     16enum {DVO_FORMAT_UNDEF, DVO_FORMAT_INTERNAL, DVO_FORMAT_ELIXIR, DVO_FORMAT_LONEOS, DVO_FORMAT_PANSTARRS} DVOTableFormat;
    1717
    1818/* image data modes in RegImage */
     
    125125
    126126  /* extra table data if needed (move these to enums?) */
     127  # if (0)
    127128  char catmode[10];         /* storage mode: raw, mef, split, mysql */
    128129  char average_format[80];  /* table format: internal, loneos, elixir, panstarrs */
    129130  char measure_format[80];  /* table format: must match average_format */
     131  char secfilt_format[80];  /* table format: must match average_format */
     132  # endif
     133
     134  int catmode;
     135  int catformat;
    130136 
    131137  /* data in the catalog */
     
    245251/*** conversion functions / I/O conversions ***/
    246252
    247 Average *AveragePanstarrsToInternal (AveragePanstarrs *in, int Nvalues);
    248 Average *FtableToAverage (FTable *ftable, int *Naverage, char *extname);
    249 Average *ReadRawAverage (FILE *f, int Naverage, char *format);
     253Average *ReadRawAverage (FILE *f, int Naverage, int format);
     254Measure *ReadRawMeasure (FILE *f, int Nmeasure, int format);
     255SecFilt *ReadRawSecFilt (FILE *f, int Nsecfilt, int format);
     256int WriteRawAverage (FILE *f, Average *average, int Naverage, int format);
     257int WriteRawMeasure (FILE *f, Measure *measure, int Nmeasure, int format);
     258int WriteRawSecFilt (FILE *f, SecFilt *secfilt, int Nsecfilt, int format);
     259
     260Average *FtableToAverage (FTable *ftable, int *Naverage, int *format);
    250261Average *AverageLoneosToInternal (AverageLoneos *in, int Nvalues);
    251262Average *AverageElixirToInternal (AverageElixir *in, int Nvalues);
     263Average *AveragePanstarrsToInternal (AveragePanstarrs *in, int Nvalues);
     264AverageLoneos *AverageInternalToLoneos (Average *in, int Nvalues);
    252265AverageElixir *AverageInternalToElixir (Average *in, int Nvalues);
    253 AverageLoneos *AverageInternalToLoneos (Average *in, int Nvalues);
    254266AveragePanstarrs *AverageInternalToPanstarrs (Average *in, int Nvalues);
    255 Measure *MeasurePanstarrsToInternal (MeasurePanstarrs *in, int Nvalues);
    256 Measure *FtableToMeasure (FTable *ftable, int *Nmeasure, char *extname);
    257 Measure *ReadRawMeasure (FILE *f, int Nmeasure, char *format);
     267
     268Measure *FtableToMeasure (FTable *ftable, int *Nmeasure, int *format);
    258269Measure *MeasureLoneosToInternal (MeasureLoneos *in, int Nvalues);
    259270Measure *MeasureElixirToInternal (MeasureElixir *in, int Nvalues);
     271Measure *MeasurePanstarrsToInternal (MeasurePanstarrs *in, int Nvalues);
     272MeasureLoneos *MeasureInternalToLoneos (Measure *in, int Nvalues);
    260273MeasureElixir *MeasureInternalToElixir (Measure *in, int Nvalues);
    261 MeasureLoneos *MeasureInternalToLoneos (Measure *in, int Nvalues);
    262274MeasurePanstarrs *MeasureInternalToPanstarrs (Measure *in, int Nvalues);
    263 int AverageToFtable (FTable *ftable, Average *average, int Naverage, char *extname);
    264 int MeasureToFtable (FTable *ftable, Measure *measure, int Nmeasure, char *extname);
    265 int WriteRawAverage (FILE *f, Average *average, int Naverage, char *format);
    266 int WriteRawMeasure (FILE *f, Measure *measure, int Nmeasure, char *format);
     275
     276SecFilt *FtableToSecFilt (FTable *ftable, int *Nsecfilt, int *format);
     277SecFilt *SecFiltLoneosToInternal (SecFiltLoneos *in, int Nvalues);
     278SecFilt *SecFiltElixirToInternal (SecFiltElixir *in, int Nvalues);
     279SecFilt *SecFiltPanstarrsToInternal (SecFiltPanstarrs *in, int Nvalues);
     280SecFiltLoneos *SecFiltInternalToLoneos (SecFilt *in, int Nvalues);
     281SecFiltElixir *SecFiltInternalToElixir (SecFilt *in, int Nvalues);
     282SecFiltPanstarrs *SecFiltInternalToPanstarrs (SecFilt *in, int Nvalues);
     283
     284int AverageToFtable (FTable *ftable, Average *average, int Naverage, int format);
     285int MeasureToFtable (FTable *ftable, Measure *measure, int Nmeasure, int format);
     286int SecFiltToFtable (FTable *ftable, SecFilt *secfilt, int Nsecfilt, int format);
     287
    267288int load_catalog_raw (Catalog *catalog, char mode, int VERBOSE);
    268289int save_catalog_raw (Catalog *catalog, char VERBOSE);
     
    279300int dvo_image_addrows (FITS_DB *db, Image *new, int Nnew);
    280301
     302int FtableToImage (FTable *ftable, Header *theader, int *format);
     303int ImageToFtable (FTable *ftable, Header *theader, int format);
     304int ImageToVtable (VTable *vtable, Header *theader, int format);
     305Image *ImageElixirToInternal (ImageElixir *in, int Nvalues);
     306ImageElixir *ImageInternalToElixir (Image *in, int Nvalues);
     307Image *ImageLoneosToInternal (ImageLoneos *in, int Nvalues);
     308ImageLoneos *ImageInternalToLoneos (Image *in, int Nvalues);
     309Image *ImagePanstarrsToInternal (ImagePanstarrs *in, int Nvalues);
     310ImagePanstarrs *ImageInternalToPanstarrs (Image *in, int Nvalues);
     311
    281312# endif
  • trunk/Ohana/src/libohana/src/dvo_convert.c

    r4993 r5014  
    33
    44/* The Ftable-TYPE conversion functions determine the format of table based on EXTNAME in header.
    5    they convert the table to the internal format, and set 'extname'. 
     5   they convert the table to the internal format, and set 'format'. 
    66
    77   The TYPE-Ftable conversions functions create output tables in the format requested
    8    by the 'extname' function parameter.
     8   by the 'format' function parameter.
    99 */
    1010
     
    1414/*** Average / FTable conversion functions ***/
    1515
    16 Average *FtableToAverage (FTable *ftable, int *Naverage, char *extname) {
     16Average *FtableToAverage (FTable *ftable, int *Naverage, int *format) {
    1717
    1818  Average *average;
     19  char extname[80];
    1920
    2021  /* convert to the internal format */
     
    2526  if (!strcmp (extname, "DVO_AVERAGE")) {
    2627    average = fits_table_get_Average (ftable, Naverage, NULL);
     28    *format = DVO_FORMAT_INTERNAL;
    2729    return (average);
    2830  }
    2931  if (!strcmp (extname, "DVO_AVERAGE_ELIXIR")) {
    30     AverageElixir *tmpaverage;
    31     tmpaverage = fits_table_get_AverageElixir (ftable, Naverage, NULL);
    32     average = AverageElixirToInternal (tmpaverage, *Naverage);
    33     free (tmpaverage);
     32    AverageElixir *tmpAverage;
     33    tmpAverage = fits_table_get_AverageElixir (ftable, Naverage, NULL);
     34    average = AverageElixirToInternal (tmpAverage, *Naverage);
     35    free (tmpAverage);
     36    *format = DVO_FORMAT_ELIXIR;
    3437    return (average);
    3538  }
    3639  if (!strcmp (extname, "DVO_AVERAGE_LONEOS")) {
    37     AverageLoneos *tmpaverage;
    38     tmpaverage = fits_table_get_AverageLoneos (ftable, Naverage, NULL);
    39     average = AverageLoneosToInternal (tmpaverage, *Naverage);
    40     free (tmpaverage);
     40    AverageLoneos *tmpAverage;
     41    tmpAverage = fits_table_get_AverageLoneos (ftable, Naverage, NULL);
     42    average = AverageLoneosToInternal (tmpAverage, *Naverage);
     43    free (tmpAverage);
     44    *format = DVO_FORMAT_LONEOS;
    4145    return (average);
    4246  }
    4347  if (!strcmp (extname, "DVO_AVERAGE_PANSTARRS")) {
    44     AveragePanstarrs *tmpaverage;
    45     tmpaverage = fits_table_get_AveragePanstarrs (ftable, Naverage, NULL);
    46     average = AveragePanstarrsToInternal (tmpaverage, *Naverage);
    47     free (tmpaverage);
     48    AveragePanstarrs *tmpAverage;
     49    tmpAverage = fits_table_get_AveragePanstarrs (ftable, Naverage, NULL);
     50    average = AveragePanstarrsToInternal (tmpAverage, *Naverage);
     51    free (tmpAverage);
     52    *format = DVO_FORMAT_PANSTARRS;
    4853    return (average);
    4954  }
     
    5560}
    5661
    57 int AverageToFtable (FTable *ftable, Average *average, int Naverage, char *extname) {
     62int AverageToFtable (FTable *ftable, Average *average, int Naverage, int format) {
     63
     64  AverageElixir *tmpAverageElixir;
     65  AverageLoneos *tmpAverageLoneos ;
     66  AveragePanstarrs *tmpAveragePanstarrs;
    5867
    5968  /* convert from the internal format */
    60   if (!strcmp (extname, "DVO_AVERAGE")) {
    61     fits_table_set_Average (ftable, average, Naverage);
    62     return (TRUE);
    63   }
    64   if (!strcmp (extname, "DVO_AVERAGE_ELIXIR")) {
    65     AverageElixir *tmpaverage;
    66     tmpaverage = AverageInternalToElixir (average, Naverage);
    67     fits_table_set_AverageElixir (ftable, tmpaverage, Naverage);
    68     free (tmpaverage);
    69     return (TRUE);
    70   }
    71   if (!strcmp (extname, "DVO_AVERAGE_LONEOS")) {
    72     AverageLoneos *tmpaverage;
    73     tmpaverage = AverageInternalToLoneos (average, Naverage);
    74     fits_table_set_AverageLoneos (ftable, tmpaverage, Naverage);
    75     free (tmpaverage);
    76     return (TRUE);
    77   }
    78   if (!strcmp (extname, "DVO_AVERAGE_PANSTARRS")) {
    79     AveragePanstarrs *tmpaverage;
    80     tmpaverage = AverageInternalToPanstarrs (average, Naverage);
    81     fits_table_set_AveragePanstarrs (ftable, tmpaverage, Naverage);
    82     free (tmpaverage);
    83     return (TRUE);
    84   }
    85   fprintf (stderr, "table format unknown: %s\n", extname);
    86   return (FALSE);
     69  switch (format) {
     70    case DVO_FORMAT_INTERNAL:
     71      fits_table_set_Average (ftable, average, Naverage);
     72      break;
     73    case DVO_FORMAT_ELIXIR:
     74      tmpAverageElixir = AverageInternalToElixir (average, Naverage);
     75      fits_table_set_AverageElixir (ftable, tmpAverageElixir, Naverage);
     76      free (tmpAverageElixir);
     77      break;
     78    case DVO_FORMAT_LONEOS:
     79      tmpAverageLoneos  = AverageInternalToLoneos (average, Naverage);
     80      fits_table_set_AverageLoneos (ftable, tmpAverageLoneos , Naverage);
     81      free (tmpAverageLoneos );
     82      break;
     83    case DVO_FORMAT_PANSTARRS:
     84      tmpAveragePanstarrs = AverageInternalToPanstarrs (average, Naverage);
     85      fits_table_set_AveragePanstarrs (ftable, tmpAveragePanstarrs, Naverage);
     86      free (tmpAveragePanstarrs);
     87      break;
     88    default:
     89      fprintf (stderr, "table format unknown (average)\n");
     90      return (FALSE);
     91  }
     92  return (TRUE);
    8793}
    8894
    8995/*** Measure / FTable conversion functions ***/
    9096
    91 Measure *FtableToMeasure (FTable *ftable, int *Nmeasure, char *extname) {
     97Measure *FtableToMeasure (FTable *ftable, int *Nmeasure, int *format) {
    9298
    9399  Measure *measure;
     100  char extname[80];
    94101
    95102  /* convert to the internal format */
     
    100107  if (!strcmp (extname, "DVO_MEASURE")) {
    101108    measure = fits_table_get_Measure (ftable, Nmeasure, NULL);
     109    *format = DVO_FORMAT_INTERNAL;
    102110    return (measure);
    103111  }
    104112  if (!strcmp (extname, "DVO_MEASURE_ELIXIR")) {
    105     MeasureElixir *tmpmeasure;
    106     tmpmeasure = fits_table_get_MeasureElixir (ftable, Nmeasure, NULL);
    107     measure = MeasureElixirToInternal (tmpmeasure, *Nmeasure);
    108     free (tmpmeasure);
     113    MeasureElixir *tmpMeasure;
     114    tmpMeasure = fits_table_get_MeasureElixir (ftable, Nmeasure, NULL);
     115    measure = MeasureElixirToInternal (tmpMeasure, *Nmeasure);
     116    free (tmpMeasure);
     117    *format = DVO_FORMAT_ELIXIR;
    109118    return (measure);
    110119  }
    111120  if (!strcmp (extname, "DVO_MEASURE_LONEOS")) {
    112     MeasureLoneos *tmpmeasure;
    113     tmpmeasure = fits_table_get_MeasureLoneos (ftable, Nmeasure, NULL);
    114     measure = MeasureLoneosToInternal (tmpmeasure, *Nmeasure);
    115     free (tmpmeasure);
     121    MeasureLoneos *tmpMeasure;
     122    tmpMeasure = fits_table_get_MeasureLoneos (ftable, Nmeasure, NULL);
     123    measure = MeasureLoneosToInternal (tmpMeasure, *Nmeasure);
     124    free (tmpMeasure);
     125    *format = DVO_FORMAT_LONEOS;
    116126    return (measure);
    117127  }
    118128  if (!strcmp (extname, "DVO_MEASURE_PANSTARRS")) {
    119     MeasurePanstarrs *tmpmeasure;
    120     tmpmeasure = fits_table_get_MeasurePanstarrs (ftable, Nmeasure, NULL);
    121     measure = MeasurePanstarrsToInternal (tmpmeasure, *Nmeasure);
    122     free (tmpmeasure);
     129    MeasurePanstarrs *tmpMeasure;
     130    tmpMeasure = fits_table_get_MeasurePanstarrs (ftable, Nmeasure, NULL);
     131    measure = MeasurePanstarrsToInternal (tmpMeasure, *Nmeasure);
     132    free (tmpMeasure);
     133    *format = DVO_FORMAT_PANSTARRS;
    123134    return (measure);
    124135  }
     
    130141}
    131142
    132 int MeasureToFtable (FTable *ftable, Measure *measure, int Nmeasure, char *extname) {
     143int MeasureToFtable (FTable *ftable, Measure *measure, int Nmeasure, int format) {
     144
     145  MeasureElixir *tmpMeasureElixir;
     146  MeasureLoneos *tmpMeasureLoneos;
     147  MeasurePanstarrs *tmpMeasurePanstarrs;
    133148
    134149  /* convert from the internal format */
    135   if (!strcmp (extname, "DVO_MEASURE")) {
    136     fits_table_set_Measure (ftable, measure, Nmeasure);
     150  switch (format) {
     151    case DVO_FORMAT_INTERNAL:
     152      fits_table_set_Measure (ftable, measure, Nmeasure);
     153      break;
     154    case DVO_FORMAT_ELIXIR:
     155      tmpMeasureElixir = MeasureInternalToElixir (measure, Nmeasure);
     156      fits_table_set_MeasureElixir (ftable, tmpMeasureElixir, Nmeasure);
     157      free (tmpMeasureElixir);
     158      break;
     159    case DVO_FORMAT_LONEOS:
     160      tmpMeasureLoneos = MeasureInternalToLoneos (measure, Nmeasure);
     161      fits_table_set_MeasureLoneos (ftable, tmpMeasureLoneos, Nmeasure);
     162      free (tmpMeasureLoneos);
     163      break;
     164    case DVO_FORMAT_PANSTARRS:
     165      tmpMeasurePanstarrs = MeasureInternalToPanstarrs (measure, Nmeasure);
     166      fits_table_set_MeasurePanstarrs (ftable, tmpMeasurePanstarrs, Nmeasure);
     167      free (tmpMeasurePanstarrs);
     168      break;
     169    default:
     170      fprintf (stderr, "table format unknown (measure)\n");
     171      return (FALSE);
     172  }
     173  return (TRUE);
     174}
     175
     176/*** SecFilt / FTable conversion functions ***/
     177
     178SecFilt *FtableToSecFilt (FTable *ftable, int *Nsecfilt, int *format) {
     179
     180  SecFilt *secfilt;
     181  char extname[80];
     182
     183  /* convert to the internal format */
     184  if (!fits_scan (ftable[0].header, "EXTNAME", "%s", 1, extname)) {
     185    fprintf (stderr, "EXTNAME missing for secfilt table\n");
     186    return (FALSE);
     187  }
     188  if (!strcmp (extname, "DVO_SECFILT")) {
     189    secfilt = fits_table_get_SecFilt (ftable, Nsecfilt, NULL);
     190    *format = DVO_FORMAT_INTERNAL;
     191    return (secfilt);
     192  }
     193  if (!strcmp (extname, "DVO_SECFILT_ELIXIR")) {
     194    SecFiltElixir *tmpSecFilt;
     195    tmpSecFilt = fits_table_get_SecFiltElixir (ftable, Nsecfilt, NULL);
     196    secfilt = SecFiltElixirToInternal (tmpSecFilt, *Nsecfilt);
     197    free (tmpSecFilt);
     198    *format = DVO_FORMAT_ELIXIR;
     199    return (secfilt);
     200  }
     201  if (!strcmp (extname, "DVO_SECFILT_LONEOS")) {
     202    SecFiltLoneos *tmpSecFilt;
     203    tmpSecFilt = fits_table_get_SecFiltLoneos (ftable, Nsecfilt, NULL);
     204    secfilt = SecFiltLoneosToInternal (tmpSecFilt, *Nsecfilt);
     205    free (tmpSecFilt);
     206    *format = DVO_FORMAT_LONEOS;
     207    return (secfilt);
     208  }
     209  if (!strcmp (extname, "DVO_SECFILT_PANSTARRS")) {
     210    SecFiltPanstarrs *tmpSecFilt;
     211    tmpSecFilt = fits_table_get_SecFiltPanstarrs (ftable, Nsecfilt, NULL);
     212    secfilt = SecFiltPanstarrsToInternal (tmpSecFilt, *Nsecfilt);
     213    free (tmpSecFilt);
     214    *format = DVO_FORMAT_PANSTARRS;
     215    return (secfilt);
     216  }
     217
     218  fprintf (stderr, "table format unknown: %s\n", extname);
     219
     220  *Nsecfilt = 0;
     221  return (NULL);
     222}
     223
     224int SecFiltToFtable (FTable *ftable, SecFilt *secfilt, int Nsecfilt, int format) {
     225
     226  SecFiltElixir *tmpSecFiltElixir;
     227  SecFiltLoneos *tmpSecFiltLoneos;
     228  SecFiltPanstarrs *tmpSecFiltPanstarrs;
     229
     230  /* convert from the internal format */
     231  switch (format) {
     232    case DVO_FORMAT_INTERNAL:
     233      fits_table_set_SecFilt (ftable, secfilt, Nsecfilt);
     234      break;
     235    case DVO_FORMAT_ELIXIR:
     236      tmpSecFiltElixir = SecFiltInternalToElixir (secfilt, Nsecfilt);
     237      fits_table_set_SecFiltElixir (ftable, tmpSecFiltElixir, Nsecfilt);
     238      free (tmpSecFiltElixir);
     239      break;
     240    case DVO_FORMAT_LONEOS:
     241      tmpSecFiltLoneos = SecFiltInternalToLoneos (secfilt, Nsecfilt);
     242      fits_table_set_SecFiltLoneos (ftable, tmpSecFiltLoneos, Nsecfilt);
     243      free (tmpSecFiltLoneos);
     244      break;
     245    case DVO_FORMAT_PANSTARRS:
     246      tmpSecFiltPanstarrs = SecFiltInternalToPanstarrs (secfilt, Nsecfilt);
     247      fits_table_set_SecFiltPanstarrs (ftable, tmpSecFiltPanstarrs, Nsecfilt);
     248      free (tmpSecFiltPanstarrs);
     249      break;
     250    default:
     251      fprintf (stderr, "table format unknown (secfilt)\n");
     252      return (FALSE);
     253  }
     254  return (TRUE);
     255}
     256
     257/*** Image Conversions ***/
     258
     259int FtableToImage (FTable *ftable, Header *theader, int *format) {
     260
     261  int Nimage;
     262  char extname[80];
     263
     264  /* extname may be set from outside if the source is RAW not MEF */
     265  if (*format == DVO_FORMAT_ELIXIR) {
     266    ImageElixir *tmpimage;
     267    tmpimage = fits_table_get_ImageElixir (ftable, &Nimage, NULL);
     268    ftable[0].buffer = (char *) ImageElixirToInternal (tmpimage, Nimage);
     269    free (tmpimage);
     270    goto set_header;
     271  }
     272
     273  /* convert to the internal format */
     274  if (!fits_scan (ftable[0].header, "EXTNAME", "%s", 1, extname)) {
     275    fprintf (stderr, "EXTNAME missing for image table\n");
     276    return (FALSE);
     277  }
     278  if (!strcmp (extname, "DVO_IMAGE")) {
     279    Image *image;
     280    image = fits_table_get_Image (ftable, &Nimage, NULL);
     281    *format = DVO_FORMAT_INTERNAL;
    137282    return (TRUE);
    138283  }
    139   if (!strcmp (extname, "DVO_MEASURE_ELIXIR")) {
    140     MeasureElixir *tmpmeasure;
    141     tmpmeasure = MeasureInternalToElixir (measure, Nmeasure);
    142     fits_table_set_MeasureElixir (ftable, tmpmeasure, Nmeasure);
    143     free (tmpmeasure);
    144     return (TRUE);
    145   }
    146   if (!strcmp (extname, "DVO_MEASURE_LONEOS")) {
    147     MeasureLoneos *tmpmeasure;
    148     tmpmeasure = MeasureInternalToLoneos (measure, Nmeasure);
    149     fits_table_set_MeasureLoneos (ftable, tmpmeasure, Nmeasure);
    150     free (tmpmeasure);
    151     return (TRUE);
    152   }
    153   if (!strcmp (extname, "DVO_MEASURE_PANSTARRS")) {
    154     MeasurePanstarrs *tmpmeasure;
    155     tmpmeasure = MeasureInternalToPanstarrs (measure, Nmeasure);
    156     fits_table_set_MeasurePanstarrs (ftable, tmpmeasure, Nmeasure);
    157     free (tmpmeasure);
    158     return (TRUE);
    159   }
    160 
     284  if (!strcmp (extname, "DVO_IMAGE_ELIXIR")) {
     285    ImageElixir *tmpimage;
     286    *format = DVO_FORMAT_ELIXIR;
     287    tmpimage = fits_table_get_ImageElixir (ftable, &Nimage, NULL);
     288    ftable[0].buffer = (char *) ImageElixirToInternal (tmpimage, Nimage);
     289    free (tmpimage);
     290    goto set_header;
     291  }
     292  if (!strcmp (extname, "DVO_IMAGE_LONEOS")) {
     293    ImageLoneos *tmpimage;
     294    *format = DVO_FORMAT_LONEOS;
     295    tmpimage = fits_table_get_ImageLoneos (ftable, &Nimage, NULL);
     296    ftable[0].buffer = (char *) ImageLoneosToInternal (tmpimage, Nimage);
     297    free (tmpimage);
     298    goto set_header;
     299  }
     300  if (!strcmp (extname, "DVO_IMAGE_PANSTARRS")) {
     301    ImagePanstarrs *tmpimage;
     302    *format = DVO_FORMAT_PANSTARRS;
     303    tmpimage = fits_table_get_ImagePanstarrs (ftable, &Nimage, NULL);
     304    ftable[0].buffer = (char *) ImagePanstarrsToInternal (tmpimage, Nimage);
     305    free (tmpimage);
     306    goto set_header;
     307  }
    161308  fprintf (stderr, "table format unknown: %s\n", extname);
    162309  return (FALSE);
    163 }
    164 
    165 /** Average / Raw Table conversions **/
    166 
    167 Average *ReadRawAverage (FILE *f, int Naverage, char *format) {
    168 
    169   int nitems;
    170   Average *average;
    171 
    172   if (!strcmp (format, "DVO_AVERAGE")) {
    173     ALLOCATE (average, Average, MAX (Naverage, 1));
    174     nitems = fread (average, sizeof(Average), Naverage, f);
    175     if (nitems != Naverage) {
    176       fprintf (stderr, "failed to read averages (%d vs %d)\n", nitems, Naverage);
    177       return (NULL);
    178     }
    179     fits_convert_Average (average, sizeof(Average), Naverage);
    180     return (average);
    181   }
    182   if (!strcmp (format, "DVO_AVERAGE_ELIXIR")) {
    183     AverageElixir *tmpaverage;
    184     ALLOCATE (tmpaverage, AverageElixir, MAX (Naverage, 1));
    185     nitems = fread (tmpaverage, sizeof(AverageElixir), Naverage, f);
    186     if (nitems != Naverage) {
    187       fprintf (stderr, "failed to read averages (%d vs %d)\n", nitems, Naverage);
    188       return (NULL);
    189     }
    190     fits_convert_AverageElixir (tmpaverage, sizeof(AverageElixir), Naverage);
    191     average = AverageElixirToInternal (tmpaverage, Naverage);
    192     free (tmpaverage);
    193     return (average);
    194   }
    195   if (!strcmp (format, "DVO_AVERAGE_LONEOS")) {
    196     AverageLoneos *tmpaverage;
    197     ALLOCATE (tmpaverage, AverageLoneos, MAX (Naverage, 1));
    198     nitems = fread (tmpaverage, sizeof(AverageLoneos), Naverage, f);
    199     if (nitems != Naverage) {
    200       fprintf (stderr, "failed to read averages (%d vs %d)\n", nitems, Naverage);
    201       return (NULL);
    202     }
    203     fits_convert_AverageLoneos (tmpaverage, sizeof(AverageLoneos), Naverage);
    204     average = AverageLoneosToInternal (tmpaverage, Naverage);
    205     free (tmpaverage);
    206     return (average);
    207   }
    208   if (!strcmp (format, "DVO_AVERAGE_PANSTARRS")) {
    209     AveragePanstarrs *tmpaverage;
    210     ALLOCATE (tmpaverage, AveragePanstarrs, MAX (Naverage, 1));
    211     nitems = fread (tmpaverage, sizeof(AveragePanstarrs), Naverage, f);
    212     if (nitems != Naverage) {
    213       fprintf (stderr, "failed to read averages (%d vs %d)\n", nitems, Naverage);
    214       return (NULL);
    215     }
    216     fits_convert_AveragePanstarrs (tmpaverage, sizeof(AveragePanstarrs), Naverage);
    217     average = AveragePanstarrsToInternal (tmpaverage, Naverage);
    218     free (tmpaverage);
    219     return (average);
    220   }
    221   fprintf (stderr, "error reading averages\n");
    222   return (NULL);
    223 }
    224 
    225 /* accepts and converts internal average formats and outputs
    226    raw data in the specified format */
    227 int WriteRawAverage (FILE *f, Average *average, int Naverage, char *format) {
    228 
    229   int nitems;
    230 
    231   if (!strcmp (format, "DVO_AVERAGE")) {
    232     fits_convert_Average (average, sizeof(Average), Naverage);
    233     nitems = fwrite (average, sizeof(Average), Naverage, f);
    234     if (nitems != Naverage) {
    235       fprintf (stderr, "failed to write averages (%d vs %d)\n", nitems, Naverage);
     310
     311set_header:
     312  fits_free_header (theader);
     313  fits_table_mkheader_Image (theader);
     314  fits_modify (theader, "NAXIS2", "%d", 1, Nimage);
     315  theader[0].Naxis[1] = Nimage;
     316  ftable[0].size = fits_matrix_size (theader);
     317  return (TRUE);
     318}
     319
     320int ImageToFtable (FTable *ftable, Header *theader, int format) {
     321
     322  int Nimage;
     323  ImageElixir *tmpImageElixir;
     324  ImageLoneos *tmpImageLoneos;
     325  ImagePanstarrs *tmpImagePanstarrs;
     326
     327  Nimage = theader[0].Naxis[1];
     328
     329  /* convert from the internal format */
     330  switch (format) {
     331    case DVO_FORMAT_INTERNAL:
     332      fits_convert_Image ((Image *) ftable[0].buffer, sizeof(Image), Nimage);
     333      break;
     334    case DVO_FORMAT_ELIXIR:
     335      tmpImageElixir = ImageInternalToElixir ((Image *) ftable[0].buffer, Nimage);
     336      free (ftable[0].buffer);
     337      fits_table_set_ImageElixir (ftable, tmpImageElixir, Nimage);
     338      free (tmpImageElixir);
     339      break;
     340    case DVO_FORMAT_LONEOS:
     341      tmpImageLoneos = ImageInternalToLoneos ((Image *) ftable[0].buffer, Nimage);
     342      free (ftable[0].buffer);
     343      fits_table_set_ImageLoneos (ftable, tmpImageLoneos, Nimage);
     344      free (tmpImageLoneos);
     345      break;
     346    case DVO_FORMAT_PANSTARRS:
     347      tmpImagePanstarrs = ImageInternalToPanstarrs ((Image *) ftable[0].buffer, Nimage);
     348      free (ftable[0].buffer);
     349      fits_table_set_ImagePanstarrs (ftable, tmpImagePanstarrs, Nimage);
     350      free (tmpImagePanstarrs);
     351      break;
     352    default:
     353      fprintf (stderr, "table format unknown (image ftable)\n");
    236354      return (FALSE);
     355  }
     356  return (TRUE);
     357}
     358
     359int ImageToVtable (VTable *vtable, Header *theader, int format) {
     360
     361  int i, Nrow, Nimage;
     362
     363  Nrow = vtable[0].Nrow;
     364
     365  /* convert from the internal format */
     366  if (format == DVO_FORMAT_INTERNAL) {
     367    for (i = 0; i < Nrow; i++) {
     368      fits_convert_Image ((Image *) vtable[0].buffer[i], sizeof(Image), 1);
    237369    }
    238370    return (TRUE);
    239371  }
    240   if (!strcmp (format, "DVO_AVERAGE_ELIXIR")) {
    241     AverageElixir *tmpaverage;
    242     tmpaverage = AverageInternalToElixir (average, Naverage);
    243     fits_convert_AverageElixir (tmpaverage, sizeof(AverageElixir), Naverage);
    244     nitems = fwrite (tmpaverage, sizeof(AverageElixir), Naverage, f);
    245     free (tmpaverage);
    246     if (nitems != Naverage) {
    247       fprintf (stderr, "failed to write averages (%d vs %d)\n", nitems, Naverage);
    248       return (FALSE);
     372  if (format == DVO_FORMAT_ELIXIR) {
     373    ImageElixir *tmpImage;
     374
     375    /* convert table rows from internal to external format */
     376    for (i = 0; i < Nrow; i++) {
     377      tmpImage = ImageInternalToElixir ((Image *) vtable[0].buffer[i], 1);
     378      fits_convert_ImageElixir (tmpImage, sizeof(ImageElixir), 1);
     379      free (vtable[0].buffer[i]);
     380      vtable[0].buffer[i] = (char *) tmpImage;
    249381    }
     382
     383    /* convert header from old format to new format */
     384    fits_scan (theader, "NAXIS2", "%d", 1, &Nimage);
     385
     386    fits_free_header (theader);
     387    fits_table_mkheader_ImageElixir (theader);
     388
     389    fits_modify (theader, "NAXIS2", "%d", 1, Nimage);
     390    theader[0].Naxis[1] = Nimage;
     391    vtable[0].size = fits_matrix_size (theader);
    250392    return (TRUE);
    251393  }
    252   if (!strcmp (format, "DVO_AVERAGE_LONEOS")) {
    253     AverageLoneos *tmpaverage;
    254     tmpaverage = AverageInternalToLoneos (average, Naverage);
    255     fits_convert_AverageLoneos (tmpaverage, sizeof(AverageLoneos), Naverage);
    256     nitems = fwrite (tmpaverage, sizeof(AverageLoneos), Naverage, f);
    257     free (tmpaverage);
    258     if (nitems != Naverage) {
    259       fprintf (stderr, "failed to write averages (%d vs %d)\n", nitems, Naverage);
    260       return (FALSE);
     394  if (format == DVO_FORMAT_LONEOS) {
     395    ImageLoneos *tmpImage;
     396
     397    /* convert table rows from internal to external format */
     398    for (i = 0; i < Nrow; i++) {
     399      tmpImage = ImageInternalToLoneos ((Image *) vtable[0].buffer[i], 1);
     400      fits_convert_ImageLoneos (tmpImage, sizeof(ImageLoneos), 1);
     401      free (vtable[0].buffer[i]);
     402      vtable[0].buffer[i] = (char *) tmpImage;
    261403    }
     404
     405    /* convert header from old format to new format */
     406    fits_scan (theader, "NAXIS2", "%d", 1, &Nimage);
     407
     408    fits_free_header (theader);
     409    fits_table_mkheader_ImageLoneos (theader);
     410
     411    fits_modify (theader, "NAXIS2", "%d", 1, Nimage);
     412    theader[0].Naxis[1] = Nimage;
     413    vtable[0].size = fits_matrix_size (theader);
    262414    return (TRUE);
    263415  }
    264   if (!strcmp (format, "DVO_AVERAGE_PANSTARRS")) {
    265     AveragePanstarrs *tmpaverage;
    266     tmpaverage = AverageInternalToPanstarrs (average, Naverage);
    267     fits_convert_AveragePanstarrs (tmpaverage, sizeof(AveragePanstarrs), Naverage);
    268     nitems = fwrite (tmpaverage, sizeof(AveragePanstarrs), Naverage, f);
    269     free (tmpaverage);
    270     if (nitems != Naverage) {
    271       fprintf (stderr, "failed to write averages (%d vs %d)\n", nitems, Naverage);
    272       return (FALSE);
     416  if (format == DVO_FORMAT_PANSTARRS) {
     417    ImagePanstarrs *tmpImage;
     418
     419    /* convert table rows from internal to external format */
     420    for (i = 0; i < Nrow; i++) {
     421      tmpImage = ImageInternalToPanstarrs ((Image *) vtable[0].buffer[i], 1);
     422      fits_convert_ImagePanstarrs (tmpImage, sizeof(ImagePanstarrs), 1);
     423      free (vtable[0].buffer[i]);
     424      vtable[0].buffer[i] = (char *) tmpImage;
    273425    }
     426
     427    /* convert header from old format to new format */
     428    fits_scan (theader, "NAXIS2", "%d", 1, &Nimage);
     429    fits_free_header (theader);
     430    fits_table_mkheader_ImagePanstarrs (theader);
     431    fits_modify (theader, "NAXIS2", "%d", 1, Nimage);
     432    theader[0].Naxis[1] = Nimage;
     433    vtable[0].size = fits_matrix_size (theader);
    274434    return (TRUE);
    275435  }
    276   fprintf (stderr, "error writing averages\n");
     436  fprintf (stderr, "table format unknown (image vtable)\n");
    277437  return (FALSE);
    278438}
    279 /** Average / Raw Table conversions **/
    280 
    281 Measure *ReadRawMeasure (FILE *f, int Nmeasure, char *format) {
    282 
    283   int nitems;
    284   Measure *measure;
    285 
    286   if (!strcmp (format, "DVO_MEASURE")) {
    287     ALLOCATE (measure, Measure, MAX (Nmeasure, 1));
    288     nitems = fread (measure, sizeof(Measure), Nmeasure, f);
    289     if (nitems != Nmeasure) {
    290       fprintf (stderr, "failed to read measures (%d vs %d)\n", nitems, Nmeasure);
    291       return (NULL);
    292     }
    293     fits_convert_Measure (measure, sizeof(Measure), Nmeasure);
    294     return (measure);
    295   }
    296   if (!strcmp (format, "DVO_MEASURE_ELIXIR")) {
    297     MeasureElixir *tmpmeasure;
    298     ALLOCATE (tmpmeasure, MeasureElixir, MAX (Nmeasure, 1));
    299     nitems = fread (tmpmeasure, sizeof(MeasureElixir), Nmeasure, f);
    300     if (nitems != Nmeasure) {
    301       fprintf (stderr, "failed to read measures (%d vs %d)\n", nitems, Nmeasure);
    302       return (NULL);
    303     }
    304     fits_convert_MeasureElixir (tmpmeasure, sizeof(MeasureElixir), Nmeasure);
    305     measure = MeasureElixirToInternal (tmpmeasure, Nmeasure);
    306     free (tmpmeasure);
    307     return (measure);
    308   }
    309   if (!strcmp (format, "DVO_MEASURE_LONEOS")) {
    310     MeasureLoneos *tmpmeasure;
    311     ALLOCATE (tmpmeasure, MeasureLoneos, MAX (Nmeasure, 1));
    312     nitems = fread (tmpmeasure, sizeof(MeasureLoneos), Nmeasure, f);
    313     if (nitems != Nmeasure) {
    314       fprintf (stderr, "failed to read measures (%d vs %d)\n", nitems, Nmeasure);
    315       return (NULL);
    316     }
    317     fits_convert_MeasureLoneos (tmpmeasure, sizeof(MeasureLoneos), Nmeasure);
    318     measure = MeasureLoneosToInternal (tmpmeasure, Nmeasure);
    319     free (tmpmeasure);
    320     return (measure);
    321   }
    322   if (!strcmp (format, "DVO_MEASURE_PANSTARRS")) {
    323     MeasurePanstarrs *tmpmeasure;
    324     ALLOCATE (tmpmeasure, MeasurePanstarrs, MAX (Nmeasure, 1));
    325     nitems = fread (tmpmeasure, sizeof(MeasurePanstarrs), Nmeasure, f);
    326     if (nitems != Nmeasure) {
    327       fprintf (stderr, "failed to read measures (%d vs %d)\n", nitems, Nmeasure);
    328       return (NULL);
    329     }
    330     fits_convert_MeasurePanstarrs (tmpmeasure, sizeof(MeasurePanstarrs), Nmeasure);
    331     measure = MeasurePanstarrsToInternal (tmpmeasure, Nmeasure);
    332     free (tmpmeasure);
    333     return (measure);
    334   }
    335   fprintf (stderr, "error reading measures\n");
    336   return (NULL);
    337 }
    338 
    339 /* accepts and converts internal measure formats and outputs
    340    raw data in the specified format */
    341 int WriteRawMeasure (FILE *f, Measure *measure, int Nmeasure, char *format) {
    342 
    343   int nitems;
    344 
    345   if (!strcmp (format, "DVO_MEASURE")) {
    346     fits_convert_Measure (measure, sizeof(Measure), Nmeasure);
    347     nitems = fwrite (measure, sizeof(Measure), Nmeasure, f);
    348     if (nitems != Nmeasure) {
    349       fprintf (stderr, "failed to write measures (%d vs %d)\n", nitems, Nmeasure);
    350       return (FALSE);
    351     }
    352     return (TRUE);
    353   }
    354   if (!strcmp (format, "DVO_MEASURE_ELIXIR")) {
    355     MeasureElixir *tmpmeasure;
    356     tmpmeasure = MeasureInternalToElixir (measure, Nmeasure);
    357     fits_convert_MeasureElixir (tmpmeasure, sizeof(MeasureElixir), Nmeasure);
    358     nitems = fwrite (tmpmeasure, sizeof(MeasureElixir), Nmeasure, f);
    359     free (tmpmeasure);
    360     if (nitems != Nmeasure) {
    361       fprintf (stderr, "failed to write measures (%d vs %d)\n", nitems, Nmeasure);
    362       return (FALSE);
    363     }
    364     return (TRUE);
    365   }
    366   if (!strcmp (format, "DVO_MEASURE_LONEOS")) {
    367     MeasureLoneos *tmpmeasure;
    368     tmpmeasure = MeasureInternalToLoneos (measure, Nmeasure);
    369     fits_convert_MeasureLoneos (tmpmeasure, sizeof(MeasureLoneos), Nmeasure);
    370     nitems = fwrite (tmpmeasure, sizeof(MeasureLoneos), Nmeasure, f);
    371     free (tmpmeasure);
    372     if (nitems != Nmeasure) {
    373       fprintf (stderr, "failed to write measures (%d vs %d)\n", nitems, Nmeasure);
    374       return (FALSE);
    375     }
    376     return (TRUE);
    377   }
    378   if (!strcmp (format, "DVO_MEASURE_PANSTARRS")) {
    379     MeasurePanstarrs *tmpmeasure;
    380     tmpmeasure = MeasureInternalToPanstarrs (measure, Nmeasure);
    381     fits_convert_MeasurePanstarrs (tmpmeasure, sizeof(MeasurePanstarrs), Nmeasure);
    382     nitems = fwrite (tmpmeasure, sizeof(MeasurePanstarrs), Nmeasure, f);
    383     free (tmpmeasure);
    384     if (nitems != Nmeasure) {
    385       fprintf (stderr, "failed to write measures (%d vs %d)\n", nitems, Nmeasure);
    386       return (FALSE);
    387     }
    388     return (TRUE);
    389   }
    390   fprintf (stderr, "error writing measures\n");
    391   return (FALSE);
    392 }
    393 
    394 /*** Image Conversions ***/
    395 
    396 Image *FtableToImage (FTable *ftable, int *format) {
    397 
    398   int Nimage;
    399   Image *image;
    400   char extname[80];
    401 
    402   /* extname may be set from outside if the source is RAW not MEF */
    403   if (*format == DVO_FORMAT_ELIXIR) {
    404     Imagelixir *tmpimage;
    405     tmpimage = fits_table_get_AverageElixir (ftable, &Nimage, NULL);
    406     image = ImageElixirToInternal (tmpimage, Nimage);
    407     free (tmpimage);
    408     return (image);
    409   }
    410 
    411   /* convert to the internal format */
    412   if (!fits_scan (ftable[0].header, "EXTNAME", "%s", 1, extname)) {
    413     fprintf (stderr, "EXTNAME missing for average table\n");
    414     return (NULL);
    415   }
    416   if (!strcmp (extname, "DVO_IMAGE")) {
    417     image = fits_table_get_Image (ftable, Nimage, NULL);
    418     *format = DVO_FORMAT_INTERNAL;
    419     return (image);
    420   }
    421   if (!strcmp (extname, "DVO_IMAGE_ELIXIR")) {
    422     ImageElixir *tmpimage;
    423     tmpimage = fits_table_get_ImageElixir (ftable, Nimage, NULL);
    424     image = ImageElixirToInternal (tmpimage, Nimage);
    425     free (tmpimage);
    426     *format = DVO_FORMAT_ELIXIR;
    427     return (image);
    428   }
    429   if (!strcmp (extname, "DVO_IMAGE_LONEOS")) {
    430     ImageLoneos *tmpimage;
    431     tmpimage = fits_table_get_ImageLoneos (ftable, Nimage, NULL);
    432     image = ImageLoneosToInternal (tmpimage, Nimage);
    433     free (tmpimage);
    434     *format = DVO_FORMAT_LONEOS;
    435     return (image);
    436   }
    437   if (!strcmp (extname, "DVO_IMAGE_PANSTARRS")) {
    438     ImagePanstarrs *tmpimage;
    439     tmpimage = fits_table_get_ImagePanstarrs (ftable, Nimage, NULL);
    440     image = ImagePanstarrsToInternal (tmpimage, Nimage);
    441     free (tmpimage);
    442     *format = DVO_FORMAT_PANSTARRS;
    443     return (image);
    444   }
    445 
    446   fprintf (stderr, "table format unknown: %s\n", extname);
    447 
    448   *Nimage = 0;
    449   return (NULL);
    450 }
    451 
    452 int ImageToFtable (FTable *ftable, Image *image, int Nimage, int format) {
    453 
    454   /* convert from the internal format */
    455   if (!strcmp (extname, "DVO_IMAGE")) {
    456     fits_table_set_Image (ftable, image, Nimage);
    457     return (TRUE);
    458   }
    459   if (!strcmp (extname, "DVO_IMAGE_ELIXIR")) {
    460     ImageElixir *tmpimage;
    461     tmpimage = ImageInternalToElixir (image, Nimage);
    462     fits_table_set_ImageElixir (ftable, tmpimage, Nimage);
    463     free (tmpimage);
    464     return (TRUE);
    465   }
    466   if (!strcmp (extname, "DVO_IMAGE_LONEOS")) {
    467     ImageLoneos *tmpimage;
    468     tmpimage = ImageInternalToLoneos (image, Nimage);
    469     fits_table_set_ImageLoneos (ftable, tmpimage, Nimage);
    470     free (tmpimage);
    471     return (TRUE);
    472   }
    473   if (!strcmp (extname, "DVO_IMAGE_PANSTARRS")) {
    474     ImagePanstarrs *tmpimage;
    475     tmpimage = ImageInternalToPanstarrs (image, Nimage);
    476     fits_table_set_ImagePanstarrs (ftable, tmpimage, Nimage);
    477     free (tmpimage);
    478     return (TRUE);
    479   }
    480   fprintf (stderr, "table format unknown: %s\n", extname);
    481   return (FALSE);
    482 }
    483 
     439
  • trunk/Ohana/src/libohana/src/dvo_convert_elixir.c

    r4865 r5014  
    22# include <dvo.h>
    33
    4 /* convert loneos-style measures to internal measures */
     4/* convert elixir-format measures to internal measures */
    55Measure *MeasureElixirToInternal (MeasureElixir *in, int Nvalues) {
    66
     
    3131}
    3232
    33 /* convert internal measures to loneos-style measures */
     33/* convert internal measures to elixir-format measures */
    3434MeasureElixir *MeasureInternalToElixir (Measure *in, int Nvalues) {
    3535
     
    6060}
    6161
     62/* convert elixir-format averages to internal averages */
    6263Average *AverageElixirToInternal (AverageElixir *in, int Nvalues) {
    6364
     
    8485}
    8586
     87/* convert internal averages to elixir-format averages */
    8688AverageElixir *AverageInternalToElixir (Average *in, int Nvalues) {
    8789
     
    107109  return (out);
    108110}
     111
     112/* convert elixir-format secfilts to internal secfilts */
     113SecFilt *SecFiltElixirToInternal (SecFiltElixir *in, int Nvalues) {
     114
     115  int i;
     116  SecFilt *out;
     117
     118  ALLOCATE (out, SecFilt, Nvalues);
     119
     120  for (i = 0; i < Nvalues; i++) {
     121    out[i].M_PS    = in[i].M  * 0.001;     
     122    out[i].dM_PS   = in[i].dM * 0.001;     
     123    out[i].Xm      = in[i].Xm;     
     124  }
     125  return (out);
     126}
     127
     128/* convert internal secfilts to elixir-format secfilts */
     129SecFiltElixir *SecFiltInternalToElixir (SecFilt *in, int Nvalues) {
     130
     131  int i;
     132  SecFiltElixir *out;
     133
     134  ALLOCATE (out, SecFiltElixir, Nvalues);
     135
     136  for (i = 0; i < Nvalues; i++) {
     137    out[i].M       = in[i].M_PS  * 1000.0;     
     138    out[i].dM      = in[i].dM_PS * 1000.0;
     139    out[i].Xm      = in[i].Xm;     
     140  }
     141  return (out);
     142}
     143
     144/* convert elixir-format images to internal images */
     145Image *ImageElixirToInternal (ImageElixir *in, int Nvalues) {
     146
     147  int i;
     148  Image *out;
     149
     150  ALLOCATE (out, Image, Nvalues);
     151
     152  for (i = 0; i < Nvalues; i++) {
     153    memcpy (&out[i].coords, &in[i].coords, sizeof(Coords));
     154    memcpy (out[i].dummy, in[i].dummy, 20);
     155    strcpy (out[i].name, in[i].name);
     156
     157    out[i].tzero            = in[i].tzero;
     158    out[i].nstar            = in[i].nstar;
     159    out[i].secz_PS          = in[i].secz * 0.001;
     160    out[i].NX               = in[i].NX;
     161    out[i].NY               = in[i].NY;
     162    out[i].apmifit_PS       = in[i].apmifit * 0.001;
     163    out[i].dapmifit_PS      = in[i].dapmifit * 0.001;
     164    out[i].Mcal_PS          = in[i].Mcal * 0.001;
     165    out[i].dMcal_PS         = in[i].dMcal * 0.001;
     166    out[i].Xm               = in[i].Xm;
     167    out[i].source           = in[i].source;
     168    out[i].exptime          = in[i].exptime;
     169    out[i].detection_limit  = in[i].detection_limit;
     170    out[i].saturation_limit = in[i].saturation_limit;
     171    out[i].cerror           = in[i].cerror;
     172    out[i].fwhm_x           = in[i].fwhm_x;
     173    out[i].fwhm_y           = in[i].fwhm_y;
     174    out[i].trate            = in[i].trate;
     175    out[i].code             = in[i].code;
     176    out[i].ccdnum           = in[i].ccdnum;
     177    out[i].order            = in[i].order;
     178    out[i].Mx               = in[i].Mx;
     179    out[i].My               = in[i].My;
     180    out[i].Mxx              = in[i].Mxx;
     181    out[i].Mxy              = in[i].Mxy;
     182    out[i].Myy              = in[i].Myy;
     183    out[i].Mxxx             = in[i].Mxxx;
     184    out[i].Mxxy             = in[i].Mxxy;
     185    out[i].Mxyy             = in[i].Mxyy;
     186    out[i].Myyy             = in[i].Myyy;
     187    out[i].Mxxxx            = in[i].Mxxxx;
     188    out[i].Mxxxy            = in[i].Mxxxy;
     189    out[i].Mxxyy            = in[i].Mxxyy;
     190    out[i].Mxyyy            = in[i].Mxyyy;
     191    out[i].Myyyy            = in[i].Myyyy;
     192  }
     193  return (out);
     194}
     195
     196/* convert internal images to elixir-format images */
     197ImageElixir *ImageInternalToElixir (Image *in, int Nvalues) {
     198
     199  int i;
     200  ImageElixir *out;
     201
     202  ALLOCATE (out, ImageElixir, Nvalues);
     203
     204  for (i = 0; i < Nvalues; i++) {
     205    memcpy (&out[i].coords, &in[i].coords, sizeof(Coords));
     206    memcpy (out[i].dummy, in[i].dummy, 20);
     207    strcpy (out[i].name, in[i].name);
     208
     209    out[i].tzero            = in[i].tzero;
     210    out[i].nstar            = in[i].nstar;
     211    out[i].secz             = in[i].secz_PS * 1000.0;
     212    out[i].NX               = in[i].NX;
     213    out[i].NY               = in[i].NY;
     214    out[i].apmifit          = in[i].apmifit_PS * 1000.0;
     215    out[i].dapmifit         = in[i].dapmifit_PS * 1000.0;
     216    out[i].Mcal             = in[i].Mcal_PS * 1000.0;
     217    out[i].dMcal            = in[i].dMcal_PS * 1000.0;
     218    out[i].Xm               = in[i].Xm;
     219    out[i].source           = in[i].source;
     220    out[i].exptime          = in[i].exptime;
     221    out[i].detection_limit  = in[i].detection_limit;
     222    out[i].saturation_limit = in[i].saturation_limit;
     223    out[i].cerror           = in[i].cerror;
     224    out[i].fwhm_x           = in[i].fwhm_x;
     225    out[i].fwhm_y           = in[i].fwhm_y;
     226    out[i].trate            = in[i].trate;
     227    out[i].code             = in[i].code;
     228    out[i].ccdnum           = in[i].ccdnum;
     229    out[i].order            = in[i].order;
     230    out[i].Mx               = in[i].Mx;
     231    out[i].My               = in[i].My;
     232    out[i].Mxx              = in[i].Mxx;
     233    out[i].Mxy              = in[i].Mxy;
     234    out[i].Myy              = in[i].Myy;
     235    out[i].Mxxx             = in[i].Mxxx;
     236    out[i].Mxxy             = in[i].Mxxy;
     237    out[i].Mxyy             = in[i].Mxyy;
     238    out[i].Myyy             = in[i].Myyy;
     239    out[i].Mxxxx            = in[i].Mxxxx;
     240    out[i].Mxxxy            = in[i].Mxxxy;
     241    out[i].Mxxyy            = in[i].Mxxyy;
     242    out[i].Mxyyy            = in[i].Mxyyy;
     243    out[i].Myyyy            = in[i].Myyyy;
     244  }
     245  return (out);
     246}
  • trunk/Ohana/src/libohana/src/dvo_convert_loneos.c

    r4865 r5014  
    22# include <dvo.h>
    33
    4 /* convert loneos-style measures to internal measures */
     4/* convert loneos-format measures to internal measures */
    55Measure *MeasureLoneosToInternal (MeasureLoneos *in, int Nvalues) {
    66
     
    3535}
    3636
    37 /* convert internal measures to loneos-style measures */
     37/* convert internal measures to loneos-format measures */
    3838MeasureLoneos *MeasureInternalToLoneos (Measure *in, int Nvalues) {
    3939
     
    5959}
    6060
     61/* convert loneos-format averages to internal averages */
    6162Average *AverageLoneosToInternal (AverageLoneos *in, int Nvalues) {
    6263
     
    8586}
    8687
     88/* convert internal averages to loneos-format averages */
    8789AverageLoneos *AverageInternalToLoneos (Average *in, int Nvalues) {
    8890
     
    107109}
    108110
    109 /*
    110 I need to add these to the dvo_convert structures:
    111 
    112 SecFilt *SecFiltLoneosToInternal (SecFiltLoneos *in, int Nvalues);
    113 SecFiltLoneos *SecFiltInternalToLoneos (SecFilt *in, int Nvalues);
    114 
     111/* convert loneos-format secfilts to internal secfilts */
    115112SecFilt *SecFiltLoneosToInternal (SecFiltLoneos *in, int Nvalues) {
    116113
     
    121118
    122119  for (i = 0; i < Nvalues; i++) {
    123     out[i].M    = in[i].M;     
     120    out[i].M_PS  = in[i].M*0.001;     
     121    out[i].dM_PS = 0xffff;
     122    out[i].Xm    = in[i].Xm;     
     123  }
     124  return (out);
     125}
     126
     127/* convert internal secfilts to loneos-format secfilts */
     128SecFiltLoneos *SecFiltInternalToLoneos (SecFilt *in, int Nvalues) {
     129
     130  int i;
     131  SecFiltLoneos *out;
     132
     133  ALLOCATE (out, SecFiltLoneos, Nvalues);
     134
     135  for (i = 0; i < Nvalues; i++) {
     136    out[i].M    = in[i].M_PS*1000.0;     
    124137    out[i].Xm   = in[i].Xm;     
    125     out[i].dM   = 0xffff;
    126   }
    127   return (out);
    128 }
    129 
    130 SecFiltLoneos *SecFiltInternalToLoneos (SecFilt *in, int Nvalues) {
    131 
    132   int i;
    133   SecFiltLoneos *out;
    134 
    135   ALLOCATE (out, SecFiltLoneos, Nvalues);
    136 
    137   for (i = 0; i < Nvalues; i++) {
    138     out[i].M    = in[i].M;     
    139     out[i].Xm   = in[i].Xm;     
    140   }
    141   return (out);
    142 }
    143 */
     138  }
     139  return (out);
     140}
     141
     142/* convert loneos-format images to internal images */
     143Image *ImageLoneosToInternal (ImageLoneos *in, int Nvalues) {
     144
     145  int i;
     146  Image *out;
     147
     148  ALLOCATE (out, Image, Nvalues);
     149
     150  for (i = 0; i < Nvalues; i++) {
     151    memcpy (&out[i].coords, &in[i].coords, sizeof(Coords));
     152    memcpy (out[i].dummy, in[i].dummy, 20);
     153    strcpy (out[i].name, in[i].name);
     154
     155    out[i].tzero            = in[i].tzero;
     156    out[i].nstar            = in[i].nstar;
     157    out[i].secz_PS          = in[i].secz * 0.001;
     158    out[i].NX               = in[i].NX;
     159    out[i].NY               = in[i].NY;
     160    out[i].apmifit_PS       = in[i].apmifit * 0.001;
     161    out[i].dapmifit_PS      = in[i].dapmifit * 0.001;
     162    out[i].Mcal_PS          = in[i].Mcal * 0.001;
     163    out[i].dMcal_PS         = in[i].dMcal * 0.001;
     164    out[i].Xm               = in[i].Xm;
     165    out[i].source           = in[i].source;
     166    out[i].exptime          = in[i].exptime;
     167    out[i].detection_limit  = in[i].detection_limit;
     168    out[i].saturation_limit = in[i].saturation_limit;
     169    out[i].cerror           = in[i].cerror;
     170    out[i].fwhm_x           = in[i].fwhm_x;
     171    out[i].fwhm_y           = in[i].fwhm_y;
     172    out[i].trate            = in[i].trate;
     173    out[i].code             = in[i].code;
     174    out[i].ccdnum           = in[i].ccdnum;
     175    out[i].order            = in[i].order;
     176    out[i].Mx               = in[i].Mx;
     177    out[i].My               = in[i].My;
     178    out[i].Mxx              = in[i].Mxx;
     179    out[i].Mxy              = in[i].Mxy;
     180    out[i].Myy              = in[i].Myy;
     181    out[i].Mxxx             = in[i].Mxxx;
     182    out[i].Mxxy             = in[i].Mxxy;
     183    out[i].Mxyy             = in[i].Mxyy;
     184    out[i].Myyy             = in[i].Myyy;
     185    out[i].Mxxxx            = in[i].Mxxxx;
     186    out[i].Mxxxy            = in[i].Mxxxy;
     187    out[i].Mxxyy            = in[i].Mxxyy;
     188    out[i].Mxyyy            = in[i].Mxyyy;
     189    out[i].Myyyy            = in[i].Myyyy;
     190  }
     191  return (out);
     192}
     193
     194/* convert internal images to loneos-format images */
     195ImageLoneos *ImageInternalToLoneos (Image *in, int Nvalues) {
     196
     197  int i;
     198  ImageLoneos *out;
     199
     200  ALLOCATE (out, ImageLoneos, Nvalues);
     201
     202  for (i = 0; i < Nvalues; i++) {
     203    memcpy (&out[i].coords, &in[i].coords, sizeof(Coords));
     204    memcpy (out[i].dummy, in[i].dummy, 20);
     205    strcpy (out[i].name, in[i].name);
     206
     207    out[i].tzero            = in[i].tzero;
     208    out[i].nstar            = in[i].nstar;
     209    out[i].secz             = in[i].secz_PS * 1000.0;
     210    out[i].NX               = in[i].NX;
     211    out[i].NY               = in[i].NY;
     212    out[i].apmifit          = in[i].apmifit_PS * 1000.0;
     213    out[i].dapmifit         = in[i].dapmifit_PS * 1000.0;
     214    out[i].Mcal             = in[i].Mcal_PS * 1000.0;
     215    out[i].dMcal            = in[i].dMcal_PS * 1000.0;
     216    out[i].Xm               = in[i].Xm;
     217    out[i].source           = in[i].source;
     218    out[i].exptime          = in[i].exptime;
     219    out[i].detection_limit  = in[i].detection_limit;
     220    out[i].saturation_limit = in[i].saturation_limit;
     221    out[i].cerror           = in[i].cerror;
     222    out[i].fwhm_x           = in[i].fwhm_x;
     223    out[i].fwhm_y           = in[i].fwhm_y;
     224    out[i].trate            = in[i].trate;
     225    out[i].code             = in[i].code;
     226    out[i].ccdnum           = in[i].ccdnum;
     227    out[i].order            = in[i].order;
     228    out[i].Mx               = in[i].Mx;
     229    out[i].My               = in[i].My;
     230    out[i].Mxx              = in[i].Mxx;
     231    out[i].Mxy              = in[i].Mxy;
     232    out[i].Myy              = in[i].Myy;
     233    out[i].Mxxx             = in[i].Mxxx;
     234    out[i].Mxxy             = in[i].Mxxy;
     235    out[i].Mxyy             = in[i].Mxyy;
     236    out[i].Myyy             = in[i].Myyy;
     237    out[i].Mxxxx            = in[i].Mxxxx;
     238    out[i].Mxxxy            = in[i].Mxxxy;
     239    out[i].Mxxyy            = in[i].Mxxyy;
     240    out[i].Mxyyy            = in[i].Mxyyy;
     241    out[i].Myyyy            = in[i].Myyyy;
     242  }
     243  return (out);
     244}
  • trunk/Ohana/src/libohana/src/dvo_convert_panstarrs.c

    r4865 r5014  
    22# include <dvo.h>
    33
    4 /* convert loneos-style measures to internal measures */
     4/*** note that these structures are identical ***/
     5
     6/* convert panstarrs-format measures to internal measures */
    57Measure *MeasurePanstarrsToInternal (MeasurePanstarrs *in, int Nvalues) {
    68
    79  int i;
    810  Measure *out;
    9 
    10   /*** note that these structures are identical ***/
    1111
    1212  ALLOCATE (out, Measure, Nvalues);
     
    3333}
    3434
    35 /* convert internal measures to loneos-style measures */
     35/* convert internal measures to panstarrs-format measures */
    3636MeasurePanstarrs *MeasureInternalToPanstarrs (Measure *in, int Nvalues) {
    3737
     
    6262}
    6363
     64/* convert panstarrs-format averages to internal averages */
    6465Average *AveragePanstarrsToInternal (AveragePanstarrs *in, int Nvalues) {
    6566
     
    8687}
    8788
     89/* convert internal averages to panstarrs-format averages */
    8890AveragePanstarrs *AverageInternalToPanstarrs (Average *in, int Nvalues) {
    8991
     
    109111  return (out);
    110112}
     113
     114/* convert panstarrs-format secfilts to internal secfilts */
     115SecFilt *SecFiltPanstarrsToInternal (SecFiltPanstarrs *in, int Nvalues) {
     116
     117  int i;
     118  SecFilt *out;
     119
     120  ALLOCATE (out, SecFilt, Nvalues);
     121
     122  for (i = 0; i < Nvalues; i++) {
     123    out[i].M_PS    = in[i].M;     
     124    out[i].dM_PS   = in[i].dM;     
     125    out[i].Xm      = in[i].Xm;     
     126  }
     127  return (out);
     128}
     129
     130/* convert internal secfilts to panstarrs-format secfilts */
     131SecFiltPanstarrs *SecFiltInternalToPanstarrs (SecFilt *in, int Nvalues) {
     132
     133  int i;
     134  SecFiltPanstarrs *out;
     135
     136  ALLOCATE (out, SecFiltPanstarrs, Nvalues);
     137
     138  for (i = 0; i < Nvalues; i++) {
     139    out[i].M       = in[i].M_PS;     
     140    out[i].dM      = in[i].dM_PS;
     141    out[i].Xm      = in[i].Xm;     
     142  }
     143  return (out);
     144}
     145
     146/* convert panstarrs-format images to internal images */
     147Image *ImagePanstarrsToInternal (ImagePanstarrs *in, int Nvalues) {
     148
     149  int i;
     150  Image *out;
     151
     152  ALLOCATE (out, Image, Nvalues);
     153
     154  for (i = 0; i < Nvalues; i++) {
     155    memcpy (&out[i].coords, &in[i].coords, sizeof(Coords));
     156    memcpy (out[i].dummy, in[i].dummy, 20);
     157    strcpy (out[i].name, in[i].name);
     158
     159    out[i].tzero            = in[i].tzero;
     160    out[i].nstar            = in[i].nstar;
     161    out[i].secz_PS                  = in[i].secz;
     162    out[i].NX               = in[i].NX;
     163    out[i].NY               = in[i].NY;
     164    out[i].apmifit_PS       = in[i].apmifit;
     165    out[i].dapmifit_PS      = in[i].dapmifit;
     166    out[i].Mcal_PS                  = in[i].Mcal;
     167    out[i].dMcal_PS         = in[i].dMcal;
     168    out[i].Xm               = in[i].Xm;
     169    out[i].source           = in[i].source;
     170    out[i].exptime          = in[i].exptime;
     171    out[i].detection_limit  = in[i].detection_limit;
     172    out[i].saturation_limit = in[i].saturation_limit;
     173    out[i].cerror           = in[i].cerror;
     174    out[i].fwhm_x           = in[i].fwhm_x;
     175    out[i].fwhm_y           = in[i].fwhm_y;
     176    out[i].trate            = in[i].trate;
     177    out[i].code             = in[i].code;
     178    out[i].ccdnum           = in[i].ccdnum;
     179    out[i].order            = in[i].order;
     180    out[i].Mx               = in[i].Mx;
     181    out[i].My               = in[i].My;
     182    out[i].Mxx              = in[i].Mxx;
     183    out[i].Mxy              = in[i].Mxy;
     184    out[i].Myy              = in[i].Myy;
     185    out[i].Mxxx             = in[i].Mxxx;
     186    out[i].Mxxy             = in[i].Mxxy;
     187    out[i].Mxyy             = in[i].Mxyy;
     188    out[i].Myyy             = in[i].Myyy;
     189    out[i].Mxxxx            = in[i].Mxxxx;
     190    out[i].Mxxxy            = in[i].Mxxxy;
     191    out[i].Mxxyy            = in[i].Mxxyy;
     192    out[i].Mxyyy            = in[i].Mxyyy;
     193    out[i].Myyyy            = in[i].Myyyy;
     194  }
     195  return (out);
     196}
     197
     198/* convert internal images to panstarrs-format images */
     199ImagePanstarrs *ImageInternalToPanstarrs (Image *in, int Nvalues) {
     200
     201  int i;
     202  ImagePanstarrs *out;
     203
     204  ALLOCATE (out, ImagePanstarrs, Nvalues);
     205
     206  for (i = 0; i < Nvalues; i++) {
     207    memcpy (&out[i].coords, &in[i].coords, sizeof(Coords));
     208    memcpy (out[i].dummy, in[i].dummy, 20);
     209    strcpy (out[i].name, in[i].name);
     210
     211    out[i].tzero            = in[i].tzero;
     212    out[i].nstar            = in[i].nstar;
     213    out[i].secz             = in[i].secz_PS;
     214    out[i].NX               = in[i].NX;
     215    out[i].NY               = in[i].NY;
     216    out[i].apmifit          = in[i].apmifit_PS;
     217    out[i].dapmifit         = in[i].dapmifit_PS;
     218    out[i].Mcal             = in[i].Mcal_PS;
     219    out[i].dMcal            = in[i].dMcal_PS;
     220    out[i].Xm               = in[i].Xm;
     221    out[i].source           = in[i].source;
     222    out[i].exptime          = in[i].exptime;
     223    out[i].detection_limit  = in[i].detection_limit;
     224    out[i].saturation_limit = in[i].saturation_limit;
     225    out[i].cerror           = in[i].cerror;
     226    out[i].fwhm_x           = in[i].fwhm_x;
     227    out[i].fwhm_y           = in[i].fwhm_y;
     228    out[i].trate            = in[i].trate;
     229    out[i].code             = in[i].code;
     230    out[i].ccdnum           = in[i].ccdnum;
     231    out[i].order            = in[i].order;
     232    out[i].Mx               = in[i].Mx;
     233    out[i].My               = in[i].My;
     234    out[i].Mxx              = in[i].Mxx;
     235    out[i].Mxy              = in[i].Mxy;
     236    out[i].Myy              = in[i].Myy;
     237    out[i].Mxxx             = in[i].Mxxx;
     238    out[i].Mxxy             = in[i].Mxxy;
     239    out[i].Mxyy             = in[i].Mxyy;
     240    out[i].Myyy             = in[i].Myyy;
     241    out[i].Mxxxx            = in[i].Mxxxx;
     242    out[i].Mxxxy            = in[i].Mxxxy;
     243    out[i].Mxxyy            = in[i].Mxxyy;
     244    out[i].Mxyyy            = in[i].Mxyyy;
     245    out[i].Myyyy            = in[i].Myyyy;
     246  }
     247  return (out);
     248}
  • trunk/Ohana/src/libohana/src/dvo_image.c

    r4993 r5014  
    22# include <dvo.h>
    33
    4 /* determine db mode (raw/fits) and read the complete table */
     4/* determine db mode (RAW/MEF) and read the complete table */
    55int dvo_image_load (FITS_DB *db, int VERBOSE, int FORCE_READ) {
    66
     
    2727  fseek (db[0].f, 0, SEEK_SET);
    2828
    29   /* image table can only be RAW or MEF */
     29  /* default values */
    3030  db[0].mode = DVO_MODE_MEF;
    31   if (Naxis == 2) db[0].mode = DVO_MODE_RAW;
     31  db[0].format = DVO_FORMAT_UNDEF;
     32  if (Naxis == 2) db[0].mode = DVO_MODE_RAW; /* image table can only be RAW or MEF */
     33
    3234  switch (db[0].mode) {
    3335    case DVO_MODE_MEF:
    3436      if (VERBOSE) fprintf (stderr, "reading images (mode DVO_MODE_MEF)\n");
    3537      status = fits_db_load (db);
    36       db[0].format = UNDEF;
    3738      break;
    3839    case DVO_MODE_RAW:
    3940      if (VERBOSE) fprintf (stderr, "reading images (mode DVO_MODE_RAW)\n");
    4041      status = dvo_image_load_raw (db, VERBOSE, FORCE_READ);
    41       db[0].format = ELIXIR;
    4242      break;
    4343    default:
     
    4545      exit (2);
    4646  }
    47   /* convert from external to internal format */
    48   /**** this is confused: where does the converted image table go?
    49         back in db[0].ftable.buffer?
    50         keep the db[0].ftable.header?
    51         sync with the correct format??
    52         dvo_image_load_raw creates a new theader for Image
    53           - should be ImageElixir
    54         FtableToImage should create a new theader for Image
    55         ImageToFtable should create a new theader for ImageFOO
    56   ****/
    57   image = FtableToImage (db[0].ftable, &db[0].format);
    58   db[0].swapped = FALSE;
     47  FtableToImage (&db[0].ftable, &db[0].theader, &db[0].format);
     48  db[0].swapped = TRUE;  /* table has internal byte-order */
    5949  return (TRUE);
    6050}
     
    6353int dvo_image_save (FITS_DB *db, int VERBOSE) {
    6454
    65   int Nrow, mode, status;
     55  int status;
    6656
    67   mode = FITS;
    68   if (db[0].header.Naxes == 2) mode = RAW;
    69  
    70   /* convert from external to internal format */
    71   FtableToImage (db[0].ftable, db[0].format);
     57  /* convert from internal to requested external format */
     58  ImageToFtable (&db[0].ftable, &db[0].theader, db[0].format);
    7259  db[0].swapped = FALSE;
    7360
    74   /* byteswap table data */
    75   Nrow = db[0].theader.Naxis[1];
    76   if (db[0].swapped) {
    77     fits_convert_Image ((Image *) db[0].ftable.buffer, sizeof(Image), Nrow);
    78     db[0].swapped = FALSE;
    79   } 
    80  
    8161  /* write data in appropriate mode */
    82   if (mode == FITS) {
    83     status = fits_db_save (db);
    84   } else {
    85     status = dvo_image_save_raw (db, VERBOSE);
     62  switch (db[0].mode) {
     63    case DVO_MODE_MEF:
     64    case DVO_MODE_SPLIT:
     65      status = fits_db_save (db);
     66      break;
     67    case DVO_MODE_RAW:
     68      status = dvo_image_save_raw (db, VERBOSE);
     69      break;
     70    default:
     71      fprintf (stderr, "error writing image mode\n");
     72      exit (2);
    8673  }
    8774  return (TRUE);
     
    11198int dvo_image_update (FITS_DB *db, int VERBOSE) {
    11299
    113   int i, mode, status;
     100  int status;
    114101
    115   mode = FITS;
    116   if (db[0].header.Naxes == 2) mode = RAW;
    117  
    118   /* byteswap table data */
    119   for (i = 0; i < db[0].vtable.Nrow; i++) {
    120     fits_convert_Image ((Image *) db[0].vtable.buffer[i], sizeof(Image), 1);
    121   }
     102  /* convert from internal to requested external format */
     103  /* theader is modified to match output format */
     104  ImageToVtable (&db[0].vtable, &db[0].theader, db[0].format);
     105  db[0].swapped = FALSE;
    122106
    123107  /* write data in appropriate mode */
    124   if (mode == FITS) {
    125     status = fits_db_update (db);
    126   } else {
    127     status = dvo_image_update_raw (db, VERBOSE);
     108  switch (db[0].mode) {
     109    case DVO_MODE_MEF:
     110    case DVO_MODE_SPLIT:
     111      status = fits_db_update (db);
     112      break;
     113    case DVO_MODE_RAW:
     114      status = dvo_image_update_raw (db, VERBOSE);
     115      break;
     116    default:
     117      fprintf (stderr, "error writing image mode\n");
     118      exit (2);
    128119  }
    129120  return (TRUE);
    130121}
    131 
    132 /* the old Image.dat files used a fake FITS header defining a finite data block
    133  * this function reads in the data portion, assuming header already loaded
    134  */
    135 
    136 int dvo_image_load_raw (FITS_DB *db, int VERBOSE, int FORCE_READ) {
    137 
    138   int Nimage, size, nimage;
    139   struct stat filestatus;
    140   Image *image;
    141 
    142   /* init & load in FITS table data - return FALSE on error */
    143   if (!fits_fread_header (db[0].f, &db[0].header)) {
    144     fprintf (stderr, "can't read primary header\n");
    145     return (FALSE);
    146   }
    147 
    148   /* check that file size makes sense */
    149   Nimage = 0;
    150   fits_scan (&db[0].header, "NIMAGES", "%d", 1, &Nimage);
    151   if (stat (db[0].filename, &filestatus) == -1) {
    152     if (VERBOSE) fprintf (stderr, "ERROR: failed to get status of image catalog\n");
    153     exit (1);
    154   }
    155   size = Nimage*sizeof(Image) + db[0].header.size;
    156   if (size != filestatus.st_size) {
    157     int Ndata;
    158 
    159     Ndata = (filestatus.st_size - db[0].header.size) / sizeof (Image);
    160     if (VERBOSE) fprintf (stderr, "ERROR: image catalog has inconsistent size\n");
    161     if (VERBOSE) fprintf (stderr, "header: %d, data: %d\n", Nimage, Ndata);
    162     if (!FORCE_READ) exit (1);
    163     Nimage = Ndata;
    164   }
    165 
    166   /* create a dummy set of table information */
    167   /* (original table has NAXIS = 2, change to 0) */
    168   /* fits_modify (&db[0].header, "NAXIS", "%d", 1, 0); */
    169   fits_create_matrix (&db[0].header, &db[0].matrix);
    170   fits_table_mkheader_Image (&db[0].theader);
    171   db[0].ftable.header = &db[0].theader;
    172 
    173   /* alloc, read images */
    174   ALLOCATE (image, Image, MAX (Nimage, 1));
    175   nimage = fread (image, sizeof(Image), Nimage, db[0].f);
    176   if (nimage != Nimage) {
    177     if (VERBOSE) fprintf (stderr, "ERROR: problem loading image catalog\n");
    178     exit (1);
    179   }
    180   db[0].ftable.buffer = (char *) image;
    181   fits_modify (&db[0].theader, "NAXIS2", "%d", 1, Nimage);
    182   db[0].theader.Naxis[1] = Nimage;
    183   db[0].ftable.size = fits_matrix_size (&db[0].theader);
    184  
    185   return (TRUE);
    186 }
    187 
    188 /* write out image db elements from vtable */
    189 int dvo_image_update_raw (FITS_DB *db, int VERBOSE) {
    190 
    191   int i, Nx, Ny, Nrow, Nbytes;
    192   int status, start, offset;
    193   int *row;
    194 
    195   if (VERBOSE) fprintf (stderr, "writing out %d images\n", db[0].vtable.Nrow);
    196 
    197   /* position to start of file */
    198   Fseek (db[0].f, 0, SEEK_SET);
    199  
    200   /* write out complete header (no check on disk size?) */
    201   status = fwrite (db[0].header.buffer, 1, db[0].header.size, db[0].f);
    202   if (status != db[0].header.size) {
    203     fprintf (stderr, "ERROR: failed writing data to image header\n");
    204     exit (1);
    205   }
    206 
    207   /** this code is identical to fits_fwrite_vtable, except without padding */
    208   Nrow = db[0].vtable.Nrow;
    209   row = db[0].vtable.row;
    210   fits_scan (db[0].vtable.header, "NAXIS1", "%d", 1, &Nx);
    211   fits_scan (db[0].vtable.header, "NAXIS2", "%d", 1, &Ny);
    212 
    213   /* file pointer is at beginning of desired table data */
    214   start = ftell (db[0].f);
    215  
    216   for (i = 0; i < Nrow; i++) {
    217     offset = start + Nx*row[i];
    218     fseek (db[0].f, offset, SEEK_SET);
    219     Nbytes = fwrite (db[0].vtable.buffer[i], sizeof (char), Nx, db[0].f);
    220     if (Nbytes != Nx) { return (FALSE); }
    221   }
    222   return (TRUE);
    223 }
    224 
    225 /* write out complete image db table from ftable */
    226 int dvo_image_save_raw (FITS_DB *db, int VERBOSE) {
    227 
    228   int status, Nx, Ny, size, Nbytes;
    229 
    230   if (VERBOSE) fprintf (stderr, "writing out %d images\n", db[0].theader.Naxis[1]);
    231 
    232   /* position to start of file */
    233   Fseek (db[0].f, 0, SEEK_SET);
    234  
    235   /* write out complete header (no check on disk size?) */
    236   status = fwrite (db[0].header.buffer, 1, db[0].header.size, db[0].f);
    237   if (status != db[0].header.size) {
    238     fprintf (stderr, "ERROR: failed writing data to image header\n");
    239     exit (1);
    240   }
    241 
    242   fits_scan (db[0].ftable.header, "NAXIS1", "%d", 1, &Nx);
    243   fits_scan (db[0].ftable.header, "NAXIS2", "%d", 1, &Ny);
    244   size = Nx * Ny;
    245   Nbytes = fwrite (db[0].ftable.buffer, sizeof(char), size, db[0].f);
    246   if (Nbytes != size) return (FALSE);
    247   return (TRUE);
    248 }
  • trunk/Ohana/src/libohana/src/fits_db.c

    r4864 r5014  
    8585    return (FALSE);
    8686  }
    87   db[0].swapped = FALSE;  /* is table in internal byte-order? */
     87  db[0].swapped = FALSE;  /* table does not have internal byte-order */
    8888  return (TRUE);
    8989}
  • trunk/Ohana/src/libohana/src/phot_catalog.c

    r4832 r5014  
    3636int load_catalog (Catalog *catalog, char mode, int VERBOSE) {
    3737 
    38   if (!strcmp (catalog[0].catmode, "RAW")) {
    39     load_catalog_raw (catalog, mode, VERBOSE);
    40     return (TRUE);
     38  int Naxis, Nread;
     39  char buffer[241];
     40
     41  /** we will have to check catmode for MYSQL before reading from the file **/
     42
     43  /* check for mode RAW (NAXIS == 2 in FITS header 3) */
     44  bzero (buffer, 241);
     45  fseek (catalog[0].f, 0, SEEK_SET);
     46  Nread = fread (buffer, 1, 240, catalog[0].f);
     47  if (Nread != 240) {
     48    if (VERBOSE) fprintf (stderr, "can't determine image db mode\n");
     49    return (FALSE);
    4150  }
    42   if (!strcmp (catalog[0].catmode, "MEF")) {
    43     load_catalog_mef (catalog, mode, VERBOSE);
    44     return (TRUE);
     51  Nread = sscanf (&buffer[160], "NAXIS   = %d", &Naxis);
     52  if (Nread != 1) {
     53    if (VERBOSE) fprintf (stderr, "can't determine catalog db mode\n");
     54    return (FALSE);
    4555  }
    46   /*
    47   if (!strcmp (catalog[0].catmode, "SPLIT")) {
    48     load_catalog_split (catalog, mode, VERBOSE);
    49     return (TRUE);
     56  fseek (catalog[0].f, 0, SEEK_SET);
     57
     58  /* the test for MEF vs SPLIT should be EXTEND = T */
     59
     60  /* currenly, the mode information is carried per table.
     61     the user-set value of catmode will set the output mode for new tables
     62     an old table will keep its mode
     63  */
     64
     65  catalog[0].catmode = DVO_MODE_MEF;
     66  catalog[0].catformat = DVO_FORMAT_UNDEF;
     67  if (Naxis == 2) catalog[0].catmode = DVO_MODE_RAW;
     68
     69  switch (catalog[0].catmode) {
     70    case DVO_MODE_RAW:
     71      if (VERBOSE) fprintf (stderr, "reading catalog (mode DVO_MODE_RAW)\n");
     72      load_catalog_raw (catalog, mode, VERBOSE);
     73      break;
     74    case DVO_MODE_MEF:
     75      if (VERBOSE) fprintf (stderr, "reading catalog (mode DVO_MODE_MEF)\n");
     76      load_catalog_mef (catalog, mode, VERBOSE);
     77      break;
     78    default:
     79      fprintf (stderr, "error getting catalog mode\n");
     80      exit (2);
    5081  }
    51   if (!strcmp (catalog[0].catmode, "MYSQL")) {
    52     load_catalog_mysql (catalog, mode, VERBOSE);
    53     return (TRUE);
    54   }
    55   */
    56   return (FALSE);
     82  return (TRUE);
    5783}
    5884
    5985int save_catalog (Catalog *catalog, char VERBOSE) {
    6086
    61   if (!strcmp (catalog[0].catmode, "RAW")) {
    62     save_catalog_raw (catalog, VERBOSE);
    63     return (TRUE);
     87  switch (catalog[0].catmode) {
     88    case DVO_MODE_RAW:
     89      save_catalog_raw (catalog, VERBOSE);
     90      break;
     91    case DVO_MODE_MEF:
     92      save_catalog_mef (catalog, VERBOSE);
     93      break;
     94    default:
     95      fprintf (stderr, "invalid catalog mode\n");
     96      exit (2);
    6497  }
    65   if (!strcmp (catalog[0].catmode, "MEF")) {
    66     save_catalog_mef (catalog, VERBOSE);
    67     return (TRUE);
    68   }
    69 
    70   return (FALSE);
     98  return (TRUE);
    7199}
    72100
  • trunk/Ohana/src/libohana/src/phot_catalog_mef.c

    r4864 r5014  
    44int load_catalog_mef (Catalog *catalog, char mode, int VERBOSE) {
    55 
    6   int Nitems, Nbytes, Naverage, Nmeasure, Nmissing, Nsecfilt;
     6  int Nitems, Nbytes, Nexpect, Naverage, Nmeasure, Nmissing, Nsecfilt;
    77  FILE *f;
    88
     
    3131  if (!fits_scan (&catalog[0].header, "NSECFILT", "%d", 1, &Nsecfilt)) Nsecfilt = 0;
    3232
     33  /**  Nsecfilt is unusual: it does not list the number of data items in the table
     34       instead, the number of items is Nsecfilt * Naverage.  **/
     35  catalog[0].Nsecfilt = Nsecfilt;
     36
    3337  /* validate table mode */
    3438
     
    4448      return (FALSE);
    4549    }
    46     catalog[0].average = FtableToAverage (&ftable, &catalog[0].Naverage, catalog[0].average_format);
     50    catalog[0].average = FtableToAverage (&ftable, &catalog[0].Naverage, &catalog[0].catformat);
    4751    if (Naverage != catalog[0].Naverage) {
    4852      fprintf (stderr, "Warning: mismatch between Naverage in PHU and Table headers (%d vs %d)\n", Naverage, catalog[0].Naverage);
     
    6670      return (FALSE);
    6771    }
    68     catalog[0].measure = FtableToMeasure (&ftable, &catalog[0].Nmeasure, catalog[0].measure_format);
     72    catalog[0].measure = FtableToMeasure (&ftable, &catalog[0].Nmeasure, &catalog[0].catformat);
    6973    if (Nmeasure != catalog[0].Nmeasure) {
    7074      fprintf (stderr, "Warning: mismatch between Nmeasure in PHU and Table headers (%d vs %d)\n", Nmeasure, catalog[0].Nmeasure);
     
    96100  }
    97101
     102  // catalog[0].secfilt = fits_table_get_SecFilt (&ftable, &Nitems, NULL);
     103  // catalog[0].Nsecfilt = Nitems / catalog[0].Naverage;
     104
    98105  /* read secfilt table header */
    99106  if (!fits_fread_header (f, &header)) {
     
    107114      return (FALSE);
    108115    }
    109     /* no conversions currently defined */
    110     catalog[0].secfilt = fits_table_get_SecFilt (&ftable, &Nitems, NULL);
    111     catalog[0].Nsecfilt = Nitems / catalog[0].Naverage;
    112     if (Nsecfilt != catalog[0].Nsecfilt) {
    113       fprintf (stderr, "Warning: mismatch between Nsecfilt in PHU and Table headers (%d vs %d)\n", Nsecfilt, catalog[0].Nsecfilt);
     116    Nexpect = catalog[0].Nsecfilt * catalog[0].Naverage;
     117    catalog[0].secfilt = FtableToSecFilt (&ftable, &Nitems, &catalog[0].catformat);
     118    if (Nexpect != Nitems) {
     119      fprintf (stderr, "Warning: mismatch between Nsecfilt items in PHU and Table headers (%d vs %d)\n", Nexpect, Nitems);
    114120    }
    115121  } else {
     
    125131int save_catalog_mef (Catalog *catalog, char VERBOSE) {
    126132
     133  int Nitems;
    127134  FILE *f;
    128135  Matrix matrix;
     
    163170
    164171  /* write out Average table (convert to FITS table format) */
    165   AverageToFtable (&ftable, catalog[0].average, catalog[0].Naverage, catalog[0].average_format);
     172  AverageToFtable (&ftable, catalog[0].average, catalog[0].Naverage, catalog[0].catformat);
    166173  if (!fits_fwrite_Theader (catalog[0].f, &header)) {
    167174    fprintf (stderr, "can't write table header");
     
    176183
    177184  /* write out Measure table (convert to FITS table format) */
    178   MeasureToFtable (&ftable, catalog[0].measure, catalog[0].Nmeasure, catalog[0].measure_format);
     185  MeasureToFtable (&ftable, catalog[0].measure, catalog[0].Nmeasure, catalog[0].catformat);
    179186  if (!fits_fwrite_Theader (catalog[0].f, &header)) {
    180187    fprintf (stderr, "can't write table header");
     
    201208  fits_free_header (&header);
    202209
    203   /* write out Secfilt table (convert to FITS table format) */
    204   /*** note that Nsecfilt is NOT the number of rows! ***/
    205   fits_table_set_SecFilt (&ftable, catalog[0].secfilt, catalog[0].Naverage * catalog[0].Nsecfilt);
    206   if (!fits_fwrite_Theader (catalog[0].f, &header)) {
    207     fprintf (stderr, "can't write table header");
    208     return (FALSE);
    209   }
    210   if (!fits_fwrite_table   (catalog[0].f, &ftable)) {
     210  /* write out SecFilt table (convert to FITS table format) */
     211  Nitems = catalog[0].Naverage * catalog[0].Nsecfilt;
     212  SecFiltToFtable (&ftable, catalog[0].secfilt, Nitems, catalog[0].catformat);
     213  if (!fits_fwrite_Theader (catalog[0].f, &header)) {
     214    fprintf (stderr, "can't write table header");
     215    return (FALSE);
     216  }
     217  if (!fits_fwrite_table (catalog[0].f, &ftable)) {
    211218    fprintf (stderr, "can't write table data");
    212219    return (FALSE);
  • trunk/Ohana/src/libohana/src/phot_catalog_raw.c

    r4830 r5014  
    3333  if (!fits_scan (&catalog[0].header, "NSECFILT", "%d", 1, &catalog[0].Nsecfilt)) catalog[0].Nsecfilt = 0;
    3434
    35   /* determine average and measure format */
    36   strcpy (catalog[0].average_format, "NONE");
    37   strcpy (catalog[0].measure_format, "NONE");
     35  /* determine catalog format */
     36  catalog[0].catformat = DVO_FORMAT_UNDEF;
    3837  if (fits_scan (&catalog[0].header, "FORMAT",  "%s", 1, format)) {
    39     if (!strcmp (format, "INTERNAL")) {
    40       sprintf (catalog[0].average_format, "DVO_AVERAGE");
    41       sprintf (catalog[0].measure_format, "DVO_MEASURE");
    42     } else {
    43       sprintf (catalog[0].average_format, "DVO_AVERAGE_%s", format);
    44       sprintf (catalog[0].measure_format, "DVO_MEASURE_%s", format);
    45     }
    46     goto got_format;
     38    if (!strcmp (format, "INTERNAL")) catalog[0].catformat = DVO_FORMAT_INTERNAL;
     39    if (!strcmp (format, "LONEOS")) catalog[0].catformat = DVO_FORMAT_LONEOS;
     40    if (!strcmp (format, "ELIXIR")) catalog[0].catformat = DVO_FORMAT_ELIXIR;
     41    if (!strcmp (format, "PANSTARRS")) catalog[0].catformat = DVO_FORMAT_PANSTARRS;
     42    if (catalog[0].catformat != DVO_FORMAT_UNDEF) goto got_format;
    4743  }
    4844  if (fits_scan (&catalog[0].header, "NEWMEAS",  "%t", 1, &NewMeasure)) {
    49     strcpy (catalog[0].average_format, "DVO_AVERAGE_ELIXIR");
    50     strcpy (catalog[0].measure_format, "DVO_MEASURE_ELIXIR");
     45    catalog[0].catformat = DVO_FORMAT_ELIXIR;
    5146    goto got_format;
    5247  }
    5348  if (fits_scan (&catalog[0].header, "TELESCOP",  "%s", 1, telescope)) {
    5449    if (!strncmp (telescope, "LONEOS", strlen("LONEOS"))) {
    55       strcpy (catalog[0].average_format, "DVO_AVERAGE_ELIXIR");
    56       strcpy (catalog[0].measure_format, "DVO_MEASURE_ELIXIR");
     50      catalog[0].catformat = DVO_FORMAT_LONEOS;
    5751      goto got_format;
    5852    }
    59   }
     53    if (!strncmp (telescope, "1.3m McGraw-Hill", strlen("1.3m McGraw-Hill"))) {
     54      catalog[0].catformat = DVO_FORMAT_ELIXIR;
     55      goto got_format;
     56    }
     57  }
     58  if (VERBOSE) fprintf (stderr, "cannot determine catalog format\n");
     59  return (FALSE);
    6060
    6161got_format:
    6262  /* determine datatype sizes */
    63   AverageSize = 0;
    64   if (!strcmp (catalog[0].average_format, "DVO_AVERAGE")) AverageSize = sizeof(Average);
    65   if (!strcmp (catalog[0].average_format, "DVO_AVERAGE_ELIXIR")) AverageSize = sizeof(AverageElixir);
    66   if (!strcmp (catalog[0].average_format, "DVO_AVERAGE_LONEOS")) AverageSize = sizeof(AverageLoneos);
    67   if (!strcmp (catalog[0].average_format, "DVO_AVERAGE_PANSTARRS")) AverageSize = sizeof(AveragePanstarrs);
    68   if (AverageSize == 0) {
    69     fprintf (stderr, "average format is invalid: %s\n", catalog[0].average_format);
    70     return (FALSE);
    71   }
    72   MeasureSize = 0;
    73   if (!strcmp (catalog[0].measure_format, "DVO_MEASURE")) MeasureSize = sizeof(Measure);
    74   if (!strcmp (catalog[0].measure_format, "DVO_MEASURE_ELIXIR")) MeasureSize = sizeof(MeasureElixir);
    75   if (!strcmp (catalog[0].measure_format, "DVO_MEASURE_LONEOS")) MeasureSize = sizeof(MeasureLoneos);
    76   if (!strcmp (catalog[0].measure_format, "DVO_MEASURE_PANSTARRS")) MeasureSize = sizeof(MeasurePanstarrs);
    77   if (MeasureSize == 0) {
    78     fprintf (stderr, "measure format is invalid: %s\n", catalog[0].measure_format);
    79     return (FALSE);
     63  switch (catalog[0].catformat) {
     64    case DVO_FORMAT_INTERNAL:
     65      AverageSize = sizeof(Average);
     66      MeasureSize = sizeof(Measure);
     67      SecFiltSize = sizeof (SecFilt);
     68      break;
     69    case DVO_FORMAT_LONEOS:
     70      AverageSize = sizeof(AverageLoneos);
     71      MeasureSize = sizeof(MeasureLoneos);
     72      SecFiltSize = sizeof (SecFiltLoneos);
     73      break;
     74    case DVO_FORMAT_ELIXIR:
     75      AverageSize = sizeof(AverageElixir);
     76      MeasureSize = sizeof(MeasureElixir);
     77      SecFiltSize = sizeof (SecFiltElixir);
     78      break;
     79    case DVO_FORMAT_PANSTARRS:
     80      AverageSize = sizeof(AveragePanstarrs);
     81      MeasureSize = sizeof(MeasurePanstarrs);
     82      SecFiltSize = sizeof (SecFiltPanstarrs);
     83      break;
     84    default:
     85      fprintf (stderr, "programming error in phot_catalog_raw\n");
     86      exit (2);
    8087  }
    8188  MissingSize = sizeof (Missing);
    82   SecFiltSize = sizeof (SecFilt);
    8389
    8490  /* predicted file size - for double checking data validity */
     
    116122  /* read and convert the averages (use a macro to clean this up?) */
    117123  if (mode & LOAD_AVES) {
    118     catalog[0].average = ReadRawAverage (catalog[0].f, catalog[0].Naverage, catalog[0].average_format);
     124    catalog[0].average = ReadRawAverage (catalog[0].f, catalog[0].Naverage, catalog[0].catformat);
    119125  } else {
    120126    /* skip over averages */
     
    125131  /* read and convert the measures (use a macro to clean this up?) */
    126132  if (mode & LOAD_MEAS) {
    127     catalog[0].measure = ReadRawMeasure (catalog[0].f, catalog[0].Nmeasure, catalog[0].measure_format);
     133    catalog[0].measure = ReadRawMeasure (catalog[0].f, catalog[0].Nmeasure, catalog[0].catformat);
    128134  } else {
    129135    /* skip over measures */
     
    151157  if (mode & LOAD_SECF) {
    152158    Nitems = catalog[0].Naverage * catalog[0].Nsecfilt;
    153     ALLOCATE (catalog[0].secfilt, SecFilt, MAX (Nitems, 1));
    154     nitems = fread (catalog[0].secfilt, SecFiltSize, Nitems, f);
    155     if (nitems != Nitems) {
    156       if (VERBOSE) fprintf (stderr, "failed to read secondary filters from catalog file %s (%d vs %d)\n", catalog[0].filename, nitems, Nitems);
    157       return (FALSE);
    158     }
    159     fits_convert_SecFilt (catalog[0].secfilt, SecFiltSize, Nitems);
     159    catalog[0].secfilt = ReadRawSecFilt (catalog[0].f, Nitems, catalog[0].catformat);
    160160  } else {
    161161    /* skip over secfilts */
    162     Nskip = catalog[0].Nsecfilt * SecFiltSize * catalog[0].Naverage;
     162    Nskip = catalog[0].Nsecfilt * catalog[0].Naverage * SecFiltSize;
    163163    fseek (f, Nskip, SEEK_CUR);
    164164  }
     
    188188
    189189  int Nitems, nitems;
    190   char *p;
    191190  FILE *f;
    192191
     
    203202
    204203  /* specify the appropriate data format */
    205   if (!strcmp (catalog[0].average_format, "DVO_AVERAGE")) {
    206     fits_modify (&catalog[0].header, "FORMAT", "%s", 1, "INTERNAL");
    207   } else {
    208     p = catalog[0].average_format + strlen ("DVO_AVERAGE_");
    209     fits_modify (&catalog[0].header, "FORMAT", "%s", 1, p);
    210   }
     204  if (catalog[0].catformat == DVO_FORMAT_INTERNAL)  fits_modify (&catalog[0].header, "FORMAT", "%s", 1, "INTERNAL");
     205  if (catalog[0].catformat == DVO_FORMAT_LONEOS)    fits_modify (&catalog[0].header, "FORMAT", "%s", 1, "LONEOS");
     206  if (catalog[0].catformat == DVO_FORMAT_ELIXIR)    fits_modify (&catalog[0].header, "FORMAT", "%s", 1, "ELIXIR");
     207  if (catalog[0].catformat == DVO_FORMAT_PANSTARRS) fits_modify (&catalog[0].header, "FORMAT", "%s", 1, "PANSTARRS");
    211208
    212209  /* rewind file pointers and truncate file */
     
    223220
    224221  /* write averages and measures */
    225   WriteRawAverage (f, catalog[0].average, catalog[0].Naverage, catalog[0].average_format);
    226   WriteRawMeasure (f, catalog[0].measure, catalog[0].Nmeasure, catalog[0].measure_format);
     222  WriteRawAverage (f, catalog[0].average, catalog[0].Naverage, catalog[0].catformat);
     223  WriteRawMeasure (f, catalog[0].measure, catalog[0].Nmeasure, catalog[0].catformat);
    227224
    228225  /* write missing data */
     
    235232  }
    236233
    237   /* write secfilt data */
    238234  Nitems = catalog[0].Naverage * catalog[0].Nsecfilt;
    239   fits_convert_SecFilt (catalog[0].secfilt, sizeof(SecFilt), Nitems);
    240   nitems = fwrite (catalog[0].secfilt, sizeof(SecFilt), Nitems, f);
    241   if (nitems != Nitems) {
    242     if (VERBOSE) fprintf (stderr, "failed to write catalog file secfilt %s\n", catalog[0].filename);
    243     return (FALSE);
    244   }
    245 
     235  WriteRawSecFilt (f, catalog[0].secfilt, Nitems, catalog[0].catformat);
    246236  return (TRUE);
    247 
    248237}
    249238
     
    251240     some warnings:
    252241     - need to be wary of exit condition errors
    253      - average_format and measure_format must be the same format (not checked)
    254242***/
     243
     244/** Average / Raw Table conversions **/
     245
     246Average *ReadRawAverage (FILE *f, int Naverage, int format) {
     247
     248  int nitems;
     249  Average *average;
     250  AverageElixir *tmpAverageElixir;
     251  AverageLoneos *tmpAverageLoneos;
     252  AveragePanstarrs *tmpAveragePanstarrs;
     253
     254  switch (format) {
     255    case DVO_FORMAT_INTERNAL:
     256      ALLOCATE (average, Average, MAX (Naverage, 1));
     257      nitems = fread (average, sizeof(Average), Naverage, f);
     258      if (nitems != Naverage) {
     259        fprintf (stderr, "failed to read averages (%d vs %d)\n", nitems, Naverage);
     260        return (NULL);
     261      }
     262      fits_convert_Average (average, sizeof(Average), Naverage);
     263      break;
     264    case DVO_FORMAT_ELIXIR:
     265      ALLOCATE (tmpAverageElixir, AverageElixir, MAX (Naverage, 1));
     266      nitems = fread (tmpAverageElixir, sizeof(AverageElixir), Naverage, f);
     267      if (nitems != Naverage) {
     268        fprintf (stderr, "failed to read averages (%d vs %d)\n", nitems, Naverage);
     269        return (NULL);
     270      }
     271      fits_convert_AverageElixir (tmpAverageElixir, sizeof(AverageElixir), Naverage);
     272      average = AverageElixirToInternal (tmpAverageElixir, Naverage);
     273      free (tmpAverageElixir);
     274      break;
     275    case DVO_FORMAT_LONEOS:
     276      ALLOCATE (tmpAverageLoneos, AverageLoneos, MAX (Naverage, 1));
     277      nitems = fread (tmpAverageLoneos, sizeof(AverageLoneos), Naverage, f);
     278      if (nitems != Naverage) {
     279        fprintf (stderr, "failed to read averages (%d vs %d)\n", nitems, Naverage);
     280        return (NULL);
     281      }
     282      fits_convert_AverageLoneos (tmpAverageLoneos, sizeof(AverageLoneos), Naverage);
     283      average = AverageLoneosToInternal (tmpAverageLoneos, Naverage);
     284      free (tmpAverageLoneos);
     285      break;
     286    case DVO_FORMAT_PANSTARRS:
     287      ALLOCATE (tmpAveragePanstarrs, AveragePanstarrs, MAX (Naverage, 1));
     288      nitems = fread (tmpAveragePanstarrs, sizeof(AveragePanstarrs), Naverage, f);
     289      if (nitems != Naverage) {
     290        fprintf (stderr, "failed to read averages (%d vs %d)\n", nitems, Naverage);
     291        return (NULL);
     292      }
     293      fits_convert_AveragePanstarrs (tmpAveragePanstarrs, sizeof(AveragePanstarrs), Naverage);
     294      average = AveragePanstarrsToInternal (tmpAveragePanstarrs, Naverage);
     295      free (tmpAveragePanstarrs);
     296      break;
     297    default:
     298      fprintf (stderr, "error reading measures\n");
     299      return (NULL);
     300  }
     301  return (average);
     302}
     303
     304/* accepts and converts internal average formats and outputs
     305   raw data in the specified format */
     306int WriteRawAverage (FILE *f, Average *average, int Naverage, int format) {
     307
     308  int nitems;
     309  AverageElixir *tmpAverageElixir;
     310  AverageLoneos *tmpAverageLoneos;
     311  AveragePanstarrs *tmpAveragePanstarrs;
     312
     313  switch (format) {
     314    case DVO_FORMAT_INTERNAL:
     315      fits_convert_Average (average, sizeof(Average), Naverage);
     316      nitems = fwrite (average, sizeof(Average), Naverage, f);
     317      if (nitems != Naverage) {
     318        fprintf (stderr, "failed to write averages (%d vs %d)\n", nitems, Naverage);
     319        return (FALSE);
     320      }
     321      break;
     322    case DVO_FORMAT_ELIXIR:
     323      tmpAverageElixir = AverageInternalToElixir (average, Naverage);
     324      fits_convert_AverageElixir (tmpAverageElixir, sizeof(AverageElixir), Naverage);
     325      nitems = fwrite (tmpAverageElixir, sizeof(AverageElixir), Naverage, f);
     326      free (tmpAverageElixir);
     327      if (nitems != Naverage) {
     328        fprintf (stderr, "failed to write averages (%d vs %d)\n", nitems, Naverage);
     329        return (FALSE);
     330      }
     331      break;
     332    case DVO_FORMAT_LONEOS:
     333      tmpAverageLoneos = AverageInternalToLoneos (average, Naverage);
     334      fits_convert_AverageLoneos (tmpAverageLoneos, sizeof(AverageLoneos), Naverage);
     335      nitems = fwrite (tmpAverageLoneos, sizeof(AverageLoneos), Naverage, f);
     336      free (tmpAverageLoneos);
     337      if (nitems != Naverage) {
     338        fprintf (stderr, "failed to write averages (%d vs %d)\n", nitems, Naverage);
     339        return (FALSE);
     340      }
     341      break;
     342    case DVO_FORMAT_PANSTARRS:
     343      tmpAveragePanstarrs = AverageInternalToPanstarrs (average, Naverage);
     344      fits_convert_AveragePanstarrs (tmpAveragePanstarrs, sizeof(AveragePanstarrs), Naverage);
     345      nitems = fwrite (tmpAveragePanstarrs, sizeof(AveragePanstarrs), Naverage, f);
     346      free (tmpAveragePanstarrs);
     347      if (nitems != Naverage) {
     348        fprintf (stderr, "failed to write averages (%d vs %d)\n", nitems, Naverage);
     349        return (FALSE);
     350      }
     351      break;
     352    default:
     353      fprintf (stderr, "error writing averages\n");
     354      return (FALSE);
     355  }
     356  return (TRUE);
     357}
     358
     359/** Average / Raw Table conversions **/
     360
     361Measure *ReadRawMeasure (FILE *f, int Nmeasure, int format) {
     362
     363  int nitems;
     364  Measure *measure;
     365  MeasureElixir *tmpMeasureElixir;
     366  MeasureLoneos *tmpMeasureLoneos;
     367  MeasurePanstarrs *tmpMeasurePanstarrs;
     368
     369  switch (format) {
     370    case DVO_FORMAT_INTERNAL:
     371      ALLOCATE (measure, Measure, MAX (Nmeasure, 1));
     372      nitems = fread (measure, sizeof(Measure), Nmeasure, f);
     373      if (nitems != Nmeasure) {
     374        fprintf (stderr, "failed to read measures (%d vs %d)\n", nitems, Nmeasure);
     375        return (NULL);
     376      }
     377      fits_convert_Measure (measure, sizeof(Measure), Nmeasure);
     378      break;
     379    case DVO_FORMAT_ELIXIR:
     380      ALLOCATE (tmpMeasureElixir, MeasureElixir, MAX (Nmeasure, 1));
     381      nitems = fread (tmpMeasureElixir, sizeof(MeasureElixir), Nmeasure, f);
     382      if (nitems != Nmeasure) {
     383        fprintf (stderr, "failed to read measures (%d vs %d)\n", nitems, Nmeasure);
     384        return (NULL);
     385      }
     386      fits_convert_MeasureElixir (tmpMeasureElixir, sizeof(MeasureElixir), Nmeasure);
     387      measure = MeasureElixirToInternal (tmpMeasureElixir, Nmeasure);
     388      free (tmpMeasureElixir);
     389      break;
     390    case DVO_FORMAT_LONEOS:
     391      ALLOCATE (tmpMeasureLoneos, MeasureLoneos, MAX (Nmeasure, 1));
     392      nitems = fread (tmpMeasureLoneos, sizeof(MeasureLoneos), Nmeasure, f);
     393      if (nitems != Nmeasure) {
     394        fprintf (stderr, "failed to read measures (%d vs %d)\n", nitems, Nmeasure);
     395        return (NULL);
     396      }
     397      fits_convert_MeasureLoneos (tmpMeasureLoneos, sizeof(MeasureLoneos), Nmeasure);
     398      measure = MeasureLoneosToInternal (tmpMeasureLoneos, Nmeasure);
     399      free (tmpMeasureLoneos);
     400      break;
     401    case DVO_FORMAT_PANSTARRS:
     402      ALLOCATE (tmpMeasurePanstarrs, MeasurePanstarrs, MAX (Nmeasure, 1));
     403      nitems = fread (tmpMeasurePanstarrs, sizeof(MeasurePanstarrs), Nmeasure, f);
     404      if (nitems != Nmeasure) {
     405        fprintf (stderr, "failed to read measures (%d vs %d)\n", nitems, Nmeasure);
     406        return (NULL);
     407      }
     408      fits_convert_MeasurePanstarrs (tmpMeasurePanstarrs, sizeof(MeasurePanstarrs), Nmeasure);
     409      measure = MeasurePanstarrsToInternal (tmpMeasurePanstarrs, Nmeasure);
     410      free (tmpMeasurePanstarrs);
     411      break;
     412    default:
     413      fprintf (stderr, "error reading measures\n");
     414      return (NULL);
     415  }
     416  return (measure);
     417}
     418
     419/* accepts and converts internal measure formats and outputs
     420   raw data in the specified format */
     421int WriteRawMeasure (FILE *f, Measure *measure, int Nmeasure, int format) {
     422
     423  int nitems;
     424  MeasureElixir *tmpMeasureElixir;
     425  MeasureLoneos *tmpMeasureLoneos;
     426  MeasurePanstarrs *tmpMeasurePanstarrs;
     427
     428  switch (format) {
     429    case DVO_FORMAT_INTERNAL:
     430      fits_convert_Measure (measure, sizeof(Measure), Nmeasure);
     431      nitems = fwrite (measure, sizeof(Measure), Nmeasure, f);
     432      if (nitems != Nmeasure) {
     433        fprintf (stderr, "failed to write measures (%d vs %d)\n", nitems, Nmeasure);
     434        return (FALSE);
     435      }
     436      break;
     437    case DVO_FORMAT_ELIXIR:
     438      tmpMeasureElixir = MeasureInternalToElixir (measure, Nmeasure);
     439      fits_convert_MeasureElixir (tmpMeasureElixir, sizeof(MeasureElixir), Nmeasure);
     440      nitems = fwrite (tmpMeasureElixir, sizeof(MeasureElixir), Nmeasure, f);
     441      free (tmpMeasureElixir);
     442      if (nitems != Nmeasure) {
     443        fprintf (stderr, "failed to write measures (%d vs %d)\n", nitems, Nmeasure);
     444        return (FALSE);
     445      }
     446      break;
     447    case DVO_FORMAT_LONEOS:
     448      tmpMeasureLoneos = MeasureInternalToLoneos (measure, Nmeasure);
     449      fits_convert_MeasureLoneos (tmpMeasureLoneos, sizeof(MeasureLoneos), Nmeasure);
     450      nitems = fwrite (tmpMeasureLoneos, sizeof(MeasureLoneos), Nmeasure, f);
     451      free (tmpMeasureLoneos);
     452      if (nitems != Nmeasure) {
     453        fprintf (stderr, "failed to write measures (%d vs %d)\n", nitems, Nmeasure);
     454        return (FALSE);
     455      }
     456      break;
     457    case DVO_FORMAT_PANSTARRS:
     458      tmpMeasurePanstarrs = MeasureInternalToPanstarrs (measure, Nmeasure);
     459      fits_convert_MeasurePanstarrs (tmpMeasurePanstarrs, sizeof(MeasurePanstarrs), Nmeasure);
     460      nitems = fwrite (tmpMeasurePanstarrs, sizeof(MeasurePanstarrs), Nmeasure, f);
     461      free (tmpMeasurePanstarrs);
     462      if (nitems != Nmeasure) {
     463        fprintf (stderr, "failed to write measures (%d vs %d)\n", nitems, Nmeasure);
     464        return (FALSE);
     465      }
     466      break;
     467    default:
     468      fprintf (stderr, "error writing measures\n");
     469      return (FALSE);
     470  }
     471  return (TRUE);
     472}
     473
     474/** SecFilt / Raw Table conversions **/
     475
     476SecFilt *ReadRawSecFilt (FILE *f, int Nsecfilt, int format) {
     477
     478  int nitems;
     479  SecFilt *secfilt;
     480  SecFiltElixir *tmpSecFiltElixir;
     481  SecFiltLoneos *tmpSecFiltLoneos;
     482  SecFiltPanstarrs *tmpSecFiltPanstarrs;
     483
     484  switch (format) {
     485    case DVO_FORMAT_INTERNAL:
     486      ALLOCATE (secfilt, SecFilt, MAX (Nsecfilt, 1));
     487      nitems = fread (secfilt, sizeof(SecFilt), Nsecfilt, f);
     488      if (nitems != Nsecfilt) {
     489        fprintf (stderr, "failed to read secfilts (%d vs %d)\n", nitems, Nsecfilt);
     490        return (NULL);
     491      }
     492      fits_convert_SecFilt (secfilt, sizeof(SecFilt), Nsecfilt);
     493      break;
     494    case DVO_FORMAT_ELIXIR:
     495      ALLOCATE (tmpSecFiltElixir, SecFiltElixir, MAX (Nsecfilt, 1));
     496      nitems = fread (tmpSecFiltElixir, sizeof(SecFiltElixir), Nsecfilt, f);
     497      if (nitems != Nsecfilt) {
     498        fprintf (stderr, "failed to read secfilts (%d vs %d)\n", nitems, Nsecfilt);
     499        return (NULL);
     500      }
     501      fits_convert_SecFiltElixir (tmpSecFiltElixir, sizeof(SecFiltElixir), Nsecfilt);
     502      secfilt = SecFiltElixirToInternal (tmpSecFiltElixir, Nsecfilt);
     503      free (tmpSecFiltElixir);
     504      break;
     505    case DVO_FORMAT_LONEOS:
     506      ALLOCATE (tmpSecFiltLoneos, SecFiltLoneos, MAX (Nsecfilt, 1));
     507      nitems = fread (tmpSecFiltLoneos, sizeof(SecFiltLoneos), Nsecfilt, f);
     508      if (nitems != Nsecfilt) {
     509        fprintf (stderr, "failed to read secfilts (%d vs %d)\n", nitems, Nsecfilt);
     510        return (NULL);
     511      }
     512      fits_convert_SecFiltLoneos (tmpSecFiltLoneos, sizeof(SecFiltLoneos), Nsecfilt);
     513      secfilt = SecFiltLoneosToInternal (tmpSecFiltLoneos, Nsecfilt);
     514      free (tmpSecFiltLoneos);
     515      break;
     516    case DVO_FORMAT_PANSTARRS:
     517      ALLOCATE (tmpSecFiltPanstarrs, SecFiltPanstarrs, MAX (Nsecfilt, 1));
     518      nitems = fread (tmpSecFiltPanstarrs, sizeof(SecFiltPanstarrs), Nsecfilt, f);
     519      if (nitems != Nsecfilt) {
     520        fprintf (stderr, "failed to read secfilts (%d vs %d)\n", nitems, Nsecfilt);
     521        return (NULL);
     522      }
     523      fits_convert_SecFiltPanstarrs (tmpSecFiltPanstarrs, sizeof(SecFiltPanstarrs), Nsecfilt);
     524      secfilt = SecFiltPanstarrsToInternal (tmpSecFiltPanstarrs, Nsecfilt);
     525      free (tmpSecFiltPanstarrs);
     526      break;
     527    default:
     528      fprintf (stderr, "error reading measures\n");
     529      return (NULL);
     530  }
     531  return (secfilt);
     532}
     533
     534/* accepts and converts internal secfilt formats and outputs
     535   raw data in the specified format */
     536int WriteRawSecFilt (FILE *f, SecFilt *secfilt, int Nsecfilt, int format) {
     537
     538  int nitems;
     539  SecFiltElixir *tmpSecFiltElixir;
     540  SecFiltLoneos *tmpSecFiltLoneos;
     541  SecFiltPanstarrs *tmpSecFiltPanstarrs;
     542
     543  switch (format) {
     544    case DVO_FORMAT_INTERNAL:
     545      fits_convert_SecFilt (secfilt, sizeof(SecFilt), Nsecfilt);
     546      nitems = fwrite (secfilt, sizeof(SecFilt), Nsecfilt, f);
     547      if (nitems != Nsecfilt) {
     548        fprintf (stderr, "failed to write secfilts (%d vs %d)\n", nitems, Nsecfilt);
     549        return (FALSE);
     550      }
     551      break;
     552    case DVO_FORMAT_ELIXIR:
     553      tmpSecFiltElixir = SecFiltInternalToElixir (secfilt, Nsecfilt);
     554      fits_convert_SecFiltElixir (tmpSecFiltElixir, sizeof(SecFiltElixir), Nsecfilt);
     555      nitems = fwrite (tmpSecFiltElixir, sizeof(SecFiltElixir), Nsecfilt, f);
     556      free (tmpSecFiltElixir);
     557      if (nitems != Nsecfilt) {
     558        fprintf (stderr, "failed to write secfilts (%d vs %d)\n", nitems, Nsecfilt);
     559        return (FALSE);
     560      }
     561      break;
     562    case DVO_FORMAT_LONEOS:
     563      tmpSecFiltLoneos = SecFiltInternalToLoneos (secfilt, Nsecfilt);
     564      fits_convert_SecFiltLoneos (tmpSecFiltLoneos, sizeof(SecFiltLoneos), Nsecfilt);
     565      nitems = fwrite (tmpSecFiltLoneos, sizeof(SecFiltLoneos), Nsecfilt, f);
     566      free (tmpSecFiltLoneos);
     567      if (nitems != Nsecfilt) {
     568        fprintf (stderr, "failed to write secfilts (%d vs %d)\n", nitems, Nsecfilt);
     569        return (FALSE);
     570      }
     571      break;
     572    case DVO_FORMAT_PANSTARRS:
     573      tmpSecFiltPanstarrs = SecFiltInternalToPanstarrs (secfilt, Nsecfilt);
     574      fits_convert_SecFiltPanstarrs (tmpSecFiltPanstarrs, sizeof(SecFiltPanstarrs), Nsecfilt);
     575      nitems = fwrite (tmpSecFiltPanstarrs, sizeof(SecFiltPanstarrs), Nsecfilt, f);
     576      free (tmpSecFiltPanstarrs);
     577      if (nitems != Nsecfilt) {
     578        fprintf (stderr, "failed to write secfilts (%d vs %d)\n", nitems, Nsecfilt);
     579        return (FALSE);
     580      }
     581      break;
     582    default:
     583      fprintf (stderr, "error writing secfilts\n");
     584      return (FALSE);
     585  }
     586  return (TRUE);
     587}
     588
  • trunk/Ohana/src/libohana/src/photfits.c

    r3466 r5014  
    22# include <dvo.h>
    33# define MAX_ORDER 3
     4
     5/**** XXXX warning: these functions have not been corrected to handle
     6      the change of Mcal from millimags to mags
     7      I don't think most functions are using the Mcal polynomial terms in
     8      any case... ****/
     9
     10/* all terms of order > 0 are stored as 16bit floats
     11   the zero-order term is stored as a short int (-32k,+32k) */
    412
    513/* convert double to low-precision short int */
     
    5058
    5159/* convert image parameters to c[i] coeffs */
    52 /* all terms of order > 0 are stored as 16bit floats
    53    the zero-order term is stored as a short int (-32k,+32k) */
    54 
    5560void returnMcal (Image *image, double *c) {
    5661
    5762  switch (image[0].order) {
    5863  case 0:
    59     c[0] = image[0].Mcal;
    60     return;
    61   case 1:
    62     c[0] = image[0].Mcal;
     64    c[0] = image[0].Mcal_PS;
     65    return;
     66  case 1:
     67    c[0] = image[0].Mcal_PS;
    6368    c[1] = getMi (image[0].Mx);
    6469    c[2] = getMi (image[0].My);
    6570    return;
    6671  case 2:
    67     c[0] = image[0].Mcal;
     72    c[0] = image[0].Mcal_PS;
    6873    c[1] = getMi (image[0].Mx);
    6974    c[2] = getMi (image[0].Mxx);
     
    7378    return;
    7479  case 3:
    75     c[0] = image[0].Mcal;
     80    c[0] = image[0].Mcal_PS;
    7681    c[1] = getMi (image[0].Mx);
    7782    c[2] = getMi (image[0].Mxx);
     
    8590    return;
    8691  case 4:
    87     c[0] = image[0].Mcal;
     92    c[0] = image[0].Mcal_PS;
    8893    c[1] = getMi (image[0].Mx);
    8994    c[2] = getMi (image[0].Mxx);
     
    113118  switch (order) {
    114119  case 0:
    115     image[0].Mcal = c[0];
    116     return;
    117   case 1:
    118     image[0].Mcal = c[0];
     120    image[0].Mcal_PS = c[0];
     121    return;
     122  case 1:
     123    image[0].Mcal_PS = c[0];
    119124    image[0].Mx    = putMi(c[1]);
    120125    image[0].My    = putMi(c[2]);
    121126    return;
    122127  case 2:
    123     image[0].Mcal = c[0];
     128    image[0].Mcal_PS = c[0];
    124129    image[0].Mx    = putMi(c[1]);
    125130    image[0].Mxx   = putMi(c[2]);
     
    129134    return;
    130135  case 3:
    131     image[0].Mcal = c[0];
     136    image[0].Mcal_PS = c[0];
    132137    image[0].Mx    = putMi(c[1]);
    133138    image[0].Mxx   = putMi(c[2]);
     
    141146    return;
    142147  case 4:
    143     image[0].Mcal = c[0];
     148    image[0].Mcal_PS = c[0];
    144149    image[0].Mx    = putMi(c[1]);
    145150    image[0].Mxx   = putMi(c[2]);
     
    158163    return;
    159164  default:
    160     image[0].Mcal = 0.0;
     165    image[0].Mcal_PS = 0.0;
    161166    image[0].order = 0;
    162167    return;
  • trunk/Ohana/src/mosastro/src/gptolemy.c

    r4865 r5014  
    66  Catalog catalog;
    77  StarData *stars;
    8 
    9   /* no autodetect for CATMODE yet */
    10   strcpy (catalog.catmode, CATMODE);
    118
    129  Nstars = 0;
     
    2118    break;
    2219  }
     20
     21  /* CATMODE and CATFORMAT determined from catalog */
    2322  if (!load_catalog (&catalog, LOAD_AVES | LOAD_MEAS, FALSE)) {
    2423    fprintf (stderr, "can't load catalog data %s\n", filename);
  • trunk/Ohana/src/opihi/dvo/avextract.c

    r4834 r5014  
    2828  /* find CATDIR in config system */
    2929  if (VarConfig ("CATDIR", "%s", catdir) == NULL) goto escape;
    30   if (VarConfig ("CATMODE", "%s", catalog.catmode) == NULL)
    31     strcpy (catalog.catmode, "RAW");
    3230
    3331  /* interpret command-line options */
  • trunk/Ohana/src/opihi/dvo/calextract.c

    r4865 r5014  
    3030  /* find CATDIR in config system */
    3131  if (VarConfig ("CATDIR", "%s", catdir) == NULL) goto escape;
    32   if (VarConfig ("CATMODE", "%s", catalog.catmode) == NULL)
    33     strcpy (catalog.catmode, "RAW");
    3432
    3533  /* command line arguments */
  • trunk/Ohana/src/opihi/dvo/calmextract.c

    r4865 r5014  
    3131  /* find CATDIR in config system */
    3232  if (VarConfig ("CATDIR", "%s", catdir) == NULL) goto escape;
    33   if (VarConfig ("CATMODE", "%s", catalog.catmode) == NULL)
    34     strcpy (catalog.catmode, "RAW");
    3533
    3634  /* command line arguments */
  • trunk/Ohana/src/opihi/dvo/catalog.c

    r4865 r5014  
    3232  VarConfig ("GSCDIR", "%s", gscdir);
    3333  VarConfig ("CATDIR", "%s", catdir);
    34   if (VarConfig ("CATMODE", "%s", catalog.catmode) == NULL)
    35     strcpy (catalog.catmode, "RAW");
    3634
    3735  Mz = 17.0;
  • trunk/Ohana/src/opihi/dvo/ccd.c

    r4834 r5014  
    2828  /* find CATDIR in config system */
    2929  if (VarConfig ("CATDIR", "%s", catdir) == NULL) goto escape;
    30   if (VarConfig ("CATMODE", "%s", catalog.catmode) == NULL)
    31     strcpy (catalog.catmode, "RAW");
    3230
    3331  /* interpret command-line options */
  • trunk/Ohana/src/opihi/dvo/cmatch.c

    r4852 r5014  
    1111  VarConfig ("GSCDIR", "%s", gscdir);
    1212  VarConfig ("CATDIR", "%s", catdir);
    13   if (VarConfig ("CATMODE", "%s", catalog1.catmode) == NULL)
    14     strcpy (catalog1.catmode, "RAW");
    1513     
    1614  if (argc != 9) {
  • trunk/Ohana/src/opihi/dvo/cmd.c

    r4834 r5014  
    2828  /* find CATDIR in config system */
    2929  if (VarConfig ("CATDIR", "%s", catdir) == NULL) goto escape;
    30   if (VarConfig ("CATMODE", "%s", catalog.catmode) == NULL)
    31     strcpy (catalog.catmode, "RAW");
    3230
    3331  /* interpret command-line options */
  • trunk/Ohana/src/opihi/dvo/ddmags.c

    r4834 r5014  
    2828  /* find CATDIR in config system */
    2929  if (VarConfig ("CATDIR", "%s", catdir) == NULL) goto escape;
    30   if (VarConfig ("CATMODE", "%s", catalog.catmode) == NULL)
    31     strcpy (catalog.catmode, "RAW");
    3230
    3331  /* interpret command-line options */
  • trunk/Ohana/src/opihi/dvo/dmagaves.c

    r4834 r5014  
    2929  /* find CATDIR in config system */
    3030  if (VarConfig ("CATDIR", "%s", catdir) == NULL) goto escape;
    31   if (VarConfig ("CATMODE", "%s", catalog.catmode) == NULL)
    32     strcpy (catalog.catmode, "RAW");
    3331
    3432  /* interpret command-line options */
  • trunk/Ohana/src/opihi/dvo/dmagmeas.c

    r4834 r5014  
    2929  /* find CATDIR in config system */
    3030  if (VarConfig ("CATDIR", "%s", catdir) == NULL) goto escape;
    31   if (VarConfig ("CATMODE", "%s", catalog.catmode) == NULL)
    32     strcpy (catalog.catmode, "RAW");
    3331
    3432  /* interpret command-line options */
  • trunk/Ohana/src/opihi/dvo/dmags.c

    r4834 r5014  
    2828  /* find CATDIR in config system */
    2929  if (VarConfig ("CATDIR", "%s", catdir) == NULL) goto escape;
    30   if (VarConfig ("CATMODE", "%s", catalog.catmode) == NULL)
    31     strcpy (catalog.catmode, "RAW");
    3230
    3331  /* interpret command-line options */
  • trunk/Ohana/src/opihi/dvo/dmt.c

    r4865 r5014  
    2020
    2121  VarConfig ("CATDIR", "%s", catdir);
    22   if (VarConfig ("CATMODE", "%s", catalog.catmode) == NULL)
    23     strcpy (catalog.catmode, "RAW");
    2422
    2523  vec1 = vec2 = vec3 = vec4 = vec5 = NULL;
  • trunk/Ohana/src/opihi/dvo/extract.c

    r4834 r5014  
    3636  VarConfig ("GSCDIR", "%s", gscdir);
    3737  VarConfig ("CATDIR", "%s", catdir);
    38   if (VarConfig ("CATMODE", "%s", catalog.catmode) == NULL)
    39     strcpy (catalog.catmode, "RAW");
    4038
    4139  regions = (RegionFile *) NULL;
  • trunk/Ohana/src/opihi/dvo/fitcolors.c

    r4834 r5014  
    1414  int N1, N2, i1, i2, mode[4];
    1515  int Nsec, Nregions, status;
    16   char catdir[256], catmode[16], filename[256], *RegionName, *RegionList;
     16  char catdir[256], filename[256], *RegionName, *RegionList;
    1717  char *cmd, *outcmd, *camera;
    1818  double *M1, *M2;
     
    3737  /* find CATDIR in config system */
    3838  if (VarConfig ("CATDIR", "%s", catdir) == NULL) goto escape;
    39   if (VarConfig ("CATMODE", "%s", catmode) == NULL) strcpy (catmode, "RAW");
    4039
    4140  /* interpret command-line options */
     
    104103  for (k = 0; k < Nregions; k++) {
    105104    /* lock, load, unlock catalog */
    106     strcpy (catalog[k].catmode, catmode);
    107105    sprintf (filename, "%s/%s", catdir, regions[k].name);
    108106    catalog[k].filename = filename;
  • trunk/Ohana/src/opihi/dvo/gimages.c

    r4689 r5014  
    44 
    55  int i, j, N, Nimage, Nfound, *subset, Nsubset, status;
    6   double ra, dec, Ra, Dec, X, Y, Mcal;
     6  double ra, dec, Ra, Dec, X, Y;
    77  double trange, t;
    88  int TimeSelect, PixelCoords, TimeFormat, PhotCodeSelect;
     
    9696    if (Y > image[i].NY) continue;
    9797
     98    /*** XXX we need to re-introduce the use of applyMcal
    9899    Mcal = applyMcal (&image[i], 2048.0, 2048.0);
     100    ***/
     101
    99102    date = sec_to_date (image[i].tzero);
    100103
    101104    if (PixelCoords) {
    102105      fprintf (GetOutfile(), "%3d %s %6.1f %6.1f %20s %5d %2d %4.2f %6.3f %5.3f %5.3f %4x\n",
    103                Nfound, image[i].name, X, Y, date, image[i].nstar, image[i].source, 0.001*image[i].secz, 0.001*Mcal, 0.001*image[i].dMcal, image[i].exptime, image[i].code);
     106               Nfound, image[i].name, X, Y, date, image[i].nstar, image[i].source, image[i].secz_PS, image[i].Mcal_PS, image[i].dMcal_PS, image[i].exptime, image[i].code);
    104107    } else {
    105108      XY_to_RD (&ra, &dec, 0.5*image[i].NX, 0.5*image[i].NY, &image[i].coords);
    106109      fprintf (GetOutfile(), "%3d %s %8.4f %8.4f %20s %5d %2d %4.2f %6.3f %5.3f %5.3f %4x\n",
    107                Nfound, image[i].name, ra, dec, date, image[i].nstar, image[i].source, 0.001*image[i].secz, 0.001*Mcal, 0.001*image[i].dMcal, image[i].exptime, image[i].code);
     110               Nfound, image[i].name, ra, dec, date, image[i].nstar, image[i].source, image[i].secz_PS, image[i].Mcal_PS, image[i].dMcal_PS, image[i].exptime, image[i].code);
    108111    }
    109112    sprintf (name, "IMAGEx:%d", Nfound);
  • trunk/Ohana/src/opihi/dvo/gstar.c

    r4865 r5014  
    1818
    1919  if (VarConfig ("CATDIR", "%s", catdir) == NULL) return (FALSE);
    20   if (VarConfig ("CATMODE", "%s", catalog.catmode) == NULL)
    21     strcpy (catalog.catmode, "RAW");
    2220
    2321  if (!InitPhotcodes ()) return (FALSE);
  • trunk/Ohana/src/opihi/dvo/imdata.c

    r4865 r5014  
    4040    }     
    4141  }
    42 
    43   if (VarConfig ("CATMODE", "%s", catalog.catmode) == NULL)
    44     strcpy (catalog.catmode, "RAW");
    4542
    4643  if (argc != 4) {
  • trunk/Ohana/src/opihi/dvo/imextract.c

    r4689 r5014  
    139139      break;
    140140    case (AIRMASS):
    141       vec[0].elements[N] = 0.001*image[j].secz;
     141      vec[0].elements[N] = image[j].secz_PS;
    142142      break;
    143143    case (MCAL):
    144       vec[0].elements[N] = 0.001*image[j].Mcal;
     144      vec[0].elements[N] = image[j].Mcal_PS;
    145145      break;
    146146    case (dMCAL):
    147       vec[0].elements[N] = 0.001*image[j].dMcal;
     147      vec[0].elements[N] = image[j].dMcal_PS;
    148148      break;
    149149    case (PHOTCODE):
  • trunk/Ohana/src/opihi/dvo/imlist.c

    r4689 r5014  
    8686    XY_to_RD (&r, &d, 0.5*image[i].NX, 0.5*image[i].NY, &image[i].coords);
    8787    fprintf (GetOutfile(), "%3d %s %8.4f %8.4f %f %5d %2d %4.2f %5.3f %5.3f\n",
    88              i, image[i].name, r, d, t, image[i].nstar, image[i].source, 0.001*image[i].secz, 0.001*image[i].Mcal, 0.001*image[i].dMcal);
     88             i, image[i].name, r, d, t, image[i].nstar, image[i].source, image[i].secz_PS, image[i].Mcal_PS, image[i].dMcal_PS);
    8989  }
    9090
  • trunk/Ohana/src/opihi/dvo/imphot.c

    r4689 r5014  
    7474    switch (image[i].order) {
    7575    case 0:
    76       fprintf (stderr, "%s: %d - %d\n", image[i].name, image[i].order, image[i].Mcal);
     76      fprintf (stderr, "%s: %d - %f\n", image[i].name, image[i].order, image[i].Mcal_PS);
    7777      break;
    7878    case 1:
    79       fprintf (stderr, "%s: %d - %d, %d %d\n", image[i].name, image[i].order, image[i].Mcal, image[i].Mx, image[i].My);
     79      fprintf (stderr, "%s: %d - %f, %d %d\n", image[i].name, image[i].order, image[i].Mcal_PS, image[i].Mx, image[i].My);
    8080      break;
    8181    case 2:
    82       fprintf (stderr, "%s: %d - %d, %d %d, %d %d %d\n", image[i].name, image[i].order, image[i].Mcal, image[i].Mx, image[i].My, image[i].Mxx, image[i].Mxy, image[i].Myy);
     82      fprintf (stderr, "%s: %d - %f, %d %d, %d %d %d\n", image[i].name, image[i].order, image[i].Mcal_PS, image[i].Mx, image[i].My, image[i].Mxx, image[i].Mxy, image[i].Myy);
    8383      break;
    8484    case 3:
    85       fprintf (stderr, "%s: %d - %d, %d %d, %d %d %d, %d %d %d %d\n", image[i].name, image[i].order, image[i].Mcal, image[i].Mx, image[i].My,
     85      fprintf (stderr, "%s: %d - %f, %d %d, %d %d %d, %d %d %d %d\n", image[i].name, image[i].order, image[i].Mcal_PS, image[i].Mx, image[i].My,
    8686               image[i].Mxx, image[i].Mxy, image[i].Myy, image[i].Mxxx, image[i].Mxxy, image[i].Mxyy, image[i].Myyy);
    8787      break;
    8888    case 4:
    89       fprintf (stderr, "%s: %d - %d, %d %d, %d %d %d, %d %d %d %d, %d %d %d %d %d\n", image[i].name, image[i].order, image[i].Mcal, image[i].Mx, image[i].My,
     89      fprintf (stderr, "%s: %d - %f, %d %d, %d %d %d, %d %d %d %d, %d %d %d %d %d\n", image[i].name, image[i].order, image[i].Mcal_PS, image[i].Mx, image[i].My,
    9090               image[i].Mxx, image[i].Mxy, image[i].Myy, image[i].Mxxx, image[i].Mxxy, image[i].Mxyy, image[i].Myyy,
    9191               image[i].Mxxxx, image[i].Mxxxy, image[i].Mxxyy, image[i].Mxyyy, image[i].Myyyy);
  • trunk/Ohana/src/opihi/dvo/imstats.c

    r4689 r5014  
    4545  fprintf (stdout, "seq  ra (J2000) dec    time (s)   Nstars\n");
    4646  for (i = 0; i < Nimage; i++) {
    47     Xvec.elements[i] = 0.001*image[i].secz;
     47    Xvec.elements[i] = image[i].secz_PS;
    4848    if (Mcal)
    49       Yvec.elements[i] = 0.001*image[i].Mcal;
     49      Yvec.elements[i] = image[i].Mcal_PS;
    5050    else
    51       Yvec.elements[i] = 0.001*image[i].dMcal;
     51      Yvec.elements[i] = image[i].dMcal_PS;
    5252    if (!FindMosaicForImage (image, Nimage, i)) continue;
    5353    XY_to_RD (&r, &d, 0.5*image[i].NX, 0.5*image[i].NY, &image[i].coords);
    5454    fprintf (stderr, "%d %8.4f %8.4f %10d %6d  %5.3f %6.3f %6.3f\n",
    5555             i, r, d, image[i].tzero, image[i].nstar, Xvec.elements[i],
    56              0.001*image[i].Mcal, 0.001*image[i].dMcal);
     56             image[i].Mcal_PS, image[i].dMcal_PS);
    5757  }
    5858  if (AutoLimits) SetLimits (&Xvec, &Yvec, &graphmode);
  • trunk/Ohana/src/opihi/dvo/lcurve.c

    r4865 r5014  
    1818
    1919  VarConfig ("CATDIR", "%s", catdir);
    20   if (VarConfig ("CATMODE", "%s", catalog.catmode) == NULL)
    21     strcpy (catalog.catmode, "RAW");
    2220
    2321  if (!InitPhotcodes ()) return (FALSE);
  • trunk/Ohana/src/opihi/dvo/lightcurve.c

    r4865 r5014  
    1515
    1616  VarConfig ("CATDIR", "%s", catdir);
    17   if (VarConfig ("CATMODE", "%s", catalog.catmode) == NULL)
    18     strcpy (catalog.catmode, "RAW");
    1917
    2018  if (!InitPhotcodes ()) return (FALSE);
  • trunk/Ohana/src/opihi/dvo/mextract.c

    r4833 r5014  
    2929  /* find CATDIR in config system */
    3030  if (VarConfig ("CATDIR", "%s", catdir) == NULL) goto escape;
    31   if (VarConfig ("CATMODE", "%s", catalog.catmode) == NULL)
    32     strcpy (catalog.catmode, "RAW");
    3331
    3432  /* interpret command-line options */
  • trunk/Ohana/src/opihi/dvo/pmeasure.c

    r4833 r5014  
    2222  if (!GetGraph (&graphmode, NULL, &Ngraph)) return (FALSE);
    2323  if (VarConfig ("CATDIR", "%s", catdir) == NULL) return (FALSE);
    24   if (VarConfig ("CATMODE", "%s", catalog.catmode) == NULL)
    25     strcpy (catalog.catmode, "RAW");
    2624
    2725  regions = (RegionFile *) NULL;
  • trunk/Ohana/src/opihi/dvo/subpix.c

    r4834 r5014  
    2323
    2424  VarConfig ("CATDIR", "%s", catdir);
    25   if (VarConfig ("CATMODE", "%s", catalog.catmode) == NULL)
    26     strcpy (catalog.catmode, "RAW");
    2725
    2826  GetTimeFormat (&TimeReference, &TimeFormat);
     
    150148        RD_to_XY (&X, &Y, Ra, Dec, &image[I].coords);
    151149        t = TimeValue (measure[j].t, TimeReference, TimeFormat);
    152         fprintf (GetOutfile(), "%f %6.3f %7.2f %7.2f %5.3f\n", t, Mabs, X, Y, 0.001*image[I].secz);
     150        fprintf (GetOutfile(), "%f %6.3f %7.2f %7.2f %5.3f\n", t, Mabs, X, Y, image[I].secz_PS);
    153151      }
    154152    }
  • trunk/Ohana/src/relphot/src/ConfigInit.c

    r4865 r5014  
    2222  GetConfig (config, "IMAGE_SCATTER",          "%lf", 0, &IMAGE_SCATTER);
    2323  GetConfig (config, "IMAGE_OFFSET",           "%lf", 0, &IMAGE_OFFSET);
    24 
    25   IMAGE_SCATTER *= 1000;
    26   IMAGE_OFFSET *= 1000;
    2724
    2825  GetConfig (config, "STAR_CHISQ",             "%lf", 0, &STAR_CHISQ);
  • trunk/Ohana/src/relphot/src/ImageOps.c

    r4865 r5014  
    145145
    146146  if (image[i].code & IMAGE_BAD)  return (NO_MAG); 
    147   value = 0.001*image[i].Mcal;
     147  value = image[i].Mcal_PS;
    148148  return (value);
    149149}
     
    217217   
    218218    liststats (list, dlist, N, &stats);
    219     image[i].Mcal  = 1000.0*stats.mean;
    220     image[i].dMcal = 1000.0*stats.sigma;
     219    image[i].Mcal_PS  = stats.mean;
     220    image[i].dMcal_PS = stats.sigma;
    221221    image[i].Xm    = 100.0*log10(stats.chisq);
    222222  }
     
    249249  for (i = N = 0; i < Nimage; i++) {
    250250    if (image[i].code & IMAGE_BAD) continue;
    251     mlist[N] = fabs (image[i].Mcal);
    252     slist[N] = image[i].dMcal;
     251    mlist[N] = fabs (image[i].Mcal_PS);
     252    slist[N] = image[i].dMcal_PS;
    253253    dlist[N] = 1;
    254254    N++;
     
    260260  liststats (slist, dlist, N, &stats);
    261261  MaxScatter = MAX (IMAGE_SCATTER, 2*stats.median);
    262   fprintf (stderr, "Mrel: %f, dMrel: %f, Max Scatter: %f, Max Offset: %f\n", 0.001*MedOffset, 0.001*stats.median, 0.001*MaxScatter, 0.001*MaxOffset);
     262  fprintf (stderr, "Mrel: %f, dMrel: %f, Max Scatter: %f, Max Offset: %f\n", MedOffset, stats.median, MaxScatter, MaxOffset);
    263263 
    264264  Nmark = 0;
     
    266266    mark = FALSE;
    267267    image[i].code &= ~ID_IMAGE_POOR;
    268     mark = (image[i].dMcal > MaxScatter) || (fabs(image[i].Mcal - MedOffset) > MaxOffset);
     268    mark = (image[i].dMcal_PS > MaxScatter) || (fabs(image[i].Mcal_PS - MedOffset) > MaxOffset);
    269269    if (mark) {
    270270      Nmark ++;
     
    296296  /**** dMcal vs airmass ****/
    297297  for (i = 0; i < Nimage; i++) {
    298     Mlist[i] = 0.001*image[i].Mcal;
    299     dlist[i] = 0.001*image[i].dMcal;
    300     xlist[i] = 0.001*image[i].secz;
     298    Mlist[i] = image[i].Mcal_PS;
     299    dlist[i] = image[i].dMcal_PS;
     300    xlist[i] = image[i].secz_PS;
    301301  }
    302302
     
    316316  bzero (Mlist, NBIN*sizeof(double));
    317317  for (i = 0; i < Nimage; i++) {
    318     bin = 0.001*image[i].dMcal / 0.0025;
     318    bin = image[i].dMcal_PS / 0.0025;
    319319    bin = MAX (0, MIN (NBIN - 1, bin));
    320320    Mlist[bin] += 1.0;
     
    413413    if (image[i].code & IMAGE_BAD)  continue;
    414414
    415     list[n] = 0.001*image[i].Mcal;
     415    list[n] = image[i].Mcal_PS;
    416416    dlist[n] = 1;
    417417    n++;
     
    441441    if (image[i].code & IMAGE_BAD)  continue;
    442442
    443     list[n] = 0.001*image[i].dMcal;
     443    list[n] = image[i].dMcal_PS;
    444444    dlist[n] = 1;
    445445    n++;
  • trunk/Ohana/src/relphot/src/MosaicOps.c

    r4865 r5014  
    6969    mosaic[Nmosaic].Xm    = 0.0;
    7070    mosaic[Nmosaic].code  = image[i].code;
    71     mosaic[Nmosaic].secz  = image[i].secz;
     71    mosaic[Nmosaic].secz  = image[i].secz_PS;
    7272
    7373    /* add image to mosaic image list */
     
    134134      Dmin = MIN (Dmin, D);
    135135      Dmax = MAX (Dmax, D);
    136       Mcal += 0.001*image[m].Mcal;
    137       dMcal += 0.001*image[m].dMcal;
     136      Mcal += image[m].Mcal_PS;
     137      dMcal += image[m].dMcal_PS;
    138138      Xm += image[m].Xm;
    139139      /* we are using mosaic.Mcal, not image.Mcal. reset image.Mcal */
    140       image[m].Mcal = 0.0;
    141       image[m].dMcal = image[m].Xm = NO_MAG;
     140      image[m].Mcal_PS = 0.0;
     141      image[m].dMcal_PS = image[m].Xm = NO_MAG;
    142142    }
    143143    dS /= Nimlist[i];
     
    179179    for (j = 0; j < Nimlist[i]; j++) {
    180180      im = imlist[i][j];
    181       image[im].Mcal = 1000.0*mosaic[i].Mcal;
    182       image[im].dMcal = 1000.0*mosaic[i].dMcal;
     181      image[im].Mcal_PS = mosaic[i].Mcal;
     182      image[im].dMcal_PS = mosaic[i].dMcal;
    183183      image[im].Xm = mosaic[i].Xm;
    184184      image[im].code |= (mosaic[i].code & ID_IMAGE_FEW);
     
    405405  for (i = 0; i < Nmosaic; i++) {
    406406    if (mosaic[i].code & IMAGE_BAD) continue;
    407     list[n] = 0.001*mosaic[i].Mcal;
     407    list[n] = mosaic[i].Mcal;
    408408    dlist[n] = 1;
    409409    n++;
     
    432432
    433433    if (mosaic[i].code & IMAGE_BAD) continue;
    434     list[n] = 0.001*mosaic[i].dMcal;
     434    list[n] = mosaic[i].dMcal;
    435435    dlist[n] = 1;
    436436    n++;
     
    538538  liststats (slist, dlist, N, &stats);
    539539  MaxScatter = MAX (IMAGE_SCATTER, 2*stats.median);
    540   fprintf (stderr, "Mrel: %f, dMrel: %f, Max Scatter: %f, Max Offset: %f\n", 0.001*MedOffset, 0.001*stats.median, 0.001*MaxScatter, 0.001*MaxOffset);
     540  fprintf (stderr, "Mrel: %f, dMrel: %f, Max Scatter: %f, Max Offset: %f\n", MedOffset, stats.median, MaxScatter, MaxOffset);
    541541 
    542542  Nmark = 0;
     
    618618
    619619  for (i = 0; i < Nmosaic; i++) {
    620     Mlist[i] = 0.001*mosaic[i].Mcal;
    621     dlist[i] = 0.001*mosaic[i].dMcal;
    622     xlist[i] = 0.001*mosaic[i].secz;
     620    Mlist[i] = mosaic[i].Mcal;
     621    dlist[i] = mosaic[i].dMcal;
     622    xlist[i] = mosaic[i].secz;
    623623  }
    624624
     
    640640  bzero (Mlist, NBIN*sizeof(double));
    641641  for (i = 0; i < Nmosaic; i++) {
    642     bin = 0.001*mosaic[i].dMcal / 0.0025;
     642    bin = mosaic[i].dMcal / 0.0025;
    643643    bin = MAX (0, MIN (NBIN - 1, bin));
    644644    Mlist[bin] += 1.0;
  • trunk/Ohana/src/relphot/src/find_images.c

    r4864 r5014  
    104104        if (RESET) {
    105105          assignMcal (&image[nimage], (double *) NULL, -1);
    106           image[nimage].dMcal = NO_MAG;
     106          image[nimage].dMcal_PS = NO_MAG;
    107107          image[nimage].code &= ~ID_IMAGE_POOR;
    108108        }
  • trunk/Ohana/src/relphot/src/gcatalog.c

    r4828 r5014  
    55  char mode;
    66
    7   /* no autodetect for CATMODE yet */
    8   strcpy (catalog[0].catmode, CATMODE);
    9 
    107  if (FINAL) {
    118    mode = LOAD_AVES | LOAD_MEAS | LOAD_MISS | LOAD_SECF;
     
    1310    mode = LOAD_AVES | LOAD_MEAS | LOAD_SECF;
    1411  }   
     12
     13  /* CATMODE and CATFORMAT determined from catalog */
    1514
    1615  if (!load_catalog (catalog, mode, VERBOSE)) {
  • trunk/Ohana/src/relphot/src/wcatalog.c

    r4828 r5014  
    33void wcatalog (Catalog *catalog) {
    44 
    5   /* set catalog format (elixir, loneos, etc) */
    6   if (!strcmp (CATFORMAT, "INTERNAL")) {
    7     sprintf (catalog[0].average_format, "DVO_AVERAGE");
    8     sprintf (catalog[0].measure_format, "DVO_MEASURE");
    9   } else {
    10     sprintf (catalog[0].average_format, "DVO_AVERAGE_%s", CATFORMAT);
    11     sprintf (catalog[0].measure_format, "DVO_MEASURE_%s", CATFORMAT);
    12   }
     5  /* CATMODE and CATFORMAT determined from catalog */
    136
    147  if (!save_catalog (catalog, VERBOSE)) {
  • trunk/Ohana/src/uniphot/include/uniphot.h

    r4865 r5014  
    55# ifdef ANSI
    66#   define F_SETFL      4   
    7 #   define O_NONBLOCK 0200000 
    8 #   define       AF_UNIX         1         
    9 #   define       SOCK_STREAM     1         
    10 #define ENOENT          2       /* No such file or directory    */
     7#   define O_NONBLOCK   0200000 
     8#   define AF_UNIX      1         
     9#   define SOCK_STREAM  1         
     10#   define ENOENT       2       /* No such file or directory    */
    1111# endif /* ANSI */
    1212
  • trunk/Ohana/src/uniphot/src/fit_groups.c

    r2492 r5014  
    44
    55  int i, j, Nlist;
    6   short Mcal, Mgrp;
     6  float Mcal, Mgrp;
    77  double *mlist, *dlist;
    88  StatType stats;
     
    1818      if (tgroup[i].image[j][0].code & IMAGE_BAD) continue;
    1919      sgroup = (Group *) tgroup[i].imlink[j][0].sgroup;
    20       Mcal = tgroup[i].image[j][0].Mcal;
     20      Mcal = tgroup[i].image[j][0].Mcal_PS;
    2121      Mgrp = sgroup[0].M;
    2222      mlist[Nlist] = (Mcal - Mgrp);
    23       dlist[Nlist] = tgroup[i].image[j][0].dMcal;
     23      dlist[Nlist] = tgroup[i].image[j][0].dMcal_PS;
    2424      Nlist ++;
    2525    }
     
    4141
    4242  int i, j, Nlist;
    43   short Mcal, Mgrp;
     43  float Mcal, Mgrp;
    4444  double *mlist, *dlist;
    4545  StatType stats;
     
    5656      if (sgroup[i].image[j][0].code & IMAGE_BAD) continue;
    5757      tgroup = (Group *) sgroup[i].imlink[j][0].tgroup;
    58       Mcal = sgroup[i].image[j][0].Mcal;
     58      Mcal = sgroup[i].image[j][0].Mcal_PS;
    5959      Mgrp = tgroup[0].M;
    6060      mlist[Nlist] = (Mcal - Mgrp);
    61       dlist[Nlist] = sgroup[i].image[j][0].dMcal;
     61      dlist[Nlist] = sgroup[i].image[j][0].dMcal_PS;
    6262      Nlist ++;
    6363    }
  • trunk/Ohana/src/uniphot/src/gcatalog.c

    r4828 r5014  
    55  int mode;
    66
    7   /* no autodetect for CATMODE yet */
    8   strcpy (catalog[0].catmode, CATMODE);
     7  mode = LOAD_AVES | LOAD_MEAS | LOAD_MISS | LOAD_SECF;
    98
    10   mode = LOAD_AVES | LOAD_MEAS | LOAD_MISS | LOAD_SECF;
     9  /* CATMODE and CATFORMAT determined from catalog */
    1110
    1211  switch (lock_catalog (catalog, LCK_SOFT)) {
  • trunk/Ohana/src/uniphot/src/update.c

    r4864 r5014  
    2222  for (i = 0; i < Nsgroup; i++) {
    2323    for (j = 0; j < sgroup[i].Nimage; j++) {
    24       sgroup[i].image[j][0].Mcal -= sgroup[i].M;
     24      sgroup[i].image[j][0].Mcal_PS -= sgroup[i].M;
    2525    }
    2626  }
  • trunk/Ohana/src/uniphot/src/wcatalog.c

    r4828 r5014  
    33void wcatalog (Catalog *catalog) {
    44
    5   /* set catalog format (elixir, loneos, etc) */
    6   if (!strcmp (CATFORMAT, "INTERNAL")) {
    7     sprintf (catalog[0].average_format, "DVO_AVERAGE");
    8     sprintf (catalog[0].measure_format, "DVO_MEASURE");
    9   } else {
    10     sprintf (catalog[0].average_format, "DVO_AVERAGE_%s", CATFORMAT);
    11     sprintf (catalog[0].measure_format, "DVO_MEASURE_%s", CATFORMAT);
    12   }
     5  /* CATMODE and CATFORMAT determined from catalog */
    136
    147  /** write out catalog, free memory **/
Note: See TracChangeset for help on using the changeset viewer.