> extends AbstractVisFactory {
/**
* Flag to specify the "curves" rendering style.
*
*
* Key: {@code -histogram.curves}
*
*/
public static final OptionID STYLE_CURVES_ID = OptionID.getOrCreateOptionID("projhistogram.curves", "Use curves instead of the stacked histogram style.");
/**
* Parameter to specify the number of bins to use in histogram.
*
*
* Key: {@code -projhistogram.bins} Default: 20
*
*/
public static final OptionID HISTOGRAM_BINS_ID = OptionID.getOrCreateOptionID("projhistogram.bins", "Number of bins in the distribution histogram");
/**
* Internal storage of the curves flag.
*/
private boolean curves;
/**
* Number of bins to use in histogram.
*/
private static final int DEFAULT_BINS = 50;
/**
* Number of bins to use in the histogram.
*/
private int bins = DEFAULT_BINS;
/**
* Constructor.
*
* @param curves
* @param bins
*/
public Factory(boolean curves, int bins) {
super();
this.curves = curves;
this.bins = bins;
thumbmask |= ThumbnailVisualization.ON_DATA | ThumbnailVisualization.ON_STYLE;
}
@Override
public Visualization makeVisualization(VisualizationTask task) {
return new ColoredHistogramVisualizer(task, curves, bins);
}
@Override
public void processNewResult(HierarchicalResult baseResult, Result result) {
// Find a style result to visualize:
IterableIterator styleres = ResultUtil.filteredResults(result, StyleResult.class);
for(StyleResult c : styleres) {
IterableIterator> ps = ResultUtil.filteredResults(baseResult, HistogramProjector.class);
for(HistogramProjector> p : ps) {
// register self
final VisualizationTask task = new VisualizationTask(CNAME, c, p.getRelation(), this);
task.put(VisualizationTask.META_LEVEL, VisualizationTask.LEVEL_DATA);
baseResult.getHierarchy().add(c, task);
baseResult.getHierarchy().add(p, task);
}
}
}
@Override
public boolean allowThumbnails(VisualizationTask task) {
// Don't use thumbnails
return false;
}
/**
* Parameterization class.
*
* @author Erich Schubert
*
* @apiviz.exclude
*/
public static class Parameterizer> extends AbstractParameterizer {
/**
* Internal storage of the curves flag.
*/
private boolean curves;
/**
* Number of bins to use in the histogram.
*/
private int bins = DEFAULT_BINS;
@Override
protected void makeOptions(Parameterization config) {
super.makeOptions(config);
Flag STYLE_CURVES_FLAG = new Flag(STYLE_CURVES_ID);
if(config.grab(STYLE_CURVES_FLAG)) {
curves = STYLE_CURVES_FLAG.getValue();
}
IntParameter HISTOGRAM_BINS_PARAM = new IntParameter(HISTOGRAM_BINS_ID, new GreaterEqualConstraint(2), DEFAULT_BINS);
if(config.grab(HISTOGRAM_BINS_PARAM)) {
bins = HISTOGRAM_BINS_PARAM.getValue();
}
}
@Override
protected Factory makeInstance() {
return new Factory(curves, bins);
}
}
}
}