IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 37912


Ignore:
Timestamp:
Feb 16, 2015, 8:17:13 PM (11 years ago)
Author:
eugene
Message:

adding XoffCAM,YoffCAM to measure.d, measure-ps-v5.d (adding methods for PS1_V5alt)

Location:
branches/eam_branches/ipp-20150112/Ohana/src/libdvo
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • branches/eam_branches/ipp-20150112/Ohana/src/libdvo/include/dvo.h

    r37807 r37912  
    554554Measure *Measure_PS1_V4alt_ToInternal (Average *ave, Measure_PS1_V4alt *in, off_t Nvalues);
    555555
     556typedef struct {
     557  double           R;                    // RA at epoch (degrees)
     558  double           D;                    // DEC at epoch (degrees)
     559  float            M;                    // catalog mag (mag)
     560  float            dM;                   // mag error (mag)
     561  float            Map;                  // aperture mag (mag)
     562  float            dMap;                 // aperture mag (mag)
     563  float            Mkron;                // kron magnitude (mag)
     564  float            dMkron;               // kron magnitude error (mag)
     565  float            Mcal;                 // image cal mag (mag)
     566  float            dMcal;                // systematic calibration error (mag)
     567  float            dt;                   // exposure time (2.5*log(exptime))
     568  float            FluxPSF;              // flux from psf fit (counts/sec)
     569  float            dFluxPSF;             // error on psf flux (counts/sec)
     570  float            FluxKron;             // flux from kron ap (counts/sec)
     571  float            dFluxKron;            // error on kron flux (counts/sec)
     572  float            FluxAp;               // flux from ap ap (counts/sec)
     573  float            dFluxAp;              // error on ap flux (counts/sec)
     574  float            airmass;              // (airmass - 1) (airmass)
     575  float            az;                   // telescope azimuth
     576  float            Xccd;                 // X coord on chip (raw value) (pixels)
     577  float            Yccd;                 // Y coord on chip (raw value) (pixels)
     578  float            Xfix;                 // X coord after correction (pixels)
     579  float            Yfix;                 // Y coord after correction (pixels)
     580  float            XoffKH;               // X offset from correction (pixels)
     581  float            YoffKH;               // Y offset from correction (pixels)
     582  float            XoffDCR;              // X offset from correction (pixels)
     583  float            YoffDCR;              // Y offset from correction (pixels)
     584  float            RoffGAL;              // RA offset from correction (arcsec)
     585  float            DoffGAL;              // DEC offset from correction (arcsec)
     586  float            Sky;                  // local estimate of sky flux (counts/sec)
     587  float            dSky;                 // local estimate of sky flux (counts/sec)
     588  int              t;                    // time in seconds (UNIX)
     589  unsigned int     averef;               // reference to average entry     
     590  unsigned int     detID;                // detection ID
     591  unsigned int     objID;                // unique ID for object in table
     592  unsigned int     catID;                // unique ID for table in which object was first realized
     593  uint64_t         extID;                // external ID (eg PSPS detID)
     594  unsigned int     imageID;              // reference to DVO image ID
     595  float            psfQF;                // psf coverage/quality factor
     596  float            psfQFperf;            // psf coverage / quality factor (all mask bits)
     597  float            psfChisq;             // psf fit chisq
     598  int              psfNdof;              // psf degrees of freedom
     599  int              psfNpix;              // psf number of pixels
     600  int              photFlags2;           // flags supplied by photometry program
     601  float            extNsigma;            // Nsigma deviation towards EXT
     602  short            FWx;                  // object fwhm major axis (1/100 of pixels)
     603  short            FWy;                  // object fwhm minor axis (1/100 of pixels )
     604  short            theta;                // angle wrt ccd X dir ((0xffff/360) deg)
     605  short            Mxx;                  // second moments in pixel coords (1/100 of pixels)
     606  short            Mxy;                  // second moments in pixel coords (1/100 of pixels)
     607  short            Myy;                  // second moments in pixel coords (1/100 of pixels)
     608  unsigned short   t_msec;               // time fraction of second (milliseconds)
     609  unsigned short   photcode;             // photcode
     610  short            dXccd;                // X coord error on chip (1/100 of pixels)
     611  short            dYccd;                // Y coord error on chip (1/100 of pixels)
     612  short            dRsys;                // systematic error from astrom (1/100 of pixels)
     613  short            posangle;             // position angle sky to chip ((0xffff/360) deg)
     614  float            pltscale;             // plate scale (arcsec/pixel)
     615  unsigned int     dbFlags;              // flags supplied by analysis in database
     616  unsigned int     photFlags;            // flags supplied by photometry program
     617  int              padding;              // padding to ensure 8byte blocks
     618} Measure_PS1_V5alt;
     619
     620Measure *Measure_PS1_V5alt_ToInternal (Average *ave, Measure_PS1_V5alt *in, off_t Nvalues);
     621int gfits_convert_Measure_PS1_V5alt (Measure_PS1_V5alt *data, off_t size, off_t nitems);
     622Measure_PS1_V5alt *gfits_table_get_Measure_PS1_V5alt (FTable *ftable, off_t *Ndata, char *swapped);
     623
    556624// alternate version of PS1_V5 (old dev version)
    557625typedef struct {
  • branches/eam_branches/ipp-20150112/Ohana/src/libdvo/src/dvo_catalog.c

    r37807 r37912  
    273273 measure->XoffDCR   = NAN;
    274274 measure->YoffDCR   = NAN;
     275 measure->XoffCAM   = NAN;
     276 measure->YoffCAM   = NAN;
    275277 measure->RoffGAL   = NAN;
    276278 measure->DoffGAL   = NAN;
  • branches/eam_branches/ipp-20150112/Ohana/src/libdvo/src/dvo_convert.c

    r37807 r37912  
    204204    free (tmpMeasure);
    205205    *format = DVO_FORMAT_PS1_V4;
     206    return (measure);
     207  }
     208
     209  // block to convert PV1_V5_0 tables (PS1_V5 made before the XoffCAM,YoffCAM addition)
     210  if (!strcmp (extname, "DVO_MEASURE_PS1_V5") && (ftable[0].header[0].Naxis[0] == 232)) {
     211    fprintf (stderr, "reading alt PS1_V5 format\n");
     212    Measure_PS1_V5alt *tmpMeasure;
     213    tmpMeasure = gfits_table_get_Measure_PS1_V5alt (ftable, Nmeasure, NULL);
     214    if (!tmpMeasure) {
     215      fprintf (stderr, "ERROR: failed to read measures\n");
     216      exit (2);
     217    }
     218    myAssert (average, "conversion to internal needs average table");
     219    measure = Measure_PS1_V5alt_ToInternal (average, tmpMeasure, *Nmeasure);
     220    free (tmpMeasure);
     221    *format = DVO_FORMAT_PS1_V5;
    206222    return (measure);
    207223  }
  • branches/eam_branches/ipp-20150112/Ohana/src/libdvo/src/dvo_convert_PS1_V5.c

    r37807 r37912  
    1313    dvo_measure_init (&out[i]);
    1414
     15    out[i].R          = in[i].R;
     16    out[i].D          = in[i].D;
     17    out[i].M          = in[i].M;
     18    out[i].dM         = in[i].dM;
     19    out[i].Map        = in[i].Map;
     20    out[i].dMap       = in[i].dMap;
     21    out[i].Mkron      = in[i].Mkron;
     22    out[i].dMkron     = in[i].dMkron;
     23    out[i].Mcal       = in[i].Mcal;
     24    out[i].dMcal      = in[i].dMcal;
     25    out[i].dt         = in[i].dt;
     26    out[i].FluxPSF    = in[i].FluxPSF;
     27    out[i].dFluxPSF   = in[i].dFluxPSF;
     28    out[i].FluxKron   = in[i].FluxKron;
     29    out[i].dFluxKron  = in[i].dFluxKron;
     30    out[i].FluxAp     = in[i].FluxAp;
     31    out[i].dFluxAp    = in[i].dFluxAp;
     32    out[i].airmass    = in[i].airmass;
     33    out[i].az         = in[i].az;
     34    out[i].Xccd       = in[i].Xccd;
     35    out[i].Yccd       = in[i].Yccd;
     36    out[i].Xfix       = in[i].Xfix;
     37    out[i].Yfix       = in[i].Yfix;
     38    out[i].XoffKH     = in[i].XoffKH;
     39    out[i].YoffKH     = in[i].YoffKH;
     40    out[i].XoffDCR    = in[i].XoffDCR;
     41    out[i].YoffDCR    = in[i].YoffDCR;
     42    out[i].XoffCAM    = in[i].XoffCAM;
     43    out[i].YoffCAM    = in[i].YoffCAM;
     44    out[i].RoffGAL    = in[i].RoffGAL;
     45    out[i].DoffGAL    = in[i].DoffGAL;
     46    out[i].Sky        = in[i].Sky;
     47    out[i].dSky       = in[i].dSky;
     48    out[i].t          = in[i].t;
     49    out[i].averef     = in[i].averef;
     50    out[i].detID      = in[i].detID;
     51    out[i].objID      = in[i].objID;
     52    out[i].catID      = in[i].catID;
     53    out[i].extID      = in[i].extID;
     54    out[i].imageID    = in[i].imageID;
     55    out[i].psfQF      = in[i].psfQF;
     56    out[i].psfQFperf  = in[i].psfQFperf;
     57    out[i].psfChisq   = in[i].psfChisq;
     58    out[i].psfNdof    = in[i].psfNdof;
     59    out[i].psfNpix    = in[i].psfNpix;
     60    out[i].extNsigma  = in[i].extNsigma;
     61    out[i].FWx        = in[i].FWx;
     62    out[i].FWy        = in[i].FWy;
     63    out[i].theta      = in[i].theta;
     64    out[i].Mxx        = in[i].Mxx;
     65    out[i].Mxy        = in[i].Mxy;
     66    out[i].Myy        = in[i].Myy;
     67    out[i].t_msec     = in[i].t_msec;
     68    out[i].photcode   = in[i].photcode;
     69    out[i].dXccd      = in[i].dXccd;
     70    out[i].dYccd      = in[i].dYccd;
     71    out[i].dRsys      = in[i].dRsys;
     72    out[i].posangle   = in[i].posangle;
     73    out[i].pltscale   = in[i].pltscale;
     74    out[i].dbFlags    = in[i].dbFlags;
     75    out[i].photFlags  = in[i].photFlags;
     76    out[i].photFlags2 = in[i].photFlags2;
     77  }
     78  return (out);
     79}
     80
     81Measure_PS1_V5 *MeasureInternalTo_PS1_V5 (Average *ave, Measure *in, off_t Nvalues) {
     82
     83  off_t i;
     84  Measure_PS1_V5 *out;
     85
     86  ALLOCATE_ZERO (out, Measure_PS1_V5, Nvalues);
     87
     88  for (i = 0; i < Nvalues; i++) {
    1589    out[i].R          = in[i].R;
    1690    out[i].D          = in[i].D;
     
    77151}
    78152
    79 Measure_PS1_V5 *MeasureInternalTo_PS1_V5 (Average *ave, Measure *in, off_t Nvalues) {
    80 
    81   off_t i;
    82   Measure_PS1_V5 *out;
    83 
    84   ALLOCATE_ZERO (out, Measure_PS1_V5, Nvalues);
    85 
    86   for (i = 0; i < Nvalues; i++) {
     153// 'primary' is needed to conform with the API for Loneos and Elixir, but is not used
     154Average *Average_PS1_V5_ToInternal (Average_PS1_V5 *in, off_t Nvalues, SecFilt **primary) {
     155
     156  off_t i;
     157  Average *out;
     158
     159  ALLOCATE_ZERO (out, Average, Nvalues);
     160
     161  for (i = 0; i < Nvalues; i++) {
     162    dvo_average_init (&out[i]);
     163
     164    out[i].R             = in[i].R;     
     165    out[i].D             = in[i].D;     
     166    out[i].dR            = in[i].dR;
     167    out[i].dD            = in[i].dD;
     168    out[i].uR            = in[i].uR;
     169    out[i].uD            = in[i].uD;
     170    out[i].duR           = in[i].duR;
     171    out[i].duD           = in[i].duD;
     172    out[i].P             = in[i].P;
     173    out[i].dP            = in[i].dP;
     174
     175    out[i].Rstk          = in[i].Rstk;     
     176    out[i].Dstk          = in[i].Dstk;     
     177    out[i].dRstk         = in[i].dRstk;
     178    out[i].dDstk         = in[i].dDstk;
     179
     180    out[i].ChiSqAve      = in[i].ChiSqAve;     
     181    out[i].ChiSqPM       = in[i].ChiSqPM;     
     182    out[i].ChiSqPar      = in[i].ChiSqPar;     
     183    out[i].Tmean         = in[i].Tmean;     
     184    out[i].Trange        = in[i].Trange;     
     185
     186    out[i].psfQF         = in[i].psfQF;
     187    out[i].psfQFperf     = in[i].psfQFperf;
     188    out[i].stargal       = in[i].stargal;     
     189    out[i].Npos          = in[i].Npos;     
     190
     191    out[i].Nmeasure      = in[i].Nmeasure;     
     192    out[i].Nmissing      = in[i].Nmissing;     
     193    out[i].Nlensing      = in[i].Nlensing;     
     194    out[i].Nlensobj      = in[i].Nlensobj;     
     195    out[i].Nstarpar      = in[i].Nstarpar;     
     196    out[i].Nextend       = in[i].Nextend;     
     197
     198    out[i].measureOffset = in[i].measureOffset;
     199    out[i].missingOffset = in[i].missingOffset;
     200    out[i].lensingOffset = in[i].lensingOffset;
     201    out[i].lensobjOffset = in[i].lensobjOffset;
     202    out[i].starparOffset = in[i].starparOffset;
     203    out[i].extendOffset  = in[i].extendOffset;
     204
     205    out[i].refColorBlue  = in[i].refColorBlue;
     206    out[i].refColorRed   = in[i].refColorRed;
     207
     208    out[i].tessID        = in[i].tessID;
     209    out[i].skycellID     = in[i].skycellID;
     210    out[i].projectionID  = in[i].projectionID;
     211
     212    out[i].flags         = in[i].flags;   
     213    out[i].photFlagsUpper = in[i].photFlagsUpper;   
     214    out[i].photFlagsLower = in[i].photFlagsLower;   
     215    out[i].objID         = in[i].objID;
     216    out[i].catID         = in[i].catID;
     217    out[i].extID         = in[i].extID;
     218    out[i].extIDgc       = in[i].extIDgc;
     219  }
     220  return (out);
     221}
     222
     223// 'primary' is needed to conform with the API for Loneos and Elixir, but is not used
     224Average_PS1_V5 *AverageInternalTo_PS1_V5 (Average *in, off_t Nvalues, SecFilt *primary) {
     225
     226  off_t i;
     227  Average_PS1_V5 *out;
     228
     229  ALLOCATE_ZERO (out, Average_PS1_V5, Nvalues);
     230
     231  for (i = 0; i < Nvalues; i++) {
     232    out[i].R              = in[i].R;     
     233    out[i].D              = in[i].D;     
     234    out[i].dR             = in[i].dR;
     235    out[i].dD             = in[i].dD;
     236    out[i].uR             = in[i].uR;
     237    out[i].uD             = in[i].uD;
     238    out[i].duR            = in[i].duR;
     239    out[i].duD            = in[i].duD;
     240    out[i].P              = in[i].P;
     241    out[i].dP             = in[i].dP;
     242                         
     243    out[i].Rstk           = in[i].Rstk;     
     244    out[i].Dstk           = in[i].Dstk;     
     245    out[i].dRstk          = in[i].dRstk;
     246    out[i].dDstk          = in[i].dDstk;
     247                         
     248    out[i].ChiSqAve       = in[i].ChiSqAve;     
     249    out[i].ChiSqPM        = in[i].ChiSqPM;     
     250    out[i].ChiSqPar       = in[i].ChiSqPar;     
     251    out[i].Tmean          = in[i].Tmean;     
     252    out[i].Trange         = in[i].Trange;     
     253                         
     254    out[i].psfQF          = in[i].psfQF;
     255    out[i].psfQFperf      = in[i].psfQFperf;
     256    out[i].stargal        = in[i].stargal;     
     257    out[i].Npos           = in[i].Npos;     
     258                         
     259    out[i].Nmeasure       = in[i].Nmeasure;     
     260    out[i].Nmissing       = in[i].Nmissing;     
     261    out[i].Nlensing       = in[i].Nlensing;     
     262    out[i].Nlensobj       = in[i].Nlensobj;     
     263    out[i].Nstarpar       = in[i].Nstarpar;     
     264    out[i].Nextend        = in[i].Nextend;     
     265                         
     266    out[i].measureOffset  = in[i].measureOffset;
     267    out[i].missingOffset  = in[i].missingOffset;
     268    out[i].lensingOffset  = in[i].lensingOffset;
     269    out[i].lensobjOffset  = in[i].lensobjOffset;
     270    out[i].starparOffset  = in[i].starparOffset;
     271    out[i].extendOffset   = in[i].extendOffset;
     272                         
     273    out[i].refColorBlue   = in[i].refColorBlue;
     274    out[i].refColorRed    = in[i].refColorRed;
     275                         
     276    out[i].tessID         = in[i].tessID;
     277    out[i].skycellID      = in[i].skycellID;
     278    out[i].projectionID   = in[i].projectionID;
     279                         
     280    out[i].flags          = in[i].flags;   
     281    out[i].photFlagsUpper = in[i].photFlagsUpper;   
     282    out[i].photFlagsLower = in[i].photFlagsLower;   
     283    out[i].objID          = in[i].objID;
     284    out[i].catID          = in[i].catID;
     285    out[i].extID          = in[i].extID;
     286    out[i].extIDgc        = in[i].extIDgc;
     287  }
     288  return (out);
     289}
     290
     291SecFilt *SecFilt_PS1_V5_ToInternal (SecFilt_PS1_V5 *in, off_t Nvalues) {
     292
     293  off_t i;
     294  SecFilt *out;
     295
     296  ALLOCATE_ZERO (out, SecFilt, Nvalues);
     297
     298  for (i = 0; i < Nvalues; i++) {
     299    dvo_secfilt_init (&out[i]);
     300
     301    out[i].M             = in[i].M;     
     302    out[i].dM            = in[i].dM;     
     303    out[i].Map           = in[i].Map;     
     304    out[i].dMap          = in[i].dMap;     
     305    out[i].sMap          = in[i].sMap;     
     306    out[i].Mkron         = in[i].Mkron;     
     307    out[i].dMkron        = in[i].dMkron;     
     308    out[i].sMkron        = in[i].sMkron;     
     309
     310    out[i].psfQfMax      = in[i].psfQfMax;     
     311    out[i].psfQfPerfMax  = in[i].psfQfPerfMax;     
     312
     313    out[i].Mstdev        = in[i].Mstdev;     
     314    out[i].Mmin          = in[i].Mmin;     
     315    out[i].Mmax          = in[i].Mmax;     
     316    out[i].Mchisq        = in[i].Mchisq;     
     317
     318    out[i].Ncode         = in[i].Ncode;
     319    out[i].Nused         = in[i].Nused;
     320    out[i].NusedKron     = in[i].NusedKron;
     321    out[i].NusedAp       = in[i].NusedAp;
     322
     323    out[i].flags         = in[i].flags;     
     324
     325    out[i].MpsfStk       = in[i].MpsfStk;
     326    out[i].FpsfStk       = in[i].FpsfStk;
     327    out[i].dFpsfStk      = in[i].dFpsfStk;
     328
     329    out[i].MkronStk      = in[i].MkronStk;
     330    out[i].FkronStk      = in[i].FkronStk;
     331    out[i].dFkronStk     = in[i].dFkronStk;
     332
     333    out[i].MapStk        = in[i].MapStk;
     334    out[i].FapStk        = in[i].FapStk;
     335    out[i].dFapStk       = in[i].dFapStk;
     336
     337    out[i].Nstack        = in[i].Nstack;     
     338    out[i].NstackDet     = in[i].NstackDet;     
     339
     340    out[i].stackPrmryOff = in[i].stackPrmryOff;     
     341    out[i].stackBestOff  = in[i].stackBestOff;     
     342
     343    out[i].MpsfWrp       = in[i].MpsfWrp;
     344    out[i].FpsfWrp       = in[i].FpsfWrp;
     345    out[i].dFpsfWrp      = in[i].dFpsfWrp;
     346    out[i].sFpsfWrp      = in[i].sFpsfWrp;
     347
     348    out[i].MkronWrp      = in[i].MkronWrp;
     349    out[i].FkronWrp      = in[i].FkronWrp;
     350    out[i].dFkronWrp     = in[i].dFkronWrp;
     351    out[i].sFkronWrp     = in[i].sFkronWrp;
     352
     353    out[i].MapWrp        = in[i].MapWrp;
     354    out[i].FapWrp        = in[i].FapWrp;
     355    out[i].dFapWrp       = in[i].dFapWrp;
     356    out[i].sFapWrp       = in[i].sFapWrp;
     357
     358    out[i].NusedWrp      = in[i].NusedWrp;
     359    out[i].NusedKronWrp  = in[i].NusedKronWrp;
     360    out[i].NusedApWrp    = in[i].NusedApWrp;
     361
     362    out[i].Nwarp         = in[i].Nwarp;     
     363    out[i].NwarpGood     = in[i].NwarpGood;     
     364
     365    out[i].ubercalDist   = in[i].ubercalDist;     
     366  }
     367  return (out);
     368}
     369
     370SecFilt_PS1_V5 *SecFiltInternalTo_PS1_V5 (SecFilt *in, off_t Nvalues) {
     371
     372  off_t i;
     373  SecFilt_PS1_V5 *out;
     374
     375  ALLOCATE_ZERO (out, SecFilt_PS1_V5, Nvalues);
     376
     377  for (i = 0; i < Nvalues; i++) {
     378
     379    out[i].M             = in[i].M;     
     380    out[i].dM            = in[i].dM;     
     381    out[i].Map           = in[i].Map;     
     382    out[i].dMap          = in[i].dMap;     
     383    out[i].sMap          = in[i].sMap;     
     384    out[i].Mkron         = in[i].Mkron;     
     385    out[i].dMkron        = in[i].dMkron;     
     386    out[i].sMkron        = in[i].sMkron;     
     387
     388    out[i].psfQfMax      = in[i].psfQfMax;     
     389    out[i].psfQfPerfMax  = in[i].psfQfPerfMax;     
     390
     391    out[i].Mstdev        = in[i].Mstdev;     
     392    out[i].Mmin          = in[i].Mmin;     
     393    out[i].Mmax          = in[i].Mmax;     
     394    out[i].Mchisq        = in[i].Mchisq;     
     395
     396    out[i].Ncode         = in[i].Ncode;
     397    out[i].Nused         = in[i].Nused;
     398    out[i].NusedKron     = in[i].NusedKron;
     399    out[i].NusedAp       = in[i].NusedAp;
     400
     401    out[i].flags         = in[i].flags;     
     402
     403    out[i].MpsfStk       = in[i].MpsfStk;
     404    out[i].FpsfStk       = in[i].FpsfStk;
     405    out[i].dFpsfStk      = in[i].dFpsfStk;
     406
     407    out[i].MkronStk      = in[i].MkronStk;
     408    out[i].FkronStk      = in[i].FkronStk;
     409    out[i].dFkronStk     = in[i].dFkronStk;
     410
     411    out[i].MapStk        = in[i].MapStk;
     412    out[i].FapStk        = in[i].FapStk;
     413    out[i].dFapStk       = in[i].dFapStk;
     414
     415    out[i].Nstack        = in[i].Nstack;     
     416    out[i].NstackDet     = in[i].NstackDet;     
     417
     418    out[i].stackPrmryOff = in[i].stackPrmryOff;     
     419    out[i].stackBestOff  = in[i].stackBestOff;     
     420
     421    out[i].MpsfWrp       = in[i].MpsfWrp;
     422    out[i].FpsfWrp       = in[i].FpsfWrp;
     423    out[i].dFpsfWrp      = in[i].dFpsfWrp;
     424    out[i].sFpsfWrp      = in[i].sFpsfWrp;
     425
     426    out[i].MkronWrp      = in[i].MkronWrp;
     427    out[i].FkronWrp      = in[i].FkronWrp;
     428    out[i].dFkronWrp     = in[i].dFkronWrp;
     429    out[i].sFkronWrp     = in[i].sFkronWrp;
     430
     431    out[i].MapWrp        = in[i].MapWrp;
     432    out[i].FapWrp        = in[i].FapWrp;
     433    out[i].dFapWrp       = in[i].dFapWrp;
     434    out[i].sFapWrp       = in[i].sFapWrp;
     435
     436    out[i].NusedWrp      = in[i].NusedWrp;
     437    out[i].NusedKronWrp  = in[i].NusedKronWrp;
     438    out[i].NusedApWrp    = in[i].NusedApWrp;
     439
     440    out[i].Nwarp         = in[i].Nwarp;     
     441    out[i].NwarpGood     = in[i].NwarpGood;     
     442
     443    out[i].ubercalDist   = in[i].ubercalDist;     
     444  }
     445  return (out);
     446}
     447
     448Lensing *Lensing_PS1_V5_ToInternal (Lensing_PS1_V5 *in, off_t Nvalues) {
     449
     450  off_t i;
     451  Lensing *out;
     452
     453  ALLOCATE_ZERO (out, Lensing, Nvalues);
     454
     455  for (i = 0; i < Nvalues; i++) {
     456    dvo_lensing_init (&out[i]);
     457
     458    out[i].X11_sm_obj  = in[i].X11_sm_obj;     
     459    out[i].X12_sm_obj  = in[i].X12_sm_obj;     
     460    out[i].X22_sm_obj  = in[i].X22_sm_obj;     
     461    out[i].E1_sm_obj   = in[i].E1_sm_obj;     
     462    out[i].E2_sm_obj   = in[i].E2_sm_obj;     
     463                                         
     464    out[i].X11_sh_obj  = in[i].X11_sh_obj;     
     465    out[i].X12_sh_obj  = in[i].X12_sh_obj;     
     466    out[i].X22_sh_obj  = in[i].X22_sh_obj;     
     467    out[i].E1_sh_obj   = in[i].E1_sh_obj;     
     468    out[i].E2_sh_obj   = in[i].E2_sh_obj;     
     469                                         
     470    out[i].X11_sm_psf  = in[i].X11_sm_psf;
     471    out[i].X12_sm_psf  = in[i].X12_sm_psf;
     472    out[i].X22_sm_psf  = in[i].X22_sm_psf;
     473    out[i].E1_sm_psf   = in[i].E1_sm_psf;
     474    out[i].E2_sm_psf   = in[i].E2_sm_psf;     
     475                                         
     476    out[i].X11_sh_psf  = in[i].X11_sh_psf;
     477    out[i].X12_sh_psf  = in[i].X12_sh_psf;
     478    out[i].X22_sh_psf  = in[i].X22_sh_psf;
     479    out[i].E1_sh_psf   = in[i].E1_sh_psf;
     480    out[i].E2_sh_psf   = in[i].E2_sh_psf;
     481
     482    out[i].F_ApR5      = in[i].F_ApR5;
     483    out[i].dF_ApR5     = in[i].dF_ApR5;
     484    out[i].sF_ApR5     = in[i].sF_ApR5;
     485    out[i].fF_ApR5     = in[i].fF_ApR5;
     486                                   
     487    out[i].F_ApR6      = in[i].F_ApR6;
     488    out[i].dF_ApR6     = in[i].dF_ApR6;
     489    out[i].sF_ApR6     = in[i].sF_ApR6;
     490    out[i].fF_ApR6     = in[i].fF_ApR6;
     491                                   
     492    out[i].detID       = in[i].detID;
     493    out[i].objID       = in[i].objID;
     494    out[i].catID       = in[i].catID;
     495
     496    out[i].averef      = in[i].averef;
     497
     498    out[i].imageID     = in[i].imageID;
     499  }
     500  return (out);
     501}
     502
     503Lensing_PS1_V5 *LensingInternalTo_PS1_V5 (Lensing *in, off_t Nvalues) {
     504
     505  off_t i;
     506  Lensing_PS1_V5 *out;
     507
     508  ALLOCATE_ZERO (out, Lensing_PS1_V5, Nvalues);
     509
     510  for (i = 0; i < Nvalues; i++) {
     511
     512    out[i].X11_sm_obj  = in[i].X11_sm_obj;     
     513    out[i].X12_sm_obj  = in[i].X12_sm_obj;     
     514    out[i].X22_sm_obj  = in[i].X22_sm_obj;     
     515    out[i].E1_sm_obj   = in[i].E1_sm_obj;     
     516    out[i].E2_sm_obj   = in[i].E2_sm_obj;     
     517                                         
     518    out[i].X11_sh_obj  = in[i].X11_sh_obj;     
     519    out[i].X12_sh_obj  = in[i].X12_sh_obj;     
     520    out[i].X22_sh_obj  = in[i].X22_sh_obj;     
     521    out[i].E1_sh_obj   = in[i].E1_sh_obj;     
     522    out[i].E2_sh_obj   = in[i].E2_sh_obj;     
     523                                         
     524    out[i].X11_sm_psf  = in[i].X11_sm_psf;
     525    out[i].X12_sm_psf  = in[i].X12_sm_psf;
     526    out[i].X22_sm_psf  = in[i].X22_sm_psf;
     527    out[i].E1_sm_psf   = in[i].E1_sm_psf;
     528    out[i].E2_sm_psf   = in[i].E2_sm_psf;     
     529                                         
     530    out[i].X11_sh_psf  = in[i].X11_sh_psf;
     531    out[i].X12_sh_psf  = in[i].X12_sh_psf;
     532    out[i].X22_sh_psf  = in[i].X22_sh_psf;
     533    out[i].E1_sh_psf   = in[i].E1_sh_psf;
     534    out[i].E2_sh_psf   = in[i].E2_sh_psf;
     535
     536    out[i].F_ApR5      = in[i].F_ApR5;
     537    out[i].dF_ApR5     = in[i].dF_ApR5;
     538    out[i].sF_ApR5     = in[i].sF_ApR5;
     539    out[i].fF_ApR5     = in[i].fF_ApR5;
     540                                   
     541    out[i].F_ApR6      = in[i].F_ApR6;
     542    out[i].dF_ApR6     = in[i].dF_ApR6;
     543    out[i].sF_ApR6     = in[i].sF_ApR6;
     544    out[i].fF_ApR6     = in[i].fF_ApR6;
     545                                   
     546    out[i].detID       = in[i].detID;
     547    out[i].objID       = in[i].objID;
     548    out[i].catID       = in[i].catID;
     549
     550    out[i].averef      = in[i].averef;
     551    out[i].imageID     = in[i].imageID;
     552  }
     553  return (out);
     554}
     555
     556Lensobj *Lensobj_PS1_V5_ToInternal (Lensobj_PS1_V5 *in, off_t Nvalues) {
     557
     558  off_t i;
     559  Lensobj *out;
     560
     561  ALLOCATE_ZERO (out, Lensobj, Nvalues);
     562
     563  for (i = 0; i < Nvalues; i++) {
     564    dvo_lensobj_init (&out[i], FALSE);
     565
     566    out[i].X11_sm_obj  = in[i].X11_sm_obj;     
     567    out[i].X12_sm_obj  = in[i].X12_sm_obj;     
     568    out[i].X22_sm_obj  = in[i].X22_sm_obj;     
     569    out[i].E1_sm_obj   = in[i].E1_sm_obj;     
     570    out[i].E2_sm_obj   = in[i].E2_sm_obj;     
     571                                         
     572    out[i].X11_sh_obj  = in[i].X11_sh_obj;     
     573    out[i].X12_sh_obj  = in[i].X12_sh_obj;     
     574    out[i].X22_sh_obj  = in[i].X22_sh_obj;     
     575    out[i].E1_sh_obj   = in[i].E1_sh_obj;     
     576    out[i].E2_sh_obj   = in[i].E2_sh_obj;     
     577                                         
     578    out[i].X11_sm_psf  = in[i].X11_sm_psf;
     579    out[i].X12_sm_psf  = in[i].X12_sm_psf;
     580    out[i].X22_sm_psf  = in[i].X22_sm_psf;
     581    out[i].E1_sm_psf   = in[i].E1_sm_psf;
     582    out[i].E2_sm_psf   = in[i].E2_sm_psf;     
     583                                         
     584    out[i].X11_sh_psf  = in[i].X11_sh_psf;
     585    out[i].X12_sh_psf  = in[i].X12_sh_psf;
     586    out[i].X22_sh_psf  = in[i].X22_sh_psf;
     587    out[i].E1_sh_psf   = in[i].E1_sh_psf;
     588    out[i].E2_sh_psf   = in[i].E2_sh_psf;
     589
     590    out[i].F_ApR5      = in[i].F_ApR5;
     591    out[i].dF_ApR5     = in[i].dF_ApR5;
     592    out[i].sF_ApR5     = in[i].sF_ApR5;
     593    out[i].fF_ApR5     = in[i].fF_ApR5;
     594                                   
     595    out[i].F_ApR6      = in[i].F_ApR6;
     596    out[i].dF_ApR6     = in[i].dF_ApR6;
     597    out[i].sF_ApR6     = in[i].sF_ApR6;
     598    out[i].fF_ApR6     = in[i].fF_ApR6;
     599                                   
     600    out[i].gamma       = in[i].gamma;
     601    out[i].E1          = in[i].E1;
     602    out[i].E2          = in[i].E2;
     603
     604    out[i].objID       = in[i].objID;
     605    out[i].catID       = in[i].catID;
     606
     607    out[i].photcode    = in[i].photcode;
     608    out[i].Nmeas       = in[i].Nmeas;
     609  }
     610  return (out);
     611}
     612
     613Lensobj_PS1_V5 *LensobjInternalTo_PS1_V5 (Lensobj *in, off_t Nvalues) {
     614
     615  off_t i;
     616  Lensobj_PS1_V5 *out;
     617
     618  ALLOCATE_ZERO (out, Lensobj_PS1_V5, Nvalues);
     619
     620  for (i = 0; i < Nvalues; i++) {
     621
     622    out[i].X11_sm_obj  = in[i].X11_sm_obj;     
     623    out[i].X12_sm_obj  = in[i].X12_sm_obj;     
     624    out[i].X22_sm_obj  = in[i].X22_sm_obj;     
     625    out[i].E1_sm_obj   = in[i].E1_sm_obj;     
     626    out[i].E2_sm_obj   = in[i].E2_sm_obj;     
     627                                         
     628    out[i].X11_sh_obj  = in[i].X11_sh_obj;     
     629    out[i].X12_sh_obj  = in[i].X12_sh_obj;     
     630    out[i].X22_sh_obj  = in[i].X22_sh_obj;     
     631    out[i].E1_sh_obj   = in[i].E1_sh_obj;     
     632    out[i].E2_sh_obj   = in[i].E2_sh_obj;     
     633                                         
     634    out[i].X11_sm_psf  = in[i].X11_sm_psf;
     635    out[i].X12_sm_psf  = in[i].X12_sm_psf;
     636    out[i].X22_sm_psf  = in[i].X22_sm_psf;
     637    out[i].E1_sm_psf   = in[i].E1_sm_psf;
     638    out[i].E2_sm_psf   = in[i].E2_sm_psf;     
     639                                         
     640    out[i].X11_sh_psf  = in[i].X11_sh_psf;
     641    out[i].X12_sh_psf  = in[i].X12_sh_psf;
     642    out[i].X22_sh_psf  = in[i].X22_sh_psf;
     643    out[i].E1_sh_psf   = in[i].E1_sh_psf;
     644    out[i].E2_sh_psf   = in[i].E2_sh_psf;
     645
     646    out[i].F_ApR5      = in[i].F_ApR5;
     647    out[i].dF_ApR5     = in[i].dF_ApR5;
     648    out[i].sF_ApR5     = in[i].sF_ApR5;
     649    out[i].fF_ApR5     = in[i].fF_ApR5;
     650                                   
     651    out[i].F_ApR6      = in[i].F_ApR6;
     652    out[i].dF_ApR6     = in[i].dF_ApR6;
     653    out[i].sF_ApR6     = in[i].sF_ApR6;
     654    out[i].fF_ApR6     = in[i].fF_ApR6;
     655                                   
     656    out[i].gamma       = in[i].gamma;
     657    out[i].E1          = in[i].E1;
     658    out[i].E2          = in[i].E2;
     659
     660    out[i].objID       = in[i].objID;
     661    out[i].catID       = in[i].catID;
     662
     663    out[i].photcode    = in[i].photcode;
     664    out[i].Nmeas       = in[i].Nmeas;
     665  }
     666  return (out);
     667}
     668
     669StarPar *StarPar_PS1_V5_ToInternal (StarPar_PS1_V5 *in, off_t Nvalues) {
     670
     671  off_t i;
     672  StarPar *out;
     673
     674  ALLOCATE_ZERO (out, StarPar, Nvalues);
     675
     676  for (i = 0; i < Nvalues; i++) {
     677    dvo_starpar_init (&out[i]);
     678
     679    out[i].R         = in[i].R;     
     680    out[i].D         = in[i].D;     
     681    out[i].galLat    = in[i].galLat;     
     682    out[i].galLon    = in[i].galLon;     
     683
     684    out[i].Ebv       = in[i].Ebv     ;     
     685    out[i].dEbv      = in[i].dEbv    ;     
     686    out[i].DistMag   = in[i].DistMag ;     
     687    out[i].dDistMag  = in[i].dDistMag;     
     688    out[i].M_r       = in[i].M_r     ;     
     689    out[i].dM_r      = in[i].dM_r    ;     
     690    out[i].FeH       = in[i].FeH     ;     
     691    out[i].dFeH      = in[i].dFeH    ;     
     692    out[i].uRA       = in[i].uRA     ;     
     693    out[i].uDEC      = in[i].uDEC    ;     
     694
     695    out[i].averef  = in[i].averef;
     696    out[i].objID   = in[i].objID ;
     697    out[i].catID   = in[i].catID ;
     698  }
     699  return (out);
     700}
     701
     702StarPar_PS1_V5 *StarParInternalTo_PS1_V5 (StarPar *in, off_t Nvalues) {
     703
     704  off_t i;
     705  StarPar_PS1_V5 *out;
     706
     707  ALLOCATE_ZERO (out, StarPar_PS1_V5, Nvalues);
     708
     709  for (i = 0; i < Nvalues; i++) {
     710
     711    out[i].R         = in[i].R;     
     712    out[i].D         = in[i].D;     
     713    out[i].galLat    = in[i].galLat;     
     714    out[i].galLon    = in[i].galLon;     
     715
     716    out[i].Ebv       = in[i].Ebv     ;     
     717    out[i].dEbv      = in[i].dEbv    ;     
     718    out[i].DistMag   = in[i].DistMag ;     
     719    out[i].dDistMag  = in[i].dDistMag;     
     720    out[i].M_r       = in[i].M_r     ;     
     721    out[i].dM_r      = in[i].dM_r    ;     
     722    out[i].FeH       = in[i].FeH     ;     
     723    out[i].dFeH      = in[i].dFeH    ;     
     724    out[i].uRA       = in[i].uRA     ;     
     725    out[i].uDEC      = in[i].uDEC    ;     
     726
     727    out[i].averef  = in[i].averef;
     728    out[i].objID   = in[i].objID ;
     729    out[i].catID   = in[i].catID ;
     730  }
     731  return (out);
     732}
     733
     734# define RAW_IMAGE_NAME_LEN 117
     735
     736Image *Image_PS1_V5_ToInternal (Image_PS1_V5 *in, off_t Nvalues, off_t Nalloc) {
     737
     738  off_t i;
     739  Image *out;
     740
     741  char *buffer;
     742  ALLOCATE_ZERO (buffer, char, Nalloc);
     743  out = (Image *) buffer;
     744  // ALLOCATE_ZERO (out, Image, Nvalues);
     745
     746  for (i = 0; i < Nvalues; i++) {
     747    // this is only safe because the initial 120 bytes in Coords match CoordsDisk
     748    memcpy (&out[i].coords, &in[i].coords, sizeof(CoordsDisk));
     749    out[i].coords.mosaic   = NULL;
     750    out[i].coords.offsetMap = NULL;
     751
     752    // RAW_IMAGE_NAME_LEN == DVO_IMAGE_NAME_LEN
     753    strncpy (out[i].name, in[i].name, RAW_IMAGE_NAME_LEN - 1);
     754    out[i].name[RAW_IMAGE_NAME_LEN - 1] = 0; // force termination
     755
     756    out[i].tzero            = in[i].tzero;
     757    out[i].nstar            = in[i].nstar;
     758    out[i].secz             = in[i].secz;
     759    out[i].NX               = in[i].NX;
     760    out[i].NY               = in[i].NY;
     761    out[i].apmifit          = in[i].apmifit;
     762    out[i].dapmifit         = in[i].dapmifit;
     763    out[i].Mcal             = in[i].Mcal;
     764    out[i].dMcal            = in[i].dMcal;
     765    out[i].Xm               = in[i].Xm;
     766    out[i].photcode         = in[i].photcode;
     767    out[i].exptime          = in[i].exptime;
     768    out[i].sidtime          = in[i].sidtime;
     769    out[i].latitude         = in[i].latitude;
     770
     771    out[i].RAo              = in[i].RAo;
     772    out[i].DECo             = in[i].DECo;
     773    out[i].Radius           = in[i].Radius;
     774    out[i].refColorBlue     = in[i].refColorBlue;
     775    out[i].refColorRed      = in[i].refColorRed;
     776
     777    out[i].detection_limit  = in[i].detection_limit;
     778    out[i].saturation_limit = in[i].saturation_limit;
     779    out[i].cerror           = in[i].cerror;
     780    out[i].fwhm_x           = in[i].fwhm_x;
     781    out[i].fwhm_y           = in[i].fwhm_y;
     782    out[i].trate            = in[i].trate;
     783    out[i].ccdnum           = in[i].ccdnum;
     784    out[i].flags            = in[i].flags;
     785    out[i].imageID          = in[i].imageID;
     786    out[i].parentID         = in[i].parentID;
     787    out[i].externID         = in[i].externID;
     788    out[i].sourceID         = in[i].sourceID;
     789
     790    // as of 2011.02.03, the old Mx,My,..., Mxxxx,Myyyy have been deprecated and replaced
     791    // with the following.  (no real databases used those values -- see
     792    // libdvo/doc/dvo-images.txt)
     793    out[i].nLinkAstrom      = in[i].nLinkAstrom;
     794    out[i].nLinkPhotom      = in[i].nLinkPhotom;
     795    out[i].ubercalDist      = in[i].ubercalDist;
     796    out[i].dXpixSys         = in[i].dXpixSys;
     797    out[i].dYpixSys         = in[i].dYpixSys;
     798    out[i].dMagSys          = in[i].dMagSys;
     799    out[i].nFitAstrom       = in[i].nFitAstrom;
     800    out[i].nFitPhotom       = in[i].nFitPhotom;
     801    out[i].photom_map_id    = in[i].photom_map_id;
     802    out[i].astrom_map_id    = in[i].astrom_map_id;
     803  }
     804  return (out);
     805}
     806
     807Image_PS1_V5 *ImageInternalTo_PS1_V5 (Image *in, off_t Nvalues) {
     808
     809  off_t i;
     810  Image_PS1_V5 *out;
     811
     812  ALLOCATE_ZERO (out, Image_PS1_V5, Nvalues);
     813
     814  for (i = 0; i < Nvalues; i++) {
     815    // this is only save because the initial 120 bytes in Coords match CoordsDisk
     816    memcpy (&out[i].coords, &in[i].coords, sizeof(CoordsDisk));
     817
     818    // RAW_IMAGE_NAME_LEN == DVO_IMAGE_NAME_LEN
     819    strncpy (out[i].name, in[i].name, RAW_IMAGE_NAME_LEN - 1);
     820    out[i].name[RAW_IMAGE_NAME_LEN - 1] = 0; // force termination
     821
     822    out[i].tzero            = in[i].tzero;
     823    out[i].nstar            = in[i].nstar;
     824    out[i].secz             = in[i].secz;
     825    out[i].NX               = in[i].NX;
     826    out[i].NY               = in[i].NY;
     827    out[i].apmifit          = in[i].apmifit;
     828    out[i].dapmifit         = in[i].dapmifit;
     829    out[i].Mcal             = in[i].Mcal;
     830    out[i].dMcal            = in[i].dMcal;
     831    out[i].Xm               = in[i].Xm;
     832    out[i].photcode         = in[i].photcode;
     833    out[i].exptime          = in[i].exptime;
     834    out[i].sidtime          = in[i].sidtime;
     835    out[i].latitude         = in[i].latitude;
     836
     837    out[i].RAo              = in[i].RAo;
     838    out[i].DECo             = in[i].DECo;
     839    out[i].Radius           = in[i].Radius;
     840    out[i].refColorBlue     = in[i].refColorBlue;
     841    out[i].refColorRed      = in[i].refColorRed;
     842
     843    out[i].detection_limit  = in[i].detection_limit;
     844    out[i].saturation_limit = in[i].saturation_limit;
     845    out[i].cerror           = in[i].cerror;
     846    out[i].fwhm_x           = in[i].fwhm_x;
     847    out[i].fwhm_y           = in[i].fwhm_y;
     848    out[i].trate            = in[i].trate;
     849    out[i].ccdnum           = in[i].ccdnum;
     850    out[i].flags            = in[i].flags;
     851    out[i].imageID          = in[i].imageID;
     852    out[i].parentID         = in[i].parentID;
     853    out[i].externID         = in[i].externID;
     854    out[i].sourceID         = in[i].sourceID;
     855
     856    // as of 2011.02.03, the old Mx,My,..., Mxxxx,Myyyy have been deprecated and replaced
     857    // with the following.  (no real databases used those values -- see
     858    // libdvo/doc/dvo-images.txt)
     859    out[i].nLinkAstrom      = in[i].nLinkAstrom;
     860    out[i].nLinkPhotom      = in[i].nLinkPhotom;
     861    out[i].ubercalDist      = in[i].ubercalDist;
     862    out[i].dXpixSys         = in[i].dXpixSys;
     863    out[i].dYpixSys         = in[i].dYpixSys;
     864    out[i].dMagSys          = in[i].dMagSys;
     865    out[i].nFitAstrom       = in[i].nFitAstrom;
     866    out[i].nFitPhotom       = in[i].nFitPhotom;
     867    out[i].photom_map_id    = in[i].photom_map_id;
     868    out[i].astrom_map_id    = in[i].astrom_map_id;
     869  }
     870  return (out);
     871}
     872
     873PhotCode *PhotCode_PS1_V5_To_Internal (PhotCode_PS1_V5 *in, off_t Nvalues) {
     874
     875  off_t i;
     876  PhotCode *out;
     877
     878  ALLOCATE_ZERO (out, PhotCode, Nvalues);
     879
     880  for (i = 0; i < Nvalues; i++) {
     881    strncpy (out[i].name, in[i].name, 31); // out[32], in[32]
     882    out[i].name[31] = 0; // force termination
     883
     884    out[i].code  = in[i].code;         
     885    out[i].type  = in[i].type;         
     886    out[i].C     = in[i].C;           
     887    out[i].dC    = in[i].dC;           
     888    out[i].dX    = in[i].dX;           
     889    out[i].K     = in[i].K;           
     890    out[i].c1    = in[i].c1;           
     891    out[i].c2    = in[i].c2;           
     892    out[i].equiv = in[i].equiv;       
     893    out[i].Nc    = in[i].Nc;           
     894    memcpy (out[i].X, in[i].X, 4*sizeof(float));           
     895
     896    out[i].astromErrSys      = in[i].astromErrSys;
     897    out[i].astromErrScale    = in[i].astromErrScale;
     898    out[i].astromErrMagScale = in[i].astromErrMagScale;
     899    out[i].photomErrSys      = in[i].photomErrSys;
     900
     901    out[i].photomPoorMask      = in[i].photomPoorMask;
     902    out[i].photomBadMask       = in[i].photomBadMask;
     903    out[i].astromPoorMask      = in[i].astromPoorMask;
     904    out[i].astromBadMask       = in[i].astromBadMask;
     905  }
     906  return (out);
     907}
     908
     909PhotCode_PS1_V5 *PhotCode_Internal_To_PS1_V5 (PhotCode *in, off_t Nvalues) {
     910
     911  off_t i;
     912  PhotCode_PS1_V5 *out;
     913
     914  ALLOCATE_ZERO (out, PhotCode_PS1_V5, Nvalues);
     915
     916  for (i = 0; i < Nvalues; i++) {
     917    strncpy (out[i].name, in[i].name, 31); // out[32], in[32]
     918    out[i].name[31] = 0; // force termination
     919
     920    out[i].code  = in[i].code;         
     921    out[i].type  = in[i].type;         
     922    out[i].C     = in[i].C;           
     923    out[i].dC    = in[i].dC;           
     924    out[i].dX    = in[i].dX;           
     925    out[i].K     = in[i].K;           
     926    out[i].c1    = in[i].c1;           
     927    out[i].c2    = in[i].c2;           
     928    out[i].equiv = in[i].equiv;       
     929    out[i].Nc    = in[i].Nc;           
     930    memcpy (out[i].X, in[i].X, 4*sizeof(float));           
     931
     932    out[i].astromErrSys      = in[i].astromErrSys;
     933    out[i].astromErrScale    = in[i].astromErrScale;
     934    out[i].astromErrMagScale = in[i].astromErrMagScale;
     935    out[i].photomErrSys      = in[i].photomErrSys;
     936
     937    out[i].photomPoorMask      = in[i].photomPoorMask;
     938    out[i].photomBadMask       = in[i].photomBadMask;
     939    out[i].astromPoorMask      = in[i].astromPoorMask;
     940    out[i].astromBadMask       = in[i].astromBadMask;
     941  }
     942  return (out);
     943}
     944
     945/*********************** old / alternate version **********************/
     946
     947// 'primary' is needed to conform with the API for Loneos and Elixir, but is not used
     948Average *Average_PS1_V5alt_ToInternal (Average_PS1_V5alt *in, off_t Nvalues) {
     949
     950  off_t i;
     951  Average *out;
     952
     953  ALLOCATE_ZERO (out, Average, Nvalues);
     954
     955  for (i = 0; i < Nvalues; i++) {
     956    dvo_average_init (&out[i]);
     957
     958    out[i].R              = in[i].R;     
     959    out[i].D              = in[i].D;     
     960    out[i].dR             = in[i].dR;
     961    out[i].dD             = in[i].dD;
     962    out[i].uR             = in[i].uR;
     963    out[i].uD             = in[i].uD;
     964    out[i].duR            = in[i].duR;
     965    out[i].duD            = in[i].duD;
     966    out[i].P              = in[i].P;
     967    out[i].dP             = in[i].dP;
     968                         
     969    out[i].Rstk           = in[i].Rstk;     
     970    out[i].Dstk           = in[i].Dstk;     
     971    out[i].dRstk          = in[i].dRstk;
     972    out[i].dDstk          = in[i].dDstk;
     973                         
     974    out[i].ChiSqAve       = in[i].ChiSqAve;     
     975    out[i].ChiSqPM        = in[i].ChiSqPM;     
     976    out[i].ChiSqPar       = in[i].ChiSqPar;     
     977    out[i].Tmean          = in[i].Tmean;     
     978    out[i].Trange         = in[i].Trange;     
     979                         
     980    out[i].psfQF          = in[i].psfQF;
     981    out[i].psfQFperf      = in[i].psfQFperf;
     982    out[i].stargal        = in[i].stargal;     
     983    out[i].Npos           = in[i].Npos;     
     984                         
     985    out[i].Nmeasure       = in[i].Nmeasure;     
     986    out[i].Nmissing       = in[i].Nmissing;     
     987    out[i].Nlensing       = in[i].Nlensing;     
     988    out[i].Nlensobj       = in[i].Nlensobj;     
     989    out[i].Nextend        = in[i].Nextend;     
     990                         
     991    out[i].measureOffset  = in[i].measureOffset;
     992    out[i].missingOffset  = in[i].missingOffset;
     993    out[i].lensingOffset  = in[i].lensingOffset;
     994    out[i].lensobjOffset  = in[i].lensobjOffset;
     995    out[i].starparOffset  = in[i].starparOffset;
     996    out[i].extendOffset   = in[i].extendOffset;
     997                         
     998    out[i].refColorBlue   = in[i].refColorBlue;
     999    out[i].refColorRed    = in[i].refColorRed;
     1000                         
     1001    out[i].flags          = in[i].flags;   
     1002    out[i].photFlagsUpper = in[i].photFlagsUpper;   
     1003    out[i].photFlagsLower = in[i].photFlagsLower;   
     1004    out[i].objID          = in[i].objID;
     1005    out[i].catID          = in[i].catID;
     1006    out[i].extID          = in[i].extID;
     1007    out[i].extIDgc        = in[i].extIDgc;
     1008  }
     1009  return (out);
     1010}
     1011
     1012int gfits_convert_Average_PS1_V5alt (Average_PS1_V5alt *data, off_t size, off_t nitems) {
     1013
     1014  off_t i;
     1015  unsigned char *byte, tmp;
     1016
     1017  if (size != 184) {
     1018    fprintf (stderr, "WARNING: mismatch in data types Average_PS1_V5alt: "OFF_T_FMT" vs %d\n",  size,  184);
     1019    return (FALSE);
     1020  }
     1021
     1022  /* provide initial values to avoid compiler warnings for non-BYTE_SWAP arch */
     1023  i = tmp = 0;
     1024  byte = NULL;
     1025
     1026# ifdef BYTE_SWAP
     1027  byte = (unsigned char *) data;
     1028  for (i = 0; i < nitems; i++, byte += 184) {
     1029    /** BYTE SWAP **/
     1030    SWAP_DBLE (0); // RA
     1031    SWAP_DBLE (8); // DEC
     1032    SWAP_WORD (16); // RA_ERR
     1033    SWAP_WORD (20); // DEC_ERR
     1034    SWAP_WORD (24); // U_RA
     1035    SWAP_WORD (28); // U_DEC
     1036    SWAP_WORD (32); // V_RA_ERR
     1037    SWAP_WORD (36); // V_DEC_ERR
     1038    SWAP_WORD (40); // PAR
     1039    SWAP_WORD (44); // PAR_ERR
     1040    SWAP_DBLE (48); // RA_STK
     1041    SWAP_DBLE (56); // DEC_STK
     1042    SWAP_WORD (64); // RA_STK_ERR
     1043    SWAP_WORD (68); // DEC_STK_ERR
     1044    SWAP_WORD (72); // CHISQ_POS
     1045    SWAP_WORD (76); // CHISQ_PM
     1046    SWAP_WORD (80); // CHISQ_PAP
     1047    SWAP_WORD (84); // MEAN_EPOCH
     1048    SWAP_WORD (88); // TIME_RANGE
     1049    SWAP_WORD (92); // PSF_QF
     1050    SWAP_WORD (96); // PSF_QF_PERF
     1051    SWAP_WORD (100); // STARGAL_SEP
     1052    SWAP_BYTE (104); // NUMBER_POS
     1053    SWAP_BYTE (106); // NMEASURE
     1054    SWAP_BYTE (108); // NMISSING
     1055    SWAP_BYTE (110); // NLENSING
     1056    SWAP_BYTE (112); // NLENSOBJ
     1057    SWAP_BYTE (114); // NEXTEND
     1058    SWAP_WORD (116); // OFF_MEASURE
     1059    SWAP_WORD (120); // OFF_MISSING
     1060    SWAP_WORD (124); // OFF_LENSING
     1061    SWAP_WORD (128); // OFF_LENSOBJ
     1062    SWAP_WORD (132); // OFF_EXTEND
     1063    SWAP_WORD (136); // OFF_PARAMS
     1064    SWAP_WORD (140); // REF_COLOR_BLUE
     1065    SWAP_WORD (144); // REF_COLOR_RED
     1066    SWAP_WORD (148); // FLAGS
     1067    SWAP_WORD (152); // PHOTFLAGS_U
     1068    SWAP_WORD (156); // PHOTFLAGS_L
     1069    SWAP_WORD (160); // OBJ_ID
     1070    SWAP_WORD (164); // CAT_ID
     1071    SWAP_DBLE (168); // EXT_ID
     1072    SWAP_DBLE (176); // EXT_ID_GC
     1073  }
     1074# endif 
     1075
     1076  return (TRUE);
     1077}
     1078
     1079/*** add test of EXTNAME and header-defined columns? ***/
     1080/* return internal structure representation */
     1081Average_PS1_V5alt *gfits_table_get_Average_PS1_V5alt (FTable *ftable, off_t *Ndata, char *swapped) {
     1082
     1083  int Ncols;
     1084  Average_PS1_V5alt *data;
     1085
     1086  Ncols = ftable[0].header[0].Naxis[0];
     1087  if (Ncols != 184) {
     1088    fprintf (stderr, "ERROR: mis-match in table size: width is %d but should be %d bytes\n", Ncols, 184);
     1089    return NULL;
     1090  }
     1091
     1092  *Ndata = ftable[0].header[0].Naxis[1];
     1093  data = (Average_PS1_V5alt *) ftable[0].buffer;
     1094  if ((swapped == NULL) || (*swapped == FALSE)) {
     1095    if (!gfits_convert_Average_PS1_V5alt (data, sizeof (Average_PS1_V5alt), *Ndata)) {
     1096      return NULL;
     1097    }
     1098    gfits_table_scale_data (ftable);
     1099    if (swapped != NULL) *swapped = TRUE;
     1100  }
     1101  return (data);
     1102}
     1103
     1104/****** alt secfilt **********/
     1105
     1106SecFilt *SecFilt_PS1_V5alt_ToInternal (SecFilt_PS1_V5alt *in, off_t Nvalues) {
     1107
     1108  off_t i;
     1109  SecFilt *out;
     1110
     1111  ALLOCATE_ZERO (out, SecFilt, Nvalues);
     1112
     1113  for (i = 0; i < Nvalues; i++) {
     1114    dvo_secfilt_init (&out[i]);
     1115
     1116    out[i].M             = in[i].M;     
     1117    out[i].dM            = in[i].dM;     
     1118    out[i].Map           = in[i].Map;     
     1119    out[i].dMap          = in[i].dMap;     
     1120    out[i].sMap          = in[i].sMap;     
     1121    out[i].Mkron         = in[i].Mkron;     
     1122    out[i].dMkron        = in[i].dMkron;     
     1123
     1124    out[i].Mstdev        = in[i].Mstdev;     
     1125    out[i].Mmin          = in[i].Mmin;     
     1126    out[i].Mmax          = in[i].Mmax;     
     1127    out[i].Mchisq        = in[i].Mchisq;     
     1128
     1129    out[i].Ncode         = in[i].Ncode;
     1130    out[i].Nused         = in[i].Nused;
     1131    out[i].NusedKron     = in[i].NusedKron;
     1132    out[i].NusedAp       = in[i].NusedAp;
     1133
     1134    out[i].flags         = in[i].flags;     
     1135
     1136    out[i].MpsfStk       = in[i].MpsfStk;
     1137    out[i].FpsfStk       = in[i].FpsfStk;
     1138    out[i].dFpsfStk      = in[i].dFpsfStk;
     1139
     1140    out[i].MkronStk      = in[i].MkronStk;
     1141    out[i].FkronStk      = in[i].FkronStk;
     1142    out[i].dFkronStk     = in[i].dFkronStk;
     1143
     1144    out[i].MapStk        = in[i].MapStk;
     1145    out[i].FapStk        = in[i].FapStk;
     1146    out[i].dFapStk       = in[i].dFapStk;
     1147
     1148    out[i].stackPrmryOff = in[i].stackPrmryOff;     
     1149    out[i].stackBestOff  = in[i].stackBestOff;     
     1150
     1151    out[i].MpsfWrp       = in[i].MpsfWrp;
     1152    out[i].FpsfWrp       = in[i].FpsfWrp;
     1153    out[i].dFpsfWrp      = in[i].dFpsfWrp;
     1154    out[i].sFpsfWrp      = in[i].sFpsfWrp;
     1155
     1156    out[i].MkronWrp      = in[i].MkronWrp;
     1157    out[i].FkronWrp      = in[i].FkronWrp;
     1158    out[i].dFkronWrp     = in[i].dFkronWrp;
     1159    out[i].sFkronWrp     = in[i].sFkronWrp;
     1160
     1161    out[i].MapWrp        = in[i].MapWrp;
     1162    out[i].FapWrp        = in[i].FapWrp;
     1163    out[i].dFapWrp       = in[i].dFapWrp;
     1164    out[i].sFapWrp       = in[i].sFapWrp;
     1165
     1166    out[i].NusedWrp      = in[i].NusedWrp;
     1167    out[i].NusedKronWrp  = in[i].NusedKronWrp;
     1168    out[i].NusedApWrp    = in[i].NusedApWrp;
     1169
     1170    out[i].ubercalDist   = in[i].ubercalDist;     
     1171  }
     1172  return (out);
     1173}
     1174
     1175int gfits_convert_SecFilt_PS1_V5alt (SecFilt_PS1_V5alt *data, off_t size, off_t nitems) {
     1176
     1177  off_t i;
     1178  unsigned char *byte, tmp;
     1179
     1180  if (size != 160) {
     1181    fprintf (stderr, "WARNING: mismatch in data types SecFilt_PS1_V5alt: "OFF_T_FMT" vs %d\n",  size,  160);
     1182    return (FALSE);
     1183  }
     1184
     1185  /* provide initial values to avoid compiler warnings for non-BYTE_SWAP arch */
     1186  i = tmp = 0;
     1187  byte = NULL;
     1188
     1189# ifdef BYTE_SWAP
     1190  byte = (unsigned char *) data;
     1191  for (i = 0; i < nitems; i++, byte += 160) {
     1192    /** BYTE SWAP **/
     1193    SWAP_WORD (0); // MAG
     1194    SWAP_WORD (4); // MAG_ERR
     1195    SWAP_WORD (8); // MAG_AP
     1196    SWAP_WORD (12); // MAG_AP_ERR
     1197    SWAP_WORD (16); // MAG_AP_STDEV
     1198    SWAP_WORD (20); // MAG_KRON
     1199    SWAP_WORD (24); // MAG_KRON_ERR
     1200    SWAP_WORD (28); // MAG_KRON_STDEV
     1201    SWAP_WORD (32); // MAG_STDEV
     1202    SWAP_WORD (36); // MAG_MIN
     1203    SWAP_WORD (40); // MAG_MAX
     1204    SWAP_WORD (44); // MAG_CHI
     1205    SWAP_BYTE (48); // NCODE
     1206    SWAP_BYTE (50); // NUSED
     1207    SWAP_BYTE (52); // NUSED_KRON
     1208    SWAP_BYTE (54); // NUSED_AP
     1209    SWAP_WORD (56); // FLAGS
     1210    SWAP_WORD (60); // MAG_PSF_STK
     1211    SWAP_WORD (64); // FLUX_PSF_STK
     1212    SWAP_WORD (68); // FLUX_PSF_STK_ERR
     1213    SWAP_WORD (72); // MAG_KRON_STK
     1214    SWAP_WORD (76); // FLUX_KRON_STK
     1215    SWAP_WORD (80); // FLUX_KRON_STK_ERR
     1216    SWAP_WORD (84); // MAG_AP_STK
     1217    SWAP_WORD (88); // FLUX_AP_STK
     1218    SWAP_WORD (92); // FLUX_AP_STK_ERR
     1219    SWAP_WORD (96); // STACK_PRIMARY_OFF
     1220    SWAP_WORD (100); // STACK_BEST_OFF
     1221    SWAP_WORD (104); // MAG_PSF_WRP
     1222    SWAP_WORD (108); // FLUX_PSF_WRP
     1223    SWAP_WORD (112); // FLUX_PSF_WRP_ERR
     1224    SWAP_WORD (116); // FLUX_PSF_WRP_STD
     1225    SWAP_WORD (120); // MAG_KRON_WRP
     1226    SWAP_WORD (124); // FLUX_KRON_WRP
     1227    SWAP_WORD (128); // FLUX_KRON_WRP_ERR
     1228    SWAP_WORD (132); // FLUX_KRON_WRP_STD
     1229    SWAP_WORD (136); // MAG_AP_WRP
     1230    SWAP_WORD (140); // FLUX_AP_WRP
     1231    SWAP_WORD (144); // FLUX_AP_WRP_ERR
     1232    SWAP_WORD (148); // FLUX_AP_WRP_STD
     1233    SWAP_BYTE (152); // NUSED_WRP
     1234    SWAP_BYTE (154); // NUSED_KRON_WRP
     1235    SWAP_BYTE (156); // NUSED_AP_WRP
     1236    SWAP_BYTE (158); // UBERCAL_DIST
     1237  }
     1238# endif 
     1239
     1240  return (TRUE);
     1241}
     1242
     1243/*** add test of EXTNAME and header-defined columns? ***/
     1244/* return internal structure representation */
     1245SecFilt_PS1_V5alt *gfits_table_get_SecFilt_PS1_V5alt (FTable *ftable, off_t *Ndata, char *swapped) {
     1246
     1247  int Ncols;
     1248  SecFilt_PS1_V5alt *data;
     1249
     1250  Ncols = ftable[0].header[0].Naxis[0];
     1251  if (Ncols != 160) {
     1252    fprintf (stderr, "ERROR: mis-match in table size: width is %d but should be %d bytes\n", Ncols, 160);
     1253    return NULL;
     1254  }
     1255
     1256  *Ndata = ftable[0].header[0].Naxis[1];
     1257  data = (SecFilt_PS1_V5alt *) ftable[0].buffer;
     1258  if ((swapped == NULL) || (*swapped == FALSE)) {
     1259    if (!gfits_convert_SecFilt_PS1_V5alt (data, sizeof (SecFilt_PS1_V5alt), *Ndata)) {
     1260      return NULL;
     1261    }
     1262    gfits_table_scale_data (ftable);
     1263    if (swapped != NULL) *swapped = TRUE;
     1264  }
     1265  return (data);
     1266}
     1267
     1268
     1269Lensing *Lensing_PS1_V5_ALT_ToInternal (Lensing_PS1_V5_ALT *in, off_t Nvalues) {
     1270
     1271  off_t i;
     1272  Lensing *out;
     1273
     1274  ALLOCATE_ZERO (out, Lensing, Nvalues);
     1275
     1276  for (i = 0; i < Nvalues; i++) {
     1277    dvo_lensing_init (&out[i]);
     1278
     1279    out[i].X11_sm_obj  = in[i].X11_sm_obj;     
     1280    out[i].X12_sm_obj  = in[i].X12_sm_obj;     
     1281    out[i].X22_sm_obj  = in[i].X22_sm_obj;     
     1282    out[i].E1_sm_obj   = in[i].E1_sm_obj;     
     1283    out[i].E2_sm_obj   = in[i].E2_sm_obj;     
     1284                                         
     1285    out[i].X11_sh_obj  = in[i].X11_sh_obj;     
     1286    out[i].X12_sh_obj  = in[i].X12_sh_obj;     
     1287    out[i].X22_sh_obj  = in[i].X22_sh_obj;     
     1288    out[i].E1_sh_obj   = in[i].E1_sh_obj;     
     1289    out[i].E2_sh_obj   = in[i].E2_sh_obj;     
     1290                                         
     1291    out[i].X11_sm_psf  = in[i].X11_sm_psf;
     1292    out[i].X12_sm_psf  = in[i].X12_sm_psf;
     1293    out[i].X22_sm_psf  = in[i].X22_sm_psf;
     1294    out[i].E1_sm_psf   = in[i].E1_sm_psf;
     1295    out[i].E2_sm_psf   = in[i].E2_sm_psf;     
     1296                                         
     1297    out[i].X11_sh_psf  = in[i].X11_sh_psf;
     1298    out[i].X12_sh_psf  = in[i].X12_sh_psf;
     1299    out[i].X22_sh_psf  = in[i].X22_sh_psf;
     1300    out[i].E1_sh_psf   = in[i].E1_sh_psf;
     1301    out[i].E2_sh_psf   = in[i].E2_sh_psf;
     1302
     1303    out[i].F_ApR5      = in[i].F_ApR5;
     1304    out[i].dF_ApR5     = in[i].dF_ApR5;
     1305    out[i].sF_ApR5     = in[i].sF_ApR5;
     1306    out[i].fF_ApR5     = in[i].fF_ApR5;
     1307                                   
     1308    out[i].F_ApR6      = in[i].F_ApR6;
     1309    out[i].dF_ApR6     = in[i].dF_ApR6;
     1310    out[i].sF_ApR6     = in[i].sF_ApR6;
     1311    out[i].fF_ApR6     = in[i].fF_ApR6;
     1312                                   
     1313    out[i].detID       = in[i].detID;
     1314    out[i].objID       = in[i].objID;
     1315    out[i].catID       = in[i].catID;
     1316
     1317    out[i].averef      = in[i].averef;
     1318  }
     1319  return (out);
     1320}
     1321
     1322/********** PS1_V5alt measure ************/
     1323
     1324Measure *Measure_PS1_V5alt_ToInternal (Average *ave, Measure_PS1_V5alt *in, off_t Nvalues) {
     1325
     1326  off_t i;
     1327  Measure *out;
     1328
     1329  ALLOCATE_ZERO (out, Measure, Nvalues);
     1330
     1331  for (i = 0; i < Nvalues; i++) {
     1332    dvo_measure_init (&out[i]);
     1333
    871334    out[i].R          = in[i].R;
    881335    out[i].D          = in[i].D;
     
    1491396}
    1501397
    151 // 'primary' is needed to conform with the API for Loneos and Elixir, but is not used
    152 Average *Average_PS1_V5_ToInternal (Average_PS1_V5 *in, off_t Nvalues, SecFilt **primary) {
    153 
    154   off_t i;
    155   Average *out;
    156 
    157   ALLOCATE_ZERO (out, Average, Nvalues);
    158 
    159   for (i = 0; i < Nvalues; i++) {
    160     dvo_average_init (&out[i]);
    161 
    162     out[i].R             = in[i].R;     
    163     out[i].D             = in[i].D;     
    164     out[i].dR            = in[i].dR;
    165     out[i].dD            = in[i].dD;
    166     out[i].uR            = in[i].uR;
    167     out[i].uD            = in[i].uD;
    168     out[i].duR           = in[i].duR;
    169     out[i].duD           = in[i].duD;
    170     out[i].P             = in[i].P;
    171     out[i].dP            = in[i].dP;
    172 
    173     out[i].Rstk          = in[i].Rstk;     
    174     out[i].Dstk          = in[i].Dstk;     
    175     out[i].dRstk         = in[i].dRstk;
    176     out[i].dDstk         = in[i].dDstk;
    177 
    178     out[i].ChiSqAve      = in[i].ChiSqAve;     
    179     out[i].ChiSqPM       = in[i].ChiSqPM;     
    180     out[i].ChiSqPar      = in[i].ChiSqPar;     
    181     out[i].Tmean         = in[i].Tmean;     
    182     out[i].Trange        = in[i].Trange;     
    183 
    184     out[i].psfQF         = in[i].psfQF;
    185     out[i].psfQFperf     = in[i].psfQFperf;
    186     out[i].stargal       = in[i].stargal;     
    187     out[i].Npos          = in[i].Npos;     
    188 
    189     out[i].Nmeasure      = in[i].Nmeasure;     
    190     out[i].Nmissing      = in[i].Nmissing;     
    191     out[i].Nlensing      = in[i].Nlensing;     
    192     out[i].Nlensobj      = in[i].Nlensobj;     
    193     out[i].Nstarpar      = in[i].Nstarpar;     
    194     out[i].Nextend       = in[i].Nextend;     
    195 
    196     out[i].measureOffset = in[i].measureOffset;
    197     out[i].missingOffset = in[i].missingOffset;
    198     out[i].lensingOffset = in[i].lensingOffset;
    199     out[i].lensobjOffset = in[i].lensobjOffset;
    200     out[i].starparOffset = in[i].starparOffset;
    201     out[i].extendOffset  = in[i].extendOffset;
    202 
    203     out[i].refColorBlue  = in[i].refColorBlue;
    204     out[i].refColorRed   = in[i].refColorRed;
    205 
    206     out[i].tessID        = in[i].tessID;
    207     out[i].skycellID     = in[i].skycellID;
    208     out[i].projectionID  = in[i].projectionID;
    209 
    210     out[i].flags         = in[i].flags;   
    211     out[i].photFlagsUpper = in[i].photFlagsUpper;   
    212     out[i].photFlagsLower = in[i].photFlagsLower;   
    213     out[i].objID         = in[i].objID;
    214     out[i].catID         = in[i].catID;
    215     out[i].extID         = in[i].extID;
    216     out[i].extIDgc       = in[i].extIDgc;
    217   }
    218   return (out);
    219 }
    220 
    221 // 'primary' is needed to conform with the API for Loneos and Elixir, but is not used
    222 Average_PS1_V5 *AverageInternalTo_PS1_V5 (Average *in, off_t Nvalues, SecFilt *primary) {
    223 
    224   off_t i;
    225   Average_PS1_V5 *out;
    226 
    227   ALLOCATE_ZERO (out, Average_PS1_V5, Nvalues);
    228 
    229   for (i = 0; i < Nvalues; i++) {
    230     out[i].R              = in[i].R;     
    231     out[i].D              = in[i].D;     
    232     out[i].dR             = in[i].dR;
    233     out[i].dD             = in[i].dD;
    234     out[i].uR             = in[i].uR;
    235     out[i].uD             = in[i].uD;
    236     out[i].duR            = in[i].duR;
    237     out[i].duD            = in[i].duD;
    238     out[i].P              = in[i].P;
    239     out[i].dP             = in[i].dP;
    240                          
    241     out[i].Rstk           = in[i].Rstk;     
    242     out[i].Dstk           = in[i].Dstk;     
    243     out[i].dRstk          = in[i].dRstk;
    244     out[i].dDstk          = in[i].dDstk;
    245                          
    246     out[i].ChiSqAve       = in[i].ChiSqAve;     
    247     out[i].ChiSqPM        = in[i].ChiSqPM;     
    248     out[i].ChiSqPar       = in[i].ChiSqPar;     
    249     out[i].Tmean          = in[i].Tmean;     
    250     out[i].Trange         = in[i].Trange;     
    251                          
    252     out[i].psfQF          = in[i].psfQF;
    253     out[i].psfQFperf      = in[i].psfQFperf;
    254     out[i].stargal        = in[i].stargal;     
    255     out[i].Npos           = in[i].Npos;     
    256                          
    257     out[i].Nmeasure       = in[i].Nmeasure;     
    258     out[i].Nmissing       = in[i].Nmissing;     
    259     out[i].Nlensing       = in[i].Nlensing;     
    260     out[i].Nlensobj       = in[i].Nlensobj;     
    261     out[i].Nstarpar       = in[i].Nstarpar;     
    262     out[i].Nextend        = in[i].Nextend;     
    263                          
    264     out[i].measureOffset  = in[i].measureOffset;
    265     out[i].missingOffset  = in[i].missingOffset;
    266     out[i].lensingOffset  = in[i].lensingOffset;
    267     out[i].lensobjOffset  = in[i].lensobjOffset;
    268     out[i].starparOffset  = in[i].starparOffset;
    269     out[i].extendOffset   = in[i].extendOffset;
    270                          
    271     out[i].refColorBlue   = in[i].refColorBlue;
    272     out[i].refColorRed    = in[i].refColorRed;
    273                          
    274     out[i].tessID         = in[i].tessID;
    275     out[i].skycellID      = in[i].skycellID;
    276     out[i].projectionID   = in[i].projectionID;
    277                          
    278     out[i].flags          = in[i].flags;   
    279     out[i].photFlagsUpper = in[i].photFlagsUpper;   
    280     out[i].photFlagsLower = in[i].photFlagsLower;   
    281     out[i].objID          = in[i].objID;
    282     out[i].catID          = in[i].catID;
    283     out[i].extID          = in[i].extID;
    284     out[i].extIDgc        = in[i].extIDgc;
    285   }
    286   return (out);
    287 }
    288 
    289 SecFilt *SecFilt_PS1_V5_ToInternal (SecFilt_PS1_V5 *in, off_t Nvalues) {
    290 
    291   off_t i;
    292   SecFilt *out;
    293 
    294   ALLOCATE_ZERO (out, SecFilt, Nvalues);
    295 
    296   for (i = 0; i < Nvalues; i++) {
    297     dvo_secfilt_init (&out[i]);
    298 
    299     out[i].M             = in[i].M;     
    300     out[i].dM            = in[i].dM;     
    301     out[i].Map           = in[i].Map;     
    302     out[i].dMap          = in[i].dMap;     
    303     out[i].sMap          = in[i].sMap;     
    304     out[i].Mkron         = in[i].Mkron;     
    305     out[i].dMkron        = in[i].dMkron;     
    306     out[i].sMkron        = in[i].sMkron;     
    307 
    308     out[i].psfQfMax      = in[i].psfQfMax;     
    309     out[i].psfQfPerfMax  = in[i].psfQfPerfMax;     
    310 
    311     out[i].Mstdev        = in[i].Mstdev;     
    312     out[i].Mmin          = in[i].Mmin;     
    313     out[i].Mmax          = in[i].Mmax;     
    314     out[i].Mchisq        = in[i].Mchisq;     
    315 
    316     out[i].Ncode         = in[i].Ncode;
    317     out[i].Nused         = in[i].Nused;
    318     out[i].NusedKron     = in[i].NusedKron;
    319     out[i].NusedAp       = in[i].NusedAp;
    320 
    321     out[i].flags         = in[i].flags;     
    322 
    323     out[i].MpsfStk       = in[i].MpsfStk;
    324     out[i].FpsfStk       = in[i].FpsfStk;
    325     out[i].dFpsfStk      = in[i].dFpsfStk;
    326 
    327     out[i].MkronStk      = in[i].MkronStk;
    328     out[i].FkronStk      = in[i].FkronStk;
    329     out[i].dFkronStk     = in[i].dFkronStk;
    330 
    331     out[i].MapStk        = in[i].MapStk;
    332     out[i].FapStk        = in[i].FapStk;
    333     out[i].dFapStk       = in[i].dFapStk;
    334 
    335     out[i].Nstack        = in[i].Nstack;     
    336     out[i].NstackDet     = in[i].NstackDet;     
    337 
    338     out[i].stackPrmryOff = in[i].stackPrmryOff;     
    339     out[i].stackBestOff  = in[i].stackBestOff;     
    340 
    341     out[i].MpsfWrp       = in[i].MpsfWrp;
    342     out[i].FpsfWrp       = in[i].FpsfWrp;
    343     out[i].dFpsfWrp      = in[i].dFpsfWrp;
    344     out[i].sFpsfWrp      = in[i].sFpsfWrp;
    345 
    346     out[i].MkronWrp      = in[i].MkronWrp;
    347     out[i].FkronWrp      = in[i].FkronWrp;
    348     out[i].dFkronWrp     = in[i].dFkronWrp;
    349     out[i].sFkronWrp     = in[i].sFkronWrp;
    350 
    351     out[i].MapWrp        = in[i].MapWrp;
    352     out[i].FapWrp        = in[i].FapWrp;
    353     out[i].dFapWrp       = in[i].dFapWrp;
    354     out[i].sFapWrp       = in[i].sFapWrp;
    355 
    356     out[i].NusedWrp      = in[i].NusedWrp;
    357     out[i].NusedKronWrp  = in[i].NusedKronWrp;
    358     out[i].NusedApWrp    = in[i].NusedApWrp;
    359 
    360     out[i].Nwarp         = in[i].Nwarp;     
    361     out[i].NwarpGood     = in[i].NwarpGood;     
    362 
    363     out[i].ubercalDist   = in[i].ubercalDist;     
    364   }
    365   return (out);
    366 }
    367 
    368 SecFilt_PS1_V5 *SecFiltInternalTo_PS1_V5 (SecFilt *in, off_t Nvalues) {
    369 
    370   off_t i;
    371   SecFilt_PS1_V5 *out;
    372 
    373   ALLOCATE_ZERO (out, SecFilt_PS1_V5, Nvalues);
    374 
    375   for (i = 0; i < Nvalues; i++) {
    376 
    377     out[i].M             = in[i].M;     
    378     out[i].dM            = in[i].dM;     
    379     out[i].Map           = in[i].Map;     
    380     out[i].dMap          = in[i].dMap;     
    381     out[i].sMap          = in[i].sMap;     
    382     out[i].Mkron         = in[i].Mkron;     
    383     out[i].dMkron        = in[i].dMkron;     
    384     out[i].sMkron        = in[i].sMkron;     
    385 
    386     out[i].psfQfMax      = in[i].psfQfMax;     
    387     out[i].psfQfPerfMax  = in[i].psfQfPerfMax;     
    388 
    389     out[i].Mstdev        = in[i].Mstdev;     
    390     out[i].Mmin          = in[i].Mmin;     
    391     out[i].Mmax          = in[i].Mmax;     
    392     out[i].Mchisq        = in[i].Mchisq;     
    393 
    394     out[i].Ncode         = in[i].Ncode;
    395     out[i].Nused         = in[i].Nused;
    396     out[i].NusedKron     = in[i].NusedKron;
    397     out[i].NusedAp       = in[i].NusedAp;
    398 
    399     out[i].flags         = in[i].flags;     
    400 
    401     out[i].MpsfStk       = in[i].MpsfStk;
    402     out[i].FpsfStk       = in[i].FpsfStk;
    403     out[i].dFpsfStk      = in[i].dFpsfStk;
    404 
    405     out[i].MkronStk      = in[i].MkronStk;
    406     out[i].FkronStk      = in[i].FkronStk;
    407     out[i].dFkronStk     = in[i].dFkronStk;
    408 
    409     out[i].MapStk        = in[i].MapStk;
    410     out[i].FapStk        = in[i].FapStk;
    411     out[i].dFapStk       = in[i].dFapStk;
    412 
    413     out[i].Nstack        = in[i].Nstack;     
    414     out[i].NstackDet     = in[i].NstackDet;     
    415 
    416     out[i].stackPrmryOff = in[i].stackPrmryOff;     
    417     out[i].stackBestOff  = in[i].stackBestOff;     
    418 
    419     out[i].MpsfWrp       = in[i].MpsfWrp;
    420     out[i].FpsfWrp       = in[i].FpsfWrp;
    421     out[i].dFpsfWrp      = in[i].dFpsfWrp;
    422     out[i].sFpsfWrp      = in[i].sFpsfWrp;
    423 
    424     out[i].MkronWrp      = in[i].MkronWrp;
    425     out[i].FkronWrp      = in[i].FkronWrp;
    426     out[i].dFkronWrp     = in[i].dFkronWrp;
    427     out[i].sFkronWrp     = in[i].sFkronWrp;
    428 
    429     out[i].MapWrp        = in[i].MapWrp;
    430     out[i].FapWrp        = in[i].FapWrp;
    431     out[i].dFapWrp       = in[i].dFapWrp;
    432     out[i].sFapWrp       = in[i].sFapWrp;
    433 
    434     out[i].NusedWrp      = in[i].NusedWrp;
    435     out[i].NusedKronWrp  = in[i].NusedKronWrp;
    436     out[i].NusedApWrp    = in[i].NusedApWrp;
    437 
    438     out[i].Nwarp         = in[i].Nwarp;     
    439     out[i].NwarpGood     = in[i].NwarpGood;     
    440 
    441     out[i].ubercalDist   = in[i].ubercalDist;     
    442   }
    443   return (out);
    444 }
    445 
    446 Lensing *Lensing_PS1_V5_ToInternal (Lensing_PS1_V5 *in, off_t Nvalues) {
    447 
    448   off_t i;
    449   Lensing *out;
    450 
    451   ALLOCATE_ZERO (out, Lensing, Nvalues);
    452 
    453   for (i = 0; i < Nvalues; i++) {
    454     dvo_lensing_init (&out[i]);
    455 
    456     out[i].X11_sm_obj  = in[i].X11_sm_obj;     
    457     out[i].X12_sm_obj  = in[i].X12_sm_obj;     
    458     out[i].X22_sm_obj  = in[i].X22_sm_obj;     
    459     out[i].E1_sm_obj   = in[i].E1_sm_obj;     
    460     out[i].E2_sm_obj   = in[i].E2_sm_obj;     
    461                                          
    462     out[i].X11_sh_obj  = in[i].X11_sh_obj;     
    463     out[i].X12_sh_obj  = in[i].X12_sh_obj;     
    464     out[i].X22_sh_obj  = in[i].X22_sh_obj;     
    465     out[i].E1_sh_obj   = in[i].E1_sh_obj;     
    466     out[i].E2_sh_obj   = in[i].E2_sh_obj;     
    467                                          
    468     out[i].X11_sm_psf  = in[i].X11_sm_psf;
    469     out[i].X12_sm_psf  = in[i].X12_sm_psf;
    470     out[i].X22_sm_psf  = in[i].X22_sm_psf;
    471     out[i].E1_sm_psf   = in[i].E1_sm_psf;
    472     out[i].E2_sm_psf   = in[i].E2_sm_psf;     
    473                                          
    474     out[i].X11_sh_psf  = in[i].X11_sh_psf;
    475     out[i].X12_sh_psf  = in[i].X12_sh_psf;
    476     out[i].X22_sh_psf  = in[i].X22_sh_psf;
    477     out[i].E1_sh_psf   = in[i].E1_sh_psf;
    478     out[i].E2_sh_psf   = in[i].E2_sh_psf;
    479 
    480     out[i].F_ApR5      = in[i].F_ApR5;
    481     out[i].dF_ApR5     = in[i].dF_ApR5;
    482     out[i].sF_ApR5     = in[i].sF_ApR5;
    483     out[i].fF_ApR5     = in[i].fF_ApR5;
    484                                    
    485     out[i].F_ApR6      = in[i].F_ApR6;
    486     out[i].dF_ApR6     = in[i].dF_ApR6;
    487     out[i].sF_ApR6     = in[i].sF_ApR6;
    488     out[i].fF_ApR6     = in[i].fF_ApR6;
    489                                    
    490     out[i].detID       = in[i].detID;
    491     out[i].objID       = in[i].objID;
    492     out[i].catID       = in[i].catID;
    493 
    494     out[i].averef      = in[i].averef;
    495 
    496     out[i].imageID     = in[i].imageID;
    497   }
    498   return (out);
    499 }
    500 
    501 Lensing_PS1_V5 *LensingInternalTo_PS1_V5 (Lensing *in, off_t Nvalues) {
    502 
    503   off_t i;
    504   Lensing_PS1_V5 *out;
    505 
    506   ALLOCATE_ZERO (out, Lensing_PS1_V5, Nvalues);
    507 
    508   for (i = 0; i < Nvalues; i++) {
    509 
    510     out[i].X11_sm_obj  = in[i].X11_sm_obj;     
    511     out[i].X12_sm_obj  = in[i].X12_sm_obj;     
    512     out[i].X22_sm_obj  = in[i].X22_sm_obj;     
    513     out[i].E1_sm_obj   = in[i].E1_sm_obj;     
    514     out[i].E2_sm_obj   = in[i].E2_sm_obj;     
    515                                          
    516     out[i].X11_sh_obj  = in[i].X11_sh_obj;     
    517     out[i].X12_sh_obj  = in[i].X12_sh_obj;     
    518     out[i].X22_sh_obj  = in[i].X22_sh_obj;     
    519     out[i].E1_sh_obj   = in[i].E1_sh_obj;     
    520     out[i].E2_sh_obj   = in[i].E2_sh_obj;     
    521                                          
    522     out[i].X11_sm_psf  = in[i].X11_sm_psf;
    523     out[i].X12_sm_psf  = in[i].X12_sm_psf;
    524     out[i].X22_sm_psf  = in[i].X22_sm_psf;
    525     out[i].E1_sm_psf   = in[i].E1_sm_psf;
    526     out[i].E2_sm_psf   = in[i].E2_sm_psf;     
    527                                          
    528     out[i].X11_sh_psf  = in[i].X11_sh_psf;
    529     out[i].X12_sh_psf  = in[i].X12_sh_psf;
    530     out[i].X22_sh_psf  = in[i].X22_sh_psf;
    531     out[i].E1_sh_psf   = in[i].E1_sh_psf;
    532     out[i].E2_sh_psf   = in[i].E2_sh_psf;
    533 
    534     out[i].F_ApR5      = in[i].F_ApR5;
    535     out[i].dF_ApR5     = in[i].dF_ApR5;
    536     out[i].sF_ApR5     = in[i].sF_ApR5;
    537     out[i].fF_ApR5     = in[i].fF_ApR5;
    538                                    
    539     out[i].F_ApR6      = in[i].F_ApR6;
    540     out[i].dF_ApR6     = in[i].dF_ApR6;
    541     out[i].sF_ApR6     = in[i].sF_ApR6;
    542     out[i].fF_ApR6     = in[i].fF_ApR6;
    543                                    
    544     out[i].detID       = in[i].detID;
    545     out[i].objID       = in[i].objID;
    546     out[i].catID       = in[i].catID;
    547 
    548     out[i].averef      = in[i].averef;
    549     out[i].imageID     = in[i].imageID;
    550   }
    551   return (out);
    552 }
    553 
    554 Lensobj *Lensobj_PS1_V5_ToInternal (Lensobj_PS1_V5 *in, off_t Nvalues) {
    555 
    556   off_t i;
    557   Lensobj *out;
    558 
    559   ALLOCATE_ZERO (out, Lensobj, Nvalues);
    560 
    561   for (i = 0; i < Nvalues; i++) {
    562     dvo_lensobj_init (&out[i], FALSE);
    563 
    564     out[i].X11_sm_obj  = in[i].X11_sm_obj;     
    565     out[i].X12_sm_obj  = in[i].X12_sm_obj;     
    566     out[i].X22_sm_obj  = in[i].X22_sm_obj;     
    567     out[i].E1_sm_obj   = in[i].E1_sm_obj;     
    568     out[i].E2_sm_obj   = in[i].E2_sm_obj;     
    569                                          
    570     out[i].X11_sh_obj  = in[i].X11_sh_obj;     
    571     out[i].X12_sh_obj  = in[i].X12_sh_obj;     
    572     out[i].X22_sh_obj  = in[i].X22_sh_obj;     
    573     out[i].E1_sh_obj   = in[i].E1_sh_obj;     
    574     out[i].E2_sh_obj   = in[i].E2_sh_obj;     
    575                                          
    576     out[i].X11_sm_psf  = in[i].X11_sm_psf;
    577     out[i].X12_sm_psf  = in[i].X12_sm_psf;
    578     out[i].X22_sm_psf  = in[i].X22_sm_psf;
    579     out[i].E1_sm_psf   = in[i].E1_sm_psf;
    580     out[i].E2_sm_psf   = in[i].E2_sm_psf;     
    581                                          
    582     out[i].X11_sh_psf  = in[i].X11_sh_psf;
    583     out[i].X12_sh_psf  = in[i].X12_sh_psf;
    584     out[i].X22_sh_psf  = in[i].X22_sh_psf;
    585     out[i].E1_sh_psf   = in[i].E1_sh_psf;
    586     out[i].E2_sh_psf   = in[i].E2_sh_psf;
    587 
    588     out[i].F_ApR5      = in[i].F_ApR5;
    589     out[i].dF_ApR5     = in[i].dF_ApR5;
    590     out[i].sF_ApR5     = in[i].sF_ApR5;
    591     out[i].fF_ApR5     = in[i].fF_ApR5;
    592                                    
    593     out[i].F_ApR6      = in[i].F_ApR6;
    594     out[i].dF_ApR6     = in[i].dF_ApR6;
    595     out[i].sF_ApR6     = in[i].sF_ApR6;
    596     out[i].fF_ApR6     = in[i].fF_ApR6;
    597                                    
    598     out[i].gamma       = in[i].gamma;
    599     out[i].E1          = in[i].E1;
    600     out[i].E2          = in[i].E2;
    601 
    602     out[i].objID       = in[i].objID;
    603     out[i].catID       = in[i].catID;
    604 
    605     out[i].photcode    = in[i].photcode;
    606     out[i].Nmeas       = in[i].Nmeas;
    607   }
    608   return (out);
    609 }
    610 
    611 Lensobj_PS1_V5 *LensobjInternalTo_PS1_V5 (Lensobj *in, off_t Nvalues) {
    612 
    613   off_t i;
    614   Lensobj_PS1_V5 *out;
    615 
    616   ALLOCATE_ZERO (out, Lensobj_PS1_V5, Nvalues);
    617 
    618   for (i = 0; i < Nvalues; i++) {
    619 
    620     out[i].X11_sm_obj  = in[i].X11_sm_obj;     
    621     out[i].X12_sm_obj  = in[i].X12_sm_obj;     
    622     out[i].X22_sm_obj  = in[i].X22_sm_obj;     
    623     out[i].E1_sm_obj   = in[i].E1_sm_obj;     
    624     out[i].E2_sm_obj   = in[i].E2_sm_obj;     
    625                                          
    626     out[i].X11_sh_obj  = in[i].X11_sh_obj;     
    627     out[i].X12_sh_obj  = in[i].X12_sh_obj;     
    628     out[i].X22_sh_obj  = in[i].X22_sh_obj;     
    629     out[i].E1_sh_obj   = in[i].E1_sh_obj;     
    630     out[i].E2_sh_obj   = in[i].E2_sh_obj;     
    631                                          
    632     out[i].X11_sm_psf  = in[i].X11_sm_psf;
    633     out[i].X12_sm_psf  = in[i].X12_sm_psf;
    634     out[i].X22_sm_psf  = in[i].X22_sm_psf;
    635     out[i].E1_sm_psf   = in[i].E1_sm_psf;
    636     out[i].E2_sm_psf   = in[i].E2_sm_psf;     
    637                                          
    638     out[i].X11_sh_psf  = in[i].X11_sh_psf;
    639     out[i].X12_sh_psf  = in[i].X12_sh_psf;
    640     out[i].X22_sh_psf  = in[i].X22_sh_psf;
    641     out[i].E1_sh_psf   = in[i].E1_sh_psf;
    642     out[i].E2_sh_psf   = in[i].E2_sh_psf;
    643 
    644     out[i].F_ApR5      = in[i].F_ApR5;
    645     out[i].dF_ApR5     = in[i].dF_ApR5;
    646     out[i].sF_ApR5     = in[i].sF_ApR5;
    647     out[i].fF_ApR5     = in[i].fF_ApR5;
    648                                    
    649     out[i].F_ApR6      = in[i].F_ApR6;
    650     out[i].dF_ApR6     = in[i].dF_ApR6;
    651     out[i].sF_ApR6     = in[i].sF_ApR6;
    652     out[i].fF_ApR6     = in[i].fF_ApR6;
    653                                    
    654     out[i].gamma       = in[i].gamma;
    655     out[i].E1          = in[i].E1;
    656     out[i].E2          = in[i].E2;
    657 
    658     out[i].objID       = in[i].objID;
    659     out[i].catID       = in[i].catID;
    660 
    661     out[i].photcode    = in[i].photcode;
    662     out[i].Nmeas       = in[i].Nmeas;
    663   }
    664   return (out);
    665 }
    666 
    667 StarPar *StarPar_PS1_V5_ToInternal (StarPar_PS1_V5 *in, off_t Nvalues) {
    668 
    669   off_t i;
    670   StarPar *out;
    671 
    672   ALLOCATE_ZERO (out, StarPar, Nvalues);
    673 
    674   for (i = 0; i < Nvalues; i++) {
    675     dvo_starpar_init (&out[i]);
    676 
    677     out[i].R         = in[i].R;     
    678     out[i].D         = in[i].D;     
    679     out[i].galLat    = in[i].galLat;     
    680     out[i].galLon    = in[i].galLon;     
    681 
    682     out[i].Ebv       = in[i].Ebv     ;     
    683     out[i].dEbv      = in[i].dEbv    ;     
    684     out[i].DistMag   = in[i].DistMag ;     
    685     out[i].dDistMag  = in[i].dDistMag;     
    686     out[i].M_r       = in[i].M_r     ;     
    687     out[i].dM_r      = in[i].dM_r    ;     
    688     out[i].FeH       = in[i].FeH     ;     
    689     out[i].dFeH      = in[i].dFeH    ;     
    690     out[i].uRA       = in[i].uRA     ;     
    691     out[i].uDEC      = in[i].uDEC    ;     
    692 
    693     out[i].averef  = in[i].averef;
    694     out[i].objID   = in[i].objID ;
    695     out[i].catID   = in[i].catID ;
    696   }
    697   return (out);
    698 }
    699 
    700 StarPar_PS1_V5 *StarParInternalTo_PS1_V5 (StarPar *in, off_t Nvalues) {
    701 
    702   off_t i;
    703   StarPar_PS1_V5 *out;
    704 
    705   ALLOCATE_ZERO (out, StarPar_PS1_V5, Nvalues);
    706 
    707   for (i = 0; i < Nvalues; i++) {
    708 
    709     out[i].R         = in[i].R;     
    710     out[i].D         = in[i].D;     
    711     out[i].galLat    = in[i].galLat;     
    712     out[i].galLon    = in[i].galLon;     
    713 
    714     out[i].Ebv       = in[i].Ebv     ;     
    715     out[i].dEbv      = in[i].dEbv    ;     
    716     out[i].DistMag   = in[i].DistMag ;     
    717     out[i].dDistMag  = in[i].dDistMag;     
    718     out[i].M_r       = in[i].M_r     ;     
    719     out[i].dM_r      = in[i].dM_r    ;     
    720     out[i].FeH       = in[i].FeH     ;     
    721     out[i].dFeH      = in[i].dFeH    ;     
    722     out[i].uRA       = in[i].uRA     ;     
    723     out[i].uDEC      = in[i].uDEC    ;     
    724 
    725     out[i].averef  = in[i].averef;
    726     out[i].objID   = in[i].objID ;
    727     out[i].catID   = in[i].catID ;
    728   }
    729   return (out);
    730 }
    731 
    732 # define RAW_IMAGE_NAME_LEN 117
    733 
    734 Image *Image_PS1_V5_ToInternal (Image_PS1_V5 *in, off_t Nvalues, off_t Nalloc) {
    735 
    736   off_t i;
    737   Image *out;
    738 
    739   char *buffer;
    740   ALLOCATE_ZERO (buffer, char, Nalloc);
    741   out = (Image *) buffer;
    742   // ALLOCATE_ZERO (out, Image, Nvalues);
    743 
    744   for (i = 0; i < Nvalues; i++) {
    745     // this is only safe because the initial 120 bytes in Coords match CoordsDisk
    746     memcpy (&out[i].coords, &in[i].coords, sizeof(CoordsDisk));
    747     out[i].coords.mosaic   = NULL;
    748     out[i].coords.offsetMap = NULL;
    749 
    750     // RAW_IMAGE_NAME_LEN == DVO_IMAGE_NAME_LEN
    751     strncpy (out[i].name, in[i].name, RAW_IMAGE_NAME_LEN - 1);
    752     out[i].name[RAW_IMAGE_NAME_LEN - 1] = 0; // force termination
    753 
    754     out[i].tzero            = in[i].tzero;
    755     out[i].nstar            = in[i].nstar;
    756     out[i].secz             = in[i].secz;
    757     out[i].NX               = in[i].NX;
    758     out[i].NY               = in[i].NY;
    759     out[i].apmifit          = in[i].apmifit;
    760     out[i].dapmifit         = in[i].dapmifit;
    761     out[i].Mcal             = in[i].Mcal;
    762     out[i].dMcal            = in[i].dMcal;
    763     out[i].Xm               = in[i].Xm;
    764     out[i].photcode         = in[i].photcode;
    765     out[i].exptime          = in[i].exptime;
    766     out[i].sidtime          = in[i].sidtime;
    767     out[i].latitude         = in[i].latitude;
    768 
    769     out[i].RAo              = in[i].RAo;
    770     out[i].DECo             = in[i].DECo;
    771     out[i].Radius           = in[i].Radius;
    772     out[i].refColorBlue     = in[i].refColorBlue;
    773     out[i].refColorRed      = in[i].refColorRed;
    774 
    775     out[i].detection_limit  = in[i].detection_limit;
    776     out[i].saturation_limit = in[i].saturation_limit;
    777     out[i].cerror           = in[i].cerror;
    778     out[i].fwhm_x           = in[i].fwhm_x;
    779     out[i].fwhm_y           = in[i].fwhm_y;
    780     out[i].trate            = in[i].trate;
    781     out[i].ccdnum           = in[i].ccdnum;
    782     out[i].flags            = in[i].flags;
    783     out[i].imageID          = in[i].imageID;
    784     out[i].parentID         = in[i].parentID;
    785     out[i].externID         = in[i].externID;
    786     out[i].sourceID         = in[i].sourceID;
    787 
    788     // as of 2011.02.03, the old Mx,My,..., Mxxxx,Myyyy have been deprecated and replaced
    789     // with the following.  (no real databases used those values -- see
    790     // libdvo/doc/dvo-images.txt)
    791     out[i].nLinkAstrom      = in[i].nLinkAstrom;
    792     out[i].nLinkPhotom      = in[i].nLinkPhotom;
    793     out[i].ubercalDist      = in[i].ubercalDist;
    794     out[i].dXpixSys         = in[i].dXpixSys;
    795     out[i].dYpixSys         = in[i].dYpixSys;
    796     out[i].dMagSys          = in[i].dMagSys;
    797     out[i].nFitAstrom       = in[i].nFitAstrom;
    798     out[i].nFitPhotom       = in[i].nFitPhotom;
    799     out[i].photom_map_id    = in[i].photom_map_id;
    800     out[i].astrom_map_id    = in[i].astrom_map_id;
    801   }
    802   return (out);
    803 }
    804 
    805 Image_PS1_V5 *ImageInternalTo_PS1_V5 (Image *in, off_t Nvalues) {
    806 
    807   off_t i;
    808   Image_PS1_V5 *out;
    809 
    810   ALLOCATE_ZERO (out, Image_PS1_V5, Nvalues);
    811 
    812   for (i = 0; i < Nvalues; i++) {
    813     // this is only save because the initial 120 bytes in Coords match CoordsDisk
    814     memcpy (&out[i].coords, &in[i].coords, sizeof(CoordsDisk));
    815 
    816     // RAW_IMAGE_NAME_LEN == DVO_IMAGE_NAME_LEN
    817     strncpy (out[i].name, in[i].name, RAW_IMAGE_NAME_LEN - 1);
    818     out[i].name[RAW_IMAGE_NAME_LEN - 1] = 0; // force termination
    819 
    820     out[i].tzero            = in[i].tzero;
    821     out[i].nstar            = in[i].nstar;
    822     out[i].secz             = in[i].secz;
    823     out[i].NX               = in[i].NX;
    824     out[i].NY               = in[i].NY;
    825     out[i].apmifit          = in[i].apmifit;
    826     out[i].dapmifit         = in[i].dapmifit;
    827     out[i].Mcal             = in[i].Mcal;
    828     out[i].dMcal            = in[i].dMcal;
    829     out[i].Xm               = in[i].Xm;
    830     out[i].photcode         = in[i].photcode;
    831     out[i].exptime          = in[i].exptime;
    832     out[i].sidtime          = in[i].sidtime;
    833     out[i].latitude         = in[i].latitude;
    834 
    835     out[i].RAo              = in[i].RAo;
    836     out[i].DECo             = in[i].DECo;
    837     out[i].Radius           = in[i].Radius;
    838     out[i].refColorBlue     = in[i].refColorBlue;
    839     out[i].refColorRed      = in[i].refColorRed;
    840 
    841     out[i].detection_limit  = in[i].detection_limit;
    842     out[i].saturation_limit = in[i].saturation_limit;
    843     out[i].cerror           = in[i].cerror;
    844     out[i].fwhm_x           = in[i].fwhm_x;
    845     out[i].fwhm_y           = in[i].fwhm_y;
    846     out[i].trate            = in[i].trate;
    847     out[i].ccdnum           = in[i].ccdnum;
    848     out[i].flags            = in[i].flags;
    849     out[i].imageID          = in[i].imageID;
    850     out[i].parentID         = in[i].parentID;
    851     out[i].externID         = in[i].externID;
    852     out[i].sourceID         = in[i].sourceID;
    853 
    854     // as of 2011.02.03, the old Mx,My,..., Mxxxx,Myyyy have been deprecated and replaced
    855     // with the following.  (no real databases used those values -- see
    856     // libdvo/doc/dvo-images.txt)
    857     out[i].nLinkAstrom      = in[i].nLinkAstrom;
    858     out[i].nLinkPhotom      = in[i].nLinkPhotom;
    859     out[i].ubercalDist      = in[i].ubercalDist;
    860     out[i].dXpixSys         = in[i].dXpixSys;
    861     out[i].dYpixSys         = in[i].dYpixSys;
    862     out[i].dMagSys          = in[i].dMagSys;
    863     out[i].nFitAstrom       = in[i].nFitAstrom;
    864     out[i].nFitPhotom       = in[i].nFitPhotom;
    865     out[i].photom_map_id    = in[i].photom_map_id;
    866     out[i].astrom_map_id    = in[i].astrom_map_id;
    867   }
    868   return (out);
    869 }
    870 
    871 PhotCode *PhotCode_PS1_V5_To_Internal (PhotCode_PS1_V5 *in, off_t Nvalues) {
    872 
    873   off_t i;
    874   PhotCode *out;
    875 
    876   ALLOCATE_ZERO (out, PhotCode, Nvalues);
    877 
    878   for (i = 0; i < Nvalues; i++) {
    879     strncpy (out[i].name, in[i].name, 31); // out[32], in[32]
    880     out[i].name[31] = 0; // force termination
    881 
    882     out[i].code  = in[i].code;         
    883     out[i].type  = in[i].type;         
    884     out[i].C     = in[i].C;           
    885     out[i].dC    = in[i].dC;           
    886     out[i].dX    = in[i].dX;           
    887     out[i].K     = in[i].K;           
    888     out[i].c1    = in[i].c1;           
    889     out[i].c2    = in[i].c2;           
    890     out[i].equiv = in[i].equiv;       
    891     out[i].Nc    = in[i].Nc;           
    892     memcpy (out[i].X, in[i].X, 4*sizeof(float));           
    893 
    894     out[i].astromErrSys      = in[i].astromErrSys;
    895     out[i].astromErrScale    = in[i].astromErrScale;
    896     out[i].astromErrMagScale = in[i].astromErrMagScale;
    897     out[i].photomErrSys      = in[i].photomErrSys;
    898 
    899     out[i].photomPoorMask      = in[i].photomPoorMask;
    900     out[i].photomBadMask       = in[i].photomBadMask;
    901     out[i].astromPoorMask      = in[i].astromPoorMask;
    902     out[i].astromBadMask       = in[i].astromBadMask;
    903   }
    904   return (out);
    905 }
    906 
    907 PhotCode_PS1_V5 *PhotCode_Internal_To_PS1_V5 (PhotCode *in, off_t Nvalues) {
    908 
    909   off_t i;
    910   PhotCode_PS1_V5 *out;
    911 
    912   ALLOCATE_ZERO (out, PhotCode_PS1_V5, Nvalues);
    913 
    914   for (i = 0; i < Nvalues; i++) {
    915     strncpy (out[i].name, in[i].name, 31); // out[32], in[32]
    916     out[i].name[31] = 0; // force termination
    917 
    918     out[i].code  = in[i].code;         
    919     out[i].type  = in[i].type;         
    920     out[i].C     = in[i].C;           
    921     out[i].dC    = in[i].dC;           
    922     out[i].dX    = in[i].dX;           
    923     out[i].K     = in[i].K;           
    924     out[i].c1    = in[i].c1;           
    925     out[i].c2    = in[i].c2;           
    926     out[i].equiv = in[i].equiv;       
    927     out[i].Nc    = in[i].Nc;           
    928     memcpy (out[i].X, in[i].X, 4*sizeof(float));           
    929 
    930     out[i].astromErrSys      = in[i].astromErrSys;
    931     out[i].astromErrScale    = in[i].astromErrScale;
    932     out[i].astromErrMagScale = in[i].astromErrMagScale;
    933     out[i].photomErrSys      = in[i].photomErrSys;
    934 
    935     out[i].photomPoorMask      = in[i].photomPoorMask;
    936     out[i].photomBadMask       = in[i].photomBadMask;
    937     out[i].astromPoorMask      = in[i].astromPoorMask;
    938     out[i].astromBadMask       = in[i].astromBadMask;
    939   }
    940   return (out);
    941 }
    942 
    943 /*********************** old / alternate version **********************/
    944 
    945 // 'primary' is needed to conform with the API for Loneos and Elixir, but is not used
    946 Average *Average_PS1_V5alt_ToInternal (Average_PS1_V5alt *in, off_t Nvalues) {
    947 
    948   off_t i;
    949   Average *out;
    950 
    951   ALLOCATE_ZERO (out, Average, Nvalues);
    952 
    953   for (i = 0; i < Nvalues; i++) {
    954     dvo_average_init (&out[i]);
    955 
    956     out[i].R              = in[i].R;     
    957     out[i].D              = in[i].D;     
    958     out[i].dR             = in[i].dR;
    959     out[i].dD             = in[i].dD;
    960     out[i].uR             = in[i].uR;
    961     out[i].uD             = in[i].uD;
    962     out[i].duR            = in[i].duR;
    963     out[i].duD            = in[i].duD;
    964     out[i].P              = in[i].P;
    965     out[i].dP             = in[i].dP;
    966                          
    967     out[i].Rstk           = in[i].Rstk;     
    968     out[i].Dstk           = in[i].Dstk;     
    969     out[i].dRstk          = in[i].dRstk;
    970     out[i].dDstk          = in[i].dDstk;
    971                          
    972     out[i].ChiSqAve       = in[i].ChiSqAve;     
    973     out[i].ChiSqPM        = in[i].ChiSqPM;     
    974     out[i].ChiSqPar       = in[i].ChiSqPar;     
    975     out[i].Tmean          = in[i].Tmean;     
    976     out[i].Trange         = in[i].Trange;     
    977                          
    978     out[i].psfQF          = in[i].psfQF;
    979     out[i].psfQFperf      = in[i].psfQFperf;
    980     out[i].stargal        = in[i].stargal;     
    981     out[i].Npos           = in[i].Npos;     
    982                          
    983     out[i].Nmeasure       = in[i].Nmeasure;     
    984     out[i].Nmissing       = in[i].Nmissing;     
    985     out[i].Nlensing       = in[i].Nlensing;     
    986     out[i].Nlensobj       = in[i].Nlensobj;     
    987     out[i].Nextend        = in[i].Nextend;     
    988                          
    989     out[i].measureOffset  = in[i].measureOffset;
    990     out[i].missingOffset  = in[i].missingOffset;
    991     out[i].lensingOffset  = in[i].lensingOffset;
    992     out[i].lensobjOffset  = in[i].lensobjOffset;
    993     out[i].starparOffset  = in[i].starparOffset;
    994     out[i].extendOffset   = in[i].extendOffset;
    995                          
    996     out[i].refColorBlue   = in[i].refColorBlue;
    997     out[i].refColorRed    = in[i].refColorRed;
    998                          
    999     out[i].flags          = in[i].flags;   
    1000     out[i].photFlagsUpper = in[i].photFlagsUpper;   
    1001     out[i].photFlagsLower = in[i].photFlagsLower;   
    1002     out[i].objID          = in[i].objID;
    1003     out[i].catID          = in[i].catID;
    1004     out[i].extID          = in[i].extID;
    1005     out[i].extIDgc        = in[i].extIDgc;
    1006   }
    1007   return (out);
    1008 }
    1009 
    1010 int gfits_convert_Average_PS1_V5alt (Average_PS1_V5alt *data, off_t size, off_t nitems) {
     1398int gfits_convert_Measure_PS1_V5alt (Measure_PS1_V5alt *data, off_t size, off_t nitems) {
    10111399
    10121400  off_t i;
    10131401  unsigned char *byte, tmp;
    10141402
    1015   if (size != 184) {
    1016     fprintf (stderr, "WARNING: mismatch in data types Average_PS1_V5alt: "OFF_T_FMT" vs %d\n",  size,  184);
     1403  if (size != 232) {
     1404    fprintf (stderr, "WARNING: mismatch in data types Measure_PS1_V5alt: "OFF_T_FMT" vs %d\n",  size,  232);
    10171405    return (FALSE);
    10181406  }
     
    10241412# ifdef BYTE_SWAP
    10251413  byte = (unsigned char *) data;
    1026   for (i = 0; i < nitems; i++, byte += 184) {
     1414  for (i = 0; i < nitems; i++, byte += 232) {
    10271415    /** BYTE SWAP **/
    10281416    SWAP_DBLE (0); // RA
    10291417    SWAP_DBLE (8); // DEC
    1030     SWAP_WORD (16); // RA_ERR
    1031     SWAP_WORD (20); // DEC_ERR
    1032     SWAP_WORD (24); // U_RA
    1033     SWAP_WORD (28); // U_DEC
    1034     SWAP_WORD (32); // V_RA_ERR
    1035     SWAP_WORD (36); // V_DEC_ERR
    1036     SWAP_WORD (40); // PAR
    1037     SWAP_WORD (44); // PAR_ERR
    1038     SWAP_DBLE (48); // RA_STK
    1039     SWAP_DBLE (56); // DEC_STK
    1040     SWAP_WORD (64); // RA_STK_ERR
    1041     SWAP_WORD (68); // DEC_STK_ERR
    1042     SWAP_WORD (72); // CHISQ_POS
    1043     SWAP_WORD (76); // CHISQ_PM
    1044     SWAP_WORD (80); // CHISQ_PAP
    1045     SWAP_WORD (84); // MEAN_EPOCH
    1046     SWAP_WORD (88); // TIME_RANGE
    1047     SWAP_WORD (92); // PSF_QF
    1048     SWAP_WORD (96); // PSF_QF_PERF
    1049     SWAP_WORD (100); // STARGAL_SEP
    1050     SWAP_BYTE (104); // NUMBER_POS
    1051     SWAP_BYTE (106); // NMEASURE
    1052     SWAP_BYTE (108); // NMISSING
    1053     SWAP_BYTE (110); // NLENSING
    1054     SWAP_BYTE (112); // NLENSOBJ
    1055     SWAP_BYTE (114); // NEXTEND
    1056     SWAP_WORD (116); // OFF_MEASURE
    1057     SWAP_WORD (120); // OFF_MISSING
    1058     SWAP_WORD (124); // OFF_LENSING
    1059     SWAP_WORD (128); // OFF_LENSOBJ
    1060     SWAP_WORD (132); // OFF_EXTEND
    1061     SWAP_WORD (136); // OFF_PARAMS
    1062     SWAP_WORD (140); // REF_COLOR_BLUE
    1063     SWAP_WORD (144); // REF_COLOR_RED
    1064     SWAP_WORD (148); // FLAGS
    1065     SWAP_WORD (152); // PHOTFLAGS_U
    1066     SWAP_WORD (156); // PHOTFLAGS_L
    1067     SWAP_WORD (160); // OBJ_ID
    1068     SWAP_WORD (164); // CAT_ID
    1069     SWAP_DBLE (168); // EXT_ID
    1070     SWAP_DBLE (176); // EXT_ID_GC
     1418    SWAP_WORD (16); // MAG
     1419    SWAP_WORD (20); // MAG_ERR
     1420    SWAP_WORD (24); // M_APER
     1421    SWAP_WORD (28); // M_APER_ERR
     1422    SWAP_WORD (32); // M_KRON
     1423    SWAP_WORD (36); // M_KRON_ERR
     1424    SWAP_WORD (40); // M_CAL
     1425    SWAP_WORD (44); // MAG_CAL_ERR
     1426    SWAP_WORD (48); // M_TIME
     1427    SWAP_WORD (52); // FLUX_PSF
     1428    SWAP_WORD (56); // FLUX_PSF_ERR
     1429    SWAP_WORD (60); // FLUX_KRON
     1430    SWAP_WORD (64); // FLUX_KRON_ERR
     1431    SWAP_WORD (68); // FLUX_AP
     1432    SWAP_WORD (72); // FLUX_AP_ERR
     1433    SWAP_WORD (76); // AIRMASS
     1434    SWAP_WORD (80); // AZ
     1435    SWAP_WORD (84); // X_CCD
     1436    SWAP_WORD (88); // Y_CCD
     1437    SWAP_WORD (92); // X_FIX
     1438    SWAP_WORD (96); // Y_FIX
     1439    SWAP_WORD (100); // X_OFF_KH
     1440    SWAP_WORD (104); // Y_OFF_KH
     1441    SWAP_WORD (108); // X_OFF_DCR
     1442    SWAP_WORD (112); // Y_OFF_DCR
     1443    SWAP_WORD (116); // R_OFF_GAL
     1444    SWAP_WORD (120); // D_OFF_GAL
     1445    SWAP_WORD (124); // SKY_FLUX
     1446    SWAP_WORD (128); // SKY_FLUX_ERR
     1447    SWAP_WORD (132); // TIME
     1448    SWAP_WORD (136); // AVE_REF
     1449    SWAP_WORD (140); // DET_ID
     1450    SWAP_WORD (144); // OBJ_ID
     1451    SWAP_WORD (148); // CAT_ID
     1452    SWAP_DBLE (152); // EXT_ID
     1453    SWAP_WORD (160); // IMAGE_ID
     1454    SWAP_WORD (164); // PSF_QF
     1455    SWAP_WORD (168); // PSF_QF_PEFECT
     1456    SWAP_WORD (172); // PSF_CHISQ
     1457    SWAP_WORD (176); // PSF_NDOF
     1458    SWAP_WORD (180); // PSF_NPIX
     1459    SWAP_WORD (184); // PHOT_FLAGS
     1460    SWAP_WORD (188); // EXT_NSIGMA
     1461    SWAP_BYTE (192); // FWHM_MAJOR
     1462    SWAP_BYTE (194); // FWHM_MINOR
     1463    SWAP_BYTE (196); // PSF_THETA
     1464    SWAP_BYTE (198); // MXX
     1465    SWAP_BYTE (200); // MXY
     1466    SWAP_BYTE (202); // MYY
     1467    SWAP_BYTE (204); // TIME_MSEC
     1468    SWAP_BYTE (206); // PHOTCODE
     1469    SWAP_BYTE (208); // X_CCD_ERR
     1470    SWAP_BYTE (210); // Y_CCD_ERR
     1471    SWAP_BYTE (212); // POS_SYS_ERR
     1472    SWAP_BYTE (214); // POSANGLE
     1473    SWAP_WORD (216); // PLTSCALE
     1474    SWAP_WORD (220); // DB_FLAGS
     1475    SWAP_WORD (224); // PHOT_FLAGS
     1476    SWAP_WORD (228); // PADDING
    10711477  }
    10721478# endif 
     
    10751481}
    10761482
    1077 /*** add test of EXTNAME and header-defined columns? ***/
    10781483/* return internal structure representation */
    1079 Average_PS1_V5alt *gfits_table_get_Average_PS1_V5alt (FTable *ftable, off_t *Ndata, char *swapped) {
     1484Measure_PS1_V5alt *gfits_table_get_Measure_PS1_V5alt (FTable *ftable, off_t *Ndata, char *swapped) {
    10801485
    10811486  int Ncols;
    1082   Average_PS1_V5alt *data;
     1487  Measure_PS1_V5alt *data;
    10831488
    10841489  Ncols = ftable[0].header[0].Naxis[0];
    1085   if (Ncols != 184) {
    1086     fprintf (stderr, "ERROR: mis-match in table size: width is %d but should be %d bytes\n", Ncols, 184);
     1490  if (Ncols != 232) {
     1491    fprintf (stderr, "ERROR: mis-match in table size: width is %d but should be %d bytes\n", Ncols, 232);
    10871492    return NULL;
    10881493  }
    10891494
    10901495  *Ndata = ftable[0].header[0].Naxis[1];
    1091   data = (Average_PS1_V5alt *) ftable[0].buffer;
     1496  data = (Measure_PS1_V5alt *) ftable[0].buffer;
    10921497  if ((swapped == NULL) || (*swapped == FALSE)) {
    1093     if (!gfits_convert_Average_PS1_V5alt (data, sizeof (Average_PS1_V5alt), *Ndata)) {
     1498    if (!gfits_convert_Measure_PS1_V5alt (data, sizeof (Measure_PS1_V5alt), *Ndata)) {
    10941499      return NULL;
    10951500    }
     
    11001505}
    11011506
    1102 /****** alt secfilt **********/
    1103 
    1104 SecFilt *SecFilt_PS1_V5alt_ToInternal (SecFilt_PS1_V5alt *in, off_t Nvalues) {
    1105 
    1106   off_t i;
    1107   SecFilt *out;
    1108 
    1109   ALLOCATE_ZERO (out, SecFilt, Nvalues);
    1110 
    1111   for (i = 0; i < Nvalues; i++) {
    1112     dvo_secfilt_init (&out[i]);
    1113 
    1114     out[i].M             = in[i].M;     
    1115     out[i].dM            = in[i].dM;     
    1116     out[i].Map           = in[i].Map;     
    1117     out[i].dMap          = in[i].dMap;     
    1118     out[i].sMap          = in[i].sMap;     
    1119     out[i].Mkron         = in[i].Mkron;     
    1120     out[i].dMkron        = in[i].dMkron;     
    1121 
    1122     out[i].Mstdev        = in[i].Mstdev;     
    1123     out[i].Mmin          = in[i].Mmin;     
    1124     out[i].Mmax          = in[i].Mmax;     
    1125     out[i].Mchisq        = in[i].Mchisq;     
    1126 
    1127     out[i].Ncode         = in[i].Ncode;
    1128     out[i].Nused         = in[i].Nused;
    1129     out[i].NusedKron     = in[i].NusedKron;
    1130     out[i].NusedAp       = in[i].NusedAp;
    1131 
    1132     out[i].flags         = in[i].flags;     
    1133 
    1134     out[i].MpsfStk       = in[i].MpsfStk;
    1135     out[i].FpsfStk       = in[i].FpsfStk;
    1136     out[i].dFpsfStk      = in[i].dFpsfStk;
    1137 
    1138     out[i].MkronStk      = in[i].MkronStk;
    1139     out[i].FkronStk      = in[i].FkronStk;
    1140     out[i].dFkronStk     = in[i].dFkronStk;
    1141 
    1142     out[i].MapStk        = in[i].MapStk;
    1143     out[i].FapStk        = in[i].FapStk;
    1144     out[i].dFapStk       = in[i].dFapStk;
    1145 
    1146     out[i].stackPrmryOff = in[i].stackPrmryOff;     
    1147     out[i].stackBestOff  = in[i].stackBestOff;     
    1148 
    1149     out[i].MpsfWrp       = in[i].MpsfWrp;
    1150     out[i].FpsfWrp       = in[i].FpsfWrp;
    1151     out[i].dFpsfWrp      = in[i].dFpsfWrp;
    1152     out[i].sFpsfWrp      = in[i].sFpsfWrp;
    1153 
    1154     out[i].MkronWrp      = in[i].MkronWrp;
    1155     out[i].FkronWrp      = in[i].FkronWrp;
    1156     out[i].dFkronWrp     = in[i].dFkronWrp;
    1157     out[i].sFkronWrp     = in[i].sFkronWrp;
    1158 
    1159     out[i].MapWrp        = in[i].MapWrp;
    1160     out[i].FapWrp        = in[i].FapWrp;
    1161     out[i].dFapWrp       = in[i].dFapWrp;
    1162     out[i].sFapWrp       = in[i].sFapWrp;
    1163 
    1164     out[i].NusedWrp      = in[i].NusedWrp;
    1165     out[i].NusedKronWrp  = in[i].NusedKronWrp;
    1166     out[i].NusedApWrp    = in[i].NusedApWrp;
    1167 
    1168     out[i].ubercalDist   = in[i].ubercalDist;     
    1169   }
    1170   return (out);
    1171 }
    1172 
    1173 int gfits_convert_SecFilt_PS1_V5alt (SecFilt_PS1_V5alt *data, off_t size, off_t nitems) {
    1174 
    1175   off_t i;
    1176   unsigned char *byte, tmp;
    1177 
    1178   if (size != 160) {
    1179     fprintf (stderr, "WARNING: mismatch in data types SecFilt_PS1_V5alt: "OFF_T_FMT" vs %d\n",  size,  160);
    1180     return (FALSE);
    1181   }
    1182 
    1183   /* provide initial values to avoid compiler warnings for non-BYTE_SWAP arch */
    1184   i = tmp = 0;
    1185   byte = NULL;
    1186 
    1187 # ifdef BYTE_SWAP
    1188   byte = (unsigned char *) data;
    1189   for (i = 0; i < nitems; i++, byte += 160) {
    1190     /** BYTE SWAP **/
    1191     SWAP_WORD (0); // MAG
    1192     SWAP_WORD (4); // MAG_ERR
    1193     SWAP_WORD (8); // MAG_AP
    1194     SWAP_WORD (12); // MAG_AP_ERR
    1195     SWAP_WORD (16); // MAG_AP_STDEV
    1196     SWAP_WORD (20); // MAG_KRON
    1197     SWAP_WORD (24); // MAG_KRON_ERR
    1198     SWAP_WORD (28); // MAG_KRON_STDEV
    1199     SWAP_WORD (32); // MAG_STDEV
    1200     SWAP_WORD (36); // MAG_MIN
    1201     SWAP_WORD (40); // MAG_MAX
    1202     SWAP_WORD (44); // MAG_CHI
    1203     SWAP_BYTE (48); // NCODE
    1204     SWAP_BYTE (50); // NUSED
    1205     SWAP_BYTE (52); // NUSED_KRON
    1206     SWAP_BYTE (54); // NUSED_AP
    1207     SWAP_WORD (56); // FLAGS
    1208     SWAP_WORD (60); // MAG_PSF_STK
    1209     SWAP_WORD (64); // FLUX_PSF_STK
    1210     SWAP_WORD (68); // FLUX_PSF_STK_ERR
    1211     SWAP_WORD (72); // MAG_KRON_STK
    1212     SWAP_WORD (76); // FLUX_KRON_STK
    1213     SWAP_WORD (80); // FLUX_KRON_STK_ERR
    1214     SWAP_WORD (84); // MAG_AP_STK
    1215     SWAP_WORD (88); // FLUX_AP_STK
    1216     SWAP_WORD (92); // FLUX_AP_STK_ERR
    1217     SWAP_WORD (96); // STACK_PRIMARY_OFF
    1218     SWAP_WORD (100); // STACK_BEST_OFF
    1219     SWAP_WORD (104); // MAG_PSF_WRP
    1220     SWAP_WORD (108); // FLUX_PSF_WRP
    1221     SWAP_WORD (112); // FLUX_PSF_WRP_ERR
    1222     SWAP_WORD (116); // FLUX_PSF_WRP_STD
    1223     SWAP_WORD (120); // MAG_KRON_WRP
    1224     SWAP_WORD (124); // FLUX_KRON_WRP
    1225     SWAP_WORD (128); // FLUX_KRON_WRP_ERR
    1226     SWAP_WORD (132); // FLUX_KRON_WRP_STD
    1227     SWAP_WORD (136); // MAG_AP_WRP
    1228     SWAP_WORD (140); // FLUX_AP_WRP
    1229     SWAP_WORD (144); // FLUX_AP_WRP_ERR
    1230     SWAP_WORD (148); // FLUX_AP_WRP_STD
    1231     SWAP_BYTE (152); // NUSED_WRP
    1232     SWAP_BYTE (154); // NUSED_KRON_WRP
    1233     SWAP_BYTE (156); // NUSED_AP_WRP
    1234     SWAP_BYTE (158); // UBERCAL_DIST
    1235   }
    1236 # endif 
    1237 
    1238   return (TRUE);
    1239 }
    1240 
    1241 /*** add test of EXTNAME and header-defined columns? ***/
    1242 /* return internal structure representation */
    1243 SecFilt_PS1_V5alt *gfits_table_get_SecFilt_PS1_V5alt (FTable *ftable, off_t *Ndata, char *swapped) {
    1244 
    1245   int Ncols;
    1246   SecFilt_PS1_V5alt *data;
    1247 
    1248   Ncols = ftable[0].header[0].Naxis[0];
    1249   if (Ncols != 160) {
    1250     fprintf (stderr, "ERROR: mis-match in table size: width is %d but should be %d bytes\n", Ncols, 160);
    1251     return NULL;
    1252   }
    1253 
    1254   *Ndata = ftable[0].header[0].Naxis[1];
    1255   data = (SecFilt_PS1_V5alt *) ftable[0].buffer;
    1256   if ((swapped == NULL) || (*swapped == FALSE)) {
    1257     if (!gfits_convert_SecFilt_PS1_V5alt (data, sizeof (SecFilt_PS1_V5alt), *Ndata)) {
    1258       return NULL;
    1259     }
    1260     gfits_table_scale_data (ftable);
    1261     if (swapped != NULL) *swapped = TRUE;
    1262   }
    1263   return (data);
    1264 }
    1265 
    1266 
    1267 Lensing *Lensing_PS1_V5_ALT_ToInternal (Lensing_PS1_V5_ALT *in, off_t Nvalues) {
    1268 
    1269   off_t i;
    1270   Lensing *out;
    1271 
    1272   ALLOCATE_ZERO (out, Lensing, Nvalues);
    1273 
    1274   for (i = 0; i < Nvalues; i++) {
    1275     dvo_lensing_init (&out[i]);
    1276 
    1277     out[i].X11_sm_obj  = in[i].X11_sm_obj;     
    1278     out[i].X12_sm_obj  = in[i].X12_sm_obj;     
    1279     out[i].X22_sm_obj  = in[i].X22_sm_obj;     
    1280     out[i].E1_sm_obj   = in[i].E1_sm_obj;     
    1281     out[i].E2_sm_obj   = in[i].E2_sm_obj;     
    1282                                          
    1283     out[i].X11_sh_obj  = in[i].X11_sh_obj;     
    1284     out[i].X12_sh_obj  = in[i].X12_sh_obj;     
    1285     out[i].X22_sh_obj  = in[i].X22_sh_obj;     
    1286     out[i].E1_sh_obj   = in[i].E1_sh_obj;     
    1287     out[i].E2_sh_obj   = in[i].E2_sh_obj;     
    1288                                          
    1289     out[i].X11_sm_psf  = in[i].X11_sm_psf;
    1290     out[i].X12_sm_psf  = in[i].X12_sm_psf;
    1291     out[i].X22_sm_psf  = in[i].X22_sm_psf;
    1292     out[i].E1_sm_psf   = in[i].E1_sm_psf;
    1293     out[i].E2_sm_psf   = in[i].E2_sm_psf;     
    1294                                          
    1295     out[i].X11_sh_psf  = in[i].X11_sh_psf;
    1296     out[i].X12_sh_psf  = in[i].X12_sh_psf;
    1297     out[i].X22_sh_psf  = in[i].X22_sh_psf;
    1298     out[i].E1_sh_psf   = in[i].E1_sh_psf;
    1299     out[i].E2_sh_psf   = in[i].E2_sh_psf;
    1300 
    1301     out[i].F_ApR5      = in[i].F_ApR5;
    1302     out[i].dF_ApR5     = in[i].dF_ApR5;
    1303     out[i].sF_ApR5     = in[i].sF_ApR5;
    1304     out[i].fF_ApR5     = in[i].fF_ApR5;
    1305                                    
    1306     out[i].F_ApR6      = in[i].F_ApR6;
    1307     out[i].dF_ApR6     = in[i].dF_ApR6;
    1308     out[i].sF_ApR6     = in[i].sF_ApR6;
    1309     out[i].fF_ApR6     = in[i].fF_ApR6;
    1310                                    
    1311     out[i].detID       = in[i].detID;
    1312     out[i].objID       = in[i].objID;
    1313     out[i].catID       = in[i].catID;
    1314 
    1315     out[i].averef      = in[i].averef;
    1316   }
    1317   return (out);
    1318 }
    1319 
     1507
Note: See TracChangeset for help on using the changeset viewer.