22#include < vtkInformation.h>
33#include < vtkPointData.h>
44
5- #include < Timer.h>
65#include < ttkMacros.h>
76#include < ttkTrackingFromFields.h>
87#include < ttkTrackingFromPersistenceDiagrams.h>
@@ -100,11 +99,6 @@ int ttkTrackingFromFields::trackWithPersistenceMatching(
10099
101100 output->ShallowCopy (persistenceDiagram);
102101
103- double Mesh_RT = timer.getElapsedTime () - clock;
104- std::cout << std::fixed << " DiagramComputationRT = " << Diagram_RT
105- << " , PerformMatchingRT = " << Matching_RT
106- << " , PerformTrackingRT = " << Tracking_RT
107- << " , BuildMeshRT = " << Mesh_RT << std::endl;
108102 return 1 ;
109103}
110104
@@ -114,11 +108,10 @@ int ttkTrackingFromFields::trackWithCriticalPointMatching(
114108 unsigned long fieldNumber,
115109 const triangulationType *triangulation) {
116110
117- ttk::Timer timer;
118- double clock = timer.getElapsedTime ();
119- ttk::CriticalPointTracking tracker;
120- float x, y, z;
121- float maxX, minX, maxY, minY, maxZ, minZ;
111+ ttk::Timer t{};
112+
113+ float x = 0 , y = 0 , z = 0 ;
114+ float maxX = 0 , minX = 0 , maxY = 0 , minY = 0 , maxZ = 0 , minZ = 0 ;
122115 triangulation->getVertexPoint (0 , minX, minY, minZ);
123116 triangulation->getVertexPoint (0 , maxX, maxY, maxZ);
124117
@@ -132,58 +125,58 @@ int ttkTrackingFromFields::trackWithCriticalPointMatching(
132125 minZ = std::min (z, minZ);
133126 }
134127
135- double const costDeathBirth = CostDeathBirth ;
128+ double const relativeDestructionCost = RelativeDestructionCost ;
136129 double const tolerance = (double )Tolerance;
137130 float meshDiameter
138131 = std::sqrt (std::pow (maxX - minX, 2 ) + std::pow (maxY - minY, 2 )
139132 + std::pow (maxZ - minZ, 2 ));
140133 int assignmentMethod = AssignmentMethod;
141- bool adaptDeathBirthCost = AdaptDeathBirthCost;
142- double epsilonAdapt = EpsilonAdapt;
143134
144- tracker.setMeshDiamater (meshDiameter);
135+ ttk::TrackingFromCriticalPoints tracker;
136+ tracker.setMeshDiameter (meshDiameter);
145137 tracker.setTolerance (tolerance);
146- tracker.setEpsilon (costDeathBirth);
147- tracker.setAdaptDeathBirthCost (adaptDeathBirthCost);
138+ tracker.setEpsilon (relativeDestructionCost);
148139 tracker.setAssignmentMethod (assignmentMethod);
149- tracker.setDimension (triangulation->getDimensionality ());
150- tracker.setEpsilonAdapt (epsilonAdapt);
151140 tracker.setWeights (PX, PY, PZ, PF);
141+ tracker.setAssignmentPrecision (AssignmentPrecision);
152142
153143 tracker.setThreadNumber (this ->threadNumber_ );
144+ tracker.setDebugLevel (this ->debugLevel_ );
154145
155146 std::vector<ttk::DiagramType> persistenceDiagrams (fieldNumber);
156147 this ->performDiagramComputation <dataType, triangulationType>(
157148 (int )fieldNumber, persistenceDiagrams, triangulation);
158149
159- double Diagram_RT = timer.getElapsedTime () - clock;
160- clock = timer.getElapsedTime ();
150+ this ->printMsg (" Diagram computed" , 1 , t.getElapsedTime (), threadNumber_);
151+ double previousStepTime = t.getElapsedTime ();
152+
161153 std::vector<std::vector<ttk::MatchingType>> maximaMatchings (fieldNumber - 1 );
162154 std::vector<std::vector<ttk::MatchingType>> sad_1_Matchings (fieldNumber - 1 );
163155 std::vector<std::vector<ttk::MatchingType>> sad_2_Matchings (fieldNumber - 1 );
164156 std::vector<std::vector<ttk::MatchingType>> minimaMatchings (fieldNumber - 1 );
165157
166- std::vector<std::vector<ttk::MatchingType>> maxMatchingsPersistence (
167- fieldNumber - 1 );
168- std::vector<std::vector<ttk::MatchingType>> sad_1_MatchingsPersistence (
169- fieldNumber - 1 );
170- std::vector<std::vector<ttk::MatchingType>> sad_2_MatchingsPersistence (
171- fieldNumber - 1 );
172- std::vector<std::vector<ttk::MatchingType>> minMatchingsPersistence (
173- fieldNumber - 1 );
158+ std::vector<std::vector<ttk::SimplexId>> maxMap (fieldNumber);
159+ std::vector<std::vector<ttk::SimplexId>> sad_1Map (fieldNumber);
160+ std::vector<std::vector<ttk::SimplexId>> sad_2Map (fieldNumber);
161+ std::vector<std::vector<ttk::SimplexId>> minMap (fieldNumber);
174162
175- tracker.performMatchings (
176- persistenceDiagrams, maximaMatchings, sad_1_Matchings, sad_2_Matchings,
177- minimaMatchings, maxMatchingsPersistence, sad_1_MatchingsPersistence,
178- sad_2_MatchingsPersistence, minMatchingsPersistence, fieldNumber);
163+ tracker.performMatchings (persistenceDiagrams, maximaMatchings,
164+ sad_1_Matchings, sad_2_Matchings, minimaMatchings,
165+ maxMap, sad_1Map, sad_2Map, minMap);
166+
167+ this ->printMsg (" Matchings computed" , 1 , t.getElapsedTime () - previousStepTime,
168+ threadNumber_);
169+ previousStepTime = t.getElapsedTime ();
179170
180- double Matching_RT = timer.getElapsedTime () - clock;
181- clock = timer.getElapsedTime ();
182171 vtkNew<vtkPoints> const points{};
183- vtkNew<vtkUnstructuredGrid> const criticalPointTracking {};
172+ vtkNew<vtkUnstructuredGrid> const outputMesh {};
184173
185174 vtkNew<vtkDoubleArray> costs{};
186175 vtkNew<vtkDoubleArray> averagePersistences{};
176+ vtkNew<vtkDoubleArray> integratedPersistences{};
177+ vtkNew<vtkDoubleArray> maximalPersistences{};
178+ vtkNew<vtkDoubleArray> minimalPersistences{};
179+ vtkNew<vtkDoubleArray> instantPersistences{};
187180 vtkNew<vtkDoubleArray> valueScalars{};
188181 vtkNew<vtkIntArray> globalVertexIds{};
189182 vtkNew<vtkIntArray> lengthScalars{};
@@ -193,6 +186,10 @@ int ttkTrackingFromFields::trackWithCriticalPointMatching(
193186
194187 costs->SetName (" Costs" );
195188 averagePersistences->SetName (" AveragePersistence" );
189+ integratedPersistences->SetName (" IntegratedPersistence" );
190+ maximalPersistences->SetName (" MaximalPersistence" );
191+ minimalPersistences->SetName (" MinimalPersistence" );
192+ instantPersistences->SetName (" InstantPersistence" );
196193 valueScalars->SetName (" Scalar" );
197194 globalVertexIds->SetName (" VertexGlobalId" );
198195 lengthScalars->SetName (" ComponentLength" );
@@ -201,46 +198,44 @@ int ttkTrackingFromFields::trackWithCriticalPointMatching(
201198 pointsCriticalType->SetName (" CriticalType" );
202199
203200 std::vector<ttk::trackingTuple> allTrackings;
204- std::vector<double > allTrackingsMeanPersistence;
205201 std::vector<std::vector<double >> allTrackingsCosts;
202+ std::vector<std::vector<double >> allTrackingsInstantPersistence;
206203
207204 unsigned int typesArrayLimits[3 ] = {};
208- tracker.performTrackings (
209- fieldNumber, maximaMatchings, sad_1_Matchings, sad_2_Matchings,
210- minimaMatchings, maxMatchingsPersistence, sad_1_MatchingsPersistence,
211- sad_2_MatchingsPersistence, minMatchingsPersistence, allTrackings,
212- allTrackingsCosts, allTrackingsMeanPersistence, typesArrayLimits);
213205
214- std::cout << " balise 1" << std::endl;
206+ tracker.performTrackings (
207+ persistenceDiagrams, maximaMatchings, sad_1_Matchings, sad_2_Matchings,
208+ minimaMatchings, maxMap, sad_1Map, sad_2Map, minMap, allTrackings,
209+ allTrackingsCosts, allTrackingsInstantPersistence, typesArrayLimits);
215210
216- double Tracking_RT = timer.getElapsedTime () - clock;
217- clock = timer.getElapsedTime ();
211+ this ->printMsg (" Trackings computed" , 1 , t.getElapsedTime () - previousStepTime,
212+ threadNumber_);
213+ previousStepTime = t.getElapsedTime ();
218214
219215 double const spacing = Spacing;
220216 bool const useGeometricSpacing = UseGeometricSpacing;
221217
222- ttkTrackingFromPersistenceDiagrams::buildMesh (
223- triangulation, allTrackings, allTrackingsCosts, allTrackingsMeanPersistence,
224- useGeometricSpacing, spacing, points, criticalPointTracking,
225- pointsCriticalType, timeScalars, lengthScalars, globalVertexIds,
226- connectedComponentIds, costs, averagePersistences, typesArrayLimits);
227-
228- output->ShallowCopy (criticalPointTracking);
229-
230- double Mesh_RT = timer.getElapsedTime () - clock;
231- std::cout << std::fixed << " DiagramComputationRT = " << Diagram_RT
232- << " , PerformMatchingRT = " << Matching_RT
233- << " , PerformTrackingRT = " << Tracking_RT
234- << " , BuildMeshRT = " << Mesh_RT << std::endl;
218+ ttkTrackingFromPersistenceDiagrams::buildMeshAlt (
219+ triangulation, allTrackings, allTrackingsCosts,
220+ allTrackingsInstantPersistence, useGeometricSpacing, spacing, points,
221+ outputMesh, pointsCriticalType, timeScalars, lengthScalars, globalVertexIds,
222+ connectedComponentIds, costs, averagePersistences, integratedPersistences,
223+ maximalPersistences, minimalPersistences, instantPersistences,
224+ typesArrayLimits);
225+
226+ this ->printMsg (
227+ " Mesh built" , 1 , t.getElapsedTime () - previousStepTime, threadNumber_);
228+ this ->printMsg (" Total run time " , 1 , t.getElapsedTime (), this ->threadNumber_ );
229+
230+ output->ShallowCopy (outputMesh);
231+
235232 return 1 ;
236233}
237234
238235int ttkTrackingFromFields::RequestData (vtkInformation *ttkNotUsed (request),
239236 vtkInformationVector **inputVector,
240237 vtkInformationVector *outputVector) {
241238
242- ttk::Timer timer;
243-
244239 auto input = vtkDataSet::GetData (inputVector[0 ]);
245240 auto output = vtkUnstructuredGrid::GetData (outputVector);
246241 ttk::Triangulation *triangulation = ttkAlgorithm::GetTriangulation (input);
@@ -306,7 +301,7 @@ int ttkTrackingFromFields::RequestData(vtkInformation *ttkNotUsed(request),
306301 std::string const algorithm = DistanceAlgorithm;
307302 int const pvalg = PVAlgorithm;
308303 bool useTTKMethod = false ;
309- bool criticalPointTracking = (pvalg == 2 );
304+ bool trackWithCriticalPoints = (pvalg == 2 );
310305
311306 if (pvalg >= 0 ) {
312307 switch (pvalg) {
@@ -363,8 +358,6 @@ int ttkTrackingFromFields::RequestData(vtkInformation *ttkNotUsed(request),
363358 }
364359 this ->setInputOffsets (inputOrders);
365360
366- double clock = timer.getElapsedTime ();
367-
368361 int status = 0 ;
369362 this ->printMsg (" Tracking trajectories over " + std::to_string (fieldNumber)
370363 + " timesteps" );
@@ -373,7 +366,7 @@ int ttkTrackingFromFields::RequestData(vtkInformation *ttkNotUsed(request),
373366 inputScalarFields[0 ]->GetDataType (), triangulation->getType (),
374367 (status = this ->trackWithPersistenceMatching <VTK_TT, TTK_TT>(
375368 output, fieldNumber, (TTK_TT *)triangulation->getData ())));
376- } else if (useTTKMethod && criticalPointTracking ) {
369+ } else if (useTTKMethod && trackWithCriticalPoints ) {
377370 ttkVtkTemplateMacro (
378371 inputScalarFields[0 ]->GetDataType (), triangulation->getType (),
379372 (status = this ->trackWithCriticalPointMatching <VTK_TT, TTK_TT>(
@@ -382,7 +375,5 @@ int ttkTrackingFromFields::RequestData(vtkInformation *ttkNotUsed(request),
382375 this ->printMsg (" The specified matching method is not supported." );
383376 }
384377
385- double total_rt = timer.getElapsedTime () - clock;
386- std::cout << " TrackingMethodTime = " << total_rt << std::endl;
387378 return status;
388379}
0 commit comments