anchor.diff:                  vAxis: {title: scatterDataView.getColumnLabel(1)},
                   legend: 'none'
               };
  -            scatter.draw(scatterDataView,options);
               google.visualization.events.addListener(scatter, 'select', function(e){
                   var s = scatter.getSelection();
  -                if (!s) {
  -                    setCaseSelect(null);
  -                } else {
  -                    var caseId = dt.getValue(s[0].row,0);
  -                    setCaseSelect(caseId);
  -                }
  +                var caseId = s.length==0 ? null : dt.getValue(s[0].row,0);
  +                csObs.fireSelection(caseId, 'scatter-plot');
               });
  +            
  +            google.visualization.events.addListener(scatter, 'ready', function(e){
  +                csObs.subscribe('scatter-plot',function(caseId) {
  +                    var ix = caseMap[caseId];
  +                    // this is not working due to a google bug
  +                    // http://goo.gl/dXvDN
  +                    scatter.setSelection(ix==null?null:[ix]);
  +                });
  +            });
  +            scatter.draw(scatterDataView,options);
           }
       }
       
  
positive.code:         return dt;
      }
      
      function getHeadersMap(dataTable) {
          var map = {};
          var cols = dataTable.getNumberOfColumns();
          for (var i=0; i<cols; i++) {
              map[dataTable.getColumnLabel(i)] = i;
          }
          return map;
      }
  
negative.code:         loadCnaFraction(caseIds);
      });
      
      function CaseSelectObserver() {
          this.funcs = {};
          this.caseId = null;
      }
      CaseSelectObserver.prototype = {
          subscribe: function(listener,func) {
              this.funcs[listener] = func;
              func.call(window,this.caseId);
          },
          fireSelection: function(caseId,source) {
              if (caseId == this.caseId) return;
              this.caseId = caseId;
              for (var listener in this.funcs) {
                  if (listener==source) continue;
                  var func = this.funcs[listener];
                  func.call(window,caseId);
              }
          }
      };
      var csObs = new CaseSelectObserver();
      
      function setupCaseSelect(caseIds) {
          var caseSelect = $('#case-select');
          for (var i=0; i<caseIds.length; i++) {
              caseSelect
                  .append($("<option></option>")
                  .attr("value",caseIds[i])
                  .attr("id",caseIds[i]+"_select")
                  .text(caseIds[i]));
          }
          csObs.subscribe('case-select',function(caseId){
              var op = caseId ? $("#"+caseId+"_select") : $("#null_case_select");
              op.attr("selected","selected");
          });
          caseSelect.change(function(e) {
              var caseId = $('#case-select  option:selected').attr('value');
              csObs.fireSelection(caseId,'case-select')
          });
      }
      
      var clincialDataTableWrapper = null;
  