procedure btc_getchipscales(filename,scalename)

# btc_getchipscales -- find chip-to-chip photometric scalings for BTC images 

# This program will fail if the ITERMEAN keyword is not in all image headers!

# 010730: explicit parameters added for iteravg

string  filename	{prompt="File of root names of BTC image sets"}
string  scalename	{prompt="Root name for output scaling files"}
string  extension="fits" {prompt="Image extension"}
bool   	getscales      	{yes,prompt="Get individual image set scalings?"}
bool   	avgscales      	{yes,prompt="Average lots of scalings together?"}
bool   	savescales     	{yes,prompt="Accept and save average scaling?",mode="q"}
bool   	echog        	{yes,prompt="Beep when task is done?"}
struct  *name

begin

string	root, image, scales, extn, scale_name
real 	avgmean, chipscale
bool	get_scales, avg_scales, save_scales

name = filename
scale_name = scalename
extn = extension
get_scales = getscales
avg_scales = avgscales

# -- cycle through images
if (get_scales) {
    print ("Output to "//scale_name//"_chipscales:")
    while (fscan (name, root) != EOF) {

# -- find average itermean
	hsel (root//"_?."//extn, "itermean", yes) | average | scan (avgmean)

# -- get itermean for all 4 images in the set and divide by average itermean
	scales=""
	for (i=1; i<=4; i+=1) {
		image = root//"_"//i//"."//extn
		hsel (image, "itermean", yes) | scan (chipscale)
		chipscale=chipscale/avgmean
		scales = (scales//" "//chipscale)
	}

# -- output
	print (root//scales)
	print (root//scales, >> scale_name//"_chipscales")
    }
}

# -- average lots of image set scalings together chip-by-chip
while (avg_scales) {
 print ("Average scalings, RMS uncertainty and # of images used for chips 1-4:")
 fields (scale_name//"_chipscales",2) | iteravg (nsig=5, maxiter=10, >> scale_name//"_chipscalesavg")
 fields (scale_name//"_chipscales",3) | iteravg (nsig=5, maxiter=10, >> scale_name//"_chipscalesavg")
 fields (scale_name//"_chipscales",4) | iteravg (nsig=5, maxiter=10, >> scale_name//"_chipscalesavg")
 fields (scale_name//"_chipscales",5) | iteravg (nsig=5, maxiter=10, >> scale_name//"_chipscalesavg")
 type (scale_name//"_chipscalesavg")
 print (" ")
 print ("If the above is unacceptable, answer `n' and the "//scale_name//"_chipscales")
 print ("file will be displayed for editing and the iterative average re-run.")
 save_scales=savescales
 if(save_scales){
 	print ("Saving to file "//scale_name//"_chipscalesavg")
	avg_scales=no
 } else {
	avg_scales=yes
 	del (scale_name//"_chipscalesavg", ver-)
	vi (scale_name//"_chipscales")
 }
}

if(echog)beep

end