anchor.diff:      function mergeTablesAndVisualize() {
           var dt = mergeDataTables();
           if (dt) {
  -            var headerMap = getHeadersMap(dt);
  +            var headerMap = getHeaderMap(dt);
  +            var caseMap = getCaseMap(dt);
  +            
               var formatter = new google.visualization.PatternFormat(formatPatientLink('{0}'));
               formatter.format(dt, [0]);
               
  
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:                 vAxis: {title: scatterDataView.getColumnLabel(1)},
                  legend: 'none'
              };
              google.visualization.events.addListener(scatter, 'select', function(e){
                  var s = scatter.getSelection();
                  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);
          }
      }
      
  