bool XMLBase::isVector(const char* elementName) { openGroup(); // Open dataset and throw if it does not exist xml_node dataset = _groupOpened.node().find_child_by_attribute(_nodeDset.c_str(), _attrName.c_str(), elementName); if (!dataset) { std::ostringstream oss; oss << "Dataset '" << elementName << "' does not exist!"; throw CadetException(oss.str()); } // Read text and attributes size_t rank = dataset.attribute(_attrRank.c_str()).as_int(); std::string dims_str = dataset.attribute(_attrDims.c_str()).value(); // Get dims and compute buffer size std::vector<std::string> dims_vec = split(dims_str, _dimsSeparator.c_str()); int items = 1; for (size_t i = 0; i < rank; ++i) { int j; std::stringstream ss(dims_vec.at(i)); ss >> j; items *= j; } closeGroup(); return items > 1; }
bool XMLBase::exists(const char* elementName) { openGroup(); bool exists = _groupOpened.node().child(elementName); closeGroup(); return exists; }
void LxQtTaskGroup::contextMenuEvent(QContextMenuEvent *event) { setPopupVisible(false, true); mPreventPopup = true; if (windowId()) { LxQtTaskButton::contextMenuEvent(event); return; } QMenu menu(tr("Group")); QAction *a = menu.addAction(XdgIcon::fromTheme("process-stop"), tr("Close group")); connect(a, SIGNAL(triggered()), this, SLOT(closeGroup())); menu.exec(mapToGlobal(event->pos())); mPreventPopup = false; }
void LXQtTaskGroup::contextMenuEvent(QContextMenuEvent *event) { setPopupVisible(false, true); mPreventPopup = true; if (windowId()) { LXQtTaskButton::contextMenuEvent(event); return; } QMenu * menu = new QMenu(tr("Group")); menu->setAttribute(Qt::WA_DeleteOnClose); QAction *a = menu->addAction(XdgIcon::fromTheme("process-stop"), tr("Close group")); connect(a, SIGNAL(triggered()), this, SLOT(closeGroup())); connect(menu, &QMenu::aboutToHide, [this] { mPreventPopup = false; }); menu->setGeometry(mPlugin->panel()->calculatePopupWindowPos(mapToGlobal(event->pos()), menu->sizeHint())); mPlugin->willShowWindow(menu); menu->show(); }
/** Goes thoguh a histogram NXS file and counts the number of pixels. * It also determines the name of the data field and axis to load * * @param nexusfilename :: nxs file path * @param entry_name :: name of the entry * @param bankNames :: returns the list of bank names */ void LoadTOFRawNexus::countPixels(const std::string &nexusfilename, const std::string &entry_name, std::vector<std::string> &bankNames) { m_numPixels = 0; m_numBins = 0; m_dataField = ""; m_axisField = ""; bankNames.clear(); // Create the root Nexus class auto file = new ::NeXus::File(nexusfilename); // Open the default data group 'entry' file->openGroup(entry_name, "NXentry"); // Also pop into the instrument file->openGroup("instrument", "NXinstrument"); // Look for all the banks std::map<std::string, std::string> entries = file->getEntries(); std::map<std::string, std::string>::iterator it; for (it = entries.begin(); it != entries.end(); ++it) { std::string name = it->first; if (name.size() > 4) { if (name.substr(0, 4) == "bank") { // OK, this is some bank data file->openGroup(name, it->second); // -------------- Find the data field name ---------------------------- if (m_dataField.empty()) { std::map<std::string, std::string> entries = file->getEntries(); std::map<std::string, std::string>::iterator it; for (it = entries.begin(); it != entries.end(); ++it) { if (it->second == "SDS") { file->openData(it->first); if (file->hasAttr("signal")) { int signal = 0; file->getAttr("signal", signal); if (signal == m_signalNo) { // That's the right signal! m_dataField = it->first; // Find the corresponding X axis std::string axes; m_assumeOldFile = false; if (!file->hasAttr("axes")) { if (1 != m_signalNo) { throw std::runtime_error( "Your chosen signal number, " + Strings::toString(m_signalNo) + ", corresponds to the data field '" + m_dataField + "' has no 'axes' attribute specifying."); } else { m_assumeOldFile = true; axes = "x_pixel_offset,y_pixel_offset,time_of_flight"; } } if (!m_assumeOldFile) { file->getAttr("axes", axes); } std::vector<std::string> allAxes; boost::split(allAxes, axes, boost::algorithm::detail::is_any_ofF<char>(",")); if (allAxes.size() != 3) throw std::runtime_error( "Your chosen signal number, " + Strings::toString(m_signalNo) + ", corresponds to the data field '" + m_dataField + "' which has only " + Strings::toString(allAxes.size()) + " dimension. Expected 3 dimensions."); m_axisField = allAxes.back(); g_log.information() << "Loading signal " << m_signalNo << ", " << m_dataField << " with axis " << m_axisField << std::endl; file->closeData(); break; } // Data has a 'signal' attribute } // Yes, it is a data field file->closeData(); } // each entry in the group } } file->closeGroup(); } // bankX name } } // each entry if (m_dataField.empty()) throw std::runtime_error("Your chosen signal number, " + Strings::toString(m_signalNo) + ", was not found in any of the data fields of any " "'bankX' group. Cannot load file."); for (it = entries.begin(); it != entries.end(); ++it) { std::string name = it->first; if (name.size() > 4) { if (name.substr(0, 4) == "bank") { // OK, this is some bank data file->openGroup(name, it->second); std::map<std::string, std::string> entries = file->getEntries(); if (entries.find("pixel_id") != entries.end()) { bankNames.push_back(name); // Count how many pixels in the bank file->openData("pixel_id"); std::vector<int64_t> dims = file->getInfo().dims; file->closeData(); if (!dims.empty()) { size_t newPixels = 1; for (auto dim : dims) newPixels *= dim; m_numPixels += newPixels; } } else { bankNames.push_back(name); // Get the number of pixels from the offsets arrays file->openData("x_pixel_offset"); std::vector<int64_t> xdim = file->getInfo().dims; file->closeData(); file->openData("y_pixel_offset"); std::vector<int64_t> ydim = file->getInfo().dims; file->closeData(); if (!xdim.empty() && !ydim.empty()) { m_numPixels += (xdim[0] * ydim[0]); } } if (entries.find(m_axisField) != entries.end()) { // Get the size of the X vector file->openData(m_axisField); std::vector<int64_t> dims = file->getInfo().dims; // Find the units, if available if (file->hasAttr("units")) file->getAttr("units", m_xUnits); else m_xUnits = "microsecond"; // use default file->closeData(); if (!dims.empty()) m_numBins = dims[0] - 1; } file->closeGroup(); } // bankX name } } // each entry file->close(); delete file; }
// static void LLFloaterGroupInfo::closeCreateGroup() { closeGroup(LLUUID::null); }