23#include <QMapIterator>
38 QList<MatrixXi> lMatDetectedTrigger;
40 QMapIterator<int,QList<QPair<int,double> > > idx(mapTriggers);
42 while (idx.hasNext()) {
44 MatrixXi matDetectedTrigger(idx.value().size(),3);
46 for(
int i = 0; i < idx.value().size(); ++i) {
47 matDetectedTrigger(i,0) = idx.value().at(i).first;
48 matDetectedTrigger(i,1) = 0;
49 matDetectedTrigger(i,2) = idx.value().at(i).second;
52 lMatDetectedTrigger << matDetectedTrigger;
55 return lMatDetectedTrigger;
61 const QList<int>& lTriggerChannels,
67 QMap<int,QList<QPair<int,double> > > qMapDetectedTrigger;
70 for(
int i = 0; i < lTriggerChannels.size(); ++i) {
71 int iChIdx = lTriggerChannels.at(i);
74 QList<QPair<int,double> > temp;
75 qMapDetectedTrigger.insert(iChIdx, temp);
78 if(iChIdx > data.rows() || iChIdx < 0) {
79 return qMapDetectedTrigger;
83 for(
int j = 0; j < data.cols(); ++j) {
84 double dMatVal = bRemoveOffset ? data(iChIdx,j) - data(iChIdx,0) : data(iChIdx,j);
86 if(dMatVal >= dThreshold) {
87 QPair<int,double> pair;
88 pair.first = iOffsetIndex+j;
89 pair.second = data(iChIdx,j);
91 qMapDetectedTrigger[iChIdx].append(pair);
93 j += iBurstLengthSamp;
98 return qMapDetectedTrigger;
104 int iTriggerChannelIdx,
108 int iBurstLengthSamp)
110 QList<QPair<int,double> > lDetectedTriggers;
114 if(iTriggerChannelIdx > data.rows() || iTriggerChannelIdx < 0) {
115 return lDetectedTriggers;
119 for(
int j = 0; j < data.cols(); ++j) {
120 double dMatVal = bRemoveOffset ? data(iTriggerChannelIdx,j) - data(iTriggerChannelIdx,0) : data(iTriggerChannelIdx,j);
122 if(dMatVal >= dThreshold) {
123 QPair<int,double> pair;
124 pair.first = iOffsetIndex+j;
125 pair.second = data(iTriggerChannelIdx,j);
127 lDetectedTriggers.append(pair);
129 j += iBurstLengthSamp;
133 return lDetectedTriggers;
139 const QList<int>& lTriggerChannels,
144 int iBurstLengthSamp)
146 QMap<int,QList<QPair<int,double> > > qMapDetectedTrigger;
147 RowVectorXd tGradient = RowVectorXd::Zero(data.cols());
150 for(
int i = 0; i < lTriggerChannels.size(); ++i) {
151 int iChIdx = lTriggerChannels.at(i);
154 QList<QPair<int,double> > temp;
155 qMapDetectedTrigger.insert(iChIdx, temp);
158 if(iChIdx > data.rows() || iChIdx < 0) {
159 return qMapDetectedTrigger;
163 for(
int t = 1; t<tGradient.cols(); t++) {
164 tGradient(t) = data(iChIdx,t)-data(iChIdx,t-1);
168 if(type ==
"Falling") {
169 tGradient = tGradient * -1;
173 for(
int j = 0; j < tGradient.cols(); ++j) {
174 double dMatVal = bRemoveOffset ? tGradient(j) - data(iChIdx,0) : tGradient(j);
176 if(dMatVal >= dThreshold) {
177 QPair<int,double> pair;
178 pair.first = iOffsetIndex+j;
179 pair.second = tGradient(j);
181 qMapDetectedTrigger[iChIdx].append(pair);
183 j += iBurstLengthSamp;
188 return qMapDetectedTrigger;
194 int iTriggerChannelIdx,
199 int iBurstLengthSamp)
201 QList<QPair<int,double> > lDetectedTriggers;
203 RowVectorXd tGradient = RowVectorXd::Zero(data.cols());
206 if(iTriggerChannelIdx > data.rows() || iTriggerChannelIdx < 0) {
207 return lDetectedTriggers;
211 for(
int t = 1; t < tGradient.cols(); ++t) {
212 tGradient(t) = data(iTriggerChannelIdx,t) - data(iTriggerChannelIdx,t-1);
216 if(type ==
"Falling") {
217 tGradient = tGradient * -1;
221 for(
int j = 0; j < tGradient.cols(); ++j) {
222 double dMatVal = bRemoveOffset ? tGradient(j) - data(iTriggerChannelIdx,0) : tGradient(j);
224 if(dMatVal >= dThreshold) {
225 QPair<int,double> pair;
226 pair.first = iOffsetIndex+j;
227 pair.second = tGradient(j);
229 lDetectedTriggers.append(pair);
231 j += iBurstLengthSamp;
235 return lDetectedTriggers;
Threshold and edge-based trigger detection on streaming stim channels.
DSPSHARED_EXPORT QMap< int, QList< QPair< int, double > > > detectTriggerFlanksGrad(const Eigen::MatrixXd &data, const QList< int > &lTriggerChannels, int iOffsetIndex, double dThreshold, bool bRemoveOffset, const QString &type, int iBurstLengthSamp=100)
DSPSHARED_EXPORT QMap< int, QList< QPair< int, double > > > detectTriggerFlanksMax(const Eigen::MatrixXd &data, const QList< int > &lTriggerChannels, int iOffsetIndex, double dThreshold, bool bRemoveOffset, int iBurstLengthSamp=100)
DSPSHARED_EXPORT QList< Eigen::MatrixXi > toEventMatrix(QMap< int, QList< QPair< int, double > > > mapTriggers)