55 using Matrix::operator=;
58 *
this = Source2MEGMat+(Head2MEGMat*HeadMatInv)*SourceMat;
65 using Matrix::operator=;
68 *
this = (Head2EEGMat*HeadMatInv)*SourceMat;
75 using Matrix::operator=;
83 #pragma omp parallel for
85 for (
int i=0;i<static_cast<int>(LeadField.nlin());++i) {
87 for (
unsigned i=0;i<LeadField.nlin();++i) {
90 GMRes(HeadMat, M, vtemp, Head2EEGMat.
getlin(i), 1e3, 1e-7, HeadMat.
nlin());
91 mtemp.setlin(i, vtemp);
98 mtemp=mtemp.transpose();
100 for (
unsigned i = 0; i < LeadField.ncol(); ++i) {
111 using Matrix::operator=;
115 const Matrix& Source2MEGMat) {
122 #pragma omp parallel for
124 for (
int i=0;i<static_cast<int>(LeadField.nlin());++i) {
126 for (
unsigned i=0;i<LeadField.nlin();++i) {
129 GMRes(HeadMat, M, vtemp, Head2MEGMat.
getlin(i), 1e3, 1e-7, HeadMat.
nlin());
130 mtemp.setlin(i,vtemp);
137 mtemp=mtemp.transpose();
139 for (
unsigned i=0;i<LeadField.ncol();i++) {
151 unsigned gauss_order = 3;
156 for (
unsigned i = 0; i < Head2EEGMat.
nlin(); ++i) {
159 for (
unsigned i = 0; i < Head2MEGMat.
nlin(); ++i) {
160 RHS.setlin(i + Head2EEGMat.
nlin(), Head2MEGMat.
getlin(i));
166 #pragma omp parallel for
168 for (
int i=0;i<static_cast<int>(RHS.nlin());++i) {
170 for (
unsigned i=0;i<RHS.nlin();++i) {
174 mtemp.setlin(i, vtemp);
179 Matrix mtemp(RHS.transpose());
181 mtemp = mtemp.transpose();
183 for (
unsigned i = 0; i < dipoles.
nlin(); ++i) {
185 EEGleadfield.setcol(i, mtemp.submat(0, Head2EEGMat.
nlin(), 0, HeadMat.
nlin()) * dsm);
186 MEGleadfield.
setcol(i, mtemp.submat(Head2EEGMat.
nlin(), Head2MEGMat.
nlin(), 0, HeadMat.
nlin()) * dsm + Source2MEGMat.
getcol(i));
191 void saveEEG(
const std::string filename )
const { EEGleadfield.save(filename); }
193 void saveMEG(
const std::string filename )
const { MEGleadfield.
save(filename); }
203 using Matrix::operator=;
205 *
this = Source2IPMat + (Head2IPMat * HeadMatInv) * SourceMat;
212 using Matrix::operator=;
214 *
this = (Head2IPMat * HeadMatInv) * SourceMat;
GainEEG(const SymMatrix &HeadMatInv, const Matrix &SourceMat, const SparseMatrix &Head2EEGMat)
Vector getlin(size_t i) const
SparseMatrix transpose() const
Geometry contains the electrophysiological model Here are stored the vertices, meshes and domains...
GainMEG(const Matrix &GainMat)
Matrix submat(size_t istart, size_t isize, size_t jstart, size_t jsize) const
GainEEGMEGadjoint(const Geometry &geo, const Matrix &dipoles, const SymMatrix &HeadMat, const SparseMatrix &Head2EEGMat, const Matrix &Head2MEGMat, const Matrix &Source2MEGMat)
GainMEGadjoint(const Geometry &geo, const Matrix &dipoles, const SymMatrix &HeadMat, const Matrix &Head2MEGMat, const Matrix &Source2MEGMat)
Vector getlin(size_t i) const
GainEEG(const Matrix &GainMat)
GainEITInternalPot(const SymMatrix &HeadMatInv, const Matrix &SourceMat, const Matrix &Head2IPMat)
GainEEGadjoint(const Geometry &geo, const Matrix &dipoles, const SymMatrix &HeadMat, const SparseMatrix &Head2EEGMat)
void saveEEG(const std::string filename) const
GainMEG(const SymMatrix &HeadMatInv, const Matrix &SourceMat, const Matrix &Head2MEGMat, const Matrix &Source2MEGMat)
void save(const char *filename) const
Save Matrix to file (Format set using file name extension)
GainInternalPot(const SymMatrix &HeadMatInv, const Matrix &SourceMat, const Matrix &Head2IPMat, const Matrix &Source2IPMat)
void setcol(size_t j, const Vector &v)
unsigned GMRes(const T &A, const P &M, Vector &x, const Vector &b, int max_iter, double tol, unsigned m)
virtual size_t ncol() const
Vector getlin(size_t i) const
Vector getcol(size_t j) const
Vector solveLin(const Vector &B) const
#define PROGRESSBAR(a, b)
void saveMEG(const std::string filename) const
void setlin(size_t i, const Vector &v)