IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Oct 27, 2015, 4:49:06 PM (11 years ago)
Author:
eugene
Message:

extensive work on relphot, relastro, uniphot, dvomerge aiming to the construction and calibration of PV3

Location:
trunk/Ohana
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • trunk/Ohana

  • trunk/Ohana/src/kapa2/include/prototypes.h

    r38465 r38986  
    4040void          DrawYErrors         PROTO((KapaGraphWidget *graph, Gobjects *objects));
    4141void          DrawTick            PROTO((Graphic *graphic, Axis *axis, int P, TickMarkData *tick, int naxis));
    42 void          AxisTickScale       PROTO((Axis *axis, double *major, double *minor, int *nsignif));
     42void          AxisTickScale       PROTO((Axis *axis, double *range, double *major, double *minor, int *nsignif));
    4343TickMarkData *CreateAxisTicks     PROTO((Axis *axis, int *nticks));
    4444int           PrintTick           PROTO((char *string, double value, double min, double max, int nsignif));
  • trunk/Ohana/src/kapa2/include/structures.h

    r38465 r38986  
    143143  double fx, dfx, fy, dfy;  /* axis location on graphic */
    144144  double lweight;
     145  double fLabelRange;
     146  double fMinor;
    145147  int color;
    146148} Axis;
  • trunk/Ohana/src/kapa2/src/DrawFrame.c

    r34088 r38986  
    116116
    117117  if ((naxis == 0) || (naxis == 2)) {
    118     x = MAX(x, fx);
    119   }
    120   //   y = MAX(y, fy);
    121   // }
     118    x = MIN(MAX(x, fx),fx+dfx);
     119  }
     120  if ((naxis == 1) || (naxis == 3)) {
     121    y = MAX(MIN(y, fy),fy+dfy);
     122  }
    122123
    123124  dir = ((naxis == 0) || (naxis == 1)) ? -1 : +1;
     
    137138   
    138139    /* temporarily assume rectilinear axes */
    139     if (naxis == 0) { dx = 0; dy = +1.0*pad; pos = 7; }
    140     if (naxis == 2) { dx = 0; dy = -1.0*pad; pos = 1; }
    141 
    142     if (naxis == 1) { dy = 0; dx = -0.5*pad; pos = 3; }
    143     if (naxis == 3) { dy = 0; dx = +0.5*pad; pos = 5; }
     140    if (naxis == 0) { dx = 0; dy = +1.0*pad; pos = 7; } // center, down justified
     141    if (naxis == 2) { dx = 0; dy = -1.0*pad; pos = 1; } // center, up justified
     142
     143    if (naxis == 1) { dy = 0; dx = -0.5*pad; pos = 3; } // left, center justified
     144    if (naxis == 3) { dy = 0; dx = +0.5*pad; pos = 5; } // right, center justified
    144145
    145146    xt = fx + (value-min)*dfx/(max - min) + dx;
     
    154155# define MIN_RANGE 1e-30
    155156
    156 void AxisTickScale (Axis *axis, double *major, double *minor, int *nsignif) {
    157 
    158   double range, lrange, factor, mantis, fmantis, power;
    159 
    160   range = axis[0].max - axis[0].min;
    161   if (fabs(range) < MIN_RANGE) {
    162     range = (range < 0) ? -MIN_RANGE : +MIN_RANGE;
    163   }
    164 
    165   lrange = log10(MAX(fabs(range), MIN_RANGE));
     157void AxisTickScale (Axis *axis, double *range, double *major, double *minor, int *nsignif) {
     158
     159  double lrange, factor, mantis, fmantis, power;
     160
     161  *range = axis->fLabelRange*(axis[0].max - axis[0].min);
     162  if (fabs(*range) < MIN_RANGE) {
     163    *range = (*range < 0) ? -MIN_RANGE : +MIN_RANGE;
     164  }
     165
     166  lrange = log10(MAX(fabs(*range), MIN_RANGE));
     167  double truncRange = ((int) ((lrange + 0.005) * 1000)) / 1000.0;
     168  lrange = truncRange;
     169
    166170  mantis = modf (lrange, &factor);
    167171  if (mantis < 0.0) {
     
    179183  if ((fmantis >= 1.0) && (fmantis <  1.999)) {
    180184    *major = 0.5 * power;
    181     *minor = 0.1 * power;
    182185    *nsignif = factor - 1;
    183186    if (axis[0].areticks == 1) {
    184187      *major = 0.25 * power;
    185       *minor = 0.05 * power;
    186188      *nsignif = factor - 2;
     189    }     
     190    if (axis[0].areticks == 3) {
     191      *major = 1.0 * power;
     192      *nsignif = factor - 1;
    187193    }     
    188194  }
    189195  if ((fmantis >= 1.999) && (fmantis <  3.999)) {
    190196    *major = 1.0 * power;
    191     *minor = 0.2 * power;
    192197    *nsignif = factor;
    193198    if (axis[0].areticks == 1) {
    194199      *major = 0.5 * power;
    195       *minor = 0.1 * power;
    196200      *nsignif = factor - 1;
     201    }     
     202    if (axis[0].areticks == 3) {
     203      *major = 2.0 * power;
     204      *nsignif = factor;
    197205    }     
    198206  }
    199207  if ((fmantis >= 3.999) && (fmantis <  5.999)) {
    200208    *major = 1.0 * power;
    201     *minor = 0.5 * power;
    202209    *nsignif = factor;
    203210    if (axis[0].areticks == 1) {
    204211      *major = 1.0 * power;
    205       *minor = 0.2 * power;
     212      *nsignif = factor;
     213    }     
     214    if (axis[0].areticks == 3) {
     215      *major = 2.0 * power;
    206216      *nsignif = factor;
    207217    }     
     
    209219  if ((fmantis >= 5.999) && (fmantis <   7.999)) {
    210220    *major = 2.0 * power;
    211     *minor = 0.5 * power;
    212221    *nsignif = factor;
    213222    if (axis[0].areticks == 1) {
    214223      *major = 1.0 * power;
    215       *minor = 0.5 * power;
     224      *nsignif = factor;
     225    }     
     226    if (axis[0].areticks == 3) {
     227      *major = 4.0 * power;
    216228      *nsignif = factor;
    217229    }     
     
    219231  if ((fmantis >= 7.999) && (fmantis <  10.000)) {
    220232    *major = 2.5 * power;
    221     *minor = 0.5 * power;
    222       *nsignif = factor - 1;
     233    *nsignif = factor - 1;
    223234    if (axis[0].areticks == 1) {
    224235      *major = 2.0 * power;
    225       *minor = 0.5 * power;
    226       *nsignif = factor;
    227     }     
    228   }
     236      *nsignif = factor;
     237    }     
     238    if (axis[0].areticks == 3) {
     239      *major = 4.0 * power;
     240      *nsignif = factor;
     241    }     
     242  }
     243  *minor = *major / axis->fMinor;
    229244}
    230245
     
    233248  TickMarkData *ticks;
    234249  double range, major, minor, first, value;
    235   int i, NTICKS, done, ifirst, nsignif;
     250  int i, NTICKS, done, nsignif;
    236251
    237252  *nticks = 0;
     
    240255  if (isnan(axis->max) || isinf(axis->max)) return NULL;
    241256 
    242   range = axis->max - axis->min;
    243 
    244   // not sure why I skip out here instead of using the MIN_RANGE value
    245   if (fabs(range) < MIN_RANGE) return NULL;
    246  
    247   if (fabs(range) < MIN_RANGE) {
    248     range = (range < 0) ? -MIN_RANGE : +MIN_RANGE;
    249   }
    250 
    251257  // length of the axis in pixels
    252258  // int nPixels = hypot(axis->dfx, axis->dfy);
    253259  // double dPixels = nPixels / range; // axis pixel-scale
    254260
    255   AxisTickScale (axis, &major, &minor, &nsignif);
     261  AxisTickScale (axis, &range, &major, &minor, &nsignif);
    256262
    257263  // be a little generous
     
    259265  ALLOCATE (ticks, TickMarkData, NTICKS);
    260266
    261   // value of the tick mark
    262   ifirst = (axis->min < 0.0) ? (axis->min/minor - 0.05) : (axis->min/minor + 0.05);
     267  // value of the first tick mark (near axis->min)
     268  double minValue = axis->min / minor;
     269  int ifirst = (int) minValue;
     270
     271  if ((axis->min > 0.0) && (minValue - ifirst > +0.1)) {
     272    ifirst ++;
     273  }
     274  if ((axis->min < 0.0) && (minValue - ifirst < -0.1)) {
     275    ifirst --;
     276  }
    263277  first = minor*ifirst;
    264278 
    265   // allow undershoot by 1 pixel
    266   // double overshoot = (axis->min - first) * dPixels;
    267   // if (overshoot > 0.5) {
    268   //   if (range > 0) {
    269   //     first += minor;
    270   //   } else {
    271   //     first -= minor;
    272   //   }
    273   // }
    274 
    275   // XXX need to fix first and last value for printing label: currently prints first label
    276   // too early & fails to do last label if too close
     279  // only write the labels for the inner fRange of the axies
     280  double minLabelValue = 0.5*(1.0 - 1.001*axis->fLabelRange)*(axis->max - axis->min) + axis->min;
     281  double maxLabelValue = 0.5*(1.0 + 1.001*axis->fLabelRange)*(axis->max - axis->min) + axis->min;
    277282
    278283  // loop to find the ticks
     
    284289    ticks[i].IsMajor |= (fabs((int)((value + 0.5*minor)/major) - (value/major)) < 0.5*(minor/major));
    285290    ticks[i].IsMajor |= (fabs((int)((value - 0.5*minor)/major) - (value/major)) < 0.5*(minor/major));
    286     ticks[i].IsLabel = (ticks[i].IsMajor && axis->islabel);
     291    int inLabelRange = (range > 0) ? (value >= minLabelValue) && (value <= maxLabelValue) : (value <= minLabelValue) && (value >= maxLabelValue);
     292    ticks[i].IsLabel = inLabelRange && ticks[i].IsMajor && axis->islabel;
    287293    ticks[i].value = value;
    288294    ticks[i].nsignif = nsignif;
     
    292298      value -= minor;
    293299   
    294     done |= (range > 0) && (value > axis->max);
    295     done |= (range < 0) && (value < axis->max);
     300    done |= (range > 0) && (value > axis->max + 0.1*minor);
     301    done |= (range < 0) && (value < axis->max - 0.1*minor);
     302    // fprintf (stderr, "%d : %f %f %f %f\n", done, range, value, axis->max, 0.1*minor);
    296303  }
    297304
  • trunk/Ohana/src/kapa2/src/Graphs.c

    r37807 r38986  
    2323    graph[0].axis[i].labelPad = NAN;
    2424    graph[0].axis[i].pad = NAN;
     25    graph[0].axis[i].fLabelRange = 1.0;
     26    graph[0].axis[i].fMinor = 5.0;
    2527  }   
    2628  graph[0].data.ticktextPad = NAN;
     
    3537  graph[0].data.padYm = NAN;
    3638  graph[0].data.padYp = NAN;
     39
     40  graph[0].data.fLabelRangeXm = 1.0;
     41  graph[0].data.fLabelRangeXp = 1.0;
     42  graph[0].data.fLabelRangeYm = 1.0;
     43  graph[0].data.fLabelRangeYp = 1.0;
     44
     45  graph[0].data.fMinorXm = 5.0;
     46  graph[0].data.fMinorXp = 5.0;
     47  graph[0].data.fMinorYm = 5.0;
     48  graph[0].data.fMinorYp = 5.0;
    3749
    3850  for (i = 0; i < 8; i++) {
  • trunk/Ohana/src/kapa2/src/LoadFrame.c

    r29539 r38986  
    3737  graph[0].axis[3].labelPad = graph[0].data.labelPadYp;
    3838
     39  graph[0].axis[0].fLabelRange = graph[0].data.fLabelRangeXm;
     40  graph[0].axis[1].fLabelRange = graph[0].data.fLabelRangeYm;
     41  graph[0].axis[2].fLabelRange = graph[0].data.fLabelRangeXp;
     42  graph[0].axis[3].fLabelRange = graph[0].data.fLabelRangeYp;
     43
     44  graph[0].axis[0].fMinor = graph[0].data.fMinorXm;
     45  graph[0].axis[1].fMinor = graph[0].data.fMinorYm;
     46  graph[0].axis[2].fMinor = graph[0].data.fMinorXp;
     47  graph[0].axis[3].fMinor = graph[0].data.fMinorYp;
     48
    3949  for (i = 0; i < 4; i++) {
    4050    graph[0].axis[i].lweight = graph[0].data.lweight;
     
    6373    case '2':
    6474      graph[0].axis[i].areticks = 2;
     75      break;
     76    case '3':
     77      graph[0].axis[i].areticks = 3;
    6578      break;
    6679    }
  • trunk/Ohana/src/kapa2/src/PSFrame.c

    r34088 r38986  
    8181  y = fy + (value-min)*dfy/(max - min);
    8282
     83  if ((naxis == 0) || (naxis == 2)) {
     84    x = MIN(MAX(x, fx),fx+dfx);
     85  }
     86  if ((naxis == 1) || (naxis == 3)) {
     87    y = MIN(MAX(y, fy),fy+dfy);
     88  }
     89
    8390  dir = ((naxis == 0) || (naxis == 1)) ? +1 : -1;
    8491  dx = dir*size*dfy*n; 
  • trunk/Ohana/src/kapa2/src/SetGraphData.c

    r27790 r38986  
    2727  graph[0].axis[2].labelPad = graph[0].data.labelPadXp;
    2828  graph[0].axis[3].labelPad = graph[0].data.labelPadYp;
     29
     30  graph[0].axis[0].fLabelRange = graph[0].data.fLabelRangeXm;
     31  graph[0].axis[1].fLabelRange = graph[0].data.fLabelRangeYm;
     32  graph[0].axis[2].fLabelRange = graph[0].data.fLabelRangeXp;
     33  graph[0].axis[3].fLabelRange = graph[0].data.fLabelRangeYp;
     34
     35  graph[0].axis[0].fMinor = graph[0].data.fMinorXm;
     36  graph[0].axis[1].fMinor = graph[0].data.fMinorYm;
     37  graph[0].axis[2].fMinor = graph[0].data.fMinorXp;
     38  graph[0].axis[3].fMinor = graph[0].data.fMinorYp;
    2939
    3040  graph[0].axis[0].pad = graph[0].data.padXm;
  • trunk/Ohana/src/kapa2/src/bDrawFrame.c

    r34088 r38986  
    8484  y = fy + (value-min)*dfy/(max - min);
    8585
     86  if ((naxis == 0) || (naxis == 2)) {
     87    x = MIN(MAX(x, fx),fx+dfx);
     88  }
     89  if ((naxis == 1) || (naxis == 3)) {
     90    y = MAX(MIN(y, fy),fy+dfy);
     91  }
     92
    8693  dir = ((naxis == 0) || (naxis == 1)) ? -1 : +1;
    8794  dx = dir*size*dfy*n; 
Note: See TracChangeset for help on using the changeset viewer.