MNE-CPP  0.1.9
A Framework for Electrophysiology
mne_patch_info.cpp
Go to the documentation of this file.
1 //=============================================================================================================
37 //=============================================================================================================
38 // INCLUDES
39 //=============================================================================================================
40 
41 #include "mne_patch_info.h"
42 #include "mne_source_space_old.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 
57 using namespace Eigen;
58 using namespace MNELIB;
59 
60 //=============================================================================================================
61 // DEFINE MEMBER METHODS
62 //=============================================================================================================
63 
64 MnePatchInfo::MnePatchInfo()
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 }
static void calculate_patch_area(MneSourceSpaceOld *s, MnePatchInfo *p)
One item in a derivation data set.
MNE Patch Information (MnePatchInfo) class declaration.
This defines a source space.
MneTriangle class declaration.
MneSourceSpaceOld class declaration.
static void calculate_normal_stats(MneSourceSpaceOld *s, MnePatchInfo *p)