IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 37499


Ignore:
Timestamp:
Oct 19, 2014, 4:45:10 PM (12 years ago)
Author:
eugene
Message:

delete images in dvorepair extern ID

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/eam_branches/ipp-20140904/Ohana/src/dvomerge/src/dvorepairDeleteImagesByExternID.c

    r37495 r37499  
    1414// * rebuild the cpt file or delete the matching entries?
    1515
     16int SaveImageTable (Image *image, off_t Nimage, char *catdir);
     17Image *DeleteSelectedImages (Image *image, off_t Nimage, int *deleteImage, myIndexType *imageIDindex, off_t *NnewImage);
     18
    1619int dvorepairDeleteImagesByExternID (int argc, char **argv) {
    1720
     
    6972  // set the min and max ID values for the two strucures:
    7073  for (i = 0; i < Nimage; i++) {
     74    myIndexUpdateLimits (imageIDindex,  image[i].imageID);
     75
    7176    if (!image[i].externID) continue;
    7277    myAssert (image[i].imageID, "image must have imageID > 0");
    7378    myIndexUpdateLimits (externIDindex, image[i].externID);
    74     myIndexUpdateLimits (imageIDindex,  image[i].imageID);
    7579  }
    7680
     
    8993  // assign the externIDs and imageIDs to their index structures
    9094  for (i = 0; i < Nimage; i++) {
     95    myIndexSetEntry (imageIDindex,  image[i].imageID,  i);
     96
    9197    if (!image[i].externID) continue;
    92 
    9398    myIndexSetEntry (externIDindex, image[i].externID, i);
    94     myIndexSetEntry (imageIDindex,  image[i].imageID,  i);
    9599  }
    96100
     
    177181  SkyRegion UserPatch;
    178182
    179   if (dR < dQ) {
     183  if (dR < dQ + 0.1) {
    180184    fprintf (stderr, "R,D range: %f - %f, %f - %f\n", Rmin, Rmax, Dmin, Dmax);
    181185    nPass = 1;
     
    219223    // loop over the populated input regions
    220224    int Ncheck = 0;
    221     for (i = 0; i < inlist[0].Nregions; i++) {
     225    for (i = 0; FALSE && (i < inlist[0].Nregions); i++) {
    222226      if (!inlist[0].regions[i][0].table) continue;
    223227
     
    364368  }
    365369
     370  off_t NnewImage;
     371  Image *newImage = DeleteSelectedImages (image, Nimage, deleteImage, imageIDindex, &NnewImage);
     372
     373  SaveImageTable (newImage, NnewImage, catdir);
     374
    366375  myIndexFree (externIDindex);
    367376  myIndexFree (imageIDindex);
     
    386395}
    387396
     397Image *DeleteSelectedImages (Image *image, off_t Nimage, int *deleteImage, myIndexType *imageIDindex, off_t *NnewImage) {
     398
     399  // we need to remove the (WRP) images, but we also want to remove the DIS [PHU] image entries if they have
     400  // had all of their children deleted
     401
     402  // first, generate an array of the number of children for each parent
     403
     404  int *Nchildren = NULL;
     405  ALLOCATE (Nchildren, int, Nimage);
     406  memset (Nchildren, 0, Nimage*sizeof(int));
     407
     408  int i;
     409  for (i = 0; i < Nimage; i++) {
     410    if (!image[i].parentID) continue;
     411    myAssert (!strcmp(&image[i].coords.ctype[4], "-WRP"), "child with non WRP coords?");
     412
     413    int n = myIndexGetEntry (imageIDindex, image[i].parentID);
     414    myAssert (n != -1, "invalid parentID?");
     415    myAssert (n < Nimage, "invalid parentID??");
     416    Nchildren[n] ++;
     417  }
     418
     419  // now subtract the children which need to be deleted
     420  for (i = 0; i < Nimage; i++) {
     421    if (!deleteImage[i]) continue;
     422    if (!image[i].parentID) continue; // should I warn on this?
     423
     424    int n = myIndexGetEntry (imageIDindex, image[i].parentID);
     425    myAssert (n != -1, "invalid parentID?");
     426    myAssert (n < Nimage, "invalid parentID??");
     427    Nchildren[n] --;
     428    myAssert (Nchildren[n] >= 0, "over deleted???");
     429  }
     430 
     431  // now check for any parent and delete it
     432  for (i = 0; i < Nimage; i++) {
     433    if (strcmp(&image[i].coords.ctype[4], "-DIS")) continue;
     434    myAssert (!image[i].parentID, "parent ID for DIS image??");
     435    if (!Nchildren[i]) deleteImage[i] = TRUE;
     436  }
     437
     438  fprintf (stderr, "deleting the following images:\n");
     439
     440  off_t Nnew = 0;
     441  Image *newImage = NULL;
     442  ALLOCATE (newImage, Image, Nimage);
     443  for (i = 0; i < Nimage; i++) {
     444    if (deleteImage[i]) {
     445      fprintf (stderr, "%s : %d : %d : %d\n", image[i].name, image[i].imageID, image[i].parentID, image[i].externID);
     446      continue;
     447    }
     448    newImage[Nnew] = image[i];
     449    Nnew ++;
     450  }
     451
     452  REALLOCATE (newImage, Image, Nnew);
     453
     454  *NnewImage = Nnew;
     455  return newImage;
     456}
     457
     458int SaveImageTable (Image *image, off_t Nimage, char *catdir) {
     459
     460  FITS_DB db;
     461
     462  char ImageCatSrc[DVO_MAX_PATH];
     463  char ImageCatTgt[DVO_MAX_PATH];
     464
     465  // we are creating a new image table (what about db ID?)
     466  snprintf (ImageCatSrc, DVO_MAX_PATH, "%s/Images.dat", catdir);
     467  snprintf (ImageCatTgt, DVO_MAX_PATH, "%s/Images.dat.broken", catdir);
     468
     469  // rename the old cpt file:
     470  if (rename (ImageCatSrc, ImageCatTgt)) {
     471    perror ("tried to rename file");
     472    exit (2);
     473  }
     474
     475  /* setup image table format and lock */
     476  db.mode    = dvo_catalog_catmode ("SPLIT");
     477  db.format  = dvo_catalog_catformat ("PS1_V5");
     478  int status = dvo_image_lock (&db, ImageCatSrc, 3600.0, LCK_XCLD);  // shorter timeout?
     479  if (!status) {
     480    fprintf (stderr, "ERROR: failure to lock image catalog %s", db.filename);
     481    exit (2);
     482  }
     483
     484  /* load or create the image table */
     485  if (db.dbstate != LCK_EMPTY) {
     486    fprintf (stderr, "image table %s exists, exiting", db.filename);
     487    exit (2);
     488  }
     489  dvo_image_create (&db, GetZeroPoint());
     490
     491  /* add the new image and save */
     492  dvo_image_addrows (&db, image, Nimage);
     493  dvo_image_update (&db, VERBOSE);
     494  dvo_image_unlock (&db); /* unlock? */
     495
     496  return TRUE;
     497}
     498
    388499int RepairTableCPT_V1(char *cptFilenameSrc, char *cptFilenameTgt, char *cpsFilenameSrc, char *cpsFilenameTgt, Measure *measure, off_t Nmeasure, Image *image, off_t Nimage, myIndexType *imageIDindex, char catformat) {
    389500
     
    445556    myAssert (n > -1, "impossible!");
    446557   
     558    dvo_average_init (&average[Nave]);
     559
    447560    // I actually have measure->R,D, I could just use those...
    448561    XY_to_RD (&average[Nave].R, &average[Nave].D, measure[i].Xccd, measure[i].Yccd, &image[n].coords);
     
    454567    average[Nave].measureOffset = -1;
    455568    average[Nave].missingOffset = -1;
    456     average[Nave].refColorBlue = NAN;
    457     average[Nave].refColorRed = NAN;
    458569
    459570    average[Nave].objID = measure[i].objID;
     
    501612  myAssert(cptFile, "failed to open cpt file");
    502613
    503   // load the cpt header (use for CATID, RA,DEC range, filenames)
     614  // load the cpt header (use for CATID, RA, DEC range, filenames)
    504615  if (!gfits_fread_header (cptFile, &cptHeaderPHU)) {
    505616    myAbort("failure to cpt header");
     
    578689    ALLOCATE (secfilt, SecFilt, Nrows);
    579690
     691    for (i = 0; i < Nrows; i++) {
     692      dvo_secfilt_init (&secfilt[i]);
     693    }
     694
    580695    /* convert internal to external format */
    581696    if (!SecFiltToFtable (&cpsFtable, secfilt, Nrows, catformat)) {
Note: See TracChangeset for help on using the changeset viewer.