start coding wavelist method wf_add_var(), in preparation for future
[gwave-svn.git] / README
blobd37cc14f865806697156fca8f3a923b8141d8e16
2 CAUTION: gwave2 is an experimental port of gwave to Gtk-2 using
3 the guile-gnome-platform toolkit.   This alpha release may still
4 crash or contain other bugs.
8 gwave - a  viewer for the output of spice-like simulators and other
9 sorts of of analog data.
11 by:
13 Steve Tell 
14 steve@telltronics.org
16 building and Installation:
17         See the INSTALL file
19 Usage:
20         gwave [options] [waveform-file ...]
22 The gwave main window is dominated by one or more "WavePanels" or
23 graticules in which waveforms can be displayed.  WavePanels can be
24 added and deleted with the menus.
26 As waveform files are loaded from the command line or File->Read menu
27 item, a window containing a scrolling list of variables in the file
28 pops up.  Use the left mouse button to drag-and-drop variables into
29 the WavePanels.  Double-clicking a variable in the the list adds it to
30 the currently selected panel.  If you choose to close the variable
31 list to neaten up your desktop, or lose the list under other windows,
32 use the View->Variable List menu to open it again or bring it to
33 the top.
35 To the left side of the WavePanels are scrolling lists of buttons 
36 corresponding to each waveform shown in the panel.  A waveform shown
37 in a panel is called a VisibleWave.   
38 There are two GUI functions overloaded onto the button for a
39 VisibleWave:
40 - Click with the left mousebutton to "select" one or more VisibleWaves.
41 - Press and hold the right mousebutton to pop up a menu of operations
42 related to that particular VisibleWave.  
44 To remove waves from the display , select one or more of them and then
45 press the "delete" button at the top of the main window.  Alternately, use
46 the delete item on the VisibleWave-button popup menu.
48 Click on the waveform panels with the left and center mouse buttons to
49 set two cursors for measuring.  Hold down these mouse buttons to drag
50 the cursors.
52 Pressing and holding the right mouse button while the cursor is in a
53 waveform panel brings up a popup menu.  From this menu you can insert
54 and delete waveform panels.  Some of the zoom commands are also
55 replicated on this menu.  
57 Zooming of the Y axis to magnify a signal verticaly is only available
58 on the wavepanel popup-menu because it affects each wavepanel
59 seperately.  By default, each wavepanel automaticly scales to enclose
60 the minimum and maximum values of the signals displayed in it.  Adding
61 or removing signals may change the y-axis extents.  After a Y-zoom or
62 XY-zoom operation, the Y axis for that particular wavepanel changes to
63 "manual" mode and remains fixed.  To restore the panel to full-size
64 with automatic Y zooming, select the "Zoom Y Full + Auto" menu option.
67 Exporting data.
69 A selected subset of the data from a waveform file may be exported in
70 a tabular ascii format for postprocessing by external programs.
71 Select "Export Data..." from the File menu of the waveform variable
72 list window.
74 In the current version of gwave, data from multiple files, or from
75 multiple independent variables within a single file, cannot be
76 combined and exported to a single file.
78 Plotting.
80 A view of the displayed waveforms can be plotted to postscript,
81 bitmap, and other formats for printing and documenataion.  
82 All plot rendering is handled by external programs; currently gnu graph
83 and gnuplot are supported.
84 Choose the "Plot..." item from the main window or from any wavepanel's
85 popup menu. 
87 Only a subset of the features of the external plot-rendering tools are
88 directly available from the plot dialog box.  To make more advanced
89 use of these tools, select "Keep Tempfiles" in the plot dialog box.
90 This will preserve all of the temporary files and scripts used to
91 drive the external plot-rendering tool.  These files will have names
92 generated from the name of the plot output by appending suffixes.  Consult
93 the documentation for each plot-rendering tool for information on additional
94 options that can be used in the script files.
96 Additional plot-rendering tools can be supported by writing an
97 appropriate scheme module; see export-gnugraph.scm and export-gnuplot.scm
98 for examples.
100 Configuration save/restore
102 A gwave panel and VisibleWave setup can be saved and restored.  To save 
103 all settings for all data files, use the "Save Configuration as Script" from
104 the man window's File menu.   To save the configuration for one file only,
105 use the "Save" option on that file's scrolling variable-list window.
107 Scripts saved by either method can be run to restore gwave
108 configuration in two ways: 
109 - From the main window of a fresh gwave session, use the "File->Execute
110   Script" menu item.  
111 - From the unix shell command line.  Either type "gwave -s <script>," or
112 simply type the name of the script.  Either way, gwave will start and run the
113 named script, producing wave panels set up exactly as they were when saved.
115 Scripts written by gwave that restore only a single file's
116 configuration can also be applied to another file, provided that the
117 second data file has variables with the same names as those in the
118 first.  Load the new data file, using the main window File->Read menu
119 item.  Then, from the variable-list File menu, pick "Apply Script to
120 File" and choose the script.  Variables in the new data file will be
121 displayed in panels in the same manner as those from the original
122 file.  This can be extremely useful, say for comparing the results of
123 simulating the same circuit under different temperature or component-value
124 conditions.
126 In addition to the configuration-script-writing facilities described
127 here, you are welcome to create your own guile scripts for specialized
128 gwave applications.  For general guile information, see
129 http://www.gnu.org/software/guile/guile.html 
131 For information on gwave-specfic features available for scripting
132 gwave using guile, see the text files gwave-concepts.txt,
133 gwave-hooks.txt, gwave-procedures.txt, and gwave-variables.txt All of
134 gwave's menus and many of its user-interface features are written in
135 guile; the code in the scheme subdirectory may also be useful as an
136 example.
139 Remote Control
141 A running gwave process may be remotely controlled by any process that
142 has permission to connect to the same X server.  Use the "xauth" and
143 "xhost" utilities carefully to control access to your X server at all
144 times.  This is especialy true when running gwave; anyone who can
145 connect to your X server can cause your gwave to execute arbitrary
146 guile code.
148 The gwave-exec command sends a single guile expression to gwave to
149 be executed, and displays the result and output of that command.
151 For example 
152         gwave-exec '(x-zoom! 10e-6 20e-6)'
154 will zoom gwave's display so that the region of time from 10 to 20
155 nanoseconds is visible.
157 The gwaverepl program enters an interactive "read-evaluate-print" loop
158 in which multiple guile expressions may be entered.  Each expression
159 is evaultated, and the results printed.  Gwaverepl uses the GNU
160 Readline facility for input line-editing and history scrollback, so
161 all of the usual emacs (or vi) editing keys may be used.  Type the
162 End-Of-File character (usually Control-D) to exit gwaverepl.
165 Bug: do not use gwave-exec or gwaverepl when running multiple
166 instances of gwave at a time on the same X server.
169 Waveform Input files.
171 Gwave understands CAzM transient output (.N/.B/.W) files, the binary
172 and ascii outputs from HSPICE (.tr0, .sw0, and .ac0) files, Ascii
173 nanosim "out" format, and tabular ascii files with a header line.
174 Gwave tries to guess the type of the file based on filename, and then
175 tries all file formats until one succedes.
177 Details on using Gwave with the output of various simulators:
179 Berkeley Spice3F5 and ng-spice.  Gwave can read both the the ascii and
180 binary forms of the spice "rawfile" output.  If difficulty is
181 encountered with the binary format, Try selecting the ascii form by
182 setting the environment variable SPICE_ASCIIRAWFILE to "1" before
183 running spice3. 
185 Reading of binary rawfiles has only been tested with both ng-spice and
186 gwave running on a little-endian machine.  Your mileage may vary (but
187 please send bug reports!)
190 GnuCAP (http://www.gnu.org/software/gnucap), and its predecessor 
191 ACS (Al's Circuit Simulator, http://www.geda.seul.org/tools/acs/index.html)
192 Gwave should identify and read ACS/GnuCAP output files, generated with
193 the '>' option to a .tran statement.
195 Synopsys (formerly Avanti, formerly Meta Software) HSPICE.
196 Gwave should work with both ascii and binary output in the form of
197 .tr0/.sw0/.ac0 files.  If one form doesn't work for you, try the other form.
198 I used to have problems with some .ac0 files but I believe this is fixed. 
199 Try putting ".options probe" in your input file if you have troubles.
201 Tanner Research T-Spice.
202 It has been a while since I tried tspice, but gwave should read the output,
203 at least from transient analysis runs.  T-Spice output is in a variant of the
204 CAzM format, not surprising since Tanner bought the rights to CAzM from MCNC.
206 Silvaco SmartSpice
207 Gwave works with the variant of berkeley spice rawfile format produced
208 by SmartSpice.  Both ascii and binary files should work, although this
209 hasn't been tested recently.
211 Apache Design Automation NSPICE
212 Nspice produces yet another variant of the berkeley spice3 rawfile format.
213 Both ascii and binary files should work.
215 Synopsys Nanosim
216 GWave can read the ".out" format from nanosim.
218 Your own custom waveforms:
220 The easiest of the input formats to generate with simple scripts and
221 other tools is the "ascii" format.  See the ACS-simulator output file
222 tpwl.acs in the examples directory for an example of this format.  The
223 first line lists the variable names, seperated by whitespace.  The
224 variable in the first column is assumed to be the independent
225 variable, for example "time."  Subsequent lines in the file contain
226 the data, one timestep per line.  The independent variable must be
227 nondecreasing.  Lines in the file can be arbitrarily long.
229 Note that the '#' in examples/tpwl.acs is for the benefit of other
230 tools (such as gnuplot), that don't expect column titles or variable
231 names in the file.  To gwave, the first line is not a comment but
232 contains whitespace-seperated fields naming the variables.  The result
233 is that gwave thinks the independent variable name is "#Time," but
234 don't let that bother you.
237 Bugs:
239 An oft-reported problem in gwave is that the scrolling variable list
240 window is unable to scroll and show more than one screen of variables
241 when your simulation has a very large number of them.  This is
242 actually a limitation in the Gtk+ toolkit; srolling windows can't be
243 taller than the 32,768 pixel limitation of X11 ofscreen pixmaps.
244 Workaround: probe fewer variables, or use sp2sp to select only the
245 ones you need.
249 ----------------------------------------------------------------------
251 The sp2sp utility.  
253 In addition to gwave, I've included a utility program called "sp2sp"
254 (for spice-to-spice).  It uses the same spicefile reaer code to
255 convert among some of the goofy raw file formats output by spice-like
256 simulators.  Its primary output format is the simple "ascii" format,
257 consisting of one line per step, with whitespace-seperated columns.
258 This format can be read by gwave, but is also ideal for feeding to
259 awk, perl, or gnuplot.
261 A complete manual page for sp2sp is provided and installed, but here are
262 a few hints:
264 Unlike gwave itself, sp2sp does not autodetect the file format.  Use
265 the -t option to specify the input file format.
267 sp2sp can produce arbitrarily long output lines.  This can cause
268 trouble with very old versions of some unix utilities.
270 Example sp2sp usage:
272         sp2sp -t hspice aoi.W.tr0
274 ----------------------------------------------------------------------
275 This tool is far from complete. Partial contents of the To Do list:
277 - better handling of datafiles containing complex numbers.  Currently, 
278   these files are read, but only the real part can be displayed.  
279   Workaround: Sp2sp prints out both the real and imaginary parts; convert
280   the file to generic ascii format using sp2sp.
282 - Send feedback and error messages from loading of files to a popup window
283   or status line instead of to stdout or stderr.
284 - Drag-and-drop to move waveform from one panel to another
285 - More guile methods to round out the interface, including:
286         access to selected-VisibleWave list, others.
287 - Drawing a labeled graticule in the waveform area
288 - Seperate lists for selecting voltage/current/etc. types of variables
289 - Documentation, both user's manual and programmer's manual.
290   Autodocs for guile primitives need to be extracted into text files.
292 ----------------------------------------------------------------------
293 Acknowledgements
295 Thanks to my colleagues at work including John Poulton, John Eyles,
296 Fred Heaton, Trey Greer, and Teva Stone for giving gwave heavy use
297 over the last several years.
299 Thanks to Greg Badros and Maciej Stachowiak for the SCWM window
300 manager, which inspired me to use guile as the extension language for
301 gwave.  A number of code fragments and a bit of the general style of
302 the Guile/C interaction was borrowed from SCWM.  Any misinterpretation
303 and bugs introduced along the way are most certainly my fault.
305 And last but not least, thanks to the authors of Gtk+, Guile, and
306 Guile-gnome-platform for some great building blocks.