92 const triangulationType *triangulation,
93 const std::vector<ttk::trackingTuple> &trackings,
94 const std::vector<std::vector<double>> &allTrackingsCosts,
95 const std::vector<std::vector<double>> &allTrackingsInstantPersistence,
96 const bool useGeometricSpacing,
99 vtkUnstructuredGrid *outputMesh,
100 vtkIntArray *pointsCriticalType,
101 vtkIntArray *timeScalars,
102 vtkIntArray *lengthScalars,
103 vtkIntArray *globalVertexIds,
104 vtkIntArray *connectedComponentIds,
105 vtkDoubleArray *costs,
106 vtkDoubleArray *averagePersistence,
107 vtkDoubleArray *integratedPersistence,
108 vtkDoubleArray *maximalPersistence,
109 vtkDoubleArray *minimalPersistence,
110 vtkDoubleArray *instantPersistence,
111 unsigned int *sizes) {
115 for(
unsigned int i = 0; i < trackings.size(); i++) {
119 else if(i < sizes[1] && i >= sizes[0])
121 else if(i < sizes[2] && i >= sizes[1])
123 int startTime = std::get<0>(trackings[i]);
124 std::vector<ttk::SimplexId> chain = std::get<2>(trackings[i]);
129 triangulation->getVertexPoint(chain[0], x, y, z);
130 if(useGeometricSpacing)
131 z += startTime * spacing;
132 points->InsertNextPoint(x, y, z);
133 instantPersistence->InsertTuple1(
134 pointCpt, allTrackingsInstantPersistence[i][0]);
135 double currentMaxPersistence
136 = *(std::max_element(allTrackingsInstantPersistence[i].
begin(),
137 allTrackingsInstantPersistence[i].
end()));
138 double currentMinPersistence
139 = *(std::min_element(allTrackingsInstantPersistence[i].
begin(),
140 allTrackingsInstantPersistence[i].
end()));
141 double currentIntegratedPersistence
142 = std::accumulate(allTrackingsInstantPersistence[i].
begin(),
143 allTrackingsInstantPersistence[i].
end(), 0.0);
144 double currentAveragePersistence
145 = currentIntegratedPersistence / (double)chain.size();
146 globalVertexIds->InsertTuple1(pointCpt, (
int)chain[0]);
147 pointsCriticalType->InsertTuple1(pointCpt, (
int)currentType);
148 timeScalars->InsertTuple1(pointCpt, startTime);
150 for(
unsigned int j = 1; j < chain.size(); j++) {
151 triangulation->getVertexPoint(chain[j], x, y, z);
152 if(useGeometricSpacing)
153 z += (j + startTime) * spacing;
157 points->InsertNextPoint(x, y, z);
158 globalVertexIds->InsertTuple1(pointCpt, (
int)chain[j]);
159 outputMesh->InsertNextCell(VTK_LINE, 2, edge);
160 pointsCriticalType->InsertTuple1(pointCpt, (
int)currentType);
161 timeScalars->InsertTuple1(pointCpt, startTime + j);
162 lengthScalars->InsertTuple1(edgeCpt, chain.size() - 1);
163 connectedComponentIds->InsertTuple1(edgeCpt, i);
164 costs->InsertTuple1(edgeCpt, allTrackingsCosts[i][j - 1]);
165 instantPersistence->InsertTuple1(
166 pointCpt, allTrackingsInstantPersistence[i][j]);
167 integratedPersistence->InsertTuple1(
168 edgeCpt, currentIntegratedPersistence);
169 maximalPersistence->InsertTuple1(edgeCpt, currentMaxPersistence);
170 minimalPersistence->InsertTuple1(edgeCpt, currentMinPersistence);
171 averagePersistence->InsertTuple1(edgeCpt, currentAveragePersistence);
177 outputMesh->SetPoints(points);
178 outputMesh->GetCellData()->AddArray(lengthScalars);
179 outputMesh->GetCellData()->AddArray(connectedComponentIds);
180 outputMesh->GetCellData()->AddArray(averagePersistence);
181 outputMesh->GetCellData()->AddArray(integratedPersistence);
182 outputMesh->GetCellData()->AddArray(maximalPersistence);
183 outputMesh->GetCellData()->AddArray(minimalPersistence);
184 outputMesh->GetPointData()->AddArray(instantPersistence);
185 outputMesh->GetCellData()->AddArray(costs);
186 outputMesh->GetPointData()->AddArray(pointsCriticalType);
187 outputMesh->GetPointData()->AddArray(timeScalars);
188 outputMesh->GetPointData()->AddArray(globalVertexIds);