Program: 81573
Project: 81573
Buggy source:
/** 
 * {@inheritDoc}
 */
@Override protected BufferedDataTable[] execute(final BufferedDataTable[] inData,final ExecutionContext exec) throws Exception {
  BufferedDataTable inTable=inData[0];
  DataTableSpec inSpec=inTable.getSpec();
  int nBins=((SettingsModelIntegerBounded)getModelSetting(CFG_BIN)).getIntValue();
  String aggColumn=((SettingsModelString)getModelSetting(CFG_AGGR)).getStringValue();
  List<String> selColumns=((SettingsModelFilterString)getModelSetting(CFG_COLUMN)).getIncludeList();
  boolean hasRefColumn=true;
  String refColumn=((SettingsModelString)getModelSetting(CFG_REFCOLUMN)).getStringValue();
  if (refColumn == null)   hasRefColumn=false;
  String refString=null;
  if (hasRefColumn)   refString=((SettingsModelString)getModelSetting(CFG_REFSTRING)).getStringValue();
  int aggIdx=inSpec.findColumnIndex(aggColumn);
  int refIdx=-1;
  if (hasRefColumn)   refIdx=inSpec.findColumnIndex(refColumn);
  List<Double> doubleList;
  int i=1;
  int n=selColumns.size();
  double progress=0.0;
  int countMissing;
  BufferedDataContainer con=exec.createDataContainer(createOutSpec(inTable.getSpec()));
  rowCount=0;
  for (  String col : selColumns) {
    int colIdx=inSpec.findColumnIndex(col);
    countMissing=0;
    HashMap<Object,List<Double>> refData=new HashMap<Object,List<Double>>();
    HashMap<Object,List<Double>> allData=new HashMap<Object,List<Double>>();
    for (    DataRow row : inTable) {
      DataCell aggCell=row.getCell(aggIdx);
      String aggString=null;
      if (!aggCell.isMissing())       aggString=((StringCell)aggCell).getStringValue();
      String label=null;
      if (hasRefColumn) {
        DataCell labelCell=row.getCell(refIdx);
        if (!aggCell.isMissing())         label=((StringCell)labelCell).getStringValue();
      }
      DataCell valueCell=row.getCell(colIdx);
      Double value=null;
      if (!valueCell.isMissing())       value=((DoubleValue)valueCell).getDoubleValue();
      if (aggString == null || value == null || (hasRefColumn && label == null)) {
        countMissing++;
        continue;
      }
      if (hasRefColumn) {
        if (label.equals(refString)) {
          if (refData.containsKey(aggString))           doubleList=refData.get(aggString);
 else           doubleList=new ArrayList<Double>();
          doubleList.add(value);
          refData.put(aggString,doubleList);
        }
      }
      if (allData.containsKey(aggString))       doubleList=allData.get(aggString);
 else       doubleList=new ArrayList<Double>();
      doubleList.add(value);
      allData.put(aggString,doubleList);
      exec.checkCanceled();
    }
    if (!hasRefColumn) {
      refData=allData;
    }
    if (refData.isEmpty()) {
      setWarningMessage("String_Node_Str" + col);
      continue;
    }
    if (countMissing > 0) {
      this.logger.info(col + "String_Node_Str" + countMissing+ "String_Node_Str");
    }
    BinningAnalysis binAnalysis=new BinningAnalysis(refData,nBins,col);
    HashMap<Object,List<BinningData>> ret=binAnalysis.getZscore(allData);
    for (    Object aggLabel : ret.keySet()) {
      DataRow[] newRows=createDataRow(col,(String)aggLabel,ret.get(aggLabel));
      for (      DataRow row : newRows) {
        con.addRowToTable(row);
      }
    }
    progress=progress + 1.0 / n;
    i++;
    exec.setProgress(progress,"String_Node_Str" + col + "String_Node_Str"+ i+ "String_Node_Str"+ n+ "String_Node_Str");
  }
  con.close();
  return new BufferedDataTable[]{con.getTable()};
}

Fixed version (ground truth):
/** 
 * {@inheritDoc}
 */
@Override protected BufferedDataTable[] execute(final BufferedDataTable[] inData,final ExecutionContext exec) throws Exception {
  BufferedDataTable inTable=inData[0];
  DataTableSpec inSpec=inTable.getSpec();
  int nBins=((SettingsModelIntegerBounded)getModelSetting(CFG_BIN)).getIntValue();
  String aggColumn=((SettingsModelString)getModelSetting(CFG_AGGR)).getStringValue();
  List<String> selColumns=((SettingsModelFilterString)getModelSetting(CFG_COLUMN)).getIncludeList();
  boolean hasRefColumn=true;
  String refColumn=((SettingsModelString)getModelSetting(CFG_REFCOLUMN)).getStringValue();
  if (refColumn == null)   hasRefColumn=false;
  String refString=null;
  if (hasRefColumn)   refString=((SettingsModelString)getModelSetting(CFG_REFSTRING)).getStringValue();
  int aggIdx=inSpec.findColumnIndex(aggColumn);
  int refIdx=-1;
  if (hasRefColumn)   refIdx=inSpec.findColumnIndex(refColumn);
  List<Double> doubleList;
  int i=1;
  int n=selColumns.size();
  double progress=0.0;
  int countMissing;
  BufferedDataContainer con=exec.createDataContainer(createOutSpec(inTable.getSpec()));
  rowCount=0;
  for (  String col : selColumns) {
    int colIdx=inSpec.findColumnIndex(col);
    countMissing=0;
    HashMap<Object,List<Double>> refData=new HashMap<Object,List<Double>>();
    HashMap<Object,List<Double>> allData=new HashMap<Object,List<Double>>();
    for (    DataRow row : inTable) {
      DataCell aggCell=row.getCell(aggIdx);
      String aggString=null;
      if (!aggCell.isMissing())       aggString=((StringCell)aggCell).getStringValue();
      String label=null;
      if (hasRefColumn) {
        DataCell labelCell=row.getCell(refIdx);
        if (!labelCell.isMissing())         label=((StringCell)labelCell).getStringValue();
      }
      DataCell valueCell=row.getCell(colIdx);
      Double value=null;
      if (!valueCell.isMissing())       value=((DoubleValue)valueCell).getDoubleValue();
      if (aggString == null || value == null || (hasRefColumn && label == null)) {
        countMissing++;
        continue;
      }
      if (hasRefColumn) {
        if (label.equals(refString)) {
          if (refData.containsKey(aggString))           doubleList=refData.get(aggString);
 else           doubleList=new ArrayList<Double>();
          doubleList.add(value);
          refData.put(aggString,doubleList);
        }
      }
      if (allData.containsKey(aggString))       doubleList=allData.get(aggString);
 else       doubleList=new ArrayList<Double>();
      doubleList.add(value);
      allData.put(aggString,doubleList);
      exec.checkCanceled();
    }
    if (!hasRefColumn) {
      refData=allData;
    }
    if (refData.isEmpty()) {
      setWarningMessage("String_Node_Str" + col);
      continue;
    }
    if (countMissing > 0) {
      this.logger.info(col + "String_Node_Str" + countMissing+ "String_Node_Str");
    }
    BinningAnalysis binAnalysis=new BinningAnalysis(refData,nBins,col);
    HashMap<Object,List<BinningData>> ret=binAnalysis.getZscore(allData);
    for (    Object aggLabel : ret.keySet()) {
      DataRow[] newRows=createDataRow(col,(String)aggLabel,ret.get(aggLabel));
      for (      DataRow row : newRows) {
        con.addRowToTable(row);
      }
    }
    progress=progress + 1.0 / n;
    i++;
    exec.setProgress(progress,"String_Node_Str" + col + "String_Node_Str"+ i+ "String_Node_Str"+ n+ "String_Node_Str");
  }
  con.close();
  return new BufferedDataTable[]{con.getTable()};
}