Files
2026-08-03 18:42:47 +08:00

314 lines
7.9 KiB
Tcsh
Executable File

#!/bin/csh
#
## $Id$
## $Log$
## Revision 1.2 2005/10/05 06:18:35 nadya
## use full path for "rm". Asssume everybody has /bin/rm.
##
## Revision 1.1.1.1 2005/07/29 00:00:42 nadya
## Importing from meme-3.0.14, and adding configure/make
##
#
set pgm = $0; set pgm = $pgm:t
if ($#argv < 1) then
error:
more << "USAGE"
USAGE:
$pgm [<label> <data>] [-ps|-png <name>]
[-xlabel <xlab>] [-ylabel <ylab>]
[-xlaboff <xlaboff>] [-ylaboff <ylaboff>]
[-xrange [<x1>] : [<x2>] [-yrange [<y1>] : [<y2>]
[-key <x> <y>] [-misc <whatever>] [-file <file>]
[-size <size>] [-point <psize>] [-rm_] [-big] [-f] [-nocat]
<label> label for curve
<data> file of points to plot;
if the file does not exist, then <data>
is assumed to be a function defined in
a -misc or -file command
[-ps|-png <name>] plot to .ps or .png file <name>.ps
or <name>.png, tex file <name>.tex
plot to screen if <name> is "_screen_"
default is screen
[-xlabel <xlab>] label for x axis
[-ylabel <ylab>] label for y axis
[-xlaboff [<xoff>][,<yoff>]] offset for label for x axis
[-ylaboff [<xoff>][,<yoff>] offset for label for y axis
[-xrange [<x1>] : [<x2>]range for x axis
[-yrange [<y1>] : [<y2>]range for y axis
[-key <x> <y>] position key at <x,y>
[-title <title>] title for plot; underscores are blanked
[-misc <whatever>]+ any gnuplot command(s) separated by ';'
[-file <file>] file containing gnuplot commands;
[-size <xsize> <ysize>] scale-factor for size of plot
[-point <psize>] point size for text on plot; default = 11
[-rm_] replace underscores with blanks in
<label>, <xlab> and <ylab>
[-big] make 65in, two column figure
[-[no]color] make a [non-]color figure
[-f] force: overwrite files if they exist
[-nocat] don't print the plot script; default: cat the script to STDOUT
Plots one or more curves from files containing <x, y> pairs.
Default is to screen.
The -misc commands followed by the -file are done just before
any plot commands generated by the <label> <data> pairs.
Underscores in <title> are replaced by blanks.
Creates files:
<name>.[ps|png]
<name>.tex
tmp.tex
"USAGE"
exit 1
endif
set command = ($0 "$*")
onintr cleanup
set ncurves = 0
set label = (1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)
set data = ""
set misc = ""; set point = 11
set miscfile = $pgm.miscfile.$$.tmp
set xlaboff = ""
set ylaboff = ""
set color = ""
set force = 0
# tex figure parameters
set col = ""
set width = "\widtha"
# get input switches
while ("$1" != "")
switch ("$1")
case -ps:
case -png:
if ($2 == "_screen_") break
set name = $2:t;
if ("$1" == "-ps") then
set otype = "ps"
set out = $2.ps; set latex = $2.tex; set latex2 = $latex
else
set otype = "png"
set out = $2.png;
endif
shift
breaksw
case -key:
set key = "set key ${2},${3}"; shift; shift; breaksw
case -xlabel:
set xlab = "$2"; shift; breaksw
case -ylabel:
set ylab = "$2"; shift; breaksw
case -xlaboff:
set xlaboff = $2; shift; breaksw
case -ylaboff:
set ylaboff = $2; shift; breaksw
case -xrange:
shift;
if ($1 != ":") then
set xrange = "[$1 : $3]"; shift; shift;
else
set xrange = "[ : $2]"; shift
endif
breaksw
case -yrange:
shift;
if ($1 != ":") then
set yrange = "[$1 : $3]"; shift; shift;
else
set yrange = "[ : $2]"; shift
endif
breaksw
case -title:
set title = `echo $2 | sed s/_/" "/g`; shift; breaksw
case -misc:
if !(-e $miscfile) touch $miscfile
shift; echo "$1" >> $miscfile; breaksw
#set misc = ("$misc" "$2" ;); shift; breaksw
case -file:
set gnufile = "$2"; shift; breaksw
case -size:
set xsize = $2; shift; set ysize = $2; shift; breaksw
case -point:
shift; set point = $1; breaksw
case -rm_:
set rm_ = 1; breaksw
case -big:
set col = '*'; set width = "6.5in"; breaksw
case -color:
set color = "color"; breaksw
case -nocolor:
set color = ""; breaksw
case -f
set force = 1; breaksw
case -nocat
set nocat = 1; breaksw
default:
@ ncurves++
if ($ncurves > $#label) then
echo Too many curves specified | perl -n -e 'print stderr $_'
exit 1
endif
set label[$ncurves] = "$1"
set data = ($data $2)
shift; breaksw
endsw
shift
# echo $1
end
# check that at least one curve to be printed
#if ($ncurves < 1) goto error
# set up the file which will receive the plot
set gnuplot = $pgm.plotscript.$$.tmp
if ($?out) then
if ((-e $out) && $force == 0) then
echo "File $out already exists. Overwrite? (n)" | perl -n -e 'print stderr $_'
set ans = $<
if (!($ans == "y" || $ans == "Y")) then
exit
endif
/bin/rm $out
endif
echo Output will be to $otype file $out | perl -n -e 'print stderr $_'
if ("$otype" == "ps") then
echo "set terminal postscript eps $color $point" > $gnuplot
else
if ($point < 20) then
set psize = "small"
else if ($point < 30) then
set psize = "medium"
else
set psize = "large"
endif
echo "set terminal png $psize" > $gnuplot
endif
echo "set output '/dev/null'" >> $gnuplot
else
echo Output will be to screen | perl -n -e 'print stderr $_'
echo -n "" > $gnuplot
endif
# set up the file which will receive the latex figures (.tex file)
if ($?latex) then
if ((-e $latex) && $force == 0) then
echo "File $latex already exists. Overwrite? (n)" | perl -n -e 'print stderr $_'
set ans = $<
if ($ans == "y" || $ans == "Y") then
/bin/rm $latex
else
set latex = /dev/null
endif
endif
echo -n "" >! $latex
# print the header for a latex document
echo "\documentclass[12pt]{article}" >! tmp.tex
echo "\usepackage{times,a4,graphicx}" >> tmp.tex
endif
if ($?title) then
if ($?rm_) set title = `echo $title | sed s/_/" "/g`
echo "set title '$title'" >> $gnuplot
endif
echo "set style data linespoints" >> $gnuplot
if ($?xlab) then
if ($?rm_) set xlab = `echo $xlab | sed s/_/" "/g`
echo "set xlabel '$xlab' $xlaboff" >> $gnuplot
endif
if ($?ylab) then
if ($?rm_) set ylab = `echo $ylab | sed s/_/" "/g`
echo "set ylabel '$ylab' $ylaboff" >> $gnuplot
endif
if ($?xrange) then
echo set xrange "$xrange" >> $gnuplot
endif
if ($?yrange) then
echo set yrange "$yrange" >> $gnuplot
endif
if ($?key) then
echo "$key" >> $gnuplot
endif
if ($?xsize) then
echo set size $xsize,$ysize >> $gnuplot
endif
#foreach com ($misc)
# if ($com != ";") then
# echo -n "$com " >> $gnuplot
# else
# echo "" >> $gnuplot
# endif
#end
if (-e $miscfile) cat $miscfile >> $gnuplot
if ($?gnufile) then
cat $gnufile >> $gnuplot
endif
set plotcmd = plot
set i=1
while ($i <= $ncurves)
# plot the points
if ($?rm_) then
set curve_title = `echo $label[$i] | sed s/_/" "/g`
else
set curve_title = $label[$i]
endif
echo "curve ${i}: $curve_title" | perl -n -e 'print stderr $_'
if (-e "$data[$i]") then
echo "$plotcmd '$data[$i]' title '$curve_title'" >> $gnuplot
else
echo "$plotcmd $data[$i] title '$curve_title'" >> $gnuplot
endif
set plotcmd = replot
@ i++
end
#echo "replot" >> $gnuplot
#echo "replot" >> $gnuplot
if (!($?out)) then
echo "pause 1e6 'Hit ^C to exit: '" >> $gnuplot
else
echo "set output '$out'" >> $gnuplot
echo replot >> $gnuplot
# make a latex file if required
if ($?latex) then
echo "\begin{figure$col}" >> $latex
echo "\centerline{" >> $latex
echo " \includegraphics[width=$width]{$out}" >> $latex
echo "}" >> $latex
echo "\caption{$name}" >> $latex
echo "\label{fig:$name}" >> $latex
echo "% $command" >> $latex
echo "\end{figure$col}" >> $latex
echo "\markfigure{\ref{fig:$name}}" >> $latex
endif
endif
# end the latex document
if ($?latex) then
echo "\begin{document}" >> tmp.tex
echo "\input{$latex2}" >> tmp.tex
echo "\end{document}" >> tmp.tex
endif
# execute the gnuplot script
if (!($?nocat)) then
cat $gnuplot | perl -n -e 'print stderr $_'
endif
gnuplot $gnuplot
cleanup:
/bin/rm $pgm.*.$$.tmp