Changeset 2446
- Timestamp:
- Nov 24, 2004, 1:13:49 PM (22 years ago)
- Location:
- trunk/Ohana/src/perl/src
- Files:
-
- 8 edited
-
dads.detrend (modified) (7 diffs)
-
defringe (modified) (1 diff)
-
demodemap (modified) (4 diffs)
-
elixir.postrun (modified) (1 diff)
-
flatten.flips (modified) (7 diffs)
-
fr.frstats (modified) (2 diffs)
-
fr.medbin.spline (modified) (3 diffs)
-
mkfringe (modified) (14 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Ohana/src/perl/src/dads.detrend
r102 r2446 11 11 @opt = (); 12 12 @tARGV = (); 13 $LIMITMODES = ""; 13 14 for (; @ARGV > 0; ) { 14 15 if ($ARGV[0] eq "-c") { … … 27 28 $CLEANUP = 0; 28 29 shift; next; 30 } 31 if ($ARGV[0] eq "-limitmodes") { 32 $LIMITMODES = "-limitmodes $ARGV[1]"; 33 shift; shift; next; 29 34 } 30 35 @tARGV = (@tARGV, $ARGV[0]); … … 110 115 } 111 116 } 117 $camera = `gconfig CAMERA`; chop $camera; 118 if ($camera eq "meganorth") { $DO_DEMODE = 0; } 112 119 113 120 # check the GEOMETRY: … … 151 158 152 159 # create output lists: 160 @detlist = (); 161 @deflist = (); 162 @demlist = (); 153 163 @fitlist = (); 154 @detlist = ();155 @demlist = ();156 164 foreach $ccd (@ccdn) { 157 165 push @fitlist, "$outdir/$base$ccd.fits"; 158 166 push @detlist, "$workdir/$base$ccd.det"; 159 push @demlist, "$workdir/$base$ccd.dem";160 167 push @deflist, "$workdir/$base$ccd.def"; 161 168 } … … 163 170 $phufile = "$outdir/$base.phu"; 164 171 165 # final output is @fitlist166 172 # detrend $input[ccd] @detlist 167 # demode @detlist @demlist 168 # defringe @demlist @deflist 169 # if we skip a step, re-assign list as needed: 170 171 # assign input / output lists 172 if ( $DO_DEFRINGE && $DO_DEMODE) { @deflist = @fitlist; } 173 if ( $DO_DEFRINGE && !$DO_DEMODE) { @deflist = @fitlist; @demlist = @detlist; } 174 if (!$DO_DEFRINGE && $DO_DEMODE) { @demlist = @fitlist; } 175 if (!$DO_DEFRINGE && !$DO_DEMODE) { @detlist = @fitlist; } 173 # defringe @detlist @deflist 174 # demode @deflist @demlist 175 # output @fitlist 176 177 #* flatten.flips input fitlist 178 179 #* flatten.flips input detlist 180 #* demode detlist fitlist 181 182 # flatten.flips input detlist 183 # defringe detlist deflist 184 185 #* flatten.flips input detlist 186 #* defringe detlist deflist 187 #* demode deflist fitlist 188 189 # @demlist = @fitlist 190 # !demode: @deflist = @demlist 191 # !defringe: @detlist = @deflist 192 193 if ($DO_DEMODE) { 194 @demlist = @fitlist; 195 } else { 196 if ($DO_DEFRINGE) { 197 @deflist = @fitlist; 198 } else { 199 @detlist = @fitlist; 200 } 201 } 176 202 177 203 # run the detrend system … … 193 219 } 194 220 if ($DO_DEMODE) { 221 $mapfile = "$outdir.map.fits"; 222 $deflist = $detlist; 195 223 $demlist = "$outdir.demlist"; 196 224 open (FILE, ">$demlist"); … … 207 235 } 208 236 close (FILE); 209 if (!$DO_DEMODE) { $demlist = $detlist; } 237 } 238 239 if ($DO_DEFRINGE) { 240 $status = &vsystem ("defringe $detlist $deflist $close"); 241 if ($status) { &escape ("ERROR: problem running defringe on $outdir"); } 210 242 } 211 243 212 244 if ($DO_DEMODE) { 213 $status = &vsystem ("demodemap $de tlist $demlist$close");245 $status = &vsystem ("demodemap $deflist $demlist -mapfile $mapfile $LIMITMODES $close"); 214 246 if ($status) { &escape ("ERROR: problem running demodemap on $outdir"); } 215 }216 217 if ($DO_DEFRINGE) {218 $status = &vsystem ("defringe $demlist $deflist $close");219 if ($status) { &escape ("ERROR: problem running defringe on $outdir"); }220 247 } 221 248 -
trunk/Ohana/src/perl/src/defringe
r104 r2446 49 49 if ($?) { die "failure to measure fringe amplitude\n"; } 50 50 51 print "imstats; $imstats\n"; 52 51 53 # find fringe master frames 52 $file = `detsearch -quiet $close -image $input[$i] $ccds[$i] split -type fringe`; chop $file; 54 @file = `detsearch -quiet $close -image $input[$i] $ccds[$i] split -type fringe`; 55 $file = $file[-1]; chop $file; 53 56 if ($?) { &escape ("can't find fringe master for $input[$i]"); } 54 57 $fringe[$i] = $file; 55 58 if ($dbmode eq "MEF") { $fringe[$i] = "$file\[$ccds[$i]\]"; } 59 60 print "file: $file\n"; 61 print "fringe: $fringe[$i]\n"; 62 print "dbmode; $dbmode\n"; 56 63 57 64 # get fringe master stats -
trunk/Ohana/src/perl/src/demodemap
r106 r2446 1 1 #!/usr/bin/env perl 2 2 3 if ((@ARGV != 2) && (@ARGV != 3)) { die "USAGE: demodemap (inlist) (outlist) [-close]\n" } 3 # grab the command line options 4 $limitmodes = ""; 5 $mapfile = ""; 6 $close = ""; 7 @tARGV = (); 8 for (; @ARGV > 0; ) { 9 if ($ARGV[0] eq "-close") { 10 $close = "-close"; 11 shift; next; 12 } 13 if ($ARGV[0] eq "-mapfile") { 14 $mapfile = $ARGV[1]; 15 shift; shift; next; 16 } 17 if ($ARGV[0] eq "-limitmodes") { 18 $limitmodes = $ARGV[1]; 19 shift; shift; next; 20 } 21 @tARGV = (@tARGV, $ARGV[0]); 22 shift; 23 } 24 @ARGV = @tARGV; 4 25 5 $inlist = $ARGV[0]; 26 if (@ARGV != 2) { die "USAGE: demodemap (inlist) (outlist) [-mapfile file] [-limitmodes N] [-close]\n" } 27 28 $inlist = $ARGV[0]; 6 29 $outlist = $ARGV[1]; 7 8 $close = "";9 if ((@ARGV == 3) && ($ARGV[2] eq "-close")) {10 $close = "-close";11 }12 30 13 31 open (FILE, "$inlist"); … … 22 40 @ccds = split (" ", $answer); 23 41 24 $scale = 256;25 42 $modefits = `detsearch $close -quiet -image $first $ccds[0] split -type modes`; chop ($modefits); 26 43 if ($?) { die "can't get mode image\n"; } … … 31 48 open (MANA, "|mana --norc"); 32 49 print MANA "input $script\n"; 33 print MANA "demodemap $inlist $outlist $modefits $basename $scale\n"; 50 51 # override default values (set in modes.pro): 52 if ($limitmodes) { print MANA "\$Nmodes = $limitmodes\n"; } 53 if ($mapfile) { print MANA "\$savemap = $mapfile\n"; } 54 print MANA "demodemap $inlist $outlist $modefits $basename\n"; 34 55 print MANA "exit 1\n"; 35 56 close (MANA); … … 52 73 die "@_\n"; 53 74 } 54 55 56 sub old {57 print MANA "macro go\n";58 print MANA " medianmosaic $inlist 256\n"; # load images, create mosaic59 print MANA " rd U $modefits\n"; # load mode images60 print MANA " getmodes\n"; # extract modes from mode image61 print MANA " setmodes2\n"; # determine mode contributions62 print MANA " mkmodel\n"; # create modal map63 64 print MANA " applymodalmap $inlist $outlist 256\n"; # subtract modal map from inlist images65 print MANA " exit 0\n";66 print MANA "end\n";67 68 print MANA "go\n";69 } -
trunk/Ohana/src/perl/src/elixir.postrun
r109 r2446 160 160 # wait for up to 10 seconds for $fifos/complete.pid to exist 161 161 for ($Nwait = 0; ($Nwait < 30) && (! -e "$fifos/complete.pid"); $Nwait ++) { sleep 2; } 162 163 162 164 if (! -e "$fifos/complete.pid") { &save_escape ($entry, "failed to start elixir (sex)complete"); } 163 165 } -
trunk/Ohana/src/perl/src/flatten.flips
r110 r2446 1 1 #!/usr/bin/env perl 2 3 ### darks are currently disabled (look for dark detsearch and darkfactor) 2 4 3 5 # grab the command line options … … 12 14 for (; @ARGV > 0; ) { 13 15 if ($ARGV[0] eq "-C") { 14 $config = " -C $ARGV[1]";16 $config = "$config -C $ARGV[1]"; 15 17 shift; shift; next; 16 18 } 17 19 if ($ARGV[0] eq "-c") { 18 $config = " -c $ARGV[1]";20 $config = "$config -c $ARGV[1]"; 19 21 shift; shift; next; 20 22 } 21 23 if ($ARGV[0] eq "-D") { 22 $config = " -D $ARGV[1] $ARGV[2]";24 $config = "$config -D $ARGV[1] $ARGV[2]"; 23 25 shift; shift; shift; next; 24 26 } … … 74 76 75 77 # find the appropriate detrend images (need to fix output name for MEF - option?) 78 print STDERR "detsearch $config $chipname -quiet -image $input $ccd $mode -type flat $close\n"; 76 79 $flat=`detsearch $config $chipname -quiet -image $input $ccd $mode -type flat $close`; chop ($flat); 77 80 if ($?) { die "ERROR: can't get flat for image\n"; } … … 81 84 if ($?) { die "ERROR: can't get bias for image\n"; } 82 85 83 $dark=`detsearch $config $chipname -quiet -image $input $ccd $mode -type dark $close`; chop ($dark);84 if ($?) { die "ERROR: can't get dark for image\n"; }86 # $dark=`detsearch $config $chipname -quiet -image $input $ccd $mode -type dark $close`; chop ($dark); 87 # if ($?) { die "ERROR: can't get dark for image\n"; } 85 88 } 86 89 … … 125 128 } 126 129 127 if (! $fast ) {130 if (! $fast && 0) { 128 131 # determine scale factor for dark image (use MEF rootname if EXTNAME is given) 129 132 $darkfile = $dark; … … 159 162 $line =~ s|BIASNAME|$bias|; 160 163 161 # dark corrections 162 $line =~ s|DODARK|1|; 163 $line =~ s|DARK_FACT|$darkfactor|; 164 $line =~ s|DARKNAME|$dark|; 164 # dark corrections - avoid for now 165 $line =~ s|DODARK|0|; 166 # $line =~ s|DODARK|1|; 167 # $line =~ s|DARK_FACT|$darkfactor|; 168 # $line =~ s|DARKNAME|$dark|; 165 169 } 166 170 … … 179 183 # header blocks - we need an extra block for elixir keywords 180 184 $line =~ s|DOHEADER|1|; 181 $line =~ s|NBLOCKS| 5|;185 $line =~ s|NBLOCKS|2|; 182 186 } 183 187 -
trunk/Ohana/src/perl/src/fr.frstats
r123 r2446 92 92 if (-e $line) { $Nfound ++; } 93 93 } 94 if ($Nfound == 0) {95 print STDERR "NOTE: no filesfrom $list: assuming initial state\n";94 if ($Nfound < @list) { 95 print STDERR "NOTE: missing some file from $list: assuming initial state\n"; 96 96 &goodbye; 97 97 } 98 if ($Nfound != @list) { &escape ("missing some files from $list"); }99 98 100 99 # run mana script: … … 128 127 if (-e $line) { $Nfound ++; } 129 128 } 130 if ($Nfound == 0) {131 print STDERR "NOTE: nofiles from $list: assuming initial state\n";129 if ($Nfound < @list) { 130 print STDERR "NOTE: missing some files from $list: assuming initial state\n"; 132 131 &goodbye; 133 132 } 134 if ($Nfound != @list) { &escape ("missing some files from $list"); }135 133 136 134 # run mana script: -
trunk/Ohana/src/perl/src/fr.medbin.spline
r111 r2446 17 17 if ($?) { die "ERROR: cameraconfig error\n"; } 18 18 19 ($Xmap, $Ymap) = split (" ", `gconfig FRINGE_MAP_SCALE`); 20 if ($?) { die "ERROR: missing FRINGE_MAP_SCALE in config system\n"; } 21 19 22 if (! -d $meddir) { vsystem ("mkdir -p $meddir"); } 20 23 if (! -d $mapdir) { vsystem ("mkdir -p $mapdir"); } 21 24 22 25 open (MANA, "|mana --norc"); 23 # open (MANA, ">test.pro");24 26 25 27 # convert BIASSEC string to x1, x2, y1, y2 vars … … 52 54 print MANA " keyword a NAXIS1 nx\n"; 53 55 print MANA " keyword a NAXIS2 ny\n"; 56 57 # generate binned image 54 58 print MANA " medianmap a b {\$nx/$factor} {\$ny/$factor} -range 0.25 0.75\n"; 55 59 print MANA " keyword a DATASEC line\n"; … … 57 61 print MANA " sprint newline \"[%d:%d,%d:%d]\" {int(\$x1/2 + 1)} {int(\$x2/2 + 1)} {int(\$y1/2 + 1)} {int(\$y2/2 + 1)}\n"; 58 62 print MANA " keyword b DATASEC -w \$newline\n"; 59 60 # create 8x16 sky spline map61 63 print MANA " keyword b NAXIS1 nx\n"; 62 64 print MANA " keyword b NAXIS2 ny\n"; 63 print MANA " stats -q b - - - -\n";64 65 65 66 # sky from first ccd saved for reference 66 67 print MANA " if (\$setsky)\n"; 68 print MANA " stats -q b - - - -\n"; 67 69 print MANA " \$sky = \$MEDIAN\n"; 68 70 print MANA " \$setsky = 0\n"; 69 71 print MANA " end\n"; 72 # we use the sky value of the first chip to remove the DC level for map, add it to med 70 73 71 # we use the sky value of the first chip to make the image globally flat72 print MANA " medianmap b m 8 16-ignore 0.0 -range 0.25 0.75\n";74 # create Xmap x Ymap sky map, spline-fit to medbin scale 75 print MANA " medianmap b m $Xmap $Ymap -ignore 0.0 -range 0.25 0.75\n"; 73 76 print MANA " set m = m - \$sky\n"; 74 77 print MANA " spline.construct m M x\n"; -
trunk/Ohana/src/perl/src/mkfringe
r116 r2446 21 21 if ($ARGV[0] eq "mkconfig") { &mk_mkconfig; } 22 22 if ($ARGV[0] eq "list.runs") { &mk_list_runs; } 23 if ($ARGV[0] eq "clean up"){ &mk_cleanup; }23 if ($ARGV[0] eq "clean") { &mk_cleanup; } 24 24 if ($ARGV[0] eq "set") { &mk_set; } 25 25 if ($ARGV[0] eq "reg") { &mk_reg; } … … 48 48 if ($ARGV[0] eq "htmlmaps") { &mk_htmlmaps; } 49 49 if ($ARGV[0] eq "htmlkeep") { &mk_htmlkeep; } 50 if ($ARGV[0] eq "htmlmapkeep"){ &mk_htmlmapkeep;} 50 51 if ($ARGV[0] eq "htmlconfig") { &mk_htmlconfig; } 51 52 if ($ARGV[0] eq "html1") { &mk_html1; } … … 644 645 $modesjpg = mknames ("modesjpg", $confline); 645 646 $residjpg = mknames ("residjpg", $confline); 646 647 $inmapjpg = mknames ("inmapjpg", $confline); 647 648 648 649 vsystem ("fr.mkmodes $maplist $modefits $modelist"); 649 vsystem ("fr.modestats $maplist $modefits $modelist $modesjpg $residjpg"); 650 if ($status) { 651 $confline = stconfig ($confline, "status", "fail.map"); 652 save_config (@list); 653 next; 654 } 655 vsystem ("fr.modestats $maplist $modefits $modelist $modesjpg $residjpg $inmapjpg"); 656 if ($status) { 657 $confline = stconfig ($confline, "status", "fail.map"); 658 save_config (@list); 659 next; 660 } 650 661 $confline = stconfig ($confline, "status", "done.map"); 651 662 save_config (@list); … … 653 664 &goodbye; 654 665 } 655 656 657 666 658 667 ############## map reg ############### … … 980 989 # create directory for fhtool to work in 981 990 $links = mkfiles ("links"); 982 if (! -e $links) { mkdir ($links); }991 if (! -e $links) { system ("mkdir -p $links"); } 983 992 984 993 # create namelist for those with appropriate status … … 1415 1424 1416 1425 print STDOUT "<meta http-equiv=refresh content=\"0; url=$CGI/fr.elixir1?&elconf=$elconf\">"; 1417 # print STDOUT "<meta http-equiv=refresh content=\"0; url=$CGI/fr.elixir2?$key&elconf=$elconf\">\n"; 1426 &goodbye; 1427 } 1428 1429 ############## html accept ############### 1430 sub mk_htmlmapkeep { 1431 1432 if (@ARGV != 2) { &escape ("USAGE: $MKFRINGE htmlmapkeep (config.ver)"); } 1433 1434 $key = $ARGV[1]; 1435 @list = load_config (); 1436 1437 $match = -1; 1438 for ($i = 0; $i < @list; $i++) { 1439 $version = gtconfig ($list[$i], "version"); 1440 if ($key eq $version) { 1441 $match = $i; 1442 last; 1443 } 1444 } 1445 if ($match == -1) { &escape ("ERROR: can't find config entry"); } 1446 1447 # adjust the config file: convert status to 'accepted' 1448 $list[$match] = stconfig ($list[$match], "status", "accept.map"); 1449 save_config (@list); 1450 1451 print STDOUT "<meta http-equiv=refresh content=\"0; url=$CGI/fr.elixir1?&elconf=$elconf\">"; 1418 1452 &goodbye; 1419 1453 } … … 1494 1528 @list = load_config (); 1495 1529 1530 # config: run.type.filter 1531 # key: run.type.filter.ver 1532 # key.col run.type.filter.ver.column 1533 # the words in config and key may consist of alphanumeric plus '_', '-' 1534 # the words in col number be digits 1535 1496 1536 # entry on line will be either config.ver (== key) or config.ver.col for sorting 1497 1537 # grab just the key portion 1498 1538 $status = "none"; 1499 ($key) = $ARGV[1] =~ /( \w+.\w+.\w+.\w+)/; # (config.ver)1539 ($key) = $ARGV[1] =~ /([-\w]+\.[-\w]+\.[-\w]+\.[-\w]+)/; # (config.ver) 1500 1540 $arg = $ARGV[1]; 1501 1541 … … 1641 1681 $status = "none"; 1642 1682 $arg = $ARGV[1]; 1643 ($key) = $arg =~ /( \w+.\w+.\w+.\w+)/; # (config.ver)1683 ($key) = $arg =~ /([-\w]+\.[-\w]+\.[-\w]+\.[-\w]+)/; # (config.ver) 1644 1684 1645 1685 # find appropriate config.ver entry: … … 1791 1831 1792 1832 $col = 0; 1793 ($config) = $_[0] =~ /( \w+.\w+.\w+)/;1794 ($key) = $_[0] =~ /( \w+.\w+.\w+.\w+)/; # (config.ver)1833 ($config) = $_[0] =~ /([-\w]+\.[-\w]+\.[-\w]+)/; 1834 ($key) = $_[0] =~ /([-\w]+\.[-\w]+\.[-\w]+\.[-\w]+)/; # (config.ver) 1795 1835 1796 1836 # look for optional sort key (config.ver[.key]) … … 1930 1970 sub flips_report_done { 1931 1971 1932 ($config) = $_[0] =~ /(\w+.\w+.\w+)/; 1933 ($key) = $_[0] =~ /(\w+.\w+.\w+.\w+)/; # (config.ver) 1972 ($config) = $_[0] =~ /([-\w]+\.[-\w]+\.[-\w]+)/; 1973 ($key) = $_[0] =~ /([-\w]+\.[-\w]+\.[-\w]+\.[-\w]+)/; # (config.ver) 1974 1934 1975 $line = $_[1]; 1935 1976 … … 2062 2103 sub map_report { 2063 2104 2105 print STDOUT "A Simple Test <br>\n"; 2106 2064 2107 $col = 0; 2065 ($config) = $_[0] =~ /( \w+.\w+.\w+)/;2066 ($key) = $_[0] =~ /( \w+.\w+.\w+.\w+)/; # (config.ver)2108 ($config) = $_[0] =~ /([-\w]+\.[-\w]+\.[-\w]+)/; 2109 ($key) = $_[0] =~ /([-\w]+\.[-\w]+\.[-\w]+\.[-\w]+)/; # (config.ver) 2067 2110 2068 2111 # look for optional sort key (config.ver[.key]) … … 2081 2124 open (LIST, mknames ("modesjpg", $line)); @modeslist = <LIST>; close (LIST); 2082 2125 open (LIST, mknames ("residjpg", $line)); @residlist = <LIST>; close (LIST); 2126 open (LIST, mknames ("inmapjpg", $line)); @inmaplist = <LIST>; close (LIST); 2083 2127 foreach $name (@modeslist) { chop ($name); } 2084 2128 foreach $name (@residlist) { chop ($name); } 2129 foreach $name (@inmaplist) { chop ($name); } 2085 2130 2086 2131 print STDOUT "You have the following choices: <br>\n"; 2087 2132 print STDOUT "<a href=$CGI/fr.elixir1?&elconf=$elconf> <b> return to top level </b><br></a>"; 2088 print STDOUT "<a href=$CGI/fr. accept?$key&elconf=$elconf> <b> accept config </b><br></a></td>";2133 print STDOUT "<a href=$CGI/fr.mapaccept?$key&elconf=$elconf> <b> accept config </b><br></a></td>"; 2089 2134 2090 2135 print STDOUT "Modes avaliable for this config <br>\n"; … … 2139 2184 print STDOUT "</form>\n"; 2140 2185 2186 # 2 x N table of source images 2187 print STDOUT "Source images <br>\n"; 2188 print STDOUT "<form method=post action=$CGI/fr.maps?&elconf=$elconf>\n"; 2189 print STDOUT "<table bgcolor=#fff0e0 border=1 cellspacing=0 cellpadding=3>\n"; 2190 for ($i = 0; $i < @mapdata; $i++) { 2191 if ((($i - 0) % 6) == 0) { print STDOUT "<tr>\n"; } 2192 2193 ($name, $status) = split (" ", $mapdata[$i]); 2194 @words = split ("/", $name); 2195 $basename = $words[-1]; 2196 $basename =~ s/.maplist$//; 2197 2198 $imname = sprintf "%s/%s", $www, $inmaplist[$i]; 2199 print STDOUT "<td> $basename </td>\n"; 2200 print STDOUT "<td> <img height=64 src=$imname> </td>\n"; 2201 if ($status) { print STDOUT "<td bgcolor=#00c000> <input checked type=checkbox name=map.$i value=$i size=1> </td>\n"; } 2202 else { print STDOUT "<td bgcolor=#d00000> <input type=checkbox name=map.$i value=$i size=1> </td>\n"; } 2203 2204 if ((($i - 5) % 6) == 0) { print STDOUT "</tr>\n"; } 2205 else { print STDOUT "<td width=10 bgcolor=#ffffff> </td>\n"; } 2206 } 2207 print STDOUT "</table>\n"; 2208 $Nmaps = @mapdata; 2209 print STDOUT "<input type=hidden name=Nmaps value=\"$Nmaps\">\n"; 2210 print STDOUT "<input type=hidden name=config value=\"$key\">\n"; 2211 print STDOUT "<input type=submit value=\"set image selection\">\n"; 2212 print STDOUT "<input type=reset value=Reset>\n"; 2213 print STDOUT "</form>\n"; 2141 2214 &goodbye; 2142 2215 … … 2341 2414 $dir = mkfiles ("html"); 2342 2415 $value = "$dir/$words[0].$words[1].$words[2].$words[3].resid"; 2416 last; 2417 } 2418 # file in HTML dir with all medbin jpg image names (also root for images) 2419 if ($type eq "inmapjpg") { 2420 $dir = mkfiles ("html"); 2421 $value = "$dir/$words[0].$words[1].$words[2].$words[3].inmap"; 2343 2422 last; 2344 2423 }
Note:
See TracChangeset
for help on using the changeset viewer.
