use of ubic.basecode.dataStructure.matrix.DenseDoubleMatrix in project Gemma by PavlidisLab.
the class ExpressionExperimentQCController method visualizeCorrMat.
/**
* @param id of experiment
* @param size Multiplier on the cell size. 1 or null for standard small size.
* @param text if true, output a tabbed file instead of a png
* @param showLabels if the row and column labels of the matrix should be shown.
* @param os response output stream
*/
@RequestMapping("/expressionExperiment/visualizeCorrMat.html")
public ModelAndView visualizeCorrMat(Long id, Double size, String contrVal, Boolean text, Boolean showLabels, Boolean forceShowLabels, OutputStream os) throws Exception {
if (id == null) {
log.warn("No id!");
return null;
}
ExpressionExperiment ee = expressionExperimentService.load(id);
if (ee == null) {
log.warn("Could not load experiment with id " + id);
return null;
}
DoubleMatrix<BioAssay, BioAssay> omatrix = sampleCoexpressionMatrixService.findOrCreate(ee);
List<String> stringNames = new ArrayList<>();
for (BioAssay ba : omatrix.getRowNames()) {
stringNames.add(ba.getName() + " ID=" + ba.getId());
}
DoubleMatrix<String, String> matrix = new DenseDoubleMatrix<>(omatrix.getRawMatrix());
matrix.setRowNames(stringNames);
matrix.setColumnNames(stringNames);
if (text != null && text) {
StringWriter s = new StringWriter();
MatrixWriter<String, String> mw = new MatrixWriter<>(s, new DecimalFormat("#.##"));
mw.writeMatrix(matrix, true);
ModelAndView mav = new ModelAndView(new TextView());
mav.addObject(TextView.TEXT_PARAM, s.toString());
return mav;
}
/*
* Blank out the diagonal so it doesn't affect the colour scale.
*/
for (int i = 0; i < matrix.rows(); i++) {
matrix.set(i, i, Double.NaN);
}
ColorMatrix<String, String> cm = new ColorMatrix<>(matrix);
this.cleanNames(matrix);
int row = matrix.rows();
int cellsize = (int) Math.min(ExpressionExperimentQCController.MAX_HEATMAP_CELLSIZE, Math.max(1, size * ExpressionExperimentQCController.DEFAULT_QC_IMAGE_SIZE_PX / row));
MatrixDisplay<String, String> writer = new MatrixDisplay<>(cm);
boolean reallyShowLabels;
int minimumCellSizeForText = 9;
if (forceShowLabels != null && forceShowLabels) {
cellsize = Math.min(ExpressionExperimentQCController.MAX_HEATMAP_CELLSIZE, minimumCellSizeForText);
reallyShowLabels = true;
} else {
reallyShowLabels = showLabels != null && (showLabels && cellsize >= minimumCellSizeForText);
}
writer.setCellSize(new Dimension(cellsize, cellsize));
boolean showScalebar = size > 2;
writer.writeToPng(cm, os, reallyShowLabels, showScalebar);
// nothing to return;
return null;
}
Aggregations