diff --git a/GeoModelDBManager/GeoModelDBManager/GMDBManager.h b/GeoModelDBManager/GeoModelDBManager/GMDBManager.h index 9593df11440a9b746aeaf04b2a2b0020846a2d6e..d5a49139dd4a16f48dd37f566f914ec313da964e 100644 --- a/GeoModelDBManager/GeoModelDBManager/GMDBManager.h +++ b/GeoModelDBManager/GeoModelDBManager/GMDBManager.h @@ -161,13 +161,19 @@ public: QString getDBFilePath(); QStringList getRootPhysVol(); + std::vector<std::string> getRootPhysVolStd(); QStringList getItem(QString geoType, unsigned int id); QStringList getItem(unsigned int tableId, unsigned int id); - QStringList getItemFromTableName(QString tableName, unsigned int id); + + QStringList getItemFromTableName(QString tableName, unsigned int id); + std::vector<std::string> getItemFromTableNameStd(QString tableName, unsigned int id); + QStringList getItemAndType(unsigned int tableId, unsigned int id); + std::vector<std::string> getItemAndTypeStd(unsigned int tableId, unsigned int id); QString getNodeTypeFromTableId(unsigned int id); + std::string getNodeTypeFromTableIdStd(unsigned int id); QMap<unsigned int, QStringList> getVPhysVolChildren(const unsigned int id, const QString nodeType, const unsigned int copyN); @@ -177,6 +183,7 @@ public: QHash<unsigned int, QStringList> getTableFromNodeType(QString nodeType); std::vector<std::vector<std::string>> getTableFromNodeTypeStd(std::string nodeType); + QHash<unsigned int, QString> getAll_TableIDsNodeTypes(); QHash<QString, unsigned int> getAll_NodeTypesTableIDs(); std::unordered_map<unsigned int, std::string> getAll_TableIDsNodeTypesStd(); @@ -195,6 +202,8 @@ private: QStringList getTableColNamesFromDB(QString tableName) const; QString getTableNameFromTableId(unsigned int tabId); + std::string getTableNameFromTableIdStd(unsigned int tabId); + QVariant getTableIdFromNodeType(QString nodeType); void storeNodeType(QString nodeType, QString tableName); QString getTableNameFromNodeType(QString nodeType); diff --git a/GeoModelDBManager/src/GMDBManager.cpp b/GeoModelDBManager/src/GMDBManager.cpp index ffd5480c2833b53b45cce17f0a2f873dee65aba8..2c1b077986abb7f78bc630cf890aba232446ed02 100644 --- a/GeoModelDBManager/src/GMDBManager.cpp +++ b/GeoModelDBManager/src/GMDBManager.cpp @@ -10,6 +10,8 @@ #include <QSqlDriver> #include <QDebug> +#include <stdlib.h> /* exit, EXIT_FAILURE */ + static std::string dbversion = "0.3.0"; // added GeoElement support (Sep 2019) @@ -55,7 +57,6 @@ GMDBManager::GMDBManager(const QString &path) : m_dbpath(path), m_dbIsOK(false), GMDBManager::~GMDBManager() { - // JFB commented: qDebug() << "GMDBManager: destructor"; if (m_db.isOpen()) { m_db.close(); @@ -887,6 +888,22 @@ QStringList GMDBManager::getItemAndType(unsigned int tableId, unsigned int id) return results; } +std::vector<std::string> GMDBManager::getItemAndTypeStd(unsigned int tableId, unsigned int id) +{ + std::vector<std::string> results; + + QString tableName = getTableNameFromTableId(tableId); + std::string nodeType = getNodeTypeFromTableIdStd(tableId); + std::vector<std::string> item = getItemFromTableNameStd(tableName, id); + + // add the type + results.push_back( nodeType ); + // add the item + results.insert(results.end(), item.begin(), item.end()); + + return results; + +} QStringList GMDBManager::getItemFromTableName(QString tableName, unsigned int id) @@ -922,6 +939,41 @@ QStringList GMDBManager::getItemFromTableName(QString tableName, unsigned int id return params; } +std::vector<std::string> GMDBManager::getItemFromTableNameStd(QString tableName, unsigned int id) +{ + if (m_deepDebug) qDebug() << "GMDBManager::getItemFromTableName(tableName, id)"<< tableName << QString::number(id); + /* + * 2. Get the object from DB + */ + // prepare a SQL string with the right table name + QString queryStr = QString("SELECT * FROM %1 WHERE id = (?)").arg(tableName); + // prepare the query + QSqlQuery q; + if (!q.prepare( queryStr )) { + showError(q.lastError()); +// return QStringList(); + exit(EXIT_FAILURE); + } + q.addBindValue(id); + q.exec(); + + std::vector<std::string> params; + + // get the number of columns of the DB table + int nCols = (m_tableNames[tableName]).size(); + + while (q.next()) { + + for( int ii=0; ii<nCols; ++ii) + params.push_back( q.value(ii).toString().toStdString() ); + } + if (params.size()==0) { + qWarning() << "WARNING!!" << "Item" << id << "does not exist in table" << tableName << "!!"; + } + return params; +} + + // get the list of children for a single GeoVPhysVol (i.e., GeoPhysVol or GeoFullPhysVol) QMap<unsigned int, QStringList> GMDBManager::getVPhysVolChildren(const unsigned int id, const QString nodeType, const unsigned int parentCopyNumber) { @@ -1080,7 +1132,6 @@ QString GMDBManager::getTableNameFromNodeType(QString nodeType) // TODO: this and other methods could take data from in-memory maps, without asking to the DB all the times QString GMDBManager::getTableNameFromTableId(unsigned int tabId) { - // JFB commented: qDebug() << "GMDBManager::getTableNameFromTableId()"; QSqlQuery q; if (!q.prepare(QLatin1String("SELECT tableName FROM GeoNodesTypes WHERE id = (?)"))) { showError(q.lastError()); @@ -1097,10 +1148,27 @@ QString GMDBManager::getTableNameFromTableId(unsigned int tabId) return tableName; } +std::string GMDBManager::getTableNameFromTableIdStd(unsigned int tabId) +{ + QSqlQuery q; + if (!q.prepare(QLatin1String("SELECT tableName FROM GeoNodesTypes WHERE id = (?)"))) { + showError(q.lastError()); +// return QString(); + exit(EXIT_FAILURE); + } + q.addBindValue(tabId); + q.exec(); + + std::string tableName; + while (q.next()) { + tableName = q.value(0).toString().toStdString(); + } + + return tableName; +} QString GMDBManager::getNodeTypeFromTableId(unsigned int tabId) { - // JFB commented: qDebug() << "GMDBManager::getNodeTypeFromTableId()"; QSqlQuery q; if (!q.prepare(QLatin1String("SELECT nodeType FROM GeoNodesTypes WHERE id = (?)"))) { showError(q.lastError()); @@ -1112,12 +1180,28 @@ QString GMDBManager::getNodeTypeFromTableId(unsigned int tabId) QString nodeType; while (q.next()) { nodeType = q.value(0).toString(); - // JFB commented: qDebug() << "tableName:" << nodeType; } return nodeType; } - +std::string GMDBManager::getNodeTypeFromTableIdStd(unsigned int tabId) +{ + QSqlQuery q; + if (!q.prepare(QLatin1String("SELECT nodeType FROM GeoNodesTypes WHERE id = (?)"))) { + showError(q.lastError()); + // return QString(); + exit(EXIT_FAILURE); + } + q.addBindValue(tabId); + q.exec(); + + std::string nodeType; + while (q.next()) { + nodeType = q.value(0).toString().toStdString(); + } + + return nodeType; +} QHash<unsigned int, QString> GMDBManager::getAll_TableIDsNodeTypes() { @@ -1679,6 +1763,21 @@ QStringList GMDBManager::getRootPhysVol() return getItemAndType(typeId.toUInt(), id.toUInt()); } +std::vector<std::string> GMDBManager::getRootPhysVolStd() +{ + // get the ID of the ROOT vol from the table "RootVolume" + QSqlQuery query = selectAllFromTable("RootVolume"); + + unsigned int id; + unsigned int typeId; + while (query.next()) { + id = query.value(1).toUInt(); + typeId = query.value(2).toUInt(); + } + return getItemAndTypeStd(typeId, id); +} + + QString GMDBManager::getDBFilePath() { return m_dbpath; diff --git a/GeoModelRead/GeoModelRead/ReadGeoModel.h b/GeoModelRead/GeoModelRead/ReadGeoModel.h index 7ab9a1436b978c78e3b138b9838c32ab3a63f565..5d0baa9b37af07fde2629227be44e481e03ab85c 100644 --- a/GeoModelRead/GeoModelRead/ReadGeoModel.h +++ b/GeoModelRead/GeoModelRead/ReadGeoModel.h @@ -103,22 +103,17 @@ private: void buildAllNameTags(); - std::string getEnvVar( std::string const & key ) const; GeoPhysVol* buildGeoModelPrivate(); GeoBox* buildDummyShape(); void loopOverAllChildrenInBunches(); - - void processChild(GeoVPhysVol* parentVol, bool &isRootVolume, const QStringList &child); - void loopOverAllChildrenRecords(std::vector<std::vector<std::string>> records); void processParentChild(const std::vector<std::string> &parentchild); GeoPhysVol* getRootVolume(); - GeoVPhysVol* parseChildren(GeoVPhysVol* vol, QMap<unsigned int, QStringList> children, int depth = 0); GeoVPhysVol* buildVPhysVolInstance(const unsigned int id, const unsigned int tableId, const unsigned int copyNumber); GeoVPhysVol* buildVPhysVol(const unsigned int id, const unsigned int tableId, unsigned int logVol_ID=0); @@ -202,14 +197,16 @@ private: // Utility functions - void checkInputString(QString input); + std::string getEnvVar( std::string const & key ) const; std::vector<std::string> splitString(const std::string& s, char delimiter); void printTrf(GeoTrf::Transform3D t); - void printTransformationValues(QStringList t); - QList<double> convertQstringListToDouble(QStringList listin); - std::vector<std::string> toStdVectorStrings(QStringList qlist); - QStringList toQStringList(std::vector<std::string> vec); void printStdVectorStrings(std::vector<std::string> vec); //TODO: move it to utility class + + // void printTransformationValues(QStringList t); // TODO: move to a Qt utility class + // QList<double> convertQstringListToDouble(QStringList listin); // TODO: move to a Qt utility class + // std::vector<std::string> toStdVectorStrings(QStringList qlist); // TODO: move to a Qt utility class + // QStringList toQStringList(std::vector<std::string> vec); // TODO: move to a Qt utility class + // void checkInputString(QString input); // TODO: move to an utility class // input arguments @@ -236,7 +233,6 @@ private: std::vector<std::vector<std::string>> m_materials; std::vector<std::vector<std::string>> m_elements; std::vector<std::vector<std::string>> m_shapes; -// QHash<unsigned int, QStringList> m_functions; std::vector<std::vector<std::string>> m_functions; std::vector<std::vector<std::string>> m_allchildren; @@ -244,7 +240,8 @@ private: std::unordered_map<std::string, unsigned int> m_tableName_toTableID; // to look for table ID starting from node's type name - QStringList m_root_vol_data; +// QStringList m_root_vol_data; + std::vector<std::string> m_root_vol_data; //! memory chaches std::vector<GeoPhysVol*> m_memMapPhysVols; diff --git a/GeoModelRead/src/ReadGeoModel.cpp b/GeoModelRead/src/ReadGeoModel.cpp index 8ea5e1cdebf4d70c3800d7fafd53ada6cd05ebe1..46fc2dd6f3899366a364cdadd30af18dbddbdaf6 100644 --- a/GeoModelRead/src/ReadGeoModel.cpp +++ b/GeoModelRead/src/ReadGeoModel.cpp @@ -199,7 +199,8 @@ GeoPhysVol* ReadGeoModel::buildGeoModelPrivate() m_allchildren = m_dbManager->getChildrenTableStd(); // get the root volume data - m_root_vol_data = m_dbManager->getRootPhysVol(); +// m_root_vol_data = m_dbManager->getRootPhysVol(); + m_root_vol_data = m_dbManager->getRootPhysVolStd(); // get DB metadata m_tableID_toTableName = m_dbManager->getAll_TableIDsNodeTypesStd(); @@ -677,14 +678,14 @@ void ReadGeoModel::checkNodePtr(GeoGraphNode* nodePtr, std::string varName, std: } } - -void ReadGeoModel::checkInputString(QString input) -{ - if (input.isEmpty() || input.isNull() || input == "NULL") { - std::cout << "ERROR!!! Input QString is empty or equal to 'NULL'!!! Aborting..." << std::endl; - exit(1); - } -} + // TODO: move it to an utility class +//void ReadGeoModel::checkInputString(QString input) +//{ +// if (input.isEmpty() || input.isNull() || input == "NULL") { +// std::cout << "ERROR!!! Input QString is empty or equal to 'NULL'!!! Aborting..." << std::endl; +// exit(1); +// } +//} // Instantiate a PhysVol and get its children @@ -696,9 +697,6 @@ GeoVPhysVol* ReadGeoModel::buildVPhysVolInstance(const unsigned int id, const un muxCout.unlock(); } - checkInputString(QString::number(id)); - checkInputString(QString::number(tableId)); - // A - if the instance has been previously built, return that if ( nullptr != getVPhysVol(id, tableId, copyN)) { // if (isVPhysVolBuilt(id, tableId, copyN)) { @@ -709,7 +707,6 @@ GeoVPhysVol* ReadGeoModel::buildVPhysVolInstance(const unsigned int id, const un } return dynamic_cast<GeoVPhysVol*>(getVPhysVol(id, tableId, copyN)); } - // B - if not built already, then get the actual volume, // which should be already built by now, @@ -831,8 +828,8 @@ GeoPhysVol* ReadGeoModel::getRootVolume() std::cout << "ReadGeoModel::getRootVolume()" << std::endl; muxCout.unlock(); } - const unsigned int id = m_root_vol_data[1].toUInt(); - const unsigned int tableId = m_root_vol_data[2].toUInt(); + const unsigned int id = std::stoi(m_root_vol_data[1]); // TODO: GetRoot() should return integers instead of strings... + const unsigned int tableId = std::stoi(m_root_vol_data[2]); const unsigned int copyNumber = 1; // the Root volume has only one copy by definition GeoPhysVol* root = dynamic_cast<GeoPhysVol*>(buildVPhysVolInstance(id, tableId, copyNumber)); checkNodePtr(root, "root", __func__, __PRETTY_FUNCTION__); @@ -976,10 +973,10 @@ GeoShape* ReadGeoModel::buildShape(const unsigned int shapeId, type_shapes_boole // Get shape's parameters from the stored string. // This will be interpreted differently according to the shape. - std::vector<std::string> std_shapePars = splitString(parameters, ';'); + std::vector<std::string> shapePars = splitString(parameters, ';'); // FIXME: this is a temporary, ugly shortcut to postpone the QStrinList-->vector<string> move - QStringList shapePars = toQStringList(std_shapePars); +// QStringList shapePars = toQStringList(std_shapePars); if (m_deepDebug) { @@ -996,13 +993,13 @@ GeoShape* ReadGeoModel::buildShape(const unsigned int shapeId, type_shapes_boole double YHalfLength = 0.; double ZHalfLength = 0.; // get parameters from DB string - foreach( QString par, shapePars) { - QStringList vars = par.split("="); - QString varName = vars[0]; - QString varValue = vars[1]; - if (varName == "XHalfLength") XHalfLength = varValue.toDouble();// * SYSTEM_OF_UNITS::mm; - if (varName == "YHalfLength") YHalfLength = varValue.toDouble();// * SYSTEM_OF_UNITS::mm; - if (varName == "ZHalfLength") ZHalfLength = varValue.toDouble();// * SYSTEM_OF_UNITS::mm; + for( auto& par : shapePars) { + std::vector<std::string> vars = splitString(par, '='); + std::string varName = vars[0]; + std::string varValue = vars[1]; + if (varName == "XHalfLength") XHalfLength = std::stod(varValue);// * SYSTEM_OF_UNITS::mm; + if (varName == "YHalfLength") YHalfLength = std::stod(varValue);// * SYSTEM_OF_UNITS::mm; + if (varName == "ZHalfLength") ZHalfLength = std::stod(varValue);// * SYSTEM_OF_UNITS::mm; } shape = new GeoBox(XHalfLength, YHalfLength, ZHalfLength); } @@ -1016,18 +1013,18 @@ GeoShape* ReadGeoModel::buildShape(const unsigned int shapeId, type_shapes_boole double SPhi = 0.; double DPhi = 0.; // get parameters from DB string - foreach( QString par, shapePars) { - QStringList vars = par.split("="); - QString varName = vars[0]; - QString varValue = vars[1]; + for( auto& par : shapePars) { + std::vector<std::string> vars = splitString(par, '='); + std::string varName = vars[0]; + std::string varValue = vars[1]; // std::cout << "varValue Cons:" << varValue; - if (varName == "RMin1") RMin1 = varValue.toDouble();// * SYSTEM_OF_UNITS::mm; - if (varName == "RMin2") RMin2 = varValue.toDouble();// * SYSTEM_OF_UNITS::mm; - if (varName == "RMax1") RMax1 = varValue.toDouble();// * SYSTEM_OF_UNITS::mm; - if (varName == "RMax2") RMax2 = varValue.toDouble();// * SYSTEM_OF_UNITS::mm; - if (varName == "DZ") DZ = varValue.toDouble();// * SYSTEM_OF_UNITS::mm; - if (varName == "SPhi") SPhi = varValue.toDouble();// * SYSTEM_OF_UNITS::mm; - if (varName == "DPhi") DPhi = varValue.toDouble();// * SYSTEM_OF_UNITS::mm; + if (varName == "RMin1") RMin1 = std::stod(varValue);// * SYSTEM_OF_UNITS::mm; + if (varName == "RMin2") RMin2 = std::stod(varValue);// * SYSTEM_OF_UNITS::mm; + if (varName == "RMax1") RMax1 = std::stod(varValue);// * SYSTEM_OF_UNITS::mm; + if (varName == "RMax2") RMax2 = std::stod(varValue);// * SYSTEM_OF_UNITS::mm; + if (varName == "DZ") DZ = std::stod(varValue);// * SYSTEM_OF_UNITS::mm; + if (varName == "SPhi") SPhi = std::stod(varValue);// * SYSTEM_OF_UNITS::mm; + if (varName == "DPhi") DPhi = std::stod(varValue);// * SYSTEM_OF_UNITS::mm; } shape = new GeoCons (RMin1, RMin2, RMax1, RMax2, DZ, SPhi, DPhi); } @@ -1047,15 +1044,15 @@ GeoShape* ReadGeoModel::buildShape(const unsigned int shapeId, type_shapes_boole double SPhi = 0.; double DPhi = 0.; // get parameters from DB string - foreach( QString par, shapePars) { - QStringList vars = par.split("="); - QString varName = vars[0]; - QString varValue = vars[1]; - if (varName == "Rmin") Rmin = varValue.toDouble();// * SYSTEM_OF_UNITS::mm; - if (varName == "Rmax") Rmax = varValue.toDouble();// * SYSTEM_OF_UNITS::mm; - if (varName == "Rtor") Rtor = varValue.toDouble();// * SYSTEM_OF_UNITS::mm; - if (varName == "SPhi") SPhi = varValue.toDouble();// * SYSTEM_OF_UNITS::mm; - if (varName == "DPhi") DPhi = varValue.toDouble();// * SYSTEM_OF_UNITS::mm; + for( auto& par : shapePars) { + std::vector<std::string> vars = splitString(par, '='); + std::string varName = vars[0]; + std::string varValue = vars[1]; + if (varName == "Rmin") Rmin = std::stod(varValue);// * SYSTEM_OF_UNITS::mm; + if (varName == "Rmax") Rmax = std::stod(varValue);// * SYSTEM_OF_UNITS::mm; + if (varName == "Rtor") Rtor = std::stod(varValue);// * SYSTEM_OF_UNITS::mm; + if (varName == "SPhi") SPhi = std::stod(varValue);// * SYSTEM_OF_UNITS::mm; + if (varName == "DPhi") DPhi = std::stod(varValue);// * SYSTEM_OF_UNITS::mm; } shape = new GeoTorus (Rmin, Rmax, Rtor, SPhi, DPhi); } @@ -1068,16 +1065,16 @@ GeoShape* ReadGeoModel::buildShape(const unsigned int shapeId, type_shapes_boole double Theta = 0.; double Phi = 0.; // get parameters from DB string - foreach( QString par, shapePars) { - QStringList vars = par.split("="); - QString varName = vars[0]; - QString varValue = vars[1]; - if (varName == "XHalfLength") XHalfLength = varValue.toDouble();// * SYSTEM_OF_UNITS::mm; - if (varName == "YHalfLength") YHalfLength = varValue.toDouble();// * SYSTEM_OF_UNITS::mm; - if (varName == "ZHalfLength") ZHalfLength = varValue.toDouble();// * SYSTEM_OF_UNITS::mm; - if (varName == "Alpha") Alpha = varValue.toDouble();// * SYSTEM_OF_UNITS::mm; - if (varName == "Theta") Theta = varValue.toDouble();// * SYSTEM_OF_UNITS::mm; - if (varName == "Phi") Phi = varValue.toDouble();// * SYSTEM_OF_UNITS::mm; + for( auto& par : shapePars) { + std::vector<std::string> vars = splitString(par, '='); + std::string varName = vars[0]; + std::string varValue = vars[1]; + if (varName == "XHalfLength") XHalfLength = std::stod(varValue);// * SYSTEM_OF_UNITS::mm; + if (varName == "YHalfLength") YHalfLength = std::stod(varValue);// * SYSTEM_OF_UNITS::mm; + if (varName == "ZHalfLength") ZHalfLength = std::stod(varValue);// * SYSTEM_OF_UNITS::mm; + if (varName == "Alpha") Alpha = std::stod(varValue);// * SYSTEM_OF_UNITS::mm; + if (varName == "Theta") Theta = std::stod(varValue);// * SYSTEM_OF_UNITS::mm; + if (varName == "Phi") Phi = std::stod(varValue);// * SYSTEM_OF_UNITS::mm; } shape = new GeoPara (XHalfLength, YHalfLength, ZHalfLength, Alpha, Theta, Phi); } @@ -1088,10 +1085,10 @@ GeoShape* ReadGeoModel::buildShape(const unsigned int shapeId, type_shapes_boole unsigned int NZPlanes = 0; bool error = 0; - QString par; - QStringList vars; - QString varName; - QString varValue; + std::string par; + std::vector<std::string> vars; + std::string varName; + std::string varValue; GeoPcon* pcon = nullptr; @@ -1102,12 +1099,12 @@ GeoShape* ReadGeoModel::buildShape(const unsigned int shapeId, type_shapes_boole // get the three first GeoPcon parameters: the SPhi and DPhi angles, plus the number of Z planes for( int it=0; it < 3; it++) { par = shapePars[it]; - vars = par.split("="); + vars = splitString(par, '='); varName = vars[0]; varValue = vars[1]; - if (varName == "SPhi") SPhi = varValue.toDouble(); - if (varName == "DPhi") DPhi = varValue.toDouble(); - if (varName == "NZPlanes") NZPlanes = varValue.toDouble(); + if (varName == "SPhi") SPhi = std::stod(varValue); + if (varName == "DPhi") DPhi = std::stod(varValue); + if (varName == "NZPlanes") NZPlanes = std::stoi(varValue); } // build the basic GeoPcon shape pcon = new GeoPcon(SPhi, DPhi); @@ -1116,31 +1113,30 @@ GeoShape* ReadGeoModel::buildShape(const unsigned int shapeId, type_shapes_boole for (int it=3; it < sizePars; it++) { par = shapePars[it]; - vars = par.split("="); + vars = splitString(par, '='); varName = vars[0]; varValue = vars[1]; - // qInfo() << "it:" << it << "par:" << par << "varName:" << varName << "varValue:" << varValue; if (varName == "ZPos") { - double zpos = varValue.toDouble(); + double zpos = std::stod(varValue); double rmin=0., rmax=0.; it++; // go to next variable par = shapePars[it]; - vars = par.split("="); + vars = splitString(par, '='); varName = vars[0]; varValue = vars[1]; - if (varName == "ZRmin") rmin = varValue.toDouble(); + if (varName == "ZRmin") rmin = std::stod(varValue); else error = 1; it++; // go to next variable par = shapePars[it]; - vars = par.split("="); + vars = splitString(par, '='); varName = vars[0]; varValue = vars[1]; - if (varName == "ZRmax") rmax = varValue.toDouble(); + if (varName == "ZRmax") rmax = std::stod(varValue); else error = 1; if(error) { @@ -1198,10 +1194,11 @@ GeoShape* ReadGeoModel::buildShape(const unsigned int shapeId, type_shapes_boole bool error = false; GeoPgon* pgon = nullptr; - QString par; - QStringList vars; - QString varName; - QString varValue; + + std::string par; + std::vector<std::string> vars; + std::string varName; + std::string varValue; int sizePars = shapePars.size(); // check if we have more than 3 parameters @@ -1210,14 +1207,14 @@ GeoShape* ReadGeoModel::buildShape(const unsigned int shapeId, type_shapes_boole // get the first four GeoPgon parameters: the SPhi and DPhi angles, plus the number of Z planes for( int it=0; it < 4; it++) { par = shapePars[it]; - vars = par.split("="); + vars = splitString(par, '='); varName = vars[0]; varValue = vars[1]; // qInfo() << "vars: " << vars; // for debug only - if (varName == "SPhi") SPhi = varValue.toDouble(); - if (varName == "DPhi") DPhi = varValue.toDouble(); - if (varName == "NSides") NSides = varValue.toUInt();// * SYSTEM_OF_UNITS::mm; - if (varName == "NZPlanes") NZPlanes = varValue.toDouble(); + if (varName == "SPhi") SPhi = std::stod(varValue); + if (varName == "DPhi") DPhi = std::stod(varValue); + if (varName == "NSides") NSides = std::stoi(varValue);// * SYSTEM_OF_UNITS::mm; + if (varName == "NZPlanes") NZPlanes = std::stoi(varValue); } // build the basic GeoPgon shape @@ -1227,31 +1224,31 @@ GeoShape* ReadGeoModel::buildShape(const unsigned int shapeId, type_shapes_boole for (int it=4; it < sizePars; it++) { par = shapePars[it]; - vars = par.split("="); + vars = splitString(par, '='); varName = vars[0]; varValue = vars[1]; // qInfo() << "it:" << it << "par:" << par << "varName:" << varName << "varValue:" << varValue; if (varName == "ZPos") { - double zpos = varValue.toDouble(); + double zpos = std::stod(varValue); double rmin=0., rmax=0.; it++; // go to next variable par = shapePars[it]; - vars = par.split("="); + vars = splitString(par, '='); varName = vars[0]; varValue = vars[1]; - if (varName == "ZRmin") rmin = varValue.toDouble(); + if (varName == "ZRmin") rmin = std::stod(varValue); else error = 1; it++; // go to next variable par = shapePars[it]; - vars = par.split("="); + vars = splitString(par, '='); varName = vars[0]; varValue = vars[1]; - if (varName == "ZRmax") rmax = varValue.toDouble(); + if (varName == "ZRmax") rmax = std::stod(varValue); else error = 1; if(error) { @@ -1305,10 +1302,11 @@ GeoShape* ReadGeoModel::buildShape(const unsigned int shapeId, type_shapes_boole GeoGenericTrapVertices Vertices; bool error = false; GeoGenericTrap* gTrap = nullptr; - QString par; - QStringList vars; - QString varName; - QString varValue; + + std::string par; + std::vector<std::string> vars; + std::string varName; + std::string varValue; int sizePars = shapePars.size(); // check if we have more than 3 parameters @@ -1317,12 +1315,12 @@ GeoShape* ReadGeoModel::buildShape(const unsigned int shapeId, type_shapes_boole // get the two GeoGenericTrap parameters: the ZHalfLength plus the number of vertices for( int it=0; it < 2; it++) { par = shapePars[it]; - vars = par.split("="); + vars = splitString(par, '='); varName = vars[0]; varValue = vars[1]; // qInfo() << "vars: " << vars; // for debug only - if (varName == "ZHalfLength") ZHalfLength = varValue.toDouble(); - if (varName == "NVertices") NVertices = varValue.toUInt(); + if (varName == "ZHalfLength") ZHalfLength = std::stod(varValue); + if (varName == "NVertices") NVertices = std::stoi(varValue); } @@ -1331,23 +1329,23 @@ GeoShape* ReadGeoModel::buildShape(const unsigned int shapeId, type_shapes_boole for (int it=2; it < NVertices; it++) { par = shapePars[it]; - vars = par.split("="); + vars = splitString(par, '='); varName = vars[0]; varValue = vars[1]; // qInfo() << "it:" << it << "par:" << par << "varName:" << varName << "varValue:" << varValue; if (varName == "X") { - double x = varValue.toDouble(); + double x = std::stod(varValue); it++; // go to next variable par = shapePars[it]; - vars = par.split("="); + vars = splitString(par, '='); varName = vars[0]; varValue = vars[1]; if (varName == "Y") { - double y = varValue.toDouble(); + double y = std::stod(varValue); Vertices.push_back(GeoTwoVector(x,y)); } else { @@ -1396,10 +1394,11 @@ GeoShape* ReadGeoModel::buildShape(const unsigned int shapeId, type_shapes_boole bool error = 0; GeoSimplePolygonBrep* sh = nullptr; - QString par; - QStringList vars; - QString varName; - QString varValue; + + std::string par; + std::vector<std::string> vars; + std::string varName; + std::string varValue; int sizePars = shapePars.size(); // check if we have more than 2 parameters @@ -1408,12 +1407,12 @@ GeoShape* ReadGeoModel::buildShape(const unsigned int shapeId, type_shapes_boole // get the first two GeoSimplePolygonBrep parameters: DZ and the number of vertices. for( int it=0; it < 2; it++) { par = shapePars[it]; - vars = par.split("="); + vars = splitString(par, '='); varName = vars[0]; varValue = vars[1]; // qInfo() << "vars: " << vars; // for debug only - if (varName == "DZ") DZ = varValue.toDouble(); - if (varName == "NVertices") NVertices = varValue.toDouble(); + if (varName == "DZ") DZ = std::stod(varValue); + if (varName == "NVertices") NVertices = std::stoi(varValue); //else if (varName == "NVertices") NVertices = varValue.toDouble(); //else error = 1; //if(error) std::cout << "ERROR! GeoSimplePolygonBrep parameters are not correctly stored! -->" << vars; @@ -1426,19 +1425,19 @@ GeoShape* ReadGeoModel::buildShape(const unsigned int shapeId, type_shapes_boole for (int it=2; it < sizePars; it++) { par = shapePars[it]; - vars = par.split("="); + vars = splitString(par, '='); varName = vars[0]; varValue = vars[1]; - if (varName == "xV") xV = varValue.toDouble(); + if (varName == "xV") xV = std::stod(varValue); else error = 1; it++; // go to next variable (they come in pairs) par = shapePars[it]; - vars = par.split("="); + vars = splitString(par, '='); varName = vars[0]; varValue = vars[1]; - if (varName == "yV") yV = varValue.toDouble(); + if (varName == "yV") yV = std::stod(varValue); else error = 1; if(error) { @@ -1489,10 +1488,11 @@ GeoShape* ReadGeoModel::buildShape(const unsigned int shapeId, type_shapes_boole bool error = 0; GeoTessellatedSolid* sh = nullptr; - QString par; - QStringList vars; - QString varName; - QString varValue; + + std::string par; + std::vector<std::string> vars; + std::string varName; + std::string varValue; int sizePars = shapePars.size(); // check if we have at least 13 parameters, @@ -1502,10 +1502,10 @@ GeoShape* ReadGeoModel::buildShape(const unsigned int shapeId, type_shapes_boole // get the first parameter par = shapePars[0]; - vars = par.split("="); + vars = splitString(par, '='); varName = vars[0]; varValue = vars[1]; - if (varName == "nFacets") nFacets = varValue.toInt(); + if (varName == "nFacets") nFacets = std::stoi(varValue); else { muxCout.lock(); qWarning("ERROR!! - GeoTessellatedSolid - nFacets is not defined!!"); @@ -1523,7 +1523,7 @@ GeoShape* ReadGeoModel::buildShape(const unsigned int shapeId, type_shapes_boole { // get facet type par = shapePars[it]; - vars = par.split("="); + vars = splitString(par, '='); varName = vars[0]; if (varName == "QUAD") { facetType = "QUAD"; @@ -1543,7 +1543,7 @@ GeoShape* ReadGeoModel::buildShape(const unsigned int shapeId, type_shapes_boole // get the type of the vertexes composing the facet bool isAbsolute = true; par = shapePars[it]; - vars = par.split("="); + vars = splitString(par, '='); varName = vars[0]; varValue = vars[1]; if (varName == "vT") { @@ -1562,10 +1562,10 @@ GeoShape* ReadGeoModel::buildShape(const unsigned int shapeId, type_shapes_boole unsigned int nVertexes = 0; par = shapePars[it]; - vars = par.split("="); + vars = splitString(par, '='); varName = vars[0]; varValue = vars[1]; - if (varName == "nV") nVertexes = varValue.toUInt(); + if (varName == "nV") nVertexes = std::stoi(varValue); else { muxCout.lock(); std::cout << "ERROR! - GeoTessellatedSolid - nVertices not defined!" << std::endl; @@ -1593,10 +1593,10 @@ GeoShape* ReadGeoModel::buildShape(const unsigned int shapeId, type_shapes_boole double xV=0.; par = shapePars[it]; - vars = par.split("="); + vars = splitString(par, '='); varName = vars[0]; varValue = vars[1]; - if (varName == "xV") xV = varValue.toDouble(); + if (varName == "xV") xV = std::stod(varValue); else { muxCout.lock(); //FIXME: std::cout << "ERROR! Got '" << varName << "' instead of 'xV'!" << std::endl; @@ -1608,10 +1608,10 @@ GeoShape* ReadGeoModel::buildShape(const unsigned int shapeId, type_shapes_boole double yV=0.; par = shapePars[it]; - vars = par.split("="); + vars = splitString(par, '='); varName = vars[0]; varValue = vars[1]; - if (varName == "yV") yV = varValue.toDouble(); + if (varName == "yV") yV = std::stod(varValue); else { muxCout.lock(); //FIXME: std::cout << "ERROR! Got '" << varName << "' instead of 'yV'!" << std::endl; @@ -1623,10 +1623,10 @@ GeoShape* ReadGeoModel::buildShape(const unsigned int shapeId, type_shapes_boole double zV=0.; par = shapePars[it]; - vars = par.split("="); + vars = splitString(par, '='); varName = vars[0]; varValue = vars[1]; - if (varName == "zV") zV = varValue.toDouble(); + if (varName == "zV") zV = std::stod(varValue); else { muxCout.lock(); //FIXME: std::cout << "ERROR! Got '" << varName << "' instead of 'zV'!" << std::endl; @@ -1667,30 +1667,30 @@ GeoShape* ReadGeoModel::buildShape(const unsigned int shapeId, type_shapes_boole double xV=0.; par = shapePars[it]; - vars = par.split("="); + vars = splitString(par, '='); varName = vars[0]; varValue = vars[1]; - if (varName == "xV") xV = varValue.toDouble(); + if (varName == "xV") xV = std::stod(varValue); else error = 1; it++; // go to the next coordinate double yV=0.; par = shapePars[it]; - vars = par.split("="); + vars = splitString(par, '='); varName = vars[0]; varValue = vars[1]; - if (varName == "yV") yV = varValue.toDouble(); + if (varName == "yV") yV = std::stod(varValue); else error = 1; it++; // go to the next coordinate double zV=0.; par = shapePars[it]; - vars = par.split("="); + vars = splitString(par, '='); varName = vars[0]; varValue = vars[1]; - if (varName == "zV") zV = varValue.toDouble(); + if (varName == "zV") zV = std::stod(varValue); else error = 1; if(error) { @@ -1755,21 +1755,21 @@ GeoShape* ReadGeoModel::buildShape(const unsigned int shapeId, type_shapes_boole double Dxdypdzp = 0.; double Angleydzp = 0.; // get parameters - foreach( QString par, shapePars) { - QStringList vars = par.split("="); - QString varName = vars[0]; - QString varValue = vars[1]; - if (varName == "ZHalfLength") ZHalfLength = varValue.toDouble();// * SYSTEM_OF_UNITS::mm; - if (varName == "Theta") Theta = varValue.toDouble();// * SYSTEM_OF_UNITS::mm; - if (varName == "Phi") Phi = varValue.toDouble();// * SYSTEM_OF_UNITS::mm; - if (varName == "Dydzn") Dydzn = varValue.toDouble();// * SYSTEM_OF_UNITS::mm; - if (varName == "Dxdyndzn") Dxdyndzn = varValue.toDouble();// * SYSTEM_OF_UNITS::mm; - if (varName == "Dxdypdzn") Dxdypdzn = varValue.toDouble();// * SYSTEM_OF_UNITS::mm; - if (varName == "Angleydzn") Angleydzn = varValue.toDouble();// * SYSTEM_OF_UNITS::mm; - if (varName == "Dydzp") Dydzp = varValue.toDouble();// * SYSTEM_OF_UNITS::mm; - if (varName == "Dxdyndzp") Dxdyndzp = varValue.toDouble();// * SYSTEM_OF_UNITS::mm; - if (varName == "Dxdypdzp") Dxdypdzp = varValue.toDouble();// * SYSTEM_OF_UNITS::mm; - if (varName == "Angleydzp") Angleydzp = varValue.toDouble();// * SYSTEM_OF_UNITS::mm; + for( auto& par : shapePars) { + std::vector<std::string> vars = splitString(par, '='); + std::string varName = vars[0]; + std::string varValue = vars[1]; + if (varName == "ZHalfLength") ZHalfLength = std::stod(varValue);// * SYSTEM_OF_UNITS::mm; + if (varName == "Theta") Theta = std::stod(varValue);// * SYSTEM_OF_UNITS::mm; + if (varName == "Phi") Phi = std::stod(varValue);// * SYSTEM_OF_UNITS::mm; + if (varName == "Dydzn") Dydzn = std::stod(varValue);// * SYSTEM_OF_UNITS::mm; + if (varName == "Dxdyndzn") Dxdyndzn = std::stod(varValue);// * SYSTEM_OF_UNITS::mm; + if (varName == "Dxdypdzn") Dxdypdzn = std::stod(varValue);// * SYSTEM_OF_UNITS::mm; + if (varName == "Angleydzn") Angleydzn = std::stod(varValue);// * SYSTEM_OF_UNITS::mm; + if (varName == "Dydzp") Dydzp = std::stod(varValue);// * SYSTEM_OF_UNITS::mm; + if (varName == "Dxdyndzp") Dxdyndzp = std::stod(varValue);// * SYSTEM_OF_UNITS::mm; + if (varName == "Dxdypdzp") Dxdypdzp = std::stod(varValue);// * SYSTEM_OF_UNITS::mm; + if (varName == "Angleydzp") Angleydzp = std::stod(varValue);// * SYSTEM_OF_UNITS::mm; } shape = new GeoTrap (ZHalfLength, Theta, Phi, Dydzn, Dxdyndzn, Dxdypdzn, Angleydzn, Dydzp, Dxdyndzp, Dxdypdzp, Angleydzp); } @@ -1781,16 +1781,16 @@ GeoShape* ReadGeoModel::buildShape(const unsigned int shapeId, type_shapes_boole double YHalfLength2 = 0.; double ZHalfLength = 0.; // get parameters - foreach( QString par, shapePars) { - QStringList vars = par.split("="); - QString varName = vars[0]; - QString varValue = vars[1]; + for( auto& par : shapePars) { + std::vector<std::string> vars = splitString(par, '='); + std::string varName = vars[0]; + std::string varValue = vars[1]; // std::cout << "varValue:" << varValue; - if (varName == "XHalfLength1") XHalfLength1 = varValue.toDouble();// * SYSTEM_OF_UNITS::mm; - if (varName == "XHalfLength2") XHalfLength2 = varValue.toDouble();// * SYSTEM_OF_UNITS::mm; - if (varName == "YHalfLength1") YHalfLength1 = varValue.toDouble();// * SYSTEM_OF_UNITS::mm; - if (varName == "YHalfLength2") YHalfLength2 = varValue.toDouble();// * SYSTEM_OF_UNITS::mm; - if (varName == "ZHalfLength") ZHalfLength = varValue.toDouble();// * SYSTEM_OF_UNITS::mm; + if (varName == "XHalfLength1") XHalfLength1 = std::stod(varValue);// * SYSTEM_OF_UNITS::mm; + if (varName == "XHalfLength2") XHalfLength2 = std::stod(varValue);// * SYSTEM_OF_UNITS::mm; + if (varName == "YHalfLength1") YHalfLength1 = std::stod(varValue);// * SYSTEM_OF_UNITS::mm; + if (varName == "YHalfLength2") YHalfLength2 = std::stod(varValue);// * SYSTEM_OF_UNITS::mm; + if (varName == "ZHalfLength") ZHalfLength = std::stod(varValue);// * SYSTEM_OF_UNITS::mm; } shape = new GeoTrd (XHalfLength1, XHalfLength2, YHalfLength1, YHalfLength2, ZHalfLength); } @@ -1800,13 +1800,13 @@ GeoShape* ReadGeoModel::buildShape(const unsigned int shapeId, type_shapes_boole double RMax = 0.; double ZHalfLength = 0.; // get parameters - foreach( QString par, shapePars) { - QStringList vars = par.split("="); - QString varName = vars[0]; - QString varValue = vars[1]; - if (varName == "RMin") RMin = varValue.toDouble();// * SYSTEM_OF_UNITS::mm; - if (varName == "RMax") RMax = varValue.toDouble();// * SYSTEM_OF_UNITS::mm; - if (varName == "ZHalfLength") ZHalfLength = varValue.toDouble();// * SYSTEM_OF_UNITS::mm; + for( auto& par : shapePars) { + std::vector<std::string> vars = splitString(par, '='); + std::string varName = vars[0]; + std::string varValue = vars[1]; + if (varName == "RMin") RMin = std::stod(varValue);// * SYSTEM_OF_UNITS::mm; + if (varName == "RMax") RMax = std::stod(varValue);// * SYSTEM_OF_UNITS::mm; + if (varName == "ZHalfLength") ZHalfLength = std::stod(varValue);// * SYSTEM_OF_UNITS::mm; } shape = new GeoTube(RMin, RMax, ZHalfLength); } @@ -1818,15 +1818,15 @@ GeoShape* ReadGeoModel::buildShape(const unsigned int shapeId, type_shapes_boole double SPhi = 0.; double DPhi = 0.; // get parameters - foreach( QString par, shapePars) { - QStringList vars = par.split("="); - QString varName = vars[0]; - QString varValue = vars[1]; - if (varName == "RMin") RMin = varValue.toDouble();// * SYSTEM_OF_UNITS::mm; - if (varName == "RMax") RMax = varValue.toDouble();// * SYSTEM_OF_UNITS::mm; - if (varName == "ZHalfLength") ZHalfLength = varValue.toDouble();// * SYSTEM_OF_UNITS::mm; - if (varName == "SPhi") SPhi = varValue.toDouble();// * SYSTEM_OF_UNITS::mm; - if (varName == "DPhi") DPhi = varValue.toDouble();// * SYSTEM_OF_UNITS::mm; + for( auto& par : shapePars) { + std::vector<std::string> vars = splitString(par, '='); + std::string varName = vars[0]; + std::string varValue = vars[1]; + if (varName == "RMin") RMin = std::stod(varValue);// * SYSTEM_OF_UNITS::mm; + if (varName == "RMax") RMax = std::stod(varValue);// * SYSTEM_OF_UNITS::mm; + if (varName == "ZHalfLength") ZHalfLength = std::stod(varValue);// * SYSTEM_OF_UNITS::mm; + if (varName == "SPhi") SPhi = std::stod(varValue);// * SYSTEM_OF_UNITS::mm; + if (varName == "DPhi") DPhi = std::stod(varValue);// * SYSTEM_OF_UNITS::mm; } shape = new GeoTubs (RMin, RMax, ZHalfLength, SPhi, DPhi); } @@ -1835,12 +1835,12 @@ GeoShape* ReadGeoModel::buildShape(const unsigned int shapeId, type_shapes_boole unsigned int shapeOpId = 0; unsigned int transfId = 0; // get parameters - foreach( QString par, shapePars) { - QStringList vars = par.split("="); - QString varName = vars[0]; - QString varValue = vars[1]; - if (varName == "A") shapeOpId = varValue.toUInt(); - if (varName == "X") transfId = varValue.toUInt(); + for( auto& par : shapePars) { + std::vector<std::string> vars = splitString(par, '='); + std::string varName = vars[0]; + std::string varValue = vars[1]; + if (varName == "A") shapeOpId = std::stoi(varValue); + if (varName == "X") transfId = std::stoi(varValue); } if (shapeOpId == 0 || transfId == 0) { std::cout << "ERROR! Shift shape - input operand shapes' IDs are empty! (shapeId: " << shapeOpId << ", transfId:" << transfId << ")" << std::endl; @@ -1930,12 +1930,12 @@ GeoShape* ReadGeoModel::buildShape(const unsigned int shapeId, type_shapes_boole unsigned int opA = 0; unsigned int opB = 0; // get parameters - foreach( QString par, shapePars) { - QStringList vars = par.split("="); - QString varName = vars[0]; - QString varValue = vars[1]; - if (varName == "opA") opA = varValue.toUInt(); - if (varName == "opB") opB = varValue.toUInt(); + for( auto& par : shapePars) { + std::vector<std::string> vars = splitString(par, '='); + std::string varName = vars[0]; + std::string varValue = vars[1]; + if (varName == "opA") opA = std::stoi(varValue); + if (varName == "opB") opB = std::stoi(varValue); } if (opA == 0 || opB == 0) { std::cout << "ERROR! Subtraction/Union/Intersection shape - input operand shapes' IDs are empty! (opA: " << opA << ", opB:" << opB << ")" << std::endl; @@ -1979,7 +1979,6 @@ GeoShape* ReadGeoModel::buildShape(const unsigned int shapeId, type_shapes_boole exit(EXIT_FAILURE); } -// GeoShapeSubtraction* shapeNew = new GeoShapeSubtraction(shapeA, shapeB); GeoShape* shapeNew = nullptr; if ("Subtraction" == type) { shapeNew = new GeoShapeSubtraction(shapeA, shapeB); @@ -1991,7 +1990,6 @@ GeoShape* ReadGeoModel::buildShape(const unsigned int shapeId, type_shapes_boole shapeNew = new GeoShapeIntersection(shapeA, shapeB); } -// storeBuiltShape(shapeId, shapeNew); shape = shapeNew; } // ...otherwise, build the Subtraction operator shape without operands @@ -2007,11 +2005,6 @@ GeoShape* ReadGeoModel::buildShape(const unsigned int shapeId, type_shapes_boole shapeNew = new GeoShapeIntersection; } - // debug - // muxCout.lock(); - // std::cout << "adding 'empty' shape (2): " << shapeId << ", " << shapeNew << ", " << opA << ", " << opB << std::endl; - // muxCout.unlock(); - tuple_shapes_boolean_info tt (shapeId, shapeNew, opA, opB); shapes_info_sub->push_back(tt); //! Push the information about the new boolean shape at the end of the very same container we are iterating over @@ -2023,14 +2016,21 @@ GeoShape* ReadGeoModel::buildShape(const unsigned int shapeId, type_shapes_boole else if(type == "CustomShape") { std::string name = ""; // check parameters - if ( shapePars.size() > 0 && ((shapePars.filter("=")).size() > 0) ) // this complex test is needed to handle null strings + // this complex test is needed to handle null strings in the DB records + bool okPars = false; + for( auto& par : shapePars) { + std::string str = par.substr( par.find("=") ); // get from "=" to the end + if (str.size() > 0) okPars = true; + } + //if ( shapePars.size() > 0 && ((shapePars.filter("=")).size() > 0) ) // this complex test is needed to handle null strings + if ( shapePars.size() > 0 && okPars ) { // get parameters - foreach( QString par, shapePars) { - QStringList vars = par.split("="); - QString varName = vars[0]; - QString varValue = vars[1]; - if (varName == "name") name = varValue.toStdString(); + for( auto& par : shapePars) { + std::vector<std::string> vars = splitString(par, '='); + std::string varName = vars[0]; + std::string varValue = vars[1]; + if (varName == "name") name = varValue; } } else { muxCout.lock(); @@ -2045,15 +2045,22 @@ GeoShape* ReadGeoModel::buildShape(const unsigned int shapeId, type_shapes_boole std::string name = ""; std::string asciiData = ""; // check parameters - if ( shapePars.size() > 0 && ((shapePars.filter("=")).size() > 0) ) // this complex test is needed to handle null strings + // this complex test is needed to handle null strings in the DB records + bool okPars = false; + for( auto& par : shapePars) { + std::string str = par.substr( par.find("=") ); // get from "=" to the end + if (str.size() > 0) okPars = true; + } + //if ( shapePars.size() > 0 && ((shapePars.filter("=")).size() > 0) ) // this complex test is needed to handle null strings + if ( shapePars.size() > 0 && okPars ) { // get parameters - foreach( QString par, shapePars) { - QStringList vars = par.split("="); - QString varName = vars[0]; - QString varValue = vars[1]; - if (varName == "name") name = varValue.toStdString(); - if (varName == "asciiData") asciiData=varValue.toStdString(); + for( auto& par : shapePars) { + std::vector<std::string> vars = splitString(par, '='); + std::string varName = vars[0]; + std::string varValue = vars[1]; + if (varName == "name") name = varValue; + if (varName == "asciiData") asciiData = varValue; } } else { // throw std::invalid_argument("UnidentifiedShape parameters' list is empty!!"); @@ -2310,25 +2317,25 @@ std::vector<std::string> ReadGeoModel::splitString(const std::string& s, const c return tokens; } - // TODO: move this to utility class/file -QStringList ReadGeoModel::toQStringList(std::vector<std::string> vec) - { - QStringList ll; - for ( auto& str : vec ) { - ll << QString::fromStdString(str); - } - return ll; - } +// // TODO: move this to utility class/file +//QStringList ReadGeoModel::toQStringList(std::vector<std::string> vec) +// { +// QStringList ll; +// for ( auto& str : vec ) { +// ll << QString::fromStdString(str); +// } +// return ll; +// } -// TODO: move this to utility class/file -std::vector<std::string> ReadGeoModel::toStdVectorStrings(QStringList qlist) -{ - std::vector<std::string> vec; - foreach(QString qstr, qlist) { - vec.push_back(qstr.toStdString()); - } - return vec; -} +//// TODO: move this to utility class/file +//std::vector<std::string> ReadGeoModel::toStdVectorStrings(QStringList qlist) +//{ +// std::vector<std::string> vec; +// foreach(QString qstr, qlist) { +// vec.push_back(qstr.toStdString()); +// } +// return vec; +//} // TODO: move this to utility class/file void ReadGeoModel::printStdVectorStrings(std::vector<std::string> vec) { @@ -2492,26 +2499,26 @@ void ReadGeoModel::printTrf(GeoTrf::Transform3D t) { muxCout.unlock(); } -// TODO: should go in a QtUtils header-only class, to be used in other packages -QList<double> ReadGeoModel::convertQstringListToDouble(QStringList listin) { - QList<double> listout; - foreach (const QString &s, listin) { - listout.append(s.toDouble()); - } - return listout; -} +//// TODO: should go in a QtUtils header-only class, to be used in other packages +//QList<double> ReadGeoModel::convertQstringListToDouble(QStringList listin) { +// QList<double> listout; +// foreach (const QString &s, listin) { +// listout.append(s.toDouble()); +// } +// return listout; +//} -// TODO: move it to an utility class -void ReadGeoModel::printTransformationValues(QStringList values) { - QList<double> t = convertQstringListToDouble(values); - muxCout.lock(); - std::cout << "transformation input values: " << std::endl; - std::cout << "[[" << t[0] << "," << t[1] << "," << t[2] << "][" - << t[3] << "," << t[4] << "," << t[5] << "][" - << t[6] << "," << t[7] << "," << t[8] << "][" - << t[9] << "," << t[10] << "," << t[11] << "]]" << std::endl; - muxCout.unlock(); -} +//// TODO: move it to an utility class +//void ReadGeoModel::printTransformationValues(QStringList values) { +// QList<double> t = convertQstringListToDouble(values); +// muxCout.lock(); +// std::cout << "transformation input values: " << std::endl; +// std::cout << "[[" << t[0] << "," << t[1] << "," << t[2] << "][" +// << t[3] << "," << t[4] << "," << t[5] << "][" +// << t[6] << "," << t[7] << "," << t[8] << "][" +// << t[9] << "," << t[10] << "," << t[11] << "]]" << std::endl; +// muxCout.unlock(); +//} GeoAlignableTransform* ReadGeoModel::buildAlignableTransform(const unsigned int id)