39 vtkInformationVector **inputVector,
40 vtkInformationVector *outputVector) {
44 vtkTable *input = vtkTable::GetData(inputVector[0]);
45 vtkTable *output = vtkTable::GetData(outputVector);
50 if(SelectFieldsWithRegexp) {
53 const auto n = input->GetNumberOfColumns();
54 for(
int i = 0; i < n; ++i) {
55 const auto &name = input->GetColumnName(i);
56 if(std::regex_match(name, std::regex(RegexpString))) {
57 ScalarFields.emplace_back(name);
62 const SimplexId numberOfRows = input->GetNumberOfRows();
63 const SimplexId numberOfColumns = ScalarFields.size();
65 if(numberOfRows <= 0 || numberOfColumns <= 0) {
66 this->
printErr(
"Input matrix has invalid dimensions (rows: "
67 + std::to_string(numberOfRows)
68 +
", columns: " + std::to_string(numberOfColumns) +
")");
72 std::vector<double> inputData;
73 std::vector<vtkAbstractArray *> arrays;
74 arrays.reserve(ScalarFields.size());
75 for(
const auto &s : ScalarFields)
76 arrays.push_back(input->GetColumnByName(s.data()));
79 if(SelectInitializationFieldsWithRegexp) {
81 InitializationFields.clear();
82 const auto n = input->GetNumberOfColumns();
83 for(
int i = 0; i < n; ++i) {
84 const auto &name = input->GetColumnName(i);
85 if(std::regex_match(name, std::regex(InitializationRegexpString))) {
86 InitializationFields.emplace_back(name);
91 const int numberOfInitializationColumns = InitializationFields.size();
93 this->
printErr(
"The number of initialization columns ("
94 + std::to_string(numberOfInitializationColumns) +
")");
95 this->
printErr(
"must match the number of components ("
100 for(
const auto &s : InitializationFields)
101 arrays.push_back(input->GetColumnByName(s.data()));
104 for(
SimplexId i = 0; i < numberOfRows; ++i) {
105 for(
const auto arr : arrays)
106 inputData.push_back(arr->GetVariantValue(i).ToDouble());
111 vtkNew<vtkIntArray> insertionTimeCol{};
112 int *insertionPtr =
nullptr;
113 if(this->
Method == DimensionReduction::METHOD::TOPOMAP) {
114 insertionTimeCol->SetNumberOfTuples(numberOfRows);
115 insertionTimeCol->SetName(
"InsertionTime");
119 const int errorCode = this->
execute(
120 this->outputData_, inputData, numberOfRows, numberOfColumns, insertionPtr);
123 if(KeepAllDataArrays)
124 output->ShallowCopy(input);
127 std::string
const s =
"Component_" + std::to_string(i);
128 vtkNew<vtkDoubleArray> arr{};
130 arr->SetName(s.data());
131 output->AddColumn(arr);
133 if(this->
Method == DimensionReduction::METHOD::TOPOMAP) {
134 output->AddColumn(insertionTimeCol);