void MapsPrivate::loadDiffs( const QString& basePath, unsigned int id ) { // Try to read the index QDir baseFolder( basePath ); QStringList files = baseFolder.entryList(); QString mapDiffListName = QString( "mapdifl%1.mul" ).arg( id ); QString mapDiffFileName = QString( "mapdif%1.mul" ).arg( id ); QString statDiffFileName = QString( "stadif%1.mul" ).arg( id ); QString statDiffListName = QString( "stadifl%1.mul" ).arg( id ); QString statDiffIndexName = QString( "stadifi%1.mul" ).arg( id ); for ( QStringList::const_iterator it = files.begin(); it != files.end(); ++it ) { if ( ( *it ).lower() == mapDiffListName ) mapDiffListName = *it; else if ( ( *it ).lower() == mapDiffFileName ) mapDiffFileName = *it; else if ( ( *it ).lower() == statDiffFileName ) statDiffFileName = *it; else if ( ( *it ).lower() == statDiffListName ) statDiffListName = *it; else if ( ( *it ).lower() == statDiffIndexName ) statDiffIndexName = *it; } QFile mapdiflist( basePath + mapDiffListName ); mapdifdata.setName( basePath + mapDiffFileName ); // Try to read a list of ids if ( mapdifdata.open( IO_ReadOnly ) && mapdiflist.open( IO_ReadOnly ) ) { QDataStream listinput( &mapdiflist ); listinput.setByteOrder( QDataStream::LittleEndian ); unsigned int offset = 0; while ( !listinput.atEnd() ) { unsigned int id; listinput >> id; mappatches.insert( id, offset ); offset += sizeof( mapblock ); } mapdiflist.close(); }
bool mitk::DiffusionCollectionWriter::ExportCollectionToFolder(DataCollection *dataCollection, std::string xmlFile, std::vector<std::string> filter) { // Quick and Dirty: Assumes three level DataCollection QDir fileName = QFileInfo(xmlFile.c_str()).absoluteDir(); std::string outputFolder = fileName.path().toStdString() + QDir::separator().toLatin1(); QDir baseFolder(outputFolder.c_str()); baseFolder.mkpath(outputFolder.c_str()); std::ofstream xmlFileStream; xmlFileStream.open (xmlFile.c_str()); xmlFileStream << "<!-- MITK - DataCollection - File Version 1.0 --> \n"; xmlFileStream << "<" << COLLECTION << " " << NAME << "=\"" << dataCollection->GetName() << "\" >\n"; unsigned int subColId = 0; unsigned int dataId = 0; QDir dir(QString::fromStdString(outputFolder)); for (size_t i = 0 ; i < dataCollection->Size(); ++i) { // Write Subcollection tag xmlFileStream << " <" << SUBCOLLECTION << " " << NAME << "=\"" << dataCollection->IndexToName(i) << "\" " << FILEPATH << "=\"" << dataCollection->GetDataFilePath(i) << "\" id=\"Col" << subColId << "\" >\n"; // Create Sub-Folder dir.mkpath(QString::fromStdString(dataCollection->IndexToName(i))); // Herein create data folders DataCollection* subCollections = dynamic_cast<DataCollection*> (dataCollection->GetData(i).GetPointer()); if (subCollections == nullptr) { MITK_ERROR<< "mitk::DiffusionCollectionWriter::SaveCollectionToFolder: Container is illformed. Aborting"; return false; } for (size_t d = 0; d < subCollections->Size(); d++ ) { // Create Sub Paths QString subPath = QString::fromStdString(dataCollection->IndexToName(i))+"/"+QString::fromStdString(subCollections->IndexToName(d)); dir.mkpath(subPath); xmlFileStream << " <" << DATA << " " << NAME << "=\"" << subCollections->IndexToName(d) << "\" " << FILEPATH << "=\"" << subCollections->GetDataFilePath(d) << "\" id=\"Data" << dataId << "\" >\n"; DataCollection* itemCollections = dynamic_cast<DataCollection*> (subCollections->GetData(d).GetPointer()); if (itemCollections == nullptr) { MITK_ERROR<< "mitk::DiffusionCollectionWriter::SaveCollectionToFolder: Container is illformed. Aborting"; return false; } for (size_t s = 0; s < itemCollections->Size(); s++) { if (filter.size() > 0) { bool isSelected = false; for (size_t f = 0; f < filter.size(); f++) { if (filter.at(f) == itemCollections->IndexToName(s) ) { isSelected = true; break; } } if (isSelected == false) continue; } Image* image = dynamic_cast<Image*> (itemCollections->GetData(s).GetPointer()); QString fileName = dir.path() + dir.separator() + subPath + dir.separator() + QString::fromStdString(dataCollection->IndexToName(i)) + "_" + QString::fromStdString(subCollections->IndexToName(d)) + "_" + QString::fromStdString(itemCollections->IndexToName(s)); try { if (itemCollections->IndexToName(s) == "DTI" || itemCollections->IndexToName(s) == "DTIFWE") { fileName += ".dti"; IOUtil::Save(image,fileName.toStdString()); } else if (itemCollections->IndexToName(s) == "FIB") { fileName += ".fib"; FiberBundle* fib = dynamic_cast<FiberBundle*> (itemCollections->GetData(s).GetPointer()); IOUtil::Save(fib, fileName.toStdString()); } else if (itemCollections->IndexToName(s) == "DWI") { fileName += ".dwi"; IOUtil::Save(image,fileName.toStdString()); } else { fileName += ".nrrd"; Image::Pointer image = itemCollections->GetMitkImage(s).GetPointer(); IOUtil::Save(image,fileName.toStdString()); } } catch( const std::exception& e) { MITK_ERROR << "Caught exception: " << e.what(); } std::string relativeFilename = baseFolder.relativeFilePath(fileName).toStdString(); xmlFileStream << " <" << ITEM << " " << NAME << "=\"" <<itemCollections->IndexToName(s) << "\" " << FILEPATH << "=\"" << "\" " << LINK << "=\"" << relativeFilename << "\" />\n"; } xmlFileStream << " </" << DATA << ">\n"; dataId++; } xmlFileStream << " </" << SUBCOLLECTION << ">\n"; subColId++; } xmlFileStream << "</" << COLLECTION << ">\n"; xmlFileStream.flush(); xmlFileStream.close(); return true; }