IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 36516


Ignore:
Timestamp:
Feb 15, 2014, 1:15:44 PM (12 years ago)
Author:
eugene
Message:

working on the parallel relphot

Location:
branches/eam_branches/ipp-20140206/Ohana/src
Files:
5 added
15 edited

Legend:

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

    r36503 r36516  
    295295  int pid;                    // remote process ID
    296296  char *hostname;
    297   ImageSubset *image;
     297
    298298  int line_numbers;
     299
     300  off_t Nimage;
     301  off_t NIMAGE;
     302  Image *image;
    299303} RegionHostInfo;
    300304
  • branches/eam_branches/ipp-20140206/Ohana/src/libdvo/src/RegionHostTable.c

    r36503 r36516  
    77  int i;
    88  for (i = Nhosts; i < NHOSTS; i++) {
     9    hosts[i].Rmin = NAN;
     10    hosts[i].Rmax = NAN;
     11    hosts[i].Dmin = NAN;
     12    hosts[i].Dmax = NAN;
     13
    914    hosts[i].hostname = NULL;
    1015    hosts[i].stdio[HOST_STDIN] = -1;
     
    1318    hosts[i].pid = 0;
    1419
    15     hosts[i].Rmin = NAN;
    16     hosts[i].Rmax = NAN;
    17     hosts[i].Dmin = NAN;
    18     hosts[i].Dmax = NAN;
     20    hosts[i].image = NULL;
     21    hosts[i].Nimage = 0;
     22    hosts[i].NIMAGE = 0;
    1923  }
    2024  return;
     
    143147  return table;
    144148}
    145 
  • branches/eam_branches/ipp-20140206/Ohana/src/relphot/doc/parallel.txt

    r36503 r36516  
     1
     22014.02.14
     3
     4 more relphot notes:
     5
     6 * I load the catalogs, with a 
     7
     82014.02.12
     9
     10I am making progess on the relphot -parallel-regions implementation.  some things I need to deal with:
     11
     12 * assign_images: select mosaics for all images saved for a given host (need to supply them as well)
     13   ** I need to decide on the Image / Mosaic split.  If I am calibrating by image, then the image center defines ownership
     14   ** if I am calibrating by exposure, then the mosaic center must define ownership
     15 o determine SkyList covering the images for region host
     16 o tag detections and objects which I own or do not own
     17   o ImageOps.c / matchImage matches detections to images and needs to handle mine / not mine cases
     18   o ditto for matchMosaics
     19 o load_catalogs : I need to make my requested catalogs unique (just add uniquer to load_catalogs.c:130
     20 o figure out what fields I'm saving in meanmags and how to construct it
     21   -- mag, objID, catID, photcode, (dmag or other stats?)
     22 * from which hosts do I slurp mean mags?
     23 o function to merge a new meanmag array into the existing one
     24 * how to go from (objID,catID) to a given catalog[i].average[j]
    125
    2262014.02.06
  • branches/eam_branches/ipp-20140206/Ohana/src/relphot/include/relphot.h

    r36504 r36516  
    110110  StatType kronstats;
    111111} SetMrelInfo;
     112
     113typedef struct {
     114  float M;
     115  float dM;
     116  float Xm;
     117  int Nsec;
     118  unsigned int objID;
     119  unsigned int catID;
     120} MeanMag;
    112121
    113122typedef struct {
  • branches/eam_branches/ipp-20140206/Ohana/src/relphot/src/ImageOps.c

    r36491 r36516  
    244244 
    245245  int Nmatch = 0;
    246  for (i = 0; i < Ncatalog; i++) {
     246  for (i = 0; i < Ncatalog; i++) {
    247247    for (j = 0; j < catalog[i].Nmeasure; j++) {
     248      catalog[i].measureT[j].myDet = FALSE; // a detetion is not mine until proven otherwise
    248249      ecode = GetPhotcodeEquivCodebyCode (catalog[i].measureT[j].photcode);
     250
     251      // skip measurements which do not match one of the requested photcodes (
     252      // (do we not already exclude in bcatalog -- maybe needed for reload_objects?
    249253      found = FALSE;
    250254      for (Ns = 0; !found && (Ns < Nphotcodes); Ns++) {
     
    252256      }
    253257      if (!found) continue;
     258
     259      // if we match one of our images, myDet gets set to TRUE
    254260      matchImage (catalog, j, i, doImageList);
    255261      Nmatch ++;
     
    322328    return;
    323329  }
     330  catalog[cat].measureT[meas].myDet = TRUE;
    324331
    325332  if (USE_GRID) {
  • branches/eam_branches/ipp-20140206/Ohana/src/relphot/src/MosaicOps.c

    r36491 r36516  
    527527
    528528  if (!MOSAIC_ZEROPT) return (FALSE);
     529  // if we are calibrating by mosaic, redefine myDet == on one of my mosaics
    529530
    530531  int Nmatch = 0;
    531532  for (i = 0; i < Ncatalog; i++) {
    532533    for (j = 0; j < catalog[i].Nmeasure; j++) {
     534      catalog[i].measureT[j].myDet = FALSE; // a detetion is not mine until proven otherwise
     535
    533536      if (TimeSelect) {
    534537        if (catalog[i].measureT[j].t < TSTART) continue;
     
    582585  }
    583586
     587  // this measurement is on one of my mosaics, mark it as mine.
     588  catalog[cat].measureT[meas].myDet = TRUE;
    584589  MeasureToMosaic[cat][meas] = mosID;
    585590
  • branches/eam_branches/ipp-20140206/Ohana/src/relphot/src/StarOps.c

    r36491 r36516  
    896896}
    897897
     898int markObjects (Catalog *catalog, int Ncatalog) {
     899
     900  // How strongly do I own this object?
     901  for (i = 0; i < Ncatalog; i++) {
     902    for (j = 0; j < catalog[i].Naverage; j++) {
     903      int nOwn = 0;
     904      int m = catalog[i].average[j].measureOffset;
     905      for (n = 0; n < catalog[i].average[j].Nmeasure; n++) {
     906        if (!catalog[i].measureT[m+n].myDet) continue;
     907        nOwn ++;
     908      }
     909      catalog[i].averageT[j].nOwn = nOwn;
     910    }
     911  }
     912  return TRUE;
     913}
     914
    898915void clean_stars (Catalog *catalog, int Ncatalog) {
    899916
  • branches/eam_branches/ipp-20140206/Ohana/src/relphot/src/args.c

    r36506 r36516  
    343343  }
    344344
     345  if ((N = get_argument (argc, argv, "-region-hosts"))) {
     346    remove_argument (N, &argc, argv);
     347    REGION_FILE = strcreate (argv[N])
     348    remove_argument (N, &argc, argv);
     349  }
     350
     351  REGION_HOST_ID = 0;
     352  if ((N = get_argument (argc, argv, "-region-hostID"))) {
     353    remove_argument (N, &argc, argv);
     354    REGION_HOST_ID = atoi (argv[N])
     355    remove_argument (N, &argc, argv);
     356  }
     357
    345358  RelphotMode mode = MODE_ERROR;
    346359  if ((N = get_argument (argc, argv, "-averages"))) {
     
    355368    remove_argument (N, &argc, argv);
    356369    mode = PARALLEL_IMAGES;
     370    if (N >= argc) relphot_usage();
     371    IMAGE_TABLE = strcreate (argv[N])
     372    remove_argument (N, &argc, argv);
     373    if (!REGION_FILE) relphot_usage();
    357374  }
    358375  if ((N = get_argument (argc, argv, "-parallel-regions"))) {
    359376    remove_argument (N, &argc, argv);
    360377    mode = PARALLEL_REGIONS;
    361     if (N >= argc) relphot_usage();
    362     REGION_FILE = strcreate (argv[N])
    363     remove_argument (N, &argc, argv);
     378    if (!REGION_FILE) relphot_usage();
    364379  }
    365380
  • branches/eam_branches/ipp-20140206/Ohana/src/relphot/src/assign_images.c

    r36506 r36516  
    2525
    2626  // for each regionHost, select images which are contained by the region
    27   // XXX this is probably too expensive : I need to loop over Nimage * Nregions
    28   // inverting the order would probably be faster (need to track NIMAGE for each host)
    2927  // even faster would be to use a tree to get to the real regions...
    3028  select_images_hostregion (regionHosts, image, Nimage);
     
    8583    i = find_host_for_coords (regionHosts, Rc, Dc);
    8684
     85    // this is a bit memory expensive : I am making a complete copy of the image table here
    8786    off_t Nsubset = regionHosts->host[i].Nimage;
    88     regionHosts->host[i].image[Nsubset] = image[j]; 
    89     regionHosts->host[i].line_number[Nsubset] = j;
     87    regionHosts->host[i].image[Nsubset] = image[j];
     88    // regionHosts->host[i].line_number[Nsubset] = j;
    9089
    9190    regionHosts->host[i].Nimage ++;
     
    9392      regionHosts->host[i].NIMAGE += D_NIMAGE;
    9493      REALLOCATE (regionHosts->host[i].image, Image, regionHosts->host[i].NIMAGE);
    95       REALLOCATE (regionHosts->host[i].line_number, off_t, regionHosts->host[i].NIMAGE);
     94      // REALLOCATE (regionHosts->host[i].line_number, off_t, regionHosts->host[i].NIMAGE);
    9695    }
    9796  }
     
    9998}
    10099
     100// XXX add a search tree to speed this up?
    101101int find_host_for_coords (RegionHostTable *regionHosts, double R, double d) {
    102102
     
    112112  }
    113113}
     114
  • branches/eam_branches/ipp-20140206/Ohana/src/relphot/src/help.c

    r36506 r36516  
    66  fprintf (stderr, "       or:    relphot -averages -region RA RA DEC DEC\n");
    77  fprintf (stderr, "       or:    relphot -apply-offsets -region RA RA DEC DEC\n");
    8   fprintf (stderr, "       or:    relphot -parallel-regions (RegionFile)\n");
    9   fprintf (stderr, "       or:    relphot -parallel-images ()\n");
     8  fprintf (stderr, "       or:    relphot -parallel-regions -region-hosts (RegionFile)\n");
     9  fprintf (stderr, "       or:    relphot -parallel-images (ImageTable) -region-hosts (RegionFile)\n");
    1010  fprintf (stderr, "  use -h for more usage information\n");
    1111  exit (2);
  • branches/eam_branches/ipp-20140206/Ohana/src/relphot/src/load_catalogs.c

    r35416 r36516  
    108108Catalog *load_catalogs_parallel (SkyList *sky, int *Ncatalog) {
    109109
     110  char uniquer[12];
     111  int TIME = time(NULL);
     112  int PID = getpid();
     113  snprintf (uniquer, 12, "%05d.%05d", PID, TIME % 100000);
     114
    110115  int Nsecfilt  = GetPhotcodeNsecfilt ();               // set the desired number in case we need to create the catalog
    111116
     
    128133
    129134    ALLOCATE (table->hosts[i].results, char, 1024);
    130     snprintf (table->hosts[i].results, 1024, "%s/relphot.catalog.subset.dat", table->hosts[i].pathname);
     135    snprintf (table->hosts[i].results, 1024, "%s/relphot.catalog.%s.dat", table->hosts[i].pathname, uniquer);
    131136
    132137    // options / arguments that can affect relphot_client -load:
  • branches/eam_branches/ipp-20140206/Ohana/src/relphot/src/relphot_parallel_images.c

    r36505 r36516  
    1919  INITTIME;
    2020
     21  // load the RegionTable (UserRegion should not be used at this level)
     22  RegionHostTable *regionHosts = RegionHostTableLoad (CATDIR, REGION_FILE);
     23
    2124  // load the subset images belonging to this host
    22   // XXX need to determine the file name for each host (here or in master)
    2325  off_t Nimage;
    24   ImageSubset *image = ImageSubsetLoad (IMAGES, &Nimage);
     26  Image *image = ImageTableLoad (IMAGE_TABLE, &Nimage);
    2527  if (!image) {
    26     fprintf (stderr, "ERROR loading image subset %s\n", CATDIR);
     28    fprintf (stderr, "ERROR loading image %s\n", IMAGE_TABLE);
    2729    exit (2);
    2830  }
    29   client_logger_message ("loaded image subset data\n");
    3031
    3132  // load the flat correction table (if defined)
     
    3435  FlatCorrectionTable *flatcorr = FlatCorrectionLoad (flatcorrfile, VERBOSE);
    3536
    36   // XXX need to define the skylist for this region
    37   skylist = function(region);
     37  SkyTable *sky = SkyTableLoadOptimal (CATDIR, SKY_TABLE, GSCFILE, TRUE, SKY_DEPTH, VERBOSE);
     38  SkyTableSetFilenames (sky, CATDIR, "cpt");
     39  SkyList *skylist = SkyListByBounds (sky, UserPatch.Rmin, UserPatch.Rmax, UserPatch.Dmin, UserPatch.Dmax);
    3840
    3941  /* load catalog data from region files (hostID is 0 since we are not a client */
     
    4143  MARKTIME("-- load catalog data: %f sec\n", dtime);
    4244 
     45  // generate tables go from catID,objID -> catSeq,objSeq
     46  indexCatalogs (catalog, Ncatalog);
     47
    4348  /* match measurements with images, mosaics */
    4449  initImageBins  (catalog, Ncatalog, TRUE);
     
    4651
    4752  initMosaicBins (catalog, Ncatalog, TRUE);
    48   initGridBins   (catalog, Ncatalog);
    4953  initMrel (catalog, Ncatalog);
    5054
     
    5458  findMosaics (catalog, Ncatalog, TRUE);  /* also sets Grid values */
    5559  MARKTIME("-- set up mosaic indexes: %f sec\n", dtime);
     60
     61  markObjects (catalog, Ncatalog);
    5662
    5763  SAVEPLOT = FALSE;
     
    7682
    7783    // share mean mags for objects at the boundary (number of unowned meas > 0)
    78     share_mean_mags (catalog, Ncatalog);
     84    share_mean_mags (catalog, Ncatalog, regionHosts, i);
    7985
    8086    // load mean mags from other region hosts
    81     slurp_mean_mags (catalog, Ncatalog);
     87    slurp_mean_mags (catalog, Ncatalog, regionHosts, i);
    8288
    8389    // set the image (Mcal) and mosaic (Mmos) zero point offsets given the mean mags and measurements
     
    8793   
    8894    // share image mags for images with non-zero unowned detections
    89     share_image_mags ();
     95    share_image_mags (regionHosts, i);
    9096
    91     slurp_image_mags ();
    92 
    93     if (PLOTSTUFF) {
    94       plot_scatter (catalog, Ncatalog, flatcorr);
    95       plot_mosaics ();
    96       plot_images ();
    97       plot_stars (catalog, Ncatalog);
    98       plot_chisq (catalog, Ncatalog);
    99     }
     97    slurp_image_mags (regionHosts, i);
    10098
    10199    if ((i > 8) && (i % 8 == 2)) clean_measures (catalog, Ncatalog, FALSE, flatcorr);
     
    108106  }
    109107
    110   if (PLOTSTUFF) {
    111     plot_scatter (catalog, Ncatalog, flatcorr);
    112     plot_grid (catalog, flatcorr);
    113     plot_mosaics ();
    114     plot_images ();
    115     plot_stars (catalog, Ncatalog);
    116     plot_chisq (catalog, Ncatalog);
    117   }
    118  
    119108  /* set Mcal & Mmos for bad images */
    120109  setMcal  (catalog, TRUE, flatcorr);
     
    122111  MARKTIME("-- finalize Mcal values: %f sec\n", dtime);
    123112
    124   setMcalFinal (); // copy per-mosaic calibrations to the images
     113  share_image_mags (regionHosts, i);
    125114
    126   /* at this point, we have correct cal coeffs in the image/mosaic structures */
    127   for (i = 0; i < Ncatalog; i++) {
    128     // these tiny values are set by BrightCatalogSplit from load_catalogs
    129     free_tiny_values (&catalog[i]);
    130     dvo_catalog_free (&catalog[i]);
    131   }
    132   freeImageBins (Ncatalog, TRUE);
    133   freeMosaicBins (Ncatalog, TRUE);
    134   freeGridBins (Ncatalog);
    135 
    136   save_image_subset ();
     115  // save_image_subset ();
    137116
    138117  exit (0);
    139 
    140118}
  • branches/eam_branches/ipp-20140206/Ohana/src/relphot/src/relphot_parallel_regions.c

    r36506 r36516  
    4242
    4343  /* launch processing on the parallel region hosts */
    44   launch_region_hosts (regionHosts, XXX);
     44  launch_region_hosts (regionHosts);
    4545
    46   /* retrieve updated image parameters from the remote hosts */
    47   retrieve_images (regionHosts, XXX);
     46  // retrieve updated image parameters from the remote hosts (also set Image.mcal)
     47  slurp_image_mags (regionHosts, XXX);
    4848
    4949  /* update catalogs (in parallel) */
  • branches/eam_branches/ipp-20140206/Ohana/src/relphot/src/share_mean_mags.c

    r36506 r36516  
    33// we are sharing mean mags for all objects which (a) I own and (b) which have unowned detections
    44
    5 int share_mean_mags () {
     5# define D_NMEANMAGS 10000
     6int share_mean_mags (Catalog *catalog, int Ncatalog, RegionHostTable *regionHosts, int nloop) {
    67
    7   SomeType *meanmags = NULL;
    8   ALLOCATE (meanmags, SomeType, NMEANMAGS);
     8  off_t Nmeanmags = 0;
     9  off_t NMEANMAGS = D_NMEANMAGS;
    910
    10   // XXX skip some internal catalogs?
     11  MeanMag *meanmags = NULL;
     12  ALLOCATE (meanmags, MeanMag, NMEANMAGS);
     13
     14  int Ns;
     15  int Nsecfilt = GetPhotcodeNsecfilt();
     16
     17  // XXX skip some catalogs based on UserPatch?
    1118  for (i = 0; i < Ncatalog; i++) {
    1219    for (j = 0; j < catalog[i].Naverage; j++) {
    1320
    1421      // do I own this object? (in region range?)
    15       if (catalog[i].average[j].R <  Rmin) continue;
    16       if (catalog[i].average[j].R >= Rmax) continue;
    17       if (catalog[i].average[j].D <  Dmin) continue;
    18       if (catalog[i].average[j].D >= Dmax) continue;
     22      if (catalog[i].average[j].R <  UserPatch.Rmin) continue;
     23      if (catalog[i].average[j].R >= UserPatch.Rmax) continue;
     24      if (catalog[i].average[j].D <  UserPatch.Dmin) continue;
     25      if (catalog[i].average[j].D >= UserPatch.Dmax) continue;
    1926
    2027      // does this object have missing detections (does someone else need it?)
    21       if (catalog[i].averageExtra[j].Nmiss == 0) continue;
     28      // XXX : sky objects without missing detections
     29      // XXX watch out for detections which are not associated with an image (REF)
     30      if (catalog[i].averageT[j].nOwn != catalog[i].averageT[j].Nmeasure) continue;
    2231
    23       meanmags[Nmeanmags] = something(catalog[i].average[j]);
    24       Nmeanmags ++;
    25 
    26       // check realloc..
     32      for (Ns = 0; Ns < Nphotcodes; Ns++) {
     33        int thisCode = photcodes[Ns][0].code;
     34        int Nsec = GetPhotcodeNsec(thisCode);
     35        set_mean_mags (&meanmags[Nmeanmags], &catalog[i].average[j], &catalog[i].secfilt[Nsecfilt*j + Nsec], Nsec);
     36        Nmeanmags ++;
     37        CHECK_REALLOCATE (meanmags, MeanMag, NMEANMAGS, Nmeanmags, D_NMEANMAGS);
     38      }
    2739    }
    2840  }
    2941
    3042  // write out the meanmag fits table AND write state in some file
    31   SaveMeanMags (meanmags, Nmeanmags, where);
     43  int myHost = regionHosts->index[REGION_HOST_ID];
     44  char *hostname = regionHosts->hosts[myHost].hostname;
     45
     46  char filename[1024];
     47  snprintf (filename, 1024, "%s/%s.meanmags.fits", CATDIR, hostname);
     48  MeanMagSave (filename, meanmags, Nmeanmags);
     49
     50  update_sync_file (hostname, nloop);
     51
     52  return TRUE;
    3253}
    3354
    34 int slurp_mean_mags () {
     55int slurp_mean_mags (Catalog *catalog, int Ncatalog, RegionHostTable *regionHosts, int nloop) {
    3556
    36   SomeType *meanmags = NULL;
    37   ALLOCATE (meanmags, SomeType, NMEANMAGS);
     57  int Nmeanmags = 0;
     58  MeanMag *meanmags = NULL;
     59  ALLOCATE (meanmags, MeanMag, 1);
    3860
    3961  for (i = 0; i < Nhost; i++) {
    4062    if (not_neighbor(host[i])) continue;
     63    // XXX skip regions->hosts[i].hostID == REGION_HOST_ID
    4164
    42     check_sync_file (host[i]);
     65    check_sync_file (regionHosts->hosts[i].hostname, nloop);
    4366   
    44     meanmagsSubset = LoadMeanMags (host[i], &Nsubset);
     67    char filename[1024];
     68    snprintf (filename, 1024, "%s/%s.meanmags.fits", CATDIR, regionHosts->hosts[i].hostname);
    4569
    46     merge_mean_mags ();
     70    int Nsubset = 0;
     71    MeanMag *meanmagsSubset = MeanMagLoad (host[i], &Nsubset);
     72
     73    // merge_mean_mags reallocs meanmags and frees the input meanmagsSubset
     74    meanmags = merge_mean_mags (meanmags, &Nmeanmags, meanmagsSubset, Nsubset);
    4775  }
    4876
     
    5179    catID = meanmags[i].catID;
    5280
     81    // set the mean mag
     82    // XXX I need to figure out how to go from catID,objID to catSeq,objSeq
    5383    catSeq = catalog_ID_to_seq (catID);
    54     objSeq = object_ID_to_seq (objID);
     84    objSeq = object_ID_to_seq (catID, objID);
    5585
    56     // set the mean mag
    5786    Nsecfit = photcode_to_secfilt (meanmags[i].photcode);
    5887    catalog[catSeq].secfilt[objSeq*Nsec + Nsecfilt].mag = meanmags[i].mag;
    5988  }
    6089}
     90
     91# define MSG_LENGTH 11
     92
     93int check_sync_file (char *hostname, int nloop) {
     94
     95  char filename[1024];
     96  sprintf (filename, "%s/%s.meanmags.sync", CATDIR, hostname);
     97
     98  // XXX I need a rule to generate the filename for each host
     99  FILE *f = NULL;
     100
     101  while (retry) {
     102
     103    f = fopen (filename);
     104    if (!f) {
     105      usleep (2000000);
     106      continue;
     107    }
     108
     109    int Nread = fread (message, MSG_LENGTH, 1, f);
     110    if (Nread < MSG_LENGTH) {
     111      fclose (f);
     112      usleep (2000000);
     113      continue;
     114    }
     115    fclose (f);
     116
     117    // message is of the form: NLOOP: %03d
     118    sscanf (message, "%s %d", &loop);
     119    if (loop != nloop) {
     120      usleep (2000000);
     121      continue;
     122    }
     123    return TRUE;
     124  }
     125}
     126
     127int update_sync_file (char *hostname, int nloop) {
     128
     129  char filename[1024];
     130  sprintf (filename, "%s/%s.meanmags.sync", CATDIR, hostname);
     131
     132  FILE *f = fopen (filename, "w");
     133  snprintf (message, 11, "NLOOP: %03d\n", nloop);
     134 
     135  int Nwrite = fwrite (message, MSG_LENGTH, 1, f);
     136  if (Nwrite != MSG_LENGTH) {
     137    fprintf (stderr, "failure to write sync message\n");
     138    exit (3);
     139  }
     140
     141  fclose (f);
     142  return TRUE;
     143}
     144
     145int set_mean_mags (MeanMag *meanmags, Average *average, SecFilt *secfilt, int Nsec) {
     146
     147  meanmags->M  = secfilt->M;
     148  meanmags->dM = secfilt->dM;
     149  meanmags->Xm = secfilt->Xm;
     150  meanmags->Nsec = Nsec; // key to secfilt entry
     151
     152  meanmags->objID = average->objID;
     153  meanmags->catID = average->catID;
     154
     155  return TRUE;
     156}
     157
     158MeanMag *merge_mean_mags (MeanMag *target, int *ntarget, MeanMag *source, int Nsource) {
     159
     160  REALLOCATE (target, MeanMag, *ntarget + Nsource);
     161  for (i = 0; i < Nsource; i++) {
     162    int n = i + *ntarget;
     163    target[n] = source[i];
     164  }
     165 
     166  free (source);
     167
     168  *ntarget += Nsource;
     169  return (target);
     170}
     171
  • branches/eam_branches/ipp-20140206/Ohana/src/uniphot/src/update_dvo_setphot.c

    r35103 r36516  
    22int update_dvo_setphot_parallel (SkyTable *sky, Image *image, off_t Nimage);
    33
     4// XXX convert this to use the ImageSubset to save space
    45int update_dvo_setphot (Image *image, off_t Nimage, FlatCorrectionTable *flatcorr) {
    56
Note: See TracChangeset for help on using the changeset viewer.