IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 2446


Ignore:
Timestamp:
Nov 24, 2004, 1:13:49 PM (22 years ago)
Author:
eugene
Message:

cleared lock

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

Legend:

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

    r102 r2446  
    1111@opt = ();
    1212@tARGV = ();
     13$LIMITMODES = "";
    1314for (; @ARGV > 0; ) {
    1415    if ($ARGV[0] eq "-c") {
     
    2728        $CLEANUP = 0;
    2829        shift; next;
     30    }
     31    if ($ARGV[0] eq "-limitmodes") {
     32        $LIMITMODES = "-limitmodes $ARGV[1]";
     33        shift; shift; next;
    2934    }
    3035    @tARGV = (@tARGV, $ARGV[0]);
     
    110115    }
    111116}
     117$camera = `gconfig CAMERA`; chop $camera;
     118if ($camera eq "meganorth") { $DO_DEMODE = 0; }
    112119
    113120# check the GEOMETRY:
     
    151158
    152159# create output lists:
     160@detlist = ();
     161@deflist = ();
     162@demlist = ();
    153163@fitlist = ();
    154 @detlist = ();
    155 @demlist = ();
    156164foreach $ccd (@ccdn) {
    157165    push @fitlist, "$outdir/$base$ccd.fits";
    158166    push @detlist, "$workdir/$base$ccd.det";
    159     push @demlist, "$workdir/$base$ccd.dem";
    160167    push @deflist, "$workdir/$base$ccd.def";
    161168}
     
    163170$phufile = "$outdir/$base.phu";
    164171
    165 # final output   is    @fitlist
    166172# 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
     193if ($DO_DEMODE) {
     194    @demlist = @fitlist;
     195} else {
     196    if ($DO_DEFRINGE) {
     197        @deflist = @fitlist;
     198    } else {
     199        @detlist = @fitlist;
     200    }
     201}
    176202
    177203# run the detrend system
     
    193219}
    194220if ($DO_DEMODE) {
     221    $mapfile = "$outdir.map.fits";
     222    $deflist = $detlist;
    195223    $demlist = "$outdir.demlist";
    196224    open (FILE, ">$demlist");
     
    207235    }
    208236    close (FILE);
    209     if (!$DO_DEMODE) { $demlist = $detlist; }
     237}
     238
     239if ($DO_DEFRINGE) {
     240    $status = &vsystem ("defringe $detlist $deflist $close");
     241    if ($status) { &escape ("ERROR: problem running defringe on $outdir"); }
    210242}
    211243
    212244if ($DO_DEMODE) {
    213     $status = &vsystem ("demodemap $detlist $demlist $close");
     245    $status = &vsystem ("demodemap $deflist $demlist -mapfile $mapfile $LIMITMODES $close");
    214246    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"); }
    220247}
    221248
  • trunk/Ohana/src/perl/src/defringe

    r104 r2446  
    4949    if ($?) { die "failure to measure fringe amplitude\n"; }
    5050
     51    print "imstats; $imstats\n";
     52
    5153    # 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;
    5356    if ($?) { &escape ("can't find fringe master for $input[$i]"); }
    5457    $fringe[$i] = $file;
    5558    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";
    5663
    5764    # get fringe master stats
  • trunk/Ohana/src/perl/src/demodemap

    r106 r2446  
    11#!/usr/bin/env perl
    22
    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 = ();
     8for (; @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;
    425
    5 $inlist = $ARGV[0];
     26if (@ARGV != 2) { die "USAGE: demodemap (inlist) (outlist) [-mapfile file] [-limitmodes N] [-close]\n" }
     27
     28$inlist  = $ARGV[0];
    629$outlist = $ARGV[1];
    7 
    8 $close = "";
    9 if ((@ARGV == 3) && ($ARGV[2] eq "-close")) {
    10     $close = "-close";
    11 }
    1230
    1331open (FILE, "$inlist");
     
    2240@ccds    = split (" ", $answer);
    2341
    24 $scale = 256;
    2542$modefits = `detsearch $close -quiet -image $first $ccds[0] split -type modes`; chop ($modefits);
    2643if ($?) { die "can't get mode image\n"; }
     
    3148open (MANA, "|mana --norc");
    3249print MANA "input $script\n";
    33 print MANA "demodemap $inlist $outlist $modefits $basename $scale\n";
     50
     51# override default values (set in modes.pro):
     52if ($limitmodes) { print MANA "\$Nmodes = $limitmodes\n"; }
     53if ($mapfile) { print MANA "\$savemap = $mapfile\n"; }
     54print MANA "demodemap $inlist $outlist $modefits $basename\n";
    3455print MANA "exit 1\n";
    3556close (MANA);
     
    5273    die "@_\n";
    5374}
    54 
    55 
    56 sub old {
    57     print MANA "macro go\n";
    58     print MANA " medianmosaic $inlist 256\n";            # load images, create mosaic
    59     print MANA " rd U $modefits\n";                      # load mode images
    60     print MANA " getmodes\n";                            # extract modes from mode image
    61     print MANA " setmodes2\n";                           # determine mode contributions
    62     print MANA " mkmodel\n";                             # create modal map
    63 
    64     print MANA " applymodalmap $inlist $outlist 256\n";  # subtract modal map from inlist images
    65     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  
    160160        # wait for up to 10 seconds for $fifos/complete.pid to exist
    161161        for ($Nwait = 0; ($Nwait < 30) && (! -e "$fifos/complete.pid"); $Nwait ++) { sleep 2; }
     162
     163
    162164        if (! -e "$fifos/complete.pid") { &save_escape ($entry, "failed to start elixir (sex)complete"); }
    163165    }
  • trunk/Ohana/src/perl/src/flatten.flips

    r110 r2446  
    11#!/usr/bin/env perl
     2
     3### darks are currently disabled (look for dark detsearch and darkfactor)
    24
    35# grab the command line options
     
    1214for (; @ARGV > 0; ) {
    1315    if ($ARGV[0] eq "-C") {
    14         $config = "-C $ARGV[1]";
     16        $config = "$config -C $ARGV[1]";
    1517        shift; shift; next;
    1618    }
    1719    if ($ARGV[0] eq "-c") {
    18         $config = "-c $ARGV[1]";
     20        $config = "$config -c $ARGV[1]";
    1921        shift; shift; next;
    2022    }
    2123    if ($ARGV[0] eq "-D") {
    22         $config = "-D $ARGV[1] $ARGV[2]";
     24        $config = "$config -D $ARGV[1] $ARGV[2]";
    2325        shift; shift; shift; next;
    2426    }
     
    7476
    7577# find the appropriate detrend images (need to fix output name for MEF - option?)
     78print STDERR "detsearch $config $chipname -quiet -image $input $ccd $mode -type flat $close\n";
    7679$flat=`detsearch $config $chipname -quiet -image $input $ccd $mode -type flat $close`; chop ($flat);
    7780if ($?) { die "ERROR: can't get flat for image\n"; }
     
    8184    if ($?) { die "ERROR: can't get bias for image\n"; }
    8285
    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"; }
    8588}
    8689
     
    125128}
    126129
    127 if (! $fast) {
     130if (! $fast && 0) {
    128131    # determine scale factor for dark image (use MEF rootname if EXTNAME is given)
    129132    $darkfile = $dark;
     
    159162        $line =~ s|BIASNAME|$bias|;
    160163
    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|;
    165169    }
    166170
     
    179183    # header blocks - we need an extra block for elixir keywords
    180184    $line =~ s|DOHEADER|1|;
    181     $line =~ s|NBLOCKS|5|;
     185    $line =~ s|NBLOCKS|2|;
    182186}
    183187
  • trunk/Ohana/src/perl/src/fr.frstats

    r123 r2446  
    9292        if (-e $line) { $Nfound ++; }
    9393    }
    94     if ($Nfound == 0) {
    95         print STDERR "NOTE: no files from $list: assuming initial state\n";
     94    if ($Nfound < @list) {
     95        print STDERR "NOTE: missing some file from $list: assuming initial state\n";
    9696        &goodbye;
    9797    }
    98     if ($Nfound != @list) { &escape ("missing some files from $list"); }
    9998
    10099    # run mana script:
     
    128127        if (-e $line) { $Nfound ++; }
    129128    }
    130     if ($Nfound == 0) {
    131         print STDERR "NOTE: no files from $list: assuming initial state\n";
     129    if ($Nfound < @list) {
     130        print STDERR "NOTE: missing some files from $list: assuming initial state\n";
    132131        &goodbye;
    133132    }
    134     if ($Nfound != @list) { &escape ("missing some files from $list"); }
    135133
    136134    # run mana script:
  • trunk/Ohana/src/perl/src/fr.medbin.spline

    r111 r2446  
    1717if ($?) { die "ERROR: cameraconfig error\n"; }
    1818
     19($Xmap, $Ymap) = split (" ", `gconfig FRINGE_MAP_SCALE`);
     20if ($?) { die "ERROR: missing FRINGE_MAP_SCALE in config system\n"; }
     21
    1922if (! -d $meddir) { vsystem ("mkdir -p $meddir"); }
    2023if (! -d $mapdir) { vsystem ("mkdir -p $mapdir"); }
    2124
    2225open (MANA, "|mana --norc");
    23 # open (MANA, ">test.pro");
    2426
    2527# convert BIASSEC string to x1, x2, y1, y2 vars
     
    5254print MANA " keyword a NAXIS1 nx\n";
    5355print MANA " keyword a NAXIS2 ny\n";
     56
     57# generate binned image
    5458print MANA " medianmap a b {\$nx/$factor} {\$ny/$factor} -range 0.25 0.75\n";
    5559print MANA " keyword a DATASEC line\n";
     
    5761print MANA " sprint newline \"[%d:%d,%d:%d]\" {int(\$x1/2 + 1)} {int(\$x2/2 + 1)} {int(\$y1/2 + 1)} {int(\$y2/2 + 1)}\n";
    5862print MANA " keyword b DATASEC -w \$newline\n";
    59 
    60 # create 8x16 sky spline map
    6163print MANA " keyword b NAXIS1 nx\n";
    6264print MANA " keyword b NAXIS2 ny\n";
    63 print MANA " stats -q b - - - -\n";
    6465
    6566# sky from first ccd saved for reference
    6667print MANA " if (\$setsky)\n";
     68print MANA "  stats -q b - - - -\n";
    6769print MANA "  \$sky = \$MEDIAN\n";
    6870print MANA "  \$setsky = 0\n";
    6971print MANA " end\n";
     72# we use the sky value of the first chip to remove the DC level for map, add it to med
    7073
    71 # we use the sky value of the first chip to make the image globally flat
    72 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
     75print MANA " medianmap b m $Xmap $Ymap -ignore 0.0 -range 0.25 0.75\n";
    7376print MANA " set m = m - \$sky\n";
    7477print MANA " spline.construct m M x\n";
  • trunk/Ohana/src/perl/src/mkfringe

    r116 r2446  
    2121if ($ARGV[0] eq "mkconfig")   { &mk_mkconfig;   }
    2222if ($ARGV[0] eq "list.runs")  { &mk_list_runs;  }
    23 if ($ARGV[0] eq "cleanup")    { &mk_cleanup;    }
     23if ($ARGV[0] eq "clean")      { &mk_cleanup;    }
    2424if ($ARGV[0] eq "set")        { &mk_set;        }
    2525if ($ARGV[0] eq "reg")        { &mk_reg;        }
     
    4848if ($ARGV[0] eq "htmlmaps")   { &mk_htmlmaps;   }
    4949if ($ARGV[0] eq "htmlkeep")   { &mk_htmlkeep;   }
     50if ($ARGV[0] eq "htmlmapkeep"){ &mk_htmlmapkeep;}
    5051if ($ARGV[0] eq "htmlconfig") { &mk_htmlconfig; }
    5152if ($ARGV[0] eq "html1")      { &mk_html1;      }
     
    644645        $modesjpg = mknames ("modesjpg", $confline);
    645646        $residjpg = mknames ("residjpg", $confline);
    646 
     647        $inmapjpg = mknames ("inmapjpg", $confline);
    647648
    648649        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        }
    650661        $confline = stconfig ($confline, "status", "done.map");
    651662        save_config (@list);
     
    653664    &goodbye;
    654665}
    655 
    656 
    657666
    658667############## map reg ###############
     
    980989    # create directory for fhtool to work in
    981990    $links = mkfiles ("links");
    982     if (! -e $links) { mkdir ($links); }
     991    if (! -e $links) { system ("mkdir -p $links"); }
    983992
    984993    # create namelist for those with appropriate status
     
    14151424   
    14161425    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 ###############
     1430sub 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\">";
    14181452    &goodbye;
    14191453}
     
    14941528    @list = load_config ();
    14951529   
     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
    14961536    # entry on line will be either config.ver (== key) or config.ver.col for sorting
    14971537    # grab just the key portion
    14981538    $status = "none";
    1499     ($key) = $ARGV[1] =~ /(\w+.\w+.\w+.\w+)/; # (config.ver)
     1539    ($key) = $ARGV[1] =~ /([-\w]+\.[-\w]+\.[-\w]+\.[-\w]+)/; # (config.ver)
    15001540    $arg = $ARGV[1];
    15011541   
     
    16411681    $status = "none";
    16421682    $arg = $ARGV[1];
    1643     ($key) = $arg =~ /(\w+.\w+.\w+.\w+)/; # (config.ver)
     1683    ($key) = $arg =~ /([-\w]+\.[-\w]+\.[-\w]+\.[-\w]+)/; # (config.ver)
    16441684   
    16451685    # find appropriate config.ver entry:
     
    17911831   
    17921832    $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)
    17951835
    17961836    # look for optional sort key (config.ver[.key])
     
    19301970sub flips_report_done {
    19311971   
    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
    19341975    $line = $_[1];
    19351976   
     
    20622103sub map_report {
    20632104   
     2105    print STDOUT "A Simple Test <br>\n";
     2106
    20642107    $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)
    20672110
    20682111    # look for optional sort key (config.ver[.key])
     
    20812124    open (LIST, mknames ("modesjpg", $line)); @modeslist = <LIST>; close (LIST);
    20822125    open (LIST, mknames ("residjpg", $line)); @residlist = <LIST>; close (LIST);
     2126    open (LIST, mknames ("inmapjpg", $line)); @inmaplist = <LIST>; close (LIST);
    20832127    foreach $name (@modeslist) { chop ($name); }
    20842128    foreach $name (@residlist) { chop ($name); }
     2129    foreach $name (@inmaplist) { chop ($name); }
    20852130
    20862131    print STDOUT "You have the following choices: <br>\n";
    20872132    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>";
    20892134
    20902135    print STDOUT "Modes avaliable for this config <br>\n";
     
    21392184    print STDOUT "</form>\n";
    21402185
     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> &nbsp; </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";
    21412214    &goodbye;
    21422215   
     
    23412414            $dir = mkfiles ("html");
    23422415            $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";
    23432422            last;
    23442423        }
Note: See TracChangeset for help on using the changeset viewer.