270 likes | 793 Views
TRANSP to ElVis: elvislib By: Ben Bariteau Mentor: Doug McCune Scientific Graphics Data Monitoring Integrated with Job Monitoring Web Services ElVis Software Package Display program 45,000 lines of Java code 300 classes Summer ’08: Over 200 updates to the code
E N D
TRANSP to ElVis: elvislib By: Ben BariteauMentor: Doug McCune
ElVis Software Package • Display program • 45,000 lines of Java code • 300 classes • Summer ’08: Over 200 updates to the code • Application Programming Interface (API) • Fortran • C/C++ • Java
TRANSP and elvislib • elvislib was created primarily for TRANSP so that the Fortran and C programs within TRANSP could take advantage of the Java visualization tool ElVis • elvislib is primarily used with programs like rplot, cstate, and sigtab for displaying graphs and tables with a GUI that allows for intuitive manipulation and management tools • ElVis was created with these programs in mind, which led to the creation of elvislib for these programs to send data to ElVis
elvislib EML Transfer • elvislib stores information in memory about different types of graphs, including normal two dimensional graphs, surface plots, indexed graphs, and tables • This information is translated into EML when ef_graphwindowdisplay() is called
ElVis Markup Language (EML) • EML is an XML-based language • Designed by Steve Krenzel • Tags contain information that is sent from elvislib to ElVis • elvislib creates these tags and ElVis translates these into graphs
Hierarchical EML Structure • All EML is contained within a <visualstate> tag • A graphwindow is contained within a <graphwindow> tag • Graphs are contained within a <graph> tag
Tables • Tables can now be sent to ElVis • Changes in code: • Column structure added • Column structure allows for an array of strings • Columns have their own background and font colors, as well as font style (Italic, Bold) and a font (Serif, Monospaced, etc.) • Column has a header that is the title of the column.
Tables, contd. • Changes in code: • columnList added to Graph structure • A list of Columns contained in a Table graph. • topTextList and bottomTextList added to Graph structure • Lists of Labels that appear at the top and bottom of the Table, respectively. • Each label has it's own color, background color, font, and style attributes • Added EML output for Tables
ef_columnsetbgcolor() ef_columnsetheader() ef_columnsetfontname() ef_columnsetfontstyle() ef_columnsetfontsize() ef_columnsetfontcolor() ef_tableaddtoptext() ef_tableaddbottomtext() Table Functions • Functions added to the API concerning Tables: • ef_tablecreate() • ef_columncreate() • ef_tableaddcolumn() • ef_graphwindowaddtable() • ef_columnsetrowlabels()
Tables and EML • Tables use multiple <column> tags • Within each <column> tag there can be a number of <cell>s • Each <cell> contains a value attribute • A <column> can contain any of the attributes listed on the right • Tables can also have multiple <toptext> and <bottomtext> tags • These can contain the attributes listed on the right
Tables - Challenges • Creating a structure that could hold all the data necessary and adding it to the current structures • Getting arrays of strings from Fortran to C • Defining the color mechanism (next section)
Colors • Colors were used in ef_graphaddlabel() ef_tableaddtoptext() ef_tableaddbottomtext() ef_columnsetbgcolor() ef_columnsetfontcolor() • Previously, the API used 3 floating-point numbers from 0.0 to 1.0 to represent colors • This made compatibility easy, but it was not intuitive • Now, the API takes a string with either a color value (i.e. “rgb: 0.2 0.5 0.1”) or color name (i.e. “name: blue”) • Future colorspaces like HSV can be added
Logarithmic Z Axis in Surface Plots • The index (Z) axis of this surface plot can now be set to be logarithmic, unlike before, where it could only be linear • Default linear on left, logarithmic on right • Used through ef_graphsetzaxis()
Log Z-axis and EML • The z-axis logarithmic/linear scale control is sent through the <axis> tags • <axis> tags have a numberstyle attribute which controls the scale of a graph • This is interpreted through an <axis> with direction of “z” and a numberstyle of “4”
Short Title • shortTitle in the <graph> tag • i.e., <graph shortTitle=“TG”> • This allows for the a smaller title to be shown when the graph becomes too small to display the normal title • The top graph is large enough to show the entire title, while the bottom one is small enough to show a shortened smaller title
Short Title and EML • Short title was added to the EML through an attribute in the <graph> tag • <graph> now has an attribute called shortTitle, which specifies the short title • This is generated by elvislib when a shortTitle is specified
Gridlines • It is now possible to add gridlines to normal graphs using ef_setxgrid and ef_setygrid • Examples of their effect can be seen above (no gridlines on left, gridlines on right)
Gridlines and EML • Gridlines are shown through the showGridlines attribute on the axis tag • This can be “true” or “false”, and is generated by elvislib accordingly
Multiple ElVis Displays More than one server and/or filename • A filename beginning with '/' or '.' • A hostname or IP • localhost (uses the current computer as the host) • stderr or stdout • filegen automatically generates a filename with PID, application name, and username
Multiple ElVis Displays, contd. • Changes in code: • In graphwindow.c: • ef_initialize() now handles ElVis output environment variable exclusively • initialize() was changed to use an index to find a certain output an index to find a certain output • ef_GraphWindowSendEML() now loops through all outputs, sends EML to each • In binio.c: • binio_set_gwFile() added to set gwfile in binio.c • Challenges: • The mechanism for sending output to a file had to be circumvented with binio_set_gwFile() • All other uses of environment variables removed or changed
Acknowledgments • Doug McCune, TRANSP developer, my mentor • Eliot Feibush – ElVis creator and developer, my mentor • Andrew Zwicker, Christine Ritter, James Morgan – PPPL Science Education Program • Eric Zatz – ElVis Display-side EML Developer
Eric Zatz -CPPG summer undergrad ElVis Mark-Up Language Eliot - Mentor Ben – API, EML Matt System & Services Doug – Mentor CPPG Group Head Mike Movie Making User Enhancements Tutorials