/usr/include/shogun/kernel/string/SNPStringKernel.h is in libshogun-dev 3.2.0-7.3build4.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 | /*
* 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.
*
* Written (W) 2009-2010 Soeren Sonnenburg
* Copyright (C) 2009-2010 Berlin Institute of Technology
*/
#ifndef _SNPSTRINGKERNEL_H___
#define _SNPSTRINGKERNEL_H___
#include <shogun/lib/common.h>
#include <shogun/lib/memory.h>
#include <shogun/kernel/string/StringKernel.h>
namespace shogun
{
/** @brief The class SNPStringKernel computes a variant of the polynomial
* kernel on strings of same length.
*
* It is computed as FIXME
*
* \f[
* k({\bf x},{\bf x'})= (\sum_{i=0}^{L-1} I(x_i=x'_i)+c)^d
* \f]
*
* where I is the indicator function which evaluates to 1 if its argument is
* true and to 0 otherwise.
*
* Note that additional normalisation is applied, i.e.
* \f[
* k'({\bf x}, {\bf x'})=\frac{k({\bf x}, {\bf x'})}{\sqrt{k({\bf x}, {\bf x})k({\bf x'}, {\bf x'})}}
* \f]
*/
class CSNPStringKernel: public CStringKernel<char>
{
public:
/** default constructor */
CSNPStringKernel();
/** constructor
*
* @param size cache size
* @param degree degree
* @param win_len length of local window
* @param inhomogene whether inhomogeneous poly
*/
CSNPStringKernel(int32_t size, int32_t degree, int32_t win_len, bool inhomogene);
/** constructor
*
* @param l features of left-hand side
* @param r features of right-hand side
* @param degree degree
* @param win_len length of local window
* @param inhomogene whether inhomogeneous poly
*/
CSNPStringKernel(
CStringFeatures<char>* l, CStringFeatures<char>* r,
int32_t degree, int32_t win_len, bool inhomogene);
virtual ~CSNPStringKernel();
/** initialize kernel
*
* @param l features of left-hand side
* @param r features of right-hand side
* @return if initializing was successful
*/
virtual bool init(CFeatures* l, CFeatures* r);
/** clean up kernel */
virtual void cleanup();
/** return what type of kernel we are
*
* @return kernel type POLYMATCH
*/
virtual EKernelType get_kernel_type()
{
return K_POLYMATCH;
}
/** set the base string for minor aleles
*
* @param str minor freq. string
*/
void set_minor_base_string(const char* str)
{
m_str_min=get_strdup(str);
}
/** set the base string for major aleles
*
* @param str major freq. string
*/
void set_major_base_string(const char* str)
{
m_str_maj=get_strdup(str);
}
/** get the base string for minor aleles
*
* @return minor freq. string
*/
char* get_minor_base_string()
{
return m_str_min;
}
/** get the base string for major aleles
*
* @return major freq. string
*/
char* get_major_base_string()
{
return m_str_maj;
}
/** compute the minor / major alele base strings */
void obtain_base_strings();
/** return the kernel's name
*
* @return name PolyMatchString
*/
virtual const char* get_name() const { return "SNPStringKernel"; }
/* register the parameters
*/
virtual void register_params();
protected:
/** compute kernel function for features a and b
* idx_{a,b} denote the index of the feature vectors
* in the corresponding feature object
*
* @param idx_a index a
* @param idx_b index b
* @return computed kernel function at indices a,b
*/
virtual float64_t compute(int32_t idx_a, int32_t idx_b);
protected:
/** degree */
int32_t m_degree;
/** window length */
int32_t m_win_len;
/** inhomogeneous poly kernel ? */
bool m_inhomogene;
/** total string length / must match length of min/maj strings and
* string length of each vector */
int32_t m_str_len;
/** allele A */
char* m_str_min;
/** allele B */
char* m_str_maj;
private:
void init();
};
}
#endif /* _SNPSTRINGKERNEL_H___ */
|