PRO hess_out, mech_out ;+ ; Prints the calculated values and writes them to a file ; ; 11/22/94 dd ; 11/25/94 dd Add output in onches or mm, add distance to grating center. ; 11/28/94 dd Modified to output Direction Cosines and grating center coord.s ; and Mechanical output: center point and four in a square ; around it. ; 11/29/94 dd Add output of Theta_error due to mounting hole constraint. ; Replace unit vector dir cosines with mounting hole unit vect. ; 3/9/95 dd Modified mech_out to have mech_sqr_io, mech_sqr_l and mech_sqr_r values ; for Chris to use. ; 10/11/95 dd Modified for TOGA design: shells 1,2; file names ; ; and STRCOMPRESS of grat code. ;- @hess_common sf = DOUBLE(1.0) fmt_x = '(F10.3)' fmt_xx = '(F14.7)' fmt_uv = '(F10.6)' fmt_deg = '(F10.5)' if (hs_use_inches NE 0) then begin sf = DOUBLE(1./25.4) fmt_x = '(F10.4)' fmt_xx = '(F14.8)' fmt_uv = '(F10.6)' fmt_deg = '(F10.5)' end ; Select output format ; mech_out = 0 Output columns for comparing ; mech_out = 1 Output columns for mechanical input by CP if(n_elements(mech_out) EQ 0) then mech_out = 0 out_shells = [1,2] ; Open output file out_file_name = 'toga_out_mech.dat' if mech_out EQ 0 then out_file_name = 'toga_out_general.dat' OPENW, hess_unit, out_file_name, /GET_LUN FOR imap = 0, n_elements(out_shells)-1 DO BEGIN shell = out_shells(imap) is = shell-1 FOR iseg = 0, n_elements(hs_Segs)-1 DO BEGIN FOR ig = 0, hs_GpS(is)-1 DO BEGIN grat_code = STRING(shell,FORMAT='(I1)')+ $ STRING(hs_Segs(iseg),FORMAT='(A2)')+ $ STRING(ig+1,FORMAT='(I1)') ;Distance to grating center d_center = SQRT( ((hs_X-hs_Xoff)+hs_XC(is,iseg,ig))^2 + $ (hs_YC(is,iseg,ig))^2 + (hs_ZC(is,iseg,ig))^2 ) ;--- Comparison output format: if(mech_out EQ 0) then begin out_string= STRING(sf*hs_XMH(is,iseg,ig),FORMAT=fmt_x) + $ ; Mounting STRING(sf*hs_YMH(is,iseg,ig),FORMAT=fmt_x) + $ ; hole STRING(sf*hs_ZMH(is,iseg,ig),FORMAT=fmt_x) + $ ; ; STRING(sf*( hs_XMH(is,iseg,ig) + $ ; Mount hole ; 25.4*hs_XU(is,iseg,ig) ),FORMAT=fmt_x) + $ ; plus ; STRING(sf*( hs_YMH(is,iseg,ig) + $ ; 1" offset ; 25.4*hs_YU(is,iseg,ig) ),FORMAT=fmt_x) + $ ; STRING(sf*( hs_ZMH(is,iseg,ig) + $ ; 25.4*hs_ZU(is,iseg,ig) ),FORMAT=fmt_x) + $ ; ; STRING(ACOS(hs_XU(is,iseg,ig))/!DTOR,$ ; FORMAT=fmt_deg) + $ ; Direction ; STRING(ACOS(hs_YU(is,iseg,ig))/!DTOR,$ ; cosines ; FORMAT=fmt_deg) + $ ; STRING(ACOS(hs_ZU(is,iseg,ig))/!DTOR,$ ; FORMAT=fmt_deg) + $ ; ;;out_string = STRING(sf*hs_XC(is,iseg,ig),FORMAT=fmt_x) + $ ; Grating ;; STRING(sf*hs_YC(is,iseg,ig),FORMAT=fmt_x) + $ ; center ;; STRING(sf*hs_ZC(is,iseg,ig),FORMAT=fmt_x) + $ ; ;; STRING(hs_XUMH(is,iseg,ig),FORMAT=fmt_uv) + $ ; Unit vector ;; STRING(hs_YUMH(is,iseg,ig),FORMAT=fmt_uv) + $ ; to mounting ;; STRING(hs_ZUMH(is,iseg,ig),FORMAT=fmt_uv) + $ ; hole ; ; STRING(hs_XU(is,iseg,ig),FORMAT=fmt_uv) + $ ; Unit vector ; STRING(hs_YU(is,iseg,ig),FORMAT=fmt_uv) + $ ; along normal ; STRING(hs_ZU(is,iseg,ig),FORMAT=fmt_uv) + $ ; ;; STRING(sf*d_center, FORMAT=fmt_x) + $ ; Distance to ; grat center ;; STRING(hs_Terror(is,iseg,ig)/!DTOR, $ ;; FORMAT='(F9.3)') + $ ; Angle error ; in deg.s ; ' '+grat_code ' '+STRCOMPRESS(grat_code,/REMOVE_ALL) end ;--- end comparison format ;--- Mechanical output format: if(mech_out NE 0) then begin ;OLD version ; glu_ang = hs_Tglu(iseg) + hs_Disp(is) ; xumh = SIN(glu_ang) * hs_XUD(is,iseg,ig) + $ ; Mounting hole ; COS(glu_ang) * hs_XUL(is,iseg,ig) ; unit vector ; yumh = SIN(glu_ang) * hs_YUD(is,iseg,ig) + $ ; COS(glu_ang) * hs_YUL(is,iseg,ig) ; zumh = SIN(glu_ang) * hs_ZUD(is,iseg,ig) + $ ; COS(glu_ang) * hs_ZUL(is,iseg,ig) ; perp_ang = glu_ang + DOUBLE(90.0*!DTOR) ; xpmh = SIN(perp_ang) * hs_XUD(is,iseg,ig) + $ ; Perp to mounting ; COS(perp_ang) * hs_XUL(is,iseg,ig) ; hole in plane ; ypmh = SIN(perp_ang) * hs_YUD(is,iseg,ig) + $ ; COS(perp_ang) * hs_YUL(is,iseg,ig) ; zpmh = SIN(perp_ang) * hs_ZUD(is,iseg,ig) + $ ; COS(perp_ang) * hs_ZUL(is,iseg,ig) ;NEW version 11/29/94 ; Size of square around mounting hole in mechanical output mech_sqr_io = sf*DOUBLE([0.500,0.500]*25.4) mech_sqr_l = sf*DOUBLE([0.530,0.560]*25.4) mech_sqr_r = sf*DOUBLE([0.618,0.470]*25.4) xumh = hs_XUMH(is,iseg,ig) ; Mounting hole unit vector yumh = hs_YUMH(is,iseg,ig) zumh = hs_ZUMH(is,iseg,ig) glu_ang = hs_Tglu(iseg) + hs_Disp(is) perp_ang = glu_ang + DOUBLE(90.0*!DTOR) ; APPROXIMATELY xpmh = SIN(perp_ang) * hs_XUD(is,iseg,ig) + $ ; Perp to mounting COS(perp_ang) * hs_XUL(is,iseg,ig) ; hole in plane ypmh = SIN(perp_ang) * hs_YUD(is,iseg,ig) + $ COS(perp_ang) * hs_YUL(is,iseg,ig) zpmh = SIN(perp_ang) * hs_ZUD(is,iseg,ig) + $ COS(perp_ang) * hs_ZUL(is,iseg,ig) ;Make pmh perp to mounting hole vector: dot_prod = xumh*xpmh + yumh*ypmh + zumh*zpmh xpmh = xpmh - dot_prod*xumh ypmh = ypmh - dot_prod*yumh zpmh = zpmh - dot_prod*zumh ; and normalize it: length = SQRT(xpmh^2 + ypmh^2 + zpmh^2) xpmh = xpmh/length ypmh = ypmh/length zpmh = zpmh/length xp1 = ( xumh*mech_sqr_io(is) + xpmh*mech_sqr_l(is) ) + sf*hs_XMH(is,iseg,ig) xp2 = ( xumh*mech_sqr_io(is) - xpmh*mech_sqr_r(is) ) + sf*hs_XMH(is,iseg,ig) xp3 = ( - xumh*mech_sqr_io(is) - xpmh*mech_sqr_r(is) ) + sf*hs_XMH(is,iseg,ig) xp4 = ( - xumh*mech_sqr_io(is) + xpmh*mech_sqr_l(is) ) + sf*hs_XMH(is,iseg,ig) yp1 = ( yumh*mech_sqr_io(is) + ypmh*mech_sqr_l(is) ) + sf*hs_YMH(is,iseg,ig) yp2 = ( yumh*mech_sqr_io(is) - ypmh*mech_sqr_r(is) ) + sf*hs_YMH(is,iseg,ig) yp3 = ( - yumh*mech_sqr_io(is) - ypmh*mech_sqr_r(is) ) + sf*hs_YMH(is,iseg,ig) yp4 = ( - yumh*mech_sqr_io(is) + ypmh*mech_sqr_l(is) ) + sf*hs_YMH(is,iseg,ig) zp1 = ( zumh*mech_sqr_io(is) + zpmh*mech_sqr_l(is) ) + sf*hs_ZMH(is,iseg,ig) zp2 = ( zumh*mech_sqr_io(is) - zpmh*mech_sqr_r(is) ) + sf*hs_ZMH(is,iseg,ig) zp3 = ( - zumh*mech_sqr_io(is) - zpmh*mech_sqr_r(is) ) + sf*hs_ZMH(is,iseg,ig) zp4 = ( - zumh*mech_sqr_io(is) + zpmh*mech_sqr_l(is) ) + sf*hs_ZMH(is,iseg,ig) out_string= STRING(sf*hs_XMH(is,iseg,ig),FORMAT=fmt_xx) + $ ; Mounting STRING(sf*hs_YMH(is,iseg,ig),FORMAT=fmt_xx) + $ ; hole STRING(sf*hs_ZMH(is,iseg,ig),FORMAT=fmt_xx) + $ STRING(xp1,FORMAT=fmt_xx) + $ STRING(yp1,FORMAT=fmt_xx) + $ STRING(zp1,FORMAT=fmt_xx) + $ STRING(xp2,FORMAT=fmt_xx) + $ STRING(yp2,FORMAT=fmt_xx) + $ STRING(zp2,FORMAT=fmt_xx) + $ STRING(xp3,FORMAT=fmt_xx) + $ STRING(yp3,FORMAT=fmt_xx) + $ STRING(zp3,FORMAT=fmt_xx) + $ STRING(xp4,FORMAT=fmt_xx) + $ STRING(yp4,FORMAT=fmt_xx) + $ STRING(zp4,FORMAT=fmt_xx) + $ ' '+STRCOMPRESS(grat_code,/REMOVE_ALL) ; ' '+grat_code end ;--- end Mechanical format print, out_string printf, hess_unit, out_string END ;gratings END ;segments END ;shells printf, hess_unit, '* end *' printf, hess_unit, systime() printf, hess_unit, ' ' CLOSE, hess_unit FREE_LUN, hess_unit SPAWN, 'cat hess_setup.pro >> '+out_file_name RETURN END