99da3db1b62d39f9ed0e24c5fb65ba3392e575dd kent Mon Jan 11 14:57:13 2021 -0800 Moving writeTsvRow to lib/obscure.c diff --git src/lib/sparseMatrix.c src/lib/sparseMatrix.c index 7a1e817..aa15793 100644 --- src/lib/sparseMatrix.c +++ src/lib/sparseMatrix.c @@ -1,100 +1,88 @@ #include "common.h" #include "linefile.h" #include "hash.h" #include "localmem.h" +#include "obscure.h" #include "sparseMatrix.h" struct sparseRowMatrix *sparseRowMatrixNew(int xSize, int ySize) /* Make up a new sparseRowMatrix structure */ { struct sparseRowMatrix *matrix; AllocVar(matrix); matrix->xSize = xSize; matrix->ySize = ySize; matrix->lm = lmInit(0); lmAllocArray(matrix->lm, matrix->rows, ySize); return matrix; } void sparseRowMatrixFree(struct sparseRowMatrix **pMatrix) /* Free up resources associated with sparse matrix */ { struct sparseRowMatrix *matrix = *pMatrix; if (matrix != NULL) { lmCleanup(&matrix->lm); freez(pMatrix); } } void sparseRowMatrixAdd(struct sparseRowMatrix *matrix, int x, int y, float val) /* Add data to our sparse matrix */ { struct sparseRowVal *fv; lmAllocVar(matrix->lm, fv); fv->x = x; fv->val = val; slAddHead(&matrix->rows[y], fv); } void sparseRowMatrixUnpackRow(struct sparseRowMatrix *matrix, int y, double *row, int rowSize) /* Unpack sparse matrix into buf that should be matrix->xSize long */ { if (matrix->xSize != rowSize) errAbort("sparseRowMatrixUnpackRow size mismatch %d vs %d", matrix->xSize, rowSize); int bufSize = matrix->xSize * sizeof(double); zeroBytes(row, bufSize); struct sparseRowVal *fv; for (fv = matrix->rows[y]; fv != NULL; fv = fv->next) row[fv->x] = fv->val; } static void sparseRowMatrixTsvBody(struct sparseRowMatrix *matrix, char **rowLabels, FILE *f) /* Write body (but not header) of matrix to tsv file */ { int xSize = matrix->xSize; int ySize = matrix->ySize; int x,y; double row[xSize]; for (y=0; y 0) - { - fprintf(f, "%s", row[0]); - int i; - for (i=1; iySize); fprintf(f, "gene\t"); writeTsvRow(f, matrix->xSize, columnLabels); sparseRowMatrixTsvBody(matrix, rowLabels, f); carefulClose(&f); }