maintenance of Web interface to DEMP


  1. in filelocs.pl, define new path name(s):
    rlogin parep2 or cedr (as merrill)
    cd $MPUB/cgibin
    vi plotcases.cgi
    (for example)
    
    # $nickelhexloc = URL of hexagon map, NICKEL format
    # $nickelhexnfs = nfs loc of hexagon map, NICKEL format
    	$nickelhexloc  = $htmlroot2 . $root1area . "/orig_hex.nickel";
    	$nickelhexnfs  = $nfsroot2  . $root1area . "/orig_hex.nickel";
    
  2. in plotcases.cgi, include comment lines for new file(s);
    rlogin parep2 or cedr (as merrill)
    cd $MPUB/cgibin
    vi plotcases.cgi
    (for example)
    	# $nickelhexloc = URL of hexagon map, NICKEL format
    	# $nickelhexnfs = nfs loc of hexagon map, NICKEL format
    
  3. in plotcases.cgi, put additional arguments in call to filelocs:
    rlogin parep2 or cedr (as merrill)
    cd $MPUB/cgibin
    vi plotcases.cgi
    (for example)
    
    	$fdimetriloc,$nickeltriloc,$nickelhexloc,$triloc,
    
    	$fdimetrinfs,$nickeltrinfs,$nickelhexnfs,$trinfs,
    
  4. in plotcases.cgi, print form with new path names:
    rlogin parep2 or cedr (as merrill)
    cd $MPUB/cgibin
    vi plotcases.cgi
    (for example)
    
            if ($nickelhexnfs ne '' && -e $nickelhexnfs)
                    { print '+ ';
                    print "<a href=\"$nickelhexloc\">\n";
                    print "hexagons, NICKEL format</a><br>\n";
                    }
            elsif ($nickeltrinfs ne '' && -e $nickeltrinfs)
                    {
                    print '0 ';
                    print "hexagons, NICKEL format";
    print <<ENDOFTEXT3;
    <FORM METHOD=POST ACTION=/mpub/cgibin/dempcalc.cgi>
    <!- pass through variables from earlier forms ->
    <INPUT TYPE="HIDDEN" NAME="whattocalc" VALUE="nickelhex">
    <INPUT TYPE="HIDDEN" NAME="user" VALUE=\"$user\">
    <INPUT TYPE="HIDDEN" NAME="runid" VALUE=\"$runid\">
    <INPUT TYPE="HIDDEN" NAME="area" VALUE=\"$area\">
    <INPUT TYPE="HIDDEN" NAME="sumlevel" VALUE=\"$sumlevel\">
    <INPUT TYPE="HIDDEN" NAME="nickeltrinfs" VALUE=\"$nickeltrinfs\">
    <INPUT TYPE="HIDDEN" NAME="nickelhexnfs" VALUE=\"$nickelhexnfs\">
    <INPUT TYPE="SUBMIT" VALUE="calculate">
    </FORM>
    ENDOFTEXT3
                    }
            else
                    { print '- ';
                    print "hexagons, NICKEL format<br>\n";
                    }
    
    
  5. in dempcalc.cgi, input new path name(s):
    rlogin parep2 or cedr (as merrill)
    cd $MPUB/cgibin
    vi plotcases.cgi
    (for example)
    	$nickelhexnfs=$input{'nickelhexnfs'};
    
  6. in dempcalc.cgi, write task directives file in /tmp/merrill/
    rlogin parep2 or cedr (as merrill)
    cd $MPUB/cgibin
    vi plotcases.cgi
    (for example)
    
    elsif ( $whattocalc eq 'nickelhex' )
    	{
    	print "<p>\n";
    	print "input: triangles, NICKEL format: ",$nickeltrinfs,"<br>\n";
    	print "output: hexagons, NICKEL format: ",$nickelhexnfs,"<br>\n";
    	# store temporary script file to run in background
    	local($thisjob) = ">/tmp/merrill/" . $runid . ".tmp";
    	local($hostname) = `hostname`;
    	chop $hostname;
    	open (THISJOB,$thisjob);
    	print THISJOB $hostname, ' ',$runid, ' ',$user, ' ',$whattocalc,"\n";
    	print THISJOB "sumlevel ",$sumlevel,"\n";
    	print THISJOB "nickeltrinfs ",$nickeltrinfs,"\n";
    	print THISJOB "nickelhexnfs ",$nickelhexnfs,"\n";
    	close (THISJOB);
    	# make files world writeable so background job can delete them
    	`chmod 777 /tmp/merrill/*`;
    	# message to user
    	print "<p>Your request has been submitted.  You will receive ";
    	print "e-mail when it is completed.<p> \n";
    	# send message to merrill
    	local($tomerrill) = "| /usr/ucb/mail -s dempdemon merrill";
    	open (TOMERRILL,$tomerrill);
    	print TOMERRILL "as user merrill on ",$hostname, ", type dempdemon\n";
    	close (TOMERRILL);
    	}
    
  7. submit form by clicking "calculate" box in "plot cases" web page:
    on parep2
    on cedr

  8. check correctness of submitted task:
    rlogin  parep2 (as merrill) if parep2 Web server was used
    or rlogin cedr (as merrill) if cedr Web server was used
    cat /tmp/merrill/*
    
  9. in dempd.pl, point to new perl program file:
    rlogin parep2 or cedr (as merrill)
    cd $MPUB/cgibin/batch
    vi dempd.pl
    (for example)
    	require ("/CEDRCD/data1/merrill/cgibin/batch/nickelhex.pl");
    
  10. in dempd.pl, call new perl program:
    rlogin parep2 or cedr (as merrill)
    cd $MPUB/cgibin/batch
    vi dempd.pl
    (for example)
    	elsif ($whattocalc eq 'nickelhex')
    		{ if ($lineno != 4)
    			{ $errors++;
    			print TOMERRILL "\nError. ";
    			print TOMERRILL $whattocalc," requires 4 lines."; }
    		else
    			{ # do calculation
    			&nickelhex (@params); } }
    
  11. create new perl program file (for example nickelhex.pl):
    rlogin parep2 or cedr (as merrill)
    cd $MPUB/cgibin/batch
    vi nickelhex.pl
    (for example)
    #!/usr/local/bin/perl
    # /h/merrill/cgibin/batch/nickelhex.pl 10/1/96
    
    require ("/CEDRCD/data1/merrill/cgibin/batch/rununix.pl");
    
    sub nickelhex {
    	#convert triangulated NICKEL file to hexagons
    	local($runid,$sumlevel,$nickeltrinfs,$nickelhexnfs) = @_;
    
    	#TOMERRILL is the (global) descriptor of an open file.
    
    	#print parameters
    	print TOMERRILL "\n\n";
    	# unique run id
    	print TOMERRILL "runid=",$runid,"\n";
    	# summary geog level, eg nmcdtr80
    	print TOMERRILL "sumlevel=",$sumlevel,"\n";
    	# NFS location of triangle NICKEL file
    	print TOMERRILL "nickeltrinfs=",$nickeltrinfs,"\n";
    	# NFS location of hexagon NICKEL file
    	print TOMERRILL "nickelhexnfs=",$nickelhexnfs,"\n";
    
    	# create UNIX script file
    	local($unix) = ">/tmp/merrill/" . $runid . ".csh";
    	open (UNIX, $unix) || die "Cannot open $unix: $!";
    	# descriptive header lines
    	print UNIX '#!/bin/csh -fx',"\n";
    	print UNIX '# /tmp/merrill/',$runid,".csh\n";
    	# move to /tmp/merrill
    	print UNIX "cd /tmp/merrill\n";
    	# create seedis subdirectory
    	print UNIX 'mkdir /data/csa3/merrill/',$runid,"\n";
    	# copy triangulated nickel file to seedis
    	print UNIX 'cat ',$nickeltrinfs;
    	print UNIX ' >/data/csa3/merrill/',$runid,"/temp.nickel\n";
    	# check input files in seedis
    	print UNIX 'ls -al /data/csa3/merrill/',$runid,"\n";
    	# execute seedis job
    	print UNIX 'rsh -n seedis.lbl.gov "@[merrill.dempcalc]divide1.com ';
    	print UNIX $runid,' ',$sumlevel,'"',"\n";
    	# check output file in seedis
    	print UNIX 'ls -al /data/csa3/merrill/',$runid,"\n";
    	# copy output file from seedis
    	print UNIX 'cat /data/csa3/merrill/',$runid,'/temp_divided.nickel >';
    	print UNIX $nickelhexnfs,"\n";
    	# remove output file from seedis
    	print UNIX 'rm /data/csa3/merrill/',$runid,'/temp_divided.nickel',"\n";
    	# remove subdirectory from seedis
    	print UNIX 'rmdir /data/csa3/merrill/',$runid,"\n";
    	# check output file in final location
    	print UNIX 'ls -al ',$nickelhexnfs,"\n";
    	system ($cmd);
    	close UNIX;
    
    	# run UNIX script file, check output file,
    	# delete script, and send completion message
    	&rununix ($nickelhexnfs);
    
    }
    1; # return true
    
  12. create new VMS program file (for example divide1.com):
    rlogin seedis (as merrill)
    set def [merrill.dempcalc]
    vi divide1.com
    (for example)
    $! merrill_default_diski:[merrill.dempcalc]divide1.com 9/30/96
    $! bisect all segments of a nickel file
    $! calculate temp_divided.nickel from temp.nickel
    $! 'p1' = runid.  This process will run in [merrill.'p1']
    $! 'p2' = summary level e.g. nmcdtr80
    $pl:=$st_bin:pl
    $set default [merrill.'p1']
    $dir/size/date
    $pl 1-10 temp.fdime
    $define sy$seedis disk$seed3:
    $define a sy$seedis:[seedis.map_routines]
    $! bisect all segments of temp.nickel
    $@a:nickel_divide temp.nickel 'p2' 2 temp_divided.nickel
    $delete temp.nickel.*
    $purge
    $dir/size/date
    $pl 1-10 temp_divided.nickel
    
  13. check correctness of submitted task:
    rlogin  parep2 (as merrill) if parep2 Web server was used
    or rlogin cedr (as merrill) if cedr Web server was used
    cat /tmp/merrill/*
    
  14. complete submitted task:
    rlogin  parep2 (as merrill) if parep2 Web server was used
    or rlogin cedr (as merrill) if cedr Web server was used
    dempdemon
    

May 1998 updates for 22 samples (2 real, 20 random)

assign cases to geocodes
assign cases to triangles
obtain orig and DEMP case locations
calculate RR (GK, k=10 and 20)
variance of log RR

back to DEMP Web interface
back to Deane Merrill's private software notes
http://parep2.lbl.gov/mpub/cgibin/maintain.html 5/4/98
/CEDRCD/data1/merrill/cgibin
dwmerrill@lbl.gov
http://parep2.lbl.gov/~merrill