IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 44


Ignore:
Timestamp:
Feb 14, 2003, 1:57:43 AM (23 years ago)
Author:
eugene
Message:

megacam / flip2 upgrades

Location:
trunk/Ohana/src/perl/src
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/Ohana/src/perl/src/dads.detrend

    r17 r44  
    1616}
    1717
    18 if (@ARGV != 3) { die "USAGE: dads.detrend (inbase) (outbase) (level)\n" }
     18if (@ARGV != 3) { die "USAGE: dads.detrend (input) (outbase) (level)\n" }
     19
     20$input  = $ARGV[0];
     21$outdir = $ARGV[1];
     22$level =  $ARGV[2];
     23
     24# input : /path/path/654321o.fits
     25# output: /path/path/654321p
     26# use last leaf of dir path as file rootname
    1927
    2028# level may be: 'perfect', 'best', 'raw'
    21 $level = "\U$ARGV[2]\E";
     29$level = "\U$level\E";
    2230if (($level ne "PERFECT") && ($level ne "BEST") && ($level ne "RAW")) {
    2331    die "ERROR: invalid entry for (level)\n";
     
    2634if ($level eq "BEST") { $close = "-close"; }
    2735
    28 if (! -d $ARGV[1]) { mkdir ($ARGV[1], 0777); }
    29 
    30 # get input list:
    31 @rawlist = <$ARGV[0]/*.raw>;
    32 if (@rawlist == 0) { die "ERROR: no files found\n"; }
    33 
    34 # get total image size:
    35 $Nbyte = 0;
    36 foreach $file (@rawlist) {
    37     @words = stat ($file);
    38     $Nbyte += $words[7];
    39 }
     36# force output directory to exist
     37if (! -d $outdir) {
     38    system ("mkdir -p $outdir");
     39    if ($?) { die "ERROR: can't create output directory\n"; }
     40}
     41
     42# check for input file (must be MEF)
     43if (! -e $input) { die "ERROR: input file not found\n"; }
     44
     45# get image size:
     46@words = stat ($input);
     47$Nbyte = $words[7];
    4048
    4149# check space on /tmp:
     
    4452$Nfree = $words[3]*1024;
    4553
    46 # choose a work directory (/tmp vs $ARGV[1]):
    47 $workdir = $ARGV[1];
     54# choose a work directory (/tmp vs $outdir):
     55$workdir = $outdir;
    4856if ($Nfree > 3*$Nbyte) {
    4957    $workdir = "/tmp";
    5058}
     59
     60# extract image rootname from $outdir:
     61$base = &basename ($outdir);
     62
     63# output files are $workdir/$basename$ccdn.ext
     64@ccdn   = split (" ", `cameraconfig -ccdn`); if ($?) { die "ERROR in cameraconfig\n"; }
     65@ccds   = split (" ", `cameraconfig -ccds`); if ($?) { die "ERROR in cameraconfig\n"; }
     66
     67# NEED to check Nccd = NEXTEND, check that list of input ccds matches
    5168
    5269# create output lists:
     
    5471@detlist = ();
    5572@demlist = ();
    56 foreach $in (@rawlist) {
    57     ($middle) = $in =~ /$ARGV[0](\S+)raw$/;
     73foreach $ccd (@ccdn) {
    5874
    5975    # create output name
    60     $name = $ARGV[1] . $middle . "fits";
     76    $name = "$outdir/$base$ccd.fits";
    6177    @fitlist = (@fitlist, $name);
    6278
    6379    # create tmp detrended name
    64     $name = $workdir . $middle . "det";
     80    $name = "$workdir/$base$ccd.det";
     81    # $name = $workdir . $middle . "det";
    6582    @detlist = (@detlist, $name);
    6683
    6784    # create tmp demoded name
    68     $name = $workdir . $middle . "dem";
     85    $name = "$workdir/$base$ccd.dem";
     86    # $name = $workdir . $middle . "dem";
    6987    @demlist = (@demlist, $name);
    7088
    7189    # create tmp defringed name
    72     $name = $workdir . $middle . "def";
    73     @deflist = (@delist, $name);
    74 }
    75 
    76 # for raw distribution, we don't check image charatersitics
     90    $name = "$workdir/$base$ccd.def";
     91    # $name = $workdir . $middle . "def";
     92    @deflist = (@deflist, $name);
     93}
     94
     95# for raw distribution, simply use fhtool to split the files:
    7796if ($level eq "RAW") {
    78     for ($i = 0; $i < @rawlist; $i++) {
    79         $status = system ("mv $rawlist[$i] $fitlist[$i]");
    80         if ($status) { die "ERROR: failed to remame raw file $rawlist[$i]\n"; }
    81     }
     97    system ("rmdir $outdir");
     98    if ($?) { die "ERROR: can't remove target directory for fhtool\n"; }
     99    system ("fhtool $input $outdir");
     100    if ($?) { die "ERROR: failure in fhtool\n"; }
    82101    print STDOUT "SUCCESS: finished with dads.detrend\n";
    83102    exit 0;
    84103}
    85104
    86 # use first image to test image characteristics
    87 $name = $rawlist[0];
    88 
    89 $typekwd = `gconfig IMAGETYPE-KEYWORD`; chop $typekwd;
    90 $filtkwd = `gconfig FILTER-KEYWORD`;    chop $filtkwd;
    91 $exptkwd = `gconfig EXPTIME-KEYWORD`;   chop $exptkwd;
    92 $answer  = `cameraconfig -ccds`;
    93 @ccds = split (" ", $answer);
    94 
    95 # check the IMAGETYP:
    96 $answer = `echo $name | fields $typekwd`;
    97 ($tmp, $type) = split (" ", $answer);
    98 if ($type ne "OBJECT") { die "ERROR: $name: wrong image type\n"; }
    99 
    100 # this should be abstracted to the filter or recipe file...
    101 # check the FILTER and EXPTIME, include fringe correction?:
    102 $answer = `echo $name | fields $exptkwd $filtkwd`;
    103 ($junk, $exptime, $filtvalue) = split (" ", $answer);
    104 $filtvalue = "\U$filtvalue\E";
     105# load abstracted keywords  (NEED error checking!!)
     106($typekwd, $filtkwd, $exptkwd) = split (" ", `gconfig IMAGETYPE-KEYWORD FILTER-KEYWORD EXPTIME-KEYWORD`);
     107if ($?) { die "ERROR: config system missing keyword abstractions\n"; }
     108
     109# extract keyword values:
     110($junk, $type, $exptime, $filtvalue) = split (" ", `echo $input | fields $typekwd $exptkwd $filtkwd`);
     111if ($?) { die "ERROR: failure reading header keywords (1)\n"; }
     112
     113if ($type ne "OBJECT") { die "ERROR: $input: wrong image type\n"; }
    105114$filter = `filtnames $filtvalue`; chop $filter;
    106 # check valid answer here
    107 
    108 # set defringe and/or demode based on filter & exptime
    109 if ($filter eq "R") {
    110     $DO_DEMODE   = ($exptime > 60);
    111 }
    112 if ($filter eq "I") {
    113     $DO_DEFRINGE = ($exptime > 60);
    114     $DO_DEMODE   = ($exptime > 60);
    115 }
    116 if ($filter eq "Z") {
    117     $DO_DEFRINGE = ($exptime > 60);
    118     $DO_DEMODE   = ($exptime > 60);
    119 }
    120 if ($filter eq "NB920") {
    121     $DO_DEFRINGE = ($exptime > 60);
    122     $DO_DEMODE   = ($exptime > 60);
     115if ($?) { die "ERROR: filter not found\n"; }
     116
     117# recipe file defines detrend types & cutoff exptime values
     118$recipefile = `gconfig DETREND_RECIPES`; chop $recipefile;
     119($detypes, $cutoffs) = split (" ", `gconfig -c $recipefile $filter`);
     120if ($?) { die "ERROR: failure to get detrend recipes\n"; }
     121@detypes = split (",", $detypes);
     122@cutoffs = split (",", $cutoffs);
     123
     124# check for DEFRINGE, DEMODE
     125$DO_DEFRINGE = 0;
     126for ($i = 0; $i < @detypes; $i++) {
     127    if ($detypes[$i] eq "fringe") {
     128        if ($exptime >= $cutoffs[$i]) { $DO_DEFRINGE = 1; }
     129        last;
     130    }
     131}
     132$DO_DEMODE = 0;
     133for ($i = 0; $i < @detypes; $i++) {
     134    if ($detypes[$i] eq "modes") {
     135        if ($exptime >= $cutoffs[$i]) { $DO_DEMODE = 1; }
     136        last;
     137    }
    123138}
    124139
    125140# check the GEOMETRY:
    126 $answer = `echo $name | fields CCDBIN1 CCDBIN2 RASTER`;
    127 @words = split (" ", $answer);
    128 if (($words[1] != 1) || ($words[2] != 1)) { die "ERROR: $name: binned image\n"; }
    129 if ($words[3] ne "FULL") { die "ERROR: $name: sub-rastered image\n"; }
    130 
    131 # check for valid detrend frames of needed types (this needs to be implemented with the -recipe function)
    132 
    133 # check for mode frame:
    134 if ($DO_DEMODE) {
    135     $name = $rawlist[0];
    136     $status = system ("detsearch -quiet -image $name $ccds[0] split -type modes $close");
    137     if ($status) { die "ERROR: can't get valid mode file\n"; }
    138 }
    139 
    140 # check for fringe frame:
    141 if ($DO_DEFRINGE) {
    142     foreach $name (@rawlist) {
    143         $status = system ("detsearch -quiet -image $name $ccds[0] split -type fringe $close");
    144         if ($status) { die "ERROR: can't get valid fringe frame for this image\n"; }
    145     }
    146 }
    147 
    148 # check for detrend frame:
    149 foreach $name (@rawlist) {
    150     $status = system ("detsearch -quiet -image $name $ccds[0] split -type bias $close");
    151     $status = system ("detsearch -quiet -image $name $ccds[0] split -type dark $close");
    152     $status = system ("detsearch -quiet -image $name $ccds[0] split -type mask $close");
    153     $status = system ("detsearch -quiet -image $name $ccds[0] split -type flat $close");
    154     if ($status) { die "ERROR: can't get valid fringe frame for this image\n"; }
    155 }
    156 
    157 # final output is @fitlist
    158 # detrend  @rawlist @detlist
    159 # demode   @detlist @demlist
    160 # defringe @demlist @deflist
     141($tmp, $bin1, $bin2, $raster) = split (" ", `echo $input | fields CCDBIN1 CCDBIN2 RASTER`);
     142if ($?) { die "ERROR: failure reading header keywords (2)\n"; }
     143
     144if ($bin1 != 1) { die "ERROR: $input: binned image\n"; }
     145if ($bin2 != 1) { die "ERROR: $input: binned image\n"; }
     146if ($raster ne "FULL") { die "ERROR: $input: sub-rastered image\n"; }
     147
     148# (skip check availablility of detrend frames; flatten.flips, detrend, demode all do this!)
     149
     150# final output   is @fitlist
     151# detrend  $input[ccd] @detlist
     152# demode   @detlist    @demlist
     153# defringe @demlist    @deflist
    161154# if we skip a step, re-assign list as needed:
    162155if ( $DO_DEFRINGE &&  $DO_DEMODE) { @deflist = @fitlist; }
     
    166159
    167160# run the detrend system
    168 for ($i = 0; $i < @rawlist; $i++) {
    169 
    170     $status = vsystem ("flatten.flips $close -quiet $rawlist[$i] $detlist[$i] $ccds[$i] split");
    171     if ($status) { &escape ("ERROR: problem running flatten on $rawlist[$i]"); }
     161for ($i = 0; $i < @ccds; $i++) {
     162    $status = vsystem ("flatten.flips $close -quiet $input $detlist[$i] $ccds[$i] mef");
     163    if ($status) { &escape ("ERROR: problem running flatten on $input, $ccds[$i]"); }
    172164}
    173165
    174166# we need files containing detlist, demlist, deflist:
    175167if ($DO_DEMODE || $DO_DEFRINGE) {
    176     $detlist = "$ARGV[1].detlist";
     168    $detlist = "$outdir.detlist";
    177169    open (FILE, ">$detlist");
    178170    foreach $name (@detlist) {
     
    182174}
    183175if ($DO_DEMODE) {
    184     $demlist = "$ARGV[1].demlist";
     176    $demlist = "$outdir.demlist";
    185177    open (FILE, ">$demlist");
    186178    foreach $name (@demlist) {
     
    190182}
    191183if ($DO_DEFRINGE) {
    192     $deflist = "$ARGV[1].deflist";
     184    $deflist = "$outdir.deflist";
    193185    open (FILE, ">$deflist");
    194186    foreach $name (@deflist) {
     
    200192if ($DO_DEMODE) {
    201193    $status = vsystem ("demodemap $detlist $demlist $close");
    202     if ($status) { &escape ("ERROR: problem running demodemap on $ARGV[1]"); }
     194    if ($status) { &escape ("ERROR: problem running demodemap on $outdir"); }
    203195}
    204196
    205197if ($DO_DEFRINGE) {
    206198    $status = vsystem ("defringe $demlist $deflist $close");
    207     if ($status) { &escape ("ERROR: problem running defringe on $ARGV[1]"); }
     199    if ($status) { &escape ("ERROR: problem running defringe on $outdir"); }
    208200}
    209201
     
    241233    return;
    242234}
     235
     236sub basename {
     237
     238    my ($file) = $_[0];
     239    my ($base, @words);
     240
     241    @words = split ("/", $file);
     242    $base = $words[-1];
     243    return $base;
     244}
     245
  • trunk/Ohana/src/perl/src/elixir.postrun

    r17 r44  
    147147
    148148        if (! -d "$datdir/$runid") { mkdir ("$datdir/$runid", 0777); }
    149         vsystem ("mk.ptlist -run $runid > $ptlist");
     149        ($tmp, $start, $stop) = split (" ", `mkrun run $runid`);
     150        if ($?) { &escape ("error in RUNID $runid"); }
     151        vsystem ("imsearch -type object -trange $start $stop -pt > $ptlist");
    150152        vsystem ("elixir -D mode sexcomplete $ptlist >& $ptlog &");
    151153
  • trunk/Ohana/src/perl/src/fr.frstats

    r17 r44  
    3030    close (MANA);
    3131    if ($?) { &escape ("problem with fr.frstats -fitpars"); }
     32
     33    &goodbye;
     34}
     35
     36# apply fit parameters for given chip
     37if ($ARGV[0] eq "-applyfit") {
     38   
     39    if (@ARGV != 4) { die "USAGE: fr.frstats -applyfit (imlist) (fitpars) (output)\n"; }
     40    $list = $ARGV[1];
     41    $pars = $ARGV[2];
     42    $output = $ARGV[3];
     43
     44    if (-e $output) { unlink $output; }
     45
     46    # run mana script:
     47    open (MANA, "|mana --norc");
     48    print MANA "input $script\n";
     49    print MANA "applyfitstats $list $pars $output\n";
     50    print MANA "exit 1\n";
     51    close (MANA);
     52    if ($?) { &escape ("problem with fr.frstats -applyfit"); }
    3253
    3354    &goodbye;
     
    135156
    136157sub goodbye {
    137   print STDOUT "SUCCESS: finished with fr.stats\n";
     158  print STDOUT "finished with fr.stats\n";
    138159  exit 0;
    139160}
  • trunk/Ohana/src/perl/src/fr.mklists

    r17 r44  
    2020}
    2121
    22 $answer = `cameraconfig $elixir -ccds`;
    23 @ccds = split (" ", $answer);
     22@ccds = split (" ", `cameraconfig -ccdn`);
     23if ($?) { die "error in config\n"; }
    2424
    2525$STAT_XCLD = 0;
     
    122122
    123123    open (FILE, ">$ARGV[2]");
    124     for ($i = 0; $i < @ccds; $i++) {
     124    foreach $ccd (@ccds) {
    125125        $name = $ARGV[1];
    126         $name =~ s/CCDNUM/$ccds[$i]/;
     126        $name =~ s/CCDNUM/$ccd/;
    127127        print FILE "$name\n";
    128128    }
     
    285285
    286286    $master   = $ARGV[1];
    287     $imstats  = $ARGV[2];
    288     $statlist = $ARGV[3];
    289     $ccdid    = $ARGV[4];
     287    $imstats  = $ARGV[2]; # list of basic image stats
     288    $statlist = $ARGV[3]; # list of image stat files (1 line per frame)
     289    $ccd      = $ARGV[4];
    290290    $output   = $ARGV[5];
    291291
    292     $ccd = -1;
    293     for ($i = 0; $i < @ccds; $i++) {
    294         if ($ccdid eq $ccds[$i]) {
    295             $ccd = $i;
    296             last;
    297         }
    298     }
    299     if ($ccd == -1) { &escape ("error in CCD ID"); }
     292    # $ccd = `cameraconfig -N $ccdid`;
     293    # if ($ccd eq "") { &escape ("error in CCD ID"); }
    300294
    301295    open (FILE, $master);
     
    313307    if (@master != @statlist) { &escape ("mismatch in master & statlist file lengths"); }
    314308
     309    # find image with strongest fringe amplitude
     310    $fringemax = "";
     311    for ($i = 0; $i < @imstats; $i++) {
     312        $line = $master[$i]; chop $line;
     313        ($path, $root, $mode, $status) = split (" ", $line);
     314        if ($status != $STAT_KEEP) { next; }
     315       
     316        $line = $imstats[$i]; chop $line;
     317        ($SKY, $fringe, $dfringe) = split (" ", $line);
     318        if ($fringemax eq "") { $fringemax = $fringe; }
     319        if ($fringemax < $fringe) { $fringemax = $fringe; }
     320    }
     321    print "fringemax: $fringemax\n";
     322
    315323    open (FILE, ">$output");
    316 
    317324    for ($i = 0; $i < @master; $i++) {
    318325        $line = $master[$i]; chop $line;
     
    322329        $line = $imstats[$i]; chop $line;
    323330        ($SKY, $fringe, $dfringe) = split (" ", $line);
    324 
     331        $frnorm = $fringe / $fringemax;
     332        # imcombred is not renormalizing: this will force fringe amplitude to a useful level
     333
     334        # file is list of fringe stats (1 line per chip)
    325335        $file = $statlist[$i]; chop $file;
    326336        open (STAT, "$file");
     
    333343        # compare $sky with average sky $SKY?
    334344        $dsky = $sky - $SKY;
    335         print "$i: $dsky\n";
    336         print FILE "$name $sky $fringe 0.0 0.0\n";
     345        print FILE "$name $sky $frnorm\n";
    337346    }
    338347    close (FILE);
Note: See TracChangeset for help on using the changeset viewer.