Ignore:
Timestamp:
Jan 3, 2008, 5:06:00 PM (17 years ago)
Author:
fnevgeny
Branch:
default
Phase:
public
Message:

Added plotting capabilities.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • source/class/pf/Application.js

    r29 r31  
    231231
    232232
    233 function NumPrint(v)
     233function NumPrint(v, prec)
    234234{
    235235    var s;
     236   
     237    if (!prec) {
     238        prec = 3;
     239    }
     240   
    236241    if (v == 0.0) {
    237242        s = "0";
     
    241246    } else
    242247    if (Math.abs(v) < 1.e6 && Math.abs(v) >= 0.1) {
    243         s = sprintf("%.3f", v);
     248        s = sprintf("%." + prec.toString() + "f", v);
    244249    } else {
    245         s = sprintf("%.3e", v);
     250        s = sprintf("%." + prec.toString() + "e", v);
    246251    }
    247252   
     
    12741279            sp.set(
    12751280            {
     1281                height          : "100%",
    12761282                left            : 1,
    12771283                right           : 1,
     
    12931299                border          : "inset-thin",
    12941300                overflow        : "scroll",
    1295                 height          : 500,
     1301                height          : "100%",
    12961302                width           : "100%",
    12971303                paddingLeft     : 4,
     
    14811487
    14821488            lv.setWidth("100%");
    1483             lv.setHeight(400);
     1489            lv.setHeight(450);
    14841490            lv.setBackgroundColor("white");
    14851491            lv.setBorder("dark-shadow");
     
    14901496        },
    14911497       
    1492         aboutCB : function(ev)
    1493         {
    1494             this.aboutWindow.open();
     1498        drawCB : function(ev)
     1499        {
     1500            var canvas = this.canvas;
     1501           
     1502            var pname = this.guiParameter.getValue();
     1503            var vmin = this.guiMinParam.getNumValue();
     1504            var vmax = this.guiMaxParam.getNumValue();
     1505            var npoints = this.guiParamPoints.getValue();
     1506           
     1507            if (npoints < 2 || !pname) {
     1508                return;
     1509            }
     1510
     1511            var dimension = this.gui_compare_dim.getSelectedValue();
     1512            var scale = this.gui_compare_units.getSelectedValue();
     1513
     1514            var par0;
     1515            switch (pname) {
     1516            case "N_e":
     1517                par0 = this.e.getN();
     1518                break;
     1519            case "T_e":
     1520            case "T":
     1521                par0 = this.e.getT();
     1522                break;
     1523            case "T_i":
     1524                par0 = this.i.getT();
     1525                break;
     1526            case "B":
     1527                par0 = this.B;
     1528                break;
     1529            default:
     1530                return;
     1531            }
     1532           
     1533            var xdata = new Array;
     1534            for (var j = 0; j < npoints; j++) {
     1535                var x = par0*(vmin + (vmax - vmin)*j/(npoints - 1));
     1536                xdata.push(x);
     1537            }
     1538                       
     1539            var wxmin = xdata[0];
     1540            var wxmax = xdata[xdata.length - 1];
     1541
     1542            var wymin = 0;
     1543            var wymax = 0;
     1544
     1545            var sets = new Array;
     1546            var first = true;
     1547            for (var i = 0; i < this.favorites.length; i++) {
     1548                var fav = this.favorites[i];
     1549                var entity = fav.entity;
     1550               
     1551                if (entity.dimension != dimension) {
     1552                    continue;
     1553                }
     1554               
     1555                var species = fav.species;
     1556                var vname = this.getEntityFullName(entity, species);
     1557
     1558                var set   = new Array;
     1559                var ydata = new Array;
     1560                for (var j = 0; j < npoints; j++) {
     1561                    var par = xdata[j];
     1562
     1563                    switch (pname) {
     1564                    case "N_e":
     1565                        this.e.setN(par);
     1566                        this.updatePlasmaParameters();
     1567                        break;
     1568                    case "T_e":
     1569                        this.e.setT(par);
     1570                        break;
     1571                    case "T_i":
     1572                        this.i.setT(par);
     1573                        break;
     1574                    case "T":
     1575                        this.e.setT(par);
     1576                        this.i.setT(par);
     1577                        this.r.setT(par);
     1578                        break;
     1579                    case "B":
     1580                        this.B = par;
     1581                        break;
     1582                    }
     1583                   
     1584                    var value = scale*this.evaluateEntityValue(entity, species);
     1585                   
     1586                    if (first) {
     1587                        wymin = value;
     1588                        wymax = value;
     1589                        first = false;
     1590                    } else {
     1591                        if (value < wymin) {
     1592                            wymin = value;
     1593                        }
     1594                        if (value > wymax) {
     1595                            wymax = value;
     1596                        }
     1597                    }
     1598                   
     1599                    ydata.push(value);
     1600                }
     1601                set.x = xdata;
     1602                set.y = ydata;
     1603                set.legend = vname;
     1604                sets.push(set);
     1605            }
     1606           
     1607            // Restore parameter
     1608            switch (pname) {
     1609            case "N_e":
     1610                this.e.setN(par0);
     1611                this.updatePlasmaParameters();
     1612                break;
     1613            case "T_e":
     1614                this.e.setT(par0);
     1615                break;
     1616            case "T_i":
     1617                this.i.setT(par0);
     1618                break;
     1619            case "T":
     1620                this.e.setT(par0);
     1621                this.i.setT(par0);
     1622                this.r.setT(par0);
     1623                break;
     1624            case "B":
     1625                this.B = par0;
     1626                break;
     1627            }
     1628           
     1629            canvas.clear();
     1630           
     1631            canvas.setViewportCoordinates(0.15, 0.1, 0.9, 0.9);
     1632            dwx = Math.abs(wxmax - wxmin);
     1633            if (dwx == 0) {
     1634                dwx = wxmax;
     1635            }
     1636            dwy = Math.abs(wymax - wymin);
     1637            if (dwy == 0) {
     1638                wymin = 0.0;
     1639                wymax = 1.0;
     1640            }
     1641            canvas.setWorldCoordinates(Math.max(0, wxmin - 0.05*dwx),
     1642                Math.max(0, wymin - 0.05*dwy),
     1643                wxmax + 0.05*dwx, wymax + 0.05*dwy);
     1644           
     1645            canvas.drawFrame("black");
     1646            canvas.drawTicks("x", "blue");
     1647            canvas.drawTicks("y", "blue");
     1648           
     1649            canvas.setColor("red");
     1650            for (var i = 0; i < sets.length; i++) {
     1651                var set = sets[i];
     1652                canvas.drawPolyLineW(set.x, set.y);
     1653               
     1654                delete set;
     1655            }
     1656           
     1657            delete sets;
     1658           
     1659            canvas.paint();
    14951660        },
    14961661       
     
    14991664            var page_id = this.renderTabPage("Plot",
    15001665                "pf/image/tab-plot.png");
    1501         },
    1502 
    1503 
     1666
     1667            var sp = new qx.ui.splitpane.HorizontalSplitPane("1*", 300);
     1668            sp.set(
     1669            {
     1670                height          : "100%",
     1671                width           : "100%",
     1672                left            : 1,
     1673                right           : 1,
     1674                top             : 1,
     1675                bottom          : 1,
     1676                border          : "inset-thin",
     1677                showKnob        : true
     1678            });
     1679            page_id.add(sp);
     1680                       
     1681            var left_pane  = sp.getLeftArea();
     1682            left_pane.setPaddingRight(4);
     1683            var right_pane = sp.getRightArea();
     1684            right_pane.setPaddingLeft(4);
     1685
     1686            var canvas = new pf.ui.canvas.Plotter();
     1687            canvas.setBackgroundColor("white");
     1688            canvas.setWidth("100%");
     1689            canvas.setHeight("100%");
     1690            left_pane.add(canvas);
     1691            this.canvas = canvas;
     1692
     1693
     1694            var gl = new qx.ui.layout.GridLayout;
     1695            gl.set(
     1696            {
     1697                left:   4,
     1698                right:  4,
     1699                top:    4
     1700            });
     1701           
     1702            gl.setVerticalSpacing(4);
     1703            gl.setHorizontalSpacing(6);
     1704            gl.setColumnCount(2);
     1705            gl.setColumnWidth(0, 150);
     1706            gl.setColumnWidth(1, 100);
     1707            gl.setRowCount(5);
     1708            gl.setRowHeight(0, 30);
     1709            gl.setRowHeight(1, 30);
     1710            gl.setRowHeight(2, 30);
     1711            gl.setRowHeight(3, 30);
     1712            gl.setRowHeight(4, 30);
     1713            right_pane.add(gl);
     1714
     1715            var l, e;
     1716
     1717            var btn = new qx.ui.form.Button("Redraw");
     1718            btn.addEventListener("execute", this.drawCB, this);
     1719            btn.setTop(20);
     1720            btn.setLeft(20);
     1721            gl.add(btn, 0, 0);
     1722
     1723            l = new qx.ui.basic.Label("Parameter to vary:");
     1724            e = new pf.ui.ComboBox;
     1725            e.add(new qx.ui.form.ListItem("N_e", null, "N_e"));
     1726            e.add(new qx.ui.form.ListItem("T",   null, "T"));
     1727            e.add(new qx.ui.form.ListItem("T_e", null, "T_e"));
     1728            e.add(new qx.ui.form.ListItem("T_i", null, "T_i"));
     1729            e.add(new qx.ui.form.ListItem("B",   null, "B"));
     1730            this.guiParameter = e;
     1731            gl.add(l, 0, 1);
     1732            gl.add(e, 1, 1);
     1733
     1734            l = new qx.ui.basic.Label("Minimum scale:");
     1735            e = new pf.ui.TextField(0.3);
     1736            this.guiMinParam = e;
     1737            gl.add(l, 0, 2);
     1738            gl.add(e, 1, 2);
     1739
     1740            l = new qx.ui.basic.Label("Maximum scale:");
     1741            e = new pf.ui.TextField(3.0);
     1742            this.guiMaxParam = e;
     1743            gl.add(l, 0, 3);
     1744            gl.add(e, 1, 3);
     1745
     1746            l = new qx.ui.basic.Label("Number of points:");
     1747            e = new pf.ui.Spinner(2, 10, 100);
     1748            this.guiParamPoints = e;
     1749            gl.add(l, 0, 4);
     1750            gl.add(e, 1, 4);
     1751        },
     1752
     1753
     1754        aboutCB : function(ev)
     1755        {
     1756            this.aboutWindow.open();
     1757        },
     1758       
    15041759        buildMenu : function()
    15051760        {
     
    17121967            w.setShowMaximize(false);
    17131968           
    1714             str = 'Plasma Formulary Interactive.<br/>'         +
    1715                   '$Revision$.'                         +
    1716                   '<p>Written by Evgeny Stambulchik.</p>'      +
    1717                   '<p>Based on the Qooxdoo-' + qx.core.Version +
     1969            str = 'Plasma Formulary Interactive.<br/>'      +
     1970                  '$Revision$.'                      +
     1971                  '<p>Written by Evgeny Stambulchik.</p>'   +
     1972                  '<p>Using the Qooxdoo-' + qx.core.Version +
    17181973                  ' toolkit.</p>';
    17191974
Note: See TracChangeset for help on using the changeset viewer.