summaryrefslogtreecommitdiffstats
path: root/contrib/awk/test/tweakfld.awk
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/awk/test/tweakfld.awk')
-rw-r--r--contrib/awk/test/tweakfld.awk296
1 files changed, 296 insertions, 0 deletions
diff --git a/contrib/awk/test/tweakfld.awk b/contrib/awk/test/tweakfld.awk
new file mode 100644
index 0000000..e7b538f
--- /dev/null
+++ b/contrib/awk/test/tweakfld.awk
@@ -0,0 +1,296 @@
+# 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" <emory!head-cfa.harvard.edu!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
+}
OpenPOWER on IntegriCloud