Select Git revision
calculate_cleaved_peptides.py
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
approx_kfn.cpp 5.94 KiB
#include <sicstus/sicstus.h>
/* ex_glue.h is generated by splfr from the foreign/[2,3] facts.
Always include the glue header in your foreign resource code.
*/
#include "approx_kfn_glue.h"
#include <mlpack/methods/approx_kfn/drusilla_select.hpp>
#include <mlpack/methods/approx_kfn/qdafn.hpp>
#include <mlpack/core.hpp>
// including helper functions for converting between arma structures and arrays
#include "../../helper_files/helper.hpp"
// some of the most used namespaces
using namespace arma;
using namespace mlpack;
using namespace std;
using namespace mlpack::neighbor;
// Global Variable of the DrusillaSelect object so it can be accessed from all functions
DrusillaSelect<mat> drusillaSelect = DrusillaSelect(1,1);
// Global Variable of the QDAFN object so it can be accessed from all functions
QDAFN<mat> qdafn = QDAFN(1,1);
// TODO:
// input: const size_t l,
// const size_t m
// output:
// description:
void initDrusillaModelNoTrain(SP_integer l, SP_integer m)
{
drusillaSelect = DrusillaSelect(l, m);
}
// TODO:
// input: const MatType & referenceSet,
// const size_t l,
// const size_t m
// output:
// description:
void initDrusillaModelWithTrain(float *referenceSetMatArr, SP_integer referenceSetMatSize, SP_integer referenceSetMatRowNum, SP_integer l, SP_integer m)
{
// convert the Prolog arrays to arma::mat
mat referenceSet = convertArrayToMat(referenceSetMatArr, referenceSetMatSize, referenceSetMatRowNum);
drusillaSelect = DrusillaSelect(referenceSet, l, m);
}
// TODO:
// input: const MatType & querySet,
// const size_t k,
// arma::Mat< size_t > & neighbors,
// arma::mat & distances
// output:
// description:
void searchDrusilla(float *querySetMatArr, SP_integer querySetMatSize, SP_integer querySetMatRowNum,
SP_integer k,
float **neighborsMatArr, SP_integer *neighborsMatColNum, SP_integer *neighborsMatRowNum,
float **distancesMatArr, SP_integer *distancesMatColNum, SP_integer *distancesMatRowNum)
{
// convert the Prolog arrays to arma::mat
mat querySet = convertArrayToMat(querySetMatArr, querySetMatSize, querySetMatRowNum);
// create the ReturnMat
Mat< size_t > neighborsReturnMat;
// create the ReturnMat
mat distancesReturnMat;
drusillaSelect.Search(querySet, k, neighborsReturnMat, distancesReturnMat);
// return the Matrix dimensions
*neighborsMatColNum = neighborsReturnMat.n_cols;
*neighborsMatRowNum = neighborsReturnMat.n_rows;
// return the Matrix as one long Array
*neighborsMatArr = convertToArray(neighborsReturnMat);
// return the Matrix dimensions
*distancesMatColNum = distancesReturnMat.n_cols;
*distancesMatRowNum = distancesReturnMat.n_rows;
// return the Matrix as one long Array
*distancesMatArr = convertToArray(distancesReturnMat);
}
// TODO:
// input: const MatType & referenceSet,
// const size_t l = 0,
// const size_t m = 0
// output:
// description:
void trainDrusilla(float *referenceSetMatArr, SP_integer referenceSetMatSize, SP_integer referenceSetMatRowNum, SP_integer l, SP_integer m)
{
// convert the Prolog arrays to arma::mat
mat referenceSet = convertArrayToMat(referenceSetMatArr, referenceSetMatSize, referenceSetMatRowNum);
drusillaSelect.Train(referenceSet, l, m);
}
// TODO:
// input: const size_t l,
// const size_t m
// output:
// description:
void initQDAFNModelNoTrain(SP_integer l, SP_integer m)
{
qdafn = QDAFN(l, m);
}
// TODO:
// input: const MatType & referenceSet,
// const size_t l,
// const size_t m
// output:
// description:
void initQDAFNModelWithTrain(float *referenceSetMatArr, SP_integer referenceSetMatSize, SP_integer referenceSetMatRowNum, SP_integer l, SP_integer m)
{
// convert the Prolog arrays to arma::mat
mat referenceSet = convertArrayToMat(referenceSetMatArr, referenceSetMatSize, referenceSetMatRowNum);
qdafn = QDAFN(referenceSet, l, m);
}
// TODO:
// input: const MatType & querySet,
// const size_t k,
// arma::Mat< size_t > & neighbors,
// arma::mat & distances
// output:
// description:
void searchQDAFN(float *querySetMatArr, SP_integer querySetMatSize, SP_integer querySetMatRowNum,
SP_integer k,
float **neighborsMatArr, SP_integer *neighborsMatColNum, SP_integer *neighborsMatRowNum,
float **distancesMatArr, SP_integer *distancesMatColNum, SP_integer *distancesMatRowNum)
{
// convert the Prolog arrays to arma::mat
mat querySet = convertArrayToMat(querySetMatArr, querySetMatSize, querySetMatRowNum);
// create the ReturnMat
Mat< size_t > neighborsReturnMat;
// create the ReturnMat
mat distancesReturnMat;
qdafn.Search(querySet, k, neighborsReturnMat, distancesReturnMat);
// return the Matrix dimensions
*neighborsMatColNum = neighborsReturnMat.n_cols;
*neighborsMatRowNum = neighborsReturnMat.n_rows;
// return the Matrix as one long Array
*neighborsMatArr = convertToArray(neighborsReturnMat);
// return the Matrix dimensions
*distancesMatColNum = distancesReturnMat.n_cols;
*distancesMatRowNum = distancesReturnMat.n_rows;
// return the Matrix as one long Array
*distancesMatArr = convertToArray(distancesReturnMat);
}
// TODO:
// input: const MatType & referenceSet,
// const size_t l = 0,
// const size_t m = 0
// output:
// description:
void trainQDAFN(float *referenceSetMatArr, SP_integer referenceSetMatSize, SP_integer referenceSetMatRowNum, SP_integer l, SP_integer m)
{
// convert the Prolog arrays to arma::mat
mat referenceSet = convertArrayToMat(referenceSetMatArr, referenceSetMatSize, referenceSetMatRowNum);
qdafn.Train(referenceSet, l, m);
}