procedure tscale (firstTime, Nsl, inPref, fitCurves, wght, runScaleF, runScaleTwo, cpAcross, inWaveFile, normSlice, sigdvcut, fitTol, Nmin, rej, fOverlap, fTrough, sgn, inCRfile, verbOut, exclEnd, exclNonAdj, exclBrtEnd, brtLimit, plotStrGal) bool firstTime {yes, prompt="FIRST TIME RUN (FOR FILES WITH THIS SUFFIX)?"} int Nsl {9, prompt=" Number of slices"} string inPref {"two",prompt=" Suffix appended to in/output file names"} bool fitCurves {no, prompt="1. Fit curves to flux ratios?"} string wght {"uniform", prompt=" Weighting (uniform, user, statistical, instrumental)"} bool runScaleF {no, prompt="2. Apply scaleflux.f (min 3-consec bands)?"} bool runScaleTwo {yes, prompt="2. Apply scalefluxTwo.f (min 2-consec bands)?"} bool cpAcross {no, prompt=" If so, copy and compile?"} string inWaveFile {"s10_3D.wave", prompt=" Sorted wavelengths file (from TWAVELENGTHS)"} int normSlice {1, prompt=" Slice number for stellar flux normalisations"} real sigdvcut {2, prompt=" Sigma deviation threshold to select by"} real fitTol {1.0, prompt=" Initial fit tolerance (% of flux rel uncertainty)"} int Nmin {5, prompt=" Minimum number of fit pts (all situations)"} int rej {2, prompt=" Maximum number of reject points"} real fOverlap {1.1, prompt=" Flux scale factor (overlap regions)"} real fTrough {0.9, prompt=" Flux scale factor (centre trough)"} real sgn {+1.0, prompt=" Side of fit to reject on (1=abv;-1=blw)"} string inCRfile {"dummy", prompt=" CR/ghost location file (or dummy file)"} bool verbOut {yes, prompt=" Verbose output?"} bool exclEnd {no, prompt=" Exclude end-point deviations?"} bool exclNonAdj {yes, prompt=" Exclude non-adjacent double-deviations?"} bool exclBrtEnd {no, prompt=" Exclude bright-end?"} real brtLimit {1e4, prompt=" -> bright-end cut-off in EL sample"} bool plotStrGal {yes, prompt="Show star-galaxy classification plot?"} begin # Variable declarations: string file1 # file name 1 string file2 # file name 2 string fldStr # string containing field numbers string outFile1 # output file 1 string outFileOLD # copy of old output file int j # current slice number (starts at 2) int col # current column number file1 = "starNorm."//inPref file2 = "starErrNrm."//inPref outFile1 = "scaleCoeff."//inPref outFileOLD = outFile1//"_OLD" # First time run: ---------------------------------------------- # (i.e. if this is a first-time run, need to create a dummy # "scaleCoeff.*" file, to be copied as the "OLD" file below.) if (firstTime==yes) { delete (files=outFile1, ver-, def+, allvers+, subfi+, go_ahe+) print ("0.0", > outFile1) } firstTime=no # Line fitting: ------------------------------------------------ if (fitCurves==yes) { print (" ") print ("================================================") print (" 1. Fitting curves to stellar flux ratios ...") print (" ") delete (files=outFileOLD,go_ahea+,ver-) copy (input=outFile1, output = outFileOLD, verb-) print (" ") print (" (** If you inadvertently chose this, the old values have") print (" been temporarily saved to "//outFileOLD//" **)") print (" ") # Cleaning up: delete (files="temp_tscl*",go_ahea+,ver-) delete (files=outFile1,go_ahea+,ver-) print (" Input files: "//file1//" and "//file2) print (" ") print (" Assuming fluxes are normalised to first slice") print (" --> starting from slice 2") print (" ") j=1 while (j<=Nsl) { if (j==normSlice) { print (" Slice: "//j//" --> NORMALISING SLICE - no fit") print (" ") print ("1.00000000 0.0000000", >> outFile1) } else { col = 5+j fldStr = "4,"//col fields(files=file1,fields=fldStr,lines="1-",quit_if-,print_f-, >> "temp_tscl1") fldStr = col fields(files=file2,fields=fldStr,lines="1-",quit_if-,print_f-, >> "temp_tscl2") joinlines(list1="temp_tscl1,temp_tscl2",list2="",output="STDOUT",delim="", missing="Missing",maxchar=161,shortest+,verb+, >> "temp_tscl3") print (" Slice: "//j//" --> INTERACTIVELY MAKE FIT (q to quit)") print (" d = del pt; f = refit and redraw; u = undel; t = reset to all; ? = help") # type(input_fi="temp_tscl3",map_cc+,device="terminal",flpar-) curfit(input="temp_tscl3",functio="legendre",weighti=wght, order=2,interact+,axis=1,listdat-,verb-,calctype="double",power+, device="stdgraph", >> "temp_tscl4") print (" please wait ...") # Separating power-series coefficients into different columns: !awk '{print $2" "$3}' temp_tscl4 > temp_tscl4a tail(input_fi="temp_tscl4a",nlines=2, >> "temp_tscl4b") fields(files="temp_tscl4b",fields=2,lines=1,quit_if-,print_f-, >> "temp_tscl5") fields(files="temp_tscl4b",fields=2,lines=2,quit_if-,print_f-, >> "temp_tscl6") joinlines(list1="temp_tscl5,temp_tscl6",list2="",output="STDOUT", delim="",missing="Missing",maxchar=161,shortest+,verb-, >> "temp_tscl7") type(input_fi="temp_tscl7",map_cc+,device="terminal",flpar-, >> outFile1) type(input_fi="temp_tscl7",map_cc+,device="terminal",flpar-) print(" ") } # end of (if j==normSlice) check j=j+1 delete (files="temp_tscl*",go_ahea+,ver-) } print(" ") print(outFile1//":") type(input_fi=outFile1,map_cc+,device="terminal",flpar-) print(" ") } # end of line-fitting option. ---------------------------------- if (runScaleF==runScaleTwo) { print (" ") print (" *** ERROR: must choose one program") print (" Choose one and try again.") bye } # Running scaleflux on fit output: ----------------------------- if (runScaleF==yes) { print (" ") print ("================================================") print (" 2. Running scaleflux.f ...") print (" ") if (cpAcross==yes) { print (" ") print ("-------------------------------") print (" Copying scaleflux.f across...") !cp /home/dhj/iraf/TFred/scaleflux.f . print (" ") print (" Compiling...") # !f77 scaleflux.f -o scaleflux !f77 -C scaleflux.f -o scaleflux # the -C compile option detects out-of-bounds # array numbers print (" ") } if ((abs(sgn))!=1.0) { print ("*******************************") print (" ERROR: sgn is not +/-1.0") print (" Please try again.") print (" ") print (" Done.") bye } if (inCRfile=="dummy") { print (" ") print (" --> Dummy CR/ghost file requested: generating") delete (files="dummy",go_ahea+,ver-) print ("0.0 0.0 1", > "dummy") print (" ") } # Creating scaleflux.in: print (" Creating scaleflux.in and running scaleflux...") !/bin/rm scaleflux.in print (inPref, > "scaleflux.in") print (inWaveFile, >> "scaleflux.in") print (sigdvcut, >> "scaleflux.in") print (fitTol, >> "scaleflux.in") print (Nmin, >> "scaleflux.in") print (rej, >> "scaleflux.in") print (fOverlap, >> "scaleflux.in") print (fTrough, >> "scaleflux.in") print (sgn, >> "scaleflux.in") print (inCRfile, >> "scaleflux.in") if (verbOut==yes) { print (2, >> "scaleflux.in") } else { print (1, >> "scaleflux.in") } if (exclEnd==yes) { print (1.0, >> "scaleflux.in") } else { print (0.0, >> "scaleflux.in") } if (exclNonAdj==yes) { print (1.0, >> "scaleflux.in") } else { print (0.0, >> "scaleflux.in") } if (exclBrtEnd==yes) { print (brtLimit, >> "scaleflux.in") } else { print (0.0, >> "scaleflux.in") } !scaleflux } # end of run scaleflux option. --------------------------------- # Running scalefluxTwo on fit output: ----------------------------- if (runScaleTwo==yes) { print (" ") print ("================================================") print (" 2. Running scalefluxTwo.f ...") print (" ") if (cpAcross==yes) { print (" ") print ("-------------------------------") print (" Copying scalefluxTwo.f across...") !cp /home/dhj/iraf/TFred/scalefluxTwo.f . print (" ") print (" Compiling...") !f77 -C scalefluxTwo.f -o scalefluxTwo print (" ") } if ((abs(sgn))!=1.0) { print ("*******************************") print (" ERROR: sgn is not +/-1.0") print (" Please try again.") print (" ") print (" Done.") bye } if (inCRfile=="dummy") { print (" ") print (" --> Dummy CR/ghost file requested: generating") delete (files="dummy",go_ahea+,ver-) print ("0.0 0.0 1", > "dummy") print (" ") } # Creating scaleflux.in: print (" Creating scaleflux.in and running scalefluxTwo...") !/bin/rm scaleflux.in print (inPref, > "scaleflux.in") print (inWaveFile, >> "scaleflux.in") print (sigdvcut, >> "scaleflux.in") print (fitTol, >> "scaleflux.in") print (Nmin, >> "scaleflux.in") print (rej, >> "scaleflux.in") print (fOverlap, >> "scaleflux.in") print (fTrough, >> "scaleflux.in") print (sgn, >> "scaleflux.in") print (inCRfile, >> "scaleflux.in") if (verbOut==yes) { print (2, >> "scaleflux.in") } else { print (1, >> "scaleflux.in") } if (exclEnd==yes) { print (1.0, >> "scaleflux.in") } else { print (0.0, >> "scaleflux.in") } if (exclNonAdj==yes) { print (1.0, >> "scaleflux.in") } else { print (0.0, >> "scaleflux.in") } if (exclBrtEnd==yes) { print (brtLimit, >> "scaleflux.in") } else { print (0.0, >> "scaleflux.in") } !scalefluxTwo } # end of run scalefluxTwo option. --------------------------------- # Plotting star-gal classification in SI if requested: ------------ if (plotStrGal==yes) { print (" ") print ("================================================") print (" ") print (" Copying si across and plotting star-gal class...") print (" ") print (" (executable in temp_tscale1; will save this)") print (" ") !cp /home/dhj/iraf/TFred/si . !/bin/rm temp_tscale1 print ("si xc=12 yc=8 fi=elgRed."//inPref//" xti=flux yti=star_gal tit="//inPref//" xlog", > "temp_tscale1") !chmod 777 temp_tscale1 !temp_tscale1 } print (" ") print ("================================================") # print (" ") # print (" Done.") print (" ") print (" ") end