void TOPPASMergerVertex::run() { //check if everything ready if (!isUpstreamFinished()) return; RoundPackages pkg; String error_msg(""); bool success = buildRoundPackages(pkg, error_msg); if (!success) { std::cerr << "Could not retrieve input files from upstream nodes...\n"; emit mergeFailed((String("Merger #") + this->getTopoNr() + " failed. " + error_msg).toQString()); return; } /// update round status Size input_rounds = pkg.size(); round_total_ = (round_based_mode_ ? (int) input_rounds : 1); // for round based: take number of rounds from previous tool(s) - should all be equal round_counter_ = 0; // once round_counter_ reaches round_total_, we are done // clear output file list output_files_.clear(); output_files_.resize(round_total_); // #rounds // Do the virtual merging (nothing more than reorganizing filenames) for (Size round = 0; round < input_rounds; ++round) { QStringList files; // warning: ite->first (i.e. target-in param could be -1,-2,... etc to cover all incoming edges (they all have -1 theoretically - see buildRoundPackages()) for (RoundPackageConstIt ite = pkg[round].begin(); ite != pkg[round].end(); ++ite) { files.append(ite->second.filenames); // concat filenames from all incoming edges } Size round_index = (round_based_mode_ ? round : 0); output_files_[round_index][-1].filenames.append(files); // concat over all rounds (if required) } round_counter_ = round_total_; finished_ = true; // call all children, proceed in pipeline for (ConstEdgeIterator it = outEdgesBegin(); it != outEdgesEnd(); ++it) { TOPPASVertex * tv = (*it)->getTargetVertex(); debugOut_(String("Starting child ") + tv->getTopoNr()); tv->run(); } }
void TOPPASToolVertex::editParam() { QWidget* parent_widget = qobject_cast<QWidget*>(scene()->parent()); String default_dir = ""; // use a copy for editing Param edit_param(param_); QVector<String> hidden_entries; // remove entries that are handled by edges already, user should not see them QVector<IOInfo> input_infos; getInputParameters(input_infos); for (ConstEdgeIterator it = inEdgesBegin(); it != inEdgesEnd(); ++it) { int index = (*it)->getTargetInParam(); if (index < 0) { continue; } const String& name = input_infos[index].param_name; if (edit_param.exists(name)) { hidden_entries.push_back(name); } } QVector<IOInfo> output_infos; getOutputParameters(output_infos); for (ConstEdgeIterator it = outEdgesBegin(); it != outEdgesEnd(); ++it) { int index = (*it)->getSourceOutParam(); if (index < 0) { continue; } const String& name = output_infos[index].param_name; if (edit_param.exists(name)) { hidden_entries.push_back(name); } } // remove entries explained by edges foreach(const String &name, hidden_entries) { edit_param.remove(name); }