61 if(connectivitySettings.
isEmpty()) {
62 qDebug() <<
"DirectedTransferFunction::calculate - Input data is empty";
69 const int nTrials = connectivitySettings.
size();
70 MatrixXd matDataAvg = connectivitySettings.
at(0).
matData;
71 for(
int t = 1; t < nTrials; ++t) {
72 matDataAvg += connectivitySettings.
at(t).
matData;
74 matDataAvg /=
static_cast<double>(nTrials);
76 const int nCh =
static_cast<int>(matDataAvg.rows());
77 const int iNfft = connectivitySettings.
getFFTSize();
78 const int iNFreqs =
static_cast<int>(std::floor(iNfft / 2.0)) + 1;
84 RowVectorXf rowVert = RowVectorXf::Zero(3);
85 for(
int i = 0; i < nCh; ++i) {
86 rowVert = RowVectorXf::Zero(3);
97 model.
fit(matDataAvg);
100 VectorXd vecFreqs = VectorXd::LinSpaced(iNFreqs, 0.0, 0.5);
105 for(
int i = 0; i < nCh; ++i) {
106 for(
int j = 0; j < nCh; ++j) {
107 MatrixXd matWeight(iNFreqs, 1);
109 for(
int fi = 0; fi < iNFreqs; ++fi) {
111 double rowNorm = 0.0;
112 for(
int k = 0; k < nCh; ++k) {
113 rowNorm += std::norm(vecH[fi](i, k));
117 matWeight(fi, 0) = std::norm(vecH[fi](i, j)) / rowNorm;
119 matWeight(fi, 0) = 0.0;
123 QSharedPointer<NetworkEdge> pEdge =
124 QSharedPointer<NetworkEdge>(
new NetworkEdge(j, i, matWeight));
126 finalNetwork.
getNodeAt(j)->append(pEdge);
127 finalNetwork.
getNodeAt(i)->append(pEdge);
128 finalNetwork.
append(pEdge);
Multivariate autoregressive (MVAR) model fit and its frequency-domain decomposition; backbone of the ...
Directed Transfer Function (Kaminski & Blinowska 1991) between every channel pair,...
Input-data and parameter container shared by every functional-connectivity metric in CONNECTIVITYLIB.
Weighted edge between two NetworkNode instances; stores the full per-frequency weight matrix and the ...
Node of a connectivity Network; carries a 3D position and the lists of incident (in / out,...
Graph container that stores the result of one functional-connectivity metric as nodes (sources/sensor...
Functional connectivity metrics (coherence, PLV, cross-correlation, etc.).
Aggregates trial data, spectral cache and node geometry shared by all CONNECTIVITYLIB metrics.
const IntermediateTrialData & at(int i) const
int getSamplingFrequency() const
const Eigen::MatrixX3f & getNodePositions() const
static Network calculate(ConnectivitySettings &connectivitySettings)
DirectedTransferFunction()
MVAR model fit; provides H(f) and S(f) for Granger Causality, DTF and PDC.
QVector< Eigen::MatrixXcd > transferFunction(const Eigen::VectorXd &freqs) const
void fit(const Eigen::MatrixXd &data, int p=0)
Graph container for one connectivity metric; nodes + weighted edges + threshold/visualisation state.
void setUsedFreqBins(int iNumberFreqBins)
void append(QSharedPointer< NetworkEdge > newEdge)
void setFFTSize(int iFFTSize)
void setSamplingFrequency(float fSFreq)
QSharedPointer< NetworkNode > getNodeAt(int i)
Weighted, directional edge in a Network; carries per-frequency weights plus a band-averaged scalar.
Graph node carrying a 3D position and its incident in/out, full/thresholded edge lists.
QSharedPointer< NetworkNode > SPtr