package edu.harvard.wcfia.yoshikoder.reporting; import java.text.NumberFormat; import java.util.Iterator; import java.util.List; import java.util.logging.Logger; import edu.harvard.wcfia.yoshikoder.dictionary.Node; import edu.harvard.wcfia.yoshikoder.document.DocumentList; public class DictionaryRRDocumentComparisonReport extends AbstractReport implements YKReport { private static Logger log = Logger.getLogger("edu.harvard.wcfia.yoshikoder.reporting.StatisticalDictionaryComparisonReport"); protected ComparisonMap comparison; public DictionaryRRDocumentComparisonReport(String reportTitle, String desc, String dictName, DocumentList dl, EntryFrequencyMap map1, EntryFrequencyMap map2) { super(reportTitle, desc, dictName, dl); comparison = new ComparisonMap(map1, map2); data = initData(); } protected ComparisonMap getComparisonMap(){ return comparison; } protected Object[][] initData(){ List l = comparison.getSortedCategoryEntries(); log.info("report has " + l.size() + " lines"); Object[][] report = new Object[l.size()][3]; int ii=0; NumberFormat nf = NumberFormat.getInstance(); nf.setMaximumFractionDigits(4); for (Iterator iter = l.iterator(); iter.hasNext();) { Node node = (Node) iter.next(); String entryPath = comparison.getEntryPath(node); report[ii][0] = entryPath; RiskRatioStatistics rrs = comparison.getRiskRatioStatistics(node); try { double d = rrs.getRiskRatio(); String percentage; if (d > 1) percentage = nf.format( (d-1)*100 ); else percentage = nf.format( -((1/d)-1)*100 ); report[ii][1] = percentage; } catch (UncomputableRiskRatioException urre){ report[ii][1] = ""; } report[ii][2] = rrs.toString(); // NA if it can't be computed ii++; } return report; } public Class getColumnClass(int columnIndex) { switch (columnIndex) { case 0: return String.class; case 1: return String.class; case 2: return String.class; default: return Object.class; } } public String getColumnName(int column) { switch (column) { case 0: return "Entry"; case 1: return "Percentage Change"; case 2: return "Risk Ratio"; default: return "No title"; } } }