IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 39489


Ignore:
Timestamp:
Mar 28, 2016, 11:03:49 AM (10 years ago)
Author:
eugene
Message:

re-optimize by using bisection instead of a direct index for measure->imageID lookups

Location:
trunk/Ohana/src/dvolens
Files:
1 added
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/Ohana/src/dvolens/Makefile

    r39487 r39489  
    3333$(SRC)/initialize.$(ARCH).o      \
    3434$(SRC)/myIndex.$(ARCH).o         \
     35$(SRC)/mySequence.$(ARCH).o      \
    3536$(SRC)/update_objects.$(ARCH).o  \
    3637$(SRC)/update_objects_catalog.$(ARCH).o  \
     
    5253$(SRC)/initialize.$(ARCH).o      \
    5354$(SRC)/myIndex.$(ARCH).o         \
     55$(SRC)/mySequence.$(ARCH).o      \
    5456$(SRC)/update_objects.$(ARCH).o  \
    5557$(SRC)/update_objects_catalog.$(ARCH).o  \
  • trunk/Ohana/src/dvolens/include/dvolens.h

    r39487 r39489  
    1616  int NINDEX;
    1717} myIndexType;
     18
     19// a structure to define a sequence lookup
     20typedef struct {
     21  int minID;
     22  int maxID;
     23  int *value;
     24  int *sequence;
     25  int Nsequence;
     26  int NSEQUENCE;
     27} mySequenceType;
    1828
    1929typedef enum {
     
    8797
    8898int FindWarpGroups (void);
    89 int RecoverLensingIndex (Average *average, myIndexType *measureIndex, Lensing *lensing);
     99int RecoverLensingIndex (Average *average, mySequenceType *measureSeq, Lensing *lensing);
    90100void FreeWarpGroups (void);
    91101
     
    99109off_t getImageByID (off_t ID);
    100110
     111mySequenceType *mySequenceAlloc ();
     112int mySequenceFree (mySequenceType *mySequence);
     113int mySequenceSetSize (mySequenceType *mySequence, int Nmax);
     114int mySequenceSetValue (mySequenceType *mySequence, int value, int entry);
     115int mySequenceSort (mySequenceType *mySequence);
     116int mySequenceGetEntry (mySequenceType *mySequence, int value);
  • trunk/Ohana/src/dvolens/src/WarpImageMaps.c

    r39488 r39489  
    204204}
    205205
    206 int RecoverLensingIndex (Average *average, myIndexType *measureIndex, Lensing *lensing) {
     206int RecoverLensingIndex (Average *average, mySequenceType *measureSeq, Lensing *lensing) {
    207207
    208208  // Although the imageID is wrong (no matching measures), the image should be one of the
     
    240240    int N = warpgroup[seq].warps[i];
    241241
    242     int Mj = myIndexGetEntry (measureIndex, image[N].imageID);
     242    int Mj = mySequenceGetEntry (measureSeq, image[N].imageID);
    243243    if (Mj < 0) continue;
    244244
     
    258258  for (int i = 0; i < Nwarpgroup; i++) {
    259259    free (warpgroup[i].warps);
    260     // free (warpgroup[i].Rmin);
    261     // free (warpgroup[i].Rmax);
    262     // free (warpgroup[i].Dmin);
    263     // free (warpgroup[i].Dmax);
    264     // free (warpgroup[i].onBoundary);
     260    free (warpgroup[i].Rmin);
     261    free (warpgroup[i].Rmax);
     262    free (warpgroup[i].Dmin);
     263    free (warpgroup[i].Dmax);
     264    free (warpgroup[i].onBoundary);
    265265  }   
    266266
  • trunk/Ohana/src/dvolens/src/myIndex.c

    r39488 r39489  
    1818int myIndexFree (myIndexType *myIndex) {
    1919
     20  if (!myIndex) return TRUE;
    2021  free (myIndex->index);
    2122  free (myIndex);
  • trunk/Ohana/src/dvolens/src/select_images.c

    r39488 r39489  
    4444 
    4545  // I need to ensure we get the images from any skycells in a warp
    46   double dD = 2.0;
     46  double dD = 4.0;
    4747  double dR = dD / cos(RAD_DEG*DminSkyRegion);
    4848  RminSkyRegion -= dR;
  • trunk/Ohana/src/dvolens/src/update_objects_catalog.c

    r39488 r39489  
    3535  int Nlensobj = 0;
    3636
    37   myIndexType *measureIndex = myIndexAlloc();
     37  mySequenceType *measureSeq = mySequenceAlloc();
    3838
    3939  int Nfixed = 0;
     
    4141
    4242  INITTIME;
    43 
    4443  double time1 = 0.0;
    4544  double time2 = 0.0;
     
    4948  for (i = 0; i < catalog->Naverage; i++) {
    5049   
    51     if (i % 1000 == 0) {
    52       MARKTIME ("done with %d aves: %f sec (%f %f %f %f)\n", (int) i, dtime, time1, time2, time3, time4);
    53       time1 = 0.0;
    54       time2 = 0.0;
    55       time3 = 0.0;
    56       time4 = 0.0;
    57       gettimeofday (&startTimer, NULL);
    58     }
    59 
    6050    Average *average = &catalog->average[i];
    6151    if (average->Nlensing == 0) continue;
     
    8272    // I could make an index measureSeq[imageID-imageIDmin]
    8373   
    84     myIndexInit (measureIndex);
     74    TIMESTAMP (time1);
     75
     76    mySequenceSetSize (measureSeq, average->Nmeasure);
    8577
    8678    // generate an index for these measure entries (based on Mj and imageID)
    8779    for (Mj = 0; Mj < average->Nmeasure; Mj++) {
    88       myIndexUpdateLimits (measureIndex, catalog->measure[Moff + Mj].imageID);
     80      mySequenceSetValue (measureSeq, catalog->measure[Moff + Mj].imageID, Mj);
    8981    }
    9082
    91     TIMESTAMP (time1);
    92     myIndexSetRange (measureIndex);
     83    mySequenceSort (measureSeq);
     84
    9385    TIMESTAMP (time2);
    94 
    95     for (Mj = 0; Mj < average->Nmeasure; Mj++) {
    96       // if there are duplicates (multiple measures from the same image),
    97       // myIndexSetEntry will only select one
    98       myIndexSetEntry (measureIndex, catalog->measure[Moff + Mj].imageID, Mj);
    99     }
    10086
    10187    // loop over the lensing measurements.  for each one, I need to find the corresponding measurement (make an index in lensing?)
     
    11298      // XX ALT myAssert (measure->imageID == lensing->imageID, "oops, deux");
    11399
    114       Mj = myIndexGetEntry (measureIndex, lensing->imageID);
     100      Mj = mySequenceGetEntry (measureSeq, lensing->imageID);
    115101
    116102      // if we are unable to find a match in the measure table, we may have the wrong
     
    121107      if (Mj < 0) {
    122108        if (REPAIR_LENSING_IDS) {
    123           Mj = RecoverLensingIndex (average, measureIndex, lensing);
     109          Mj = RecoverLensingIndex (average, measureSeq, lensing);
    124110          if (Mj == -1) {
     111            fprintf (stderr, "failed %f %f : %d\n", average->R, average->D, lensing->imageID);
    125112            Nfailed ++;
    126113            continue;
     
    331318  free (N7);
    332319
    333   myIndexFree (measureIndex);
     320  mySequenceFree (measureSeq);
     321
     322  fprintf (stderr, "done with %d aves (%f %f %f %f)\n", (int) catalog->Naverage, time1, time2, time3, time4);
    334323
    335324  fprintf (stderr, "corrected %d lensing IDs, failed on %d lensing IDs\n", Nfixed, Nfailed);
Note: See TracChangeset for help on using the changeset viewer.