home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: Science / Science.zip / fblnk224.zip / parameters.c < prev    next >
C/C++ Source or Header  |  1999-01-28  |  8KB  |  339 lines

  1. /*  parameters.c  */
  2. /*  part of the fitsblink program  */
  3. /*  routines for input of image parameters  */
  4. /*  Jure Skvarc, May 1998                   */
  5. #include <stdio.h>
  6. #include <math.h>
  7. #include <stdlib.h>
  8. #include <string.h>
  9. #include <forms.h>
  10.  
  11. #include "formblink.h"
  12. #include "functs.h"
  13.  
  14. extern STATE state;
  15. extern BLINK_FRAME *frame;
  16.  
  17.  
  18.  
  19. /*  Write right ascension is in HHhMMmSS.SSs format to the input field */
  20. /*  Input ra is in decimal degrees  */
  21. void
  22. set_rainput(FL_OBJECT *obj, double ra)
  23.  
  24. {
  25.   char a[20];
  26.   int h, m;
  27.   float s;
  28.  
  29.   ra /= 15.0;
  30.   h = (int) ra;
  31.   ra -= h;
  32.   ra *= 60.0;
  33.   m = (int) (ra + 1e-9);
  34.   s = (ra - m + 1e-9) * 60;
  35.   sprintf(a, "%dh%02dm%05.2fs", h, m, s);
  36.   fl_set_input(obj, a);
  37. }
  38.  
  39. /*  Accept right ascension of the centre pixel in format hh:mm:ss.ss  */
  40. void 
  41. rainputC(FL_OBJECT *obj, long val)
  42.  
  43. {
  44.   char *r;
  45.   int n;
  46.  
  47.   r = (char *) fl_get_input(obj);
  48.   n = state.control[state.control_num];
  49.   frame[n].ra = parse_ra(r);
  50.   frame[n].fitsfile.crval1 = frame[n].ra;
  51.   set_rainput(obj, frame[n].ra);
  52. }
  53.  
  54.  
  55. /*  Write declination is in +DDdMMmSS.Ss format to the input field */
  56. /*  Input dec is in decimal degrees  */
  57. void
  58. set_decinput(FL_OBJECT *obj, double dec)
  59.  
  60. {
  61.   char a[20];
  62.   int d, m, c;
  63.   float s;
  64.   
  65.   if (dec < 0) {
  66.     c = '-';
  67.     dec = -dec;
  68.   }
  69.   else {
  70.     c = '+';
  71.   }
  72.   d = (int) dec;
  73.   dec -= d;
  74.   dec *= 60.0;
  75.   m = (int) (dec + 1e-9);
  76.   s = (dec - m + 1e-9) * 60;
  77.   sprintf(a, "%c%dd%02d'%05.2f\"", c, d, m, s);
  78.   fl_set_input(obj, a);
  79. }
  80.  
  81.  
  82. /*  Accept declination of the centre pixel in format +dd:mm:ss.s */
  83.  
  84. void
  85. decinputC(FL_OBJECT *obj, long val)
  86.  
  87. {
  88.   char *r;
  89.   int n;
  90.  
  91.   r = (char *) fl_get_input(obj);
  92.   n = state.control[state.control_num];
  93.   frame[n].dec = parse_dec(r);
  94.   frame[n].fitsfile.crval2 = frame[n].dec;
  95.   set_decinput(obj, frame[n].dec);
  96. }
  97.  
  98.  
  99. /*  Write a double value with a format format to the input field */
  100. void
  101. set_doubleval(FL_OBJECT *obj, char *format, double val)
  102.  
  103. {
  104.   char temp[20];
  105.   sprintf(temp, format, val);
  106.   fl_set_input(obj, temp);
  107. }
  108.  
  109. /*  Set pixel size in x direction  */
  110. void
  111. xpixelC(FL_OBJECT *obj, long val)
  112.  
  113. {
  114.   int n = state.control[state.control_num];
  115.   frame[n].xsize = strtod(fl_get_input(obj), NULL);
  116.   frame[n].fitsfile.cdelt1 = frame[n].xsize / 3600.0;
  117.   set_doubleval(obj, "%.3f", frame[n].xsize);
  118. }
  119.  
  120.  
  121. /*  Set pixel size in y direction  */
  122. void
  123. ypixelC(FL_OBJECT *obj, long val)
  124.  
  125. {
  126.   int n = state.control[state.control_num];
  127.   frame[n].ysize = strtod(fl_get_input(obj), NULL);
  128.   frame[n].fitsfile.cdelt2 = frame[n].ysize / 3600.0;
  129.   set_doubleval(obj, "%.3f", frame[n].ysize);
  130. }
  131.  
  132.  
  133. /*  Set rotation angle (in decimal degrees)  */
  134. void
  135. rotationC(FL_OBJECT *obj, long val)
  136.  
  137. {
  138.   int n = state.control[state.control_num];
  139.   frame[n].fi = fmod(strtod(fl_get_input(obj), NULL), 360);
  140.   frame[n].fitsfile.crot = frame[n].fi;
  141.   set_doubleval(obj, "%.3f", frame[n].fi);
  142. }
  143.  
  144.  
  145. /*  Write year, month, day, hour or minute to the input field */
  146. void
  147. set_intval(FL_OBJECT *obj, int val)
  148.  
  149. {
  150.   char temp[20];
  151.   sprintf(temp, "%d", val);
  152.   fl_set_input(obj, temp);
  153. }
  154.  
  155. /*  Set year  */
  156. void
  157. timeyearC(FL_OBJECT *obj, long val)
  158.  
  159. {
  160.   int n = state.control[state.control_num];
  161.   frame[n].year = strtol(fl_get_input(obj), NULL, 10);
  162.   set_intval(obj, frame[n].year);
  163. }
  164.  
  165. /*  Set month  */
  166. void
  167. timemonthC(FL_OBJECT *obj, long val)
  168.  
  169. {
  170.   int n = state.control[state.control_num];
  171.   frame[n].month = strtol(fl_get_input(obj), NULL, 10);
  172.   set_intval(obj, frame[n].month);
  173. }
  174.  
  175. /*  Write a day in a decimal format */
  176. void
  177. write_decimal_day(BLINK_FRAME *frame, int n)
  178.  
  179. {
  180.   double decday = frame[n].day + (frame[n].hour + (frame[n].minute +
  181.                         frame[n].second / 60.0) / 60.0) / 24.0; 
  182.   set_doubleval(state.parameters->timedecdayW, "%10.7f", decday);
  183. }
  184.  
  185. /*  Set day */
  186. void
  187. timedayC(FL_OBJECT *obj, long val)
  188.  
  189. {
  190.   int n = state.control[state.control_num];
  191.   frame[n].day = strtol(fl_get_input(obj), NULL, 10);
  192.   set_intval(obj, frame[n].day);
  193.   write_decimal_day(frame, n);
  194. }
  195.  
  196. /* Set hour  */
  197. void
  198. timehourC(FL_OBJECT *obj, long val)
  199.  
  200. {
  201.   int n = state.control[state.control_num];
  202.   frame[n].hour = strtol(fl_get_input(obj), NULL, 10);
  203.   set_intval(obj, frame[n].hour);
  204.   write_decimal_day(frame, n);
  205. }
  206.  
  207. /* Set minute  */
  208. void 
  209. timeminuteC(FL_OBJECT *obj, long val)
  210.  
  211. {
  212.   int n = state.control[state.control_num];
  213.   frame[n].minute = strtol(fl_get_input(obj), NULL, 10);
  214.   set_intval(obj, frame[n].minute);
  215.   write_decimal_day(frame, n);
  216. }
  217.  
  218.  
  219. void
  220. timesecondC(FL_OBJECT *obj, long val)
  221.  
  222. {
  223.   int n = state.control[state.control_num];
  224.   frame[n].second = strtod(fl_get_input(obj), NULL);
  225.   set_doubleval(obj, "%6.3f", frame[n].second);
  226.   write_decimal_day(frame, n);
  227. }
  228.  
  229.  
  230. void
  231. write_timedecday(BLINK_FRAME *frame, int n)
  232.  
  233. {
  234.   write_decimal_day(frame, n);
  235.   set_intval(state.parameters->timedayW, frame[n].day);
  236.   set_intval(state.parameters->timehourW, frame[n].hour);
  237.   set_intval(state.parameters->timeminuteW, frame[n].minute);
  238.   set_doubleval(state.parameters->timesecondW, "%6.3f", frame[n].second);
  239. }
  240.  
  241.  
  242. /*  Set time in decimal days  */
  243. void
  244. timedecdayC(FL_OBJECT *obj, long val)
  245.  
  246. {
  247.   double decday;
  248.  
  249.   int n = state.control[state.control_num];
  250.   decday = fmod(fabs(strtod(fl_get_input(obj), NULL) - 1), 31.0) + 1.0;
  251.   /*  Extract separate days. hours, minutes and seconds from decimal days */
  252.   frame[n].day = decday;
  253.   decday -= frame[n].day;
  254.   decday *= 24.0;
  255.   frame[n].hour = decday;
  256.   decday -= frame[n].hour;
  257.   decday *= 60.0;
  258.   frame[n].minute = decday;
  259.   decday -= frame[n].minute;
  260.   frame[n].second = 60.0 * decday; 
  261.   write_timedecday(frame, n);
  262. }
  263.  
  264.  
  265. /*   Object name  */
  266. void
  267. objectC(FL_OBJECT *obj, long val)
  268.  
  269. {
  270.   int n = state.control[state.control_num];
  271.   strcpy(frame[n].fitsfile.object, fl_get_input(obj));
  272. }
  273.  
  274. /*  Observer name  */
  275. void
  276. observerC(FL_OBJECT *obj, long val)
  277.  
  278. {
  279.   int n = state.control[state.control_num];
  280.   strcpy(frame[n].fitsfile.observer, fl_get_input(obj));
  281. }
  282.  
  283. /*  Telescope  */
  284. void
  285. telescopeC(FL_OBJECT *obj, long val)
  286.  
  287. {
  288.   int n = state.control[state.control_num];
  289.   strcpy(frame[n].fitsfile.telescope, fl_get_input(obj));
  290. }
  291.  
  292. /*  Instrument  */
  293. void
  294. instrumentC(FL_OBJECT *obj, long val)
  295.  
  296. {
  297.   int n = state.control[state.control_num];
  298.   strcpy(frame[n].fitsfile.instrument, fl_get_input(obj));
  299. }
  300.  
  301.  
  302.  
  303.  
  304. /*  Edit image parameters */
  305. void
  306. edit_parameters(FL_OBJECT *obj, int m)
  307.  
  308. {
  309.   int n;
  310.  
  311.   /*  The window in not created yet, do it now  */
  312.   if (state.parameters == NULL) {
  313.     state.parameters = create_form_Parameters();
  314.     fl_set_form_minsize(state.parameters->Parameters, 
  315.           state.parameters->Parameters->w, state.parameters->Parameters->h);
  316.   }
  317.   /*  Deactivate PARAMETERS item in the menu */
  318.   fl_set_menu_item_mode(obj, m, FL_PUP_GREY);
  319.   if (!fl_form_is_visible(state.parameters->Parameters)) {
  320.     fl_show_form(state.parameters->Parameters,  FL_FIX_SIZE, FL_FULLBORDER | FL_PLACE_FREE_CENTER, "Image parameters");
  321.   }
  322.   /*  Write current parameter values into the form */
  323.   n = state.control[state.control_num];
  324.   set_rainput(state.parameters->rainputW, frame[n].ra);
  325.   set_decinput(state.parameters->decinputW, frame[n].dec);
  326.   set_doubleval(state.parameters->xpixelW, "%.3f", frame[n].xsize);
  327.   set_doubleval(state.parameters->ypixelW, "%.3f", frame[n].ysize);
  328.   set_doubleval(state.parameters->rotationW, "%.3f", frame[n].fi);
  329.   write_timedecday(frame, n);
  330.   set_intval(state.parameters->timeyearW, frame[n].year);
  331.   set_intval(state.parameters->timemonthW, frame[n].month);
  332.   fl_set_input(state.parameters->objectW, frame[n].fitsfile.object);
  333.   fl_set_input(state.parameters->observerW, frame[n].fitsfile.observer);
  334.   fl_set_input(state.parameters->telescopeW, frame[n].fitsfile.telescope);
  335.   fl_set_input(state.parameters->instrumentW, frame[n].fitsfile.instrument);
  336.   strcpy(frame[n].fitsfile.ctype, "-TAN");
  337.   frame[n].fitsfile.wcs = 1;
  338. }
  339.