72: m_qListDigPoint(p_FiffDigPointSet.m_qListDigPoint)
79: m_qListDigPoint(pointList)
94 throw std::runtime_error(
"Could not read the FiffDigPointSet");
97 qInfo(
"[FiffDigPointSet::FiffDigPointSet] %i digitizer Points read from file.", this->
size());
113 bool open_here =
false;
115 if (!p_pStream->device()->isOpen()) {
116 QString t_sFileName = p_pStream->streamName();
118 if(!p_pStream->open())
121 qInfo(
"Opening header data %s...\n",t_sFileName.toUtf8().constData());
130 fiff_int_t kind = -1;
137 QList<FiffDirNode::SPtr> isotrak = p_pStream->dirtree()->dir_tree_find(
FIFFB_ISOTRAK);
143 if (isotrak.size() == 1)
145 for (k = 0; k < isotrak[0]->nent(); ++k)
147 kind = isotrak[0]->dir[k]->kind;
148 pos = isotrak[0]->dir[k]->pos;
151 p_pStream->read_tag(t_pTag, pos);
152 p_Dig.m_qListDigPoint.append(t_pTag->toDigPoint());
158 p_pStream->read_tag(t_pTag, pos);
159 qDebug() <<
"NEEDS To BE DEBBUGED: FIFF_MNE_COORD_FRAME" << t_pTag->getType();
160 coord_frame = *t_pTag->toInt();
164 p_pStream->read_tag(t_pTag, pos);
165 qDebug() <<
"NEEDS To BE DEBBUGED: FIFF_COORD_TRANS" << t_pTag->getType();
166 dig_trans = t_pTag->toCoordTrans();
171 for(k = 0; k < p_Dig.
size(); ++k)
173 p_Dig[k].coord_frame = coord_frame;
196 qInfo(
"Write Digitizer Points in %s...\n", t_pStream->streamName().toUtf8().constData());
198 t_pStream->end_file();
205 if (filePath.isEmpty()) {
206 if (errorMessage) *errorMessage = QStringLiteral(
"Output path is empty.");
210 const QFileInfo info(filePath);
211 if (!info.dir().exists()) {
213 *errorMessage = QStringLiteral(
"Destination directory '%1' does not exist.")
214 .arg(info.dir().absolutePath());
219 QFile file(filePath);
220 if (!file.open(QIODevice::WriteOnly | QIODevice::Truncate)) {
222 *errorMessage = QStringLiteral(
"Cannot open '%1' for writing: %2")
223 .arg(filePath, file.errorString());
231 if (!QFileInfo::exists(filePath)) {
233 *errorMessage = QStringLiteral(
"FiffDigPointSet::write produced no file at '%1'.")
249 for(qint32 h = 0; h < m_qListDigPoint.size(); ++h)
254 qInfo(
"\t%lld digitizer points written\n", m_qListDigPoint.size());
264 if (idx>=m_qListDigPoint.length())
266 qWarning(
"Warning: Required DigPoint doesn't exist! Returning DigPoint '0'.");
269 return m_qListDigPoint[idx];
276 if (idx >= m_qListDigPoint.length())
278 qWarning(
"Warning: Required DigPoint doesn't exist! Returning DigPoint '0'.");
281 return m_qListDigPoint[idx];
290 for(
int i = 0; i < m_qListDigPoint.size(); ++i) {
291 if(includeTypes.contains(m_qListDigPoint[i].kind)) {
292 pickedSet << m_qListDigPoint[i];
303 this->m_qListDigPoint.append(dig);
311 this->m_qListDigPoint.append(*dig);
320 for(
int i = 0; i < m_qListDigPoint.size(); ++i) {
321 tempvec(0) = m_qListDigPoint.at(i).r[0];
322 tempvec(1) = m_qListDigPoint.at(i).r[1];
323 tempvec(2) = m_qListDigPoint.at(i).r[2];
326 tempvec = coordTrans.
invtrans * tempvec;
328 tempvec = coordTrans.
trans * tempvec;
330 m_qListDigPoint[i].r[0] = tempvec(0);
331 m_qListDigPoint[i].r[1] = tempvec(1);
332 m_qListDigPoint[i].r[2] = tempvec(2);
340 return m_qListDigPoint;
Container for the FIFF_DIG_POINT records of a measurement (a parsed FIFFB_ISOTRAK block).
#define FIFF_MNE_COORD_FRAME
Recursive node of the parsed FIFF block tree (FIFFB_* hierarchy with directory entries and children).
FIFF tag: the 16-byte tag header (kind, type, size, next) plus its decoded payload.
Single digitization point (FIFF_DIG_POINT) with kind (cardinal/HPI/EEG/extra), identifier and 3D coor...
Primitive scalar typedefs and forward-compatible aliases backing the FIFF type system.
FIFF file I/O, in-memory data structures and high-level readers/writers.
Labelled 4x4 FIFF affine: source frame, destination frame, rotation, translation and cached inverse.
Eigen::Matrix< float, 4, 4, Eigen::DontAlign > trans
Eigen::Matrix< float, 4, 4, Eigen::DontAlign > invtrans
One digitizer point: kind (cardinal/HPI/EEG/extra), ident, 3D position in FIFFV_COORD_HEAD.
const FiffDigPoint & operator[](qint32 idx) const
FiffDigPointSet & operator<<(const FiffDigPoint &dig)
FiffDigPointSet pickTypes(QList< int > includeTypes) const
void applyTransform(const FiffCoordTrans &coordTrans, bool bApplyInverse=false)
void write(QIODevice &p_IODevice)
void writeToStream(FiffStream *p_pStream)
static bool readFromStream(FiffStream::SPtr &p_Stream, FiffDigPointSet &p_Dig)
QList< FiffDigPoint > getList()
FIFF tag-stream reader/writer: wraps a QIODevice and exposes typed read_* / write_* methods for every...
fiff_long_t start_block(fiff_int_t kind)
QSharedPointer< FiffStream > SPtr
fiff_long_t write_dig_point(const FiffDigPoint &dig)
static FiffStream::SPtr start_file(QIODevice &p_IODevice)
fiff_long_t end_block(fiff_int_t kind, fiff_int_t next=FIFFV_NEXT_SEQ)
std::unique_ptr< FiffTag > UPtr