TTK
Loading...
Searching...
No Matches
ttkTrackingFromFields.h
Go to the documentation of this file.
1
36
37#pragma once
38
39#include <vtkCellData.h>
40#include <vtkDataSet.h>
41#include <vtkUnstructuredGrid.h>
42
43// VTK Module
45#include <TrackingFromFields.h>
47#include <ttkAlgorithm.h>
48#include <ttkTrackingFromFieldsModule.h>
49
50#include <algorithm>
51#include <string>
52
53class TTKTRACKINGFROMFIELDS_EXPORT ttkTrackingFromFields
54 : public ttkAlgorithm,
55 protected ttk::TrackingFromFields {
56
57public:
59
61
64 vtkSetMacro(Sampling, int);
65 vtkGetMacro(Sampling, int);
67
70 vtkSetMacro(StartTimestep, int);
71 vtkGetMacro(StartTimestep, int);
73
76 vtkSetMacro(EndTimestep, int);
77 vtkGetMacro(EndTimestep, int);
79
83 vtkSetMacro(Tolerance, double);
84 vtkGetMacro(Tolerance, double);
85
86 vtkSetMacro(RelativeDestructionCost, double);
87 vtkGetMacro(RelativeDestructionCost, double);
89
90 vtkSetMacro(AssignmentPrecision, double);
91 vtkGetMacro(AssignmentPrecision, double);
93
96 vtkSetMacro(PX, double);
97 vtkGetMacro(PX, double);
99
102 vtkSetMacro(PY, double);
103 vtkGetMacro(PY, double);
105
108 vtkSetMacro(PZ, double);
109 vtkGetMacro(PZ, double);
111
114 vtkSetMacro(PE, double);
115 vtkGetMacro(PE, double);
117
120 vtkSetMacro(PS, double);
121 vtkGetMacro(PS, double);
123
126 vtkSetMacro(PF, double);
127 vtkGetMacro(PF, double);
129
133 vtkSetMacro(WassersteinMetric, const std::string &);
134 vtkGetMacro(WassersteinMetric, std::string);
136
137 vtkSetMacro(DistanceAlgorithm, const std::string &);
138 vtkGetMacro(DistanceAlgorithm, std::string);
139
144 vtkSetMacro(PVAlgorithm, int);
145 vtkGetMacro(PVAlgorithm, int);
146
147 vtkSetMacro(AssignmentMethod, int);
148 vtkGetMacro(AssignmentMethod, int);
150
155 vtkSetMacro(UseGeometricSpacing, bool);
156 vtkGetMacro(UseGeometricSpacing, bool);
158
162 vtkSetMacro(Spacing, double);
163 vtkGetMacro(Spacing, double);
165
168 vtkSetMacro(DoPostProc, bool);
169 vtkGetMacro(DoPostProc, bool);
171
175 vtkSetMacro(PostProcThresh, double);
176 vtkGetMacro(PostProcThresh, double);
178
182 vtkSetMacro(EnablePostProc, bool);
183 vtkGetMacro(EnablePostProc, bool);
185
188 vtkSetMacro(DoLinearize, bool);
189 vtkGetMacro(DoLinearize, bool);
191
195 vtkSetMacro(DoFusion, bool);
196 vtkGetMacro(DoFusion, bool);
198
204 vtkSetMacro(LinearizeFuse, bool);
205 vtkGetMacro(LinearizeFuse, bool);
207
212 vtkSetMacro(DoStartFrame, bool);
213 vtkGetMacro(DoStartFrame, bool);
215
218 vtkSetMacro(StartFrame, int);
219 vtkGetMacro(StartFrame, int);
221
225 vtkSetMacro(DoMergeTree, bool);
226 vtkGetMacro(DoMergeTree, bool);
228
232 vtkSetMacro(UseSplitTree, int);
233 vtkGetMacro(UseSplitTree, int);
235
239 vtkSetMacro(UseOtsuSimplification, bool);
240 vtkGetMacro(UseOtsuSimplification, bool);
242
243 vtkSetMacro(OtsuBins, int);
244 vtkGetMacro(OtsuBins, int);
245
246 vtkSetMacro(MaxSurfSize, int);
247 vtkGetMacro(MaxSurfSize, int);
248
252 vtkSetMacro(CosColDegrees, double);
253 vtkGetMacro(CosColDegrees, double);
255
259 vtkSetMacro(MaxLinkRadius, double);
260 vtkGetMacro(MaxLinkRadius, double);
262
266 vtkSetMacro(MaxFrameDist, int);
267 vtkGetMacro(MaxFrameDist, int);
269
270protected:
272
273 int FillInputPortInformation(int port, vtkInformation *info) override;
274 int FillOutputPortInformation(int port, vtkInformation *info) override;
275 int RequestDataObject(vtkInformation *request,
276 vtkInformationVector **inputVector,
277 vtkInformationVector *outputVector) override;
278 int RequestData(vtkInformation *request,
279 vtkInformationVector **inputVector,
280 vtkInformationVector *outputVector) override;
281
282private:
283 // Sampling config.
284 int StartTimestep{0};
285 int EndTimestep{-1};
286 int Sampling{1};
287
288 // Filtering config.
289 double Tolerance{1};
290 double PX{1};
291 double PY{1};
292 double PZ{1};
293 double PE{0};
294 double PS{0};
295 double PF{0};
296
297 double RelativeDestructionCost{0.1};
298 double AssignmentPrecision{0.01};
299 int AssignmentMethod{0};
300
301 // Bottleneck config.
302 bool UseGeometricSpacing{false};
303 bool DoPostProc{false};
304 double PostProcThresh{0.0};
305 double Spacing{1.0};
306 std::string DistanceAlgorithm{"ttk"};
307 int PVAlgorithm{2};
308 std::string WassersteinMetric{"2"};
309
310 // Post-processing config.
311 bool EnablePostProc{false};
312 bool DoLinearize{true};
313 bool DoFusion{true};
314 bool LinearizeFuse{true};
315 bool DoStartFrame{false};
316 int StartFrame{0};
317 bool DoMergeTree{false};
318 int UseSplitTree{2};
319 bool UseOtsuSimplification{false};
320 int OtsuBins{0};
321 int MaxSurfSize{10000};
322 double CosColDegrees{20.0};
323 double MaxLinkRadius{225.0};
324 int MaxFrameDist{30};
325
326 template <class dataType, class triangulationType>
327 int trackWithPersistenceMatching(vtkUnstructuredGrid *output,
328 unsigned long fieldNumber,
329 const triangulationType *triangulation);
330
331 template <class dataType, class triangulationType>
332 int trackWithCriticalPointMatching(vtkUnstructuredGrid *output,
333 unsigned long fieldNumber,
334 const triangulationType *triangulation);
335
336 template <class dataType, class triangulationType>
337 int applyPostProcessing(vtkUnstructuredGrid *output,
338 vtkDataSet *segOutput,
339 vtkDataSet *input,
340 const std::vector<vtkDataArray *> &inputScalarFields,
341 const triangulationType *triangulation);
342
343 void writeSegmentationArrays(
344 vtkDataSet *segOutput,
345 const std::vector<std::vector<int>> &vertexTrajPerFrame);
346};
virtual int RequestData(vtkInformation *ttkNotUsed(request), vtkInformationVector **ttkNotUsed(inputVectors), vtkInformationVector *ttkNotUsed(outputVector))
virtual int RequestDataObject(vtkInformation *request, vtkInformationVector **inputVectors, vtkInformationVector *outputVector)
int FillInputPortInformation(int ttkNotUsed(port), vtkInformation *ttkNotUsed(info)) override
int FillOutputPortInformation(int ttkNotUsed(port), vtkInformation *ttkNotUsed(info)) override
static ttkTrackingFromFields * New()