# To: bug-gnu-utils@prep.ai.mit.edu # Cc: arnold@gnu.ai.mit.edu # Date: Mon, 20 Nov 1995 11:39:29 -0500 # From: "R. Hank Donnelly" # # Operating system: Linux1.2.13 (Slackware distrib) # GAWK version: 2.15 (?) # compiler: GCC (?) # # The following enclosed script does not want to fully process the input data # file. It correctly executes the operations on the first record, and then dies # on the second one. My true data file is much longer but this is # representative and it does fail on a file even as short as this one. # The failure appears to occur in the declared function add2output. Between the # steps of incrementing NF by one and setting $NF to the passed variable # the passed variable appears to vanish (i.e. NF does go from 68 to 69 # and before incrementing it "variable" equals what it should but after # "variable" has no value at all.) # # The scripts have been developed using nawk on a Sun (where they run fine) # I have tried gawk there but get a different crash which I have not yet traced # down. Ideally I would like to keep the script the same so that it would run # on either gawk or nawk (that way I can step back and forth between laptop and # workstation. # # Any ideas why the laptop installation is having problems? # Hank # # # #!/usr/bin/gawk -f BEGIN { # set a few values FS = "\t" OFS = "\t" pi = atan2(0, -1) # distance from HRMA to focal plane in mm fullradius = 10260.54 # set locations of parameters on input line nf_nrg = 1 nf_order = 3 nf_item = 4 nf_suite = 5 nf_grating = 8 nf_shutter = 9 nf_type = 13 nf_src = 14 nf_target = 15 nf_voltage = 16 nf_flux = 17 nf_filt1 = 20 nf_filt1_th = 21 nf_filt2 = 22 nf_filt2_th = 23 nf_bnd = 24 nf_hrma_polar = 27 nf_hrma_az = 28 nf_detector = 30 nf_acis_read = 32 nf_acis_proc = 33 nf_acis_frame = 34 nf_hxda_aplist = 36 nf_hxda_y_range = 37 nf_hxda_z_range = 38 nf_hxda_y_step = 39 nf_hxda_z_step = 40 nf_sim_z = 41 nf_fam_polar = 43 nf_fam_az = 44 nf_fam_dither_type = 45 nf_mono_init = 51 nf_mono_range = 52 nf_mono_step = 53 nf_defocus = 54 nf_acis_temp = 55 nf_tight = 59 nf_offset_y = 64 nf_offset_z = 65 while( getline < "xrcf_mnemonics.dat" > 0 ) { mnemonic[$1] = $2 } # "date" | getline date_line # ADR: use a fixed date so that testing will work date_line = "Sun Mar 10 23:00:27 EST 1996" split(date_line, in_date, " ") out_date = in_date[2] " " in_date[3] ", " in_date[6] } function add2output( variable ) { #print("hi1") >> "debug" NF++ #print("hi2") >> "debug" $NF = variable #print("hi3") >> "debug" } function error( ekey, message ) { print "Error at input line " NR ", anode " ekey >> "errors.cleanup" print " " message "." >> "errors.cleanup" } function hxda_na() { $nf_hxda_aplist = $nf_hxda_y_range = $nf_hxda_z_range = "N/A" $nf_hxda_y_step = $nf_hxda_z_step = "N/A" } function acis_na() { $nf_acis_read = $nf_acis_proc = $nf_acis_frame = $nf_acis_temp = "N/A" } function hrc_na() { # print ("hi") >> "debug" } function fpsi_na() { acis_na() hrc_na() $nf_sim_z = $nf_fam_polar = $nf_fam_az = $nf_fam_dither_type = "N/A" } function mono_na() { $nf_mono_init = $nf_mono_range = $nf_mono_step = "N/A" } # this gives the pitch and yaw of the HRMA and FAM # positive pitch is facing the source "looking down" # positive yaw is looking left # 0 az is north 90 is up # this also adds in the FAM X,Y,Z positions function polaz2yawpitch(polar, az) { theta = az * pi / 180 phi = polar * pi / 180 / 60 if( polar == 0 ) { add2output( 0 ) add2output( 0 ) } else { if(az == 0 || az == 180) add2output( 0 ) else add2output( - polar * sin(theta) ) # x = cos (phi) # y = sin (phi) * cos (theta) # add2output( atan2(y,x)*180 / pi * 60 ) if(az == 90 || az ==270 ) add2output( 0 ) else add2output( - polar * cos(theta) ) } # x = cos (phi) # z= sin (phi) * sin (theta) # add2output( atan2(z,x)*180 / pi * 60 ) if(config !~ /HXDA/) { # negative values of defocus move us farther from the source thus # increasing radius radius = fullradius - defocus # FAM_x; FAM_y; FAM_z if((offset_y == 0) && (offset_z == 0)){ add2output( fullradius - radius * cos (phi) ) if (az == 90 || az ==270) add2output( 0 ) else add2output( radius * sin (phi) * cos (theta) ) if (az == 0 || az == 180) add2output( 0 ) else add2output( - radius * sin (phi) * sin (theta) ) } else { # ******* THIS SEGMENT OF CODE IS NOT MATHEMATICALLY CORRECT FOR **** # OFF AXIS ANGLES AND IS SUPPLIED AS A WORKAROUND SINCE IT WILL # PROBABLY ONLY BE USED ON AXIS. add2output( defocus ) add2output( offset_y ) add2output( offset_z ) } } else { add2output( "N/A" ) add2output( "N/A" ) add2output( "N/A" ) } } # set TIGHT/LOOSE to N/A if it is not one of the two allowed values function tight_na() { if( $nf_tight !~ /TIGHT|LOOSE/ ) { $nf_tight == "N/A" } } # this entry is used to give certain entries names { type = $nf_type item = $nf_item suite = $nf_suite order = $nf_order detector = $nf_detector grating = $nf_grating offset_y= $nf_offset_y offset_z= $nf_offset_z bnd = $nf_bnd defocus = $nf_defocus } { # make configuration parameter # as well as setting configuration-dependent N/A values if( $nf_bnd ~ "SCAN" ) { # BND is scanning beam config = "BND" hxda_na() fpsi_na() } else { if( grating == "NONE" ) { config = "HRMA" } else { if( grating == "HETG" ) { if( order != "Both" ) { $nf_shutter = order substr($nf_shutter, \ index($nf_shutter, ",") ) } } else { order = "N/A" } config = "HRMA/" grating } if( detector ~ /ACIS|HRC/ ) { detsys = detector nsub = sub("-", ",", detsys) config = config "/" detsys hxda_na() } else { config = config "/HXDA" fpsi_na() if( detector == "HSI" ) { hxda_na() } } } add2output( config ) if( $nf_src ~ /EIPS|Penning/ ) mono_na() if( $nf_src == "Penning" ) $nf_voltage = "N/A" itm = sprintf("%03d", item) if(config in mnemonic) { if( type in mnemonic ) { ID = mnemonic[config] "-" mnemonic[type] "-" suite "." itm add2output( ID ) } else { error(type, "measurement type not in list") } } else { error(config, "measurement configuration not in list") } # add date to output line add2output( out_date ) # Convert HRMA polar and azimuthal angles to yaw and pitch polaz2yawpitch($nf_hrma_polar, $nf_hrma_az) # set TIGHT/LOOSE to N/A if it is not one of the two allowed values tight_na() # compute number of HXDA apertures if( config ~ /HXDA/ && $nf_hxda_aplist != "N/A") add2output( split( $nf_hxda_aplist, dummy, "," ) ) else add2output( "N/A" ) # make sure the BND value is properly set if($nf_bnd == "FIXED" && detector ~ /ACIS/) $nf_bnd =bnd"-SYNC" else $nf_bnd = bnd"-FREE" print }