#!/usr/bin/perl -w #------------------------------------------------------------------------------- #Purpose : generate reduce script #Author : Robert Greimel (greimel@ing.iac.es) #Last Change : 28-dec-16 yg # # requires the reticent package # required subdirectories: ret datar datab datac dataf dataz #------------------------------------------------------------------------------- use Scripts; ## # get directory name (which is the observing date) and calc observation date ## $ARGV[0] =~ s./$..; $obsdate = (split "/",$ARGV[0])[-1]; print "generating reduction script for $obsdate\n"; %month=("jan" => "01","feb" => "02","mar" => "03","apr" => "04", "may" => "05","jun" => "06","jul" => "07","aug" => "08", "sep" => "09","oct" => "10","nov" => "11","dec" => "12"); @date = split "-",$obsdate; $nobsdate = $date[2].$month{$date[0]}.$date[1]; $yr = $date[2]; %ccdinfo=("UBC-1" => ["4096","200"], "UBC4K-LAB" => ["4096","200"], "UBC-4K" => ["4096","200"], "SITE2-LAB" => ["1752","532"], "'SITe-2'" => ["1752","532"], "SITe-2" => ["1752","532"], "SITe2" => ["1752","532"], "SITe4" => ["4096","2048"], "SITe-4" => ["4096","2048"], "'SITe-4'" => ["4096","2048"], "SITe5" => ["1024","1024"], "SITe-5" => ["1024","1024"], "SITe-1" => ["1024","1024"], "Tek-2" => ["1024","1024"], ); ## # make sure directory ends with a "/" ## $dir = $ARGV[0]; if ($dir !~ m|/$|) {$dir = $dir."/"}; ########## #read generation options ########## %filenames=(); print "$0: reading filename configuration ... "; &Scripts::read_filenames(\%filenames,"config.names"); print "done\n"; %options=(); print "$0: reading default options ... "; ( &Scripts::read_options(\%options,$filenames{"default_options"}) ) ? print "successful\n" : print "failed\n" ; print "$0: reading directory specific options ... "; ( &Scripts::read_options(\%options,$dir.$filenames{"custom_options"}) ) ? print "successful\n" : print "failed\n" ; if ($options{"directory"} eq "yes") { print "directory option is on\n"; $dir_inout=$dir.$filenames{"dir_inout"}."/"; $nam_inout=$filenames{"dir_inout"}."/"; $dir_sum=$dir.$filenames{"dir_sum"}."/"; $nam_sum=$filenames{"dir_sum"}."/"; if ( ! -e $dir_sum ) {mkdir $dir_sum,0755;} } else { print "directory option is off\n"; $dir_inout=$dir; $nam_inout=""; $dir_sum=$dir; $nam_sum=""; } ## # read in tables ## if ( ! -e $dir."bias.table" ) {die "no BIAS table found\n";} open TBIAS,$dir."bias.table"; while () { next if (m/^#/); chomp $_; push @tbias,$_; } close TBIAS; if ( ! -e $dir."flat.table" ) {die "no FLAT table found\n";} open TFLAT,$dir."flat.table"; while () { next if (m/^#/); chomp $_; push @tflat,$_; } close TFLAT; if ( ! -e $dir."arc.table" ) {die "no ARC table found\n";} open TARC,$dir."arc.table"; while () { next if (m/^#/); chomp $_; push @tarc,$_; } close TARC; if ( ! -e $dir."object.table" ) {die "no OBJECT table found\n";} open TOBJECT,$dir."object.table"; while () { next if (m/^#/); chomp $_; push @tobject,$_; } close TOBJECT; if ( ! -e $dir."sobject.table" ) {die "no saturated OBJECT table found\n";} open SOBJECT,$dir."sobject.table"; while () { next if (m/^#/); chomp $_; push @sobject,$_; } close SOBJECT; if ( ! -e $dir."sarc.table" ) {die "no ARC table for saturated objects found\n";} open SARC,$dir."sarc.table"; while () { next if (m/^#/); chomp $_; push @sarc,$_; } close SARC; %star_name=(); if ( ! -e "stars.coo" ) {die "no stars.coo file found\n";} &read_star ("stars.coo"); if ( -e $dir."addstars.coo" ) {&read_star ($dir."addstars.coo");} # $ccd="SITe-4"; # if ( ! -e $dir.$filenames{"inst_data"} ) {die "no INSTRUMENT file found\n";} open TINST,$dir.$filenames{"inst_data"}; while () { next if (m/^#/); @o=split " ",$_; if ( $o[0] eq "NAXIS1" ) {$naxis1=$o[2];next;} if ( $o[0] eq "NAXIS2" ) {$naxis2=$o[2];next;} if ( $o[0] eq "XBIN" ) {$xbin=$o[2];next;} if ( $o[0] eq "YBIN" ) {$ybin=$o[2];next;} if ( $o[0] eq "INSTRUME=" ) {$ccd=$o[1];next;} if ( $o[0] eq "DETECTOR=" ) {$ccd=$o[1];next;} # if ( $o[0] eq "INSTRUME=" ) {$ccd=(split "'",$o[1])[1];next;} } close TINST; %frame_type = (); open TFRAME,$dir.$filenames{"type_file"}; while () { chomp; @in=split; $in[0] =~ m/\.([0-9]+)$/; $frame_type{$1}=$in[-1]; } close TFRAME; ## # setup variables ## open IN,$dir_inout."object.in"; $_=; $fprefix = substr $_,0,-(length $_)+(rindex $_,"."); close IN; open IN,$dir.$filenames{"data_rows"}; while() {$in=$_;} close IN; chomp $in; @default_imrow=split " ",$in; $reduce_script=$dir.$filenames{"reduce_script"}; ## # find flatfield combinations ## %fcomb = (); foreach $i (@tobject) { @oinfo = split " ",$i; @combine = split /\+/,$oinfo[2]; if ( $#combine == 0 ) {next;} $fcomb{$oinfo[2]}=1; } ## # find bias combinations ## %bcomb = (); foreach $i (@tobject,@tflat,@tarc) { @oinfo = split " ",$i; @combine = split /\+/,$oinfo[1]; if ( $#combine == 0 ) {next;} $bcomb{$oinfo[1]}=1; } ########## # CCD specific settings (default) ########## if ($ccd eq "UBC-1" || $ccd eq "UBC4K-LAB") { $sample="4108:".$naxis1; $xccd="4096"; $xspec="1:4096"; $xspect="1:4096"; $badpix="3882 3889 1 ".$naxis2."\n"; $exp="ITIME"; $rnoise=10; $gain=1.5; $bin=$ybin; $cr_threshold=20; $cr_fluxratio=5; } elsif ($ccd eq "SITE2-LAB") { # $sample="1:17,1778:".$naxis1; $sample="1778:".$naxis1; $xccd="1750"; $xspec="1:1750"; $xspect="23:1772"; $badpix="1421 1422 1 ".$naxis2."\n"; $exp="ITIME"; $rnoise=6; $gain=1.38; $bin=$ybin; $cr_threshold=20; $cr_fluxratio=2; } elsif ($ccd eq "'SITe-2'" || $ccd eq "SITe2") { $sample="1756:".$naxis1; $xccd="1748"; $xspec="1:1748"; $xspect="1:1748"; $badpix="1396 1398 1 ".$naxis2."\n"; $exp="EXPTIME"; $rnoise=6; $gain=1.38; $bin=$xbin; $cr_threshold=20; $cr_fluxratio=2; } elsif ($ccd eq "SITe-4" || $ccd eq "'SITe-4'" || $ccd eq "SITe4") { $sample="4112:".$naxis1; $xspec="1:4096"; $xspect="1:4096"; $xccd="4096"; $exp="EXPTIME"; $rnoise=6; $gain=2.42; $bin=$ybin; $badpix="\n"; $badpix="4096 4096 1 ".$naxis2."\n"; $cr_threshold=20; $cr_fluxratio=2; } elsif ($ccd eq "SITe5" || $ccd eq "SITe-5") { $sample="1030:1080"; $xccd="1024"; $xspec="1:1024"; $xspect="1:1024"; $badpix="\n"; $exp="EXPTIME"; $rnoise=10; $gain=4.27; $bin=$ybin; $cr_threshold=20; $cr_fluxratio=2; } elsif ($ccd eq "SITe-1" || $ccd eq "SITe1") { $sample="1030:1080"; $xccd="1024"; $xspec="1:1024"; $xspect="1:1024"; $badpix="\n"; $exp="ITIME"; $rnoise=13; $gain=4.7; $bin=$ybin; $cr_threshold=20; $cr_fluxratio=2; } elsif ($ccd eq "Tek-2") { $sample="1030:1080"; $xccd="1024"; $xspec="1:1024"; $xspect="1:1024"; $badpix="\n"; $exp="ITIME"; $rnoise=11; $gain=4; $bin=$ybin; $cr_threshold=20; $cr_fluxratio=2; } elsif ($ccd eq "UBC-4K") { $sample="4108:".$naxis1; $xccd="4096"; $xspec="1:4096"; $xspect="17:4112"; $badpix=" 1 1 1 ".$naxis2."\n"; $exp="ITIME"; $rnoise=10; $gain=1.5; $bin=$ybin; $cr_threshold=20; $cr_fluxratio=5; } else { print "\n WARNING - CCD id ".$ccd." unknown \n\n"; $sample=":"; $xspec="*"; $badpix="\n"; $exp="EXPTIME"; $rnoise=10; $gain=2; $bin=$ybin; $cr_threshold=20; $cr_fluxratio=5; } ########## # modify default settings if specified by user ########## if ( $options{"cosmicrays.threshold"} !~ m/[^0-9\.]/) {$cr_threshold=$options{"cosmicrays.threshold"};} if ( $options{"cosmicrays.fluxratio"} !~ m/[^0-9\.]/) {$cr_fluxratio=$options{"cosmicrays.fluxratio"};} ########## # generate reduce script ########## print " started creating reduction script for ".$ccd."\n"; open OUT,">$reduce_script"; print OUT "#########################################\n"; print OUT "### To reduce ".$ccdinfo{$ccd}[0]."x".$ccdinfo{$ccd}[1]." binned spectra ###\n"; print OUT "#########################################\n"; print OUT "dataio.\n"; print OUT "images.\n"; print OUT "images.imfilter.\n"; print OUT "proto.\n"; print OUT "noao.\n"; print OUT "noao.imred.\n"; print OUT "noao.imred.ccdred.\n"; print OUT "noao.imred.generic.\n"; print OUT "noao.imred.crutil.\n"; print OUT "noao.imred.specred.\n"; print OUT "noao.onedspec.\n"; print OUT "#\n"; print OUT 'setinstrument.site=""'."\n"; print OUT 'setinstrument.dir=""'."\n"; print OUT "setinstrument.review=no\n"; print OUT "setinstrument fits\n"; print OUT "###############################\n"; print OUT "rfits.datatype=\"ushort\"\n"; print OUT "imarith.calctyp=\"real\"\n"; print OUT "imarith.pixtype=\"real\"\n"; print OUT "###############################\n"; print OUT "# to construct badpixel mask\n"; print OUT "text2mask.ncol=".$naxis1."\n"; print OUT "text2mask.nlines=".$naxis2."\n"; print OUT "text2mask badpixfile mask ncol=".$naxis1." nlines=".$naxis2."\n"; print OUT "###############################\n"; print OUT "#!mkdir ret\n"; print OUT "#!mkdir datab\n"; print OUT "#!mkdir datac\n"; print OUT "#!mkdir dataf\n"; print OUT "#!mkdir dataz\n"; print OUT "###############################\n"; ########## # bias header ########## print " bias ..."; print OUT "#################################################################\n"; print OUT "#to read bias\n"; print OUT "#to average bias\n"; print OUT "#to delete raw bias\n"; print OUT "#################################################################\n"; print OUT "# bias????.in contains the raw FITS names of the bias data files,\n"; print OUT "# e.g., rawdat/c122_98.1234\n"; print OUT "# bias????.out contains the IRAF names of the bias files, e.g., bias.1234\n"; print OUT "#################################################################\n"; print OUT "unlearn zerocombine\n"; print OUT 'zerocombine.combine="average"'."\n"; print OUT '#zerocombine.combine="median"'."\n"; print OUT '#zerocombine.reject="minmax"'."\n"; print OUT "#zerocombine.nlow=0\n"; print OUT "#zerocombine.nhigh=1\n"; print OUT 'zerocombine.reject="sigclip"'."\n"; print OUT "zerocombine.mclip=yes\n"; print OUT "zerocombine.lsigma=3\n"; print OUT "zerocombine.hsigma=3\n"; print OUT 'zerocombine.ccdtype=""'."\n"; print OUT "#\n"; ########## # bias ########## foreach $i (@tbias) { $in = (split " ",$i)[0]; $ave = $in; $ave =~ s/.in/.ave/; $in = $nam_inout.$in; $out = $in; $out =~ s/.in/.out/; print OUT "rfits @".$in." * @".$out."\n"; print OUT "zerocombine @".$out." output=\"".$ave."\"\n"; print OUT "fixpix ".$ave." mask linterp=1\n"; print OUT "imstat \"".$ave."\"\n"; print OUT "imstat @".$out."\n"; print OUT "imdelete @".$out."\n"; print OUT "#\n"; } foreach $i ( keys %bcomb ) { @combine = split /\+/,$i; foreach $j ( @combine ) { $in = $nam_inout."bias".$j.".in"; $out = $nam_inout."bias".$j.".out"; print OUT 'rfits @'.$in.' * @'.$out."\n"; } map {$_='@'.$nam_inout."bias".$_.".out"} @combine; $out = join ",",@combine; $ave = "bias".$i.".ave"; print OUT "zerocombine ".$out." output=\"".$ave."\"\n"; print OUT "fixpix \"".$ave."\" mask linterp=1\n"; print OUT "imstat \"".$ave."\"\n"; print OUT "imdelete ".$out."\n"; print OUT "#\n"; } print OUT "lparam zerocombine\n"; print OUT "#\n"; print "done\n"; ########## # flat header ########## print " flat ..."; print OUT "#################################################################\n"; print OUT "#to read dome flat\n"; print OUT "#to average flat\n"; print OUT "#to delete raw flat\n"; print OUT "#################################################################\n"; print OUT "# dflat????.in contains the raw FITS names of the dflat data files,\n"; print OUT "# e.g., rawdat/c122_98.1234\n"; print OUT "# dflat????.out contains the IRAF names of the dflat files, e.g., dflat.1234\n"; print OUT "#################################################################\n"; print OUT "unlearn flatcombine\n"; print OUT "flatcombine.combine=\"average\"\n"; print OUT "#flatcombine.combine=\"median\"\n"; print OUT "flatcombine.process=no\n"; print OUT "#flatcombine.reject=\"minmax\"\n"; print OUT "#flatcombine.nlow=0\n"; print OUT "#flatcombine.nhigh=1\n"; print OUT "flatcombine.reject=\"sigclip\"\n"; print OUT "flatcombine.lsigma=3\n"; print OUT "flatcombine.hsigma=3\n"; print OUT "flatcombine.scale=\"mode\"\n"; print OUT "flatcombine.ccdtype=\"\"\n"; print OUT "#\n"; ########## # flat ########## foreach $i (@tflat) { $in = (split " ",$i)[0]; $ave = $in; $ave =~ s/.in/.ave/; $in = $nam_inout.$in; $out = $in; $out =~ s/.in/.out/; print OUT "rfits @".$in." * @".$out."\n"; print OUT "flatcombine @".$out." output=\"".$ave."\"\n"; print OUT "fixpix \"".$ave."\" mask linterp=1\n"; print OUT "imstat @".$out."\n"; print OUT "imstat \"".$ave."\"\n"; print OUT "imdelete @".$out."\n"; print OUT "#\n"; } foreach $i ( keys %fcomb ) { @combine = split /\+/,$i; foreach $j ( @combine ) { $in = $nam_inout."flat".$j.".in"; $out = $nam_inout."flat".$j.".out"; print OUT 'rfits @'.$in.' * @'.$out."\n"; } map {$_='@'.$nam_inout."flat".$_.".out"} @combine; $out = join ",",@combine; $ave = "flat".$i.".ave"; print OUT "flatcombine ".$out." output=\"".$ave."\"\n"; print OUT "fixpix \"".$ave."\" mask linterp=1\n"; print OUT "imstat \"".$ave."\"\n"; print OUT "imdelete ".$out."\n"; print OUT "#\n"; } print OUT "lparam flatcombine\n"; print OUT "#\n"; print OUT "#################################################################\n"; print OUT "#to subtract bias from flat and do overscan correction\n"; print OUT "#################################################################\n"; print OUT "#\n"; print OUT "unlearn ccdproc\n"; print OUT "ccdproc.ccdtype=\"\"\n"; print OUT "ccdproc.fixpix=yes\n"; print OUT "ccdproc.overscan=yes\n"; print OUT "ccdproc.trim=yes\n"; print OUT "ccdproc.zerocor=yes\n"; print OUT "ccdproc.darkcor=no\n"; print OUT "ccdproc.flatcor=no\n"; print OUT "ccdproc.trimsec=\"[".$xspect.",1:".$naxis2."]\"\n"; print OUT "ccdproc.biassec=\"[".$sample.",1:".$naxis2."]\"\n"; print OUT "ccdproc.fixfile=\"mask\"\n"; print OUT "ccdproc.interac=no\n"; print OUT "#\n"; foreach $i (@tflat) { $in = (split " ",$i)[0]; $ave = $in; $ave =~ s/.in/.ave/; $bave = "bias".(split " ",$i)[1].".ave"; print OUT "ccdproc \"".$ave."\" zero=\"".$bave."\"\n"; } foreach $i ( keys %fcomb ) { @combine = split /\+/,$i; ($if) = grep /flat$combine[1]/,@tflat; $ave = "flat".$i.".ave"; $bave = "bias".(split " ",$if)[1].".ave"; print OUT "ccdproc \"".$ave."\" zero=\"".$bave."\"\n"; print OUT "imstat \"".$ave."\"\n"; } print OUT "#\n"; print OUT "lparam ccdproc\n"; print OUT "#\n"; print "done\n"; print OUT "#################################################################\n"; print OUT "#to normalise the flat field line by line\n"; print OUT "#################################################################\n"; print OUT "#\n"; print OUT "unlearn flat1d\n"; print OUT "flat1d.axis=1\n"; print OUT "flat1d.interactive=no\n"; print OUT "flat1d.sample=\"".$xspec."\"\n"; print OUT "flat1d.order=1\n"; print OUT "#\n"; foreach $i (@tflat) { $in = (split " ",$i)[0]; $ave = $in; $ave =~ s/.in/.ave/; $flatn = $in; $flatn =~ s/.in/n/; print OUT "flat1d \"".$ave."\" \"".$flatn."\"\n"; print OUT "imdelete \"".$ave."\"\n"; } foreach $i ( keys %fcomb ) { @combine = split /\+/,$i; $ave = "flat".$i.".ave"; $flatn = "flat".$i."n"; print OUT "flat1d \"".$ave."\" \"".$flatn."\"\n"; print OUT "imdelete \"".$ave."\"\n"; } print OUT "#\n"; print OUT "lparam flat1d\n"; print OUT "#\n"; print "done\n"; ########## # arc header ########## print " arc ..."; print OUT "#################################################################\n"; print OUT "#to read arc\n"; print OUT "#to average arc\n"; print OUT "#to delete raw arc\n"; print OUT "#################################################################\n"; print OUT "# tharc????.in contains the raw FITS names of the arc data files,\n"; print OUT "# e.g., rawdat/c122_98.1234\n"; print OUT "# tharc????.out contains the IRAF names of the arc files, e.g., tharc.1234\n"; print OUT "#################################################################\n"; print OUT "#\n"; print OUT "unlearn imcombine\n"; print OUT "imcombine.outtype=\"real\"\n"; print OUT "imcombine.combine=\"average\"\n"; print OUT "imcombine.reject=\"none\"\n"; print OUT "imcombine.weight=\"none\"\n"; print OUT "#\n"; ########## # arc ########## # arcs are a special case - if a character follows the number only the name # up to the number has to be used as the .in and .out file. ########## foreach $i (@tarc) { $in = (split " ",$i)[0]; $ave = $in; $ave =~ s/.in/.ave/; $in =~ s/(.*[0-9]+).*/$1\.in/; $in = $nam_inout.$in; $out = $in; $out =~ s/.in/.out/; print OUT "rfits @".$in." * @".$out."\n"; print OUT "imcombine @".$out." ".$ave."\n"; print OUT "imstat @".$out."\n"; print OUT "imdelete @".$out."\n"; print OUT "#\n"; } foreach $i (@tarc) { $in = (split " ",$i)[0]; $ave = $in; $ave =~ s/.in/.ave/; print OUT "imcopy ".$ave." datar/".$ave."\n"; } print OUT "lparam imcombine\n"; print OUT "#\n"; print OUT "#######################################################\n"; print OUT "#to subtract bias from arc and do overscan correction\n"; print OUT "#######################################################\n"; print OUT "unlearn ccdproc\n"; print OUT "ccdproc.ccdtype=\"\"\n"; print OUT "ccdproc.fixpix=yes\n"; print OUT "ccdproc.overscan=yes\n"; print OUT "ccdproc.trim=yes\n"; print OUT "ccdproc.zerocor=yes\n"; print OUT "ccdproc.darkcor=no\n"; print OUT "ccdproc.flatcor=no\n"; print OUT "ccdproc.trimsec=\"[".$xspect.",1:".$naxis2."]\"\n"; print OUT "ccdproc.biassec=\"[".$sample.",1:".$naxis2."]\"\n"; print OUT "ccdproc.fixfile=\"mask\"\n"; print OUT "ccdproc.interac=no\n"; print OUT "#\n"; foreach $i (@tarc) { $in = (split " ",$i)[0]; $ave = $in; $ave =~ s/.in/.ave/; $bave = "bias".(split " ",$i)[1].".ave"; print OUT "ccdproc ".$ave." zero=\"".$bave."\"\n"; print OUT "imstat ".$ave."\n"; } print OUT "#\n"; print OUT "lparam ccdproc\n"; print OUT "#\n"; print "done\n"; ########## # star ########## print " star ..."; print OUT "##############\n"; print OUT "#to read star\n"; print OUT "##############\n"; foreach $i (@tobject) { $out = (split " ",$i)[0]; if ( $out =~ /.*\.([0-9]+)[A-z]([0-9]+)*$/) { $num = $1;} else {if ($out =~ /.*\.([0-9]+)*$/) { $num = $1;}} print OUT "rfits ".$fprefix.".".$num." * ".$out."\n"; print OUT "chpixtype ".$out." ".$out." real\n"; # print OUT "###finding saturated pixels\n"; # print OUT "imarith.calctyp=\"integer\"\n"; # print OUT "imarith.pixtype=\"integer\"\n"; # print OUT "imarith ".$out." / 65535 starmask\n"; # print OUT "imarith.calctyp=\"real\"\n"; # print OUT "imarith.pixtype=\"real\"\n"; # print OUT "imarith starmask * 0.2 starmaskr\n"; # print OUT "imarith starmaskr + 1 starmaskr\n"; # print OUT "imarith ".$out." * starmaskr ".$out."\n"; # print OUT "imdelete starmask,starmaskr\n"; # print OUT "#\n" } foreach $i (@tobject) { $out = (split " ",$i)[0]; print OUT "imstat ".$out."\n"; } print OUT "#################################################################\n"; print OUT "#save raw spectra in subdirectory datar\n"; print OUT "#################################################################\n"; print OUT "#\n"; foreach $i (@tobject) { @iarr = split " ",$i; $out = $iarr[0]; print OUT "imcopy ".$out." datar/".$out."\n"; } ########## # star header ########## print OUT "#################################################################\n"; print OUT "#to subtract bias from star and do overscan correction\n"; print OUT "#################################################################\n"; print OUT "#\n"; print OUT "unlearn ccdproc\n"; print OUT "ccdproc.ccdtype=\"\"\n"; print OUT "ccdproc.fixpix=yes\n"; print OUT "ccdproc.overscan=yes\n"; print OUT "ccdproc.trim=yes\n"; print OUT "ccdproc.zerocor=yes\n"; print OUT "ccdproc.darkcor=no\n"; print OUT "ccdproc.flatcor=no\n"; print OUT "ccdproc.trimsec=\"[".$xspect.",1:".$naxis2."]\"\n"; print OUT "ccdproc.biassec=\"[".$sample.",1:".$naxis2."]\"\n"; print OUT "ccdproc.fixfile=\"mask\"\n"; print OUT "ccdproc.interac=no\n"; print OUT "#\n"; foreach $i (@tobject) { $out = (split " ",$i)[0]; $bave = "bias".(split " ",$i)[1].".ave"; print OUT "ccdproc ".$out." zero=\"".$bave."\"\n"; print OUT "imhead ".$out."\n"; print OUT "imstat ".$out."\n"; } foreach $i (@tobject) { $out = (split " ",$i)[0]; $bave = "bias".(split " ",$i)[1].".ave"; print OUT "#imarith ".$out."[".$xspect.",1:".$naxis2."] - \"".$bave."[".$xspect.",1:".$naxis2."]\" ".$out."\n"; } #foreach $i (@tobject) # { # $out = (split " ",$i)[0]; # print OUT "imstat ".$out."\n"; # } print OUT "#\n"; print OUT "lparam rfits\n"; print OUT "lparam ccdproc\n"; print OUT "#\n"; print OUT "#################################################################\n"; print OUT "#save 2d spectra in subdirectory datab\n"; print OUT "#################################################################\n"; print OUT "#\n"; foreach $i (@tarc) { $in = (split " ",$i)[0]; $ave = $in; $ave =~ s/.in/.ave/; print OUT "imcopy ".$ave." datab/".$ave."\n"; } foreach $i (@tobject) { @iarr = split " ",$i; $out = $iarr[0]; print OUT "imcopy ".$out." datab/".$out."\n"; } ########## # subtract background/sky from star ########## print OUT "#################################################################\n"; print OUT "#background/sky subtraction, cosmic-ray removal in darks\n"; print OUT "#################################################################\n"; print OUT "#\n"; #print OUT "###############################\n"; #print OUT "unlearn continuum\n"; #print OUT "continuum.interactive=no\n"; #print OUT "continuum.order=2\n"; #print OUT "continuum.type=\"fit\"\n"; #print OUT "continuum.ask=\"no\"\n"; #print OUT "continuum.naverage=-20\n"; #print OUT "continuum.low_reject=1.5\n"; #print OUT "continuum.high_reject=1.5\n"; print OUT "###############################\n"; print OUT "unlearn background\n"; print OUT "background.axis=2\n"; print OUT "background.sample=\"1:".($default_imrow[0]-3).",".($default_imrow[-1]+3).":".$naxis2."\"\n"; print OUT "background.order=2\n"; print OUT "background.naverage=2\n"; print OUT "background.low_reject=1\n"; print OUT "background.high_reject=1\n"; print OUT "background.grow=0\n"; print OUT "background.niterate=2\n"; print OUT "background.interactive=no\n"; print OUT "#\n"; print OUT "unlearn cosmicrays\n"; print OUT "cosmicrays.interactive=no\n"; print OUT "cosmicrays.thresho=20\n"; print OUT "cosmicrays.fluxrat=2\n"; print OUT "cosmicrays.window=5\n"; print OUT "cosmicrays.npasses=7\n"; print OUT "#\n"; foreach $i (@tobject) { $out = (split " ",$i)[0]; #print OUT "cosmicrays ".$out."[".$xspect.",1:".($default_imrow[0]-3)."] ".$out."[".$xspect.",1:".($default_imrow[0]-3)."]\n"; #print OUT "cosmicrays ".$out."[".$xspect.",".($default_imrow[-1]+3).":".$naxis2."] ".$out."[".$xspect.",".($default_imrow[-1]+3).":".$naxis2."]\n"; print OUT "cosmicrays ".$out."[".$xspect.",1:".($default_imrow[0]-1)."] ".$out."[".$xspect.",1:".($default_imrow[0]-1)."]\n"; print OUT "cosmicrays ".$out."[".$xspect.",".($default_imrow[-1]+1).":".$naxis2."] ".$out."[".$xspect.",".($default_imrow[-1]+1).":".$naxis2."]\n"; print OUT "#cosmicrays ".$out." ".$out."\n"; #print OUT "imdelete spec,dark,cdark\n"; print OUT "imdelete spec,dark\n"; print OUT "background ".$out." spec\n"; print OUT "imstat ".$out."\n"; #print OUT "#background ".$out." ".$out."\n"; print OUT "imstat ".$out."\n"; print OUT "imarith ".$out." - spec dark\n"; #print OUT "cosmicrays dark dark\n"; #print OUT "imstat dark\n"; #print OUT "##continuum dark cdark\n"; #print OUT "##imarith ".$out." - cdark ".$out."\n"; print OUT "imstat ".$out."\n"; print OUT "imstat spec\n"; print OUT "imstat dark\n"; #print OUT "##imstat cdark\n"; #print OUT "##imdelete cdark\n"; print OUT "gauss dark dark 200.0\n"; print OUT "imstat dark\n"; print OUT "#imarith ".$out." - dark ".$out."\n"; print OUT "imdelete spec,dark\n"; #print OUT "#imdelete spec\n"; print OUT "#\n"; } print OUT "lparam cosmicrays\n"; print OUT "lparam background\n"; #print OUT "##lparam continuum\n"; print OUT "lparam gauss\n"; print OUT "#\n"; print OUT "#################################################################\n"; print OUT "#save spectra in subdirectory datac\n"; print OUT "#################################################################\n"; print OUT "#\n"; foreach $i (@tobject) { @iarr = split " ",$i; $out = $iarr[0]; print OUT "imcopy ".$out." datac/".$out."\n"; } ########## # divide star by flat ########## print OUT "#################################################################\n"; print OUT "#to divide star by flat\n"; print OUT "#################################################################\n"; print OUT "#\n"; foreach $i (@tobject) { @iarr = split " ",$i; $out = $iarr[0]; $flatn = "flat".$iarr[2]."n"; print OUT "imarith ".$out." / \"".$flatn."\" ".$out."\n"; } print OUT "#\n"; print OUT "#################################################################\n"; print OUT "#save spectra in subdirectory dataf\n"; print OUT "#################################################################\n"; print OUT "#\n"; foreach $i (@tobject) { @iarr = split " ",$i; $out = $iarr[0]; print OUT "imcopy ".$out." dataf/".$out."\n"; } print OUT "#\n"; print OUT "#################################################################\n"; print OUT "#zeros bad pixels \n"; print OUT "#################################################################\n"; print OUT "#\n"; print OUT "reticent\n"; print OUT "nch ".$xccd."\n"; print OUT "###############################\n"; #print OUT "imcopy ".$out." dark\n"; #print OUT "imarith dark - dark dark\n"; #print OUT "imarith dark - dark zeros1\n"; #print OUT "imarith dark - dark zeros2\n"; #print OUT "imarith dark - dark zeros3\n"; #print OUT "#imarith zeros1[1:1,1:".$naxis2."] - zeros1[1:1,1:".$naxis2."] zeros1\n"; #print OUT "#imarith zeros2[".$xccd.":".$xccd.",1:".$naxis2."] - zeros2[".$xccd.":".$xccd.",1:".$naxis2."] zeros2\n"; #print OUT "#imarith zeros3[?:?,1:".$naxis2."] - zeros3[?:?,1:".$naxis2."] zeros3\n"; #print OUT "#imstat dark,zeros1,zeros2,zeros3" print OUT "imcopy ".$out." zeros\n"; print OUT "imarith zeros - zeros zeros\n"; print OUT "imstat zeros\n"; print OUT "#\n"; foreach $i (@tobject) { @iarr = split " ",$i; $out = $iarr[0]; print OUT "#imcopy zeros[1".":".$xccd.",??] ".$out."[1".":".$xccd.",??]\n"; # print OUT "#imcopy zeros[1".":".$xccd.",??] ".$out."[1".":".$xccd.",??]\n"; print OUT "#imcopy zeros[1".":".$xccd.",??:??] ".$out."[1".":".$xccd.",??:??]\n"; # print OUT "#imcopy zeros[1".":".$xccd.",??:??] ".$out."[1".":".$xccd.",??:??]\n"; print OUT "#imcopy zeros[1".":".$xccd.",".($default_imrow[0]-3).":".($default_imrow[0]-1)."] ".$out."[1".":".$xccd.",".($default_imrow[0]-3).":".($default_imrow[0]-1)."]\n"; print OUT "#imcopy zeros[1".":".$xccd.",".($default_imrow[-1]+1).":".($default_imrow[-1]+3)."] ".$out."[1".":".$xccd.",".($default_imrow[-1]+1).":".($default_imrow[-1]+3)."]\n"; print OUT "#imcopy ".$out."[1:".$xccd.",??] spec.imh\n"; print OUT "#rplpixi spec.imh ".$xccd." ".$xccd."\n"; print OUT "#imcopy spec.imh[1:".$xccd."] ".$out."[1:".$xccd.",??]\n"; print OUT "#imdelete spec.imh\n"; print OUT "#imcopy zeros[1:1,1:".$naxis2."] ".$out."[1:1,1:".$naxis2."]\n"; print OUT "imcopy zeros[".$xccd.":".$xccd.",1:".$naxis2."] ".$out."[".$xccd.":".$xccd.",1:".$naxis2."]\n"; print OUT "#imcopy zeros[?:?,1:".$naxis2."] ".$out."[?:?,1:".$naxis2."]\n"; print OUT "#\n"; } foreach $i (@tarc) { $in = (split " ",$i)[0]; $ave = $in; $ave =~ s/.in/.ave/; print OUT "#imcopy ".$ave."[1:".$xccd.",??] spec.imh\n"; print OUT "#rplpixi spec.imh ".$xccd." ".$xccd."\n"; print OUT "#imcopy spec.imh[1:".$xccd."] ".$ave."[1:".$xccd.",??]\n"; print OUT "#imdelete spec.imh\n"; print OUT "#\n"; } print OUT "imdelete zeros\n"; print OUT "#\n"; print OUT "#################################################################\n"; print OUT "#save spectra in subdirectory dataz\n"; print OUT "#################################################################\n"; print OUT "#\n"; foreach $i (@tarc) { $in = (split " ",$i)[0]; $ave = $in; $ave =~ s/.in/.ave/; print OUT "imcopy ".$ave." dataz/".$ave."\n"; } foreach $i (@tobject) { @iarr = split " ",$i; $out = $iarr[0]; print OUT "imcopy ".$out." dataz/".$out."\n"; } print OUT "lparam imarith\n"; print OUT "#\n"; ########## # extraction for saturated spectra ########## print OUT "#################################################################\n"; print OUT "# to extract arcs to 1-D for saturated spectra\n"; print OUT "#################################################################\n"; print OUT 'imcombine.combine="sum"',"\n"; print OUT 'imcombine.scale="none"',"\n"; print OUT 'imcombine.reject="none"',"\n"; print OUT 'imcombine.weight="none"',"\n"; foreach $i (@sarc) { $in = (split " ",$i)[0]; $ave = $in; $ave =~ s/.in/.ave/; $save = (split ".ave", $ave)[0]; $save = (split "arc", $save)[1]; chop $save; if ( $save =~ m/M/ ) { chop $save; } # $save =~ s/[a-z]/ /; # $save = (split " ", $save)[0]; $sumfile = $dir_sum.$ave.".sum.lis"; if ( ! -e $sumfile ) { print " creating $ave.sum.lis ..."; @oinfo = split " ",$i; @imrow = splice @oinfo,5; open SUM,">$sumfile"; foreach $j (@imrow) { print SUM "arc".$save.".ave[".$xspec.",".$j."]\n"; } close SUM; print "done\n"; } print OUT "imcombine @".$nam_sum.$ave.".sum.lis ".$ave.".bs\n"; } print OUT "#################################################################\n"; print OUT "# to extract spectrum to 1-D for saturated spectra\n"; print OUT "#################################################################\n"; print OUT 'imcombine.combine="sum"',"\n"; print OUT 'imcombine.scale="mean"',"\n"; print OUT 'imcombine.reject="none"',"\n"; print OUT 'imcombine.weight="none"',"\n"; print OUT '#imcombine.reject="minmax"',"\n"; print OUT '#imcombine.weight="mean"',"\n"; print OUT '#imcombine.nlow=0',"\n"; print OUT '#imcombine.nhigh=1',"\n"; print OUT "#imcombine.rdnoise=".$rnoise."\n"; print OUT "#imcombine.gain=".$gain."\n"; print OUT "###############################\n"; # print OUT "reticent\n"; # print OUT "nch ".$xccd."\n"; # print OUT "###############################\n"; $first = 1; foreach $i (@sobject) { @iarr = split " ",$i; @oinfo = split " ",$i; $out = $iarr[0]; $out =~ m/\.([0-9]+)$/; $outnum = $1; $arc1a = "arc".$iarr[3]; $arc2a = "arc".$iarr[4]; $arc1 = "arc".$iarr[3]; $arc2 = "arc".$iarr[4]; $last = $oinfo[-1]; $file3 = $oinfo[3]; chop $file3; $file4 = $oinfo[4]; chop $file4; $title = "unknown";$fname="arc"; if ($frame_type{$file3} eq "cdne") {$arc1 = "cdnearc".$iarr[3];} if ($frame_type{$file3} eq "fear") {$arc1 = "fearc".$iarr[3];} if ($frame_type{$file3} eq "thar") {$arc1 = "tharc".$iarr[3];} if ($frame_type{$file4} eq "cdne") {$arc2 = "cdnearc".$iarr[4];} if ($frame_type{$file4} eq "fear") {$arc2 = "fearc".$iarr[4];} if ($frame_type{$file4} eq "thar") {$arc2 = "tharc".$iarr[4];} $out = (split " ",$i)[0]; $sumfile = $dir_sum.$out.".sum.lis"; if ( ! -e $sumfile ) { if ( $first ) { print "\n"; $first = 0; } print " creating ".$out.".sum.lis ..."; @oinfo = split " ",$i; @imrow = splice @oinfo,5; $sat = splice @imrow,-1; open SUM,">$sumfile"; foreach $j (@imrow) { print SUM $out.$last."[".$xspec.",".$j."]\n"; } close SUM; print "done\n"; } print OUT "imcombine @".$nam_sum.$out.".sum.lis spec.imh\n"; print OUT "#imcombine @".$nam_sum.$out.".sum.lis spec.imh reject=sigclip lsigma=15 hsigma=15\n"; print OUT "#rplpixi spec.imh ".$xccd." ".$xccd."\n"; print OUT "#rplpixi spec.imh ".$xccd." ".$xccd."\n"; print OUT "#rplpixi spec.imh ".$xccd." ".$xccd."\n"; print OUT "wfits spec.imh ".$out.".".$yr.".fits\n"; print OUT "imcopy ".$arc1a.".ave.bs ".$arc1.".".$outnum.".".$yr.".fits\n"; print OUT "imcopy ".$arc2a.".ave.bs ".$arc2.".".$outnum.".".$yr.".fits\n"; print OUT "imstack ".$out.".".$yr.".fits,".$arc1.".".$outnum.".".$yr.".fits,".$arc2.".".$outnum.".".$yr.".fits ".$out.".".$yr.".dao.fits\n"; print OUT "imdelete spec.imh\n"; print OUT "#\n"; } ########## # extract spectrum to 1-D ########## print OUT "#################################################################\n"; print OUT "# to extract spectrum to 1-D\n"; print OUT "#################################################################\n"; print OUT "unlearn apall\n"; print OUT "unlearn apsum\n"; print OUT "specred.dispaxis=1\n"; print OUT "apfind.references=\"\"\n"; print OUT "apfind.find=yes\n"; print OUT "###############################\n"; $nrow = $default_imrow[-1] - $default_imrow[0] + 1; $nrowp1 = $nrow + 1; $nrowd2 = $nrow / 2; #$midrow = $default_imrow[0] + $nrowd2; $lrow = $default_imrow[0] - 2 + $nrowd2; $hrow = $naxis2 - $default_imrow[-1] - 2 + $nrowd2; $nrowd2m1 = -$nrowd2 - 2; $nrowd2m = -$lrow; $nrowd2p1 = -$nrowd2m1; $nrowd2p = $hrow; $nrowd2m12 = -$nrowd2 - 12; $nrowd2p12 = -$nrowd2m1 + 10 ; print OUT "apfind.nsum=".$nrowp1."\n"; print OUT "apall.lower=-".$nrowd2."\n"; print OUT "apall.upper=".$nrowd2."\n"; print OUT "apall.b_sample=\"".$nrowd2m.":".$nrowd2m1.",".$nrowd2p1.":".$nrowd2p."\"\n"; #print OUT "#apall.b_sample=\"".$nrowd2m.":".$nrowd2m12.",".$nrowd2p12.":".$nrowd2p."\"\n"; print OUT "#apall.b_sample=\"".$nrowd2m12.":".$nrowd2m.",".$nrowd2p.":".$nrowd2p12."\"\n"; print OUT "apall.b_naverage=-3\n"; print OUT "apall.b_niter=1\n"; print OUT "###############################\n"; print OUT "aptrace.interactive=no\n"; print OUT "aptrace.find=no\n"; print OUT "###############################\n"; print OUT "apsum.interactive=no\n"; print OUT "apsum.find=no\n"; print OUT "apsum.edit=no\n"; print OUT "apsum.trace=no\n"; print OUT "apsum.fittrace=no\n"; print OUT "apsum.extract=yes\n"; print OUT "apsum.extras=yes\n"; print OUT "apsum.review=no\n"; print OUT "apsum.pfit=\"fit2d\"\n"; print OUT "apsum.clean=yes\n"; print OUT "#apsum.background=\"fit\"\n"; print OUT "apsum.background=\"median\"\n"; print OUT "apsum.weights=\"variance\"\n"; print OUT "apsum.readnoise=".$rnoise."\n"; print OUT "apsum.gain=".$gain."\n"; print OUT "apsum.saturation=65535\n"; print OUT "apsum.format=\"multispec\"\n"; print OUT "apsum.lsigma=4\n"; print OUT "apsum.usigma=4\n"; print OUT "apsum.skybox=1\n"; print OUT "###############################\n"; print OUT "hedit.verify=no\n"; print OUT "hedit.update=yes\n"; print OUT "###############################\n"; print OUT "unlearn continuum\n"; print OUT "continuum.interactive=no\n"; print OUT "continuum.order=2\n"; print OUT "continuum.type=\"fit\"\n"; print OUT "continuum.ask=\"no\"\n"; print OUT "continuum.naverage=-20\n"; print OUT "continuum.low_reject=1.5\n"; print OUT "continuum.high_reject=1.5\n"; print OUT "###############################\n"; print OUT "unlearn imcombine\n"; print OUT "imcombine.outtype=\"real\"\n"; print OUT "imcombine.combine=\"average\"\n"; print OUT '#imcombine.reject="minmax"',"\n"; print OUT '#imcombine.weight="mean"',"\n"; print OUT '#imcombine.nlow=0',"\n"; print OUT '#imcombine.nhigh=1',"\n"; print OUT "#imcombine.rdnoise=".$rnoise."\n"; print OUT "#imcombine.gain=".$gain."\n"; print OUT "imcombine.reject=\"none\"\n"; print OUT "imcombine.weight=\"none\"\n"; # print OUT "imcombine @"."object.out aobject.fits\n"; # print OUT "apsum.lsigma=8\n"; # print OUT "apsum.usigma=8\n"; # print OUT "hedit ".$out." dispaxis 1 add=yes\n"; # print OUT "hedit ".$arc1a.".ave dispaxis 1 add=yes\n"; # print OUT "hedit ".$arc2a.".ave dispaxis 1 add=yes\n"; # print OUT "#apfind aobject.fits\n"; # print OUT "#aptrace aobject.fits\n"; # print OUT "imstat aobject.fits\n"; # print OUT "#apsum aobject.fits\n"; print OUT "###############################\n"; # print OUT "reticent\n"; # print OUT "nch ".$xccd."\n"; # print OUT "###############################\n"; foreach $i (@tobject) { @iarr = split " ",$i; @oinfo = split " ",$i; $out = $iarr[0]; # $out =~ m/\.([0-9]+)$/; # $outnum = $1; ($namealias, $outnum) = (split /\./,$out); $arc1a = "arc".$iarr[3]; $arc2a = "arc".$iarr[4]; $arc1 = "arc".$iarr[3]; $arc2 = "arc".$iarr[4]; $title = "unknown";$fname="arc"; if ($frame_type{$oinfo[3]} eq "cdne") {$arc1 = "cdnearc".$iarr[3];} if ($frame_type{$oinfo[3]} eq "fear") {$arc1 = "fearc".$iarr[3];} if ($frame_type{$oinfo[3]} eq "thar") {$arc1 = "tharc".$iarr[3];} if ($frame_type{$oinfo[4]} eq "cdne") {$arc2 = "cdnearc".$iarr[4];} if ($frame_type{$oinfo[4]} eq "fear") {$arc2 = "fearc".$iarr[4];} if ($frame_type{$oinfo[4]} eq "thar") {$arc2 = "tharc".$iarr[4];} # print OUT "apsum.saturation=65535\n"; print OUT "###############################\n"; print OUT "apsum.lsigma=4\n"; print OUT "apsum.usigma=4\n"; # print OUT "hedit ".$out." dispaxis 1 add=yes\n"; # print OUT "hedit ".$arc1a.".ave dispaxis 1 add=yes\n"; # print OUT "hedit ".$arc2a.".ave dispaxis 1 add=yes\n"; print OUT "apfind ".$out." 1\n"; print OUT "aptrace ".$out."\n"; print OUT "imstat ".$out."\n"; print OUT "#\n"; print OUT "#apsum.background=\"fit\"\n"; print OUT "apsum.background=\"median\"\n"; print OUT "apsum ".$out."\n"; print OUT "imstat ".$out."\n"; print OUT "imcopy ".$out.".ms[".$xspec.",1,3] sky.fits\n"; print OUT "continuum sky.fits csky.fits\n"; print OUT "#gauss sky.fits csky.fits 50.0\n"; print OUT "imstat sky.fits\n"; print OUT "imstat csky.fits\n"; print OUT "imcopy sky.fits ".$out.".sky.fits\n"; print OUT "imcopy csky.fits ".$out.".csky.fits\n"; # print OUT "imcopy ".$out.".ms[".$xspec.",1,1] specs.fits\n"; # print OUT "imarith specs.fits + sky.fits specs.fits\n"; # print OUT "imarith specs.fits - csky.fits ".$out.".".$yr.".fits\n"; print OUT "#\n"; print OUT "apsum.background=\"none\"\n"; print OUT "imdelete ".$out.".ms.fits\n"; print OUT "imstat ".$out."\n"; print OUT "apsum ".$out."\n"; print OUT "imstat ".$out."\n"; # print OUT "imcopy ".$out.".ms[".$xspec.",1,1] spec.imh\n"; print OUT "#rplpixi spec.imh ".$xccd." ".$xccd."\n"; print OUT "#rplpixi spec.imh ".$xccd." ".$xccd."\n"; # print OUT "wfits spec.imh ".$out.".".$yr.".fits\n"; # print OUT "imarith ".$out.".".$yr.".fits - csky.fits ".$out.".".$yr.".fits\n"; print OUT "imarith spec.imh - csky.fits ".$out.".".$yr.".fits\n"; print OUT "#wfits spec.imh ".$out.".".$yr.".fits\n"; # print OUT "#\n"; print OUT "imcopy ".$out.".ms[".$xspec.",1,2] spec.imh\n"; print OUT "#rplpixi spec.imh ".$xccd." ".$xccd."\n"; print OUT "imarith spec.imh - csky.fits ".$out.".sum.".$yr.".fits\n"; print OUT "#\n"; # print OUT "apsum ".$arc1a.".ave format=onedspec reference=".$out." out=".$arc1.".".$outnum."\n"; print OUT "apsum ".$arc2a.".ave format=onedspec reference=".$out." out=".$arc2.".".$outnum."\n"; print OUT "imcopy ".$arc1.".".$outnum.".0001[".$xspec.",1,1] ".$arc1.".".$outnum.".".$yr.".fits\n"; print OUT "imcopy ".$arc2.".".$outnum.".0001[".$xspec.",1,1] ".$arc2.".".$outnum.".".$yr.".fits\n"; print OUT "imstack ".$out.".".$yr.".fits,".$arc1.".".$outnum.".".$yr.".fits,".$arc2.".".$outnum.".".$yr.".fits ".$out.".".$yr.".dao.fits\n"; print OUT "imstat ".$out.".".$yr.".fits\n"; print OUT "imstat csky.fits\n"; print OUT "imdelete spec.imh\n"; print OUT "imdelete sky.fits,csky.fits,".$arc1.".".$outnum.".0001,".$arc2.".".$outnum.".0001,".$out."\n"; # print OUT "imdelete specs.fits\n"; print OUT "#\n"; } print OUT "lparam apall\n"; print OUT "lparam apfind\n"; print OUT "lparam aptrace\n"; print OUT "lparam apsum\n"; print OUT "#\n"; ########## # delete ########## print " delete ..."; print OUT "#################################################################\n"; print OUT "#to delete average biases and flats\n"; print OUT "#################################################################\n"; foreach $i (@tbias) { $in = (split " ",$i)[0]; $ave = $in; $ave =~ s/.in/.ave/; print OUT "imdelete \"".$ave."\"\n"; } foreach $i ( keys %bcomb ) { $ave = "bias".$i.".ave"; print OUT "imdelete \"".$ave."\"\n"; } foreach $i (@tflat) { $in = (split " ",$i)[0]; $flatn = $in; $flatn =~ s/.in/n/; print OUT "imdelete \"".$flatn."\"\n"; } foreach $i ( keys %fcomb ) { print OUT "imdelete \"flat".$i."n\"\n"; } #print OUT "imdelete aobject.fits\n"; print "done\n"; ########## # FITS header ########## print " the FITS header ..."; print OUT "#################################################################\n"; print OUT "#to setup OBSERVAT & ST in header\n"; print OUT "#to calculate JD & midexposure into header\n"; print OUT "#to translate into fits format\n"; print OUT "#################################################################\n"; print OUT "hedit.verify=no\n"; print OUT "hedit.update=yes\n"; print OUT 'wfits.fextn=""',"\n"; print OUT "########################\n"; foreach $i (@tobject) { @oinfo = split " ",$i; @iarr = split " ",$i; $out = $oinfo[0]; $arc1 = "arc".$oinfo[3]; $arc2 = "arc".$oinfo[4]; ($namealias, $frame) = (split /\./,$out); if ( exists $star_name{$namealias} ) { $name=$star_name{$namealias}; } else { $name=$namealias; } $rowrange=$oinfo[5]."-".$oinfo[-1]; foreach $ext ( "",".dao") { $files = $frame; $files =~ s/s/ /; $files =~ s/h/ /; $files = (split " ", $files )[0]; $last = (split $files, $frame )[1]; if ( $files eq $frame ) { $last = " "; $sat = " "; } if ( $last =~ m/h/ ) { $sat = " (H-alpha saturated) "; } if ( $last =~ m/s/ ) { $sat = " (parts saturated) "; } $outfile = $out.".".$yr.$ext.".fits"; print OUT "hedit ".$outfile.' title "'.$name.$sat.": ".$nobsdate." : ".$files." : bin".$bin.",biased,flat-fielded,sum(".$rowrange.')" add=yes',"\n"; print OUT "hedit ".$outfile." OBSERVAT DAO add=yes\n"; print OUT "#hedit ".$outfile." EPOCH 2000.00 add=yes\n"; print OUT "#hedit ".$outfile.' ST "(SIDEREAL)" add=yes'."\n"; print OUT "#hedit ".$outfile.' EXPTIME "(ITIME)" add=yes'."\n"; print OUT "hedit ".$outfile.' SIDEREAL "(ST)" add=yes'."\n"; print OUT "hedit ".$outfile.' ITIME "(EXPTIME)" add=yes'."\n"; print OUT "setairmass ".$outfile.' intype="begin" outtype="middle" exposure="'.$exp.'"',"\n"; print OUT "setjd ".$outfile.' exposure="'.$exp.'"',"\n"; print OUT "setjd ".$outfile." jd=jd ljd=ljd\n"; print OUT "#\n"; } # arc1 open ARC,$dir_inout."arc".$oinfo[3].".out"; @arcfiles=; close ARC; $from=(split /\./,$arcfiles[0])[-1]; $to=(split /\./,$arcfiles[-1])[-1]; chomp $from; chomp $to; $title = "unknown";$fname="arc"; if ($frame_type{$oinfo[3]} eq "cdne") {$title = "Cd-Ne Arc";$fname = "cdnearc";} if ($frame_type{$oinfo[3]} eq "fear") {$title = "Fe-Ar Arc";$fname = "fearc";} if ($frame_type{$oinfo[3]} eq "thar") {$title = "Th-Ar Arc";$fname = "tharc";} if ($frame_type{$oinfo[3]} eq "cdne") {$arc1 = "cdnearc".$iarr[3];} if ($frame_type{$oinfo[3]} eq "fear") {$arc1 = "fearc".$iarr[3];} if ($frame_type{$oinfo[3]} eq "thar") {$arc1 = "tharc".$iarr[3];} print OUT "hedit ".$arc1.".".$frame.".".$yr.".fits title \"".$title." @ ".$name."(".$frame.") : ".$nobsdate." : ".$from."-".$to." : bin".$bin.",biased,sum(".$rowrange.')" add=yes',"\n"; print OUT "hedit ".$arc1.".".$frame.".".$yr.".fits OBSERVAT DAO add=yes\n"; print OUT "#hedit ".$arc1.".".$frame.".".$yr.".fits EPOCH 2000.00 add=yes\n"; print OUT "#hedit ".$arc1.".".$frame.".".$yr.".fits".' ST "(SIDEREAL)" add=yes'."\n"; print OUT "#hedit ".$arc1.".".$frame.".".$yr.".fits".' EXPTIME "(ITIME)" add=yes'."\n"; print OUT "hedit ".$arc1.".".$frame.".".$yr.".fits".' SIDEREAL "(ST)" add=yes'."\n"; print OUT "hedit ".$arc1.".".$frame.".".$yr.".fits".' ITIME "(EXPTIME)" add=yes'."\n"; print OUT "setjd ".$arc1.".".$frame.".".$yr.".fits exposure=\"".$exp."\"\n"; print OUT "setjd ".$arc1.".".$frame.".".$yr.".fits jd=jd ljd=ljd\n"; # arc2 open ARC,$dir_inout."arc".$oinfo[4].".out"; @arcfiles=; close ARC; $from=(split /\./,$arcfiles[0])[-1]; $to=(split /\./,$arcfiles[-1])[-1]; chomp $from; chomp $to; $title = "unknown";$fname="arc"; if ($frame_type{$oinfo[4]} eq "cdne") {$title = "Cd-Ne Arc";$fname = "cdnearc";} if ($frame_type{$oinfo[4]} eq "fear") {$title = "Fe-Ar Arc";$fname = "fearc";} if ($frame_type{$oinfo[4]} eq "thar") {$title = "Th-Ar Arc";$fname = "tharc";} if ($frame_type{$oinfo[4]} eq "cdne") {$arc2 = "cdnearc".$iarr[4];} if ($frame_type{$oinfo[4]} eq "fear") {$arc2 = "fearc".$iarr[4];} if ($frame_type{$oinfo[4]} eq "thar") {$arc2 = "tharc".$iarr[4];} print OUT "hedit ".$arc2.".".$frame.".".$yr.".fits title \"".$title." @ ".$name."(".$frame.") : ".$nobsdate." : ".$from."-".$to." : bin".$bin.",biased,sum(".$rowrange.')" add=yes',"\n"; print OUT "hedit ".$arc2.".".$frame.".".$yr.".fits OBSERVAT DAO add=yes\n"; print OUT "#hedit ".$arc2.".".$frame.".".$yr.".fits EPOCH 2000.00 add=yes\n"; print OUT "#hedit ".$arc2.".".$frame.".".$yr.".fits".' ST "(SIDEREAL)" add=yes'."\n"; print OUT "#hedit ".$arc2.".".$frame.".".$yr.".fits".' EXPTIME "(ITIME)" add=yes'."\n"; print OUT "hedit ".$arc2.".".$frame.".".$yr.".fits".' SIDEREAL "(ST)" add=yes'."\n"; print OUT "hedit ".$arc2.".".$frame.".".$yr.".fits".' ITIME "(EXPTIME)" add=yes'."\n"; print OUT "setjd ".$arc2.".".$frame.".".$yr.".fits exposure=\"".$exp."\"\n"; print OUT "setjd ".$arc2.".".$frame.".".$yr.".fits jd=jd ljd=ljd\n"; $outobj = $out.".".$yr.".fits"; print OUT "#%%reftable ".$outobj." ".$arc1.".".$frame.".".$yr.".fits,".$arc2.".".$frame.".".$yr.".fits\n"; print OUT "#%%lam1 reidentify ".$arc1.".".$yr.".fits ".$arc1.".".$frame.".".$yr.".fits\n"; print OUT "#%%lam2 reidentify ".$arc2.".".$yr.".fits ".$arc2.".".$frame.".".$yr.".fits\n"; print OUT "#%%lam3 #identify ".$arc1.".".$frame.".".$yr.".fits\n"; print OUT "#%%lam4 #identify ".$arc2.".".$frame.".".$yr.".fits\n"; print OUT "#\n"; } print OUT "lparam hedit\n"; print OUT "lparam setairmass\n"; print OUT "lparam setjd\n"; print OUT "#\n"; foreach $i (@sobject) { @oinfo = split " ",$i; @iarr = split " ",$i; $out = $oinfo[0]; $arc1 = "arc".$oinfo[3]; $arc2 = "arc".$oinfo[4]; ($namealias, $frame) = (split /\./,$out); if ( exists $star_name{$namealias} ) { $name=$star_name{$namealias}; } else { $name=$namealias; } @imrow = splice @oinfo,6; $sat = splice @imrow,-1; $rowrange = $oinfo[5]; foreach $j (@imrow) { $rowrange = $rowrange.",".$j; } foreach $ext ( "",".dao") { $outfile = $out.".".$yr.$ext.".fits"; print OUT "hedit ".$outfile.' title "'.$name." : ".$nobsdate." : ".$frame." : bin".$bin.",biased,flat-fielded,sum(".$rowrange.')" add=yes',"\n"; print OUT "hedit ".$outfile." OBSERVAT DAO add=yes\n"; print OUT "#hedit ".$outfile." EPOCH 2000.00 add=yes\n"; print OUT "#hedit ".$outfile.' ST "(SIDEREAL)" add=yes'."\n"; print OUT "#hedit ".$outfile.' EXPTIME "(ITIME)" add=yes'."\n"; print OUT "hedit ".$outfile.' SIDEREAL "(ST)" add=yes'."\n"; print OUT "hedit ".$outfile.' ITIME "(EXPTIME)" add=yes'."\n"; print OUT "setairmass ".$outfile.' intype="begin" outtype="middle" exposure="'.$exp.'"',"\n"; print OUT "setjd ".$outfile.' exposure="'.$exp.'"',"\n"; print OUT "setjd ".$outfile." jd=jd ljd=ljd\n"; print OUT "#\n"; } # arc1 $title = "unknown";$fname="arc"; $file3 = $oinfo[3]; chop $file3; # $file3 =~ s/[a-z]/ /; # $file3 = (split " ", $file3)[0]; open ARC,$dir_inout."arc".$file3.".out"; @arcfiles=; close ARC; $from=(split /\./,$arcfiles[0])[-1]; $to=(split /\./,$arcfiles[-1])[-1]; chomp $from; chomp $to; if ($frame_type{$file3} eq "cdne") {$title = "Cd-Ne Arc";$fname = "cdnearc";} if ($frame_type{$file3} eq "fear") {$title = "Fe-Ar Arc";$fname = "fearc";} if ($frame_type{$file3} eq "thar") {$title = "Th-Ar Arc";$fname = "tharc";} if ($frame_type{$file3} eq "cdne") {$arc1 = "cdnearc".$iarr[3];} if ($frame_type{$file3} eq "fear") {$arc1 = "fearc".$iarr[3];} if ($frame_type{$file3} eq "thar") {$arc1 = "tharc".$iarr[3];} print OUT "hedit ".$arc1.".".$frame.".".$yr.".fits title \"".$title." @ ".$name."(".$frame.") : ".$nobsdate." : ".$from."-".$to." : bin".$bin.",bias,sum(".$rowrange.')" add=yes',"\n"; print OUT "hedit ".$arc1.".".$frame.".".$yr.".fits OBSERVAT DAO add=yes\n"; print OUT "#hedit ".$arc1.".".$frame.".".$yr.".fits EPOCH 2000.00 add=yes\n"; print OUT "setjd ".$arc1.".".$frame.".".$yr.".fits exposure=\"".$exp."\"\n"; print OUT "setjd ".$arc1.".".$frame.".".$yr.".fits jd=jd ljd=ljd\n"; # arc2 $title = "unknown";$fname="arc"; $file4 = $oinfo[4]; chop $file4; # $file4 =~ s/[a-z]/ /; # $file4 = (split " ", $file4)[0]; open ARC,$dir_inout."arc".$file4.".out"; @arcfiles=; close ARC; $from=(split /\./,$arcfiles[0])[-1]; $to=(split /\./,$arcfiles[-1])[-1]; chomp $from; chomp $to; if ($frame_type{$file4} eq "cdne") {$title = "Cd-Ne Arc";$fname = "cdnearc";} if ($frame_type{$file4} eq "fear") {$title = "Fe-Ar Arc";$fname = "fearc";} if ($frame_type{$file4} eq "thar") {$title = "Th-Ar Arc";$fname = "tharc";} if ($frame_type{$file4} eq "cdne") {$arc2 = "cdnearc".$iarr[4];} if ($frame_type{$file4} eq "fear") {$arc2 = "fearc".$iarr[4];} if ($frame_type{$file4} eq "thar") {$arc2 = "tharc".$iarr[4];} print OUT "hedit ".$arc2.".".$frame.".".$yr.".fits title \"".$title." @ ".$name."(".$frame.") : ".$nobsdate." : ".$from."-".$to." : bin".$bin.",biased,sum(".$rowrange.')" add=yes',"\n"; print OUT "hedit ".$arc2.".".$frame.".".$yr.".fits OBSERVAT DAO add=yes\n"; print OUT "#hedit ".$arc2.".".$frame.".".$yr.".fits EPOCH 2000.00 add=yes\n"; print OUT "setjd ".$arc2.".".$frame.".".$yr.".fits exposure=\"".$exp."\"\n"; print OUT "setjd ".$arc2.".".$frame.".".$yr.".fits jd=jd ljd=ljd\n"; # $outobj = $out.".".$yr.".fits"; print OUT "#%%reftable ".$outobj." ".$arc1.".".$frame.".".$yr.".fits,".$arc2.".".$frame.".".$yr.".fits\n"; # print OUT "#%%reftable ".$outfile." ".$arc1.".".$frame.".".$yr.".fits,".$arc2.".".$frame.".".$yr.".fits\n"; print OUT "#%%lam1 reidentify ".$arc1.".".$yr.".fits ".$arc1.".".$frame.".".$yr.".fits\n"; print OUT "#%%lam2 reidentify ".$arc2.".".$yr.".fits ".$arc2.".".$frame.".".$yr.".fits\n"; print OUT "#%%lam3 #identify ".$arc1.".".$frame.".".$yr.".fits\n"; print OUT "#%%lam4 #identify ".$arc2.".".$frame.".".$yr.".fits\n"; print OUT "#\n"; } foreach $i (@sarc) { $in = (split " ",$i)[0]; if ( $in =~ m/M/ ) { @oinfo = split " ",$i; $rowrange=$oinfo[5]."-".$oinfo[-1]; $ave = $in; $ave =~ s/.in/ /; $ave = (split " ", $ave)[0]; $files = (split "arc", $ave)[1]; chop $files; chop $files; $outfile = $ave.".ave.bs"; $title = "unknown";$fname="arc"; open ARC,$dir_inout."arc".$files.".out"; @arcfiles=; close ARC; $from=(split /\./,$arcfiles[0])[-1]; $to=(split /\./,$arcfiles[-1])[-1]; chomp $from; chomp $to; if ($frame_type{$files} eq "cdne") {$title = "Cd-Ne Arc";$fname = "tharc";} if ($frame_type{$files} eq "fear") {$title = "Fe-Ar Arc";$fname = "fearc";} if ($frame_type{$files} eq "thar") {$title = "Th-Ar Arc";$fname = "tharc";} if ($frame_type{$files} eq "cdne") {$arc = "cdnearc".$files;} if ($frame_type{$files} eq "fear") {$arc = "fearc".$files;} if ($frame_type{$files} eq "thar") {$arc = "tharc".$files;} if ( $ave =~ m/ML/ ) { $title = $title." (Left Hartmann Mask)"; $arc = $arc."ML"; } if ( $ave =~ m/MR/ ) { $title = $title." (Right Hartmann Mask)"; $arc = $arc."MR"; } if ( $ave =~ m/MN/ ) { $title = $title; $arc = $arc; } print OUT "imcopy ".$outfile." ".$arc.".".$yr.".fits\n"; print OUT "hedit ".$arc.".".$yr.".fits title \"".$title." : ".$nobsdate." : ".$from."-".$to." : bin".$bin.",bias,sum(".$rowrange.')" add=yes',"\n"; print OUT "hedit ".$arc.".".$yr.".fits OBSERVAT DAO add=yes\n"; print OUT "#hedit ".$arc.".".$yr.".fits EPOCH 2000.00 add=yes\n"; print OUT "setjd ".$arc.".".$yr.".fits exposure=\"".$exp."\"\n"; print OUT "setjd ".$arc.".".$yr.".fits jd=jd ljd=ljd\n"; print OUT "#\n"; } } #### print OUT "#setjd *.fits jd=jd ljd=ljd\n"; print OUT "#\n"; #### print OUT "#################################################################\n"; print OUT "#to delete average arcs\n"; print OUT "#################################################################\n"; foreach $i (@tarc) { $in = (split " ",$i)[0]; $ave = $in; $ave =~ s/.in/.ave/; print OUT "imdelete ".$ave."\n"; } foreach $i (@sarc) { $in = (split " ",$i)[0]; $ave = $in; $ave =~ s/.in/.ave/; print OUT "imdelete ".$ave.".bs\n"; } # print "done\n"; ########## # the next part ... ########## print OUT "#################################################################\n"; print OUT "# lam.cl ...\n"; print OUT "#################################################################\n"; print OUT "#\n"; print OUT "#noao\n"; print OUT "#noao.onedspec\n"; print OUT "#\n"; print OUT '#identify.coordli="linelists$thar.dat"',"\n"; print OUT '#identify.coordli="linelists$fear.dat"',"\n"; print OUT "#identify.maxfeat=300\n"; print OUT "#identify.order=3\n"; print OUT "#identify.fwidth=4\n"; print OUT '#identify.ftype="emission"',"\n"; print OUT '#identify.functio="spline3"',"\n"; print OUT "#identify.low_rej=2\n"; print OUT "#identify.high_rej=2\n"; print OUT "#\n"; print OUT '#reidentify.coordli="linelists$thar.dat"',"\n"; print OUT '#reidentify.coordli="linelists$fear.dat"',"\n"; print OUT '#reidentify.databas="database"',"\n"; print OUT "#reidentify.maxfeat=300\n"; print OUT "#reidentify.verbose=yes\n"; print OUT "#\n"; print OUT '#refspectra.referen="reftable"',"\n"; print OUT '#refspectra.sort="jd"',"\n"; print OUT '#refspectra.group="ljd"',"\n"; print OUT "#refspectra.time=yes\n"; print OUT '#refspectra.select="interp"',"\n"; print OUT "#\n"; print OUT "#dispcor.listonl=no\n"; print OUT "#dispcor.verbose=yes\n"; print OUT "#dispcor.linearize=no\n"; print OUT "#dispcor.flux=yes\n"; print OUT "#\n"; print OUT "#hedit.verify=no\n"; print OUT "#hedit.update=yes\n"; print OUT "#hedit *.fits epoch 2000.00 add=yes\n"; print OUT "#setjd *.fits jd=jd ljd=ljd\n"; print OUT "#\n"; print OUT '#refspec @spec.lis refe=reftable sort=jd group=ljd select=interp',"\n"; print OUT '#dispcor @spec.lis @specwav.lis lineari=no flux=yes',"\n"; print OUT '#imhead @spec.lis lo+',"\n"; print OUT '#imhead @specwav.lis lo+',"\n"; print OUT "#\n"; print OUT "logout\n"; # print OUT "### spec.lis ############################\n"; foreach $i (@tobject) { @iarr = split " ",$i; $out = $iarr[0]; print OUT $out.".".$yr.".fits\n"; } print OUT "### implot.txt ############################\n"; foreach $i (@tobject) { @iarr = split " ",$i; $out = $iarr[0]; print OUT "#implot ".$out.".ms.fits[".$xspec.",1,3]\n"; } print OUT "###############################\n"; foreach $i (@tobject) { @iarr = split " ",$i; $out = $iarr[0]; print OUT "#implot ".$out.".".$yr.".fits[".$xspec."]\n"; } print OUT "###############################\n"; #foreach $i (@tobject) # { # @iarr = split " ",$i; # @oinfo = split " ",$i; # $out = $iarr[0]; # print OUT "#implot ".$out.".ms.fits[3701:4096,1,3]\n"; # } #foreach $i (@tobject) # { # @iarr = split " ",$i; # @oinfo = split " ",$i; # $out = $iarr[0]; # print OUT "#implot ".$out.".".$yr.".fits\n"; # } print "done\n"; close OUT; ########## # now create all the auxiliary files if they do not yet exist ########## $file=$dir."badpixfile"; if ( ! -e $file ) { print " creating ".$file."\n"; open FILE,">$file"; print FILE $badpix; close FILE; } #$file=$dir."dflat.dark"; #if ( ! -e $file ) # { # print " creating ".$file."\n"; # open FILE,">$file"; # print FILE "dflat[1:".$ccdinfo{$ccd}[0].",1:".($default_imrow[0]-1)."]\n"; # print FILE "dflat[1:".$ccdinfo{$ccd}[0].",".($default_imrow[-1]+1).":".$naxis2."]\n"; # close FILE; # } #$file=$dir."star.dark"; #if ( ! -e $file ) # { # print " creating ".$file."\n"; # open FILE,">$file"; # print FILE "starb[1:".$ccdinfo{$ccd}[0].",1:".($default_imrow[0]-1)."]\n"; # print FILE "starb[1:".$ccdinfo{$ccd}[0].",".($default_imrow[-1]+1).":".$naxis2."]\n"; # close FILE; # } #$file=$dir."star.drk"; #if ( ! -e $file ) # { # print " creating ".$file."\n"; # open FILE,">$file"; # foreach $row (1..$default_imrow[0]-3) # { # print FILE "star[,".$row."]\n"; # } # foreach $row ($default_imrow[-1]+3..$naxis2) # { # print FILE "star[,".$row."]\n"; # } # close FILE; # } #$file=$dir."stare.lis"; #if ( ! -e $file ) # { # print " creating ".$file."\n"; # open FILE,">$file"; # foreach $row (1..$naxis2) # { # printf FILE "star%03d\n",$row; # } # close FILE; # } #$file=$dir."flate.lis"; #if ( ! -e $file ) # { # print " creating ".$file."\n"; # open FILE,">$file"; # foreach $row (1..$naxis2) # { # printf FILE "flat%03d\n",$row; # } # close FILE; # } print " \n"; print " make sure you check the following files:\n"; print " \n"; print " - badpixfile\n"; #print " - dflat.dark\n"; #print " - star.dark\n"; #print " - star.drk\n"; print " \n"; #print " - *.sum.lis\n"; print " \n"; print ' happy reducing (cl < '.$filenames{"reduce_script"}.' >& reduce.log &)',"\n"; print " \n"; ################################################################################ # S U B R O U T I N E S ################################################################################ sub read_star() { (my $filename) = @_; open TSTARS,$filename; while () { next if (m/^#/); @o=split " ",$_; $star_name{$o[0]}=join " ",(splice @o,3); } close TSTARS; }