58using namespace FIFFLIB;
60using namespace MNELIB;
67 const MatrixXi& matEvents,
72 float fTBaselineFromS,
74 const QMap<QString,double>& mapReject,
75 const QStringList& lExcludeChs,
76 const RowVectorXi& picks)
89 QPair<float, float> baselinePair(fTBaselineFromS, fTBaselineToS);
93 if(!mapReject.isEmpty()){
99 lstEpochDataList.first()->epoch.cols());
105 const MatrixXi& matEvents,
110 float fTBaselineFromS,
112 const QMap<QString,double>& mapReject,
113 const FilterKernel& filterKernel,
114 const QStringList& lExcludeChs,
115 const RowVectorXi& picks)
122 MatrixXi selected = MatrixXi::Zero(1, matEvents.rows());
123 for (p = 0; p < matEvents.rows(); ++p)
125 if (matEvents(p,1) == 0 && matEvents(p,2) == eventType)
127 selected(0,count) = p;
131 selected.conservativeResize(1, count);
133 qInfo(
"[RTPROCESSINGLIB::computeFilteredAverage] %d matching events found",count);
137 RowVectorXi picksNew = picks;
138 if(picks.cols() <= 0) {
139 picksNew.resize(raw.
info.
chs.size());
140 for(
int i = 0; i < raw.
info.
chs.size(); ++i) {
145 fiff_int_t event_samp, from, to;
146 fiff_int_t dropCount = 0;
150 QScopedPointer<MNEEpochData> epoch(Q_NULLPTR);
151 int iFilterDelay = filterKernel.getFilterOrder()/2;
153 for (p = 0; p < count; ++p) {
155 event_samp = matEvents(selected(p),0);
156 from = event_samp + fTMinS*raw.
info.
sfreq;
157 to = event_samp + floor(fTMaxS*raw.
info.
sfreq + 0.5);
161 if(raw.
read_raw_segment(epoch->epoch, timesDummy, from - iFilterDelay, to + iFilterDelay, picksNew)) {
166 times.resize(1, to-from+1);
167 for (qint32 i = 0; i < times.cols(); ++i)
168 times(0, i) = ((float)(from-event_samp+i)) / raw.
info.
sfreq;
171 epoch->event = eventType;
172 epoch->tmin = fTMinS;
173 epoch->tmax = fTMaxS;
180 if (epoch->bReject) {
185 if(!lstEpochDataList.isEmpty()) {
186 if(epoch->epoch.size() == lstEpochDataList.last()->epoch.size()) {
193 qWarning(
"[MNEEpochDataList::readEpochs] Can't read the event data segments.");
197 qInfo().noquote() <<
"[MNEEpochDataList::readEpochs] Read a total of"<< lstEpochDataList.size() <<
"epochs of type" << eventType <<
"and marked"<< dropCount <<
"for rejection.";
200 QPair<float, float> baselinePair(fTBaselineFromS, fTBaselineToS);
204 if(!mapReject.isEmpty()){
210 lstEpochDataList.first()->epoch.cols());
RTPROCESINGSHARED_EXPORT FIFFLIB::FiffEvoked computeFilteredAverage(const FIFFLIB::FiffRawData &raw, const Eigen::MatrixXi &matEvents, float fTMinS, float fTMaxS, qint32 eventType, bool bApplyBaseline, float fTBaselineFromS, float fTBaselineToS, const QMap< QString, double > &mapReject, const FilterKernel &filterKernel, const QStringList &lExcludeChs=QStringList(), const Eigen::RowVectorXi &vecPicks=Eigen::RowVectorXi())
RTPROCESINGSHARED_EXPORT FIFFLIB::FiffEvoked computeAverage(const FIFFLIB::FiffRawData &raw, const Eigen::MatrixXi &matEvents, float fTMinS, float fTMaxS, qint32 eventType, bool bApplyBaseline, float fTBaselineFromS, float fTBaselineToS, const QMap< QString, double > &mapReject, const QStringList &lExcludeChs=QStringList(), const Eigen::RowVectorXi &vecPicks=Eigen::RowVectorXi())
The FilterKernel class represents a filter object that generates the FIR filter coefficients using Pa...
RTPROCESINGSHARED_EXPORT Eigen::MatrixXd filterData(const Eigen::MatrixXd &matData, int type, double dCenterfreq, double dBandwidth, double dTransition, double dSFreq, int iOrder=1024, int designMethod=FilterKernel::m_designMethods.indexOf(FilterParameter("Cosine")), const Eigen::RowVectorXi &vecPicks=Eigen::RowVectorXi(), bool bUseThreads=true, bool bKeepOverhead=false)
MNEEpochDataList class declaration.
FIFF raw measurement data.
bool read_raw_segment(Eigen::MatrixXd &data, Eigen::MatrixXd ×, fiff_int_t from=-1, fiff_int_t to=-1, const Eigen::RowVectorXi &sel=defaultRowVectorXi, bool do_debug=false) const
QSharedPointer< MNEEpochData > SPtr
FIFFLIB::FiffEvoked average(const FIFFLIB::FiffInfo &p_info, FIFFLIB::fiff_int_t first, FIFFLIB::fiff_int_t last, Eigen::VectorXi sel=FIFFLIB::defaultVectorXi, bool proj=false)
void applyBaselineCorrection(const QPair< float, float > &baseline)
static MNEEpochDataList readEpochs(const FIFFLIB::FiffRawData &raw, const Eigen::MatrixXi &events, float tmin, float tmax, qint32 event, const QMap< QString, double > &mapReject, const QStringList &lExcludeChs=QStringList(), const Eigen::RowVectorXi &picks=Eigen::RowVectorXi())
static bool checkForArtifact(const Eigen::MatrixXd &data, const FIFFLIB::FiffInfo &pFiffInfo, const QMap< QString, double > &mapReject, const QStringList &lExcludeChs=QStringList())