MNE-CPP 0.1.9
A Framework for Electrophysiology
Loading...
Searching...
No Matches
mne_patch_info.cpp
Go to the documentation of this file.
1//=============================================================================================================
37//=============================================================================================================
38// INCLUDES
39//=============================================================================================================
40
41#include "mne_patch_info.h"
43#include <mne/c/mne_triangle.h>
44
45#define X_43 0
46#define Y_43 1
47#define Z_43 2
48
49#define VEC_DOT_43(x,y) ((x)[X_43]*(y)[X_43] + (x)[Y_43]*(y)[Y_43] + (x)[Z_43]*(y)[Z_43])
50
51#define FREE_43(x) if ((char *)(x) != NULL) free((char *)(x))
52
53//=============================================================================================================
54// USED NAMESPACES
55//=============================================================================================================
56
57using namespace Eigen;
58using namespace MNELIB;
59
60//=============================================================================================================
61// DEFINE MEMBER METHODS
62//=============================================================================================================
63
65 :vert (-1)
66 ,memb_vert (NULL)
67 ,nmemb (0)
68 ,area (0)
69 ,dev_nn (0)
70{
71}
72
73//=============================================================================================================
74
76{
77 FREE_43(memb_vert);
78}
79
80//=============================================================================================================
81
83{
84 int k,q;
85 int nneigh;
86 int *neigh;
87
88 p->area = 0.0;
89 for (k = 0; k < p->nmemb; k++) {
90 nneigh = s->nneighbor_tri[p->memb_vert[k]];
91 neigh = s->neighbor_tri[p->memb_vert[k]];
92 for (q = 0; q < nneigh; q++)
93 p->area += s->tris[neigh[q]].area/3.0;
94 }
95}
96
97//=============================================================================================================
98
100{
101 int k;
102 float cos_theta,size;
103
104 p->ave_nn[X_43] = 0.0;
105 p->ave_nn[Y_43] = 0.0;
106 p->ave_nn[Z_43] = 0.0;
107
108 for (k = 0; k < p->nmemb; k++) {
109 p->ave_nn[X_43] += s->nn[p->memb_vert[k]][X_43];
110 p->ave_nn[Y_43] += s->nn[p->memb_vert[k]][Y_43];
111 p->ave_nn[Z_43] += s->nn[p->memb_vert[k]][Z_43];
112 }
113 size = sqrt(VEC_DOT_43(p->ave_nn,p->ave_nn));
114 p->ave_nn[X_43] = p->ave_nn[X_43]/size;
115 p->ave_nn[Y_43] = p->ave_nn[Y_43]/size;
116 p->ave_nn[Z_43] = p->ave_nn[Z_43]/size;
117
118 p->dev_nn = 0.0;
119 for (k = 0; k < p->nmemb; k++) {
120 cos_theta = VEC_DOT_43(s->nn[p->memb_vert[k]],p->ave_nn);
121 if (cos_theta < -1.0)
122 cos_theta = -1.0;
123 else if (cos_theta > 1.0)
124 cos_theta = 1.0;
125 p->dev_nn += acos(cos_theta);
126 }
127 p->dev_nn = p->dev_nn/p->nmemb;
128
129 return;
130}
int k
Definition fiff_tag.cpp:324
MneTriangle class declaration.
MNE Patch Information (MnePatchInfo) class declaration.
MneSourceSpaceOld class declaration.
One item in a derivation data set.
static void calculate_patch_area(MneSourceSpaceOld *s, MnePatchInfo *p)
static void calculate_normal_stats(MneSourceSpaceOld *s, MnePatchInfo *p)
This defines a source space.