source: trunk/essentials/sys-apps/gawk/test/tweakfld.awk

Last change on this file was 3076, checked in by bird, 18 years ago

gawk 3.1.5

File size: 6.8 KB
Line 
1# To: bug-gnu-utils@prep.ai.mit.edu
2# Cc: arnold@gnu.ai.mit.edu
3# Date: Mon, 20 Nov 1995 11:39:29 -0500
4# From: "R. Hank Donnelly" <emory!head-cfa.harvard.edu!donnelly>
5#
6# Operating system: Linux1.2.13 (Slackware distrib)
7# GAWK version: 2.15 (?)
8# compiler: GCC (?)
9#
10# The following enclosed script does not want to fully process the input data
11# file. It correctly executes the operations on the first record, and then dies
12# on the second one. My true data file is much longer but this is
13# representative and it does fail on a file even as short as this one.
14# The failure appears to occur in the declared function add2output. Between the
15# steps of incrementing NF by one and setting $NF to the passed variable
16# the passed variable appears to vanish (i.e. NF does go from 68 to 69
17# and before incrementing it "variable" equals what it should but after
18# "variable" has no value at all.)
19#
20# The scripts have been developed using nawk on a Sun (where they run fine)
21# I have tried gawk there but get a different crash which I have not yet traced
22# down. Ideally I would like to keep the script the same so that it would run
23# on either gawk or nawk (that way I can step back and forth between laptop and
24# workstation.
25#
26# Any ideas why the laptop installation is having problems?
27# Hank
28#
29#
30# #!/usr/bin/gawk -f
31
32BEGIN {
33 # set a few values
34 FS = "\t"
35 OFS = "\t"
36 pi = atan2(0, -1)
37# distance from HRMA to focal plane in mm
38 fullradius = 10260.54
39
40 # set locations of parameters on input line
41 nf_nrg = 1
42 nf_order = 3
43 nf_item = 4
44 nf_suite = 5
45 nf_grating = 8
46 nf_shutter = 9
47 nf_type = 13
48 nf_src = 14
49 nf_target = 15
50 nf_voltage = 16
51 nf_flux = 17
52 nf_filt1 = 20
53 nf_filt1_th = 21
54 nf_filt2 = 22
55 nf_filt2_th = 23
56 nf_bnd = 24
57 nf_hrma_polar = 27
58 nf_hrma_az = 28
59 nf_detector = 30
60 nf_acis_read = 32
61 nf_acis_proc = 33
62 nf_acis_frame = 34
63 nf_hxda_aplist = 36
64 nf_hxda_y_range = 37
65 nf_hxda_z_range = 38
66 nf_hxda_y_step = 39
67 nf_hxda_z_step = 40
68 nf_sim_z = 41
69 nf_fam_polar = 43
70 nf_fam_az = 44
71 nf_fam_dither_type = 45
72 nf_mono_init = 51
73 nf_mono_range = 52
74 nf_mono_step = 53
75 nf_defocus = 54
76 nf_acis_temp = 55
77 nf_tight = 59
78 nf_offset_y = 64
79 nf_offset_z = 65
80
81 while( getline < "xrcf_mnemonics.dat" > 0 ) {
82 mnemonic[$1] = $2
83 }
84
85# "date" | getline date_line
86# ADR: use a fixed date so that testing will work
87 date_line = "Sun Mar 10 23:00:27 EST 1996"
88 split(date_line, in_date, " ")
89 out_date = in_date[2] " " in_date[3] ", " in_date[6]
90}
91
92function add2output( variable ) {
93#print("hi1") >> "debug"
94 NF++
95#print("hi2") >> "debug"
96 $NF = variable
97#print("hi3") >> "debug"
98}
99
100function error( ekey, message ) {
101 print "Error at input line " NR ", anode " ekey >> "errors.cleanup"
102 print " " message "." >> "errors.cleanup"
103}
104
105function hxda_na() {
106 $nf_hxda_aplist = $nf_hxda_y_range = $nf_hxda_z_range = "N/A"
107 $nf_hxda_y_step = $nf_hxda_z_step = "N/A"
108}
109
110function acis_na() {
111 $nf_acis_read = $nf_acis_proc = $nf_acis_frame = $nf_acis_temp = "N/A"
112}
113
114function hrc_na() {
115# print ("hi") >> "debug"
116}
117
118function fpsi_na() {
119 acis_na()
120 hrc_na()
121 $nf_sim_z = $nf_fam_polar = $nf_fam_az = $nf_fam_dither_type = "N/A"
122}
123
124function mono_na() {
125 $nf_mono_init = $nf_mono_range = $nf_mono_step = "N/A"
126}
127
128# this gives the pitch and yaw of the HRMA and FAM
129# positive pitch is facing the source "looking down"
130# positive yaw is looking left
131# 0 az is north 90 is up
132# this also adds in the FAM X,Y,Z positions
133
134function polaz2yawpitch(polar, az) {
135 theta = az * pi / 180
136 phi = polar * pi / 180 / 60
137
138
139 if( polar == 0 ) {
140 add2output( 0 )
141 add2output( 0 )
142 } else {
143 if(az == 0 || az == 180)
144 add2output( 0 )
145 else
146 add2output( - polar * sin(theta) )
147
148
149# x = cos (phi)
150# y = sin (phi) * cos (theta)
151# add2output( atan2(y,x)*180 / pi * 60 )
152
153 if(az == 90 || az ==270 )
154 add2output( 0 )
155 else
156 add2output( - polar * cos(theta) )
157
158 }
159# x = cos (phi)
160# z= sin (phi) * sin (theta)
161# add2output( atan2(z,x)*180 / pi * 60 )
162
163 if(config !~ /HXDA/) {
164# negative values of defocus move us farther from the source thus
165# increasing radius
166 radius = fullradius - defocus
167
168# FAM_x; FAM_y; FAM_z
169 if((offset_y == 0) && (offset_z == 0)){
170 add2output( fullradius - radius * cos (phi) )
171
172 if (az == 90 || az ==270)
173 add2output( 0 )
174 else
175 add2output( radius * sin (phi) * cos (theta) )
176
177 if (az == 0 || az == 180)
178 add2output( 0 )
179 else
180 add2output( - radius * sin (phi) * sin (theta) )
181 } else {
182# ******* THIS SEGMENT OF CODE IS NOT MATHEMATICALLY CORRECT FOR ****
183# OFF AXIS ANGLES AND IS SUPPLIED AS A WORKAROUND SINCE IT WILL
184# PROBABLY ONLY BE USED ON AXIS.
185 add2output( defocus )
186 add2output( offset_y )
187 add2output( offset_z )
188 }
189
190 } else {
191 add2output( "N/A" )
192 add2output( "N/A" )
193 add2output( "N/A" )
194 }
195}
196
197# set TIGHT/LOOSE to N/A if it is not one of the two allowed values
198function tight_na() {
199 if( $nf_tight !~ /TIGHT|LOOSE/ ) {
200 $nf_tight == "N/A"
201 }
202}
203
204# this entry is used to give certain entries names
205{
206 type = $nf_type
207 item = $nf_item
208 suite = $nf_suite
209 order = $nf_order
210 detector = $nf_detector
211 grating = $nf_grating
212 offset_y= $nf_offset_y
213 offset_z= $nf_offset_z
214 bnd = $nf_bnd
215 defocus = $nf_defocus
216}
217
218{
219 # make configuration parameter
220 # as well as setting configuration-dependent N/A values
221
222 if( $nf_bnd ~ "SCAN" ) {
223 # BND is scanning beam
224 config = "BND"
225 hxda_na()
226 fpsi_na()
227 } else {
228 if( grating == "NONE" ) {
229 config = "HRMA"
230 } else {
231 if( grating == "HETG" ) {
232 if( order != "Both" ) {
233 $nf_shutter = order substr($nf_shutter, \
234 index($nf_shutter, ",") )
235 }
236 } else {
237 order = "N/A"
238 }
239 config = "HRMA/" grating
240 }
241
242 if( detector ~ /ACIS|HRC/ ) {
243 detsys = detector
244 nsub = sub("-", ",", detsys)
245 config = config "/" detsys
246 hxda_na()
247 } else {
248 config = config "/HXDA"
249 fpsi_na()
250 if( detector == "HSI" ) {
251 hxda_na()
252 }
253 }
254 }
255
256 add2output( config )
257
258 if( $nf_src ~ /EIPS|Penning/ ) mono_na()
259
260 if( $nf_src == "Penning" ) $nf_voltage = "N/A"
261
262 itm = sprintf("%03d", item)
263
264 if(config in mnemonic) {
265 if( type in mnemonic ) {
266 ID = mnemonic[config] "-" mnemonic[type] "-" suite "." itm
267 add2output( ID )
268 } else {
269 error(type, "measurement type not in list")
270 }
271 } else {
272 error(config, "measurement configuration not in list")
273 }
274
275 # add date to output line
276 add2output( out_date )
277
278 # Convert HRMA polar and azimuthal angles to yaw and pitch
279 polaz2yawpitch($nf_hrma_polar, $nf_hrma_az)
280
281 # set TIGHT/LOOSE to N/A if it is not one of the two allowed values
282 tight_na()
283
284 # compute number of HXDA apertures
285 if( config ~ /HXDA/ && $nf_hxda_aplist != "N/A")
286 add2output( split( $nf_hxda_aplist, dummy, "," ) )
287 else
288 add2output( "N/A" )
289
290 # make sure the BND value is properly set
291 if($nf_bnd == "FIXED" && detector ~ /ACIS/)
292 $nf_bnd =bnd"-SYNC"
293 else
294 $nf_bnd = bnd"-FREE"
295 print
296}
Note: See TracBrowser for help on using the repository browser.