Changeset 6330


Ignore:
Timestamp:
18/01/10 16:16:55 (9 years ago)
Author:
pnorton
Message:

Started to implement multiple line selection.

Location:
qesdi/graphplotter/trunk
Files:
4 added
4 edited

Legend:

Unmodified
Added
Removed
  • qesdi/graphplotter/trunk/development.ini

    r6311 r6330  
    5050 
    5151[logger_root] 
    52 level = INFO 
     52level = DEBUG 
    5353handlers = console 
    5454 
  • qesdi/graphplotter/trunk/graphplotter/controllers/buildplot.py

    r6313 r6330  
    2929        if c.selectedDataFile != '': 
    3030             
    31             dfConfig = cr.getConfig(c.selectedDataFile) 
    32             reader = DataReader(dfConfig['path'], dfConfig['axisLookup']) 
     31            self._addDataFileSelection(params, cr) 
    3332             
    34             c.variables = [''] + reader.getVariableNames() 
    35             c.selectedVariable = params.get('variable', '') 
    36              
    37             if c.selectedVariable != '': 
    38                  
    39                 c.axis = [''] + reader.getAxisNames(c.selectedVariable) 
    40                 c.selectedAxis = params.get('axis', '') 
    41                  
    42                 if c.selectedAxis != '': 
    43                      
    44                     for k in params: 
    45                         if k[:4] == 'sel_': 
    46                             log.debug("k = %s" % (k,)) 
    47                             setattr(c, k, params[k]) 
    48                                              
    49                     c.axisSelect = {} 
    50                      
    51                     for ax in c.axis: 
    52                         if ax in ['', c.selectedAxis]: 
    53                             continue 
    54                          
    55                         vals = reader.getAxisValues(c.selectedVariable, ax) 
    56                          
    57                         if type(vals[0]) == str: 
    58                             c.axisSelect[ax] = [''] + vals 
    59                         else: 
    60                             c.axisSelect[ax] = "%s - %s" % (min(vals), max(vals)) 
    6133         
    6234        return render('buildplot.html') 
     35 
     36    def _addDataFileSelection(self, params, cr): 
     37         
     38        dfConfig = cr.getConfig(c.selectedDataFile) 
     39        reader = DataReader(dfConfig['path'], dfConfig['axisLookup']) 
     40         
     41        c.variables = [''] + reader.getVariableNames() 
     42        c.selectedVariable = params.get('variable', '') 
     43         
     44        if c.selectedVariable != '': 
     45             
     46            self._addVariableSelection(params, reader) 
     47             
     48 
     49 
     50    def _addVariableSelection(self, params, reader): 
     51        c.axis = [''] + reader.getAxisNames(c.selectedVariable) 
     52        c.selectedAxis = params.get('axis', '') 
     53         
     54        if c.selectedAxis != '': 
     55             
     56            self._addAxisSelection(params, reader) 
     57             
     58                     
     59    def _addAxisSelection(self, params, reader): 
     60         
     61        for k in params: 
     62            if k[:4] == 'sel_': 
     63                setattr(c, k, params[k]) 
     64                                 
     65        c.axisSelect = {} 
     66         
     67        for ax in c.axis: 
     68            if ax in ['', c.selectedAxis]: 
     69                continue 
     70             
     71            vals = reader.getAxisValues(c.selectedVariable, ax) 
     72             
     73            if type(vals[0]) == str: 
     74                c.axisSelect[ax] = [''] + vals 
     75            else: 
     76                c.axisSelect[ax] = "%s - %s" % (min(vals), max(vals)) 
     77         
     78        log.debug("c.axisSelect = %s" % (c.axisSelect,)) 
  • qesdi/graphplotter/trunk/graphplotter/lib/plot_builder.py

    r6319 r6330  
    2929    def buildPlot(self): 
    3030         
    31         selection = self._buildSelection() 
     31        selections = self._buildSelections() 
    3232         
    33         log.debug("selection = %s" % (selection,)) 
     33        log.debug("selections = %s" % (selections,)) 
    3434         
    3535        reader = DataReader(self.config['path'], self.config['axisLookup']) 
    36          
    37         log.debug("reader.getData = %s" % (reader.getData,)) 
    38         xdata, ydata = reader.getData(self.params['variable'],  
    39                             self.params['axis'], selection) 
    40          
    41         log.debug("xdata = %s, ydata = %s" % (xdata, ydata,)) 
    4236         
    4337        plt = Plot() 
     
    4640        plt.setXLabel(self.params['axis']) 
    4741         
    48         lineName = self._getLineName(selection) 
     42        s = set(selections[0].items()) 
    4943         
    50         plt.draw(xdata, ydata, label=lineName) 
     44        for sel in selections[1:]: 
     45            s = s.intersection(sel.items()) 
     46             
     47        commonItems = dict(s) 
     48         
     49        title = self.params['variable']+ ' vs ' + self.params['axis'] 
     50         
     51        if len(commonItems) > 1:  
     52            title += ' with ' + self._getLineName(commonItems) 
     53             
     54        plt.setTitle(title) 
     55         
     56        log.debug("commonItems = %s" % (commonItems,)) 
     57         
     58        for sel in selections: 
     59            xdata, ydata = reader.getData(self.params['variable'],  
     60                                          self.params['axis'], sel) 
     61         
     62             
     63            lineName = self._getLineName(sel, commonItems) 
     64             
     65            plt.draw(xdata, ydata, label=lineName) 
    5166         
    5267        return plt.getImage() 
    5368     
    54     def _buildSelection(self): 
     69    def _buildSelections(self): 
     70         
     71        selections = [] 
     72        i = 0 
     73        selFound = True 
     74         
     75        while(selFound): 
     76         
     77            prefix = 's_%02i_' % (i,) 
     78         
     79            sel = self._getSelection(prefix) 
     80             
     81            selFound = sel is not None 
     82            if selFound: 
     83                selections.append(sel) 
     84            i += 1 
     85         
     86        return selections 
     87     
     88    def _getSelection(self, prefix): 
    5589        sel = {} 
    5690         
    5791        for k, v in self.params.items(): 
    58             if k.find('sel_') == 0: 
    59                 sel[k[4:]] = v 
     92            if k.find(prefix) == 0: 
     93                sel[k[len(prefix):]] = v 
     94         
     95        if len(sel) == 0: 
     96            sel = None 
    6097         
    6198        return sel 
    6299     
    63     def _getLineName(self, selection): 
     100    def _getLineName(self, selection, commonItems={}): 
    64101         
    65102        name = "" 
    66103         
    67104        for k in sorted(selection.keys()): 
     105             
     106            if k in commonItems: 
     107                continue 
     108             
    68109            name = name + "%s=%s, " % (k, selection[k]) 
    69110         
  • qesdi/graphplotter/trunk/graphplotter/templates/buildplot.html

    r6313 r6330  
    1212<title>buildplot</title> 
    1313 
    14 <!-- script src="${h.url_for('/demo.js', qualified=True)}" type="text/javascript"></script --> 
     14<script src="${h.url_for('/js/axisSelection.js', qualified=True)}" type="text/javascript"></script> 
     15<script src="${h.url_for('/js/axisSelectionList.js', qualified=True)}" type="text/javascript"></script> 
     16<script src="${h.url_for('/js/plotRequestBuilder.js', qualified=True)}" type="text/javascript"></script> 
    1517 
    1618<script type="text/javascript"> 
     
    1820var refreshAction = "${h.url_for(controller='buildplot')}"; 
    1921var plotAction = "${h.url_for(controller='getplot')}"; 
     22 
     23var selList = null; 
     24var reqBuilder = null; 
     25 
    2026function init() { 
     27    selList = new AxisSelectionList('selection_list', 'selection_input_container'); 
     28    reqBuilder = new PlotRequestBuilder('hidden_input_container'); 
    2129     
    2230} 
     
    3139function onPlotClick() { 
    3240    var form = document.getElementById('buildplot'); 
     41 
     42    reqBuilder.buildSelectionInputs(selList.getSelectionItems()); 
     43     
    3344    form.action = plotAction; 
    3445    form.target = '_blank'; 
     
    3647} 
    3748 
     49function onAddSelectionClick() { 
     50    selList.addSelection(); 
     51} 
     52 
    3853</script> 
    3954 
    4055<style type="text/css"> 
     56 
     57 
     58#selection_list { 
     59    width:400px; 
     60    border:1px solid black; 
     61} 
    4162 
    4263</style> 
     
    7293          
    7394         <py:if test="c.selectedAxis != ''"> 
     95         <br /> 
    7496          
    7597         <div> 
    7698            Axis Selection: 
    7799             
     100            <div id='selection_input_container'> 
     101             
    78102            <py:for each="axSelect in c.axisSelect.keys()"> 
    79             <div> 
    80103                ${axSelect}: 
    81104                <py:if test="type(c.axisSelect[axSelect]) is str"> 
    82                 Range ${c.axisSelect[axSelect] + ' ' + h.text('sel_' + axSelect)} 
     105                Range ${c.axisSelect[axSelect] + ' ' + h.text('sel_' + axSelect, value=getattr(c, 'sel_' + axSelect))} 
    83106                </py:if> 
    84107                <py:if test="type(c.axisSelect[axSelect]) is not str"> 
    85108                ${h.select('sel_' + axSelect, getattr(c, 'sel_' + axSelect), c.axisSelect[axSelect])} 
    86109                </py:if> 
     110                <br /> 
     111            </py:for> 
     112             
    87113            </div>                 
    88             </py:for> 
    89114         </div> 
     115          
     116         <br /> 
     117         <input type="button" value="Add Selection" onClick="onAddSelectionClick();"></input>          
     118         <br /> 
     119          
     120         <div> 
     121            Selections: 
     122            <br /> 
     123            <ul id="selection_list"> 
     124            </ul> 
     125             
     126            <div id="hidden_input_container" style="hidden"> 
     127             
     128            </div> 
     129         </div> 
     130          
    90131          
    91132         </py:if> 
     
    93134         
    94135    </form> 
     136    <input type="button" value="Remove Selection" onClick="onAddSelectionClick();"></input> 
    95137     
    96138    <input type="button" value="Refresh" onClick="onRefreshClick();"></input> 
Note: See TracChangeset for help on using the changeset viewer.