package gdsc.smlm.fitting.nonlinear.gradient;
/*-----------------------------------------------------------------------------
* GDSC SMLM Software
*
* Copyright (C) 2017 Alex Herbert
* Genome Damage and Stability Centre
* University of Sussex, UK
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*---------------------------------------------------------------------------*/
/**
* Helper functions for the gradient procedures
*/
class GradientProcedureHelper
{
static void initialiseWorkingMatrix4(double[] data)
{
data[0] = 0;
data[1] = 0;
data[2] = 0;
data[3] = 0;
data[4] = 0;
data[5] = 0;
data[6] = 0;
data[7] = 0;
data[8] = 0;
data[9] = 0;
}
static void initialiseWorkingMatrix5(double[] data)
{
data[0] = 0;
data[1] = 0;
data[2] = 0;
data[3] = 0;
data[4] = 0;
data[5] = 0;
data[6] = 0;
data[7] = 0;
data[8] = 0;
data[9] = 0;
data[10] = 0;
data[11] = 0;
data[12] = 0;
data[13] = 0;
data[14] = 0;
}
static void initialiseWorkingMatrix6(double[] data)
{
data[0] = 0;
data[1] = 0;
data[2] = 0;
data[3] = 0;
data[4] = 0;
data[5] = 0;
data[6] = 0;
data[7] = 0;
data[8] = 0;
data[9] = 0;
data[10] = 0;
data[11] = 0;
data[12] = 0;
data[13] = 0;
data[14] = 0;
data[15] = 0;
data[16] = 0;
data[17] = 0;
data[18] = 0;
data[19] = 0;
data[20] = 0;
}
static void getMatrix(double[] data, double[][] matrix, int n)
{
// Generate symmetric matrix
for (int j = 0, i = 0; j < n; j++)
for (int k = 0; k <= j; k++)
{
//System.out.printf("matrix[%d][%d] = data[%d];\n", j, k, i);
//if (j != k)
// System.out.printf("matrix[%d][%d] = data[%d];\n", k, j, i);
matrix[j][k] = matrix[k][j] = data[i++];
}
//throw new RuntimeException();
}
static void getMatrix4(double[] data, double[][] matrix)
{
matrix[0][0] = data[0];
matrix[1][0] = data[1];
matrix[0][1] = data[1];
matrix[1][1] = data[2];
matrix[2][0] = data[3];
matrix[0][2] = data[3];
matrix[2][1] = data[4];
matrix[1][2] = data[4];
matrix[2][2] = data[5];
matrix[3][0] = data[6];
matrix[0][3] = data[6];
matrix[3][1] = data[7];
matrix[1][3] = data[7];
matrix[3][2] = data[8];
matrix[2][3] = data[8];
matrix[3][3] = data[9];
}
static void getMatrix5(double[] data, double[][] matrix)
{
matrix[0][0] = data[0];
matrix[1][0] = data[1];
matrix[0][1] = data[1];
matrix[1][1] = data[2];
matrix[2][0] = data[3];
matrix[0][2] = data[3];
matrix[2][1] = data[4];
matrix[1][2] = data[4];
matrix[2][2] = data[5];
matrix[3][0] = data[6];
matrix[0][3] = data[6];
matrix[3][1] = data[7];
matrix[1][3] = data[7];
matrix[3][2] = data[8];
matrix[2][3] = data[8];
matrix[3][3] = data[9];
matrix[4][0] = data[10];
matrix[0][4] = data[10];
matrix[4][1] = data[11];
matrix[1][4] = data[11];
matrix[4][2] = data[12];
matrix[2][4] = data[12];
matrix[4][3] = data[13];
matrix[3][4] = data[13];
matrix[4][4] = data[14];
}
static void getMatrix6(double[] data, double[][] matrix)
{
// Generate symmetric matrix
matrix[0][0] = data[0];
matrix[1][0] = data[1];
matrix[0][1] = data[1];
matrix[1][1] = data[2];
matrix[2][0] = data[3];
matrix[0][2] = data[3];
matrix[2][1] = data[4];
matrix[1][2] = data[4];
matrix[2][2] = data[5];
matrix[3][0] = data[6];
matrix[0][3] = data[6];
matrix[3][1] = data[7];
matrix[1][3] = data[7];
matrix[3][2] = data[8];
matrix[2][3] = data[8];
matrix[3][3] = data[9];
matrix[4][0] = data[10];
matrix[0][4] = data[10];
matrix[4][1] = data[11];
matrix[1][4] = data[11];
matrix[4][2] = data[12];
matrix[2][4] = data[12];
matrix[4][3] = data[13];
matrix[3][4] = data[13];
matrix[4][4] = data[14];
matrix[5][0] = data[15];
matrix[0][5] = data[15];
matrix[5][1] = data[16];
matrix[1][5] = data[16];
matrix[5][2] = data[17];
matrix[2][5] = data[17];
matrix[5][3] = data[18];
matrix[3][5] = data[18];
matrix[5][4] = data[19];
matrix[4][5] = data[19];
matrix[5][5] = data[20];
}
static void getMatrix(double[] data, double[] matrix, int n)
{
// Generate symmetric matrix
for (int j = 0, i = 0; j < n; j++)
for (int k = 0; k <= j; k++)
{
//System.out.printf("matrix[%d] = data[%d];\n", j * n + k, i);
//if (j != k)
// System.out.printf("matrix[%d] = data[%d];\n", k * n + j, i);
matrix[j * n + k] = matrix[k * n + j] = data[i++];
}
//throw new RuntimeException();
}
static void getMatrix4(double[] data, double[] matrix)
{
matrix[0] = data[0];
matrix[4] = data[1];
matrix[1] = data[1];
matrix[5] = data[2];
matrix[8] = data[3];
matrix[2] = data[3];
matrix[9] = data[4];
matrix[6] = data[4];
matrix[10] = data[5];
matrix[12] = data[6];
matrix[3] = data[6];
matrix[13] = data[7];
matrix[7] = data[7];
matrix[14] = data[8];
matrix[11] = data[8];
matrix[15] = data[9];
}
static void getMatrix5(double[] data, double[] matrix)
{
matrix[0] = data[0];
matrix[5] = data[1];
matrix[1] = data[1];
matrix[6] = data[2];
matrix[10] = data[3];
matrix[2] = data[3];
matrix[11] = data[4];
matrix[7] = data[4];
matrix[12] = data[5];
matrix[15] = data[6];
matrix[3] = data[6];
matrix[16] = data[7];
matrix[8] = data[7];
matrix[17] = data[8];
matrix[13] = data[8];
matrix[18] = data[9];
matrix[20] = data[10];
matrix[4] = data[10];
matrix[21] = data[11];
matrix[9] = data[11];
matrix[22] = data[12];
matrix[14] = data[12];
matrix[23] = data[13];
matrix[19] = data[13];
matrix[24] = data[14];
}
static void getMatrix6(double[] data, double[] matrix)
{
// Generate symmetric matrix
matrix[0] = data[0];
matrix[6] = data[1];
matrix[1] = data[1];
matrix[7] = data[2];
matrix[12] = data[3];
matrix[2] = data[3];
matrix[13] = data[4];
matrix[8] = data[4];
matrix[14] = data[5];
matrix[18] = data[6];
matrix[3] = data[6];
matrix[19] = data[7];
matrix[9] = data[7];
matrix[20] = data[8];
matrix[15] = data[8];
matrix[21] = data[9];
matrix[24] = data[10];
matrix[4] = data[10];
matrix[25] = data[11];
matrix[10] = data[11];
matrix[26] = data[12];
matrix[16] = data[12];
matrix[27] = data[13];
matrix[22] = data[13];
matrix[28] = data[14];
matrix[30] = data[15];
matrix[5] = data[15];
matrix[31] = data[16];
matrix[11] = data[16];
matrix[32] = data[17];
matrix[17] = data[17];
matrix[33] = data[18];
matrix[23] = data[18];
matrix[34] = data[19];
matrix[29] = data[19];
matrix[35] = data[20];
}
}