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());
137 QList<FiffDirNode::SPtr> isotrak = p_pStream->dirtree()->dir_tree_find(
FIFFB_ISOTRAK);
143 if (isotrak.size() == 1) {
144 for (k = 0; k < isotrak[0]->nent(); ++k) {
145 kind = isotrak[0]->dir[k]->kind;
146 pos = isotrak[0]->dir[k]->pos;
148 p_pStream->read_tag(t_pTag, pos);
149 p_Dig.m_qListDigPoint.append(t_pTag->toDigPoint());
152 p_pStream->read_tag(t_pTag, pos);
153 qDebug() <<
"NEEDS To BE DEBBUGED: FIFF_MNE_COORD_FRAME" << t_pTag->getType();
154 coord_frame = *t_pTag->toInt();
156 p_pStream->read_tag(t_pTag, pos);
157 qDebug() <<
"NEEDS To BE DEBBUGED: FIFF_COORD_TRANS" << t_pTag->getType();
158 dig_trans = t_pTag->toCoordTrans();
163 for (k = 0; k < p_Dig.
size(); ++k) {
164 p_Dig[k].coord_frame = coord_frame;
184 qInfo(
"Write Digitizer Points in %s...\n", t_pStream->streamName().toUtf8().constData());
186 t_pStream->end_file();
194 if (filePath.isEmpty()) {
196 *errorMessage = QStringLiteral(
"Output path is empty.");
200 const QFileInfo info(filePath);
201 if (!info.dir().exists()) {
203 *errorMessage = QStringLiteral(
"Destination directory '%1' does not exist.")
204 .arg(info.dir().absolutePath());
209 QFile file(filePath);
210 if (!file.open(QIODevice::WriteOnly | QIODevice::Truncate)) {
212 *errorMessage = QStringLiteral(
"Cannot open '%1' for writing: %2")
213 .arg(filePath, file.errorString());
221 if (!QFileInfo::exists(filePath)) {
223 *errorMessage = QStringLiteral(
"FiffDigPointSet::write produced no file at '%1'.")
239 for (qint32 h = 0; h < m_qListDigPoint.size(); ++h) {
243 qInfo(
"\t%lld digitizer points written\n",
static_cast<long long>(m_qListDigPoint.size()));
253 if (idx >= m_qListDigPoint.length()) {
254 qWarning(
"Warning: Required DigPoint doesn't exist! Returning DigPoint '0'.");
257 return m_qListDigPoint[idx];
264 if (idx >= m_qListDigPoint.length()) {
265 qWarning(
"Warning: Required DigPoint doesn't exist! Returning DigPoint '0'.");
268 return m_qListDigPoint[idx];
277 for (
int i = 0; i < m_qListDigPoint.size(); ++i) {
278 if (includeTypes.contains(m_qListDigPoint[i].kind)) {
279 pickedSet << m_qListDigPoint[i];
290 this->m_qListDigPoint.append(dig);
298 this->m_qListDigPoint.append(*dig);
307 for (
int i = 0; i < m_qListDigPoint.size(); ++i) {
308 tempvec(0) = m_qListDigPoint.at(i).r[0];
309 tempvec(1) = m_qListDigPoint.at(i).r[1];
310 tempvec(2) = m_qListDigPoint.at(i).r[2];
313 tempvec = coordTrans.
invtrans * tempvec;
315 tempvec = coordTrans.
trans * tempvec;
317 m_qListDigPoint[i].r[0] = tempvec(0);
318 m_qListDigPoint[i].r[1] = tempvec(1);
319 m_qListDigPoint[i].r[2] = tempvec(2);
327 return m_qListDigPoint;
#define FIFF_MNE_COORD_FRAME
FIFF tag: the 16-byte tag header (kind, type, size, next) plus its decoded payload.
Container for the FIFF_DIG_POINT records of a measurement (a parsed FIFFB_ISOTRAK block).
Recursive node of the parsed FIFF block tree (FIFFB_* hierarchy with directory entries and children).
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 > invtrans
Eigen::Matrix< float, 4, 4, Eigen::DontAlign > trans
One digitizer point: kind (cardinal/HPI/EEG/extra), ident, 3D position in FIFFV_COORD_HEAD.
bool write(QIODevice &p_IODevice)
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 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